ROOT logo
#ifndef HMDCTARGETMON_H
#define HMDCTARGETMON_H

#include "hreconstructor.h"
#include "hgeomvector.h"
#include "TStopwatch.h"
#include "TString.h"
#include "hlocation.h"

class HIterator;
class HCategory;
class HMdcTimeCut;
class TH1F;
class TH2F;
class TFile;
class HEventHeader;
class HGeomTransform;
class TPad;
class TPaveLabel;
class TCanvas;

class HMdcTargetMon : public HReconstructor {
  protected:
    Bool_t             mode;                   // kTRUE - show canvases 
                                               // in "finalize()" only
                                               // kFALSE - update canvases
                                               // each "timeStep" seconds
    TString            typePrintFile;          // "" - ps, ".gif", ...
    HCategory*         fMdcHitCat;             // HMdcHit data category
    HIterator*         iterMdcHit;             // iterator for MdcHitCat
    HLocation          locHit;                 // location for MdcHitCat

    HEventHeader*      evHeader;               // event header
    HGeomVector        target[6];              // target middle point for each sector
    Bool_t             useRtdbTarget[6];       // target param from Rtdb (for each sector)
                                               // otherwise is setted by
                                               // setTargPos(xt,yt,zt)

    Bool_t             isCoilOff;              // kTRUE - magnet off

    Bool_t             firstEvent;             // =kTRUE - befor first ev.
    UInt_t             dateFEvent;             // date of first event
    UInt_t             timeFEvent;             // time of first event
    UInt_t             dateLEvent;             // date of last event
    UInt_t             timeLEvent;             // time of last event
    UInt_t             runId;                  // runId of current run
    TString            fileName;               // list of file names
    TString            fileNameR;              // file name of current run
    TString            dateTime;               // string with date and time

    HGeomTransform*    transf[24];             // mdc mod. <-> lab. transfor.

    Int_t              nPads[6];               // [comb] - pads num. in canvas
    TPad*              fPads[6][18];           // [comb][pad]
    TPaveLabel*        label;                  // canvas label: fileName+...
    TPaveLabel*        labelNR;                // canvas label: fileName+...
    Int_t              mdcInSec[6];            // [sec] - mdcs num. in sector
    Bool_t             listMdc[24];            // mdcs list
    Int_t              selectEvByTBits;
    
    // Mdc hits collection [mdc][indx] (for one event):
    Double_t           phi[24][1000];          // phi(deg.) for each hit in lab.
    Double_t           x[24][1000];            // x(mm) hits positions in lab.
    Double_t           y[24][1000];            // y(mm) hits positions in lab.
    Double_t           z[24][1000];            // z(mm) hits positions in lab.
    Short_t            nhits[24];              // hits num. in each mdc
    
    struct TrackPar {
      Double_t z;                              // z of min. dist. to beam line
      Double_t theta;                          // theta of track
      Double_t x0;                             // cross with plane Ztarget
      Double_t y0;                             // cross with plane Ztarget  
    };
    TrackPar           trArr[10000];
    Bool_t             normalizeHists;         // fill with wt=1./nTracks

    Double_t           dPhiCut;                // dPhi cut
    Double_t           r0Cut;                  // r0 cut

    Int_t              combToMdc[6][2];
    TH1F*              dPhiH[7];               // [6] - combinations of MDC,s:
    TH1F*              r0H[7];                 // 1-2,1-3,1-4,2-3,2-4,3-4
    TH1F*              zVerH[6][7];            // [sec][comb]
    TH1F*              zVerDscH[6][7][10];     // [s][c][Downsc.fl.|| trig.Cond]
    TH2F*              zVerVsEventH[6][7];     // [sec][comb]
    Int_t              histsMode;              // =0 - one hist., 
                                               // =1 - 2 hist downsc.flag
                                               // =2 - trigger cond.
    Int_t              nZmBins;                // histogramms parameters
    Double_t           zmin;                   // ...
    Double_t           zmax;                   // ...
    Int_t              canvasWidth;            // canvas width in pixels
    Int_t              canvasHeight;           // canvas height in pixels
    Char_t             cnComb[6][100];         // canvases names
    Char_t             ctComb[6][100];         // canvases titles
    TCanvas*           canvs[6];               // pointers to canvases
    TString            addCnName;              // users part of canvas title

