#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, kAccDontCount = BIT(1), kAccDontTime = BIT(2), kAccDontReset = BIT(3) }; 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 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