13 #ifndef PndTrkTracking2_H 14 #define PndTrkTracking2_H 1 27 #include "TClonesArray.h" 28 #include "TGeoVolume.h" 29 #include "TStopwatch.h" 50 PndTrkTracking2(
int istamp,
bool iplot,
bool doMcComparison,
bool doSciTil);
90 virtual void Exec(Option_t *opt);
93 virtual InitStatus
Init();
97 fMvdAloneTracking =
false;
103 cout <<
"\nMy calculation of the time is :";
104 cout <<
" real time " << frtime2 <<
" sec., CPU time " << fctime2 <<
" seconds." << endl << endl;
110 sprintf(fSttBranch,
"%s", string1);
111 sprintf(fMvdPixelBranch,
"%s", string2);
112 sprintf(fMvdStripBranch,
"%s", string3);
125 fMvdAloneTracking =
true;
134 #define BOCA_90DEGREES_DIVISIONS 180 136 static const Short_t LEGIANDRE_NRADIUSDIV = 100,
140 MAXMCTRACKS = 100, MAXMVDPIXELHITS = 500, MAXMVDPIXELHITSINTRACK = 10, MAXMVDSTRIPHITS = 500, MAXMVDSTRIPHITSINTRACK = 10, MAXMVDTRACKSPEREVENT = 400,
142 MAXSCITILHITSINTRACK = 2,
143 MAXSTTHITS = 900, MAXSTTHITSINTRACK = 40, MAXTRACKSPEREVENT = 200,
145 NFIDIVCONFORMAL = 282, NRDIVCONFORMAL = 10,
146 NUMBER_STRAWS = 4542;
149 bool doMcComparison, fSingleHitListStt[MAXSTTHITS], iplotta, fMvdAloneTracking, fYesCleanMvd, fYesCleanStt, fYesSciTil, fInclusionListStt[MAXSTTHITS],
150 fInclusionListSciTil[MAXSCITILHITS], finMvdTrackCandPixel[MAXMVDPIXELHITS], finMvdTrackCandStrip[MAXMVDSTRIPHITS], fTypeConf[MAXTRACKSPEREVENT];
154 char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200];
156 Short_t fnAxialOuterRight,
161 fListAxialOuterRight[NUMBER_STRAWS],
162 fListAxialInnerRight[NUMBER_STRAWS],
163 fListAxialOuterLeft[NUMBER_STRAWS],
164 fListAxialInnerLeft[NUMBER_STRAWS],
168 fListSkewRight[NUMBER_STRAWS],
169 fListSkewLeft[NUMBER_STRAWS],
171 fListHitMvdTrackCand[MAXMVDTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK],
172 fListHitTypeMvdTrackCand[MAXMVDTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK], fListMvdDSPixelHitNotTrackCand[MAXMVDPIXELHITS],
173 fListMvdDSStripHitNotTrackCand[MAXMVDSTRIPHITS], fListMvdPixelHitsinTrack[MAXTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK],
174 fListMvdStripHitsinTrack[MAXTRACKSPEREVENT][MAXMVDSTRIPHITSINTRACK], fListMvdUSPixelHitNotTrackCand[MAXMVDPIXELHITS], fListMvdUSStripHitNotTrackCand[MAXMVDSTRIPHITS],
175 fListParContiguous[NUMBER_STRAWS][6], fListSciTilHitsinTrack[MAXTRACKSPEREVENT][MAXSCITILHITSINTRACK], fListSttParHitsinTrack[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK],
176 fListSttParHits[MAXSTTHITS], fListSttSkewHitsinTrack[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK], fListSttSkewHitsinTrackSolution[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK],
177 fListSttSkewHits[MAXSTTHITS], fListTrackCandHit[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK + MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK + MAXSCITILHITSINTRACK],
180 fListTrackCandHitType[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK + MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK + MAXSCITILHITSINTRACK], fnHitMvdTrackCand[MAXMVDTRACKSPEREVENT],
181 fnMCTracks, fMCtrack_of_Pixel[MAXMVDPIXELHITS], fMCtrack_of_Strip[MAXMVDSTRIPHITS], fnMvdDSPixelHitNotTrackCand, fnMvdDSStripHitNotTrackCand, fnMvdPixelHit,
182 fnMvdPixelHitsinTrack[MAXTRACKSPEREVENT], fnMvdStripHit, fnMvdStripHitsinTrack[MAXTRACKSPEREVENT], fnMvdTrackCand, fnMvdUSPixelHitNotTrackCand, fnMvdUSStripHitNotTrackCand,
183 fnParContiguous[NUMBER_STRAWS], fnSciTilHits, fnSciTilHitsinTrack[MAXTRACKSPEREVENT], fnSttParHitsinTrack[MAXTRACKSPEREVENT], fnSttSkewHitsinTrack[MAXTRACKSPEREVENT],
184 fnTrackCandHit[MAXTRACKSPEREVENT], fStrawCode[NUMBER_STRAWS], fStrawCode2[NUMBER_STRAWS], fTubeID[MAXSTTHITS];
186 int fNevents_to_plot, istampa, IVOLTE;
188 Double_t fALFA[MAXTRACKSPEREVENT], fBETA[MAXTRACKSPEREVENT], fBFIELD,
190 fCandidatePixelDriftRadius[MAXMVDPIXELHITS], fCandidatePixelErrorDriftRadius[MAXMVDPIXELHITS], fCandidatePixelS[MAXMVDPIXELHITS], fCandidatePixelZ[MAXMVDPIXELHITS],
192 fCandidateStripDriftRadius[MAXMVDSTRIPHITS], fCandidateStripErrorDriftRadius[MAXMVDSTRIPHITS], fCandidateStripS[MAXMVDSTRIPHITS], fCandidateStripZ[MAXMVDSTRIPHITS],
194 fCandidateSciTilDriftRadius, fCandidateSciTilErrorDriftRadius, fCandidateSciTilS, fCandidateSciTilZ,
196 fCandidateSkewS[2 * MAXSTTHITS],
197 fCandidateSkewZ[2 * MAXSTTHITS],
198 fCandidateSkewZDrift[2 * MAXSTTHITS],
199 fCandidateSkewZError[2 * MAXSTTHITS],
201 fCosine[LEGIANDRE_NTHETADIV], fCxMC[MAXMCTRACKS], fCyMC[MAXMCTRACKS], fDELTATHETA, fFimin, fGAMMA[MAXTRACKSPEREVENT], fMCSkewAloneX[MAXSTTHITS], fMCSkewAloneY[MAXSTTHITS],
202 fMCtruthTrkInfo[15][MAXMCTRACKS], fOx[MAXTRACKSPEREVENT], fOy[MAXTRACKSPEREVENT], fposizSciTil[MAXSCITILHITS][3], fpSciTilx[MAXSCITILHITS], fpSciTily[MAXSCITILHITS],
203 fpSciTilz[MAXSCITILHITS], fR[MAXTRACKSPEREVENT], frefindexMvdPixel[MAXMVDPIXELHITS], frefindexMvdStrip[MAXMVDSTRIPHITS], fradiaConf[NRDIVCONFORMAL], fR_MC[MAXMCTRACKS],
204 fsigmaXMvdPixel[MAXMVDPIXELHITS], fsigmaYMvdPixel[MAXMVDPIXELHITS], fsigmaZMvdPixel[MAXMVDPIXELHITS], fsigmaXMvdStrip[MAXMVDSTRIPHITS], fsigmaYMvdStrip[MAXMVDSTRIPHITS],
205 fsigmaZMvdStrip[MAXMVDSTRIPHITS], fSinus[LEGIANDRE_NTHETADIV], fS_SciTilHitsinTrack[MAXTRACKSPEREVENT][MAXSCITILHITS], fxTube[NUMBER_STRAWS], fxxyyTube[NUMBER_STRAWS],
206 fyTube[NUMBER_STRAWS], fzTube[NUMBER_STRAWS], fXMvdPixel[MAXMVDPIXELHITS], fXMvdStrip[MAXMVDSTRIPHITS], fYMvdPixel[MAXMVDPIXELHITS], fYMvdStrip[MAXMVDSTRIPHITS],
207 fZMvdPixel[MAXMVDPIXELHITS], fZMvdStrip[MAXMVDSTRIPHITS];
211 Double_t fctime, fctime2, frtime, frtime2;
212 TStopwatch ftimer, ftimer2;
217 FILE *HANDLE, *HANDLE2;
219 TH1F *hdeltaRPixel, *hdeltaRStrip, *hdeltaRPixel2, *hdeltaRStrip2;
247 *fSttMvdPndTrackCandArray,
249 *fSttMvdPndTrackArray;
253 void Initialization_ClassVariables();
255 bool AcceptHitsConformal(Double_t distance,
260 Short_t AssociateBetterAfterFitSkewHitsToXYTrack(Short_t TemporarynSttSkewhitinTrack,
261 Short_t SkewList[][2],
271 Double_t *temporeZDrift,
272 Double_t *temporeZError,
276 Short_t AssociateSciTilHit(Double_t Oxx, Double_t Oyy, Double_t Rr,
281 Short_t AssociateSkewHitsToXYTrack(
bool *InclusionListSkew, Short_t NSkewhits, Short_t *infoskew, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t info[][7], Double_t *WDX,
282 Double_t *WDY, Double_t *WDZ, Double_t Fi_low_limit, Double_t Fi_up_limit, Short_t Charge,
283 Short_t SkewList[][2],
291 Short_t AssociateSkewHitsToXYTrack2(
bool *InclusionListSkew, Short_t NSkewhits, Short_t *infoskew, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t info[][7], Double_t *WDX,
292 Double_t *WDY, Double_t *WDZ, Double_t Fi_low_limit, Double_t Fi_up_limit, Short_t Charge,
293 Short_t SkewList[][2],
301 bool BadTrack_ParStt(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge,
304 Double_t Ycross[2], Short_t nHits, Short_t *ListHits, Double_t info[][7], Double_t
cut, Short_t maxnum,
309 void CalculateSinandCosin();
311 void CollectParSttHitsagain(
Vec<bool> &keepit,
Vec<bool> &Mvdhits, Double_t info[][7], Short_t nSttParHit, Short_t StartTrackCand, Short_t EndTrackCand, Double_t *KAPPA,
312 Double_t *FI0, Double_t *Fi_low_limit, Double_t *Fi_up_limit,
313 Short_t *fnSttParHitsinTrack,
314 Short_t fListSttParHitsinTrack[][MAXSTTHITSINTRACK]
317 Short_t CompareTracks(Short_t first_track, Short_t second_track);
319 bool EliminateClones(Short_t nTotalCandidates,
324 void EliminateSpuriousSZ_bis(Short_t ncand, Short_t MaxTurnofTracks, Double_t signPz, Double_t *SchosenPixel, Double_t *SchosenStrip, Double_t *SchosenSkew,
325 Double_t *ZchosenPixel, Double_t *ZchosenStrip, Double_t *ZchosenSkew, Double_t *ErrorchosenPixel, Double_t *ErrorchosenStrip,
326 Double_t *ErrorchosenSkew, Double_t KAPPA, Double_t FI0, Double_t Rr);
328 void EliminateSpuriousSZ_ter(Short_t ncand, Short_t MaxTurnofTracks, Double_t signPz, Double_t *SchosenPixel, Double_t *SchosenStrip, Double_t *SchosenSkew,
329 Double_t *ZchosenPixel, Double_t *ZchosenStrip, Double_t *ZchosenSkew, Double_t *ErrorchosenPixel, Double_t *ErrorchosenStrip,
330 Double_t *ErrorchosenSkew, Double_t KAPPA, Double_t FI0, Double_t Rr);
332 void FindCharge(Double_t oX, Double_t oY, Short_t nHits, Double_t *X, Double_t *Y, Short_t *Charge);
334 Short_t FindTrackStrictCollection(Short_t NFiCELLDISTANCE,
338 Short_t NParallelToSearch, Short_t *ListHitsinTrackinWhichToSearch,
bool *InclusionList, Short_t *FiConformalIndex,
339 Short_t *OutputListHitsinTrack);
341 void GetVolumeCharacteristics(TGeoVolume *tgeovol, TGeoHMatrix *mat, Double_t GlobalScal[3], Double_t GlobalTrans[3], Double_t GlobalRot[9]);
343 void FixDiscontinuitiesFiangleinSZplane(Short_t TemporarynSkewHitsinTrack,
Vec<Double_t> &S, Double_t *Fi_initial_helix_referenceframe, Short_t Charge);
345 void InfoXYZParal(Double_t info[][7], Short_t infopar, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t KAPPA, Double_t FI0, Short_t Charge,
349 void Initial_SttParHits_DecreasingR_Ordering(Double_t info[][7], Short_t *ListSttParHi, Int_t nSttParHit);
351 void LoadPndTrack_TrackCand(
bool *keepit,
bool *SttSZfit, Short_t nTotalCandidates, Short_t *Charge, Int_t nSttTrackCand, Double_t *FI0, Double_t *KAPPA, Double_t info[][7],
352 Double_t SchosenSkew[][MAXSTTHITS], Double_t ZchosenSkew[][MAXSTTHITS], Short_t *daTrackFoundaTrackMC);
354 void LoadSZetc_forSZfit(Short_t ncand,
362 Double_t *ErrorDriftRadiusbis,
364 Double_t *DriftRadiusbis,
371 void LoadSZetc_forSZfit2(Short_t ncand,
374 Double_t *TemporaryZ,
375 Double_t *TemporaryZDrift,
376 Double_t *TemporaryZError,
379 Double_t *ErrorDriftRadiusbis,
381 Double_t *DriftRadiusbis,
388 void MakeInclusionListStt(Int_t nSttHit, Short_t *TubeID, Double_t info[][7]);
390 void MatchMvdHitsToSttTracks(
Vec<bool> &keepit, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst,
Vec<Short_t> &CHARGE,
391 Short_t *nPixelHitsinTrack,
392 Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK],
393 Short_t *nStripHitsinTrack,
394 Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]
397 void MatchMvdHitsToSttTracksagain(
Vec<bool> &keepit,
Vec<bool> &Mvdhits, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst,
400 Short_t *nPixelHitsinTrack,
401 Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK],
402 Short_t *nStripHitsinTrack,
403 Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]
406 void MatchMvdHitsToSttTracks2(
bool *keepit, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst, Short_t *CHARGE,
407 Short_t *nPixelHitsinTrack,
408 Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK],
409 Short_t *nStripHitsinTrack,
410 Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]
414 OrderingConformal_Loading_ListTrackCandHit(
bool *keepit, Short_t ncand, Double_t info[][7], Double_t Trajectory_Start[][2], Short_t *CHARGE, Double_t SchosenSkew[][MAXSTTHITS]);
416 void OrderingR_Loading_ListTrackCandHit(
bool *keepit, Short_t ncand, Double_t info[][7]);
418 void OrderingSttSkewandSttParallel(Double_t oX, Double_t oY, Double_t Rr, Short_t nSkewhit, Short_t *ListSkewHits,
422 Short_t Charge, Short_t nParHits, Short_t *ListParHits, Double_t *U, Double_t *V,
427 void OrderingUsingConformal(Double_t oX, Double_t oY, Double_t Traj_Sta[2], Int_t nHits,
432 void Ordering_Loading_ListTrackCandHit(
434 bool *keepit, Short_t FirstCandidate, Short_t LastCandidate, Double_t info[][7], Double_t Trajectory_Start[][2],
436 Short_t *CHARGE, Double_t SchosenSkew[][MAXSTTHITS]);
437 void RefitMvdStt(Short_t nCandHit, Short_t *fListTrackCandHit, Short_t *fListTrackCandHitType, Double_t info[][7], Double_t rotationangle, Double_t trajectory_vertex[2],
445 void StartFromSciTil(Short_t *Charge, Short_t *FiConformalIndex, Double_t *Fi_final_helix_referenceframe, Double_t *Fi_initial_helix_referenceframe, Double_t *Fi_low_limit,
446 Double_t *Fi_up_limit, Short_t HitsinBoxConformal[][NRDIVCONFORMAL][NFIDIVCONFORMAL], Double_t info[][7], Double_t infoparalConformal[][5],
447 Short_t nBoxConformal[][NFIDIVCONFORMAL], Int_t nSttParHit, Int_t &nSttTrackCand, Short_t *RConformalIndex, Double_t *trajectory_vertex, Double_t *UU,
450 void SeparateInnerOuterParallel(
453 Short_t nHits, Short_t *ListHits, Double_t info[][7], Double_t RStrawDetInnerParMax,
456 Short_t *nInnerHits, Short_t *ListInnerHits, Short_t *nOuterHits, Short_t *ListOuterHits,
458 Short_t *nInnerHitsLeft, Short_t *ListInnerHitsLeft, Short_t *nInnerHitsRight, Short_t *ListInnerHitsRight,
460 Short_t *nOuterHitsLeft, Short_t *ListOuterHitsLeft, Short_t *nOuterHitsRight, Short_t *ListOuterHitsRight);
462 bool SttParalCleanup(Double_t GAP, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t FI0, Double_t FiLimitAdmissible, Short_t nHits,
463 Short_t *Listofhits, Double_t info[][7], Double_t RStrawDetMin, Double_t RStrawDetInnerParMax, Double_t RStrawDetOuterParMin, Double_t RStrawDetMax);
465 bool SttSkewCleanup(Double_t GAP, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t FI0, Double_t FiLimitAdmissible, Short_t nHits,
466 Short_t *Listofhits, Double_t *S, Double_t info[][7], Double_t RminStrawSkew, Double_t RmaxStrawSkew, Double_t
cut, Short_t maxnum);
468 bool TrackCleanup(Double_t GAP, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t KAPPA, Double_t FI0, Short_t Charge, Double_t Start[3], Short_t &nHitsPar, Short_t *ListHitsPar,
469 Short_t &nHitsSkew, Short_t *ListHitsSkew, Double_t *auxS, Double_t info[][7], Double_t RStrawDetMin, Double_t ApotemaMaxInnerPar, Double_t ApotemaMinSkew,
470 Double_t ApotemaMaxSkew, Double_t ApotemaMinOuterPar, Double_t RStrawDetMax);
472 Short_t TrkAssociatedParallelHitsToHelixQuater(
bool *ExclusionList, Double_t
m, Double_t q, Short_t Status, Short_t nHitsinTrack, Short_t *ListHitsinTrack, Int_t NhitsParallel,
473 Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t info[][7], Double_t infoparalConformal[][5], Short_t *RConformalIndex,
474 Short_t *FiConformalIndex, Short_t nBoxConformal[][NFIDIVCONFORMAL], Short_t HitsinBoxConformal[][NRDIVCONFORMAL][NFIDIVCONFORMAL],
475 Short_t *auxListHitsinTrack);
477 Short_t TrkAssociatedParallelHitsToHelix5(
bool *ExclusionList, Int_t NhitsParallel, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t info[][7], Double_t Fi_low, Double_t Fi_up,
478 Short_t *auxListHitsinTrack);
480 void StoreSZ_MvdScitil(Short_t ncand);
void SetEventsToPlot(int nev)
void SetPersistency(Bool_t val=kTRUE)
virtual void Exec(Option_t *opt)
virtual InitStatus Init()
#define BOCA_90DEGREES_DIVISIONS
void SetPersistence(Bool_t persistence)
void SetInputBranchName(const char *string1, const char *string2, const char *string3)
void NoMvdAloneTracking()
void YesMvdAloneTracking()