    TStopwatch         timer;                  // timer
    UInt_t             plotType;               // plot type (1,2,3,4 or 5)
                                               // type 1 - Z vs. event
                                               // type 2 - Y vs X
                                               // type 3 - Z vs time
                                               // type 4 - X vs Z
                                               // type 5 - Y vs Z

    Double_t           timeStep;               // canvases updating time step
    
    Stat_t             stat;                   // num.tracks added to hist.
    Bool_t             sumOfFiles;             // =kTRUE - all runs in one hist.
                                               // =kFALSE - hist. for each run
    Int_t              eventCounter;           // number of calculated events 
    Int_t              numEventsSave;          // save canv. each 
                                               // "numEventsSave" events
    Int_t              numRunEvents;           // number of calculated events in one run 
    Int_t              numNRunsEvents;         // number of calculated events in collectNRuns runs

    // collecting of runs:
    Int_t              collectNRuns;           // collect and save 
                                               // each "collectNRuns" runs
    Int_t              runsCounter;            // counter of runs
    TString            firstRunName;           // fileName of the first run
    TString            lastRunName;            // fileName of the last run
    TH1F*              dPhiForNR[7];           // [6] - combinations of MDC,s:
    TH1F*              r0ForNR[7];             // 1-2,1-3,1-4,2-3,2-4,3-4
    TH1F*              zVerForNR[6][7];        // [sec][comb]
    TH1F*              zVerDscForNR[6][7][10]; // [s][c][Downsc.fl.|| trig.Cond]
    TH2F*              zVerVsEventForNR[6][7]; // -/-
    TCanvas*           canvsForNR[6];          // pointers to canvases
    Char_t             cnCombForNR[6][100];    // canvases names
    Char_t             ctCombForNR[6][100];    // canvases titles
    TPad*              fPadsForNR[6][12];      // [comb][pad]
    
    // Histogram tracks_in_target vs run 
    Bool_t             drawInOutTracks;        // =kTRUE - do this hist.
    Int_t              nRunsDraw;              // num.of runs in hist.
    Double_t           firstTarPnt[6];         // [sec] Z region of target
    Double_t           lastTarPnt[6];          // [sec] ...
    Double_t*          inTargetArr;            // n.tracks in target region
    Double_t*          allTargetArr;           // totale num. of tracks
    Int_t              inOutTargCurrRun;       // counter of runs
    TH1F*              hTargTrFraction;        // histogram
    
    TString            pathHistOneRun;         // path for histogram
    TString            pathHistSumRun;         // path for histogram
    
    Bool_t             fillSeg;                // kTRUE - fill HMdcSeg category
    HCategory*         fSegCat;                // HMdcSeg category
    HLocation          locSeg;                 // location for HMdcSeg object
    
    TCanvas           *currCanvas;             // current canvas
    TPad              *currPad;                // current pad
    Int_t              pad;                    // current pad number
    Int_t              comb;                   // current combination
  public:
    HMdcTargetMon(Bool_t isClOff=kFALSE, UInt_t pt=0);
    HMdcTargetMon(const Text_t *name,const Text_t *title, Bool_t isClOff=kFALSE,
        UInt_t pt=0);
    ~HMdcTargetMon(void);
    virtual Int_t execute(void);
    virtual Bool_t init(void);
    virtual Bool_t reinit(void);
    virtual Bool_t finalize(void);
    
