ROOT logo
#ifndef HRKTRACKBF2_H
#define HRKTRACKBF2_H

#include "hreconstructor.h"
#include "hgeomtransform.h"
#include "hmdctrkcand.h"
#include "hmdcgetcontainers.h"
#include "htofclustersim.h"

class HCategory;
class HIterator;
class HMetaMatch2;
class HMetaMatchPar;
class HMdcSeg;
class HMdcHit;
class HMdcTrkCand;
class HBaseTrack;
class HSplineTrack;
class HShowerHit;
class HTofHit;
class HTofCluster;
class HRungeKutta;
class HRKTrackB;
class HMdcTrackGFieldPar;
class HMagnetPar;
class HSpecGeomPar;
class HMdcGeomPar;
class HTofGeomPar;
class HRpcGeomPar;
class HShowerGeometry;
class HEmcGeomPar;
class HMdcGetContainers;
class HMdcSizesCells;
class HRpcCluster;
class HEmcCluster;

class HRKTrackBF2 : public HReconstructor 
{
 private:
   Float_t fieldFactor; // field scaling factor
   Short_t mode;        // mode = {0 || 2} for initial momentum as {selfGuess, SplineTrack-Guess}
   HGeomTransform      secTrans[6];     // sector transformation, used to transform META point to MdcSegment-ccord-system
   HGeomTransform      showerSM[6];     //trans shower, modtosec
   HGeomTransform      emcSM[6];        //trans emc, modtosec
   HGeomTransform      tofSM[6][8];     //trans tof,  modtosec
   HGeomTransform      rpcSM[6];        //trans rpc,  modtosec
   HGeomTransform      transMetaSM;     //trans meta, modtosec
   
   
    Float_t            sigma2TofX[6];       
    Float_t            sigma2TofY[6];
    Float_t            sTofX[6];
    Float_t            sTofY[6];
    Float_t            quality2TOFCut[6];
    Float_t            sigma2MdcInRpcX[6];
    Float_t            sigma2MdcInRpcY[6];
    Float_t            sigma2MdcInShrX[6];
    Float_t            sigma2MdcInShrY[6];
    Float_t            sigma2MdcInEmcX[6];
    Float_t            sigma2MdcInEmcY[6];
    Float_t            sShowerX[6];
    Float_t            sShowerY[6];
    Float_t            sEmcX[6];
    Float_t            sEmcY[6];
    Float_t            sRpcX[6];
    Float_t            sRpcY[6];
    Float_t            quality2RPCCut[6];
    Float_t            quality2SHOWERCut[6];
    Float_t            quality2EMCCut[6];
   
   
   
   HMdcTrackGFieldPar* field;           // field map
   HMagnetPar*         pMagnet;         // parameter container for magnet settings
   HSpecGeomPar*       fSpecGeomPar;    // sector and target geometry
   HMdcGetContainers*  fGetCont;        // pointer to HMdcGetContainers object
   HTofGeomPar*        fTofGeometry;    // TOF geometry
   HRpcGeomPar*        fRpcGeometry;    // Rpc geometry
   HShowerGeometry*    fShowerGeometry; // Shower geometry
   HEmcGeomPar*        fEmcGeometry;    // Emc geometry
   HMdcSizesCells*     pMSizesCells;    // pointer to HMdcSizesCells objects
   
