From f3bf2ea4e166d03a7ae591484b6e034e1db2a304 Mon Sep 17 00:00:00 2001 From: Jan David Mol <mol@astron.nl> Date: Thu, 6 Dec 2012 16:01:41 +0000 Subject: [PATCH] Task #3696: Renamed sampleRate() to subbandBandwidth(), nrSubbandSamples() to nrSamplesPerSubband(), and pencilBeam* to TAB* --- RTCP/CNProc/src/AsyncTranspose.h | 2 +- RTCP/CNProc/src/BeamFormer.cc | 8 +- RTCP/CNProc/src/CN_Processing.cc | 30 ++++---- RTCP/CNProc/src/CN_Processing.h | 5 +- RTCP/CNProc/src/Dedispersion.cc | 2 +- RTCP/CNProc/src/LocationInfo.cc | 6 ++ RTCP/CNProc/test/tCN_Processing.cc | 18 ++--- RTCP/CNProc/test/tInversePPF.cc | 8 +- .../IONProc/src/BeamletBufferToComputeNode.cc | 44 +++++------ RTCP/IONProc/src/BeamletBufferToComputeNode.h | 6 +- RTCP/IONProc/src/Delays.cc | 28 +++---- RTCP/IONProc/src/Delays.h | 8 +- RTCP/IONProc/src/InputSection.cc | 2 +- RTCP/IONProc/src/generateDelays.cc | 14 ++-- RTCP/IONProc/test/tDelayCompensation.cc | 8 +- RTCP/Interface/include/Interface/Parset.h | 74 +++++++++++-------- RTCP/Interface/src/Parset.cc | 6 +- RTCP/Interface/src/Stream.cc | 2 +- RTCP/Storage/src/MSWriterDAL.cc | 10 +-- RTCP/Storage/src/TBB_Writer.cc | 2 +- 20 files changed, 151 insertions(+), 132 deletions(-) diff --git a/RTCP/CNProc/src/AsyncTranspose.h b/RTCP/CNProc/src/AsyncTranspose.h index f74538454fb..9c7d36afb96 100644 --- a/RTCP/CNProc/src/AsyncTranspose.h +++ b/RTCP/CNProc/src/AsyncTranspose.h @@ -53,7 +53,7 @@ template <typename SAMPLE_TYPE> class AsyncTranspose unsigned itsNrSubbands; unsigned itsNrSubbandsPerPset; - unsigned itsNrPencilBeams; + unsigned itsNrTABs; // A mapping that tells us, if we receive a message from a source, // to which pset that source belongs. diff --git a/RTCP/CNProc/src/BeamFormer.cc b/RTCP/CNProc/src/BeamFormer.cc index 1c2c04e01aa..3c6f3065b47 100644 --- a/RTCP/CNProc/src/BeamFormer.cc +++ b/RTCP/CNProc/src/BeamFormer.cc @@ -30,18 +30,18 @@ BeamFormer::BeamFormer(const Parset &parset) itsValidStations(BEST_NRBEAMS), itsNrChannels(parset.nrChannelsPerSubband()), itsNrSamples(parset.CNintegrationSteps()), - itsChannelBandwidth(parset.sampleRate() / parset.CNintegrationSteps()) + itsChannelBandwidth(parset.subbandBandwidth() / parset.CNintegrationSteps()) { initStationMergeMap(parset.tabList()); } Matrix<std::vector<unsigned> > BeamFormer::initStationIndices(const Parset &parset) { - Matrix<std::vector<unsigned> > indexMatrix(parset.nrBeams(), parset.maxNrPencilBeams()); + Matrix<std::vector<unsigned> > indexMatrix(parset.nrBeams(), parset.maxNrTABs()); for (unsigned sap = 0; sap < parset.nrBeams(); sap++) { - for (unsigned pencil = 0; pencil < parset.nrPencilBeams(sap); pencil++) { - const std::vector<std::string> stations = parset.pencilBeamStationList(sap, pencil); + for (unsigned pencil = 0; pencil < parset.nrTABs(sap); pencil++) { + const std::vector<std::string> stations = parset.TABStationList(sap, pencil); std::vector<unsigned> &indexList = indexMatrix[sap][pencil]; indexList.resize(stations.size()); diff --git a/RTCP/CNProc/src/CN_Processing.cc b/RTCP/CNProc/src/CN_Processing.cc index d33f7400dca..fb9d3488d0c 100644 --- a/RTCP/CNProc/src/CN_Processing.cc +++ b/RTCP/CNProc/src/CN_Processing.cc @@ -155,9 +155,9 @@ template <typename SAMPLE_TYPE> CN_Processing<SAMPLE_TYPE>::CN_Processing(const unsigned nrMergedStations = parset.nrMergedStations(); itsNrSubbands = parset.nrSubbands(); itsSubbandToSAPmapping = parset.subbandToSAPmapping(); - itsNrPencilBeams = parset.nrPencilBeams(); - itsMaxNrPencilBeams = parset.maxNrPencilBeams(); - itsTotalNrPencilBeams = parset.totalNrPencilBeams(); + itsNrTABs = parset.nrTABs(); + itsMaxNrTABs = parset.maxNrTABs(); + itsTotalNrTABs = parset.totalNrTABs(); itsNrSubbandsPerPset = parset.nrSubbandsPerPset(); itsCenterFrequencies = parset.subbandToFrequencyMapping(); itsNrChannels = parset.nrChannelsPerSubband(); @@ -175,7 +175,7 @@ template <typename SAMPLE_TYPE> CN_Processing<SAMPLE_TYPE>::CN_Processing(const if (itsHasPhaseOne) { itsFirstInputSubband = new Ring(0, itsNrSubbandsPerPset, phaseTwoCoreIndex, phaseOneTwoCores.size()); itsInputData = new InputData<SAMPLE_TYPE>(itsPhaseTwoPsetSize, parset.nrSamplesToCNProc(), itsBigAllocator); - itsInputSubbandMetaData = new SubbandMetaData(itsPhaseTwoPsetSize, itsMaxNrPencilBeams + 1); + itsInputSubbandMetaData = new SubbandMetaData(itsPhaseTwoPsetSize, itsMaxNrTABs + 1); // skip ahead to the first block itsFirstInputSubband->skipFirstBlocks(itsBlock); @@ -190,7 +190,7 @@ template <typename SAMPLE_TYPE> CN_Processing<SAMPLE_TYPE>::CN_Processing(const // skip ahead to the first block itsCurrentSubband->skipFirstBlocks(itsBlock); - itsTransposedSubbandMetaData = new SubbandMetaData(itsNrStations, itsTotalNrPencilBeams + 1); + itsTransposedSubbandMetaData = new SubbandMetaData(itsNrStations, itsTotalNrTABs + 1); itsTransposedInputData = new TransposedData<SAMPLE_TYPE>(itsNrStations, parset.nrSamplesToCNProc(), itsBigAllocator); #if defined HAVE_MPI @@ -198,7 +198,7 @@ template <typename SAMPLE_TYPE> CN_Processing<SAMPLE_TYPE>::CN_Processing(const LOG_DEBUG_STR("Processes subbands " << itsCurrentSubband->list()); #endif // HAVE_MPI - itsPPF = new PPF<SAMPLE_TYPE>(itsNrStations, itsNrChannels, itsNrSamplesPerIntegration, parset.sampleRate() / itsNrChannels, parset.delayCompensation() || itsTotalNrPencilBeams > 1 || parset.correctClocks(), parset.correctBandPass(), itsLocationInfo.rank() == 0); + itsPPF = new PPF<SAMPLE_TYPE>(itsNrStations, itsNrChannels, itsNrSamplesPerIntegration, parset.subbandBandwidth() / itsNrChannels, parset.delayCompensation() || itsTotalNrTABs > 1 || parset.correctClocks(), parset.correctBandPass(), itsLocationInfo.rank() == 0); itsFilteredData = new FilteredData(parset.nrStations(), parset.nrChannelsPerSubband(), parset.CNintegrationSteps(), itsBigAllocator); if (parset.onlineFlagging() && parset.onlinePreCorrelationFlagging()) { @@ -243,10 +243,10 @@ template <typename SAMPLE_TYPE> CN_Processing<SAMPLE_TYPE>::CN_Processing(const itsBeamFormedData = new BeamFormedData(BeamFormer::BEST_NRBEAMS, itsNrChannels, itsNrSamplesPerIntegration, itsBigAllocator); if (LOG_CONDITION) - LOG_DEBUG_STR("Considering dedispersion for " << itsTotalNrPencilBeams << " pencil beams"); + LOG_DEBUG_STR("Considering dedispersion for " << itsTotalNrTABs << " pencil beams"); - itsCoherentDMs.resize(itsTotalNrPencilBeams, 0.0); - itsIncoherentDMs.resize(itsTotalNrPencilBeams, 0.0); + itsCoherentDMs.resize(itsTotalNrTABs, 0.0); + itsIncoherentDMs.resize(itsTotalNrTABs, 0.0); bool dedisperseCoherent = false; bool dedisperseIncoherent = false; @@ -254,9 +254,9 @@ template <typename SAMPLE_TYPE> CN_Processing<SAMPLE_TYPE>::CN_Processing(const unsigned nrSAPs = parset.nrBeams(); for (unsigned sap = 0; sap < nrSAPs; sap++) { - for (unsigned pencil = 0; pencil < itsNrPencilBeams[sap]; pencil++) { + for (unsigned pencil = 0; pencil < itsNrTABs[sap]; pencil++) { double DM = parset.dispersionMeasure(sap, pencil); - if(LOG_CONDITION) LOG_DEBUG_STR("DM for beam " << sap << " pencil " << pencil << " is " << DM); + if(LOG_CONDITION) LOG_DEBUG_STR("DM for beam " << sap << " TAB " << pencil << " is " << DM); if (DM != 0.0) { if (parset.isCoherent(sap, pencil)) { @@ -309,10 +309,10 @@ template <typename SAMPLE_TYPE> CN_Processing<SAMPLE_TYPE>::CN_Processing(const itsBeamArena = new FixedArena(itsBeamMemory.ptr, max_totalsize); itsBeamAllocator = new SparseSetAllocator(*itsBeamArena.get()); // allocates consecutively - itsPreTransposeBeamFormedData.resize(itsMaxNrPencilBeams); + itsPreTransposeBeamFormedData.resize(itsMaxNrTABs); if (LOG_CONDITION) { - LOG_DEBUG_STR("MaxNrPencilBeams = " << itsMaxNrPencilBeams << ", TotalNrPencilBeams = " << itsTotalNrPencilBeams); + LOG_DEBUG_STR("MaxNrTABs = " << itsMaxNrTABs << ", TotalNrTABs = " << itsTotalNrTABs); LOG_DEBUG_STR("Allocated " << max_totalsize << " bytes for beam forming."); } } @@ -383,7 +383,7 @@ template <typename SAMPLE_TYPE> double CN_Processing<SAMPLE_TYPE>::blockAge() template <typename SAMPLE_TYPE> void CN_Processing<SAMPLE_TYPE>::receiveInput() { - SubbandMetaData metaData(1, itsMaxNrPencilBeams + 1); + SubbandMetaData metaData(1, itsMaxNrTABs + 1); for (unsigned stat = 0; stat < itsNrStations; stat ++) { if (LOG_CONDITION) @@ -534,7 +534,7 @@ template <typename SAMPLE_TYPE> int CN_Processing<SAMPLE_TYPE>::transposeBeams(u unsigned subband = *itsCurrentSubband; unsigned sap = itsSubbandToSAPmapping[subband]; - unsigned nrBeams = itsNrPencilBeams[sap]; + unsigned nrBeams = itsNrTABs[sap]; unsigned coherentPart = itsTranspose2Logic.myPart(subband, true); unsigned incoherentPart = itsTranspose2Logic.myPart(subband, false); diff --git a/RTCP/CNProc/src/CN_Processing.h b/RTCP/CNProc/src/CN_Processing.h index 991b60b3852..a1f31471e91 100644 --- a/RTCP/CNProc/src/CN_Processing.h +++ b/RTCP/CNProc/src/CN_Processing.h @@ -111,8 +111,8 @@ template <typename SAMPLE_TYPE> class CN_Processing : public CN_Processing_Base unsigned itsNrSlotsInFrame; unsigned itsNrSubbands; std::vector<unsigned> itsSubbandToSAPmapping; - std::vector<unsigned> itsNrPencilBeams; - unsigned itsMaxNrPencilBeams, itsTotalNrPencilBeams; + std::vector<unsigned> itsNrTABs; + unsigned itsMaxNrTABs, itsTotalNrTABs; unsigned itsNrSubbandsPerPset; unsigned itsNrSubbandsPerPart; unsigned itsNrChannels; @@ -125,6 +125,7 @@ template <typename SAMPLE_TYPE> class CN_Processing : public CN_Processing_Base const Parset &itsParset; const std::vector<SmartPtr<Stream> > &itsInputStreams; + SmartPtr<Stream> itsCorrelatedDataStream; SmartPtr<Stream> itsFinalBeamFormedDataStream; SmartPtr<Stream> itsTriggerDataStream; diff --git a/RTCP/CNProc/src/Dedispersion.cc b/RTCP/CNProc/src/Dedispersion.cc index 9fceb5e91c6..908eae519d2 100644 --- a/RTCP/CNProc/src/Dedispersion.cc +++ b/RTCP/CNProc/src/Dedispersion.cc @@ -29,7 +29,7 @@ Dedispersion::Dedispersion(const Parset &parset, const std::vector<unsigned> &su itsNrChannels(parset.nrChannelsPerSubband()), itsNrSamplesPerIntegration(parset.CNintegrationSteps()), itsFFTsize(parset.dedispersionFFTsize()), - itsChannelBandwidth(parset.sampleRate() / itsNrChannels), + itsChannelBandwidth(parset.subbandBandwidth() / itsNrChannels), itsFFTedBuffer(NR_POLARIZATIONS, itsFFTsize), itsAllocator(allocator) { diff --git a/RTCP/CNProc/src/LocationInfo.cc b/RTCP/CNProc/src/LocationInfo.cc index b08b5d2e01b..3fd649893da 100644 --- a/RTCP/CNProc/src/LocationInfo.cc +++ b/RTCP/CNProc/src/LocationInfo.cc @@ -43,8 +43,14 @@ LocationInfo::LocationInfo() itsNrPsets = boost::lexical_cast<unsigned>(nrPsetsStr); itsPsetSize = boost::lexical_cast<unsigned>(psetSizeStr); +#if defined CLUSTER_SCHEDULING + itsPsetNumber = 0; + itsRankInPset = itsRank; +#else itsPsetNumber = itsRank % itsNrPsets; itsRankInPset = itsRank / itsNrPsets; +#endif + #endif ASSERT( itsPsetNumber < itsNrPsets ); diff --git a/RTCP/CNProc/test/tCN_Processing.cc b/RTCP/CNProc/test/tCN_Processing.cc index a8ae73b64d4..4ed3d9470b4 100644 --- a/RTCP/CNProc/test/tCN_Processing.cc +++ b/RTCP/CNProc/test/tCN_Processing.cc @@ -75,7 +75,7 @@ template <> inline void toComplex<i16complex>(double phi, i16complex &z) } -template <typename SAMPLE_TYPE> void setSubbandTestPattern(SubbandMetaData &metaData, TransposedData<SAMPLE_TYPE> &transposedData, unsigned nrStations, double signalFrequency, double sampleRate) +template <typename SAMPLE_TYPE> void setSubbandTestPattern(SubbandMetaData &metaData, TransposedData<SAMPLE_TYPE> &transposedData, unsigned nrStations, double signalFrequency, double subbandBandwidth) { // Simulate a monochrome complex signal into the PPF, with station 1 at a // distance of .25 labda to introduce a delay. Also, a few samples can be @@ -97,7 +97,7 @@ template <typename SAMPLE_TYPE> void setSubbandTestPattern(SubbandMetaData &meta } for (unsigned time = 0; time < transposedData.samples[0].size(); time ++) { - double phi = 2 * M_PI * signalFrequency * time / sampleRate; + double phi = 2 * M_PI * signalFrequency * time / subbandBandwidth; SAMPLE_TYPE sample; toComplex(phi, sample); @@ -178,13 +178,13 @@ void checkCorrelatorTestPattern(const CorrelatedData &correlatedData, unsigned n template <typename SAMPLE_TYPE> void doWork() { unsigned nrStations = 288; - unsigned nrChannels = 64; + unsigned nrChannels = 256; unsigned nrSamplesPerIntegration = 196608 / nrChannels; - double sampleRate = 195312.5; - double centerFrequency = 384 * sampleRate; - double baseFrequency = centerFrequency - .5 * sampleRate; + double subbandBandwidth = 195312.5; + double centerFrequency = 384 * subbandBandwidth; + double baseFrequency = centerFrequency - .5 * subbandBandwidth; double testSignalChannel = nrChannels / 5.0; - double signalFrequency = baseFrequency + testSignalChannel * sampleRate / nrChannels; + double signalFrequency = baseFrequency + testSignalChannel * subbandBandwidth / nrChannels; unsigned nrHistorySamples = nrChannels > 1 ? nrChannels * (NR_TAPS - 1) : 0; unsigned nrSamplesToCNProc = nrChannels * nrSamplesPerIntegration + nrHistorySamples + 32 / sizeof(SAMPLE_TYPE[NR_POLARIZATIONS]); @@ -250,10 +250,10 @@ template <typename SAMPLE_TYPE> void doWork() CorrelatedData correlatedData(nrBeamFormedStations, nrChannels, nrChannels * nrSamplesPerIntegration); SubbandMetaData metaData(nrStations, 1); - PPF<SAMPLE_TYPE> ppf(nrStations, nrChannels, nrSamplesPerIntegration, sampleRate / nrChannels, true /* use delay compensation */, true /* use bandpass correction */, true /* verbose in filter bank */); + PPF<SAMPLE_TYPE> ppf(nrStations, nrChannels, nrSamplesPerIntegration, subbandBandwidth / nrChannels, true /* use delay compensation */, true /* use bandpass correction */, true /* verbose in filter bank */); Correlator correlator(beamFormer.getStationMapping(), nrChannels, nrSamplesPerIntegration); - setSubbandTestPattern(metaData, transposedData, nrStations, signalFrequency, sampleRate); + setSubbandTestPattern(metaData, transposedData, nrStations, signalFrequency, subbandBandwidth); for (unsigned stat = 0; stat < nrStations; stat ++) { static NSTimer ppfTimer("PPF", true); diff --git a/RTCP/CNProc/test/tInversePPF.cc b/RTCP/CNProc/test/tInversePPF.cc index e84c253ca48..d67c01d1f2b 100644 --- a/RTCP/CNProc/test/tInversePPF.cc +++ b/RTCP/CNProc/test/tInversePPF.cc @@ -55,9 +55,9 @@ static unsigned nrChannels = 1; // for the NuMoon pipeline, there are no separat //static unsigned nrSamplesPerIntegration = 768 * 256 / 4; // one quarter of a second static unsigned nrSamplesPerIntegration = 19648; // roughly 0.1 seconds //static unsigned nrSamplesPerIntegration = 64; -static double sampleRate = 195312.5; -static double centerFrequency = (nrSamplesPerIntegration / 2) * sampleRate; -static double signalFrequency = centerFrequency - (0.5 * sampleRate); +static double subbandBandwidth = 195312.5; +static double centerFrequency = (nrSamplesPerIntegration / 2) * subbandBandwidth; +static double signalFrequency = centerFrequency - (0.5 * subbandBandwidth); float originalStationPPFWeightsFloat[1024][16]; float* fftInData; @@ -158,7 +158,7 @@ static void fftTest() { // generate signal for (unsigned time = 0; time < onStationFilterSize; time++) { - double val = sin(signalFrequency * time / sampleRate); + double val = sin(signalFrequency * time / subbandBandwidth); fftInData[time] = val; inputData[time] = val; } diff --git a/RTCP/IONProc/src/BeamletBufferToComputeNode.cc b/RTCP/IONProc/src/BeamletBufferToComputeNode.cc index 93ef4d7ea5c..09f0b3596ea 100644 --- a/RTCP/IONProc/src/BeamletBufferToComputeNode.cc +++ b/RTCP/IONProc/src/BeamletBufferToComputeNode.cc @@ -68,20 +68,19 @@ template<typename SAMPLE_TYPE> BeamletBufferToComputeNode<SAMPLE_TYPE>::BeamletB itsLogPrefix = str(boost::format("[obs %u station %s] ") % ps.observationID() % stationName); - // TODO: make most of these const members - itsSampleRate = ps.sampleRate(); + itsSubbandBandwidth = ps.subbandBandwidth(); itsNrSubbands = ps.nrSubbands(); itsNrSubbandsPerPset = ps.nrSubbandsPerPset(); - itsNrSamplesPerSubband = ps.nrSubbandSamples(); + itsNrSamplesPerSubband = ps.nrSamplesPerSubband(); itsNrBeams = ps.nrBeams(); - itsMaxNrPencilBeams = ps.maxNrPencilBeams(); - itsNrPencilBeams = ps.nrPencilBeams(); + itsMaxNrTABs = ps.maxNrTABs(); + itsNrTABs = ps.nrTABs(); itsNrPhaseTwoPsets = ps.phaseTwoPsets().size(); itsCurrentPhaseOneTwoComputeCore = (itsBlockNumber * itsNrSubbandsPerPset) % itsNrPhaseOneTwoCoresPerPset; itsSampleDuration = ps.sampleDuration(); itsDelayCompensation = ps.delayCompensation(); itsCorrectClocks = ps.correctClocks(); - itsNeedDelays = (itsDelayCompensation || itsMaxNrPencilBeams > 1 || itsCorrectClocks) && itsNrInputs > 0; + itsNeedDelays = (itsDelayCompensation || itsMaxNrTABs > 1 || itsCorrectClocks) && itsNrInputs > 0; itsSubbandToSAPmapping = ps.subbandToSAPmapping(); if (haveStationInput) { @@ -89,7 +88,8 @@ template<typename SAMPLE_TYPE> BeamletBufferToComputeNode<SAMPLE_TYPE>::BeamletB itsSubbandToRSPslotMapping = ps.subbandToRSPslotMapping(stationName); } - itsCurrentTimeStamp = TimeStamp(static_cast<int64>(ps.startTime() * itsSampleRate + itsBlockNumber * itsNrSamplesPerSubband), ps.clockSpeed()); + itsCurrentTimeStamp = TimeStamp(static_cast<int64>(ps.startTime() * itsSubbandBandwidth + itsBlockNumber * itsNrSamplesPerSubband), ps.clockSpeed()); + itsIsRealTime = ps.realTime(); itsMaxNetworkDelay = ps.maxNetworkDelay(); itsNrHistorySamples = ps.nrHistorySamples(); @@ -102,12 +102,12 @@ template<typename SAMPLE_TYPE> BeamletBufferToComputeNode<SAMPLE_TYPE>::BeamletB LOG_DEBUG_STR(itsLogPrefix << "maxNetworkDelay = " << itsMaxNetworkDelay << " samples"); if (haveStationInput && itsNeedDelays) { - itsDelaysAtBegin.resize(itsNrBeams, itsMaxNrPencilBeams + 1); - itsDelaysAfterEnd.resize(itsNrBeams, itsMaxNrPencilBeams + 1); - itsBeamDirectionsAtBegin.resize(itsNrBeams, itsMaxNrPencilBeams + 1); - itsBeamDirectionsAfterEnd.resize(itsNrBeams, itsMaxNrPencilBeams + 1); + itsDelaysAtBegin.resize(itsNrBeams, itsMaxNrTABs + 1); + itsDelaysAfterEnd.resize(itsNrBeams, itsMaxNrTABs + 1); + itsBeamDirectionsAtBegin.resize(itsNrBeams, itsMaxNrTABs + 1); + itsBeamDirectionsAfterEnd.resize(itsNrBeams, itsMaxNrTABs + 1); - if (itsDelayCompensation || itsMaxNrPencilBeams > 1) { + if (itsDelayCompensation || itsMaxNrTABs > 1) { itsDelays = new Delays(ps, stationName, itsCurrentTimeStamp); itsDelays->start(); } @@ -120,8 +120,8 @@ template<typename SAMPLE_TYPE> BeamletBufferToComputeNode<SAMPLE_TYPE>::BeamletB itsDelayedStamps.resize(itsNrBeams); itsSamplesDelay.resize(itsNrBeams); - itsFineDelaysAtBegin.resize(itsNrBeams, itsMaxNrPencilBeams + 1); - itsFineDelaysAfterEnd.resize(itsNrBeams, itsMaxNrPencilBeams + 1); + itsFineDelaysAtBegin.resize(itsNrBeams, itsMaxNrTABs + 1); + itsFineDelaysAfterEnd.resize(itsNrBeams, itsMaxNrTABs + 1); itsFlags.resize(boost::extents[itsNrInputs][itsNrBeams]); #if defined HAVE_BGP_ION // FIXME: not in preprocess @@ -146,7 +146,7 @@ template<typename SAMPLE_TYPE> void BeamletBufferToComputeNode<SAMPLE_TYPE>::com #ifdef USE_VALGRIND for (unsigned beam = 0; beam < itsNrBeams; beam ++) - for (unsigned pencil = 0; pencil < itsMaxNrPencilBeams + 1; pencil ++) + for (unsigned pencil = 0; pencil < itsMaxNrTABs + 1; pencil ++) itsDelaysAfterEnd[beam][pencil] = 0; #endif @@ -154,14 +154,14 @@ template<typename SAMPLE_TYPE> void BeamletBufferToComputeNode<SAMPLE_TYPE>::com itsDelays->getNextDelays(itsBeamDirectionsAfterEnd, itsDelaysAfterEnd); else for (unsigned beam = 0; beam < itsNrBeams; beam ++) - for (unsigned pencil = 0; pencil < itsMaxNrPencilBeams + 1; pencil ++) + for (unsigned pencil = 0; pencil < itsMaxNrTABs + 1; pencil ++) itsDelaysAfterEnd[beam][pencil] = 0; // apply clock correction due to cable differences if (itsCorrectClocks) for (unsigned beam = 0; beam < itsNrBeams; beam ++) - for (unsigned pencil = 0; pencil < itsMaxNrPencilBeams + 1; pencil ++) + for (unsigned pencil = 0; pencil < itsMaxNrTABs + 1; pencil ++) itsDelaysAfterEnd[beam][pencil] += itsClockCorrectionTime; } @@ -190,7 +190,7 @@ template<typename SAMPLE_TYPE> void BeamletBufferToComputeNode<SAMPLE_TYPE>::com // time interval and is expressed in an entire amount of samples. // // We use the central pencil beam (#0) for the coarse delay compensation. - signed int coarseDelay = static_cast<signed int>(floor(0.5 * (itsDelaysAtBegin[beam][0] + itsDelaysAfterEnd[beam][0]) * itsSampleRate + 0.5)); + signed int coarseDelay = static_cast<signed int>(floor(0.5 * (itsDelaysAtBegin[beam][0] + itsDelaysAfterEnd[beam][0]) * itsSubbandBandwidth + 0.5)); // The fine delay is determined for the boundaries of the current // time interval and is expressed in seconds. @@ -199,7 +199,7 @@ template<typename SAMPLE_TYPE> void BeamletBufferToComputeNode<SAMPLE_TYPE>::com itsDelayedStamps[beam] -= coarseDelay; itsSamplesDelay[beam] = -coarseDelay; - for (unsigned pencil = 0; pencil < itsNrPencilBeams[beam] + 1; pencil ++) { + for (unsigned pencil = 0; pencil < itsNrTABs[beam] + 1; pencil ++) { // we don't do coarse delay compensation for the individual pencil beams to avoid complexity and overhead itsFineDelaysAtBegin[beam][pencil] = static_cast<float>(itsDelaysAtBegin[beam][pencil] - d); itsFineDelaysAfterEnd[beam][pencil] = static_cast<float>(itsDelaysAfterEnd[beam][pencil] - d); @@ -263,7 +263,7 @@ template<typename SAMPLE_TYPE> void BeamletBufferToComputeNode<SAMPLE_TYPE>::set unsigned beam = itsSubbandToSAPmapping[subband]; if (itsNeedDelays) { - for (unsigned p = 0; p < itsNrPencilBeams[beam] + 1; p ++) { + for (unsigned p = 0; p < itsNrTABs[beam] + 1; p ++) { struct SubbandMetaData::beamInfo &beamInfo = metaData.beams(psetIndex)[p]; beamInfo.delayAtBegin = itsFineDelaysAtBegin[beam][p]; @@ -319,7 +319,7 @@ template<typename SAMPLE_TYPE> void BeamletBufferToComputeNode<SAMPLE_TYPE>::toC Stream *stream = itsPhaseOneTwoStreams[psetIndex][itsCurrentPhaseOneTwoComputeCore]; - SubbandMetaData metaData(1, itsMaxNrPencilBeams + 1); + SubbandMetaData metaData(1, itsMaxNrTABs + 1); setMetaData(metaData, 0, subband); metaData.write(stream); @@ -329,7 +329,7 @@ template<typename SAMPLE_TYPE> void BeamletBufferToComputeNode<SAMPLE_TYPE>::toC #else // create and send all metadata in one "large" message, since initiating a message // has significant overhead in FCNP. - SubbandMetaData metaData(itsNrPhaseTwoPsets, itsMaxNrPencilBeams + 1); + SubbandMetaData metaData(itsNrPhaseTwoPsets, itsMaxNrTABs + 1); for (unsigned psetIndex = 0; psetIndex < itsNrPhaseTwoPsets; psetIndex ++) { unsigned subband = itsNrSubbandsPerPset * psetIndex + subbandBase; diff --git a/RTCP/IONProc/src/BeamletBufferToComputeNode.h b/RTCP/IONProc/src/BeamletBufferToComputeNode.h index d7bedb6cbf5..07d0fa3c086 100644 --- a/RTCP/IONProc/src/BeamletBufferToComputeNode.h +++ b/RTCP/IONProc/src/BeamletBufferToComputeNode.h @@ -101,8 +101,8 @@ template <typename SAMPLE_TYPE> class BeamletBufferToComputeNode { unsigned itsNrHistorySamples; unsigned itsNrInputs; unsigned itsNrBeams; - unsigned itsMaxNrPencilBeams; - std::vector<unsigned> itsNrPencilBeams; + unsigned itsMaxNrTABs; + std::vector<unsigned> itsNrTABs; unsigned itsCurrentPhaseOneTwoComputeCore; unsigned itsPsetNumber; @@ -110,7 +110,7 @@ template <typename SAMPLE_TYPE> class BeamletBufferToComputeNode { const std::vector<SmartPtr<BeamletBuffer<SAMPLE_TYPE> > > &itsBeamletBuffers; unsigned itsBlockNumber; SmartPtr<Delays> itsDelays; - double itsSampleRate, itsSampleDuration; + double itsSubbandBandwidth, itsSampleDuration; double itsClockCorrectionTime; std::vector<TimeStamp> itsDelayedStamps; diff --git a/RTCP/IONProc/src/Delays.cc b/RTCP/IONProc/src/Delays.cc index 1b2917d3d92..50ef5229db2 100644 --- a/RTCP/IONProc/src/Delays.cc +++ b/RTCP/IONProc/src/Delays.cc @@ -54,17 +54,17 @@ Delays::Delays(const Parset &parset, const string &stationName, const TimeStamp itsParset(parset), stop(false), // we need an extra entry for the central beam - itsBuffer(bufferSize, parset.nrBeams(), parset.maxNrPencilBeams() + 1), + itsBuffer(bufferSize, parset.nrBeams(), parset.maxNrTABs() + 1), head(0), tail(0), bufferFree(bufferSize), bufferUsed(0), itsNrCalcDelays(parset.nrCalcDelays()), itsNrBeams(parset.nrBeams()), - itsMaxNrPencilBeams(parset.maxNrPencilBeams()), - itsNrPencilBeams(parset.nrPencilBeams()), + itsMaxNrTABs(parset.maxNrTABs()), + itsNrTABs(parset.nrTABs()), itsStartTime(startTime), - itsNrSamplesPerSec(parset.nrSubbandSamples()), + itsNrSamplesPerSec(parset.nrSamplesPerSubband()), itsSampleDuration(parset.sampleDuration()), itsStationName(stationName), itsDelayTimer("delay producer", true, true) @@ -174,7 +174,7 @@ void Delays::mainLoop() for (uint b = 0; b < itsNrBeams; b ++) { MDirection::Convert &converter = itsConverters[itsDirectionTypes[b]]; - for (uint p = 0; p < itsNrPencilBeams[b] + 1; p ++) { + for (uint p = 0; p < itsNrTABs[b] + 1; p ++) { // Define the astronomical direction as a J2000 direction. MVDirection &sky = itsBeamDirections[b][p]; @@ -217,11 +217,11 @@ void Delays::mainLoop() void Delays::getNextDelays(Matrix<MVDirection> &directions, Matrix<double> &delays) { - ASSERTSTR(directions.num_elements() == itsNrBeams * (itsMaxNrPencilBeams + 1), - directions.num_elements() << " == " << itsNrBeams << "*" << (itsMaxNrPencilBeams + 1)); + ASSERTSTR(directions.num_elements() == itsNrBeams * (itsMaxNrTABs + 1), + directions.num_elements() << " == " << itsNrBeams << "*" << (itsMaxNrTABs + 1)); - ASSERTSTR(delays.num_elements() == itsNrBeams * (itsMaxNrPencilBeams + 1), - delays.num_elements() << " == " << itsNrBeams << "*" << (itsMaxNrPencilBeams + 1)); + ASSERTSTR(delays.num_elements() == itsNrBeams * (itsMaxNrTABs + 1), + delays.num_elements() << " == " << itsNrBeams << "*" << (itsMaxNrTABs + 1)); ASSERT(itsThread); @@ -233,7 +233,7 @@ void Delays::getNextDelays(Matrix<MVDirection> &directions, Matrix<double> &dela // copy the directions at itsBuffer[head] into the provided buffer, // and calculate the respective delays for (unsigned b = 0; b < itsNrBeams; b ++) { - for (unsigned p = 0; p < itsNrPencilBeams[b] + 1; p ++) { + for (unsigned p = 0; p < itsNrTABs[b] + 1; p ++) { const MVDirection &dir = itsBuffer[head][b][p]; directions[b][p] = dir; @@ -256,7 +256,7 @@ void Delays::setBeamDirections(const Parset &parset) // To do the coordinates properly, the offsets should be applied // in today's coordinates (JMEAN/JTRUE?), not J2000. - itsBeamDirections.resize(itsNrBeams, itsMaxNrPencilBeams + 1); + itsBeamDirections.resize(itsNrBeams, itsMaxNrTABs + 1); itsDirectionTypes.resize(itsNrBeams); for (unsigned beam = 0; beam < itsNrBeams; beam ++) { @@ -270,14 +270,14 @@ void Delays::setBeamDirections(const Parset &parset) // Split the \a dir vector into separate Direction objects. for (unsigned beam = 0; beam < itsNrBeams; beam ++) { const vector<double> beamDir = parset.getBeamDirection(beam); - const BeamCoordinates& pencilBeams = parset.pencilBeams(beam); + const BeamCoordinates& TABs = parset.TABs(beam); // add central beam coordinates for non-beamforming pipelines itsBeamDirections[beam][0] = MVDirection(beamDir[0], beamDir[1]); - for (unsigned pencil = 0; pencil < itsNrPencilBeams[beam]; pencil ++) { + for (unsigned pencil = 0; pencil < itsNrTABs[beam]; pencil ++) { // obtain pencil coordinate - const BeamCoord3D &pencilCoord = pencilBeams[pencil]; + const BeamCoord3D &pencilCoord = TABs[pencil]; // apply angle modification const double angle1 = beamDir[0] + pencilCoord[0]; diff --git a/RTCP/IONProc/src/Delays.h b/RTCP/IONProc/src/Delays.h index b876a96fe27..5600fe2b743 100644 --- a/RTCP/IONProc/src/Delays.h +++ b/RTCP/IONProc/src/Delays.h @@ -86,7 +86,7 @@ class Delays void start(); // get the set of directions (ITRF) and delays for the beams, for the next CN integration time - // Both matrices must have dimensions [itsNrBeams][itsMaxNrPencilBeams+1] + // Both matrices must have dimensions [itsNrBeams][itsMaxNrTABs+1] void getNextDelays(Matrix<casa::MVDirection> &directions, Matrix<double> &delays); private: @@ -134,10 +134,10 @@ class Delays // Beam info. const unsigned itsNrBeams; - const unsigned itsMaxNrPencilBeams; - const std::vector<unsigned> itsNrPencilBeams; + const unsigned itsMaxNrTABs; + const std::vector<unsigned> itsNrTABs; Vector<casa::MDirection::Types> itsDirectionTypes; - Matrix<casa::MVDirection> itsBeamDirections; // [itsNrBeams][itsNrPencilBeams+1] + Matrix<casa::MVDirection> itsBeamDirections; // [itsNrBeams][itsMaxNrTABs+1] // Sample timings. const TimeStamp itsStartTime; diff --git a/RTCP/IONProc/src/InputSection.cc b/RTCP/IONProc/src/InputSection.cc index 9fb8bb0675f..01ae4be085b 100644 --- a/RTCP/IONProc/src/InputSection.cc +++ b/RTCP/IONProc/src/InputSection.cc @@ -102,7 +102,7 @@ template<typename SAMPLE_TYPE> void InputSection<SAMPLE_TYPE>::createInputThread args.nrTimesPerPacket = parset.getInt32("OLAP.nrTimesInFrame"); args.nrSlotsPerPacket = parset.nrSlotsInFrame(); args.isRealTime = parset.realTime(); - args.startTime = TimeStamp(static_cast<int64>(parset.startTime() * parset.sampleRate()), parset.clockSpeed()); + args.startTime = TimeStamp(static_cast<int64>(parset.startTime() * parset.subbandBandwidth()), parset.clockSpeed()); itsInputThreads.resize(itsNrRSPboards); diff --git a/RTCP/IONProc/src/generateDelays.cc b/RTCP/IONProc/src/generateDelays.cc index 7343301b17f..9069016676b 100644 --- a/RTCP/IONProc/src/generateDelays.cc +++ b/RTCP/IONProc/src/generateDelays.cc @@ -53,13 +53,13 @@ void generateDelays( const string &parsetFilename, const string &station ) Parset parset(parsetFilename); unsigned nrBeams = parset.nrBeams(); - unsigned maxNrPencilBeams = parset.maxNrPencilBeams(); - vector<unsigned> nrPencilBeams = parset.nrPencilBeams(); + unsigned maxNrTABs = parset.maxNrTABs(); + vector<unsigned> nrTABs = parset.nrTABs(); double startTime = parset.startTime(); double stopTime = parset.stopTime(); - double sampleFreq = parset.sampleRate(); - unsigned samplesPerBlock = parset.nrSubbandSamples(); + double sampleFreq = parset.subbandBandwidth(); + unsigned samplesPerBlock = parset.nrSamplesPerSubband(); double blockSize = parset.CNintegrationTime(); unsigned nrBlocks = static_cast<unsigned>(floor((stopTime - startTime) / blockSize)); @@ -71,8 +71,8 @@ void generateDelays( const string &parsetFilename, const string &station ) Delays w(parset, station, ts); w.start(); - Matrix<double> delays(nrBeams, maxNrPencilBeams + 1); - Matrix<casa::MVDirection> prev_directions(nrBeams, maxNrPencilBeams + 1), directions(nrBeams, maxNrPencilBeams + 1); + Matrix<double> delays(nrBeams, maxNrTABs + 1); + Matrix<casa::MVDirection> prev_directions(nrBeams, maxNrTABs + 1), directions(nrBeams, maxNrTABs + 1); for( unsigned block = 0; block < nrBlocks; block++ ) { w.getNextDelays(directions, delays); @@ -92,7 +92,7 @@ void generateDelays( const string &parsetFilename, const string &station ) } for( unsigned beam = 0; beam < nrBeams; beam++ ) { - unsigned nr_delays = print_tabs ? nrPencilBeams[beam] + 1 : 1; + unsigned nr_delays = print_tabs ? nrTABs[beam] + 1 : 1; for( unsigned pencil = 0; pencil < nr_delays; pencil++ ) cout << fixed << setprecision(12) << delays[beam][pencil] << " "; diff --git a/RTCP/IONProc/test/tDelayCompensation.cc b/RTCP/IONProc/test/tDelayCompensation.cc index 915578cbb14..598244b6ff7 100644 --- a/RTCP/IONProc/test/tDelayCompensation.cc +++ b/RTCP/IONProc/test/tDelayCompensation.cc @@ -52,7 +52,7 @@ void doTest() unsigned nrBeams = parset.nrBeams(); double startTime = parset.startTime(); - double sampleFreq = parset.sampleRate(); + double sampleFreq = parset.subbandBandwidth(); unsigned seconds = static_cast<unsigned>(floor(startTime)); unsigned samples = static_cast<unsigned>((startTime - floor(startTime)) * sampleFreq); @@ -61,9 +61,9 @@ void doTest() Delays w(parset, inputs[0].station, ts); w.start(); - unsigned nrPencilBeams = 0; - Matrix<double> delays(nrBeams, nrPencilBeams + 1); - Matrix<casa::MVDirection> prev_directions(nrBeams, nrPencilBeams + 1), directions(nrBeams, nrPencilBeams + 1); + unsigned nrTABs = 0; + Matrix<double> delays(nrBeams, nrTABs + 1); + Matrix<casa::MVDirection> prev_directions(nrBeams, nrTABs + 1), directions(nrBeams, nrTABs + 1); for (unsigned i = 0; i < 256; i ++) { prev_directions = directions; diff --git a/RTCP/Interface/include/Interface/Parset.h b/RTCP/Interface/include/Interface/Parset.h index e37409e2438..25f289cc0e7 100644 --- a/RTCP/Interface/include/Interface/Parset.h +++ b/RTCP/Interface/include/Interface/Parset.h @@ -103,9 +103,10 @@ class Parset: public ParameterSet unsigned nrBaselines() const; unsigned nrCrossPolarisations() const; unsigned clockSpeed() const; // Hz - double sampleRate() const; + double subbandBandwidth() const; double sampleDuration() const; unsigned nrBitsPerSample() const; + size_t nrBytesPerComplexSample() const; std::vector<double> positions() const; std::string positionType() const; std::vector<double> getRefPhaseCentre() const; @@ -122,7 +123,8 @@ class Parset: public ParameterSet unsigned incoherentStokesNrSubbandsPerFile() const; double CNintegrationTime() const; double IONintegrationTime() const; - unsigned nrSubbandSamples() const; + unsigned nrSamplesPerChannel() const; + unsigned nrSamplesPerSubband() const; unsigned nrSubbandsPerPset() const; unsigned nrPhase3StreamsPerPset() const; unsigned nrHistorySamples() const; @@ -201,14 +203,14 @@ class Parset: public ParameterSet std::string beamTarget(unsigned beam) const; double beamDuration(unsigned beam) const; - unsigned nrPencilBeams(unsigned beam) const; - std::vector<unsigned> nrPencilBeams() const; - unsigned totalNrPencilBeams() const; - unsigned maxNrPencilBeams() const; + unsigned nrTABs(unsigned beam) const; + std::vector<unsigned> nrTABs() const; + unsigned totalNrTABs() const; + unsigned maxNrTABs() const; bool isCoherent(unsigned beam, unsigned pencil) const; - BeamCoordinates pencilBeams(unsigned beam) const; + BeamCoordinates TABs(unsigned beam) const; double dispersionMeasure(unsigned beam=0,unsigned pencil=0) const; - std::vector<std::string> pencilBeamStationList(unsigned beam=0,unsigned pencil=0) const; + std::vector<std::string> TABStationList(unsigned beam=0,unsigned pencil=0) const; std::vector<unsigned> subbandList() const; unsigned nrSubbands() const; @@ -268,7 +270,7 @@ private: void checkVectorLength(const std::string &key, unsigned expectedSize) const; void checkInputConsistency() const; - std::vector<double> getPencilBeam(unsigned beam, unsigned pencil) const; + std::vector<double> getTAB(unsigned beam, unsigned pencil) const; void addPosition(string stName); double getTime(const char *name) const; @@ -320,7 +322,7 @@ public: coherentTimeIntFactor( parset.coherentStokesTimeIntegrationFactor() ), incoherentTimeIntFactor( parset.incoherentStokesTimeIntegrationFactor() ), - nrBeams( parset.totalNrPencilBeams() ), + nrBeams( parset.totalNrTABs() ), coherentNrSubbandsPerFile( parset.coherentStokesNrSubbandsPerFile() ), incoherentNrSubbandsPerFile( parset.incoherentStokesNrSubbandsPerFile() ), @@ -455,7 +457,7 @@ private: info.stream = 0; for (unsigned sap = 0; sap < nrSAPs; sap++) { - const unsigned nrBeams = parset.nrPencilBeams(sap); + const unsigned nrBeams = parset.nrTABs(sap); info.sap = sap; @@ -693,14 +695,14 @@ inline unsigned Parset::clockSpeed() const return getUint32("Observation.sampleClock") * 1000000; } -inline double Parset::sampleRate() const +inline double Parset::subbandBandwidth() const { return 1.0 * clockSpeed() / 1024; } inline double Parset::sampleDuration() const { - return 1.0 / sampleRate(); + return 1.0 / subbandBandwidth(); } inline unsigned Parset::dedispersionFFTsize() const @@ -722,6 +724,11 @@ inline unsigned Parset::nrBitsPerSample() const } } +inline size_t Parset::nrBytesPerComplexSample() const +{ + return 2 * nrBitsPerSample() / 8; +} + inline unsigned Parset::CNintegrationSteps() const { return getUint32("OLAP.CNProc.integrationSteps"); @@ -865,7 +872,7 @@ inline bool Parset::checkFakeInputData() const inline double Parset::CNintegrationTime() const { - return nrSubbandSamples() / sampleRate(); + return nrSamplesPerSubband() / subbandBandwidth(); } inline double Parset::IONintegrationTime() const @@ -873,9 +880,14 @@ inline double Parset::IONintegrationTime() const return CNintegrationTime() * IONintegrationSteps(); } -inline unsigned Parset::nrSubbandSamples() const +inline unsigned Parset::nrSamplesPerChannel() const +{ + return CNintegrationSteps(); +} + +inline unsigned Parset::nrSamplesPerSubband() const { - return CNintegrationSteps() * nrChannelsPerSubband(); + return nrSamplesPerChannel() * nrChannelsPerSubband(); } inline unsigned Parset::nrHistorySamples() const @@ -885,17 +897,17 @@ inline unsigned Parset::nrHistorySamples() const inline unsigned Parset::nrSamplesToCNProc() const { - return nrSubbandSamples() + nrHistorySamples() + 32 / (NR_POLARIZATIONS * 2 * nrBitsPerSample() / 8); + return nrSamplesPerSubband() + nrHistorySamples() + 32 / (NR_POLARIZATIONS * 2 * nrBitsPerSample() / 8); } inline unsigned Parset::inputBufferSize() const { - return (unsigned) (getDouble("OLAP.nrSecondsOfBuffer") * sampleRate()); + return (unsigned) (getDouble("OLAP.nrSecondsOfBuffer") * subbandBandwidth()); } inline unsigned Parset::maxNetworkDelay() const { - return (unsigned) (getDouble("OLAP.maxNetworkDelay") * sampleRate()); + return (unsigned) (getDouble("OLAP.maxNetworkDelay") * subbandBandwidth()); } inline unsigned Parset::nrSubbandsPerPset() const @@ -970,7 +982,7 @@ inline std::vector<unsigned> Parset::subbandToSAPmapping() const inline double Parset::channelWidth() const { - return sampleRate() / nrChannelsPerSubband(); + return subbandBandwidth() / nrChannelsPerSubband(); } inline bool Parset::delayCompensation() const @@ -1080,7 +1092,7 @@ inline double Parset::channel0Frequency(size_t subband) const // if the 2nd PPF is used, the subband is shifted half a channel // downwards, so subtracting half a subband results in the // center of channel 0 (instead of the bottom). - return sbFreq - 0.5 * sampleRate(); + return sbFreq - 0.5 * subbandBandwidth(); } inline unsigned Parset::nrSlotsInFrame() const @@ -1107,43 +1119,43 @@ inline bool Parset::realTime() const return getBool("OLAP.realTime"); } -inline unsigned Parset::nrPencilBeams(unsigned beam) const +inline unsigned Parset::nrTABs(unsigned beam) const { using boost::format; return getUint32(str(format("Observation.Beam[%u].nrTiedArrayBeams") % beam)); } -inline std::vector<unsigned> Parset::nrPencilBeams() const +inline std::vector<unsigned> Parset::nrTABs() const { std::vector<unsigned> counts(nrBeams()); for (unsigned beam = 0; beam < nrBeams(); beam++) - counts[beam] = nrPencilBeams(beam); + counts[beam] = nrTABs(beam); return counts; } -inline unsigned Parset::totalNrPencilBeams() const +inline unsigned Parset::totalNrTABs() const { - std::vector<unsigned> beams = nrPencilBeams(); + std::vector<unsigned> beams = nrTABs(); return std::accumulate(beams.begin(), beams.end(), 0); } -inline unsigned Parset::maxNrPencilBeams() const +inline unsigned Parset::maxNrTABs() const { - std::vector<unsigned> beams = nrPencilBeams(); + std::vector<unsigned> beams = nrTABs(); return *std::max_element(beams.begin(), beams.end()); } -inline BeamCoordinates Parset::pencilBeams(unsigned beam) const +inline BeamCoordinates Parset::TABs(unsigned beam) const { BeamCoordinates coordinates; - for (unsigned pencil = 0; pencil < nrPencilBeams(beam); pencil ++) { - const std::vector<double> coords = getPencilBeam(beam, pencil); + for (unsigned pencil = 0; pencil < nrTABs(beam); pencil ++) { + const std::vector<double> coords = getTAB(beam, pencil); // assume ra,dec coordinates += BeamCoord3D(coords[0],coords[1]); diff --git a/RTCP/Interface/src/Parset.cc b/RTCP/Interface/src/Parset.cc index 7832c694963..48718807f52 100644 --- a/RTCP/Interface/src/Parset.cc +++ b/RTCP/Interface/src/Parset.cc @@ -361,7 +361,7 @@ std::vector<double> Parset::subbandToFrequencyMapping() const std::vector<double> subbandFreqs(subbandIds.size()); for (unsigned subband = 0; subband < subbandIds.size(); subband ++) - subbandFreqs[subband] = sampleRate() * (subbandIds[subband] + subbandOffset); + subbandFreqs[subband] = subbandBandwidth() * (subbandIds[subband] + subbandOffset); return subbandFreqs; } @@ -458,7 +458,7 @@ double Parset::beamDuration(unsigned beam) const } -std::vector<double> Parset::getPencilBeam(unsigned beam, unsigned pencil) const +std::vector<double> Parset::getTAB(unsigned beam, unsigned pencil) const { std::vector<double> pencilBeam(2); @@ -488,7 +488,7 @@ double Parset::dispersionMeasure(unsigned beam, unsigned pencil) const } -std::vector<string> Parset::pencilBeamStationList(unsigned beam, unsigned pencil) const +std::vector<string> Parset::TABStationList(unsigned beam, unsigned pencil) const { string key = str(boost::format("Observation.Beam[%u].TiedArrayBeam[%u].stationList") % beam % pencil); std::vector<string> stations; diff --git a/RTCP/Interface/src/Stream.cc b/RTCP/Interface/src/Stream.cc index 9936b773bd3..26641e86d76 100644 --- a/RTCP/Interface/src/Stream.cc +++ b/RTCP/Interface/src/Stream.cc @@ -68,7 +68,7 @@ Stream *createStream(const string &descriptor, bool asServer, time_t deadline) #endif else if (split.size() == 3 && split[0] == "tcpkey") #if defined CLUSTER_SCHEDULING - return new SocketStream(split[1].c_str(), 0, SocketStream::TCP, asServer ? SocketStream::Server : SocketStream::Client, deadline, split[2].c_str()); + return new SocketStream(split[1].c_str(), 0, SocketStream::TCP, asServer ? SocketStream::Server : SocketStream::Client, 30000, split[2].c_str()); #else return new SocketStream(split[1].c_str(), 0, SocketStream::TCP, asServer ? SocketStream::Server : SocketStream::Client, deadline, split[2].c_str()); #endif diff --git a/RTCP/Storage/src/MSWriterDAL.cc b/RTCP/Storage/src/MSWriterDAL.cc index 8fd73561f7c..55ca2283b69 100644 --- a/RTCP/Storage/src/MSWriterDAL.cc +++ b/RTCP/Storage/src/MSWriterDAL.cc @@ -201,7 +201,7 @@ namespace LOFAR file.observationNofStations().value = parset.nrStations(); // TODO: SS beamformer? file.observationStationsList().value = parset.allStationNames(); // TODO: SS beamformer? - double subbandBandwidth = parset.sampleRate(); + double subbandBandwidth = parset.subbandBandwidth(); double channelBandwidth = parset.channelWidth(); // if PPF is used, the frequencies are shifted down by half a channel @@ -290,7 +290,7 @@ namespace LOFAR sap.pointDEC().value = beamDir[1] * 180.0 / M_PI; sap.pointDECUnit().value = "deg"; - sap.observationNofBeams().value = parset.nrPencilBeams(sapNr); + sap.observationNofBeams().value = parset.nrTABs(sapNr); sap.nofBeams() .value = 1; BF_ProcessingHistory sapHistory = sap.processHistory(); @@ -309,7 +309,7 @@ namespace LOFAR beam.create(); beam.groupType() .value = "Beam"; - vector<string> beamStationList = parset.pencilBeamStationList(sapNr, beamNr); + vector<string> beamStationList = parset.TABStationList(sapNr, beamNr); beam.nofStations() .value = beamStationList.size(); beam.stationsList().value = beamStationList; @@ -318,7 +318,7 @@ namespace LOFAR beam.targets() .value = beamtargets; beam.tracking().value = parset.getBeamDirectionType(sapNr); - BeamCoordinates pbeamDirs = parset.pencilBeams(sapNr); + BeamCoordinates pbeamDirs = parset.TABs(sapNr); BeamCoord3D pbeamDir = pbeamDirs[beamNr]; beam.pointRA() .value = (beamDir[0] + pbeamDir[0]) * 180.0 / M_PI; beam.pointRAUnit() .value = "deg"; @@ -340,7 +340,7 @@ namespace LOFAR beam.beamDiameterDECUnit().value = "arcmin"; beam.nofSamples() .value = itsNrSamples * nrBlocks; - beam.samplingRate() .value = parset.sampleRate() / parset.nrChannelsPerSubband() / itsInfo.timeIntFactor; + beam.samplingRate() .value = parset.subbandBandwidth() / parset.nrChannelsPerSubband() / itsInfo.timeIntFactor; beam.samplingRateUnit() .value = "Hz"; beam.samplingTime() .value = parset.sampleDuration() * parset.nrChannelsPerSubband() * itsInfo.timeIntFactor; beam.samplingTimeUnit() .value = "s"; diff --git a/RTCP/Storage/src/TBB_Writer.cc b/RTCP/Storage/src/TBB_Writer.cc index 59cfb3ca79c..6b619781a1c 100644 --- a/RTCP/Storage/src/TBB_Writer.cc +++ b/RTCP/Storage/src/TBB_Writer.cc @@ -479,7 +479,7 @@ void TBB_Station::initCommonLofarAttributes() { double max_centerfrequency = *max_element( subbandCenterFrequencies.begin(), subbandCenterFrequencies.end() ); double sum_centerfrequencies = accumulate( subbandCenterFrequencies.begin(), subbandCenterFrequencies.end(), 0.0 ); - double subbandBandwidth = itsParset.sampleRate(); + double subbandBandwidth = itsParset.subbandBandwidth(); itsH5File.observationFrequencyMax() .value = (max_centerfrequency + subbandBandwidth / 2) / 1e6; itsH5File.observationFrequencyMin() .value = (min_centerfrequency - subbandBandwidth / 2) / 1e6; -- GitLab