This is somewhat out of date
The following are essential “private” notes to sort out the call sequence used as data flows through DataStream processes and Core processes.
DataStream::execute
DataStream::initialiseMemoryBuffer
DataStream::launchNewFileReadThread
or DataStream::launchNewNetworkReadThread
DataStream::loopfileread
or DataStream::loopnetworkread
loopfileread
loops overDataStream::openfile
initialiseFile
(Overloaded in mk5.cpp)DataStream::diskToMemory
read
(System call)testForSync
(Overloaded in mk5.cpp)Core::Core
Core::execute
pthread_create
calling launchNewProcessThread
loopprocess
processdata
for sub integration Mode::process
“NUM BUFFERED FFTS” times for each FFTprocessdata
looping over each baselineCore::receivedata
MPI_Irecv
and locks/unlocks mutexesMode::process does the main station based processing - fringe rotation, FFT, fractional delay correction etc. It is called once for each FFT time slice. After initial loop initialisation steps, it then loops over each recorded frequency. For each freq it setups up fringe rotation and post-F corrections (fractional delay correction etc). Then it loops over the actual recorded bands
for(int j=0;j<numrecordedbands;j++)
looking for matches to the current frequency and does the FFT, applies the fringe rotation etc.