Besides some interaction with the Graphic User Interfaces (which is not described here because it is still very preliminary and not implemented yet), the QFrameWork::Run() method has only the function of executing the QSequence::Run() method for each defined QSequence. The QSequence has the capability to decide whether it should be re-run or not in order to allow iterative algorythms.
In the QSequence::Run() method, at the beginning the virtual member function Init() is called for the reader, the modules and the writer.
In the Init() function each module is supposed to get the parameters (see 6.3 for details) thorugh standard methods provided by the base class QModule, and to perform all initializations. For example, a reader will probably open the file or open a network connection or any other activity needed to prepare the data source to provide events; the modules will do any initialization activity like creating histograms; the writer will create the output files and so on. The only important thing to be known is that Init() is called before beginning the loop over the events.
After Init(), the QSequence enter the main loop, in which an empty QEvent (created by the QSequence itself) is filled by the reader method Do(QEvent*). Then the event is passed to all modules through their specific Do(QEvent*). While passing from one module to the following one ,the events get richer and richer in informations, until it reaches the writer that will write it on disk.
After the end of the main event loop, the method Done() is called for reader, modules and writer.
In case more than one sequence is defined, the framework automatically guarantees that the output of the first sequence is given as input to the second, and so on. Therefore, the input file (or input data source) is meaningful for the first sequence only.