ROOT logo
#ifndef HADES_H
#define HADES_H
#include "htree.h"
#include "TObject.h"
#include "TObjString.h"
#include "TClonesArray.h"
#include "TObjArray.h"
#include "TString.h"
#include "TArrayI.h"
#include "TNamed.h"
#include "TBranch.h"
#include "TBrowser.h"
#include "TCollection.h"
#include "TTree.h"
#include "TGlobal.h"
#include "TFile.h"
#include "TError.h"
#include "TStopwatch.h"

#define MAXEVID 16

class HDataSource;
class HldFileOutput;
class HEvent;
class HTree;
class HRuntimeDb;
class HTask;
class HTaskSet;
class HSpectrometer;
class Hades;
class HMessageMgr;
class HGeantMedia;
class HSrcKeeper;

R__EXTERN Hades *gHades;

class Hades : public TObject {
protected:
    Size_t             fOutputSizeLimit;
    Int_t              fCycleNumber;       //  Number of current output file
    TString            fOutputFileName;
    Bool_t             fFirstEventLoop;
    Int_t              fSplitLevel;        //  Indicates the split level (0,1,2)
    HDataSource*       fDataSource;        //! Data source where data are taken from
    HDataSource*       fSecondDataSource;  //! 2nd data source where data are taken from
    HldFileOutput*     fHldOutput;         //! Hld file output
    HEvent*            fCurrentEvent;      //  Event under reconstruction
    HTaskSet*          fTask;              //  Task for each event.
    TFile*             fOutputFile;        //! File used to store the output tree
    HSpectrometer*     setup;              //! Spectrometer s setup.
    HTree*             fTree;              //  Output tree
    HRuntimeDb*        rtdb;               //! Runtime database of reconstruction parameters.
    TObjArray*         fTaskList;          //  List of Task for each type of events.
    UChar_t            quiet;              //  1 - quiet mode, 2 - silence mode
    Int_t              fCounter;           //  Counter display for event loop
    ErrorHandlerFunc_t oldHdlr;            //! Original ROOT error handler
    HMessageMgr*       msgHandler;         //! Message handler with three different outputs
    Int_t              reqEvents;          //! number of requested events from eventloop
    Bool_t             enableCloseInput;   //! Enable closing oracle input
    TStopwatch         fTimer;             //! Timer for event loop stoping by time quota
    static Int_t       EventCounter;       //! Event counter, can be retrieved via gHades->getEventCounter()
    static Int_t       doEmbedding;        //! embedding mode flag 0=No embedding,
    //                                                             1=realistic embedding,
    //                                                             2=keep Geant embedding
    //                                         can be retrived via gHades->getEmbeddingMode()
    static Int_t       doEmbeddingDebug;   //! embedding mode flag 0=No debug, 1=empty real data category before sim data
    static Bool_t forceNoSkip;             //! kTRUE = don't skip events in unpackers when trigger tag mismatch is detected
    Bool_t        isHldSource;             //! special mode for 2. source
    Bool_t        writeHades;              //! write Hades object to output file
    Bool_t        writeEvent;              //! write event object to output file
    Int_t evIdMap[MAXEVID];                //! look-up table for event id mapping
    Int_t treeBufferSize;                  //! size of the buffer of a branch (default 8000)
    Int_t fTaskListStatus;                 //! store the return value of the tasklist
    static Int_t fembeddingRealTrackId;    //!
    HGeantMedia*   fgeantMedia;            //! pointer to geantmedia object for sim
    HSrcKeeper*    fsrckeeper;             //! pointer to HSrcKeeper
    UInt_t         fbeamtimeID;            //! beam time identifier ( see  Particle::eBeamTime )

