PandaRoot
PndTrkCTGeometryCalculations.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 PndTrkCTGeometryCalculations_H
14 #define PndTrkCTGeometryCalculations_H 1
15 
16 // Root includes
17 #include "TROOT.h"
18 
19 class PndTrkCTGeometryCalculations : public TObject {
20 
21  public:
24 
27 
28  Double_t CalculateArcLength(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge,
29  Double_t *Xcross, // entrance-exit point
30  Double_t *Ycross // entrance-exit point
31  );
32 
33  bool CalculateCircleThru3Points(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t x3, Double_t y3, Double_t *o_x, Double_t *o_y, Double_t *r_r);
34 
35  void calculateintersections(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t C0x, Double_t C0y, Double_t C0z, Double_t r, Double_t vx, Double_t vy, Double_t vz, Int_t *STATUS,
36  Double_t *POINTS);
37 
38  void CalculateSandZ(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t skewnum, Double_t info[][7], Double_t *WDX, Double_t *WDY, Double_t *WDZ, Double_t S[2], Double_t Z[2],
39  Double_t Zdrift[2], Double_t Zerror[2]);
40 
41  void CalculateSandZ2(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t skewnum, Double_t info[][7], Double_t *WDX, Double_t *WDY, Double_t *WDZ, Double_t S[2], Double_t Sdrift[2],
42  Double_t Z[2], Double_t Zdrift[2], Double_t Zerror[2]);
43 
44  void ChooseEntranceExitbis(Double_t Oxx, Double_t Oyy, Short_t Charge, Double_t FiStart, Short_t nIntersections, Double_t *XintersectionList, Double_t *YintersectionList,
45  Double_t Xcross[2], // output
46  Double_t Ycross[2] // output
47  );
48 
49  void ChooseEntranceExit3(Double_t Oxx, Double_t Oyy, Short_t Charge, Double_t FiStart, Short_t nIntersections,
50  Double_t *XintersectionList, // input and output;
51  Double_t *YintersectionList, // input and output;
52  Double_t *FiOrderedList // output;
53  );
54 
55  Double_t Dist_SZ(Double_t Rr, Double_t KAPPA, Double_t FI0, Double_t ZED, Double_t S, Int_t *nrounds);
56 
57  Double_t Dist_SZ_bis(Double_t Rr, // input
58  Double_t KAPPA, // input
59  Double_t FI0, // input
60  Double_t ZED, // input
61  Double_t S, // input
62  Short_t n_allowed_rounds, // input, number of maximum allowed turns. That means that the number of turns
63  // can go from 0 to n_allowed_rounds. It can be negative, in that case
64  // the number of allowed turns go from n_allowed_rounds to 0;
65  Double_t signPz, // input, it indicates if the tracks goes forward (Pz>0) or backwords (Pz<0);
66  Double_t &chosenS // output, the S position corrisponding to the point minimizing the distance;
67  // this S can be < 0 or > 2PI;
68  );
69 
70  Double_t FindDistance(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t tanlow, Double_t tanmid, Double_t tanup, Double_t alfa, Double_t beta, Double_t gamma);
71 
72  void FindingParallelTrackAngularRange(Double_t oX, Double_t oY, Double_t Rr, Short_t Charge,
73  Double_t *Fi_low_limit, // Fi (in XY Helix frame) lower limit using
74  // the Stt detector minimum/maximum radius
75  // Fi_low_limit is ALWAYS between 0. and 2PI
76  Double_t *Fi_up_limit, // Fi (in XY Helix frame) upper limit using
77  // the Stt detector maximum/minimum radius
78  // Fi_up_limit is ALWAYS > Fi_low_limit and
79  // possibly > 2PI.
80  Short_t *status,
81  Double_t Rmin, // Rmin of cylindrical volume intersected by track;
82  Double_t Rmax // Rmax of cylindrical volume intersected by track;
83  );
84 
85  void FindingParallelTrackAngularRange2(Double_t oX, // input;
86  Double_t oY, // input;
87  Double_t Rma, // Rmax of cylindrical volume intersected by track;
88  Double_t Rmi, // Rmin of cylindrical volume intersected by track;
89  Double_t Rr, // input;
90  Double_t *Fi_low_limit, // output; Fi (in XY Helix frame) lower limit using
91  // the Stt detector minimum/maximum radius
92  // Fi_low_limit is ALWAYS between 0. and 2PI;
93  Double_t *Fi_up_limit, // output; // Fi (in XY Helix frame) upper limit using
94  // the Stt detector maximum/minimum radius
95  // Fi_up_limit is ALWAYS > Fi_low_limit and
96  // possibly > 2PI;
97  Short_t *status // output;
98  );
99 
100  Short_t FindIntersectionsOuterCircle(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t RMax, Double_t Xcross[2], Double_t Ycross[2]);
101 
102  Short_t FindTrackEntranceExitbiHexagonLeft(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3],
103  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
104  Double_t ApotemaMax, Double_t Xcross[2], Double_t Ycross[2]);
105 
106  Short_t FindTrackEntranceExitbiHexagonLeft2(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3],
107  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
108  Double_t ApotemaMax, Double_t XintersectionList[16], Double_t YintersectionList[16], Double_t FiOrderedList[16]);
109 
110  Short_t FindTrackEntranceExitbiHexagonRight(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3],
111  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
112  Double_t ApotemaMax, Double_t Xcross[2], Double_t Ycross[2]);
113 
114  Short_t FindTrackEntranceExitbiHexagonRight2(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3],
115  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
116  Double_t ApotemaMax, Double_t XintersectionList[16], Double_t YintersectionList[16], Double_t FiOrderedList[16]);
117 
118  Short_t FindTrackEntranceExitHexagonCircleLeft(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3],
119  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
120  Double_t ApotemaMax, Double_t GAP, Double_t Xcross[2], Double_t Ycross[2]);
121 
122  Short_t FindTrackEntranceExitHexagonCircleLeft2(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3],
123  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
124  Double_t ApotemaMax, Double_t GAP, Double_t XintersectionList[12], Double_t YintersectionList[12], Double_t FiOrderedList[12]);
125 
126  Short_t FindTrackEntranceExitHexagonCircleRight(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3],
127  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
128  Double_t ApotemaMax, Double_t GAP, Double_t Xcross[2], Double_t Ycross[2]);
129 
130  Short_t FindTrackEntranceExitHexagonCircleRight2(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t Start[3],
131  Double_t ApotemaMin, // Apotema=distance Hexagon side from (0,0).
132  Double_t ApotemaMax, Double_t GAP, Double_t XintersectionList[12], Double_t YintersectionList[12], Double_t FiOrderedList[12]);
133 
134  bool IntersectionCircle_Segment(Double_t a, // coefficients implicit equation.
135  Double_t b, // of segment : a*x + b*y + c =0.
136  Double_t c,
137  Double_t P1x, // point delimiting the segment.
138  Double_t P2x, // point delimiting the segment.
139  Double_t P1y, // point delimiting the segment.
140  Double_t P2y, // point delimiting the segment.
141  Double_t Oxx, // center of circle.
142  Double_t Oyy,
143  Double_t Rr, // Radius of circle.
144  Short_t *Nintersections, Double_t XintersectionList[2], Double_t YintersectionList[2], Double_t *distance);
145 
146  bool IntersectionCircle_Segment_forScitil(Double_t a, // coefficients implicit equation.
147  Double_t b, // of segment : a*x + b*y + c =0.
148  Double_t c,
149  Double_t P1x, // point delimiting the segment.
150  Double_t P2x, // point delimiting the segment.
151  Double_t P1y, // point delimiting the segment.
152  Double_t P2y, // point delimiting the segment.
153  Double_t Oxx, // center of circle.
154  Double_t Oyy,
155  Double_t Rr, // Radius of circle.
156  Double_t factor, // to take into account errors in
157  // the determination of the circumference;
158  Short_t *Nintersections, Double_t XintersectionList[2], Double_t YintersectionList[2], Double_t *distance);
159 
160  bool IntersectionSciTil_Circle(Double_t posizSciTilx, Double_t posizSciTily,
161  Double_t Oxx, // center of circle.
162  Double_t Oyy,
163  Double_t Rr, // Radius of circle.
164  Short_t *Nintersections, Double_t XintersectionList[2], Double_t YintersectionList[2]);
165 
166  Short_t IntersectionsWithClosedbiHexagonLeft(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr,
167  Double_t Ami, // Apotema min of inner Hexagon;
168  Double_t Ama, // Apotema max of outer Hexagon;
169 
170  //-------- outputs
171  Short_t *nIntersections, Double_t *XintersectionList, Double_t *YintersectionList);
172 
173  Short_t IntersectionsWithClosedbiHexagonRight(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr,
174  Double_t Ami, // Apotema min of inner Hexagon;
175  Double_t Ama, // Apotema max of outer Hexagon;
176 
177  //-------- outputs
178  Short_t *nIntersections, Double_t *XintersectionList, Double_t *YintersectionList);
179 
180  Short_t IntersectionsWithClosedPolygon(Double_t Oxx, Double_t Oyy, Double_t Rr,
181  Double_t Rmi, // Rmin of cylindrical volume intersected by track;
182  Double_t Rma, // Rmax of cylindrical volume intersected by track;
183 
184  //-------- outputs
185  Short_t nIntersections[2], Double_t XintersectionList[][2], Double_t YintersectionList[][2]);
186 
187  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);
188 
189  Short_t IntersectionsWithOpenPolygon(Double_t Oxx, // Track parameter
190  Double_t Oyy, // Track parameter
191  Double_t Rr, // Track parameter
192  Short_t nSides, // input, n. of Sides of open Polygon.
193  Double_t *a, // coefficient of formula : aX + bY + c = 0 defining
194  Double_t *b, // the Polygon sides.
195  Double_t *c,
196  Double_t *side_x, // X,Y coordinate of the Sides vertices (in sequence, following
197  Double_t *side_y, // the Polygon along.
198  //-------- outputs
199  Double_t *XintersectionList, // XintersectionList
200  Double_t *YintersectionList // YintersectionList.
201  );
202 
203  bool IsInsideArc(Double_t Oxx, Double_t Oyy, Short_t Charge, Double_t Xcross[2], Double_t Ycross[2], Double_t Spoint);
204 
205  bool IsInMvdMiniDisk1_97to1_99(Double_t X, // X coordinate of point;
206  Double_t Y // Y coordinate of point;
207  );
208 
209  bool IsInMvdMiniDisk1_97to1_99withMargin(Double_t X, // X coordinate of point;
210  Double_t Y, // Y coordinate of point;
211  Double_t xmargin, // safety margin in X coordinate;
212  Double_t ymargin // safety margin in Y coordinate;
213  );
214 
215  bool IsInMvdMiniDisk2_41to2_43(Double_t X, // X coordinate of point;
216  Double_t Y // Y coordinate of point;
217  );
218 
219  bool IsInMvdMiniDisk2_41to2_43withMargin(Double_t X, // X coordinate of point;
220  Double_t Y, // Y coordinate of point;
221  Double_t xmargin, // safety margin in X coordinate;
222  Double_t ymargin // safety margin in Y coordinate;
223  );
224 
225  bool IsInMvdMiniDisk3_97to3_99(Double_t X, // X coordinate of point;
226  Double_t Y // Y coordinate of point;
227  );
228 
229  bool IsInMvdMiniDisk3_97to3_99withMargin(Double_t X, // X coordinate of point;
230  Double_t Y, // Y coordinate of point;
231  Double_t xmargin, // safety margin in X coordinate;
232  Double_t ymargin // safety margin in Y coordinate;
233  );
234 
235  bool IsInMvdMiniDisk4_41to4_43(Double_t X, // X coordinate of point;
236  Double_t Y // Y coordinate of point;
237  );
238 
239  bool IsInMvdMiniDisk4_41to4_43withMargin(Double_t X, // X coordinate of point;
240  Double_t Y, // Y coordinate of point;
241  Double_t xmargin, // safety margin in X coordinate;
242  Double_t ymargin // safety margin in Y coordinate;
243  );
244 
245  bool IsInMvdMiniDisk6_97to6_99(Double_t X, // X coordinate of point;
246  Double_t Y // Y coordinate of point;
247  );
248 
249  bool IsInMvdMiniDisk6_97to6_99withMargin(Double_t X, // X coordinate of point;
250  Double_t Y, // Y coordinate of point;
251  Double_t xmargin, // safety margin in X coordinate;
252  Double_t ymargin // safety margin in Y coordinate;
253  );
254 
255  bool IsInMvdMiniDisk7_41to7_43(Double_t X, // X coordinate of point;
256  Double_t Y // Y coordinate of point;
257  );
258 
259  bool IsInMvdMiniDisk7_41to7_43withMargin(Double_t X, // X coordinate of point;
260  Double_t Y, // Y coordinate of point;
261  Double_t xmargin, // safety margin in X coordinate;
262  Double_t ymargin // safety margin in Y coordinate;
263  );
264 
265  bool IsInMvdMiniDisk9_97to9_99(Double_t X, // X coordinate of point;
266  Double_t Y // Y coordinate of point;
267  );
268 
269  bool IsInMvdMiniDisk9_97to9_99withMargin(Double_t X, // X coordinate of point;
270  Double_t Y, // Y coordinate of point;
271  Double_t xmargin, // safety margin in X coordinate;
272  Double_t ymargin // safety margin in Y coordinate;
273  );
274 
275  bool IsInMvdMiniDisk10_41to10_43(Double_t X, // X coordinate of point;
276  Double_t Y // Y coordinate of point;
277  );
278 
279  bool IsInMvdMiniDisk10_41to10_43withMargin(Double_t X, // X coordinate of point;
280  Double_t Y, // Y coordinate of point;
281  Double_t xmargin, // safety margin in X coordinate;
282  Double_t ymargin // safety margin in Y coordinate;
283  );
284 
285  bool IsInMvdMiniDisk14_77to14_79(Double_t X, // X coordinate of point;
286  Double_t Y // Y coordinate of point;
287  );
288 
289  bool IsInMvdMiniDisk14_77to14_79withMargin(Double_t X, // X coordinate of point;
290  Double_t Y, // Y coordinate of point;
291  Double_t xmargin, // safety margin in X coordinate;
292  Double_t ymargin // safety margin in Y coordinate;
293  );
294 
295  bool IsInMvdMiniDisk15_21to15_23(Double_t X, // X coordinate of point;
296  Double_t Y // Y coordinate of point;
297  );
298 
299  bool IsInMvdMiniDisk15_21to15_23withMargin(Double_t X, // X coordinate of point;
300  Double_t Y, // Y coordinate of point;
301  Double_t xmargin, // safety margin in X coordinate;
302  Double_t ymargin // safety margin in Y coordinate;
303  );
304 
305  bool IsInMvdMiniDisk21_77to21_79(Double_t X, // X coordinate of point;
306  Double_t Y // Y coordinate of point;
307  );
308 
309  bool IsInMvdMiniDisk21_77to21_79withMargin(Double_t X, // X coordinate of point;
310  Double_t Y, // Y coordinate of point;
311  Double_t xmargin, // safety margin in X coordinate;
312  Double_t ymargin // safety margin in Y coordinate;
313  );
314 
315  bool IsInMvdMiniDisk22_21to22_23(Double_t X, // X coordinate of point;
316  Double_t Y // Y coordinate of point;
317  );
318 
319  bool IsInMvdMiniDisk22_21to22_23withMargin(Double_t X, // X coordinate of point;
320  Double_t Y, // Y coordinate of point;
321  Double_t xmargin, // safety margin in X coordinate;
322  Double_t ymargin // safety margin in Y coordinate;
323  );
324 
325  bool IsInTargetPipe(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t fi0, Double_t kappa, Short_t charge, Double_t gap);
326 
327  bool IsInternal(Double_t Px, // point
328  Double_t Py, Double_t Xtraslation, Double_t Ytraslation, Double_t Theta);
329 
330  void ListAxialSectorsCrossedbyTrack_and_Hits(Double_t Ox, // input;
331  Double_t Oy, // input;
332  Double_t R, // input;
333  Double_t Charge, // input;
334  Short_t nHits, // input;
335  Short_t *ListHits, // input;
336  Double_t info[][7], // input;
337  Short_t &nArcs_populated, // output; # Arcs of trajectory populated by at least 1 axial hit; this is <= 56;
338  Short_t nHitsInArc[56], // output; number of hits in each Sector; if the maximun # of Intersected Sector is 56,
339  // than the maximum # of Arcs is 28;
340 
341  Short_t (*ListHitsInArc)[56] // output; ordered list of hits in each Arc (from first to last
342  // according to the charge of the particle;if the maximum
343  // # of Intersected Sector is 56, than the maximum # of Arcs is 28;
344  );
345 
347 };
348 
349 #endif
bool IsInMvdMiniDisk6_97to6_99(Double_t X, Double_t Y)
bool IsInMvdMiniDisk9_97to9_99withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)
bool IsInternal(Double_t Px, Double_t Py, Double_t Xtraslation, Double_t Ytraslation, Double_t Theta)
void FindingParallelTrackAngularRange(Double_t oX, Double_t oY, Double_t Rr, Short_t Charge, Double_t *Fi_low_limit, Double_t *Fi_up_limit, Short_t *status, Double_t Rmin, Double_t Rmax)
void ListAxialSectorsCrossedbyTrack_and_Hits(Double_t Ox, Double_t Oy, Double_t R, Double_t Charge, Short_t nHits, Short_t *ListHits, Double_t info[][7], Short_t &nArcs_populated, Short_t nHitsInArc[56], Short_t(*ListHitsInArc)[56])
Short_t IntersectionsWithClosedPolygon(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t Rmi, Double_t Rma, Short_t nIntersections[2], Double_t XintersectionList[][2], Double_t YintersectionList[][2])
Short_t IntersectionsWithClosedbiHexagonLeft(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t Ami, Double_t Ama, Short_t *nIntersections, Double_t *XintersectionList, Double_t *YintersectionList)
Short_t FindTrackEntranceExitHexagonCircleLeft2(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 XintersectionList[12], Double_t YintersectionList[12], Double_t FiOrderedList[12])
Short_t IntersectionsWithClosedbiHexagonRight(Double_t vgap, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t Ami, Double_t Ama, Short_t *nIntersections, Double_t *XintersectionList, Double_t *YintersectionList)
bool IsInTargetPipe(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t fi0, Double_t kappa, Short_t charge, Double_t gap)
void ChooseEntranceExit3(Double_t Oxx, Double_t Oyy, Short_t Charge, Double_t FiStart, Short_t nIntersections, Double_t *XintersectionList, Double_t *YintersectionList, Double_t *FiOrderedList)
void CalculateSandZ(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t skewnum, Double_t info[][7], Double_t *WDX, Double_t *WDY, Double_t *WDZ, Double_t S[2], Double_t Z[2], Double_t Zdrift[2], Double_t Zerror[2])
bool IsInMvdMiniDisk6_97to6_99withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)
Double_t Dist_SZ(Double_t Rr, Double_t KAPPA, Double_t FI0, Double_t ZED, Double_t S, Int_t *nrounds)
bool IsInMvdMiniDisk10_41to10_43(Double_t X, Double_t Y)
bool IsInMvdMiniDisk2_41to2_43withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)
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])
bool IsInMvdMiniDisk9_97to9_99(Double_t X, Double_t Y)
bool IsInMvdMiniDisk21_77to21_79withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)
bool IsInMvdMiniDisk7_41to7_43withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)
bool IsInMvdMiniDisk14_77to14_79(Double_t X, Double_t Y)
Double_t Dist_SZ_bis(Double_t Rr, Double_t KAPPA, Double_t FI0, Double_t ZED, Double_t S, Short_t n_allowed_rounds, Double_t signPz, Double_t &chosenS)
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])
bool IntersectionCircle_Segment_forScitil(Double_t a, Double_t b, Double_t c, Double_t P1x, Double_t P2x, Double_t P1y, Double_t P2y, Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t factor, Short_t *Nintersections, Double_t XintersectionList[2], Double_t YintersectionList[2], Double_t *distance)
bool IsInMvdMiniDisk15_21to15_23withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)
bool CalculateCircleThru3Points(Double_t x1, Double_t y1, Double_t x2, Double_t y2, Double_t x3, Double_t y3, Double_t *o_x, Double_t *o_y, Double_t *r_r)
bool IsInMvdMiniDisk1_97to1_99withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)
bool IsInMvdMiniDisk22_21to22_23(Double_t X, Double_t Y)
bool IsInMvdMiniDisk21_77to21_79(Double_t X, Double_t Y)
bool IsInMvdMiniDisk14_77to14_79withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)
bool IsInsideArc(Double_t Oxx, Double_t Oyy, Short_t Charge, Double_t Xcross[2], Double_t Ycross[2], Double_t Spoint)
Short_t IntersectionsWithOpenPolygon(Double_t Oxx, Double_t Oyy, Double_t Rr, 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 CalculateSandZ2(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t skewnum, Double_t info[][7], Double_t *WDX, Double_t *WDY, Double_t *WDZ, Double_t S[2], Double_t Sdrift[2], Double_t Z[2], Double_t Zdrift[2], Double_t Zerror[2])
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 Oxx, Double_t Oyy, Double_t Rr, Short_t *Nintersections, Double_t XintersectionList[2], Double_t YintersectionList[2], Double_t *distance)
Short_t FindTrackEntranceExitbiHexagonRight2(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 XintersectionList[16], Double_t YintersectionList[16], Double_t FiOrderedList[16])
Double_t FindDistance(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t tanlow, Double_t tanmid, Double_t tanup, Double_t alfa, Double_t beta, Double_t gamma)
Short_t FindTrackEntranceExitbiHexagonLeft2(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 XintersectionList[16], Double_t YintersectionList[16], Double_t FiOrderedList[16])
bool IsInMvdMiniDisk4_41to4_43(Double_t X, Double_t Y)
Short_t FindTrackEntranceExitHexagonCircleRight2(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 XintersectionList[12], Double_t YintersectionList[12], Double_t FiOrderedList[12])
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])
bool IsInMvdMiniDisk2_41to2_43(Double_t X, Double_t Y)
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])
bool IsInMvdMiniDisk7_41to7_43(Double_t X, Double_t Y)
bool IsInMvdMiniDisk15_21to15_23(Double_t X, Double_t Y)
bool IsInMvdMiniDisk3_97to3_99withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)
Short_t FindIntersectionsOuterCircle(Double_t Oxx, Double_t Oyy, Double_t Rr, Double_t RMax, Double_t Xcross[2], Double_t Ycross[2])
ClassDef(PndTrkCTGeometryCalculations, 1)
Double_t CalculateArcLength(Double_t Oxx, Double_t Oyy, Double_t Rr, Short_t Charge, Double_t *Xcross, Double_t *Ycross)
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)
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])
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])
void calculateintersections(Double_t Oxx, Double_t Oyy, Double_t Rr, 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)
bool IsInMvdMiniDisk22_21to22_23withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)
void FindingParallelTrackAngularRange2(Double_t oX, Double_t oY, Double_t Rma, Double_t Rmi, Double_t Rr, Double_t *Fi_low_limit, Double_t *Fi_up_limit, Short_t *status)
bool IsInMvdMiniDisk4_41to4_43withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)
bool IsInMvdMiniDisk1_97to1_99(Double_t X, Double_t Y)
bool IsInMvdMiniDisk3_97to3_99(Double_t X, Double_t Y)
int status[10]
Definition: f_Init.h:48
bool IsInMvdMiniDisk10_41to10_43withMargin(Double_t X, Double_t Y, Double_t xmargin, Double_t ymargin)