ROOT logo
#ifndef HSUEXEMACRO_H
#define HSUEXEMACRO_H

// -----------------------------------------------------------------------------
// $Id: hsuexemacro.h,v 1.8 2008-09-18 13:04:57 halo Exp $
// Author: Marcin Jaskula
// -----------------------------------------------------------------------------

#include "TROOT.h"
#include "TSystem.h"
#include "TFile.h"
#include "TChain.h"
#include "TTree.h"
#include "TObjArray.h"
#include "TString.h"
#include "TObjString.h"
#include "TMap.h"

#include <hsuprogress.h>

// -----------------------------------------------------------------------------

class HSUExeMacro;
class HCategory;

// -----------------------------------------------------------------------------

class HSUBranchElement : public TObject
{
public:
    enum EBranchType
    {
        kArray = 0,
        kCategory,
        kMax
    };

    // -------------------------------------------------------------------------
private:

    TString        *m_pName;    // name of branch
    TObject        *m_pArray;   // pointer to array or category
    TBranch        *m_pBranch;  // pointer to branch

    EBranchType     m_eType;    // type of array

    // -------------------------------------------------------------------------

                    HSUBranchElement(const Char_t* pBranchName,
                            EBranchType eType);
                   ~HSUBranchElement(void);

    // -------------------------------------------------------------------------

    const Char_t*     getBranchNameSufix(void);

    // -------------------------------------------------------------------------

    friend class HSUExeMacro;
};

// -----------------------------------------------------------------------------

class HSUExeMacro : public TObject
{
protected:
    TChain          *m_pChain;          // chain of input files
    Int_t            m_iCurrentFile;    // current file in the chain

    HSUProgress     *m_pProgress;       // progress bar

    TFile           *m_pOutputFile;     // output file
    TObjArray       *m_pActiveBranches; // array with active branches

    Bool_t           m_bExitOnError;    // if exit on any error

    TString          m_sOutputName;     // name of the output file
    TObjArray       *m_pInputArray;     // list of input files

    Int_t            m_iEvents;         // max number of events
    Int_t            m_iEvent;          // current event

    TString          m_sParamFileName;  // name of a file with parameters
    TFile           *m_pParamFile;      // file with parameters

    TString          m_sOptString;      // string from parameters
    Int_t            m_iOptInt;         // Int_t from parameters
    Float_t          m_fOptFloat;       // Float_t from parameters
    Bool_t           m_bOptBool;        // boolean from parameters

    Bool_t           m_bNotFileChange;  // notify when the file changes

public:
                     HSUExeMacro();
    virtual         ~HSUExeMacro();

    // -------------------------------------------------------------------------

    virtual Int_t    loadArgs(Int_t iArg, Char_t* vArg[]);

    // -------------------------------------------------------------------------

    Bool_t           openInput(void);
    Bool_t           addInputFile(const Char_t *pStr);
    Bool_t           addFilesFromList(const Char_t *pStr);

    // -------------------------------------------------------------------------

    Bool_t           openOutput(void);
    Bool_t           writeOutput(void);

    // -------------------------------------------------------------------------

    Int_t            loadTree(Int_t iEvent);
    Bool_t           checkBranches(void);
    void             clear(void);
    void             getBranchesEntry(Int_t iEntry);
    Int_t            getEvent(Int_t iEvent);
    Int_t            nextEvent(void);

    // -------------------------------------------------------------------------

    TClonesArray*    getTClonesArray(const Char_t *pBranchName);
    HCategory*       getHCategory(const Char_t *pCategoryName);
    TBranch*         getBranch(const Char_t *pBranchName);

    // -------------------------------------------------------------------------

    virtual void     printInfo(const Char_t *pProgramName) const;

    // -------------------------------------------------------------------------

    Bool_t           getExitOnError(void) const       { return m_bExitOnError; }
    void             setExitOnError(Bool_t b = kTRUE) { m_bExitOnError = b;    }

    // -------------------------------------------------------------------------

    void             setProgress(HSUProgress *pProgress);
    void             setProgress(Bool_t bSet = kTRUE);
    HSUProgress*     getProgress(void) const;
    void             deleteProgress(void);

    // -------------------------------------------------------------------------

    Bool_t           openParamFile(const Char_t *pParamFileName = NULL);
    TObject*         getParamObject(const Char_t *pName);

    const TString&   getParamFileName(void) const;

    Bool_t           isParamFileOpened(void) const
                                                { return m_pParamFile != NULL; }

    // -------------------------------------------------------------------------

    const TString&   getOptString(void) const         { return m_sOptString;   }
    Int_t            getOptInt(void) const            { return m_iOptInt;      }
    Float_t          getOptFloat(void) const          { return m_fOptFloat;    }
    Bool_t           getOptBool(void) const           { return m_bOptBool;     }

    // -------------------------------------------------------------------------

    Int_t            getEvents(void) const            { return m_iEvents;      }
    Int_t            getEvent(void) const             { return m_iEvent;       }

    // -------------------------------------------------------------------------

    Float_t          getMdcPhi(Int_t iSector, Float_t fPhiMdc) const;
    Float_t          getMdcTheta(Float_t fThetaMdc) const;

    // -------------------------------------------------------------------------

    Bool_t           getNotFileChange(void)       { return m_bNotFileChange;   }
    void             setNotFileChange(Bool_t b)   { m_bNotFileChange = b;      }

    // -------------------------------------------------------------------------

private:
    HSUBranchElement* findAciveBranch(const Char_t *pBranchName);
    TClonesArray*     getNewArrayFromBranch(const Char_t *pBranchName);
    HCategory*        getNewHCategoryFromBranch(const Char_t *pBranchName);
    Bool_t            notifyBranches(void);

    // -------------------------------------------------------------------------

    ClassDef(HSUExeMacro, 0) //! Easy acces to branches in exe macro
};

// -----------------------------------------------------------------------------

#ifndef SAFE_DELETE
#define SAFE_DELETE(A)      { if(A != NULL) { delete A; A = NULL; } }
#endif

#ifndef SAFE_DELETE_ROOT
#define SAFE_DELETE_ROOT(A) { if(A != NULL) { A->Delete(); A = NULL; } }
#endif

// -----------------------------------------------------------------------------

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