ROOT logo
#ifndef HMDCTRACKINGEFF_H
#define HMDCTRACKINGEFF_H

#include "hreconstructor.h"
#include "hlocation.h"
#include "TRandom.h"
#include "TIterator.h"

class TNtuple;
class TFile;
class HMatrixCategory;
class HLinearCategory;
class HMdcSegSim;
class HMdcTrkCand;
class HGeantKine;
class TLorentzVector;

class HMdcTrackingEff : public HReconstructor {
protected:
    TString fNameRoot;   //! file name of root output file
    TFile*   out;        //! file pointer
    TNtuple* single;
    TNtuple* pairs;

    TIterator* iterTrkCand;     //!
    TIterator* iterTrkCandIdeal;//!
    TIterator* iterGeantTof;    //!
    TIterator* iterGeantShower; //!


    HMatrixCategory* catmHMdcTrkCand;     //!
    HMatrixCategory* catmHMdcTrkCandIdeal;//!

    HMatrixCategory* catmHMdcSegSim;      //!
    HMatrixCategory* catmHMdcSegIdeal;    //!

    HMatrixCategory* catmHGeantTof;       //!
    HMatrixCategory* catmHGeantShower;    //!
    HLinearCategory* catlHGeantKine;      //!


    //trkCandIdeal
    Int_t     indSegId[2];               //!
    HMdcSegSim* pSegId[2];               //!

    //trkCand
    Int_t     indSeg[2];                 //!
    HMdcSegSim* pSeg[2];                 //!

    //segmentId
    Int_t trkNrId;                       //!





    static const Int_t nEvnt  =1 ;     // number of event   indexes stored in data word
    static const Int_t nKine  =10;     // number of kine    indexes stored in data word
    static const Int_t nSeg   =24;     // number of segment indexes stored in data word
    static const Int_t nChi2  =2;
    static const Int_t npair  =25;
    static const Int_t nsingle=2;

    static const Int_t maxTrks=600;   //!
    static const Int_t nSingle=40;    //! nEvnt + nkine + nSeg + nChi2 + nsingle
    static const Int_t nPairs =98;    //! nEvnt + nkine + nSeg + nChi2 + nkine + nSeg + nChi2 + npair
    static const Int_t sizeInd=10;    //!

    Int_t indexTable[maxTrks*sizeInd]; //! maxtrks tracks : ind kine, ind seg1_id,ind seg2_id, ind seg1,ind seg2,ind used
                                       //                   0         1           2            3        4        5
                                       //                   parent trk, geninfo geninfo1 geninfo2
                                       //                   6           7       8        9

    Float_t dSingle[nSingle];  //!
    Float_t dPairs [nPairs];   //!

    Int_t offsetSeg1Kine;  //! starting index in data word for particle 1 (kine)
    Int_t offsetSeg2Kine;  //! starting index in data word for particle 2 (kine)
    Int_t offsetSeg1    ;  //! starting index in data word for seg1       (seg)
    Int_t offsetSeg2    ;  //! starting index in data word for seg2       (seg)
    Int_t offsetChi2    ;  //! starting index in data word for chi2 relative to seg

    Int_t offsetPair    ;  //! starting index in data word for pair   infos
    Int_t offsetSingle  ;  //! starting index in data word for single infos

    void         initVariables();
    void         resetDataArray()
    {
	for (Int_t i=0;i<nSingle;i++)dSingle[i]=-999;
	for (Int_t i=0;i<nPairs;i++) dPairs [i]=-999;
    }
    void         getSegPointers(Int_t*,HMdcSegSim**,HMdcTrkCand*,HMatrixCategory*,Int_t mode=0);
    HGeantKine*  getKineInfo(Int_t,Int_t&,Int_t&,Float_t&,Float_t&,Float_t&,HLinearCategory*);
    Bool_t       sameTrkSegments(Int_t,HMdcSegSim**,Int_t mode=0);
    HMdcTrkCand* findSameRealCand(Int_t,Int_t*,HMdcSegSim**,TIterator*,HMatrixCategory*,HMatrixCategory*,HLinearCategory*);
    TString      getProcessString(Float_t);
    Bool_t       sameDecay(Int_t,Int_t,Float_t,Float_t,Float_t,Float_t);
    void         resetIndexTable(Int_t*,Int_t);
    Bool_t       fillIndexTable(Int_t*,Int_t&,Int_t,Int_t*,Int_t*,HLinearCategory*);
    void         printIndexTable(Int_t*,Int_t);
    Int_t        findPartner(Int_t*,Int_t,Int_t);
    Bool_t       hasPartner(Int_t*,Int_t,Int_t);
    void         fillSegData(Int_t,Int_t*,Float_t*,Int_t,HMatrixCategory*,HMatrixCategory*);
    void         fillKineData(Int_t&,Int_t,Int_t*,Float_t*,Int_t,HMatrixCategory*,HLinearCategory*);
    Int_t        findGeantMeta(Int_t,Int_t,TIterator*,HMatrixCategory*,TIterator*,HMatrixCategory*);
    void         fillNTuple(Int_t,Int_t*,Int_t,HMatrixCategory*,HMatrixCategory*,HLinearCategory*,TIterator*,HMatrixCategory*,TIterator*,HMatrixCategory*,TNtuple*,TNtuple*);
    Float_t      getLabPhiDeg(Int_t sector, Float_t phi);
    Float_t      getThetaPairDeg(TLorentzVector& v);
    Float_t      getPhiPairDeg(TLorentzVector& v);
    void         kineToSegPhiThetaDeg(HGeantKine* kine,Float_t& theta,Float_t& phi);
    Float_t      pairPhiToLabDeg(Float_t phi);
    Float_t      pairThetaToLabDeg(Float_t theta);
    void         fillVectorFromSeg(TLorentzVector& v, Int_t slot,Int_t type);
    void         fillVectorFromKine(TLorentzVector& v, Int_t slot);
public:
    HMdcTrackingEff(void);
    HMdcTrackingEff(const Text_t* name,const Text_t* title);
    ~HMdcTrackingEff(void);
    void    setOutputRoot (TString="ntuple_tracking_eff.root");
    Bool_t  init(void);
    Bool_t  finalize();
    Int_t   execute();
    ClassDef(HMdcTrackingEff,0) // fills ntuple for efficiency of tracking
};

