-
Notifications
You must be signed in to change notification settings - Fork 15
difx_call_sequence
Shaoguang Guo(Sky & Star) edited this page Dec 21, 2023
·
1 revision
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.
- Started with
DataStream::execute
* Calls ''DataStream::initialiseMemoryBuffer''
* Launches ''DataStream::launchNewFileReadThread'' or ''DataStream::launchNewNetworkReadThread''
* Calls ''DataStream::loopfileread'' or ''DataStream::loopnetworkread''
* Continues running execute
- Loops managing MPI requests and data sends, calling calculateControlParams
-
loopfilereadloops over
* ''DataStream::openfile''
* ''initialiseFile'' (//Overloaded in mk5.cpp//)
* ''DataStream::diskToMemory''
* ''read'' (//System call//)
* ''testForSync'' (//Overloaded in mk5.cpp//)
======= Core =======
-
Core::Core- Initialises arrays/mutexes etc and
- Started with
Core::execute- Create threads with
pthread_createcallinglaunchNewProcessThread- Calls
loopprocess- Loops over
processdatafor sub integration- Loop over stations
- Loops over
Mode::process"NUM BUFFERED FFTS" times for each FFT- Calls Mode::unpack // Overloaded in mk5mode.cpp //
- Do baseline multiplies within
processdatalooping over each baseline
- Loops over
- Calls
- Loops over
Core::receivedata- This calls a few
MPI_Irecvand locks/unlocks mutexes
- This calls a few
- Create threads with
======= Mode =======
Mode::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.