Thanks to visit codestin.com
Credit goes to github.com

Skip to content

difx_call_sequence

Shaoguang Guo(Sky & Star) edited this page Dec 21, 2023 · 1 revision

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.

DataStream

Initialization

  • 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 =======

Initialization

  • 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 =======

Mode::process

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.

Clone this wiki locally