    TObjArray      fObjectsAddedToOutput;  //! objects which should be written to each outputfile
    Bool_t         fExtEvent;              //! event is external handled and does not need a clear in eventloop
    void  recreateOutput (void);
    void  initTaskSetsIDs(Int_t version);
    Int_t getCurrentRunId(HDataSource* source);

public:
    Hades(void);
    ~Hades(void);
    static Hades*  instance                  (void) { return (gHades) ? gHades : new Hades; }
    Bool_t         init                      (Bool_t externInit=kFALSE);
    Int_t          eventLoop                 (Int_t nEvents = kMaxInt,Int_t firstEvent = 0, Double_t timeQuota = 1.e+20); // *MENU*
    void           makeCounter               (Int_t counter = 1000) {fCounter = counter;}
    //----------------------------------------------
    // switches + counters etc
    void           setQuietMode              (UChar_t mode=1)       { quiet = mode;         }
    Int_t          getNumberOfRequestedEvents(void)                 { return reqEvents;     }
    Int_t          getEventCounter           ()                     { return EventCounter;  }
    void           resetEventCounter         ()                     { EventCounter = 0;     }
    Int_t          getEmbeddingMode          ()                     { return doEmbedding;   }
    void           setEmbeddingMode          (Int_t mode)           { doEmbedding = mode;   }
    Int_t          getEmbeddingDebug         ()                     { return doEmbeddingDebug; }
    void           setEmbeddingDebug         (Int_t mode)           { doEmbeddingDebug = mode; }
    static Int_t   getEmbeddingRealTrackId   ()                     { return fembeddingRealTrackId; }
    static void    setEmbeddingRealTrackId   (Int_t id)             { fembeddingRealTrackId = id; }
    Bool_t         getForceNoSkip            ()                     { return forceNoSkip;   }
    void           setForceNoSkip            (Bool_t noskip = kTRUE){ forceNoSkip = noskip; }
    void           setBeamTimeID             (Int_t id)             { fbeamtimeID = id;}
    Int_t          getBeamTimeID             ()                     { return fbeamtimeID;}

    //----------------------------------------------
    // setup rtdb + detector
    HRuntimeDb*    getRuntimeDb              (void) { return rtdb;       }
    HSpectrometer* getSetup                  (void) { return setup;      }
    HMessageMgr*   getMsg                    (void) { return msgHandler; }
    HGeantMedia*   getGeantMedia             (void) { return fgeantMedia;}
    HSrcKeeper*    getSrcKeeper              (void) { return fsrckeeper ;}
    const TObjArray* getObjectsAddedToOutput (void) { return &fObjectsAddedToOutput ;}
    //----------------------------------------------
    // setup event
    HEvent*&       getCurrentEvent           (void);
    void           setEvent                  (HEvent *ev,Bool_t remove=kTRUE);
    //----------------------------------------------
    //  setup data source
    void           setDataSource             (HDataSource *dataS);
    HDataSource*   getDataSource             (void) const         {return fDataSource;        }
    void           setSecondDataSource       (HDataSource *dataS);
    void           setEnableCloseInput       (Bool_t flag = kTRUE){ enableCloseInput = flag;  }
    HDataSource*   getSecondDataSource       (void) const         { return fSecondDataSource; }
    //----------------------------------------------
    // setup tasks
    HTask*         getTask                   (const Char_t *taskName);
    HTaskSet*      getTask                   (void);
    HTaskSet*      getTaskSet                (Int_t nEvtId);
    HTaskSet*      getTaskSet                (const Char_t *evtTypeName);
    Bool_t         initTasks                 ();
    Bool_t         reinitTasks               ();
    Bool_t         finalizeTasks             ();
    Int_t          executeTasks              ();
    const TObjArray* getTaskList             () { return fTaskList; }
    Int_t          getTaskListStatus         () { return fTaskListStatus;}
    //----------------------------------------------
    // output file handling
    void           closeOutput               ();
    void           setOutputSizeLimit        (Size_t l)           { fOutputSizeLimit = l; }
    Size_t         getOutputSizeLimit        ()                   { return fOutputSizeLimit; }
    void           setSplitLevel             (Int_t splitLevel);
    Int_t          getSplitLevel             (void);
    Int_t          getTreeBufferSize         ()                   { return treeBufferSize; }
    void           setTreeBufferSize         (Int_t size)         { treeBufferSize = size; }
    Bool_t         setOutputFile             (Text_t *name,Option_t *opt,Text_t *title,Int_t comp);
    TFile*         getOutputFile             ()                   { return fOutputFile;    }
    // setup hld file output
    Bool_t         setHldOutput              (Text_t*,const Text_t* fileSuffix="f_",const Option_t* option="NEW");
    HldFileOutput* getHldOutput              (void) const         { return fHldOutput;     }
    void           setWriteHades             (Bool_t write = kTRUE) { writeHades = write; }
    void           setWriteEvent             (Bool_t write = kTRUE) { writeEvent = write; }
    Bool_t         getWriteEvent             (void)                 { return writeEvent; }
    void           addObjectToOutput(TObject* obj) ;

