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  m_returnOnError(true)
28  {
29  declareInterface<VertexPointEstimator>(this);
31  m_maxDR.push_back(10000.) ;
32  m_maxDR.push_back(10000.) ;
33  m_maxDR.push_back(10000.) ;
34 
35  m_maxDZ.push_back(10000.) ;
36  m_maxDZ.push_back(10000.) ;
37  m_maxDZ.push_back(10000.) ;
38 
39  m_maxR.push_back(10000.) ;
40  m_maxR.push_back(10000.) ;
41  m_maxR.push_back(10000.) ;
42 
43  m_minArcLength.push_back(-10000.);
44  m_minArcLength.push_back(-10000.);
45  m_minArcLength.push_back(-10000.);
46  m_maxArcLength.push_back(10000.) ;
47  m_maxArcLength.push_back(10000.) ;
48  m_maxArcLength.push_back(10000.) ;
49 
50  m_minDr.push_back(-5.) ;
51  m_minDr.push_back(-25.) ;
52  m_minDr.push_back(-50.) ;
53 
54  m_maxDr.push_back(5.) ;
55  m_maxDr.push_back(10.) ;
56  m_maxDr.push_back(10.) ;
57 
58  m_maxHl.push_back(10000.) ;
59  m_maxHl.push_back(10000.) ;
60  m_maxHl.push_back(10000.) ;
61 
62  m_maxPhi.push_back(0.05) ;
63  m_maxPhi.push_back(0.1) ;
64  m_maxPhi.push_back(0.1) ;
65 
66  //some properties
67  declareProperty("MaxTrkXYDiffAtVtx", m_maxDR);
68  declareProperty("MaxTrkZDiffAtVtx", m_maxDZ);
69  declareProperty("MaxTrkXYValue", m_maxR);
70  declareProperty("MinArcLength", m_minArcLength);
71  declareProperty("MaxArcLength", m_maxArcLength);
72  declareProperty("MinDeltaR", m_minDr);
73  declareProperty("MaxDeltaR", m_maxDr);
74  declareProperty("MaxHl", m_maxHl);
75  declareProperty("MaxPhi", m_maxPhi);
76  declareProperty("ReturnOnError", m_returnOnError);
77  }
78 
79  // ----------------------------------
81 
82  // ----------------------------------
83  const InterfaceID& VertexPointEstimator::interfaceID() {
84  return IID_IVertexPointEstimator;
85  }
86 
87  // ----------------------------------
89  return StatusCode::SUCCESS;
90  }
91 
92  // ----------------------------------
94  return StatusCode::SUCCESS;
95  }
96 
97  // ----------------------------------
101  const Trk::Perigee *per2,
102  unsigned int flag,
103  int& errorcode) const
104  {
105  float deltaPhi;
106  float deltaR;
107  return intersectionImpl (per1, per2, flag, errorcode, deltaPhi, deltaR);
108  }
109 
110 
113  const Trk::Perigee *per2,
114  unsigned int flag,
115  int& errorcode,
116  Values_t& decors) const
117  {
118  decors.clear();
119  return intersectionImpl (per1, per2, flag, errorcode,
120  decors["deltaPhiTracks"],
121  decors["DR1R2"]);
122  }
123 
124 
125  std::vector<std::string> VertexPointEstimator::decorKeys()
126  {
127  return {"deltaPhiTracks", "DR1R2"};
128  }
129 
130 
131  // ----------------------------------
135  const Trk::Perigee *per2,
136  unsigned int flag,
137  int& errorcode,
138  float& deltaPhi,
139  float& deltaR) const
140  {
141  /*
142  Calculates the initial approximation to the vertex position. Based on CTVMFT.
143  Tries to intersect circles that are (R,Phi) projections of the helical trajectories of the two tracks
144  If the circles intersect, the intersection with smaller z difference between the 2 helices extrapolated to the intersection is chosen.
145  If the circles do not intersect, the vertex approximation is taken as the point of closest approach of the two circles.
146  per1 should be that of the track with the smaller radius
147  */
148  Amg::Vector3D intPoint(0.,0.,0.);
149  double aconst = -1.49898*s_bmagnt; //is it correct???????????????????
150  double DRMAX = 0.; // maximum XY separation, non-intersecting circles
151  double DZMAX = 0.; // maximum allowed track Z separation at the vertex
152  double RVMAX = 0.; // maximum allowed vertex radius
153  double minArcLength(0.);
154  double maxArcLength(0.);
155  double minDr(0.);
156  double maxDr(0.);
157  double maxHl(0.);
158  double maxPhi(0.);
159  if (flag <= 2) {
160  DRMAX = m_maxDR[flag]; //maximum XY separation, non-intersecting circles
161  DZMAX = m_maxDZ[flag]; //maximum allowed track Z separation at the vertex
162  RVMAX = m_maxR[flag] ; //maximum allowed vertex radius
163  minArcLength = m_minArcLength[flag];
164  maxArcLength = m_maxArcLength[flag];
165  minDr = m_minDr[flag];
166  maxDr = m_maxDr[flag];
167  maxHl = m_maxHl[flag];
168  maxPhi= m_maxPhi[flag];
169  }
170 
171  double d0[2],z0[2],phi[2],cotTheta[2],qOverPt[2],RC[2],XC[2],YC[2],RA[2],AB[2];
172  double XSVI[2],YSVI[2],ZSVI[2],RVI[2],DZSVI[2],SS1[2],SS2[2],ZZ1[2],ZZ2[2];
173 
174  double X=0.,Y=0.,Z=0.;
175  for (int I=0; I<2; ++I) {
176  d0[I] = -999.;
177  z0[I] = -999.;
178  phi[I] = -999.;
179  cotTheta[I] = -999.;
180  qOverPt[I] = -999.;
181  RC[I] = -999.;
182  XC[I] = -999.;
183  YC[I] = -999.;
184  RA[I] = +999.;
185  AB[I] = +999.;
186  XSVI[I] = 0.;
187  YSVI[I] = 0.;
188  ZSVI[I] = 0.;
189  RVI[I] = 2.0*RVMAX;
190  DZSVI[I] = 2.0*DZMAX;
191  SS1[I] = 0.;
192  SS2[I] = 0.;
193  ZZ1[I] = 0.;
194  ZZ2[I] = 0.;
195  }
196 
197  double U(0.);
198  const AmgVector(5)& perParam1 = per1->parameters();
199  double pt1 = fabs(sin(perParam1[Trk::theta])/perParam1[Trk::qOverP]);
200  const AmgVector(5)& perParam2 = per2->parameters();
201  double pt2 = fabs(sin(perParam2[Trk::theta])/perParam2[Trk::qOverP]);
202  if (pt1 < pt2) {
203  d0[0] = perParam1[Trk::d0]; d0[1] = perParam2[Trk::d0];
204  z0[0] = perParam1[Trk::z0]; z0[1] = perParam2[Trk::z0];
205  phi[0] = perParam1[Trk::phi]; phi[1] = perParam2[Trk::phi];
206  double theta1 = perParam1[Trk::theta]; cotTheta[0] = 1./tan(theta1);
207  double theta2 = perParam2[Trk::theta]; cotTheta[1] = 1./tan(theta2);
208  double qOverP1 = perParam1[Trk::qOverP]; qOverPt[0] = qOverP1/sin(perParam1[Trk::theta]);
209  double qOverP2 = perParam2[Trk::qOverP]; qOverPt[1] = qOverP2/sin(perParam2[Trk::theta]);
210  RC[0] = 10.*0.5/(qOverPt[0]*aconst); RC[1] = 10.*0.5/(qOverPt[1]*aconst);//Radius of curvature
211  U = RC[0] + d0[0];
212  XC[0] = -1*U*sin(phi[0]); //Circle center x-coordinate
213  YC[0] = U*cos(phi[0]); //Circle center y-coordinate
214  RA[0] = fabs(RC[0]);
215  U = RC[1] + d0[1];
216  XC[1] = -1*U*sin(phi[1]); // Circle center x-coordinate
217  YC[1] = U*cos(phi[1]); // Circle center y-coordinate
218  RA[1] = fabs(RC[1]);
219  } else {
220  d0[0] = perParam2[Trk::d0]; d0[1] = perParam1[Trk::d0];
221  z0[0] = perParam2[Trk::z0]; z0[1] = perParam1[Trk::z0];
222  phi[0] = perParam2[Trk::phi]; phi[1] = perParam1[Trk::phi];
223  double theta2 = perParam2[Trk::theta]; cotTheta[0] = 1./tan(theta2);
224  double theta1 = perParam1[Trk::theta]; cotTheta[1] = 1./tan(theta1);
225  double qOverP2 = perParam2[Trk::qOverP]; qOverPt[0] = qOverP2/sin(perParam2[Trk::theta]);
226  double qOverP1 = perParam1[Trk::qOverP]; qOverPt[1] = qOverP1/sin(perParam1[Trk::theta]);
227  RC[0] = 10.*0.5/(qOverPt[0]*aconst); RC[1] = 10.*0.5/(qOverPt[1]*aconst);//Radius of curvature
228  double U = RC[0] + d0[0];
229  XC[0] = -1*U*sin(phi[0]); //Circle center x-coordinate
230  YC[0] = U*cos(phi[0]); //Circle center y-coordinate
231  RA[0] = fabs(RC[0]);
232  U = RC[1] + d0[1];
233  XC[1] = -1*U*sin(phi[1]); // Circle center x-coordinate
234  YC[1] = U*cos(phi[1]); // Circle center y-coordinate
235  RA[1] = fabs(RC[1]);
236  }
237 
238  // get the circle centre separation
239  double DX = XC[1] - XC[0];
240  double DY = YC[1] - YC[0];
241  double D = DX*DX + DY*DY;
242  D = sqrt(D);
243  if (D == 0.) {
244  ATH_MSG_DEBUG("Concentric circles, should not happen return (0,0,0)");
245  errorcode = 1;
246  if(m_returnOnError) return intPoint;
247  }
248  U = D - RA[0] - RA[1]; // signed separation, if > 0., the circles do not intersect, if < 0., they might
249  // rotate, translate to a system, where the two circle centres lie on the X axis
250 
251  //New cut from Mauro
252  deltaR = U; double PHI = -99999.;
253  double hl = areaVar(XC[0], YC[0], RA[0], XC[1], YC[1], RA[1], PHI);
254 
255  double COST = DX/D;
256  double SINT = DY/D;
257  double Y0 = (-1*XC[0]*YC[1] + XC[1]*YC[0])/D; //Translation along the y-axis
258  for (int I=0; I<2; ++I) {
259  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.
260  }
261  U = (XC[1] + XC[0])*(XC[1] - XC[0]) + (YC[1] + YC[0])*(YC[1] - YC[0]);
262  double V = (RA[1] + RA[0])*(RA[1] - RA[0]);
263  double XX = 0.5*(U - V)/D; // X of intersection in rotated coordinate system (a+AB[0]). Again the y is 0.
264  if ((XX - AB[0])*(XX - AB[0]) > 0.) {
265  U = sqrt((XX - AB[0])*(XX - AB[0])); //This is the a in my logbook
266  }
267  double YY2 = (RA[0] + U)*(RA[0] - U); //This is the h^2 in my logbook
268  double YY;
269  int nsol = 0;
270  if (YY2 > 0.) {
271 
272  // the circles intersect
273  YY = sqrt(YY2); // two intersection points (+/- Y) or (+/- h) in my logbook
274 
275  for (int I=0; I<2; ++I) {
276  U = YY + Y0; // invert the translation
277  XSVI[I] = COST*XX - SINT*U; // Invert the rotation
278  YSVI[I] = SINT*XX + COST*U;
279  YY = -1*YY;
280  }
281 
282  nsol = 2;
283 
284  } else {
285  // circles do not intersect - find how close they approach each other
286  // in the XY plane and take the point half way between them
287  U = D - RA[0] - RA[1];
288  if (U > 0.) {
289  //Circles do not overlap at all and are outside from each other.See logbook
290  V = U;
291  XX = AB[1] + RA[1];
292 
293  if (AB[0] < AB[1]) XX = AB[0] + RA[0];
294  } else {
295  //Circles inside each other but off-centered.See logbook
296  if (AB[0] < AB[1]) { //To the left
297  XX = AB[1] - RA[1];
298  V = AB[0] - RA[0] - XX;
299  } else {
300  //To the right
301  XX = AB[0] + RA[0];
302  V = AB[1] + RA[1] - XX;
303  }
304  }
305  XX = XX + 0.5*V;
306  XSVI[0] = COST*XX - SINT*Y0; // rotate back to the original system
307  YSVI[0] = SINT*XX + COST*Y0; // one solution
308  nsol = 1;
309  if (V > DRMAX) {
310  //Cut if distance of minimum approach is too big
311  ATH_MSG_DEBUG("XY distance of minimum approach is too large, return (0,0,0)");
312  errorcode = 2;
313  if(m_returnOnError) return intPoint;
314  }
315  }
316 
317  for (int J=0; J<nsol; ++J) { // loop over solutions
318  U = (XSVI[J] - XC[0])/RC[0];
319  V = -1*(YSVI[J] - YC[0])/RC[0];
320  U = atan2(U,V) - phi[0]; // turning angle from the track origin
321  if (U < -1*pi) U = U + twopi;
322  if (U > pi) U = U - twopi;
323  SS1[J] = RC[0]*U; // arc length
324  ZZ1[J] = z0[0] + SS1[J]*cotTheta[0];
325  U = (XSVI[J] - XC[1])/RC[1];
326  V = -1*(YSVI[J] - YC[1])/RC[1];
327  U = atan2(U,V) - phi[1];
328  if (U < -1*pi) U = U + twopi;
329  if (U > pi) U = U - twopi;
330  SS2[J] = RC[1]*U;
331  ZZ2[J] = z0[1] + SS1[J]*cotTheta[1];
332  RVI[J] = sqrt(XSVI[J]*XSVI[J] + YSVI[J]*YSVI[J]);
333  DZSVI[J] = ZZ2[J] - ZZ1[J];
334  }
335  ZSVI[0] = 0.5*(ZZ1[0] + ZZ2[0]);
336  ZSVI[1] = 0.5*(ZZ1[1] + ZZ2[1]);
337 
338  if (std::min(RVI[0],RVI[1]) > RVMAX) { // check the vertex radius is acceptable
339  ATH_MSG_DEBUG("Unacceptable vertex radius");
340  errorcode = 3;
341  }
342 
343  if (std::min(fabs(DZSVI[0]),fabs(DZSVI[1])) > DZMAX) { // check the Z difference
344  ATH_MSG_DEBUG("Unacceptable Z difference");
345  errorcode = 4;
346  }
347 
348  double A = std::min(SS1[0],SS2[0]); // minimum track arc length, solution 1
349  double B = std::min(SS1[1],SS2[1]); // minimum track arc length, solution 2
350  if (std::max(A,B) < minArcLength || std::max(A,B) > maxArcLength) { // limit the minimum arc length
351  ATH_MSG_DEBUG("Unacceptable arc length");
352  errorcode = 5;
353  if(m_returnOnError) return intPoint;
354  }
355 
356  int J = 0;
357  if ( nsol == 2 && (fabs(DZSVI[1]) < fabs(DZSVI[0])) ) J = 1;
358 
359  X = XSVI[J];
360  Y = YSVI[J];
361  Z = ZSVI[J];
362  intPoint(0)=X; intPoint(1)=Y; intPoint(2)=Z;
363 
364  if(deltaR>maxDr || deltaR<minDr){
365  ATH_MSG_DEBUG("Unaceptable circle distance");
366  errorcode = 6;
367  if(m_returnOnError) return intPoint;
368  }
369 
370  if(hl>maxHl){
371  ATH_MSG_DEBUG("Unacceptable h/D ratio");
372  errorcode = 7;
373  if(m_returnOnError) return intPoint;
374  }
375 
376  deltaPhi = PHI; // quick fix: cannot get rid of (double) PHI as it is passed by ref and deltaPhi is a float
377  if(deltaPhi>maxPhi){
378  ATH_MSG_DEBUG("Unacceptable difference in phi");
379  errorcode = 8;
380  if(m_returnOnError) return intPoint;
381  }
382 
383  return intPoint;
384  }
385 
386  // ----------------------------------------------------------------
387  double VertexPointEstimator::areaVar(double xc1, double yc1, double r1, double xc2, double yc2, double r2, double& phi)
388  {
389  double ret = -999999;
390  double xi1, yi1, xi2, yi2;
391  if (circleIntersection( xc1, yc1, r1, xc2, yc2, r2, xi1, yi1, xi2, yi2 ))
392  {
393  double h = 0.5*(sqrt( pow(xi1-xi2,2) + pow(yi1-yi2,2) ));
394  double l = sqrt( pow(xc1-xc2,2) + pow(yc1-yc2,2) );
395  if (l!=0) ret = h/l;
396 
397  double norm1 = sqrt((xi1-xc1)*(xi1-xc1)+(yi1-yc1)*(yi1-yc1));
398  double norm2 = sqrt((xi1-xc2)*(xi1-xc2)+(yi1-yc2)*(yi1-yc2));
399  if((norm1!=0.) && (norm2!=0.)){ //rejecting pathology
400  //centers at the origin
401  norm1 = 1./norm1;
402  norm2 = 1./norm2;
403  double xa = (xi1-xc1)*norm1;
404  double ya = (yi1-yc1)*norm1;
405  double xb = (xi1-xc2)*norm2;
406  double yb = (yi1-yc2)*norm2;
407  double costheta = xa*xb + ya*yb;
408  phi = M_PI-std::acos(costheta);
409  }
410  }
411  return ret;
412  }
413 
414  //recreate the logic of TMath::Acos
415  double internal_acos(double x)
416  {
417  if (x < -1.) return M_PI;
418  if (x > 1.) return 0;
419  return std::acos(x);
420  }
421 
422 
423  // ----------------------------------
424  double VertexPointEstimator::areaVar(double xc1, double yc1, double r1, double xc2, double yc2, double r2, double& h, double& hl, double &ddphi)
425  {
426  double ret = -999999;
427  double xi1, yi1, xi2, yi2;
428  h = 0;
429  hl = 0;
430  ddphi = 0.;
431  if (circleIntersection( xc1, yc1, r1, xc2, yc2, r2, xi1, yi1, xi2, yi2 )) {
432 
433  // the two triangles have identical area
434  ret = areaTriangle(xc1,yc1, xc2,yc2, xi1,yi1) ;
435 
436  h = 0.5*(sqrt( pow(xi1-xi2,2) + pow(yi1-yi2,2) ));
437 
438  double l = sqrt( pow(xc1-xc2,2) + pow(yc1-yc2,2) );
439  if (l!=0) hl = h/l;
440 
441  // |AxB| = |A||B|sin(phi) => sinphi = |AxB| / |A||B|
442  // (xi1,yi1) = first intersection point; this is the one I use
443  // (xi2,yi2) = second intersection point; this is symmetric to the first
444  // (xc1,yc1) = centre first circle
445  // (xc2,yc2) = centre second circle
446  double norm1 = sqrt(pow(xi1-xc1,2)+pow(yi1-yc1,2));
447  double norm2 = sqrt(pow(xi1-xc2,2)+pow(yi1-yc2,2));
448  if ((norm1 != 0) && (norm2 != 0)){ // rejecting pathology
449  // centres at the origin
450  double xa = (xi1 - xc1)/norm1;
451  double ya = (yi1 - yc1)/norm1;
452  double xb = (xi1 - xc2)/norm2;
453  double yb = (yi1 - yc2)/norm2;
454  double costheta = xa*xb +ya*yb;
455  double phi = M_PI-internal_acos(costheta);
456  ddphi = phi;
457  }
458  }
459 
460  return ret;
461  }
462 
463  // ----------------------------------
464  bool VertexPointEstimator::circleIntersection(double xc1, double yc1, double r1,
465  double xc2, double yc2, double r2,
466  double& xi1, double& yi1,
467  double& xi2, double& yi2)
468  {
469  // Calculate the intersection of the two circles:
470  //
471  // (x-xc1)^2 + (y-yc1)^2 = R1^2
472  // (x-xc2)^2 + (y-yc2)^2 = R2^2
473 
474  xi1 = -999999999.;
475  xi2 = -999999999.;
476  yi1 = -999999999.;
477  yi2 = -999999999.;
478 
479  if ( yc1 != yc2) {
480  double A = (xc1 - xc2) / (yc2- yc1);
481  double B = (r1*r1 - r2*r2 - xc1*xc1 + xc2*xc2 - yc1*yc1 + yc2*yc2) / 2. / ( yc2 -yc1);
482  double a = 1 + A*A;
483  double b = 2*A*B - 2*xc1 -2*A*yc1;
484  double c = B*B - 2*B*yc1 + xc1*xc1 + yc1*yc1 - r1*r1;
485  if (secondDegree(a,b,c,xi1,xi2) ){
486  yi1 = A*xi1 + B;
487  yi2 = A*xi2 + B;
488  return true;
489  }
490  return false;
491  }
492  if (xc1 != xc2){
493  double A = (yc1 - yc2) / (xc2- xc1);
494  double B = (r1*r1 - r2*r2 - xc1*xc1 + xc2*xc2 - yc1*yc1 + yc2*yc2) / 2. / ( xc2 -xc1);
495  double a = 1 + A*A;
496  double b = 2*A*B - 2*yc1 -2*A*xc1;
497  double c = B*B - 2*B*xc1 + xc1*xc1 + yc1*yc1 - r1*r1;
498  if (secondDegree(a,b,c,yi1,yi2) ){
499  xi1 = A*yi1 + B;
500  xi2 = A*yi2 + B;
501  return true;
502  }
503  return false;
504  }
505 
506  // circles are concentric and we don't care
507  return false;
508 
509  return false;
510  }
511 
512  // ----------------------------------
513  bool VertexPointEstimator::secondDegree(double a, double b, double c, double& y1, double& y2)
514  {
515  y1 = -999999999;
516  y2 = -999999999;
517  double discr = b*b - 4*a*c;
518  if (discr < 0) return false;
519  y1 = (-b+sqrt(discr))/2./a;
520  y2 = (-b-sqrt(discr))/2./a;
521  return true;
522 
523  }
524 
525  // ----------------------------------
526  double VertexPointEstimator::areaTriangle(double a, double b, // double c,
527  double d, double e, // double f,
528  double g, double h) { // double i)
529  double c = 1;
530  double f = 1;
531  double i = 1;
532  return fabs(0.5* ( (a*e*i + d*h*c + b*f*g) - (g*e*c + d*b*i + a*f*h) ) );
533  }
534 
535 }
InDet::VertexPointEstimator::m_returnOnError
bool m_returnOnError
maximum DPhi at the estimated vertex position
Definition: VertexPointEstimator.h:88
python.CaloRecoConfig.f
f
Definition: CaloRecoConfig.py:127
max
#define max(a, b)
Definition: cfImp.cxx:41
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
VertexPointEstimator.h
InDet::VertexPointEstimator::areaTriangle
static double areaTriangle(double, double, double, double, double, double)
Definition: VertexPointEstimator.cxx:526
InDet::VertexPointEstimator::s_bmagnt
static const double s_bmagnt
Definition: VertexPointEstimator.h:78
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
hist_file_dump.d
d
Definition: hist_file_dump.py:137
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
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
InDet::VertexPointEstimator::finalize
virtual StatusCode finalize() override
Definition: VertexPointEstimator.cxx:93
InDet::VertexPointEstimator::interfaceID
static const InterfaceID & interfaceID()
Definition: VertexPointEstimator.cxx:83
InDet::VertexPointEstimator::~VertexPointEstimator
virtual ~VertexPointEstimator()
InDet::VertexPointEstimator::m_maxPhi
std::vector< double > m_maxPhi
maximum ratio H/l
Definition: VertexPointEstimator.h:87
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
M_PI
#define M_PI
Definition: ActiveFraction.h:11
Trk::z0
@ z0
Definition: ParamDefs.h:70
DataModelTestDataCommonDict::xa
std::vector< DMTest::B > xa
Definition: DataModelTestDataCommonDict.h:43
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
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
InDet::VertexPointEstimator::m_maxHl
std::vector< double > m_maxHl
maximum difference between helix centers
Definition: VertexPointEstimator.h:86
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:134
lumiFormat.i
int i
Definition: lumiFormat.py:92
ret
T ret(T t)
Definition: rootspy.cxx:260
python.CaloCondTools.g
g
Definition: CaloCondTools.py:15
Trk::theta
@ theta
Definition: ParamDefs.h:72
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
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
test_pyathena.parent
parent
Definition: test_pyathena.py:15
InDet::VertexPointEstimator::m_minArcLength
std::vector< double > m_minArcLength
maximum allowed vertex radius
Definition: VertexPointEstimator.h:82
InDet::VertexPointEstimator::m_maxDZ
std::vector< double > m_maxDZ
maximum XY separation, non-intersecting circles
Definition: VertexPointEstimator.h:80
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:125
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
min
#define min(a, b)
Definition: cfImp.cxx:40
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:100
twopi
constexpr double twopi
Definition: VertexPointEstimator.cxx:16
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
Trk::d0
@ d0
Definition: ParamDefs.h:69
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
InDet::VertexPointEstimator::m_maxDR
std::vector< double > m_maxDR
Definition: VertexPointEstimator.h:79
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
DataModelTestDataCommonDict::xb
DMTest::CView::Pers_t xb
Definition: DataModelTestDataCommonDict.h:44
InDet::VertexPointEstimator::m_maxArcLength
std::vector< double > m_maxArcLength
minimum permitted arc length, track to vertex, depends on the posion of the first measurement
Definition: VertexPointEstimator.h:83
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
a
TList * a
Definition: liststreamerinfos.cxx:10
h
InDet::internal_acos
double internal_acos(double x)
Definition: VertexPointEstimator.cxx:415
InDet::VertexPointEstimator::initialize
virtual StatusCode initialize() override
Definition: VertexPointEstimator.cxx:88
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
InDet::VertexPointEstimator::m_maxDr
std::vector< double > m_maxDr
minimum difference between helix centers
Definition: VertexPointEstimator.h:85
InDet::VertexPointEstimator::secondDegree
static bool secondDegree(double, double, double, double &, double &)
Definition: VertexPointEstimator.cxx:513
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:73
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
InDet::VertexPointEstimator::m_maxR
std::vector< double > m_maxR
maximum allowed track Z separation at the vertex
Definition: VertexPointEstimator.h:81
Trk::phi
@ phi
Definition: ParamDefs.h:81
I
#define I(x, y, z)
Definition: MD5.cxx:116
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
AthAlgTool
Definition: AthAlgTool.h:26
InDet::VertexPointEstimator::circleIntersection
static bool circleIntersection(double, double, double, double, double, double, double &, double &, double &, double &)
Definition: VertexPointEstimator.cxx:464
InDet::VertexPointEstimator::m_minDr
std::vector< double > m_minDr
maximum permitted arc length, track to vertex, depends on the posion of the first measurement
Definition: VertexPointEstimator.h:84
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:387