1 #ifndef PndTrkTracking2_H 2 #define PndTrkTracking2_H 1 15 #include "TClonesArray.h" 16 #include "TGeoVolume.h" 17 #include "TStopwatch.h" 38 PndTrkTracking2(
int istamp,
bool iplot,
bool doMcComparison,
bool doSciTil);
78 virtual void Exec(Option_t *opt);
81 virtual InitStatus
Init();
85 fMvdAloneTracking =
false;
91 cout <<
"\nMy calculation of the time is :";
92 cout <<
" real time " << frtime2 <<
" sec., CPU time " << fctime2 <<
" seconds." << endl << endl;
98 sprintf(fSttBranch,
"%s", string1);
99 sprintf(fMvdPixelBranch,
"%s", string2);
100 sprintf(fMvdStripBranch,
"%s", string3);
113 fMvdAloneTracking =
true;
122 #define BOCA_90DEGREES_DIVISIONS 180 124 static const Short_t LEGIANDRE_NRADIUSDIV = 100,
128 MAXMCTRACKS = 100, MAXMVDPIXELHITS = 500, MAXMVDPIXELHITSINTRACK = 10, MAXMVDSTRIPHITS = 500, MAXMVDSTRIPHITSINTRACK = 10, MAXMVDTRACKSPEREVENT = 400,
130 MAXSCITILHITSINTRACK = 2,
131 MAXSTTHITS = 900, MAXSTTHITSINTRACK = 40, MAXTRACKSPEREVENT = 200,
133 NFIDIVCONFORMAL = 282, NRDIVCONFORMAL = 10,
134 NUMBER_STRAWS = 4542;
137 bool doMcComparison, fSingleHitListStt[MAXSTTHITS], iplotta, fMvdAloneTracking, fYesCleanMvd, fYesCleanStt, fYesSciTil, fInclusionListStt[MAXSTTHITS],
138 fInclusionListSciTil[MAXSCITILHITS], finMvdTrackCandPixel[MAXMVDPIXELHITS], finMvdTrackCandStrip[MAXMVDSTRIPHITS], fTypeConf[MAXTRACKSPEREVENT];
142 char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200];
144 Short_t fnAxialOuterRight,
149 fListAxialOuterRight[NUMBER_STRAWS],
150 fListAxialInnerRight[NUMBER_STRAWS],
151 fListAxialOuterLeft[NUMBER_STRAWS],
152 fListAxialInnerLeft[NUMBER_STRAWS],
156 fListSkewRight[NUMBER_STRAWS],
157 fListSkewLeft[NUMBER_STRAWS],
159 fListHitMvdTrackCand[MAXMVDTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK],
160 fListHitTypeMvdTrackCand[MAXMVDTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK], fListMvdDSPixelHitNotTrackCand[MAXMVDPIXELHITS],
161 fListMvdDSStripHitNotTrackCand[MAXMVDSTRIPHITS], fListMvdPixelHitsinTrack[MAXTRACKSPEREVENT][MAXMVDPIXELHITSINTRACK],
162 fListMvdStripHitsinTrack[MAXTRACKSPEREVENT][MAXMVDSTRIPHITSINTRACK], fListMvdUSPixelHitNotTrackCand[MAXMVDPIXELHITS], fListMvdUSStripHitNotTrackCand[MAXMVDSTRIPHITS],
163 fListParContiguous[NUMBER_STRAWS][6], fListSciTilHitsinTrack[MAXTRACKSPEREVENT][MAXSCITILHITSINTRACK], fListSttParHitsinTrack[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK],
164 fListSttParHits[MAXSTTHITS], fListSttSkewHitsinTrack[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK], fListSttSkewHitsinTrackSolution[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK],
165 fListSttSkewHits[MAXSTTHITS], fListTrackCandHit[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK + MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK + MAXSCITILHITSINTRACK],
168 fListTrackCandHitType[MAXTRACKSPEREVENT][MAXSTTHITSINTRACK + MAXMVDPIXELHITSINTRACK + MAXMVDSTRIPHITSINTRACK + MAXSCITILHITSINTRACK], fnHitMvdTrackCand[MAXMVDTRACKSPEREVENT],
169 fnMCTracks, fMCtrack_of_Pixel[MAXMVDPIXELHITS], fMCtrack_of_Strip[MAXMVDSTRIPHITS], fnMvdDSPixelHitNotTrackCand, fnMvdDSStripHitNotTrackCand, fnMvdPixelHit,
170 fnMvdPixelHitsinTrack[MAXTRACKSPEREVENT], fnMvdStripHit, fnMvdStripHitsinTrack[MAXTRACKSPEREVENT], fnMvdTrackCand, fnMvdUSPixelHitNotTrackCand, fnMvdUSStripHitNotTrackCand,
171 fnParContiguous[NUMBER_STRAWS], fnSciTilHits, fnSciTilHitsinTrack[MAXTRACKSPEREVENT], fnSttParHitsinTrack[MAXTRACKSPEREVENT], fnSttSkewHitsinTrack[MAXTRACKSPEREVENT],
172 fnTrackCandHit[MAXTRACKSPEREVENT], fStrawCode[NUMBER_STRAWS], fStrawCode2[NUMBER_STRAWS], fTubeID[MAXSTTHITS];
174 int fNevents_to_plot, istampa, IVOLTE;
176 Double_t fALFA[MAXTRACKSPEREVENT], fBETA[MAXTRACKSPEREVENT], fBFIELD,
178 fCandidatePixelDriftRadius[MAXMVDPIXELHITS], fCandidatePixelErrorDriftRadius[MAXMVDPIXELHITS], fCandidatePixelS[MAXMVDPIXELHITS], fCandidatePixelZ[MAXMVDPIXELHITS],
180 fCandidateStripDriftRadius[MAXMVDSTRIPHITS], fCandidateStripErrorDriftRadius[MAXMVDSTRIPHITS], fCandidateStripS[MAXMVDSTRIPHITS], fCandidateStripZ[MAXMVDSTRIPHITS],
182 fCandidateSciTilDriftRadius, fCandidateSciTilErrorDriftRadius, fCandidateSciTilS, fCandidateSciTilZ,
184 fCandidateSkewS[2 * MAXSTTHITS],
185 fCandidateSkewZ[2 * MAXSTTHITS],
186 fCandidateSkewZDrift[2 * MAXSTTHITS],
187 fCandidateSkewZError[2 * MAXSTTHITS],
189 fCosine[LEGIANDRE_NTHETADIV], fCxMC[MAXMCTRACKS], fCyMC[MAXMCTRACKS], fDELTATHETA, fFimin, fGAMMA[MAXTRACKSPEREVENT], fMCSkewAloneX[MAXSTTHITS], fMCSkewAloneY[MAXSTTHITS],
190 fMCtruthTrkInfo[15][MAXMCTRACKS], fOx[MAXTRACKSPEREVENT], fOy[MAXTRACKSPEREVENT], fposizSciTil[MAXSCITILHITS][3], fpSciTilx[MAXSCITILHITS], fpSciTily[MAXSCITILHITS],
191 fpSciTilz[MAXSCITILHITS], fR[MAXTRACKSPEREVENT], frefindexMvdPixel[MAXMVDPIXELHITS], frefindexMvdStrip[MAXMVDSTRIPHITS], fradiaConf[NRDIVCONFORMAL], fR_MC[MAXMCTRACKS],
192 fsigmaXMvdPixel[MAXMVDPIXELHITS], fsigmaYMvdPixel[MAXMVDPIXELHITS], fsigmaZMvdPixel[MAXMVDPIXELHITS], fsigmaXMvdStrip[MAXMVDSTRIPHITS], fsigmaYMvdStrip[MAXMVDSTRIPHITS],
193 fsigmaZMvdStrip[MAXMVDSTRIPHITS], fSinus[LEGIANDRE_NTHETADIV], fS_SciTilHitsinTrack[MAXTRACKSPEREVENT][MAXSCITILHITS], fxTube[NUMBER_STRAWS], fxxyyTube[NUMBER_STRAWS],
194 fyTube[NUMBER_STRAWS], fzTube[NUMBER_STRAWS], fXMvdPixel[MAXMVDPIXELHITS], fXMvdStrip[MAXMVDSTRIPHITS], fYMvdPixel[MAXMVDPIXELHITS], fYMvdStrip[MAXMVDSTRIPHITS],
195 fZMvdPixel[MAXMVDPIXELHITS], fZMvdStrip[MAXMVDSTRIPHITS];
199 Double_t fctime, fctime2, frtime, frtime2;
200 TStopwatch ftimer, ftimer2;
205 FILE *HANDLE, *HANDLE2;
207 TH1F *hdeltaRPixel, *hdeltaRStrip, *hdeltaRPixel2, *hdeltaRStrip2;
235 *fSttMvdPndTrackCandArray,
237 *fSttMvdPndTrackArray;
241 void Initialization_ClassVariables();
243 bool AcceptHitsConformal(Double_t distance,
248 Short_t AssociateBetterAfterFitSkewHitsToXYTrack(Short_t TemporarynSttSkewhitinTrack,
249 Short_t SkewList[][2],
259 Double_t *temporeZDrift,
260 Double_t *temporeZError,
264 Short_t AssociateSciTilHit(Double_t Oxx, Double_t Oyy, Double_t Rr,
269 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,
270 Double_t *WDY, Double_t *WDZ, Double_t Fi_low_limit, Double_t Fi_up_limit, Short_t Charge,
271 Short_t SkewList[][2],
279 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,
280 Double_t *WDY, Double_t *WDZ, Double_t Fi_low_limit, Double_t Fi_up_limit, Short_t Charge,
281 Short_t SkewList[][2],
289 bool BadTrack_ParStt(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge,
292 Double_t Ycross[2], Short_t nHits, Short_t *ListHits, Double_t info[][7], Double_t
cut, Short_t maxnum,
297 void CalculateSinandCosin();
299 void CollectParSttHitsagain(
Vec<bool> &keepit,
Vec<bool> &Mvdhits, Double_t info[][7], Short_t nSttParHit, Short_t StartTrackCand, Short_t EndTrackCand, Double_t *KAPPA,
300 Double_t *FI0, Double_t *Fi_low_limit, Double_t *Fi_up_limit,
301 Short_t *fnSttParHitsinTrack,
302 Short_t fListSttParHitsinTrack[][MAXSTTHITSINTRACK]
305 Short_t CompareTracks(Short_t first_track, Short_t second_track);
307 bool EliminateClones(Short_t nTotalCandidates,
312 void EliminateSpuriousSZ_bis(Short_t ncand, Short_t MaxTurnofTracks, Double_t signPz, Double_t *SchosenPixel, Double_t *SchosenStrip, Double_t *SchosenSkew,
313 Double_t *ZchosenPixel, Double_t *ZchosenStrip, Double_t *ZchosenSkew, Double_t *ErrorchosenPixel, Double_t *ErrorchosenStrip,
314 Double_t *ErrorchosenSkew, Double_t KAPPA, Double_t FI0, Double_t Rr);
316 void EliminateSpuriousSZ_ter(Short_t ncand, Short_t MaxTurnofTracks, Double_t signPz, Double_t *SchosenPixel, Double_t *SchosenStrip, Double_t *SchosenSkew,
317 Double_t *ZchosenPixel, Double_t *ZchosenStrip, Double_t *ZchosenSkew, Double_t *ErrorchosenPixel, Double_t *ErrorchosenStrip,
318 Double_t *ErrorchosenSkew, Double_t KAPPA, Double_t FI0, Double_t Rr);
320 void FindCharge(Double_t oX, Double_t oY, Short_t nHits, Double_t *X, Double_t *Y, Short_t *Charge);
322 Short_t FindTrackStrictCollection(Short_t NFiCELLDISTANCE,
326 Short_t NParallelToSearch, Short_t *ListHitsinTrackinWhichToSearch,
bool *InclusionList, Short_t *FiConformalIndex,
327 Short_t *OutputListHitsinTrack);
329 void GetVolumeCharacteristics(TGeoVolume *tgeovol, TGeoHMatrix *mat, Double_t GlobalScal[3], Double_t GlobalTrans[3], Double_t GlobalRot[9]);
331 void FixDiscontinuitiesFiangleinSZplane(Short_t TemporarynSkewHitsinTrack,
Vec<Double_t> &S, Double_t *Fi_initial_helix_referenceframe, Short_t Charge);
333 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,
337 void Initial_SttParHits_DecreasingR_Ordering(Double_t info[][7], Short_t *ListSttParHi, Int_t nSttParHit);
339 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],
340 Double_t SchosenSkew[][MAXSTTHITS], Double_t ZchosenSkew[][MAXSTTHITS], Short_t *daTrackFoundaTrackMC);
342 void LoadSZetc_forSZfit(Short_t ncand,
350 Double_t *ErrorDriftRadiusbis,
352 Double_t *DriftRadiusbis,
359 void LoadSZetc_forSZfit2(Short_t ncand,
362 Double_t *TemporaryZ,
363 Double_t *TemporaryZDrift,
364 Double_t *TemporaryZError,
367 Double_t *ErrorDriftRadiusbis,
369 Double_t *DriftRadiusbis,
376 void MakeInclusionListStt(Int_t nSttHit, Short_t *TubeID, Double_t info[][7]);
378 void MatchMvdHitsToSttTracks(
Vec<bool> &keepit, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst,
Vec<Short_t> &CHARGE,
379 Short_t *nPixelHitsinTrack,
380 Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK],
381 Short_t *nStripHitsinTrack,
382 Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]
385 void MatchMvdHitsToSttTracksagain(
Vec<bool> &keepit,
Vec<bool> &Mvdhits, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst,
388 Short_t *nPixelHitsinTrack,
389 Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK],
390 Short_t *nStripHitsinTrack,
391 Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]
394 void MatchMvdHitsToSttTracks2(
bool *keepit, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst, Short_t *CHARGE,
395 Short_t *nPixelHitsinTrack,
396 Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK],
397 Short_t *nStripHitsinTrack,
398 Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK]
402 OrderingConformal_Loading_ListTrackCandHit(
bool *keepit, Short_t ncand, Double_t info[][7], Double_t Trajectory_Start[][2], Short_t *CHARGE, Double_t SchosenSkew[][MAXSTTHITS]);
404 void OrderingR_Loading_ListTrackCandHit(
bool *keepit, Short_t ncand, Double_t info[][7]);
406 void OrderingSttSkewandSttParallel(Double_t oX, Double_t oY, Double_t Rr, Short_t nSkewhit, Short_t *ListSkewHits,
410 Short_t Charge, Short_t nParHits, Short_t *ListParHits, Double_t *U, Double_t *V,
415 void OrderingUsingConformal(Double_t oX, Double_t oY, Double_t Traj_Sta[2], Int_t nHits,
420 void Ordering_Loading_ListTrackCandHit(
422 bool *keepit, Short_t FirstCandidate, Short_t LastCandidate, Double_t info[][7], Double_t Trajectory_Start[][2],
424 Short_t *CHARGE, Double_t SchosenSkew[][MAXSTTHITS]);
425 void RefitMvdStt(Short_t nCandHit, Short_t *fListTrackCandHit, Short_t *fListTrackCandHitType, Double_t info[][7], Double_t rotationangle, Double_t trajectory_vertex[2],
433 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,
434 Double_t *Fi_up_limit, Short_t HitsinBoxConformal[][NRDIVCONFORMAL][NFIDIVCONFORMAL], Double_t info[][7], Double_t infoparalConformal[][5],
435 Short_t nBoxConformal[][NFIDIVCONFORMAL], Int_t nSttParHit, Int_t &nSttTrackCand, Short_t *RConformalIndex, Double_t *trajectory_vertex, Double_t *UU,
438 void SeparateInnerOuterParallel(
441 Short_t nHits, Short_t *ListHits, Double_t info[][7], Double_t RStrawDetInnerParMax,
444 Short_t *nInnerHits, Short_t *ListInnerHits, Short_t *nOuterHits, Short_t *ListOuterHits,
446 Short_t *nInnerHitsLeft, Short_t *ListInnerHitsLeft, Short_t *nInnerHitsRight, Short_t *ListInnerHitsRight,
448 Short_t *nOuterHitsLeft, Short_t *ListOuterHitsLeft, Short_t *nOuterHitsRight, Short_t *ListOuterHitsRight);
450 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,
451 Short_t *Listofhits, Double_t info[][7], Double_t RStrawDetMin, Double_t RStrawDetInnerParMax, Double_t RStrawDetOuterParMin, Double_t RStrawDetMax);
453 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,
454 Short_t *Listofhits, Double_t *S, Double_t info[][7], Double_t RminStrawSkew, Double_t RmaxStrawSkew, Double_t
cut, Short_t maxnum);
456 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,
457 Short_t &nHitsSkew, Short_t *ListHitsSkew, Double_t *auxS, Double_t info[][7], Double_t RStrawDetMin, Double_t ApotemaMaxInnerPar, Double_t ApotemaMinSkew,
458 Double_t ApotemaMaxSkew, Double_t ApotemaMinOuterPar, Double_t RStrawDetMax);
460 Short_t TrkAssociatedParallelHitsToHelixQuater(
bool *ExclusionList, Double_t
m, Double_t q, Short_t Status, Short_t nHitsinTrack, Short_t *ListHitsinTrack, Int_t NhitsParallel,
461 Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t info[][7], Double_t infoparalConformal[][5], Short_t *RConformalIndex,
462 Short_t *FiConformalIndex, Short_t nBoxConformal[][NFIDIVCONFORMAL], Short_t HitsinBoxConformal[][NRDIVCONFORMAL][NFIDIVCONFORMAL],
463 Short_t *auxListHitsinTrack);
465 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,
466 Short_t *auxListHitsinTrack);
468 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()