PandaRoot
PndTrkTracking2.h
Go to the documentation of this file.
1 //****************************************************************************
2 //* This file is part of PandaRoot. *
3 //* *
4 //* PandaRoot is distributed under the terms of the *
5 //* GNU General Public License (GPL) version 3, *
6 //* copied verbatim in the file "LICENSE". *
7 //* *
8 //* Copyright (C) 2006 - 2024 FAIR GmbH and copyright holders of PandaRoot *
9 //* The copyright holders are listed in the file "COPYRIGHTHOLDERS". *
10 //* The authors are listed in the file "AUTHORS". *
11 //****************************************************************************
12 
13 #ifndef PndTrkTracking2_H
14 #define PndTrkTracking2_H 1
15 #include <vector>
16 
17 // #include "FairRootManager.h"
18 #include "PndPersistencyTask.h"
19 #include "PndGeoSttPar.h"
20 #include "PndMCTrack.h"
21 #include "PndTrkPrintouts.h"
22 #include "PndSttTrack.h"
23 #include "PndSttTrackFinder.h"
24 #include "PndSttTube.h"
25 #include "PndTrkVectors.h"
26 
27 #include "TClonesArray.h"
28 #include "TGeoVolume.h"
29 #include "TStopwatch.h"
30 #include "TList.h"
31 #include "TH1.h"
32 #include "TH1F.h"
33 #include "TH2F.h"
34 
35 class FairMCPoint;
36 
38 
39  public:
42 
44  PndTrkTracking2(Int_t verbose);
45 
47  PndTrkTracking2(int istamp, bool iplot, bool doMcComparison);
48 
50  PndTrkTracking2(int istamp, bool iplot, bool doMcComparison, bool doSciTil);
51 
54 
55  void Cleanup()
56  {
57  fYesCleanStt = true;
58  fYesCleanMvd = true;
59  return;
60  };
61  void NOCleanup()
62  {
63  fYesCleanStt = false;
64  fYesCleanMvd = false;
65  return;
66  };
67 
68  void CleanupStt()
69  {
70  fYesCleanStt = true;
71  return;
72  };
73  void NOCleanupStt()
74  {
75  fYesCleanStt = false;
76  return;
77  };
78  void CleanupMvd()
79  {
80  fYesCleanMvd = true;
81  return;
82  };
83  void NOCleanupMvd()
84  {
85  fYesCleanMvd = false;
86  return;
87  };
88 
90  virtual void Exec(Option_t *opt);
91 
93  virtual InitStatus Init();
94 
96  {
97  fMvdAloneTracking = false;
98  return;
99  };
100 
101  void PrintTime()
102  {
103  cout << "\nMy calculation of the time is :";
104  cout << " real time " << frtime2 << " sec., CPU time " << fctime2 << " seconds." << endl << endl;
105  return;
106  };
107 
108  void SetInputBranchName(const char *string1, const char *string2, const char *string3)
109  {
110  sprintf(fSttBranch, "%s", string1);
111  sprintf(fMvdPixelBranch, "%s", string2);
112  sprintf(fMvdStripBranch, "%s", string3);
113  return;
114  };
115 
116  void SetEventsToPlot(int nev) { fNevents_to_plot = nev; };
117 
118  void SetParContainers();
119 
121  void SetPersistence(Bool_t persistence) { SetPersistency(persistence); }
122 
124  {
125  fMvdAloneTracking = true;
126  return;
127  };
128 
129  // write out the histograms
130  void WriteHistograms();
131 
132  private:
133 // divisions of the Theta angle range [0, 90 degrees );
134 #define BOCA_90DEGREES_DIVISIONS 180
135 
136  static const Short_t LEGIANDRE_NRADIUSDIV = 100,
137  LEGIANDRE_NTHETADIV = 2 * BOCA_90DEGREES_DIVISIONS, // divisions of the Theta angle range [0, 2*PI radians);
138  // LEGIANDRE_NRADIUSDIV = 100,
139  // LEGIANDRE_NTHETADIV = 360,
140  MAXMCTRACKS = 100, MAXMVDPIXELHITS = 500, MAXMVDPIXELHITSINTRACK = 10, MAXMVDSTRIPHITS = 500, MAXMVDSTRIPHITSINTRACK = 10, MAXMVDTRACKSPEREVENT = 400,
141  MAXSCITILHITS = 200, // max SciTil hits total.
142  MAXSCITILHITSINTRACK = 2, // max SciTil hits in one track.
143  MAXSTTHITS = 900, MAXSTTHITSINTRACK = 40, MAXTRACKSPEREVENT = 200,
144  // NFIDIVCONFORMAL = (Short_t) (3.141592654 * 45./0.5),
145  NFIDIVCONFORMAL = 282, NRDIVCONFORMAL = 10,
146  NUMBER_STRAWS = 4542; // the straw numbers
147  // start at 1 and goes up to 4542 included;
148 
149  bool doMcComparison, fSingleHitListStt[MAXSTTHITS], iplotta, fMvdAloneTracking, fYesCleanMvd, fYesCleanStt, fYesSciTil, fInclusionListStt[MAXSTTHITS],
150  fInclusionListSciTil[MAXSCITILHITS], finMvdTrackCandPixel[MAXMVDPIXELHITS], finMvdTrackCandStrip[MAXMVDSTRIPHITS], fTypeConf[MAXTRACKSPEREVENT];
151 
154  char fSttBranch[200], fMvdPixelBranch[200], fMvdStripBranch[200];
155 
156  Short_t fnAxialOuterRight, // number of axial Stt, outer, on the right (looking into the beam);
157  fnAxialInnerRight, // number of axial Stt, inner, on the right (looking into the beam);
158  fnAxialOuterLeft, // number of axial Stt, outer, on the left (looking into the beam);
159  fnAxialInnerLeft, // number of axial Stt, inner, on the left (looking into the beam);
160 
161  fListAxialOuterRight[NUMBER_STRAWS], // list of axial Stt, outer, on the right (looking into the beam);
162  fListAxialInnerRight[NUMBER_STRAWS], // list of axial Stt, inner, on the lright (looking into the beam);
163  fListAxialOuterLeft[NUMBER_STRAWS], // list of axial Stt, outer, on the left (looking into the beam);
164  fListAxialInnerLeft[NUMBER_STRAWS], // list of axial Stt, inner, on the left (looking into the beam);
165 
166  fnSkewRight, // number of skew Stt, on the right (looking into the beam);
167  fnSkewLeft, // number of skew Stt, on the right (looking into the beam);
168  fListSkewRight[NUMBER_STRAWS], // list of axial Stt, inner, on the lright (looking into the beam);
169  fListSkewLeft[NUMBER_STRAWS], // list of axial Stt, outer, on the left (looking into the beam);
170 
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],
178  // type = 0 --> Mvd Pixel; type = 1 --> Mvd Strip; type = 1 --> Mvd Strip; type = 2 --> Stt Parallel
179  // type = 3 --> Stt Straw; type 1001 --> SciTil; type -1 --> noise.
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];
185 
186  int fNevents_to_plot, istampa, IVOLTE;
187 
188  Double_t fALFA[MAXTRACKSPEREVENT], fBETA[MAXTRACKSPEREVENT], fBFIELD,
189 
190  fCandidatePixelDriftRadius[MAXMVDPIXELHITS], fCandidatePixelErrorDriftRadius[MAXMVDPIXELHITS], fCandidatePixelS[MAXMVDPIXELHITS], fCandidatePixelZ[MAXMVDPIXELHITS],
191 
192  fCandidateStripDriftRadius[MAXMVDSTRIPHITS], fCandidateStripErrorDriftRadius[MAXMVDSTRIPHITS], fCandidateStripS[MAXMVDSTRIPHITS], fCandidateStripZ[MAXMVDSTRIPHITS],
193 
194  fCandidateSciTilDriftRadius, fCandidateSciTilErrorDriftRadius, fCandidateSciTilS, fCandidateSciTilZ,
195 
196  fCandidateSkewS[2 * MAXSTTHITS], // here 2*MAXSTTHITS because in principle the skew straw may have
197  fCandidateSkewZ[2 * MAXSTTHITS], // 2 intersections wit the helix cylinder;
198  fCandidateSkewZDrift[2 * MAXSTTHITS], // "
199  fCandidateSkewZError[2 * MAXSTTHITS], // "
200 
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];
208 
209  //----------------------- real, cputime stuff;
210 
211  Double_t fctime, fctime2, frtime, frtime2;
212  TStopwatch ftimer, ftimer2;
213  //--------------------------------
214 
215  // FairRootManager *ioman;
216 
217  FILE *HANDLE, *HANDLE2;
218 
219  TH1F *hdeltaRPixel, *hdeltaRStrip, *hdeltaRPixel2, *hdeltaRStrip2;
220 
221  TClonesArray
223  *fMCTrackArray,
225  *fMvdMCPointArray,
227  *fMvdPixelHitArray,
229  *fMvdStripHitArray,
231  *fMvdTrackCandArray,
233  *fSciTHitArray,
235  *fSciTPointArray,
237  *fSttTubeArray,
239  *fSttPointArray,
241  *fSttHitArray,
243  *fSttTrackArray,
245  *fSttTrackCandArray,
247  *fSttMvdPndTrackCandArray,
249  *fSttMvdPndTrackArray;
250 
251  PndGeoSttPar *fSttParameters; // CHECK added
252 
253  void Initialization_ClassVariables();
254 
255  bool AcceptHitsConformal(Double_t distance,
256  Double_t DriftConfR, // drift radius in conformal space
257  Double_t StrawConfR // straw radius in conformal space
258  );
259 
260  Short_t AssociateBetterAfterFitSkewHitsToXYTrack(Short_t TemporarynSttSkewhitinTrack, // input
261  Short_t SkewList[][2], // input, list of selected skew hits (in skew numbering)
262  Double_t *S, // input, S coordinate of selected Skew hit
263  Double_t *Z, // input, Z coordinate of selected Skew hit
264  Double_t *ZDrift, // input, drift distance IN Z DIRECTION only, of selected Skew hit
265  Double_t *ZError, // input, error (in SZ space) IN Z DIRECTION only, of selected Skew hit
266  Double_t KAPPA, // input, KAPPA result of fit
267  Double_t FI0, // input, FI0 result of fit
268  Short_t *tempore, // output result, associated skew hits
269  Double_t *temporeS, // output, associated skew hit S
270  Double_t *temporeZ, // output, associated skew hits Z
271  Double_t *temporeZDrift, // output, associated skew hit Z drift
272  Double_t *temporeZError, // output, associated skew hits Z error;
273  Short_t *STATUS // output
274  );
275 
276  Short_t AssociateSciTilHit(Double_t Oxx, Double_t Oyy, Double_t Rr,
277  Short_t *List, // output, list of SciTil hits associated (max. 2);
278  Double_t *esse // output, list of S of the SciTil hits associated.
279  );
280 
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], // output,list of selected skew hits (skew numbering)
284  Double_t *S, // output, S coordinate of selected Skew hit
285  Double_t *Z, // output, Z coordinate of selected Skew hit
286  Double_t *ZDrift, // output, drift distance IN Z DIRECTION only,
287  // of selected Skew hit
288  Double_t *ZError // output, error (in SZ space) IN Z DIRECTION only, of selected Skew hit.
289  );
290 
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], // output,list of selected skew hits (skew numbering)
294  Double_t *S, // output, S coordinate of selected Skew hit
295  Double_t *Z, // output, Z coordinate of selected Skew hit
296  Double_t *ZDrift, // output, drift distance IN Z DIRECTION only,
297  // of selected Skew hit
298  Double_t *ZError // output, error (in SZ space) IN Z DIRECTION only, of selected Skew hit.
299  );
300 
301  bool BadTrack_ParStt(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge,
302  Double_t Xcross[2], // Xcross[0]=point of entrance;
303  // Xcross[1]=point of exit.
304  Double_t Ycross[2], Short_t nHits, Short_t *ListHits, Double_t info[][7], Double_t cut, Short_t maxnum,
305  Short_t islack // uncertainty allowed as far as
306  // the n. of hits that should be present.
307  );
308 
309  void CalculateSinandCosin();
310 
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, // input/output
314  Short_t fListSttParHitsinTrack[][MAXSTTHITSINTRACK] // input/output
315  );
316 
317  Short_t CompareTracks(Short_t first_track, Short_t second_track);
318 
319  bool EliminateClones(Short_t nTotalCandidates, // input;
320  Double_t fraction, // input; raction of common hits to declare the two tracks clones;
321  bool *keepit // input and output;
322  );
323 
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);
327 
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);
331 
332  void FindCharge(Double_t oX, Double_t oY, Short_t nHits, Double_t *X, Double_t *Y, Short_t *Charge);
333 
334  Short_t FindTrackStrictCollection(Short_t NFiCELLDISTANCE,
335  // seed track (original notation) as far as the Fi angle is concerned
336  Short_t iSeed,
337  // n. of hits to search in ListHitsinTrackinWhichToSearch
338  Short_t NParallelToSearch, Short_t *ListHitsinTrackinWhichToSearch, bool *InclusionList, Short_t *FiConformalIndex,
339  Short_t *OutputListHitsinTrack);
340 
341  void GetVolumeCharacteristics(TGeoVolume *tgeovol, TGeoHMatrix *mat, Double_t GlobalScal[3], Double_t GlobalTrans[3], Double_t GlobalRot[9]);
342 
343  void FixDiscontinuitiesFiangleinSZplane(Short_t TemporarynSkewHitsinTrack, Vec<Double_t> &S, Double_t *Fi_initial_helix_referenceframe, Short_t Charge);
344 
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,
346  Double_t *Posiz // output
347  );
348 
349  void Initial_SttParHits_DecreasingR_Ordering(Double_t info[][7], Short_t *ListSttParHi, Int_t nSttParHit);
350 
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);
353 
354  void LoadSZetc_forSZfit(Short_t ncand, // input
355  Short_t nhitsinfit,
356  // Double_t * TemporaryS, // input
357  // Double_t * TemporaryZ, // input
358  // Double_t * TemporaryZDrift, // input
359  // Double_t * TemporaryZError, // input
360 
361  Vec<Double_t> &ErrorDriftRadius, // output
362  Double_t *ErrorDriftRadiusbis, // output
363  Vec<Double_t> &DriftRadius, // output
364  Double_t *DriftRadiusbis, // output
365  Vec<Double_t> &S, // output
366  Double_t *Sbis, // output
367  Vec<Double_t> &ZED, // output
368  Double_t *ZEDbis // output
369  );
370 
371  void LoadSZetc_forSZfit2(Short_t ncand, // input
372  Short_t nhitsinfit,
373  Double_t *S_Skew, // input
374  Double_t *TemporaryZ, // input
375  Double_t *TemporaryZDrift, // input
376  Double_t *TemporaryZError, // input
377 
378  Vec<Double_t> &ErrorDriftRadius, // output
379  Double_t *ErrorDriftRadiusbis, // output
380  Vec<Double_t> &DriftRadius, // output
381  Double_t *DriftRadiusbis, // output
382  Vec<Double_t> &S, // output
383  Double_t *Sbis, // output
384  Vec<Double_t> &ZED, // output
385  Double_t *ZEDbis // output
386  );
387 
388  void MakeInclusionListStt(Int_t nSttHit, Short_t *TubeID, Double_t info[][7]);
389 
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, // output
392  Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK], // output
393  Short_t *nStripHitsinTrack, // output
394  Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK] // output
395  );
396 
397  void MatchMvdHitsToSttTracksagain(Vec<bool> &keepit, Vec<bool> &Mvdhits, Double_t delta, Double_t highqualitycut, Short_t nSttTrackCand, Double_t *FI0, Double_t *Fifirst,
398  Vec<Short_t> &CHARGE,
399 
400  Short_t *nPixelHitsinTrack, // output
401  Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK], // output
402  Short_t *nStripHitsinTrack, // output
403  Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK] // output
404  );
405 
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, // output
408  Short_t ListPixelHitsinTrack[][MAXMVDPIXELHITSINTRACK], // output
409  Short_t *nStripHitsinTrack, // output
410  Short_t ListStripHitsinTrack[][MAXMVDSTRIPHITSINTRACK] // output
411  );
412 
413  void
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]);
415 
416  void OrderingR_Loading_ListTrackCandHit(bool *keepit, Short_t ncand, Double_t info[][7]);
417 
418  void OrderingSttSkewandSttParallel(Double_t oX, Double_t oY, Double_t Rr, Short_t nSkewhit, Short_t *ListSkewHits,
419  Double_t *SList, // it is related to the skew hits. IMPORTANT :
420  // the index must be the ORIGINAL skew hit number,
421  // therefore SList[ListSkewHits[*]].
422  Short_t Charge, Short_t nParHits, Short_t *ListParHits, Double_t *U, Double_t *V,
423  Short_t *BigList // final ordered Parallel+Skew list;
424  // already in NATIVE hit number.
425  );
426 
427  void OrderingUsingConformal(Double_t oX, Double_t oY, Double_t Traj_Sta[2], Int_t nHits,
428  Double_t XY[][2], // XY[*][0] = X position, XY[*][0] = Y position.
429  Short_t Charge, // input
430  Int_t *ListHits);
431 
432  void Ordering_Loading_ListTrackCandHit(
433  // Vec <bool>& keepit,
434  bool *keepit, Short_t FirstCandidate, Short_t LastCandidate, Double_t info[][7], Double_t Trajectory_Start[][2],
435  // Vec <Short_t>& CHARGE,
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],
438  Short_t iexcl,
439  Double_t *pAlfa, // output of the fit
440  Double_t *pBeta, // output of the fit
441  Double_t *pGamma, // set at zero always for now
442  bool *status // fit status; true = successful
443  );
444 
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,
448  Double_t *VV);
449 
450  void SeparateInnerOuterParallel(
451 
452  // input
453  Short_t nHits, Short_t *ListHits, Double_t info[][7], Double_t RStrawDetInnerParMax,
454 
455  // output
456  Short_t *nInnerHits, Short_t *ListInnerHits, Short_t *nOuterHits, Short_t *ListOuterHits,
457 
458  Short_t *nInnerHitsLeft, Short_t *ListInnerHitsLeft, Short_t *nInnerHitsRight, Short_t *ListInnerHitsRight,
459 
460  Short_t *nOuterHitsLeft, Short_t *ListOuterHitsLeft, Short_t *nOuterHitsRight, Short_t *ListOuterHitsRight);
461 
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);
464 
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);
467 
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);
471 
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);
476 
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);
479 
480  void StoreSZ_MvdScitil(Short_t ncand);
481 
482  ClassDef(PndTrkTracking2, 1);
483 };
484 
485 #endif
void SetEventsToPlot(int nev)
__m128 m
Definition: P4_F32vec4.h:38
void WriteHistograms()
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()
int status[10]
Definition: f_Init.h:48
void SetParContainers()