    //----------------------------------------------
    // setup tree + browser
    HTree*         getTree                   (void);
    Bool_t         makeTree                  (void);
    void           activateTree              (TTree *tree);
    Bool_t         IsFolder                  (void) const;
    void           Browse                    (TBrowser *b);
    Int_t          setAlgorithmLayout        (Text_t *fileName);
    Int_t          setEventLayout            (Text_t *fileName);
    Int_t          setConfig                 (Text_t *fileName);
    //----------------------------------------------
    // mapping id -> tasks sets
    Int_t          mapId                     (Int_t id);
    Bool_t         isCalibration             ();
    Bool_t         isReal                    ();
    void           printDefinedTaskSets      ();
    void           defineTaskSets            ();

    ClassDef(Hades,1) //Control class for Hades reconstruction
};


#endif // !HADES
 hades.h:1
 hades.h:2
 hades.h:3
 hades.h:4
 hades.h:5
 hades.h:6
 hades.h:7
 hades.h:8
 hades.h:9
 hades.h:10
 hades.h:11
 hades.h:12
 hades.h:13
 hades.h:14
 hades.h:15
 hades.h:16
 hades.h:17
 hades.h:18
 hades.h:19
 hades.h:20
 hades.h:21
 hades.h:22
 hades.h:23
 hades.h:24
 hades.h:25
 hades.h:26
 hades.h:27
 hades.h:28
 hades.h:29
 hades.h:30
 hades.h:31
 hades.h:32
 hades.h:33
 hades.h:34
 hades.h:35
 hades.h:36
 hades.h:37
 hades.h:38
 hades.h:39
 hades.h:40
 hades.h:41
 hades.h:42
 hades.h:43
 hades.h:44
 hades.h:45
 hades.h:46
 hades.h:47
 hades.h:48
 hades.h:49
 hades.h:50
 hades.h:51
 hades.h:52
 hades.h:53
 hades.h:54
 hades.h:55
 hades.h:56
 hades.h:57
 hades.h:58
 hades.h:59
 hades.h:60
 hades.h:61
 hades.h:62
 hades.h:63
 hades.h:64
 hades.h:65
 hades.h:66
 hades.h:67
 hades.h:68
 hades.h:69
 hades.h:70
 hades.h:71
 hades.h:72
 hades.h:73
 hades.h:74
 hades.h:75
 hades.h:76
 hades.h:77
 hades.h:78
 hades.h:79
 hades.h:80
 hades.h:81
 hades.h:82
 hades.h:83
 hades.h:84
 hades.h:85
 hades.h:86
 hades.h:87
 hades.h:88
 hades.h:89
 hades.h:90
 hades.h:91
 hades.h:92
 hades.h:93
 hades.h:94
 hades.h:95
 hades.h:96
 hades.h:97
 hades.h:98
 hades.h:99
 hades.h:100
 hades.h:101
 hades.h:102
 hades.h:103
 hades.h:104
 hades.h:105
 hades.h:106
 hades.h:107
 hades.h:108
 hades.h:109
 hades.h:110
 hades.h:111
 hades.h:112
 hades.h:113
 hades.h:114
 hades.h:115
 hades.h:116
 hades.h:117
 hades.h:118
 hades.h:119
 hades.h:120
 hades.h:121
 hades.h:122
 hades.h:123
 hades.h:124
 hades.h:125
 hades.h:126
 hades.h:127
 hades.h:128
 hades.h:129
 hades.h:130
 hades.h:131
 hades.h:132
 hades.h:133
 hades.h:134
 hades.h:135
 hades.h:136
 hades.h:137
 hades.h:138
 hades.h:139
 hades.h:140
 hades.h:141
 hades.h:142
 hades.h:143
 hades.h:144
 hades.h:145
 hades.h:146
 hades.h:147
 hades.h:148
 hades.h:149
 hades.h:150
 hades.h:151
 hades.h:152
 hades.h:153
 hades.h:154
 hades.h:155
 hades.h:156
 hades.h:157
 hades.h:158
 hades.h:159
 hades.h:160
 hades.h:161
 hades.h:162
 hades.h:163
 hades.h:164
 hades.h:165
 hades.h:166
 hades.h:167
 hades.h:168
 hades.h:169
 hades.h:170
 hades.h:171
 hades.h:172
 hades.h:173
 hades.h:174
 hades.h:175
 hades.h:176
 hades.h:177
 hades.h:178
 hades.h:179
 hades.h:180
 hades.h:181