ATLAS Offline Software
VertexPointEstimator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 /***************************************************************************
6  VertexPointEstimator.cxx - Description
7  -------------------
8  begin : 01-01-2008
9  authors : Tatjana Lenz, Thomas Koffas
10  email : tatjana.lenz@cern.ch, Thomas.Koffas@cern.ch
11  changes : M.ELSING
12 ***************************************************************************/
14 
15 constexpr double pi = M_PI;
16 constexpr double twopi = 2.*pi;
17 
18 namespace InDet {
19 
20  //define some statics
21  static const InterfaceID IID_IVertexPointEstimator("InDet::VertexPointEstimator", 1, 0);
22  const double VertexPointEstimator::s_bmagnt = 2.083;
23 
24  // ----------------------------------
25  VertexPointEstimator::VertexPointEstimator(const std::string& type, const std::string& name, const IInterface* parent) :
27  {
28  declareInterface<VertexPointEstimator>(this);
29  }
30 
31  // ----------------------------------
32  const InterfaceID& VertexPointEstimator::interfaceID() {
33  return IID_IVertexPointEstimator;
34  }
35 
36  // ----------------------------------
38  return StatusCode::SUCCESS;
39  }
40 
41  // ----------------------------------
43  return StatusCode::SUCCESS;
44  }
45 
46  // ----------------------------------
50  const Trk::Perigee *per2,
51  unsigned int flag,
52  int& errorcode) const
53  {
54  float deltaPhi;
55  float deltaR;
56  return intersectionImpl (per1, per2, flag, errorcode, deltaPhi, deltaR);
57  }
58 
59 
62  const Trk::Perigee *per2,
63  unsigned int flag,
64  int& errorcode,
65  Values_t& decors) const
66  {
67  decors.clear();
68  return intersectionImpl (per1, per2, flag, errorcode,
69  decors["deltaPhiTracks"],
70  decors["DR1R2"]);
71  }
72 
73 
74  std::vector<std::string> VertexPointEstimator::decorKeys()
75  {
76  return {"deltaPhiTracks", "DR1R2"};
77  }
78 
79 
80  // ----------------------------------
84  const Trk::Perigee *per2,
85  unsigned int flag,
86  int& errorcode,
87  float& deltaPhi,
88  float& deltaR) const
89  {
90  /*
91  Calculates the initial approximation to the vertex position. Based on CTVMFT.
92  Tries to intersect circles that are (R,Phi) projections of the helical trajectories of the two tracks
93  If the circles intersect, the intersection with smaller z difference between the 2 helices extrapolated to the intersection is chosen.
94  If the circles do not intersect, the vertex approximation is taken as the point of closest approach of the two circles.
95  per1 should be that of the track with the smaller radius
96  */
97  Amg::Vector3D intPoint(0.,0.,0.);
98  double aconst = -1.49898*s_bmagnt; //is it correct???????????????????
99  double DRMAX = 0.; // maximum XY separation, non-intersecting circles
100  double DZMAX = 0.; // maximum allowed track Z separation at the vertex
101  double RVMAX = 0.; // maximum allowed vertex radius
102  double minArcLength(0.);
103  double maxArcLength(0.);
104  double minDr(0.);
105  double maxDr(0.);
106  double maxHl(0.);
107  double maxPhi(0.);
108  if (flag <= 2) {
109  DRMAX = m_maxDR[flag]; //maximum XY separation, non-intersecting circles
110  DZMAX = m_maxDZ[flag]; //maximum allowed track Z separation at the vertex
111  RVMAX = m_maxR[flag] ; //maximum allowed vertex radius
112  minArcLength = m_minArcLength[flag];
113  maxArcLength = m_maxArcLength[flag];
114  minDr = m_minDr[flag];
115  maxDr = m_maxDr[flag];
116  maxHl = m_maxHl[flag];
117  maxPhi= m_maxPhi[flag];
118  }
119 
120  double d0[2],z0[2],phi[2],cotTheta[2],qOverPt[2],RC[2],XC[2],YC[2],RA[2],AB[2];
121  double XSVI[2],YSVI[2],ZSVI[2],RVI[2],DZSVI[2],SS1[2],SS2[2],ZZ1[2],ZZ2[2];
122 
123  double X=0.,Y=0.,Z=0.;
124  for (int I=0; I<2; ++I) {
125  d0[I] = -999.;
126  z0[I] = -999.;
127  phi[I] = -999.;
128  cotTheta[I] = -999.;
129  qOverPt[I] = -999.;
130  RC[I] = -999.;
131  XC[I] = -999.;
132  YC[I] = -999.;
133  RA[I] = +999.;
134  AB[I] = +999.;
135  XSVI[I] = 0.;
136  YSVI[I] = 0.;
137  ZSVI[I] = 0.;
138  RVI[I] = 2.0*RVMAX;
139  DZSVI[I] = 2.0*DZMAX;
140  SS1[I] = 0.;
141  SS2[I] = 0.;
142  ZZ1[I] = 0.;
143  ZZ2[I] = 0.;
144  }
145 
146  double U(0.);
147  const AmgVector(5)& perParam1 = per1->parameters();
148  double pt1 = fabs(sin(perParam1[Trk::theta])/perParam1[Trk::qOverP]);
149  const AmgVector(5)& perParam2 = per2->parameters();
150  double pt2 = fabs(sin(perParam2[Trk::theta])/perParam2[Trk::qOverP]);
151  if (pt1 < pt2) {
152  d0[0] = perParam1[Trk::d0]; d0[1] = perParam2[Trk::d0];
153  z0[0] = perParam1[Trk::z0]; z0[1] = perParam2[Trk::z0];
154  phi[0] = perParam1[Trk::phi]; phi[1] = perParam2[Trk::phi];
155  double theta1 = perParam1[Trk::theta]; cotTheta[0] = 1./tan(theta1);
156  double theta2 = perParam2[Trk::theta]; cotTheta[1] = 1./tan(theta2);
157  double qOverP1 = perParam1[Trk::qOverP]; qOverPt[0] = qOverP1/sin(perParam1[Trk::theta]);
158  double qOverP2 = perParam2[Trk::qOverP]; qOverPt[1] = qOverP2/sin(perParam2[Trk::theta]);
159  RC[0] = 10.*0.5/(qOverPt[0]*aconst); RC[1] = 10.*0.5/(qOverPt[1]*aconst);//Radius of curvature
160  U = RC[0] + d0[0];
161  XC[0] = -1*U*sin(phi[0]); //Circle center x-coordinate
162  YC[0] = U*cos(phi[0]); //Circle center y-coordinate
163  RA[0] = fabs(RC[0]);
164  U = RC[1] + d0[1];
165  XC[1] = -1*U*sin(phi[1]); // Circle center x-coordinate
166  YC[1] = U*cos(phi[1]); // Circle center y-coordinate
167  RA[1] = fabs(RC[1]);
168  } else {
169  d0[0] = perParam2[Trk::d0]; d0[1] = perParam1[Trk::d0];
170  z0[0] = perParam2[Trk::z0]; z0[1] = perParam1[Trk::z0];
171  phi[0] = perParam2[Trk::phi]; phi[1] = perParam1[Trk::phi];
172  double theta2 = perParam2[Trk::theta]; cotTheta[0] = 1./tan(theta2);
173  double theta1 = perParam1[Trk::theta]; cotTheta[1] = 1./tan(theta1);
174  double qOverP2 = perParam2[Trk::qOverP]; qOverPt[0] = qOverP2/sin(perParam2[Trk::theta]);
175  double qOverP1 = perParam1[Trk::qOverP]; qOverPt[1] = qOverP1/sin(perParam1[Trk::theta]);
176  RC[0] = 10.*0.5/(qOverPt[0]*aconst); RC[1] = 10.*0.5/(qOverPt[1]*aconst);//Radius of curvature
177  double U = RC[0] + d0[0];
178  XC[0] = -1*U*sin(phi[0]); //Circle center x-coordinate
179  YC[0] = U*cos(phi[0]); //Circle center y-coordinate
180  RA[0] = fabs(RC[0]);
181  U = RC[1] + d0[1];
182  XC[1] = -1*U*sin(phi[1]); // Circle center x-coordinate
183  YC[1] = U*cos(phi[1]); // Circle center y-coordinate
184  RA[1] = fabs(RC[1]);
185  }
186 
187  // get the circle centre separation
188  double DX = XC[1] - XC[0];
189  double DY = YC[1] - YC[0];
190  double D = DX*DX + DY*DY;
191  D = sqrt(D);
192  if (D == 0.) {
193  ATH_MSG_DEBUG("Concentric circles, should not happen return (0,0,0)");
194  errorcode = 1;
195  if(m_returnOnError) return intPoint;
196  }
197  U = D - RA[0] - RA[1]; // signed separation, if > 0., the circles do not intersect, if < 0., they might
198  // rotate, translate to a system, where the two circle centres lie on the X axis
199 
200  //New cut from Mauro
201  deltaR = U; double PHI = -99999.;
202  double hl = areaVar(XC[0], YC[0], RA[0], XC[1], YC[1], RA[1], PHI);
203 
204  double COST = DX/D;
205  double SINT = DY/D;
206  double Y0 = (-1*XC[0]*YC[1] + XC[1]*YC[0])/D; //Translation along the y-axis
207  for (int I=0; I<2; ++I) {
208  AB[I] = COST*XC[I] + SINT*YC[I]; // The new circle center positions in the rotated system. Essentially the new x-coordinates, since the y-coordinates are 0.
209  }
210  U = (XC[1] + XC[0])*(XC[1] - XC[0]) + (YC[1] + YC[0])*(YC[1] - YC[0]);
211  double V = (RA[1] + RA[0])*(RA[1] - RA[0]);
212  double XX = 0.5*(U - V)/D; // X of intersection in rotated coordinate system (a+AB[0]). Again the y is 0.
213  if ((XX - AB[0])*(XX - AB[0]) > 0.) {
214  U = sqrt((XX - AB[0])*(XX - AB[0])); //This is the a in my logbook
215  }
216  double YY2 = (RA[0] + U)*(RA[0] - U); //This is the h^2 in my logbook
217  double YY;
218  int nsol = 0;
219  if (YY2 > 0.) {
220 
221  // the circles intersect
222  YY = sqrt(YY2); // two intersection points (+/- Y) or (+/- h) in my logbook
223 
224  for (int I=0; I<2; ++I) {
225  U = YY + Y0; // invert the translation
226  XSVI[I] = COST*XX - SINT*U; // Invert the rotation
227  YSVI[I] = SINT*XX + COST*U;
228  YY = -1*YY;
229  }
230 
231  nsol = 2;
232 
233  } else {
234  // circles do not intersect - find how close they approach each other
235  // in the XY plane and take the point half way between them
236  U = D - RA[0] - RA[1];
237  if (U > 0.) {
238  //Circles do not overlap at all and are outside from each other.See logbook
239  V = U;
240  XX = AB[1] + RA[1];
241 
242  if (AB[0] < AB[1]) XX = AB[0] + RA[0];
243  } else {
244  //Circles inside each other but off-centered.See logbook
245  if (AB[0] < AB[1]) { //To the left
246  XX = AB[1] - RA[1];
247  V = AB[0] - RA[0] - XX;
248  } else {
249  //To the right
250  XX = AB[0] + RA[0];
251  V = AB[1] + RA[1] - XX;
252  }
253  }
254  XX = XX + 0.5*V;
255  XSVI[0] = COST*XX - SINT*Y0; // rotate back to the original system
256  YSVI[0] = SINT*XX + COST*Y0; // one solution
257  nsol = 1;
258  if (V > DRMAX) {
259  //Cut if distance of minimum approach is too big
260  ATH_MSG_DEBUG("XY distance of minimum approach is too large, return (0,0,0)");
261  errorcode = 2;
262  if(m_returnOnError) return intPoint;
263  }
264  }
265 
266  for (int J=0; J<nsol; ++J) { // loop over solutions
267  U = (XSVI[J] - XC[0])/RC[0];
268  V = -1*(YSVI[J] - YC[0])/RC[0];
269  U = atan2(U,V) - phi[0]; // turning angle from the track origin
270  if (U < -1*pi) U = U + twopi;
271  if (U > pi) U = U - twopi;
272  SS1[J] = RC[0]*U; // arc length
273  ZZ1[J] = z0[0] + SS1[J]*cotTheta[0];
274  U = (XSVI[J] - XC[1])/RC[1];
275  V = -1*(YSVI[J] - YC[1])/RC[1];
276  U = atan2(U,V) - phi[1];
277  if (U < -1*pi) U = U + twopi;
278  if (U > pi) U = U - twopi;
279  SS2[J] = RC[1]*U;
280  ZZ2[J] = z0[1] + SS1[J]*cotTheta[1];
281  RVI[J] = sqrt(XSVI[J]*XSVI[J] + YSVI[J]*YSVI[J]);
282  DZSVI[J] = ZZ2[J] - ZZ1[J];
283  }
284  ZSVI[0] = 0.5*(ZZ1[0] + ZZ2[0]);
285  ZSVI[1] = 0.5*(ZZ1[1] + ZZ2[1]);
286 
287  if (std::min(RVI[0],RVI[1]) > RVMAX) { // check the vertex radius is acceptable
288  ATH_MSG_DEBUG("Unacceptable vertex radius");
289  errorcode = 3;
290  }
291 
292  if (std::min(fabs(DZSVI[0]),fabs(DZSVI[1])) > DZMAX) { // check the Z difference
293  ATH_MSG_DEBUG("Unacceptable Z difference");
294  errorcode = 4;
295  }
296 
297  double A = std::min(SS1[0],SS2[0]); // minimum track arc length, solution 1
298  double B = std::min(SS1[1],SS2[1]); // minimum track arc length, solution 2
299  if (std::max(A,B) < minArcLength || std::max(A,B) > maxArcLength) { // limit the minimum arc length
300  ATH_MSG_DEBUG("Unacceptable arc length");
301  errorcode = 5;
302  if(m_returnOnError) return intPoint;
303  }
304 
305  int J = 0;
306  if ( nsol == 2 && (fabs(DZSVI[1]) < fabs(DZSVI[0])) ) J = 1;
307 
308  X = XSVI[J];
309  Y = YSVI[J];
310  Z = ZSVI[J];
311  intPoint(0)=X; intPoint(1)=Y; intPoint(2)=Z;
312 
313  if(deltaR>maxDr || deltaR<minDr){
314  ATH_MSG_DEBUG("Unaceptable circle distance");
315  errorcode = 6;
316  if(m_returnOnError) return intPoint;
317  }
318 
319  if(hl>maxHl){
320  ATH_MSG_DEBUG("Unacceptable h/D ratio");
321  errorcode = 7;
322  if(m_returnOnError) return intPoint;
323  }
324 
325  deltaPhi = PHI; // quick fix: cannot get rid of (double) PHI as it is passed by ref and deltaPhi is a float
326  if(deltaPhi>maxPhi){
327  ATH_MSG_DEBUG("Unacceptable difference in phi");
328  errorcode = 8;
329  if(m_returnOnError) return intPoint;
330  }
331 
332  return intPoint;
333  }
334 
335  // ----------------------------------------------------------------
336  double VertexPointEstimator::areaVar(double xc1, double yc1, double r1, double xc2, double yc2, double r2, double& phi)
337  {
338  double ret = -999999;
339  double xi1, yi1, xi2, yi2;
340  if (circleIntersection( xc1, yc1, r1, xc2, yc2, r2, xi1, yi1, xi2, yi2 ))
341  {
342  double h = 0.5*(sqrt( pow(xi1-xi2,2) + pow(yi1-yi2,2) ));
343  double l = sqrt( pow(xc1-xc2,2) + pow(yc1-yc2,2) );
344  if (l!=0) ret = h/l;
345 
346  double norm1 = sqrt((xi1-xc1)*(xi1-xc1)+(yi1-yc1)*(yi1-yc1));
347  double norm2 = sqrt((xi1-xc2)*(xi1-xc2)+(yi1-yc2)*(yi1-yc2));
348  if((norm1!=0.) && (norm2!=0.)){ //rejecting pathology
349  //centers at the origin
350  norm1 = 1./norm1;
351  norm2 = 1./norm2;
352  double xa = (xi1-xc1)*norm1;
353  double ya = (yi1-yc1)*norm1;
354  double xb = (xi1-xc2)*norm2;
355  double yb = (yi1-yc2)*norm2;
356  double costheta = xa*xb + ya*yb;
357  phi = M_PI-std::acos(costheta);
358  }
359  }
360  return ret;
361  }
362 
363  //recreate the logic of TMath::Acos
364  double internal_acos(double x)
365  {
366  if (x < -1.) return M_PI;
367  if (x > 1.) return 0;
368  return std::acos(x);
369  }
370 
371 
372  // ----------------------------------
373  double VertexPointEstimator::areaVar(double xc1, double yc1, double r1, double xc2, double yc2, double r2, double& h, double& hl, double &ddphi)
374  {
375  double ret = -999999;
376  double xi1, yi1, xi2, yi2;
377  h = 0;
378  hl = 0;
379  ddphi = 0.;
380  if (circleIntersection( xc1, yc1, r1, xc2, yc2, r2, xi1, yi1, xi2, yi2 )) {
381 
382  // the two triangles have identical area
383  ret = areaTriangle(xc1,yc1, xc2,yc2, xi1,yi1) ;
384 
385  h = 0.5*(sqrt( pow(xi1-xi2,2) + pow(yi1-yi2,2) ));
386 
387  double l = sqrt( pow(xc1-xc2,2) + pow(yc1-yc2,2) );
388  if (l!=0) hl = h/l;
389 
390  // |AxB| = |A||B|sin(phi) => sinphi = |AxB| / |A||B|
391  // (xi1,yi1) = first intersection point; this is the one I use
392  // (xi2,yi2) = second intersection point; this is symmetric to the first
393  // (xc1,yc1) = centre first circle
394  // (xc2,yc2) = centre second circle
395  double norm1 = sqrt(pow(xi1-xc1,2)+pow(yi1-yc1,2));
396  double norm2 = sqrt(pow(xi1-xc2,2)+pow(yi1-yc2,2));
397  if ((norm1 != 0) && (norm2 != 0)){ // rejecting pathology
398  // centres at the origin
399  double xa = (xi1 - xc1)/norm1;
400  double ya = (yi1 - yc1)/norm1;
401  double xb = (xi1 - xc2)/norm2;
402  double yb = (yi1 - yc2)/norm2;
403  double costheta = xa*xb +ya*yb;
404  double phi = M_PI-internal_acos(costheta);
405  ddphi = phi;
406  }
407  }
408 
409  return ret;
410  }
411 
412  // ----------------------------------
413  bool VertexPointEstimator::circleIntersection(double xc1, double yc1, double r1,
414  double xc2, double yc2, double r2,
415  double& xi1, double& yi1,
416  double& xi2, double& yi2)
417  {
418  // Calculate the intersection of the two circles:
419  //
420  // (x-xc1)^2 + (y-yc1)^2 = R1^2
421  // (x-xc2)^2 + (y-yc2)^2 = R2^2
422 
423  xi1 = -999999999.;
424  xi2 = -999999999.;
425  yi1 = -999999999.;
426  yi2 = -999999999.;
427 
428  if ( yc1 != yc2) {
429  double A = (xc1 - xc2) / (yc2- yc1);
430  double B = (r1*r1 - r2*r2 - xc1*xc1 + xc2*xc2 - yc1*yc1 + yc2*yc2) / 2. / ( yc2 -yc1);
431  double a = 1 + A*A;
432  double b = 2*A*B - 2*xc1 -2*A*yc1;
433  double c = B*B - 2*B*yc1 + xc1*xc1 + yc1*yc1 - r1*r1;
434  if (secondDegree(a,b,c,xi1,xi2) ){
435  yi1 = A*xi1 + B;
436  yi2 = A*xi2 + B;
437  return true;
438  }
439  return false;
440  }
441  if (xc1 != xc2){
442  double A = (yc1 - yc2) / (xc2- xc1);
443  double B = (r1*r1 - r2*r2 - xc1*xc1 + xc2*xc2 - yc1*yc1 + yc2*yc2) / 2. / ( xc2 -xc1);
444  double a = 1 + A*A;
445  double b = 2*A*B - 2*yc1 -2*A*xc1;
446  double c = B*B - 2*B*xc1 + xc1*xc1 + yc1*yc1 - r1*r1;
447  if (secondDegree(a,b,c,yi1,yi2) ){
448  xi1 = A*yi1 + B;
449  xi2 = A*yi2 + B;
450  return true;
451  }
452  return false;
453  }
454 
455  // circles are concentric and we don't care
456  return false;
457 
458  return false;
459  }
460 
461  // ----------------------------------
462  bool VertexPointEstimator::secondDegree(double a, double b, double c, double& y1, double& y2)
463  {
464  y1 = -999999999;
465  y2 = -999999999;
466  double discr = b*b - 4*a*c;
467  if (discr < 0) return false;
468  y1 = (-b+sqrt(discr))/2./a;
469  y2 = (-b-sqrt(discr))/2./a;
470  return true;
471 
472  }
473 
474  // ----------------------------------
475  double VertexPointEstimator::areaTriangle(double a, double b, // double c,
476  double d, double e, // double f,
477  double g, double h) { // double i)
478  double c = 1;
479  double f = 1;
480  double i = 1;
481  return fabs(0.5* ( (a*e*i + d*h*c + b*f*g) - (g*e*c + d*b*i + a*f*h) ) );
482  }
483 
484 }
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
InDet::VertexPointEstimator::m_maxDZ
DoubleArrayProperty m_maxDZ
Definition: VertexPointEstimator.h:83
VertexPointEstimator.h
InDet::VertexPointEstimator::areaTriangle
static double areaTriangle(double, double, double, double, double, double)
Definition: VertexPointEstimator.cxx:475
InDet::VertexPointEstimator::s_bmagnt
static const double s_bmagnt
Definition: VertexPointEstimator.h:78
hist_file_dump.d
d
Definition: hist_file_dump.py:137
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
xAOD::deltaPhi
setSAddress setEtaMS setDirPhiMS setDirZMS setBarrelRadius setEndcapAlpha setEndcapRadius setInterceptInner setEtaMap setEtaBin setIsTgcFailure setDeltaPt deltaPhi
Definition: L2StandAloneMuon_v1.cxx:160
InDet
Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::VertexPointEstimator::finalize
virtual StatusCode finalize() override
Definition: VertexPointEstimator.cxx:42
InDet::VertexPointEstimator::interfaceID
static const InterfaceID & interfaceID()
Definition: VertexPointEstimator.cxx:32
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
M_PI
#define M_PI
Definition: ActiveFraction.h:11
InDet::VertexPointEstimator::m_minDr
DoubleArrayProperty m_minDr
Definition: VertexPointEstimator.h:95
Trk::z0
@ z0
Definition: ParamDefs.h:64
DataModelTestDataCommonDict::xa
std::vector< DMTest::B > xa
Definition: DataModelTestDataCommonDict.h:54
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
InDet::VertexPointEstimator::m_maxR
DoubleArrayProperty m_maxR
Definition: VertexPointEstimator.h:86
InDet::VertexPointEstimator::m_maxHl
DoubleArrayProperty m_maxHl
Definition: VertexPointEstimator.h:101
RoiUtil::PHI
@ PHI
Definition: RoiSerialise.cxx:31
x
#define x
makeTRTBarrelCans.y1
tuple y1
Definition: makeTRTBarrelCans.py:15
Monitored::X
@ X
Definition: HistogramFillerUtils.h:24
InDet::VertexPointEstimator::Values_t
std::map< std::string, float > Values_t
Definition: VertexPointEstimator.h:33
pi
constexpr double pi
Definition: VertexPointEstimator.cxx:15
A
InDet::VertexPointEstimator::intersectionImpl
Amg::Vector3D intersectionImpl(const Trk::Perigee *per1, const Trk::Perigee *per2, unsigned int flag, int &errorcode, float &deltaPhi, float &deltaR) const
internal implementation
Definition: VertexPointEstimator.cxx:83
lumiFormat.i
int i
Definition: lumiFormat.py:85
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
Trk::theta
@ theta
Definition: ParamDefs.h:66
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AmgVector
AmgVector(4) T2BSTrackFilterTool
Definition: T2BSTrackFilterTool.cxx:114
makeTRTBarrelCans.y2
tuple y2
Definition: makeTRTBarrelCans.py:18
master.flag
bool flag
Definition: master.py:29
InDet::VertexPointEstimator::m_maxDr
DoubleArrayProperty m_maxDr
Definition: VertexPointEstimator.h:98
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
InDet::VertexPointEstimator::m_maxDR
DoubleArrayProperty m_maxDR
Definition: VertexPointEstimator.h:80
test_pyathena.parent
parent
Definition: test_pyathena.py:15
hist_file_dump.f
f
Definition: hist_file_dump.py:135
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
InDet::VertexPointEstimator::decorKeys
static std::vector< std::string > decorKeys()
Return list of keys used for decorations.
Definition: VertexPointEstimator.cxx:74
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
Monitored::Y
@ Y
Definition: HistogramFillerUtils.h:24
InDet::VertexPointEstimator::getCirclesIntersectionPoint
Amg::Vector3D getCirclesIntersectionPoint(const Trk::Perigee *per1, const Trk::Perigee *per2, unsigned int flag, int &errorcode) const
Get intersection point of two track helices.
Definition: VertexPointEstimator.cxx:49
twopi
constexpr double twopi
Definition: VertexPointEstimator.cxx:16
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
Trk::d0
@ d0
Definition: ParamDefs.h:63
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
InDet::VertexPointEstimator::m_returnOnError
BooleanProperty m_returnOnError
Definition: VertexPointEstimator.h:105
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
DataModelTestDataCommonDict::xb
DMTest::CView::Pers_t xb
Definition: DataModelTestDataCommonDict.h:55
a
TList * a
Definition: liststreamerinfos.cxx:10
h
InDet::internal_acos
double internal_acos(double x)
Definition: VertexPointEstimator.cxx:364
InDet::VertexPointEstimator::initialize
virtual StatusCode initialize() override
Definition: VertexPointEstimator.cxx:37
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
InDet::VertexPointEstimator::secondDegree
static bool secondDegree(double, double, double, double &, double &)
Definition: VertexPointEstimator.cxx:462
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:67
InDet::VertexPointEstimator::m_minArcLength
DoubleArrayProperty m_minArcLength
Definition: VertexPointEstimator.h:89
InDet::VertexPointEstimator::m_maxArcLength
DoubleArrayProperty m_maxArcLength
Definition: VertexPointEstimator.h:92
TRT::Track::cotTheta
@ cotTheta
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:65
InDet::VertexPointEstimator::VertexPointEstimator
VertexPointEstimator(const std::string &type, const std::string &name, const IInterface *parent)
Definition: VertexPointEstimator.cxx:25
Trk::phi
@ phi
Definition: ParamDefs.h:75
I
#define I(x, y, z)
Definition: MD5.cxx:116
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
AthAlgTool
Definition: AthAlgTool.h:26
pow
constexpr int pow(int base, int exp) noexcept
Definition: ap_fixedTest.cxx:15
InDet::VertexPointEstimator::circleIntersection
static bool circleIntersection(double, double, double, double, double, double, double &, double &, double &, double &)
Definition: VertexPointEstimator.cxx:413
makeComparison.deltaR
float deltaR
Definition: makeComparison.py:36
python.compressB64.c
def c
Definition: compressB64.py:93
InDet::VertexPointEstimator::areaVar
static double areaVar(double, double, double, double, double, double, double &)
Definition: VertexPointEstimator.cxx:336
InDet::VertexPointEstimator::m_maxPhi
DoubleArrayProperty m_maxPhi
Definition: VertexPointEstimator.h:103