#endif /* !HMDCTRACKINGEFF_H */
 hmdctrackingeff.h:1
 hmdctrackingeff.h:2
 hmdctrackingeff.h:3
 hmdctrackingeff.h:4
 hmdctrackingeff.h:5
 hmdctrackingeff.h:6
 hmdctrackingeff.h:7
 hmdctrackingeff.h:8
 hmdctrackingeff.h:9
 hmdctrackingeff.h:10
 hmdctrackingeff.h:11
 hmdctrackingeff.h:12
 hmdctrackingeff.h:13
 hmdctrackingeff.h:14
 hmdctrackingeff.h:15
 hmdctrackingeff.h:16
 hmdctrackingeff.h:17
 hmdctrackingeff.h:18
 hmdctrackingeff.h:19
 hmdctrackingeff.h:20
 hmdctrackingeff.h:21
 hmdctrackingeff.h:22
 hmdctrackingeff.h:23
 hmdctrackingeff.h:24
 hmdctrackingeff.h:25
 hmdctrackingeff.h:26
 hmdctrackingeff.h:27
 hmdctrackingeff.h:28
 hmdctrackingeff.h:29
 hmdctrackingeff.h:30
 hmdctrackingeff.h:31
 hmdctrackingeff.h:32
 hmdctrackingeff.h:33
 hmdctrackingeff.h:34
 hmdctrackingeff.h:35
 hmdctrackingeff.h:36
 hmdctrackingeff.h:37
 hmdctrackingeff.h:38
 hmdctrackingeff.h:39
 hmdctrackingeff.h:40
 hmdctrackingeff.h:41
 hmdctrackingeff.h:42
 hmdctrackingeff.h:43
 hmdctrackingeff.h:44
 hmdctrackingeff.h:45
 hmdctrackingeff.h:46
 hmdctrackingeff.h:47
 hmdctrackingeff.h:48
 hmdctrackingeff.h:49
 hmdctrackingeff.h:50
 hmdctrackingeff.h:51
 hmdctrackingeff.h:52
 hmdctrackingeff.h:53
 hmdctrackingeff.h:54
 hmdctrackingeff.h:55
 hmdctrackingeff.h:56
 hmdctrackingeff.h:57
 hmdctrackingeff.h:58
 hmdctrackingeff.h:59
 hmdctrackingeff.h:60
 hmdctrackingeff.h:61
 hmdctrackingeff.h:62
 hmdctrackingeff.h:63
 hmdctrackingeff.h:64
 hmdctrackingeff.h:65
 hmdctrackingeff.h:66
 hmdctrackingeff.h:67
 hmdctrackingeff.h:68
 hmdctrackingeff.h:69
 hmdctrackingeff.h:70
 hmdctrackingeff.h:71
 hmdctrackingeff.h:72
 hmdctrackingeff.h:73
 hmdctrackingeff.h:74
 hmdctrackingeff.h:75
 hmdctrackingeff.h:76
 hmdctrackingeff.h:77
 hmdctrackingeff.h:78
 hmdctrackingeff.h:79
 hmdctrackingeff.h:80
 hmdctrackingeff.h:81
 hmdctrackingeff.h:82
 hmdctrackingeff.h:83
 hmdctrackingeff.h:84
 hmdctrackingeff.h:85
 hmdctrackingeff.h:86
 hmdctrackingeff.h:87
 hmdctrackingeff.h:88
 hmdctrackingeff.h:89
 hmdctrackingeff.h:90
 hmdctrackingeff.h:91
 hmdctrackingeff.h:92
 hmdctrackingeff.h:93
 hmdctrackingeff.h:94
 hmdctrackingeff.h:95
 hmdctrackingeff.h:96
 hmdctrackingeff.h:97
 hmdctrackingeff.h:98
 hmdctrackingeff.h:99
 hmdctrackingeff.h:100
 hmdctrackingeff.h:101
 hmdctrackingeff.h:102
 hmdctrackingeff.h:103
 hmdctrackingeff.h:104
 hmdctrackingeff.h:105
 hmdctrackingeff.h:106
 hmdctrackingeff.h:107
 hmdctrackingeff.h:108
 hmdctrackingeff.h:109
 hmdctrackingeff.h:110
 hmdctrackingeff.h:111
 hmdctrackingeff.h:112
 hmdctrackingeff.h:113
 hmdctrackingeff.h:114
 hmdctrackingeff.h:115
 hmdctrackingeff.h:116
 hmdctrackingeff.h:117
 hmdctrackingeff.h:118
 hmdctrackingeff.h:119
 hmdctrackingeff.h:120
 hmdctrackingeff.h:121
 hmdctrackingeff.h:122
 hmdctrackingeff.h:123
 hmdctrackingeff.h:124
 hmdctrackingeff.h:125
 hmdctrackingeff.h:126