diff --git a/RTCP/CNProc/src/CN_Processing.cc b/RTCP/CNProc/src/CN_Processing.cc index 045be583cdd116308f10b5f9a5b08a6c03340af9..9d948d25d2b21a643a1e81dee55a6f6d0aded483 100644 --- a/RTCP/CNProc/src/CN_Processing.cc +++ b/RTCP/CNProc/src/CN_Processing.cc @@ -130,18 +130,18 @@ template <typename SAMPLE_TYPE> void CN_Processing<SAMPLE_TYPE>::preprocess(CN_C itsNrStations = configuration.nrStations(); + itsNrBeamFormedStations = configuration.nrMergedStations(); itsNrPencilBeams = configuration.nrPencilBeams(); itsNrSubbands = configuration.nrSubbands(); itsNrSubbandsPerPset = configuration.nrSubbandsPerPset(); itsNrStokes = configuration.nrStokes(); itsOutputPsetSize = outputPsets.size(); itsCenterFrequencies = configuration.refFreqs(); + itsFlysEye = configuration.flysEye(); unsigned nrChannels = configuration.nrChannelsPerSubband(); unsigned nrSamplesPerIntegration = configuration.nrSamplesPerIntegration(); unsigned nrSamplesPerStokesIntegration = configuration.nrSamplesPerStokesIntegration(); - unsigned nrBeamFormedStations = configuration.nrMergedStations(); - unsigned nrBaselines = nrBeamFormedStations * (nrBeamFormedStations + 1) / 2; // Each phase (e.g., transpose, PPF, correlator) reads from an input data // set and writes to an output data set. To save memory, a few memory buffers @@ -150,7 +150,7 @@ template <typename SAMPLE_TYPE> void CN_Processing<SAMPLE_TYPE>::preprocess(CN_C // Since some buffers (arenas) are used multiple times, we use multiple // Allocators for a single arena. - itsPlan = new CN_ProcessingPlan<SAMPLE_TYPE>( configuration, itsIsTransposeInput, itsIsTransposeOutput, nrBaselines ); + itsPlan = new CN_ProcessingPlan<SAMPLE_TYPE>( configuration, itsIsTransposeInput, itsIsTransposeOutput ); // calculate what to calculate, what goes where, etc itsPlan->assignArenas(); @@ -321,7 +321,7 @@ template <typename SAMPLE_TYPE> void CN_Processing<SAMPLE_TYPE>::calculateCohere LOG_DEBUG(std::setprecision(12) << "core " << itsLocationInfo.rank() << ": start calculating coherent Stokes at " << MPI_Wtime()); #endif // HAVE_MPI computeTimer.start(); - itsCoherentStokes->calculateCoherent(itsPlan->itsBeamFormedData,itsPlan->itsCoherentStokesData,itsNrPencilBeams); + itsCoherentStokes->calculateCoherent(itsPlan->itsBeamFormedData,itsPlan->itsCoherentStokesData,itsFlysEye ? itsNrBeamFormedStations : itsNrPencilBeams); computeTimer.stop(); } diff --git a/RTCP/CNProc/src/CN_Processing.h b/RTCP/CNProc/src/CN_Processing.h index 2255b198ea2814fee1e30c3a359674c4bde00703..bca197588248f487bca00fe0276e99fdc43d48eb 100644 --- a/RTCP/CNProc/src/CN_Processing.h +++ b/RTCP/CNProc/src/CN_Processing.h @@ -92,6 +92,8 @@ template <typename SAMPLE_TYPE> class CN_Processing : public CN_Processing_Base, #endif unsigned itsNrStations; + unsigned itsNrBeamFormedStations; + bool itsFlysEye; unsigned itsNrPencilBeams; unsigned itsNrSubbands; unsigned itsNrSubbandsPerPset; diff --git a/RTCP/IONProc/src/OutputSection.cc b/RTCP/IONProc/src/OutputSection.cc index 5a7d664e7562cd01c217a9e07e9b14950c89906e..956fbb9d3403246fa6bfda3067fd023268a461fe 100644 --- a/RTCP/IONProc/src/OutputSection.cc +++ b/RTCP/IONProc/src/OutputSection.cc @@ -71,7 +71,7 @@ void OutputSection::preprocess(const Parset *ps) CN_Configuration configuration(*ps); // allocate output structures and temporary data holders - itsPlan = new CN_ProcessingPlan<>( configuration, false, true, ps->nrBaselines() ); + itsPlan = new CN_ProcessingPlan<>( configuration, false, true ); itsPlan->removeNonOutputs(); itsPlan->allocateOutputs( hugeMemoryAllocator ); itsOutputs.resize(itsPlan->nrOutputs()); @@ -92,7 +92,7 @@ void OutputSection::preprocess(const Parset *ps) unsigned subbandNumber = itsPsetIndex * itsNrSubbandsPerPset + subband; if (subbandNumber < itsNrSubbands) { - itsSumPlans[subband] = new CN_ProcessingPlan<>( configuration, false, true, ps->nrBaselines() ); + itsSumPlans[subband] = new CN_ProcessingPlan<>( configuration, false, true ); itsSumPlans[subband]->removeNonOutputs(); // create data structures to accumulate data, if needed diff --git a/RTCP/IONProc/src/OutputThread.cc b/RTCP/IONProc/src/OutputThread.cc index 647b26ef5fb73d5169ff837e7e995ab3148125c4..8dcb41628a8507aa5006adae79b610a34c0aea5b 100644 --- a/RTCP/IONProc/src/OutputThread.cc +++ b/RTCP/IONProc/src/OutputThread.cc @@ -54,7 +54,7 @@ OutputThread::OutputThread(const unsigned subband, const Parset &ps ) // transpose the data holders: create queues streams for the output streams // itsPlans is the owner of the pointers to sample data structures for (unsigned i = 0; i < maxSendQueueSize; i ++) { - CN_ProcessingPlan<> *plan = new CN_ProcessingPlan<>( configuration, false, true, ps.nrBaselines() ); + CN_ProcessingPlan<> *plan = new CN_ProcessingPlan<>( configuration, false, true ); plan->removeNonOutputs(); plan->allocateOutputs( hugeMemoryAllocator ); diff --git a/RTCP/Interface/include/Interface/CN_ProcessingPlan.h b/RTCP/Interface/include/Interface/CN_ProcessingPlan.h index 524b9030c015233310f272129b9204cf09d971fc..7d7c2286a729378155089d5859ab5c665748c463 100644 --- a/RTCP/Interface/include/Interface/CN_ProcessingPlan.h +++ b/RTCP/Interface/include/Interface/CN_ProcessingPlan.h @@ -48,12 +48,11 @@ namespace RTCP { template <typename SAMPLE_TYPE = i8complex> class CN_ProcessingPlan: public ProcessingPlan { public: - CN_ProcessingPlan( CN_Configuration &configuration, bool isInput, bool isOutput, unsigned nrBaselines ); + CN_ProcessingPlan( CN_Configuration &configuration, bool isInput, bool isOutput ); virtual ~CN_ProcessingPlan(); const bool itsIsTransposeInput; const bool itsIsTransposeOutput; - const unsigned itsNrBaselines; InputData<SAMPLE_TYPE> *itsInputData; SubbandMetaData *itsInputSubbandMetaData; diff --git a/RTCP/Interface/include/Interface/Parset.h b/RTCP/Interface/include/Interface/Parset.h index 8849bbf3612b95fb35140e5c17dc6b11e304e1be..1e2d1f29fd461a62a4b81bcf7975ca47e7f68c5d 100644 --- a/RTCP/Interface/include/Interface/Parset.h +++ b/RTCP/Interface/include/Interface/Parset.h @@ -109,7 +109,6 @@ public: string getMSBaseDir() const; string getTransportType(const string& prefix) const; string getModeName() const; - bool outputIncoherentStokesI() const; bool outputFilteredData() const; bool outputCorrelatedData() const; @@ -304,7 +303,7 @@ inline unsigned Parset::nrStokes() const { if( getModeName() == "IncoherentStokesI" || getModeName() == "CoherentStokesI" - || getBool("Observation.outputIncoherentStokesI") ) { + || getBool("Observation.outputIncoherentStokesI",false) ) { return 1; } else if( getModeName() == "IncoherentAllStokes" || getModeName() == "CoherentAllStokes" ) { diff --git a/RTCP/Interface/src/CN_ProcessingPlan.cc b/RTCP/Interface/src/CN_ProcessingPlan.cc index acb34daedc8cf0541c65fa3148333c1d38976228..d2f84eec699832da6eadebbc60224145349ed9dd 100644 --- a/RTCP/Interface/src/CN_ProcessingPlan.cc +++ b/RTCP/Interface/src/CN_ProcessingPlan.cc @@ -29,10 +29,10 @@ namespace RTCP { // shortcut to automatically name the data sets #define TRANSFORM(source,set) transform(source,set,#set) -template <typename SAMPLE_TYPE> CN_ProcessingPlan<SAMPLE_TYPE>::CN_ProcessingPlan( CN_Configuration &configuration, bool isInput, bool isOutput, unsigned nrBaselines ): +template <typename SAMPLE_TYPE> CN_ProcessingPlan<SAMPLE_TYPE>::CN_ProcessingPlan( CN_Configuration &configuration, bool isInput, bool isOutput ) +: itsIsTransposeInput(isInput), itsIsTransposeOutput(isOutput), - itsNrBaselines(nrBaselines), itsInputData(0), itsInputSubbandMetaData(0), itsSubbandMetaData(0), @@ -47,6 +47,8 @@ template <typename SAMPLE_TYPE> CN_ProcessingPlan<SAMPLE_TYPE>::CN_ProcessingPla { // in fly's eye mode, every station is a beam const unsigned nrBeams = configuration.flysEye() ? configuration.nrMergedStations() : configuration.nrPencilBeams(); + + const unsigned nrBaselines = configuration.nrMergedStations() * (configuration.nrMergedStations() + 1)/2; if (itsIsTransposeInput) { std::vector<unsigned> &outputPsets = configuration.outputPsets(); @@ -77,7 +79,7 @@ template <typename SAMPLE_TYPE> CN_ProcessingPlan<SAMPLE_TYPE>::CN_ProcessingPla ); itsCorrelatedData = new CorrelatedData( - itsNrBaselines, + nrBaselines, configuration.nrChannelsPerSubband() );