ROOT logo
#ifndef HMDCRICHMATCH_H
#define HMDCRICHMATCH_H

#include "hreconstructor.h"
#include "TString.h"
#include "TF1.h"

class HCategory;
class HIterator;
class HMdcLookUpTb;
class HMdcCalibrater1;
class HMdcEvntListCells;
class TH1F;
class TFile;
class TLine;

class HMdcDGaus : public TF1 {
  private:
    Float_t condMean;   // if abs(new_mean-old_mean)<condMean*old_sigma -ok.!
    Float_t condSig1;   // if (new_sig-old_sig)<condSig1*old_sigma-ok.!
    Float_t condSig2;   // if (old_sig-new_sig)<condSig2*old_sigma-ok.!
  public:
    HMdcDGaus(void);
    HMdcDGaus(const Char_t* name, Double_t xmin, Double_t xmax);
    void setTestCond(Float_t cM,Float_t cS1,Float_t cS2) {
      condMean=cM;
      condSig1=cS1;
      condSig2=cS2;
    }
    Int_t histFit(TH1F* hst, Float_t  oMean, Float_t  oSig,
        Float_t& nMean, Float_t& nSig, Bool_t doTest=kTRUE);
    static Double_t dgaus(Double_t *x, Double_t *par);
    
  ClassDef(HMdcDGaus,0)
};

class HMdcRichCorr : public HReconstructor  {
  private:
    TString fileName;              // input file name with extension
    TString flNmWoExt;             // input file name without extension
    TString runId;
    TString eventDate;
    TString eventTime;

    HMdcCalibrater1* fCalib1;      // pointer to mdc calibrater1
    
    HMdcEvntListCells* pListCells; // list of fired wires in current event
    Bool_t isMdcLCellsOwn;         // =kTRUE if MdcEvntListCells is own

    HCategory* fClusCat;           // pointer to HMdcClus data category
    HIterator* iterMdcClus;        // iterator

    Int_t nMdcHits[6];             // num. of mdc hits in [sector]

    HCategory* fRichHitCat;        // pointer to HMatchURich or HRichHit categ.
    HIterator* iterRichHit;

    Int_t nRichHits[6];            // num. of rich hits in [sector]
    Float_t richTheta[6][400];     // rings param.
    Float_t richPhi[6][400];       //
    Int_t nMdcHitRing[6][400];     // kTRUE - ring

    Float_t radToDeg;              //

    HMdcLookUpTb* fLookUpTb;       // clus. finder for MDC1&2
    Int_t level4;                  // Level[seg] of 4-layers finding
    Int_t level5;                  // Level[seg] of 5-layers finding
    Int_t nLayers[6][4];           // Number of layers in modules [sec][mod]
    Int_t clFinderType;            // Cluster finder type

    // Matching cuts:
    Int_t nRingsCut;               // Cut for number of matched rings
    Float_t dThCuts[6][2][2];      // [sec][mod][] dTheta bounds (rich-mdc)
    Float_t dPhCuts[6][2][2];      // [sec][mod][] dPhi bounds (rich-mdc)
    Float_t numSigTh;              // +/-sig. cut for dTheta
    Float_t numSigPh;              // +/-sig. cut for dPhi
    
    Float_t planeMeanDTh[2];
    Float_t planeSigmaDTh[2];
    Float_t planeMeanDPh[2];
    Float_t planeSigmaDPh[2];

    // Statistics:
    Int_t nEvents;                 // Total number of events.
    Int_t nRingEvents;             // Number of events with rings
    Int_t nMatchedEvents;          // Number of matched events
    Int_t nMatchedEvents1R;        // Number of events with 1 matched rings
    
    //Histograms:
    TString histFileDir;
    TString histFileSuffix;
    TString histFileOption;
    TString histFile;
    TString psFile;
    TH1F* hDThAll[2];
    TH1F* hDPhAll[2];
    TH1F* hDTh[6][2];
    TH1F* hDPh[6][2];
    TH1F* hNRings;
    TH1F* hNMRings;
    TH1F* hNEvents;
    
    Bool_t saveHist;
    Bool_t saveCanv;
    Bool_t savePSFile;
    
    // Testins cuts param.:
    HMdcDGaus funDGaus;        // fit function
    Int_t fitStatDTh[6][2];    // 0-ok.!, 1-mean and/or sigma shifted, 
    Int_t fitStatDPh[6][2];    // 2-fit corrupted

  public:
    HMdcRichCorr(void);
    HMdcRichCorr(const Text_t *name,const Text_t *title, Int_t nRCut=1);
    ~HMdcRichCorr(void);

    Bool_t init(void);
    Bool_t reinit(void);
    Bool_t finalize(void);
    Int_t  execute(void);
    void printStatus(void) const;

    void makeCalibrater1(Int_t vers=1, Int_t cut=1, Int_t domerge=0);

    void setNLayers(const Int_t *lst);
    void setTypeClFinder(Int_t type) {clFinderType=type;}
    void setLevel(Int_t l4s1, Int_t l5s1) {
      level4=l4s1;
      level5=l5s1;
    }

    void setDThetaCuts(Float_t dTh1, Float_t dTh2, Float_t nSig=3.);
    void setDPhiCuts(Float_t dPh1, Float_t dPh2, Float_t nSig=3.);
    void setDThetaCuts(const Float_t* dTh, Float_t nSig=3.);
    void setDPhiCuts(const Float_t* dPh, Float_t nSig=3.);
    
    void setDThetaCutsSig(Float_t mDTh,Float_t sDTh,Float_t nSig=3.);
    void setDPhiCutsSig(Float_t mDPh,Float_t sDPh,Float_t nSig=3.);
    void setDThetaCuts(const Float_t* mDTh,const Float_t* sDTh,Float_t nSig=3.);
    void setDPhiCuts(const Float_t* mDPh,const Float_t* sDPh,Float_t nSig=3.);
    
    void setHistFile(const Char_t* dir,const Char_t* suf,
                     const Char_t* option="NEW");
    
    void setTestCond(Float_t cM,Float_t cS1,Float_t cS2) {
      funDGaus.setTestCond(cM,cS1,cS2);
    }
    void setSaveFlags(Bool_t hist, Bool_t canv, Bool_t psfile) {
      saveHist=hist;
      saveCanv=canv;
      savePSFile=psfile;
    }

  private:
    void setup(void);
    void fillListByRichHit(void);
    Bool_t reinitMdcFinder(void);
    void findMdcClusters(void);
    void makeHist(void);
    TFile* openHistFile(const Char_t* flag);
    Float_t meanDTh(Int_t s, Int_t m) {
      return (dThCuts[s][m][0]+dThCuts[s][m][1])*0.5;
    }
    Float_t meanDPh(Int_t s, Int_t m) {
      return (dPhCuts[s][m][0]+dPhCuts[s][m][1])*0.5;
    }
    Float_t sigmaDTh(Int_t s, Int_t m) {
      return (numSigTh>0) ? (dThCuts[s][m][1]-dThCuts[s][m][0])/(2*numSigTh):0.;
    }
    Float_t sigmaDPh(Int_t s, Int_t m) {
      return (numSigPh>0) ? (dPhCuts[s][m][1]-dPhCuts[s][m][0])/(2*numSigPh):0.;
    }
    void calcAvMnSg(void);
    void drawCut(TLine* ln,Float_t mean,Float_t sigma,Float_t nSig,
        Int_t color, Double_t y);

  ClassDef(HMdcRichCorr,0)
};

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