From 44a5b930be57e5ab4dc16d18c0b7a7b67ee7c146 Mon Sep 17 00:00:00 2001 From: Auke Klazema <klazema@astron.nl> Date: Mon, 28 Jan 2019 09:56:42 +0000 Subject: [PATCH] task SW-575: Change location of checking if enough complex values are given --- MAC/APL/PIC/RSP_Driver/src/rspctl.cc | 34 +++++++++++++++------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/MAC/APL/PIC/RSP_Driver/src/rspctl.cc b/MAC/APL/PIC/RSP_Driver/src/rspctl.cc index 100d822ee56..2e3b38a353f 100644 --- a/MAC/APL/PIC/RSP_Driver/src/rspctl.cc +++ b/MAC/APL/PIC/RSP_Driver/src/rspctl.cc @@ -206,7 +206,7 @@ void WeightsCommand::send() setweights.rcumask = getRCUMask(); logMessage(cerr,formatString("rcumask.count()=%d",setweights.rcumask.count())); - int nBanks = (MAX_BITS_PER_SAMPLE / itsBitsPerSample); + int nBanks = (MAX_BITS_PER_SAMPLE / itsBitsPerSample); setweights.weights().resize(1, setweights.rcumask.count(), nBanks, maxBeamletsPerBank(itsBitsPerSample)); //bitset<maxBeamlets(bitsPerSample)> beamlet_mask = getBEAMLETSMask(); @@ -216,25 +216,27 @@ void WeightsCommand::send() setweights.weights() = itsWeights; int rcunr = 0; int max_beamlets = maxBeamlets(itsBitsPerSample); - bool multiple_values = (m_values.size() > 1); + bool multiple_values = (m_values.size() > 1); for (int rcu = 0; rcu < MAX_RCUS; rcu++) { if (setweights.rcumask.test(rcu)) { - std::list<complex<double>>::iterator itr = m_values.begin(); + std::list<complex<double>>::iterator itr = m_values.begin(); for (int beamlet = 0; beamlet < max_beamlets; beamlet++) { if (beamlet_mask.test(beamlet)) { - complex<double> value = *itr; - value *= (1<<14); // -.99999 should become -16383 and 1 should become 16384 - int plane = beamlet / maxBeamletsPerBank(itsBitsPerSample); - int beamletnr = beamlet % maxBeamletsPerBank(itsBitsPerSample); - setweights.weights()(0,rcunr,plane,beamletnr) = complex<int16>((int16)value.real(), (int16)value.imag()); - //setweights.weights()(0,rcunr,plane,beamletnr) = complex<int16>(10+plane, beamletnr); // for testing - if(multiple_values) { // advance value if we have multiple values otherwise use the single value for all beamlets - itr++; - if(itr == m_values.end()) { - logMessage(cerr,formatString("Error: not enough complex numbers for the amount of beamlets")); - rspctl_exit_code = EXIT_FAILURE; - } - } + if(itr != m_values.end()) { + complex<double> value = *itr; + value *= (1<<14); // -.99999 should become -16383 and 1 should become 16384 + int plane = beamlet / maxBeamletsPerBank(itsBitsPerSample); + int beamletnr = beamlet % maxBeamletsPerBank(itsBitsPerSample); + setweights.weights()(0,rcunr,plane,beamletnr) = complex<int16>((int16)value.real(), (int16)value.imag()); + //setweights.weights()(0,rcunr,plane,beamletnr) = complex<int16>(10+plane, beamletnr); // for testing + if(multiple_values) { // advance value if we have multiple values otherwise use the single value for all beamlets + itr++; + } + } + else { + logMessage(cerr,formatString("Error: not enough complex numbers for the amount of beamlets")); + rspctl_exit_code = EXIT_FAILURE; + } } } // beamlet rcunr++; -- GitLab