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