AMSDST
myTrTrackPlus.h
Go to the documentation of this file.
1 // Authors: M.Duranti - INFN di Perugia
2 #ifndef myTrTrackPlus_h
3 #define myTrTrackPlus_h
4 
5 #include <map>
6 #include "myTrTrackBase.h"
7 #include "myPoint.h"
8 
9 #define DOHOWEVERALLFITS
10 
11 #ifdef _WITHGBATCH_
12 //#define PATHONB
13 #endif //#ifdef _WITHGBATCH_
14 
15 //---------------------------------------------
16 
17 struct fitresult {
18  Double32_t Rigidity;
19  Double32_t ErrRinv;
20  Double32_t Chisq;
21  Double32_t NormChisqX;
22  Double32_t NormChisqY;
23 };
24 
26 
27  public:
29  myTrTrackPlus();
32 
33  Int_t QStatusL[9];
37 
38  protected:
39  std::map<int, fitresult> _fitresultmap;
40 
41  public:
42  static int ComputeIndex(int algo=0, int pattern=0, int refit=0);
43  virtual int iTrTrackPar(int algo=0, int pattern=0, int refit=0);
44  virtual Double32_t GetRigidity(int ittp=0);
45  virtual Double32_t GetErrRinv(int ittp=0);
46  virtual Double32_t GetChisq(int ittp=0);
47  virtual Double32_t GetNormChisqX(int ittp=0);
48  virtual Double32_t GetNormChisqY(int ittp=0);
49  virtual Double32_t GetRigidityCorrectedByMagnField(int ittp=0);
50 
51  Int_t BitPatternJ;
52  Int_t kDef;
53 
54  Short_t span();
55 
56  protected:
57  Int_t kDefNoMS;
59  Int_t k89;
60  Int_t k8;
61  Int_t k9;
62  Int_t kinn;
63  Int_t k89NoMS;
64  Int_t k8NoMS;
65  Int_t k9NoMS;
66  Int_t kinnNoMS;
68  Int_t k8SameWeight;
69  Int_t k9SameWeight;
71  Int_t kUp;
72  Int_t kLow;
73  Int_t kExt;
74  Int_t kAl;
75  Int_t kCIE;
76  Int_t kPGCIE;
77  Int_t Refit;
78 
79  public:
80  /* Double32_t B; */
81  /* Double32_t SenThetaX; */
82  /* Double32_t SenThetaY; */
83  /* Double32_t L; */
84  /* Double32_t pMDR; */
85  /* Double32_t pMDR_known; */
86 
87  Double32_t LH;
88 
95 
102 
103  Double32_t TruncMeanX;
104  Double32_t TruncMeanY;
105  Double32_t TruncMeanInnX;
106  Double32_t TruncMeanInnY;
107 
108  Int_t Q_NPoints;
109  Double32_t Q_RMS;
110  Double32_t InnerQ_RMS;
111 
113  Double32_t factor;
122 
123  //------------------------
124 
125  Double32_t distHMx_inn;
126  Double32_t distHMy_inn;
127  Double32_t distHMx_L1;
128  Double32_t distHMy_L1;
129  Double32_t distHMx_L9;
130  Double32_t distHMy_L9;
131  Double32_t distHMx_L8;
132  Double32_t distHMy_L8;
133 
134  Double32_t distNHx_inn;
135  Double32_t distNHy_inn;
136  Double32_t distNHx_L1;
137  Double32_t distNHy_L1;
138  Double32_t distNHx_L9;
139  Double32_t distNHy_L9;
140  Double32_t distNHx_L8;
141  Double32_t distNHy_L8;
142 
143  public:
144  virtual void Clear(Option_t* option="");
145  protected:
146  virtual void init();
147 
148  public:
150 };
151 
152 #ifdef _WITHGBATCH_
153 
154 class myTrTrackPlusFiller: public myTrTrackPlus {
155  public:
157  myTrTrackPlusFiller();
159  ~myTrTrackPlusFiller();
160 
161  TrTrackR* track;
162 
163  virtual void Fill(TrTrackR* _track, short int ipart, EcalShowerR* shower, Double_t beta=999, bool kMC=false, bool heavy=true);
164  virtual void FillCharge(TrTrackR* _track, Double_t beta);
165  virtual void FillMoreHeavy(TrTrackR* _track);
166  private:
167  virtual void Fits(Double_t beta=999, bool kMC=false, bool heavy=true);
168 
169  virtual int AddResults(int algo=0, int pattern=0, int refit=0, float mass=TrTrackR::DefaultMass, float chrg=TrTrackR::DefaultCharge, float beta=999, float fixrig=0.);
170  inline virtual void AddResults(fitresult& fr, int algo=0, int pattern=0, int refit=0);
171 
172  public:
173  virtual void Clear(Option_t* option="");
174  private:
175  virtual void init();
176 
177  public:
178  ClassDef(myTrTrackPlusFiller,1);
179 };
180 
181 Double_t getRigidity(TrTrackR* track, int par, bool rigcorr=false);
182 Double_t getChisq(TrTrackR* track, int par);
183 Double_t getNormChisqX(TrTrackR* track, int par);
184 Double_t getNormChisqY(TrTrackR* track, int par);
185 Double_t getLogExtChisq(TrTrackR *trk, int k89, int k8, int k9);
186 
187 Double_t HitCloseTrack(int layer, int side, const char* type, AMSEventR* fEvent, TrTrackR* track, bool kMC=false, int TrackId=0);
188 void BuildHitCloseTrack(AMSEventR* fEvent, Double_t** distHM, Double_t** distNH, TrTrackR* track, int TrackId, std::vector<TrClusterR*> TrClusUsed, bool kMC);
189 void BuildVectorUsedClusters(AMSEventR* fEvent, std::vector<TrClusterR*>& TrClusUsed);
190 class myPoint;//"forward declaration"
191 void GetMinDistanceNoiseHits(TrTrackR *track, myPoint mindistance[]);
192 
193 void BuildResiduals(bool kMC, Double_t** res, TrTrackR* track, int TrackId);
194 Double_t LocalResidual(int layer, int side, bool kMC, AMSEventR* fEvent, TrTrackR* track, int TrackId=0);
195 
196 void PathOnB(TrTrackR* tr, int kDef, MagField* magfield, Double_t& B, Double_t& SenThetaX, Double_t& SenThetaY, Double_t& L, Double_t& pMDR, Double_t& pMDR_known, Double_t step=0.1, bool modulus=false);
197 
198 #endif //#ifdef _WITHGBATCH_
199 
200 #endif