FairRoot/PandaRoot
PndSttTrackFinderReal.h
Go to the documentation of this file.
1 #ifndef PNDSTTTRACKFINDERREAL
2 #define PNDSTTTRACKFINDERREAL 1
3 
4 #include "PndSttTrackFinder.h"
5 #include "PndMCTrack.h"
6 #include "PndSttTrack.h"
7 
8 #include "TList.h"
9 #include "TClonesArray.h"
10 #include "TH1.h"
11 //-------------------------------
12 
13 
14 
15 class FairMCPoint;
16 
17 
19  Int_t Ncircles;
22  Double_t R[8];
23  } ;
24 
25 
27  Int_t Nhelix[3];
31  Double_t KAPPA[3][16];
32  Double_t FI0[3][16];
33  } ;
34 
35 
36 
38 {
39 
40  public:
41 
44 
45 
48 
50  PndSttTrackFinderReal( int istamp, bool iplot, bool doMcComparison);
51 
53  PndSttTrackFinderReal( int istamp, bool iplot,
54  bool doMcComparison, bool doSciTil);
55 
57  virtual ~PndSttTrackFinderReal();
58 
59 
61  virtual void Init();
62 
65  void WriteHistograms();
66 
68  virtual Int_t DoFind(TClonesArray* trackCandArray, TClonesArray* trackArray, TClonesArray* helixHitArray);
69  virtual Int_t DoFind(TClonesArray* mHitArray, TClonesArray* mHelixHitArray);
70 
71  virtual void AddHitCollection(TClonesArray* mHitArray, TClonesArray* mPointArray)
72  {fHitCollectionList.Add(mHitArray); fPointCollectionList.Add(mPointArray);};
73 
74  void SetTubeArray(TClonesArray *tubeArray) { fTubeArray = tubeArray; };
75 
76 
77  void SetInputBranchName( char* string1 )
78  {
79  sprintf(fSttBranch,"%s", string1);
80  return;
81  };
82 
83  void Finish() {};
84 
85 
86  private:
87 
88 
89  static const Short_t
90  nmaxHits = 1000, // max hits total.
92  nmaxSciTilHits = 200, // max SciTil hits total.
93  nmaxSciTilHitsinTrack = 2, // max SciTil hits in one track.
94  MAXMCTRACKS=10000,
99  nbinCX=100,
100  nbinCY = 100,
101  nbinZ = 100,
102  nbinR = 100,
103  nbinD = 250,
104  nbinFi= 250,
105  nbinKAPPA = 200,
106  nbinFI0 = 200,
112  DELTAnR = 2; // defines the range of nR in PndSttTrkAssociatedParallelHitsToHelixBis
113 
114  static const Double_t PI = 3.141592654,
115  RStrawDetectorMin = 16.119, // minimum radius of the Stt detector in cm
117  ApotemaMinSkewStraw = 23.246827, // delimitation of the skew area
118  ApotemaMaxSkewStraw = 31.517569, // delimitation of the skew area
120  RStrawDetectorMax = 40.73, // maximum radius of the Stt detector in cm
121  VERTICALGAP = 4., // in cm, the gap between Left and Right sections of the
122  // Central Detector.
123  Rmin=20.,
124  Rmax=700.,
125  PMAX=100.,
126  STRAWRADIUS = 0.5 ,
129  CXmin=-150., CXmax=150.,
130  CYmin=-300., CYmax=300.,
131  Dmin=-21., Dmax=21.,
132  KAPPAmin =-2., KAPPAmax = 2.,
133  Zmin = -75., Zmax = 75.,
135  DELTA_Fi=0.3,
138  DELTA_FI0= 0.3,
139  RMAXSCITIL = 50., // cm
140  DIMENSIONSCITIL=2.85, // cm
141  BFIELD=2., // in Tesla
142  CVEL = 2.99792; // velocity of light
143  static const bool YesClean = false;
144  bool YesSciTil,
146 
147  static const Short_t nFidivConformal = (Short_t) (3.141592654 * 45./0.5) ;
148 
149  static const int
151  TIMEOUT=60; // timeout in seconds for the GLPK fitting.
152 
153 
154 
155  int
157 
158  bool iplotta,
161 
162  int istampa ;
163 
164 
165  TH1F *hdist,
166  *hdistgoodlast,
167  *hdistbadlast;
168 
169  FILE * HANDLE ;
170  FILE * HANDLE2 ;
171  FILE * HANDLEXYZ ;
172  FILE * PHANDLEX ;
173  FILE * PHANDLEY ;
174  FILE * PHANDLEZ ;
175  FILE * SHANDLEX ;
176  FILE * SHANDLEY ;
177  FILE * SHANDLEZ ;
179 
180  Short_t
184  nSciTilHits,
185  nSttSkewhit,
192 
193  Short_t nMCTracks;
194 
195 
197  Fimax,
198  FI0min,
199  FI0max,
200  stepD,
201  stepFi,
202  stepR,
203  stepKAPPA,
204  stepFI0,
206  stepfineFI0,
218 
219  TClonesArray *fMCTrackArray,
221  *fSciTHitArray;
222 
223  TClonesArray *fTubeArray;
225 
226 
227 
228 
229 
230 
231 
234 
235  PndSttHit* GetHitFromCollections(Int_t hitCounter);
236  FairMCPoint* GetPointFromCollections(Int_t hitCounter);
237  TClonesArray* fSttHitArray;
238 
239 
241  char fSttBranch[100];
242 
243 
245 
246 
247  void PndSttFromXYtoConformal(Double_t trajectory_vertex[3],
248  Double_t info[][7],
249  Int_t Nparal,
250  Double_t infoparalConformal[][5],
251  Int_t * status
252  );
253 
254 
255  void PndSttFromXYtoConformal2(Double_t trajectory_vertex[3],
256  Short_t nHitsinTrack ,
257  Short_t iExclude ,
258  Short_t *ListHits,
259  Double_t info[][7],
260  Double_t auxinfoparalConformal[][5],
261  Int_t * status
262  );
263 
264 
266  bool ExclusionList[nmaxHits],
267  Double_t infoparalConformal[][5],Int_t Nparal,
268  Short_t nBoxConformal[nRdivConformal][nFidivConformal],
269  Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal],
270  Short_t RConformalIndex[nmaxHits],
271  Short_t FiConformalIndex[nmaxHits]
272  );
273 
274 
275 
276 
277 
278  void Merge_Sort(Short_t n_ele, Double_t *array, Short_t *ind);
279 
280  void Merge(Short_t nl, Double_t *left, Short_t *ind_left, Short_t nr,
281  Double_t *right, Short_t *ind_right, Double_t *result, Short_t *ind);
282 
283 
284 
286  Short_t NRCELLDISTANCE,
287  Short_t NFiCELLDISTANCE,
288  Short_t Nparal,
289  Short_t ihit, // seed hit;
290  Short_t nRcell, // R cell of the seed hit;
291  // can be negative beacuse of SciTil hits;
292  Short_t nFicell, // Fi cell of the seed hit;
293  Double_t info[][7],
294  bool Exclusion_List[nmaxHits],
295  Short_t RConformalIndex[nmaxHits],
296  Short_t FiConformalIndex[nmaxHits],
297  Short_t nBoxConformal[nRdivConformal][nFidivConformal],
298  Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal],
299  Short_t *ListHitsinTrack
300  );
301 
302 
304  Short_t NRCELLDISTANCE,
305  Short_t NFiCELLDISTANCE,
306  Short_t Nparal,
307  Short_t NparallelToSearch,
308  Short_t iSeed,
309  Short_t *ListHitsinTrackinWhichToSearch,
310  Double_t info[][7],
311  bool InclusionList[nmaxHits],
312  Short_t RConformalIndex[nmaxHits],
313  Short_t FiConformalIndex[nmaxHits],
314  Short_t nBoxConformal[nRdivConformal][nFidivConformal],
315  Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal],
316  Short_t *OutputListHitsinTrack
317  );
318 
319 
321  Short_t NFiCELLDISTANCE,
322  Short_t iSeed, // seed track (parallel notation) as fa as the Fi angle is concerned
323  Short_t NParallelToSearch, // n. of hits to search in ListHitsinTrackinWhichToSearch
324  Short_t *ListHitsinTrackinWhichToSearch,
325  bool ExclusionList[nmaxHits],
326  Short_t FiConformalIndex[nmaxHits],
327  Short_t *OutputListHitsinTrack
328  );
329 
330 
331 
332 
333 //---- questa funzione e'
334 // identica a quella di sttmvd che funziona sia con soli STT hits che con
335 // Stt+Mvd hits.
336  Short_t FitHelixCylinder( Short_t nHitsinTrack,
337  Double_t *Xconformal,
338  Double_t *Yconformal,
339  Double_t *DriftRadiusconformal,
340  Double_t *ErrorDriftRadiusconformal,
341  Double_t rotationangle,
342  Double_t *trajectory_vertex,
343  Short_t NMAX,
344  Double_t *m,
345  Double_t *q,
346  Double_t * ALFA,
347  Double_t * BETA,
348  Double_t * GAMMA,
349  bool *TypeConf
350  );
351 
352 
353  Short_t PndSttFitSZspacebis(
354  Short_t nSttSkewhitinTrack,
355  Double_t *S,
356  Double_t *Z,
357  Double_t *DriftRadius,
358  Double_t FInot,
359  Short_t NMAX,
360  Double_t *m
361  );
362 
363 // rimpiazza la precedente
364  Short_t FitSZspace(
365  Short_t nSkewHitsinTrack,
366  Double_t *S,
367  Double_t *Z,
368  Double_t *DriftRadius,
369  Double_t *ErrorDriftRadius,
370  Double_t FInot,
371  Short_t NMAX,
372  Double_t *emme
373  );
374 
375 
376 
378  Double_t Ox,
379  Double_t Oy,
380  Double_t R,
381  Int_t Nhits,
382  Double_t info[][7],
383  Short_t *auxListHitsinTrack // this is the output
384  );
385 
386 
387 
389  bool ExclusionList[nmaxHits],
390  Double_t m,
391  Double_t q,
392  Short_t Status,
393  Short_t nHitsinTrack,
394  Short_t *ListHitsinTrack,
395  Int_t NhitsParallel,
396  Double_t Ox,
397  Double_t Oy,
398  Double_t R,
399  Double_t info[][7],
400  Double_t infoparalConformal[][5],
401  Short_t *RConformalIndex,
402  Short_t *FiConformalIndex,
403  Short_t nBoxConformal[nRdivConformal][nFidivConformal],
404  Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal],
405  Short_t *auxListHitsinTrack
406  );
407 
409  bool ExclusionList[nmaxHits],
410  Int_t NhitsParallel,
411  Double_t Ox,
412  Double_t Oy,
413  Double_t R,
414  Double_t info[][7],
415  Double_t Fi_low,
416  Double_t Fi_up,
417  Short_t *auxListHitsinTrack
418  );
419 
420  bool PndSttAcceptHitsConformal( Double_t distance,
421  Double_t DriftConfR,
422  Double_t StrawConfR
423  );
424 
425 
427 
429  Double_t Ox, Double_t Oy, Double_t R,
430  Double_t Zcenter1,Double_t Zcenter2,Double_t Zcenter3,
431  Double_t semilengthStraight1, Double_t semilengthStraight2, Double_t semilengthStraight3,
432  Double_t C0x1, Double_t C0y1, Double_t C0z1, Double_t semilengthSkew1,
433  Double_t r1, Double_t vx1, Double_t vy1, Double_t vz1,
434  Double_t C0x2, Double_t C0y2, Double_t C0z2, Double_t semilengthSkew2,
435  Double_t r2, Double_t vx2, Double_t vy2, Double_t vz2,
436  Int_t * STATUS
437  );
438 
441  Int_t *STATUS, Double_t* POINTS);
442 
443 
444  void plottamentiParalleleGenerali( Int_t Nremaining, Float_t * RemainingR, Float_t * RemainingD,
445  Float_t * RemainingFi, Float_t * RemainingCX, Float_t * RemainingCY,
446  bool * Goodflag
447  ) ;
448 
449  void plottamentiParalleleconMassimo( char * tipo, Int_t nMaxima, Int_t Nremaining, Float_t * RemainingR, Float_t * RemainingD,
450  Float_t * RemainingFi, Float_t * RemainingCX, Float_t * RemainingCY,
451  Double_t Rup, Double_t Rlow, Double_t Dup, Double_t Dlow, Double_t Fiup, Double_t Filow
452  ) ;
453 
454 
455 
456  bool iscontiguous( int ncomponents, Short_t * vec1, Short_t *vec2);
457 
458  void clustering2 (
459  Short_t vec1[2], // input
460  int nListElements, Short_t List[][2], // input
461  int & nClusterElementsFound, Short_t ClusterElementsFound[][2], // output
462  int & nRemainingElements, Short_t RemainingElements[][2] // output
463  );
464 
465  void clustering3 (
466  Short_t vec1[3], // input
467  int nListElements, Short_t List[][3], // input
468  int & nClusterElementsFound, Short_t ClusterElementsFound[][3], // output
469  int & nRemainingElements, Short_t RemainingElements[][3] // output
470  );
471 
472 
474  Double_t Ox,
475  Double_t Oy,
476  Double_t R,
477  Short_t Nhits,
478  Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
479  Double_t info[][7],
480  Int_t Nincl,
481  Int_t Minclinations[],
482  Double_t inclination[][3],
483  Short_t imaxima,
484  Int_t sequencial,
485  Short_t nscitilhitsintrack,
486  Short_t *listscitilhitsintrack
487  );
488 
490  Double_t Ox,
491  Double_t Oy,
492  Double_t R,
493  Short_t TrackFoundaTrackMC,
494  Short_t Nhits,
495  Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
496  Double_t info[][7],
497  Short_t ifoundtrack,
498  Int_t sequentialNTrack,
499  Short_t nscitilhitsintrack,
500  Short_t *listscitilhitsintrack,
501  Short_t nParalCommon[MAXTRACKSPEREVENT],
502  Short_t ParalCommonList[MAXTRACKSPEREVENT][nmaxHits],
503  Short_t nSpuriParinTrack[MAXTRACKSPEREVENT],
504  Short_t ParSpuriList[MAXTRACKSPEREVENT][nmaxHits],
505  Short_t nMCParalAlone[MAXTRACKSPEREVENT],
506  Short_t MCParalAloneList[MAXTRACKSPEREVENT][nmaxHits]
507  );
509  bool * keepit,
510  Int_t Nhits, Double_t info[][7],
511  Int_t Nincl,
512  Int_t Minclinations[],
513  Double_t inclination[][3],
514  Short_t nTracksFoundSoFar
515  );
516 
518  bool * keepit,
519  Int_t Nhits, Double_t info[][7],
520  Int_t Nincl,
521  Int_t Minclinations[],
522  Double_t inclination[][3],
523  Short_t nTracksFoundSoFar
524  );
525 
526 
527 
529  Int_t Nhits,
530  Double_t auxinfoparalConformal[][5],
531  Short_t nTracksFoundSoFar,
532  Short_t Status, Double_t *trajectory_vertex
533  );
534 
535 
536 
537 
539  bool goodskewfit,
540  Double_t KAPPA,
541  Double_t FI0,
542  Double_t D,
543  Double_t Fi,
544  Double_t R,
545  Double_t info[][7],
546  Int_t Nincl,
547  Int_t Minclinations[],
548  Double_t inclination[][3],
549  Int_t imaxima,
550  Int_t sequentialNTrack,
551  Short_t nSttSkewhitinTrack,
552  Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
553  Short_t nscitilhits,
554  Double_t *ESSE,
555  Double_t *ZETA
556  );
557 
558 
560  bool goodskewfit,
561  Double_t KAPPA,
562  Double_t FI0,
563  Double_t D,
564  Double_t Fi,
565  Double_t R,
566  Double_t info[][7],
567  Int_t Nincl,
568  Int_t Minclinations[],
569  Double_t inclination[][3],
570  Int_t imaxima,
571  Int_t sequentialNTrack,
572  Short_t nSttSkewhitinTrack,
573  Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
574  Short_t nSkewCommon,
575  Short_t SkewCommonList[MAXTRACKSPEREVENT][nmaxHits],
576  Short_t daTrackFoundaTrackMC,
577  Short_t nMCSkewAlone[MAXTRACKSPEREVENT],
578  Short_t MCSkewAloneList[MAXTRACKSPEREVENT][nmaxHits],
579  Short_t nscitilhits,
580  Double_t *ESSE,
581  Double_t *ZETA
582 
583  );
584 
585 
587  bool *ExclusionListSkew,
588  Double_t Ox,
589  Double_t Oy,
590  Double_t R,
591  Double_t info[][7],
592  Double_t inclination[][3],
593  Double_t Fi_low_limit,
594  Double_t Fi_up_limit,
595 // Double_t Fi_allowedforskew_low,
596 // Double_t Fi_allowedforskew_up,
597  Short_t Charge,
598  Double_t Fi_initial_helix_referenceframe,
599  Double_t Fi_final_helix_referenceframe,
600  Short_t SkewList[nmaxHits][2], // output, list of selected skew hits (in skew numbering)
601  Double_t *S, // output, S coordinate of selected Skew hit
602  Double_t *Z, // output, Z coordinate of selected Skew hit
603  Double_t *ZDrift, // output, drift distance IN Z DIRECTION only, of selected Skew hit
604  Double_t *ZRadiusafterTilt // output, Radius taking into account the tilt, IN Z DIRECTION only, of selected Skew hit
605  );
606 
608  Short_t TemporarynSttSkewhitinTrack,
609  Short_t SkewList[nmaxHits][2], // input, list of selected skew hits (in skew numbering)
610  Double_t *S, // input, S coordinate of selected Skew hit
611  Double_t *Z, // input, Z coordinate of selected Skew hit
612  Double_t *ZDrift, // input, drift distance IN Z DIRECTION only, of selected Skew hit
613  Double_t *ZRadiusafterTilt, // input, Radius taking into account the tilt, IN Z DIRECTION only, of selected Skew hit
614  Double_t KAPPA, // input, KAPPA result of fit
615  Double_t FI0, // input, FI0 result of fit
616  Short_t *tempore,
617  Double_t *temporeS, // output, associated skew hit S
618  Double_t *temporeZ, // output, associated skew hits Z
619  Double_t *temporeZDrift, // output, associated skew hit Z drift
620  Double_t *temporeZErrorafterTilt, // output, associated skew hits Z error after tilt
621  Int_t *STATUS // output
622  );
623 
624 
626  Double_t oX,
627  Double_t oY,
628  Double_t info[][7],
629  Short_t nParallelHits,
630  Short_t *ListParallelHits,
631  Short_t *Infoparal,
632  Short_t Charge,
633  Double_t *Fi_initial_helix_referenceframe,
634  Double_t *Fi_final_helix_referenceframe,
635  Double_t *U,
636  Double_t *V
637  );
638 
639 
641  Short_t *Infoparal,
642  Short_t *Infoskew,
643  Double_t oX,
644  Double_t oY,
645  Double_t Rr,
646  Short_t nSttSkewhit,
647  Short_t *ListSkewHits,
648  Double_t *SList,
649  Short_t Charge,
650  Short_t nParHits,
651  Short_t *ListParHits,
652  Double_t *U,
653  Double_t *V,
654  Short_t *BigList
655 
656  );
657 
658  void PndSttOrdering(
659  Double_t oX,
660  Double_t oY,
661  Double_t info[][7],
662  Short_t nParallelHits,
663  Short_t *ListParallelHits,
664  Short_t nSttSkewhit,
665  Short_t *ListSkewHits,
666  Double_t *S,
667  Short_t *Infoparal,
668  Short_t *Infoskew,
669  Short_t *nTotal,
670  Short_t *BigList,
671  Short_t * Charge
672  );
673 
675  Double_t oX,
676  Double_t oY,
677  Double_t r,
678  Short_t Charge,
679  Double_t *Fi_low_limit, // Fi (in XY Helix frame) lower limit using
680  // the Stt detector minimum/maximum radius
681  // Fi_low_limit is ALWAYS between 0. and 2PI
682  Double_t *Fi_up_limit, // Fi (in XY Helix frame) upper limit using
683  // the Stt detector maximum/minimum radius
684  // Fi_up_limit is ALWAYS > Fi_low_limit and
685  // possibly > 2PI.
686  Short_t * status,
687  Double_t Rmin, // Rmin of cylindrical volume intersected by track;
688  Double_t Rmax // Rmax of cylindrical volume intersected by track;
689  );
690 
692  Int_t Nhits, Double_t info[][7],
693  Short_t nTracksFoundSoFar,
694 // bool *TypeConf,
695  Double_t *Ox,
696  Double_t *Oy,
697  Short_t * daParTrackFoundaTrackMC
698  );
699 
700 
701 
703  Double_t KAPPA,Double_t FI0,Double_t D,Double_t Fi,Double_t R,
704  Int_t Nhits, Double_t info[][7],
705  Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3],
706  Int_t imaxima, Int_t nMaxima
707  );
708 
709 
710 
711 
713  Double_t info[][7],
714  Short_t nTracksFoundSoFar,
715  Short_t *nHitsinTrack,
716  Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHits],
717  Short_t *nSttSkewhitinTrack,
718  Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHits],
719  Short_t daTrackFoundaTrackMC[MAXTRACKSPEREVENT]
720  );
721 
722 
724  bool *keepit,
725  Double_t info[][7],
726  Short_t nTracksFoundSoFar,
727  Short_t nHitsinTrack[MAXTRACKSPEREVENT],
728  Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
729  Short_t nSttSkewhitinTrack[MAXTRACKSPEREVENT],
730  Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
731  Short_t daTrackFoundaTrackMC[MAXTRACKSPEREVENT]
732  );
733 
734 
735 
736  void PndSttInfoXYZParal (
737  Double_t info[][7],
738  Short_t infopar,
739  Double_t Ox,
740  Double_t Oy,
741  Double_t R,
742  Double_t KAPPA,
743  Double_t FI0,
744  Short_t Charge,
745  Double_t *Posiz // output
746  );
747 
748 
749  void PndSttInfoXYZSkew (
750  Double_t Z, // Z coordinate of selected Skew hit
751  Double_t ZDrift, // drift distance IN Z DIRECTION only, of Skew hit
752  Double_t S,
753  Double_t Ox,
754  Double_t Oy,
755  Double_t R,
756  Double_t KAPPA,
757  Double_t FI0,
758  Short_t Charge,
759  Double_t *Posiz // output
760  );
761 
763  Short_t TemporarynSttSkewhitinTrack,
764  Double_t *S,
765  Double_t *Fi_initial_helix_referenceframe,
766  Short_t Charge
767  );
768 
769 
770 
771  void FindCharge(
772  Double_t oX,
773  Double_t oY,
774  Short_t nParallelHits,
775  Double_t *X,
776  Double_t *Y,
777  Short_t * Charge
778  );
779 
780 
781 
782  bool SttParalCleanup(
783  Double_t GAP,
784  Double_t Oxx,
785  Double_t Oyy,
786  Double_t Rr,
787  Short_t Charge,
788  Double_t Start[3],
789  Double_t FI0,
790  Double_t FiLimitAdmissible,
791  Short_t nHits,
792  Short_t *Listofhits,
793  Double_t info[][7],
794  Double_t RStrawDetMin,
795  Double_t RStrawDetInnerParMax,
796  Double_t RStrawDetOuterParMin,
797  Double_t RStrawDetMax
798  );
799 
800 
801 
802 
803 
804  bool SttSkewCleanup(
805  Double_t GAP,
806  Double_t Oxx,
807  Double_t Oyy,
808  Double_t Rr,
809  Short_t Charge,
810  Double_t Start[3],
811  Double_t FI0,
812  Double_t FiLimitAdmissible,
813  Short_t nHits,
814  Short_t *Listofhits,
815  Double_t *S,
816  Double_t info[][7],
817  Double_t RminStrawSkew,
818  Double_t RmaxStrawSkew,
819  Double_t cut, // cut distance (in cm).
820  Short_t maxnum // max number allowed of failures to pass the cut.
821  );
822 
823  bool BadTrack_ParStt(
824  Double_t Oxx,
825  Double_t Oyy,
826  Double_t Rr,
827  Short_t Charge,
828  Double_t Xcross[2], // Xcross[0]=point of entrance;
829  // Xcross[1]=point of exit.
830  Double_t Ycross[2],
831  Short_t nHits,
832  Short_t* ListHits,
833  Double_t info[][7],
834  Double_t cut,
835  Short_t maxnum,
836  Short_t islack // uncertainty allowed as far as
837  // the n. of hits that should be present.
838  );
839 
840 
842  Double_t Ox,
843  Double_t Oy,
844  Double_t R,
845  Double_t Rmi, // Rmin of cylindrical volume intersected by track;
846  Double_t Rma, // Rmax of cylindrical volume intersected by track;
847 
848  //-------- outputs
849  Short_t nIntersections[2],
850  Double_t XintersectionList[][2],
851  Double_t YintersectionList[][2]
852  );
854  Double_t Ox, // Track parameter
855  Double_t Oy, // Track parameter
856  Double_t R, // Track parameter
857  Short_t nSides, // input, n. of Sides of open Polygon.
858  Double_t *a, // coefficient of formula : aX + bY + c = 0 defining
859  Double_t *b, // the Polygon sides.
860  Double_t *c,
861  Double_t *side_x, // X,Y coordinate of the Sides vertices (in sequence, following
862  Double_t *side_y, // the Polygon along.
863  //-------- outputs
864  Double_t *XintersectionList, // XintersectionList
865  Double_t *YintersectionList // YintersectionList.
866  );
868  Double_t vgap,
869  Double_t Ox,
870  Double_t Oy,
871  Double_t R,
872  Double_t Ami, // Apotema min of inner Hexagon;
873  Double_t Ama, // Apotema max of outer Hexagon;
874 
875  //-------- outputs
876  Short_t *nIntersections,
877  Double_t *XintersectionList,
878  Double_t *YintersectionList
879  );
880 
881 
883  Double_t vgap,
884  Double_t Ox,
885  Double_t Oy,
886  Double_t R,
887  Double_t Ami, // Apotema min of inner Hexagon;
888  Double_t Ama, // Apotema max of outer Hexagon;
889 
890  //-------- outputs
891  Short_t *nIntersections,
892  Double_t *XintersectionList,
893  Double_t *YintersectionList
894  );
895 
896 
898  Double_t a, // coefficients implicit equation.
899  Double_t b, // of segment : a*x + b*y + c =0.
900  Double_t c,
901  Double_t P1x, // point delimiting the segment.
902  Double_t P2x, // point delimiting the segment.
903  Double_t P1y, // point delimiting the segment.
904  Double_t P2y, // point delimiting the segment.
905  Double_t Ox, // center of circle.
906  Double_t Oy,
907  Double_t R, // Radius of circle.
908  Short_t * Nintersections,
909  Double_t XintersectionList[2],
910  Double_t YintersectionList[2],
911  Double_t *distance
912  );
913 
915  Double_t posizSciTilx,
916  Double_t posizSciTily,
917  Double_t Oxx, // center of circle.
918  Double_t Oyy,
919  Double_t Rr, // Radius of circle.
920  Short_t * Nintersections,
921  Double_t XintersectionList[2],
922  Double_t YintersectionList[2]
923  );
924 
926  Double_t Oxx,
927  Double_t Oyy,
928  Double_t Rr,
929  Double_t gap,
930  bool left,
931  Double_t Rma,
932  Double_t *XintersectionList,
933  Double_t *YintersectionList
934  );
935 
936  bool IsInternal(
937  Double_t Px, // point
938  Double_t Py,
939  Double_t Xtraslation,
940  Double_t Ytraslation,
941  Double_t Theta
942  );
943 
944 
945 
946  void ChooseEntranceExit(
947  Double_t Oxx,
948  Double_t Oyy,
949  Short_t flag,
950  Short_t Charge,
951  Double_t FiStart,
952  Short_t nIntersections[2],
953  Double_t XintersectionList[][2],
954  Double_t YintersectionList[][2],
955  Double_t Xcross[2], // output
956  Double_t Ycross[2] // output
957  );
958 
960  Double_t Oxx,
961  Double_t Oyy,
962  Short_t Charge,
963  Double_t FiStart,
964  Short_t nIntersections,
965  Double_t *XintersectionList,
966  Double_t *YintersectionList,
967  Double_t Xcross[2], // output
968  Double_t Ycross[2] // output
969  );
970 
971 
972 
974  Double_t Oxx,
975  Double_t Oyy,
976  Double_t Rr,
977  Short_t Charge,
978  Double_t Start[3],
979  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
980  Double_t ApotemaMax,
981  Double_t Xcross[2],
982  Double_t Ycross[2]
983  );
984 
986  Double_t vgap,
987  Double_t Oxx,
988  Double_t Oyy,
989  Double_t Rr,
990  Short_t Charge,
991  Double_t Start[3],
992  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
993  Double_t ApotemaMax,
994  Double_t Xcross[2],
995  Double_t Ycross[2]
996  );
997 
999  Double_t vgap,
1000  Double_t Oxx,
1001  Double_t Oyy,
1002  Double_t Rr,
1003  Short_t Charge,
1004  Double_t Start[3],
1005  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
1006  Double_t ApotemaMax,
1007  Double_t Xcross[2],
1008  Double_t Ycross[2]
1009  );
1010 
1011 
1013 
1014  // input
1015  Short_t nHits,
1016  Short_t *ListHits,
1017  Double_t info[][7],
1018  Double_t RStrawDetInnerParMax,
1019 
1020  // output
1021  Short_t *nInnerHits,
1022  Short_t *ListInnerHits,
1023  Short_t *nOuterHits,
1024  Short_t *ListOuterHits,
1025 
1026  Short_t *nInnerHitsLeft,
1027  Short_t *ListInnerHitsLeft,
1028  Short_t *nInnerHitsRight,
1029  Short_t *ListInnerHitsRight,
1030 
1031  Short_t *nOuterHitsLeft,
1032  Short_t *ListOuterHitsLeft,
1033  Short_t *nOuterHitsRight,
1034  Short_t *ListOuterHitsRight
1035 
1036 
1037  );
1038 
1039 
1040 
1042  Double_t Oxx,
1043  Double_t Oyy,
1044  Double_t Rr,
1045  Short_t Charge,
1046  Double_t Start[3],
1047  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
1048  Double_t ApotemaMax,
1049  Double_t Xcross[2],
1050  Double_t Ycross[2]
1051  );
1053  Double_t Oxx,
1054  Double_t Oyy,
1055  Double_t Rr,
1056  Short_t Charge,
1057  Double_t Start[3],
1058  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
1059  Double_t ApotemaMax,
1060  Double_t GAP,
1061  Double_t Xcross[2],
1062  Double_t Ycross[2]
1063  );
1065  Double_t Oxx,
1066  Double_t Oyy,
1067  Double_t Rr,
1068  Short_t Charge,
1069  Double_t Start[3],
1070  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
1071  Double_t ApotemaMax,
1072  Double_t GAP,
1073  Double_t Xcross[2],
1074  Double_t Ycross[2]
1075  );
1077  Double_t Oxx,
1078  Double_t Oyy,
1079  Double_t Rr,
1080  Double_t RMax,
1081  Double_t Xcross[2],
1082  Double_t Ycross[2]
1083  );
1084 
1085  bool IsInsideArc(
1086  Double_t Oxx,
1087  Double_t Oyy,
1088  Short_t Charge,
1089  Double_t Xcross[2],
1090  Double_t Ycross[2],
1091  Double_t Spoint
1092  );
1093 
1094 
1095  bool IsInTargetPipe(
1096  Double_t Oxx,
1097  Double_t Oyy,
1098  Double_t Rr,
1099  Double_t fi0,
1100  Double_t kappa,
1101  Short_t charge,
1102  Double_t gap
1103  );
1104 
1105 
1106 
1108  Double_t Oxx,
1109  Double_t Oyy,
1110  Double_t Rr,
1111  Short_t Charge,
1112  Double_t Xcross[2], // entrance-exit point
1113  Double_t Ycross[2] // entrance-exit point
1114  );
1115 
1116 
1117 
1118 
1119 
1121  Double_t oX,
1122  Double_t oY,
1123  Int_t nHits,
1124  Double_t XY[][2],
1125  Int_t Charge, // input
1126  Short_t *ListHits
1127  );
1128 
1129 
1131  Short_t iHit, // seed hit; it is negative for SciTil Hits.
1132  Short_t nRcell,//R cell of seed hit;negative for SciTil hits.
1133  Short_t nFicell, // Fi cell of the seed hit;
1134  Int_t *Minclinations,
1135  Double_t info[nmaxHits][7],
1136  bool *ExclusionList,
1137  Short_t *RConformalIndex,
1138  Short_t *FiConformalIndex,
1139  Short_t nBoxConformal[nRdivConformal][nFidivConformal],
1140  Short_t HitsinBoxConformal[MAXHITSINCELL][nRdivConformal][nFidivConformal],
1141  Short_t nTracksFoundSoFar,
1142  Short_t *nHitsinTrack,
1143  Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack],
1144  Double_t *trajectory_vertex,
1145  Double_t infoparalConformal[nmaxHits][5],
1146  Double_t posizSciTilx,
1147  Double_t posizSciTily,
1148  Double_t *S,
1149  Double_t *Ox,
1150  Double_t *Oy,
1151  Double_t *R,
1152  Double_t *Fi_low_limit,
1153  Double_t *Fi_up_limit,
1154  Double_t *Fi_initial_helix_referenceframe,
1155  Double_t *Fi_final_helix_referenceframe,
1156  Short_t * Charge,
1157  Double_t *U,
1158  Double_t *V
1159  );
1160 
1161  Short_t AssociateSciTilHit(
1162  Double_t Oxx,
1163  Double_t Oyy,
1164  Double_t Rr,
1165  Short_t *List, // output, list of SciTil hits associated (max. 2);
1166  Double_t *esse // output, list of S of the SciTil hits associated.
1167  );
1168 
1169 
1170 
1171 
1172  void disegnaSciTilHit(
1173  FILE * MACRO,
1174  int ScitilHit,
1175  double posx,
1176  double posy,
1177  int tipo
1178  );
1179 
1180 
1181 
1182  void disegnaAssiXY(
1183  FILE * MACRO,
1184  double xmin,
1185  double xmax,
1186  double ymin,
1187  double ymax
1188  );
1189 
1190 
1191 //----------------------------------------------
1192 
1194 
1195 };
1196 
1197 
1198 #endif
Short_t IntersectionsWithClosedbiHexagonRight(Double_t vgap, Double_t Ox, Double_t Oy, Double_t R, Double_t Ami, Double_t Ama, Short_t *nIntersections, Double_t *XintersectionList, Double_t *YintersectionList)
void WriteMacroParallelAssociatedHitswithMC(Double_t Ox, Double_t Oy, Double_t R, Short_t TrackFoundaTrackMC, Short_t Nhits, Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Double_t info[][7], Short_t ifoundtrack, Int_t sequentialNTrack, Short_t nscitilhitsintrack, Short_t *listscitilhitsintrack, Short_t nParalCommon[MAXTRACKSPEREVENT], Short_t ParalCommonList[MAXTRACKSPEREVENT][nmaxHits], Short_t nSpuriParinTrack[MAXTRACKSPEREVENT], Short_t ParSpuriList[MAXTRACKSPEREVENT][nmaxHits], Short_t nMCParalAlone[MAXTRACKSPEREVENT], Short_t MCParalAloneList[MAXTRACKSPEREVENT][nmaxHits])
static const Short_t MAXElementsOverThresholdinHough
static const Double_t KAPPAmax
TClonesArray * trackArray
Definition: NHitsPerEvent.C:14
Short_t AssociateSkewHitsToXYTrack(bool *ExclusionListSkew, Double_t Ox, Double_t Oy, Double_t R, Double_t info[][7], Double_t inclination[][3], Double_t Fi_low_limit, Double_t Fi_up_limit, Short_t Charge, Double_t Fi_initial_helix_referenceframe, Double_t Fi_final_helix_referenceframe, Short_t SkewList[nmaxHits][2], Double_t *S, Double_t *Z, Double_t *ZDrift, Double_t *ZRadiusafterTilt)
double r
Definition: RiemannTest.C:14
static const Double_t ApotemaMinOuterParStraw
static const Double_t DELTA_FI0
Double_t CalculateArcLength(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Xcross[2], Double_t Ycross[2])
static const Double_t KAPPAmin
bool iscontiguous(int ncomponents, Short_t *vec1, Short_t *vec2)
static const Double_t DELTA_R
__m128 m
Definition: P4_F32vec4.h:28
Short_t FindTrackEntranceExitbiHexagonLeft(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t Xcross[2], Double_t Ycross[2])
TTree * b
static const Short_t nbinCX
FairMCPoint * GetPointFromCollections(Int_t hitCounter)
static const Short_t nbinFi
static const Double_t DELTA_KAPPA
void WriteMacroParallelHitsGeneral(bool *keepit, Int_t Nhits, Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Short_t nTracksFoundSoFar)
static const Short_t nbinZ
bool IsInsideArc(Double_t Oxx, Double_t Oyy, Short_t Charge, Double_t Xcross[2], Double_t Ycross[2], Double_t Spoint)
Double_t R_MC[MAXTRACKSPEREVENT]
#define verbose
void PndSttFindingParallelTrackAngularRange(Double_t oX, Double_t oY, Double_t r, Short_t Charge, Double_t *Fi_low_limit, Double_t *Fi_up_limit, Short_t *status, Double_t Rmin, Double_t Rmax)
Short_t FindTrackEntranceExitbiHexagonRight(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t Xcross[2], Double_t Ycross[2])
Double_t posizSciTil[nmaxSciTilHits][3]
Double_t xmax
Short_t FitHelixCylinder(Short_t nHitsinTrack, Double_t *Xconformal, Double_t *Yconformal, Double_t *DriftRadiusconformal, Double_t *ErrorDriftRadiusconformal, Double_t rotationangle, Double_t *trajectory_vertex, Short_t NMAX, Double_t *m, Double_t *q, Double_t *ALFA, Double_t *BETA, Double_t *GAMMA, bool *TypeConf)
virtual void AddHitCollection(TClonesArray *mHitArray, TClonesArray *mPointArray)
bool PndSttAcceptHitsConformal(Double_t distance, Double_t DriftConfR, Double_t StrawConfR)
static const Double_t StrawDriftError
static const Double_t CYmax
static const Double_t VERTICALGAP
Double_t KAPPA[3][16]
static const Short_t NHITSINFIT
static const Double_t RStrawDetectorMin
timer Start()
static const Short_t nAdmittedRadia
void PndSttFromXYtoConformal(Double_t trajectory_vertex[3], Double_t info[][7], Int_t Nparal, Double_t infoparalConformal[][5], Int_t *status)
double r1
void PndSttOrderingSkewandParallel(Short_t *Infoparal, Short_t *Infoskew, Double_t oX, Double_t oY, Double_t Rr, Short_t nSttSkewhit, Short_t *ListSkewHits, Double_t *SList, Short_t Charge, Short_t nParHits, Short_t *ListParHits, Double_t *U, Double_t *V, Short_t *BigList)
Short_t FindIntersectionsOuterCircle(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t RMax, Double_t Xcross[2], Double_t Ycross[2])
void PndSttInfoXYZParal(Double_t info[][7], Short_t infopar, Double_t Ox, Double_t Oy, Double_t R, Double_t KAPPA, Double_t FI0, Short_t Charge, Double_t *Posiz)
void FindCharge(Double_t oX, Double_t oY, Short_t nParallelHits, Double_t *X, Double_t *Y, Short_t *Charge)
void calculateintersections(Double_t Ox, Double_t Oy, Double_t R, Double_t C0x, Double_t C0y, Double_t C0z, Double_t r, Double_t vx, Double_t vy, Double_t vz, Int_t *STATUS, Double_t *POINTS)
double Y
Definition: anaLmdDigi.C:68
static const Short_t MAXMCTRACKS
void disegnaAssiXY(FILE *MACRO, double xmin, double xmax, double ymin, double ymax)
Short_t PndSttFindTrackPatterninBoxConformal(Short_t NRCELLDISTANCE, Short_t NFiCELLDISTANCE, Short_t Nparal, Short_t ihit, Short_t nRcell, Short_t nFicell, Double_t info[][7], bool Exclusion_List[nmaxHits], Short_t RConformalIndex[nmaxHits], Short_t FiConformalIndex[nmaxHits], Short_t nBoxConformal[nRdivConformal][nFidivConformal], Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal], Short_t *ListHitsinTrack)
static const Double_t SKEWinclination_DEGREES
virtual Int_t DoFind(TClonesArray *trackCandArray, TClonesArray *trackArray, TClonesArray *helixHitArray)
void plottamentiParalleleconMassimo(char *tipo, Int_t nMaxima, Int_t Nremaining, Float_t *RemainingR, Float_t *RemainingD, Float_t *RemainingFi, Float_t *RemainingCX, Float_t *RemainingCY, Double_t Rup, Double_t Rlow, Double_t Dup, Double_t Dlow, Double_t Fiup, Double_t Filow)
Double_t CxMC[MAXTRACKSPEREVENT]
static const Double_t Zmax
static const Double_t Dmax
void SetInputBranchName(char *string1)
static const Short_t nbinR
static const Double_t DELTA_D
static const Double_t Dmin
void AssociateFoundTrackstoMCbis(bool *keepit, Double_t info[][7], Short_t nTracksFoundSoFar, Short_t nHitsinTrack[MAXTRACKSPEREVENT], Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Short_t nSttSkewhitinTrack[MAXTRACKSPEREVENT], Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Short_t daTrackFoundaTrackMC[MAXTRACKSPEREVENT])
static const Double_t PMAX
static const Short_t nbinCY
void clustering2(Short_t vec1[2], int nListElements, Short_t List[][2], int &nClusterElementsFound, Short_t ClusterElementsFound[][2], int &nRemainingElements, Short_t RemainingElements[][2])
bool FindTrackInXYProjection(Short_t iHit, Short_t nRcell, Short_t nFicell, Int_t *Minclinations, Double_t info[nmaxHits][7], bool *ExclusionList, Short_t *RConformalIndex, Short_t *FiConformalIndex, Short_t nBoxConformal[nRdivConformal][nFidivConformal], Short_t HitsinBoxConformal[MAXHITSINCELL][nRdivConformal][nFidivConformal], Short_t nTracksFoundSoFar, Short_t *nHitsinTrack, Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Double_t *trajectory_vertex, Double_t infoparalConformal[nmaxHits][5], Double_t posizSciTilx, Double_t posizSciTily, Double_t *S, Double_t *Ox, Double_t *Oy, Double_t *R, Double_t *Fi_low_limit, Double_t *Fi_up_limit, Double_t *Fi_initial_helix_referenceframe, Double_t *Fi_final_helix_referenceframe, Short_t *Charge, Double_t *U, Double_t *V)
Double_t GAMMA[MAXTRACKSPEREVENT]
double cut[MAX]
Definition: autocutx.C:36
CalculatedCircles PndSttTrkFindCircles(Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t, Double_t)
Short_t nSttSkewhitInMCTrack[MAXTRACKSPEREVENT]
static const Short_t nmaxinclinationversors
bool IntersectionCircle_Segment(Double_t a, Double_t b, Double_t c, Double_t P1x, Double_t P2x, Double_t P1y, Double_t P2y, Double_t Ox, Double_t Oy, Double_t R, Short_t *Nintersections, Double_t XintersectionList[2], Double_t YintersectionList[2], Double_t *distance)
static const Short_t MAXHITSINCELL
Int_t a
Definition: anaLmdDigi.C:126
static const Short_t nbinD
Short_t AssociateSciTilHit(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t *List, Double_t *esse)
void PndSttOrdering(Double_t oX, Double_t oY, Double_t info[][7], Short_t nParallelHits, Short_t *ListParallelHits, Short_t nSttSkewhit, Short_t *ListSkewHits, Double_t *S, Short_t *Infoparal, Short_t *Infoskew, Short_t *nTotal, Short_t *BigList, Short_t *Charge)
static const Short_t MINIMUMCOUNTSDFiR
static const Short_t MINIMUMCOUNTSKAPPAFI0
static const Short_t nmaxSciTilHits
int nHits
Definition: RiemannTest.C:16
static const Double_t CXmin
void ChooseEntranceExitbis(Double_t Oxx, Double_t Oyy, Short_t Charge, Double_t FiStart, Short_t nIntersections, Double_t *XintersectionList, Double_t *YintersectionList, Double_t Xcross[2], Double_t Ycross[2])
Double_t
Short_t FindTrackEntranceExitHexagonCircleRight(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t GAP, Double_t Xcross[2], Double_t Ycross[2])
Short_t PndSttTrkAssociatedParallelHitsToHelixQuater(bool ExclusionList[nmaxHits], Double_t m, Double_t q, Short_t Status, Short_t nHitsinTrack, Short_t *ListHitsinTrack, Int_t NhitsParallel, Double_t Ox, Double_t Oy, Double_t R, Double_t info[][7], Double_t infoparalConformal[][5], Short_t *RConformalIndex, Short_t *FiConformalIndex, Short_t nBoxConformal[nRdivConformal][nFidivConformal], Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal], Short_t *auxListHitsinTrack)
Double_t BETA[MAXTRACKSPEREVENT]
static const Short_t nFidivConformal
void OrderingUsingConformal(Double_t oX, Double_t oY, Int_t nHits, Double_t XY[][2], Int_t Charge, Short_t *ListHits)
Double_t S_SciTilHitsinTrack[MAXTRACKSPEREVENT][nmaxSciTilHits]
void PndSttInfoXYZSkew(Double_t Z, Double_t ZDrift, Double_t S, Double_t Ox, Double_t Oy, Double_t R, Double_t KAPPA, Double_t FI0, Short_t Charge, Double_t *Posiz)
void PndSttOrderingParallel(Double_t oX, Double_t oY, Double_t info[][7], Short_t nParallelHits, Short_t *ListParallelHits, Short_t *Infoparal, Short_t Charge, Double_t *Fi_initial_helix_referenceframe, Double_t *Fi_final_helix_referenceframe, Double_t *U, Double_t *V)
static const Short_t MAXTRACKSPEREVENT
static const Double_t Rmin
static const Double_t Zmin
static const Double_t ApotemaMinSkewStraw
static const Double_t Rmax
static const Short_t nmaxHits
void SeparateInnerOuterParallel(Short_t nHits, Short_t *ListHits, Double_t info[][7], Double_t RStrawDetInnerParMax, Short_t *nInnerHits, Short_t *ListInnerHits, Short_t *nOuterHits, Short_t *ListOuterHits, Short_t *nInnerHitsLeft, Short_t *ListInnerHitsLeft, Short_t *nInnerHitsRight, Short_t *ListInnerHitsRight, Short_t *nOuterHitsLeft, Short_t *ListOuterHitsLeft, Short_t *nOuterHitsRight, Short_t *ListOuterHitsRight)
void AssociateFoundTrackstoMC(Double_t info[][7], Short_t nTracksFoundSoFar, Short_t *nHitsinTrack, Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHits], Short_t *nSttSkewhitinTrack, Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHits], Short_t daTrackFoundaTrackMC[MAXTRACKSPEREVENT])
void SetTubeArray(TClonesArray *tubeArray)
void clustering3(Short_t vec1[3], int nListElements, Short_t List[][3], int &nClusterElementsFound, Short_t ClusterElementsFound[][3], int &nRemainingElements, Short_t RemainingElements[][3])
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, Short_t *Listofhits, Double_t *S, Double_t info[][7], Double_t RminStrawSkew, Double_t RmaxStrawSkew, Double_t cut, Short_t maxnum)
Short_t FitSZspace(Short_t nSkewHitsinTrack, Double_t *S, Double_t *Z, Double_t *DriftRadius, Double_t *ErrorDriftRadius, Double_t FInot, Short_t NMAX, Double_t *emme)
Short_t FindTrackEntranceExitHexagonCircleLeft(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t GAP, Double_t Xcross[2], Double_t Ycross[2])
Double_t veritaMC[nmaxHits][3]
double X
Definition: anaLmdDigi.C:68
bool IntersectionSciTil_Circle(Double_t posizSciTilx, Double_t posizSciTily, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t *Nintersections, Double_t XintersectionList[2], Double_t YintersectionList[2])
Short_t PndSttTrkAssociatedParallelHitsToHelix5(bool ExclusionList[nmaxHits], Int_t NhitsParallel, Double_t Ox, Double_t Oy, Double_t R, Double_t info[][7], Double_t Fi_low, Double_t Fi_up, Short_t *auxListHitsinTrack)
static const Double_t PI
static const Double_t STRAWRADIUS
void plottamentiParalleleGenerali(Int_t Nremaining, Float_t *RemainingR, Float_t *RemainingD, Float_t *RemainingFi, Float_t *RemainingCX, Float_t *RemainingCY, bool *Goodflag)
Double_t radiaConf[nRdivConformal]
bool BadTrack_ParStt(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Xcross[2], Double_t Ycross[2], Short_t nHits, Short_t *ListHits, Double_t info[][7], Double_t cut, Short_t maxnum, Short_t islack)
bool IsInTargetPipe(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t fi0, Double_t kappa, Short_t charge, Double_t gap)
CalculatedHelix PndSttTrkFindHelix(Double_t Ox, Double_t Oy, Double_t R, Double_t Zcenter1, Double_t Zcenter2, Double_t Zcenter3, Double_t semilengthStraight1, Double_t semilengthStraight2, Double_t semilengthStraight3, Double_t C0x1, Double_t C0y1, Double_t C0z1, Double_t semilengthSkew1, Double_t r1, Double_t vx1, Double_t vy1, Double_t vz1, Double_t C0x2, Double_t C0y2, Double_t C0z2, Double_t semilengthSkew2, Double_t r2, Double_t vx2, Double_t vy2, Double_t vz2, Int_t *STATUS)
static const Short_t nmaxHitsInTrack
void ChooseEntranceExit(Double_t Oxx, Double_t Oyy, Short_t flag, Short_t Charge, Double_t FiStart, Short_t nIntersections[2], Double_t XintersectionList[][2], Double_t YintersectionList[][2], Double_t Xcross[2], Double_t Ycross[2])
void disegnaSciTilHit(FILE *MACRO, int ScitilHit, double posx, double posy, int tipo)
Short_t PndSttTrkAssociatedParallelHitsToHelix(Double_t Ox, Double_t Oy, Double_t R, Int_t Nhits, Double_t info[][7], Short_t *auxListHitsinTrack)
static const Double_t CVEL
Short_t FindTrackEntranceExitbiHexagon(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t Xcross[2], Double_t Ycross[2])
Short_t PndSttFitSZspacebis(Short_t nSttSkewhitinTrack, Double_t *S, Double_t *Z, Double_t *DriftRadius, Double_t FInot, Short_t NMAX, Double_t *m)
void Merge_Sort(Short_t n_ele, Double_t *array, Short_t *ind)
static const Double_t CXmax
PndSttHit * GetHitFromCollections(Int_t hitCounter)
Short_t nSciTilHitsinTrack[MAXTRACKSPEREVENT]
static const Double_t CYmin
void WriteMacroParallelHitsGeneralConformalwithMC(bool *keepit, Int_t Nhits, Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Short_t nTracksFoundSoFar)
void FixDiscontinuitiesFiangleinSZplane(Short_t TemporarynSttSkewhitinTrack, Double_t *S, Double_t *Fi_initial_helix_referenceframe, Short_t Charge)
Short_t PndSttFindTrackPatterninBoxConformalSpecial(Short_t NRCELLDISTANCE, Short_t NFiCELLDISTANCE, Short_t Nparal, Short_t NparallelToSearch, Short_t iSeed, Short_t *ListHitsinTrackinWhichToSearch, Double_t info[][7], bool InclusionList[nmaxHits], Short_t RConformalIndex[nmaxHits], Short_t FiConformalIndex[nmaxHits], Short_t nBoxConformal[nRdivConformal][nFidivConformal], Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal], Short_t *OutputListHitsinTrack)
Double_t CyMC[MAXTRACKSPEREVENT]
void WriteMacroParallelHitsConformalwithMCspecial(Int_t Nhits, Double_t auxinfoparalConformal[][5], Short_t nTracksFoundSoFar, Short_t Status, Double_t *trajectory_vertex)
static const Short_t nbinKAPPA
double Z
Definition: anaLmdDigi.C:68
Short_t IntersectionsWithClosedPolygon(Double_t Ox, Double_t Oy, Double_t R, Double_t Rmi, Double_t Rma, Short_t nIntersections[2], Double_t XintersectionList[][2], Double_t YintersectionList[][2])
void WriteMacroParallelHitswithRfromMC(Int_t Nhits, Double_t info[][7], Short_t nTracksFoundSoFar, Double_t *Ox, Double_t *Oy, Short_t *daParTrackFoundaTrackMC)
Double_t xmin
static const Short_t DELTAnR
static const Short_t nbinFI0
static const Double_t ApotemaMaxInnerParStraw
Short_t ListSciTilHitsinTrack[MAXTRACKSPEREVENT][nmaxSciTilHitsinTrack]
Short_t AssociateBetterAfterFitSkewHitsToXYTrack(Short_t TemporarynSttSkewhitinTrack, Short_t SkewList[nmaxHits][2], Double_t *S, Double_t *Z, Double_t *ZDrift, Double_t *ZRadiusafterTilt, Double_t KAPPA, Double_t FI0, Short_t *tempore, Double_t *temporeS, Double_t *temporeZ, Double_t *temporeZDrift, Double_t *temporeZErrorafterTilt, Int_t *STATUS)
Short_t IntersectionsWithOpenPolygon(Double_t Ox, Double_t Oy, Double_t R, Short_t nSides, Double_t *a, Double_t *b, Double_t *c, Double_t *side_x, Double_t *side_y, Double_t *XintersectionList, Double_t *YintersectionList)
void WriteMacroSkewAssociatedHits(bool goodskewfit, Double_t KAPPA, Double_t FI0, Double_t D, Double_t Fi, Double_t R, Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Int_t imaxima, Int_t sequentialNTrack, Short_t nSttSkewhitinTrack, Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Short_t nscitilhits, Double_t *ESSE, Double_t *ZETA)
bool TypeConf[MAXTRACKSPEREVENT]
Short_t IntersectionsWithGapSemicircle(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t gap, bool left, Double_t Rma, Double_t *XintersectionList, Double_t *YintersectionList)
Double_t ALFA[MAXTRACKSPEREVENT]
Double_t FI0[3][16]
bool IsInternal(Double_t Px, Double_t Py, Double_t Xtraslation, Double_t Ytraslation, Double_t Theta)
static const Double_t BFIELD
void WriteMacroSkewAssociatedHitswithRfromMC(Double_t KAPPA, Double_t FI0, Double_t D, Double_t Fi, Double_t R, Int_t Nhits, Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Int_t imaxima, Int_t nMaxima)
Short_t FindTrackEntranceExitHexagonCircle(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3], Double_t ApotemaMin, Double_t ApotemaMax, Double_t Xcross[2], Double_t Ycross[2])
static const Double_t DELTA_Fi
Short_t nHitsInMCTrack[MAXTRACKSPEREVENT]
void WriteMacroSkewAssociatedHitswithMC(bool goodskewfit, Double_t KAPPA, Double_t FI0, Double_t D, Double_t Fi, Double_t R, Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Int_t imaxima, Int_t sequentialNTrack, Short_t nSttSkewhitinTrack, Short_t ListSkewHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Short_t nSkewCommon, Short_t SkewCommonList[MAXTRACKSPEREVENT][nmaxHits], Short_t daTrackFoundaTrackMC, Short_t nMCSkewAlone[MAXTRACKSPEREVENT], Short_t MCSkewAloneList[MAXTRACKSPEREVENT][nmaxHits], Short_t nscitilhits, Double_t *ESSE, Double_t *ZETA)
bool InclusionListSciTil[nmaxSciTilHits]
void PndSttFromXYtoConformal2(Double_t trajectory_vertex[3], Short_t nHitsinTrack, Short_t iExclude, Short_t *ListHits, Double_t info[][7], Double_t auxinfoparalConformal[][5], Int_t *status)
static const Short_t nmaxSciTilHitsinTrack
void WriteMacroParallelAssociatedHits(Double_t Ox, Double_t Oy, Double_t R, Short_t Nhits, Short_t ListHitsinTrack[MAXTRACKSPEREVENT][nmaxHitsInTrack], Double_t info[][7], Int_t Nincl, Int_t Minclinations[], Double_t inclination[][3], Short_t imaxima, Int_t sequencial, Short_t nscitilhitsintrack, Short_t *listscitilhitsintrack)
Short_t IntersectionsWithClosedbiHexagonLeft(Double_t vgap, Double_t Ox, Double_t Oy, Double_t R, Double_t Ami, Double_t Ama, Short_t *nIntersections, Double_t *XintersectionList, Double_t *YintersectionList)
Double_t R
Definition: checkhelixhit.C:61
static const Double_t RStrawDetectorMax
void PndSttBoxConformalFilling(bool ExclusionList[nmaxHits], Double_t infoparalConformal[][5], Int_t Nparal, Short_t nBoxConformal[nRdivConformal][nFidivConformal], Short_t HitsinBoxConformal[][nRdivConformal][nFidivConformal], Short_t RConformalIndex[nmaxHits], Short_t FiConformalIndex[nmaxHits])
static const Double_t DIMENSIONSCITIL
ClassDef(PndSttTrackFinderReal, 1)
double r2
void Merge(Short_t nl, Double_t *left, Short_t *ind_left, Short_t nr, Double_t *right, Short_t *ind_right, Double_t *result, Short_t *ind)
int status[10]
Definition: f_Init.h:28
static const Double_t ApotemaMaxSkewStraw
static const Double_t RMAXSCITIL
Short_t PndSttFindTrackStrictCollection(Short_t NFiCELLDISTANCE, Short_t iSeed, Short_t NParallelToSearch, Short_t *ListHitsinTrackinWhichToSearch, bool ExclusionList[nmaxHits], Short_t FiConformalIndex[nmaxHits], Short_t *OutputListHitsinTrack)
static const Short_t nRdivConformal
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, Short_t *Listofhits, Double_t info[][7], Double_t RStrawDetMin, Double_t RStrawDetInnerParMax, Double_t RStrawDetOuterParMin, Double_t RStrawDetMax)