User Tools

Site Tools


DIFX Call Sequence

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

Main Loop (execute)

  • Loops managing MPI requests and data sends, calling calculateControlParams

Disk Reading

  • loopfileread loops over
    • DataStream::openfile
      • initialiseFile (Overloaded in mk5.cpp)
    • DataStream::diskToMemory
      • read (System call)
      • testForSync (Overloaded in mk5.cpp)



  • Core::Core
    • Initialises arrays/mutexes etc and
  • Started with Core::execute
    • Create threads with pthread_create calling launchNewProcessThread
      • Calls loopprocess
        • Loops over processdata for 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 processdata looping over each baseline
    • Loops over Core::receivedata
      • This calls a few MPI_Irecv and locks/unlocks mutexes



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.

difx/difx_call_sequence.txt · Last modified: 2019/08/15 21:44 by chrisphillips