    void   drawCanvases(void);
    void   drawCanvasesRunsSum(void);
    void   setMode(Bool_t m)                        {mode = m;}
    void   setGraphicFormat(const Char_t* fileType);
    void   setHistPar(Int_t nb, Double_t z1, Double_t z2);
    void   setTargPos(Double_t xt, Double_t yt, Double_t zt,Int_t sec=-1);
    void   setTimeStep(Double_t tst)                {timeStep      = (tst<3.) ? 3.:tst;}
    void   setHistsMode(Int_t hMode)                {histsMode     = hMode;}
    void   drawDownScalHist(void)                   {histsMode     = 1;}
    void   drawTrigCondHist(void)                   {histsMode     = 2;}
    void   setFillSegFlag(Bool_t f=kTRUE)           {fillSeg       = f;}
    void   setRCut(Double_t rCut)                   {r0Cut         = rCut;}
    void   setDPhiCut(Double_t dPh)                 {dPhiCut       = dPh;}
    void   setDrawEachRun(void)                     {sumOfFiles    = kFALSE;}
    void   setDrawSumOfRuns(void)                   {sumOfFiles    = kTRUE;}
    void   setEachNEventsSave(Int_t nev)            {numEventsSave = nev;}
    void   setCollectNRuns(Int_t nf)                {collectNRuns  = nf;}
    void   addToCanvasName(const Char_t* add)       {addCnName     = add;}
    TH1F*  setTargetZRegion(Double_t fpoint,Double_t lpoint,Int_t nRuns=100,Int_t sec=-1);
    void   setCanvasSize(Int_t ww, Int_t wh);
    void   set2DhistType(Int_t pt)                  {plotType        = pt;}
    void   setPathOneRunHist(const Char_t* p)       {pathHistOneRun  = p;}
    void   setPathSumRunsHist(const Char_t* p)      {pathHistSumRun  = p;}
    void   selectEventWithTBits(Int_t tb)           {selectEvByTBits = tb;}
    void   doNormalization(Bool_t fl=kTRUE)         {normalizeHists  = fl;}
    Bool_t readMonParam(TString fileMonParam);

    TH1F** getDPhiH(void)                           {return dPhiH;}          
    TH1F** getZ0H(void)                             {return r0H;}
    TH1F** getZVerH(void)                           {return zVerH[0];}       
    TH1F** getZVerDscH(void)                        {return zVerDscH[0][0];}
    TH2F** getZVerVsEventH(void)                    {return zVerVsEventH[0];}

    TH1F* getDPhiH(Int_t s,Int_t m1,Int_t m2)             {return dPhiH[combInd(m1,m2)];}        
    TH1F* getZ0H(Int_t m1,Int_t m2)                       {return r0H[combInd(m1,m2)];}       
    TH1F* getZVerH(Int_t s,Int_t m1,Int_t m2)             {return zVerH[s][combInd(m1,m2)];}     
    TH1F* getZVerDscH(Int_t s,Int_t m1,Int_t m2,Int_t tr) {return zVerDscH[s][combInd(m1,m2)][tr];}
    TH2F* getZVerVsEventH(Int_t s,Int_t m1,Int_t m2)      {return zVerVsEventH[s][combInd(m1,m2)];}
    TH1F* getTargTrFraction(void)                         {return hTargTrFraction;}
    
  private:
    Int_t combInd(Int_t m1,Int_t m2) const          { if(m1<0||m1>=m2||m2>3) return 6; // comb. [6] for protection only!
                                                      return m1==0 ? m1+m2-1 : m1+m2;}
    void   setDefParam(UInt_t pt=0);
    Bool_t initHists(void);
    void   initRunsSumHists(void);
    void   extractFileInfo(void);
    void   fillDateTime(void);
    void   setCanvName(void);
    void   setCanvNameForNR(void);
    Int_t  eventTime(void);
    void   saveCanvases(void);
    void   saveCanvasesForNR(void);
    void   saveCanvas(TCanvas* canv,TString& path);
    void   resetHists(void);
    void   resetHistsRunsSum(void);
    void   addHistsToRunsSum(void);
    void   shiftArrays(void);
    void   fillTargTrFraction(void);
    void   fillInOutTarHistBin(Int_t bin);
    void   setEntriesInOutTHist(void);
    void   drawPad(Double_t x1,Double_t y1,Double_t x2,Double_t y2);
    void   drawPadS(Double_t x1,Double_t y1,Double_t x2,Double_t y2);

  ClassDef(HMdcTargetMon,0)
};

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