   HCategory*          fCatMetaMatch;   // pointer to MetaMatch category
   HIterator*          fMetaMatchIter;  // iterator on the MetaMatch category
   HMetaMatch2*        pMetaMatch;      // pointer to the MetaMatch object
   HMetaMatchPar*      fMatchPar;
   HCategory*          fCatMdcTrkCand;  // pointer to MDC track candidate category
   HMdcTrkCand*        pMdcTrkCand;     // pointer to the MDC track candidate
   HCategory*          fCatMdcSeg;      // pointer to the MDC segments category
   HCategory*          fCatMdcHit;      // pointer to the MDC hit
   HCategory*          fSplineTrack;    // pointer to the Spline track category (for initial momentum guess)
   HSplineTrack*       pSplineTrack;    // Spline track 
   HCategory*          fCatKine;        // pointer to the Kine category
   HCategory*          fCatShower;      // pointer to the Shower category
   HCategory*          fCatEmc;         // pointer to the Emc category
   HCategory*          fCatTof;         // pointer to the Tof hit category
   HTofHit  *          pTofHit[3];
   HCategory*          fCatTofCluster;  // pointer to the Tof cluster category
   HCategory*          fCatRpcCluster;
   HTofCluster*        pTofCluster;     // Tof cluster
   HCategory*          fCatRKTrack;     // pointer to the Runge Kutta track category 
   HRungeKutta*        pRungeKutta;     // Runge Kutta track

   HLocation   sectorloc;        // sector location
   Int_t  sector;                // sector number (0..5)
   Short_t  system;              // meta detector (0==Tofino, 1==Tof)
   HMdcSeg* pMdcSeg1;            // pointer to inner segment
   HMdcSeg* pMdcSeg2;            // pointer to outer segment
   Bool_t mdcInstalled[4][6];    //! remembers which MDCs have known geometry
   Float_t multSig[8];           // multiplicators for resolution
   Float_t vertex[3];            // vertex
   HGeomVector normVecRpc[6];    // normal vector on the Tofino module in the sector coordinate system
   HGeomVector centerRpc[6];     // physical center of Tofino module in the sector coordinate system
   HGeomVector normVecShower[6]; // normal vector on the Shower module in the sector coordinate system
   HGeomVector normVecEmc[6];    // normal vector on the Emc module in the sector coordinate system
   HGeomVector normVecTof[6][8]; // normal vector on each Tof module in the sector coordinate system
   HGeomVector metaNormVec;      // normal vector on the meta module in the sector coordinate system
   HGeomVector pointMeta;        // META hit

   Bool_t  success;              // flag indicating severe problems on input of RK
   Short_t qRK;                  // polarity
   Float_t pRK;                  // momentum
   Float_t momentumGuess;        // initial value for momentum if supplied
   Float_t chiqRK;               // chi2 of Runge Kutta
   Float_t trackLength;          // full track length (Target--MDC1--MDC4--META)
   Float_t tof;                  // time-of-flight
   Float_t metaeloss;            // energy loss from meta detector
   Float_t beta;                 // beta value
   Float_t mass2;                // mass**2
   Float_t RKxyzMETA[3];         // META point after RK fitting

   Float_t xTof,yTof,zTof;
   Float_t zMod;

   Float_t dXrms2;
   Float_t dYrms2;
   Float_t dX, dY;
   Float_t qualityRpc;
   Float_t qualityShower;
   Float_t qualityEmc;
   Float_t qualityTof;
   
   HShowerHit  *pShowerHit;
   HEmcCluster *pEmcCluster;
   HRpcCluster *pRpc;
   Short_t indRpc;
   Short_t indTof[3];
   Short_t indShower;
   Short_t indEmc;

   Bool_t doMassStuff();
   void matchWithRpc();
   void matchWithShower();
   void matchWithEmc();
   void matchWithTof();
   void calcBeta(Float_t, Int_t , Bool_t option = kTRUE);
   Int_t indexRK;
   

   HRKTrackB* fillData(HMdcSeg*,HMdcSeg*,HSplineTrack*, Int_t &);
   Int_t calcPosDirFromSegment(HMdcSeg* pSeg,Int_t ioseg,Double_t*,Double_t*,Bool_t flag);
   void setMatchingParams(Int_t );
   Float_t getQuality(Float_t, Float_t, Float_t, Float_t);
   
 public:
   HRKTrackBF2();
   HRKTrackBF2(const Text_t name[], Short_t m = 2);
   ~HRKTrackBF2(); 
 
   void clear();
   Bool_t init();
   Bool_t reinit();
   Int_t  execute();
   Bool_t finalize() { return kTRUE; }

   
   ClassDef(HRKTrackBF2,0) // Runge-Kutta reconstructor
};

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