#ifndef MARS_MTask #define MARS_MTask ///////////////////////////////////////////////////////////////////////////// // // // MTask // // // // Abstract base class for a task // // // ///////////////////////////////////////////////////////////////////////////// #ifndef MARS_MInputStreamID #include "MInputStreamID.h" #endif class TList; class TStopwatch; class MFilter; class MParList; class MTask : public MInputStreamID { public: enum { kAccStandard = 0, kAccDontTime = BIT(1), kAccDontReset = BIT(2) }; private: TList *fListOfBranches; //! List of Branch names for auto enabeling scheme MFilter *fFilter; // Filter for conditional task execution Byte_t fSerialNumber; // Serial number having more than one detector of the same type Bool_t fIsPreprocessed; //! Indicates the success of the PreProcessing (set by MTaskList) TStopwatch *fStopwatch; //! Count the execution time and number of executions UInt_t fNumExecutions; //! Number of executions (also counted by fStopwatch, but faster) UInt_t fNumExec0; //! Total number of executions at PreProcess Byte_t fAccelerator; //! virtual Int_t PreProcess(MParList *pList); virtual Int_t Process(); virtual Int_t PostProcess(); protected: void AddToBranchList(const char *b); void AddToBranchList(const TString &str); void AddToBranchList(const char *master, const char *sub, const UInt_t first, const UInt_t last) { if (first==0 && last==0) { AddToBranchList(sub); return; } for (unsigned int i=first; i