ATLAS Offline Software
TBPlaneTrackingAlgo.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #include "TBPlaneTrackingAlgo.h"
7 #include "TBEvent/TBBPCCont.h"
8 #include "TBEvent/TBHitPlane.h"
9 #include "TBEvent/TBTrack.h"
10 #include "TBEvent/TBEventInfo.h"
11 
13 
14 #include <vector>
15 #include <iostream>
16 #include <fstream>
17 #include <cmath>
18 
19 class ISvcLocator;
20 
21 TBPlaneTrackingAlgo::TBPlaneTrackingAlgo(const std::string& name, ISvcLocator* pSvcLocator)
22  : AthAlgorithm(name, pSvcLocator),
23  m_runnumber(0)
24 {
25  declareProperty("TestAlgo",m_testAlgo=false);
26  declareProperty("CalibFileName", m_calib_filename="H6HitCalib.txt");
27  declareProperty("BPCnames", m_bpc_names);
28  declareProperty("BPCposX", m_bpc_posX);
29  declareProperty("BPCposY", m_bpc_posY);
30  declareProperty("BPCposZX", m_bpc_posZX);
31  declareProperty("BPCposZY", m_bpc_posZY);
32  declareProperty("BPCerrposX", m_bpc_errposX);
33  declareProperty("BPCerrposY", m_bpc_errposY);
34  declareProperty("BPCerrposZX", m_bpc_errposZX);
35  declareProperty("BPCerrposZY", m_bpc_errposZY);
36  declareProperty("BPCerrmeasX", m_bpc_errmeasX);
37  declareProperty("BPCerrmeasY", m_bpc_errmeasY);
38 
39 }
40 
44 {
45  return StatusCode::SUCCESS;
46 }
47 
51 {
52  ATH_MSG_DEBUG ("Executing TBPlaneTracking algorithm");
53  const EventContext& ctx = Gaudi::Hive::currentContext();
54 
55  if(m_testAlgo == true){
56  ATH_MSG_WARNING ("TBPlaneTrackingAlgo: " <<
57  "Using FillRandomHit method to get data");
58  FillRandomHit();
59  }
60 
61  // Check if this is not a physics event and exit OK
62  // retrieve Event Info
63  const TBEventInfo* theEventInfo;
64  StatusCode checkOut = evtStore()->retrieve(theEventInfo,"TBEventInfo");
65  if ( checkOut.isFailure() )
66  {
67  ATH_MSG_ERROR ("cannot retrieve TBEventInfo from StoreGate");
68  return StatusCode::FAILURE;
69  }
70  int evtType = theEventInfo->getEventType();
71  ATH_MSG_DEBUG ("Event Type found " << evtType);
72  if (evtType != 1) return StatusCode::SUCCESS;
73 
74  StatusCode sc1;
75 
76  // Get run number and get new calib constants -----------------------------
77  unsigned int thisrun=ctx.eventID().run_number();
78 
79  if(thisrun != m_runnumber)
80  {
81  m_runnumber= thisrun;
83  }
84  // ------------------------------------------------------------------------
85 
86 
87 
88  sc1 = buildHits();
89 
90 // sc1 = m_StoreGate->retrieve(m_hitPlaneCont_u,"HitPlaneCont_U");
91 // sc2 = m_StoreGate->retrieve(m_hitPlaneCont_v,"HitPlaneCont_V");
92 
93  if(sc1.isFailure()){
94  ATH_MSG_WARNING ("TBPlaneTrackingAlgo: Retrieval of HitPlane failed");
95  setFilterPassed(false);
96  return StatusCode::SUCCESS;
97  } else {
98 
99  int hitPlaneNumU, hitPlaneNumV;
100  hitPlaneNumU = m_hitPlaneCont_u.size();
101  hitPlaneNumV = m_hitPlaneCont_v.size();
102 
103  if( (hitPlaneNumU < 2) || (hitPlaneNumV < 2) ){
104  ATH_MSG_WARNING ("TBPlaneTrackingAlgo: "
105  << "Not enough hits in one or both planes, "
106  << "Cannot make track.");
107 
108  setFilterPassed(false);
109  return StatusCode::SUCCESS;
110  }
111 
112  // Setting the chi2's for the track //
113  double chi2_u = 0;
114  double chi2_v = 0;
115  std::vector<double> residual_u, residual_v;
116  double a1_u = 0;
117  double a2_u = 0;
118  double a1_v = 0;
119  double a2_v = 0;
120  bool check = true;
121 
122  check = fitPlane(&m_hitPlaneCont_u, a1_u, a2_u, chi2_u, residual_u);
123  if(check == false){
124  ATH_MSG_ERROR ("TBPlaneTrackingAlgo: " << "Fit failure.");
125  setFilterPassed(false);
126  return StatusCode::SUCCESS;
127  }
128 
129  check = fitPlane(&m_hitPlaneCont_v, a1_v, a2_v, chi2_v, residual_v);
130  if(check == false){
131  ATH_MSG_ERROR ("TBPlaneTrackingAlgo: " << "Fit failure.");
132  setFilterPassed(false);
133  return StatusCode::SUCCESS;
134  }
135 
136  // Setting the slopes & intercepts for each track //
137  ATH_MSG_DEBUG ("Setting fit parameters of track.");
138 
139  TBTrack *track = new TBTrack(hitPlaneNumU, hitPlaneNumV);
140  track->setUintercept(a1_u);
141  track->setVintercept(a1_v);
142  track->setUslope(a2_u);
143  track->setVslope(a2_v);
144 
145  // Setting the residual for plane u //
146  for(int i = 0; i < hitPlaneNumU; i++){
147  track->setResidualu(i, residual_u[i]);
148  }
149 
150  // Setting the residual for plane v //
151  for(int i = 0; i < hitPlaneNumV; i++){
152  track->setResidualv(i, residual_v[i]);
153  }
154 
155  ATH_MSG_DEBUG ("chi2 in u: " << chi2_u);
156  ATH_MSG_DEBUG ("chi2 in v: " << chi2_v);
157  ATH_MSG_DEBUG ("Setting chi2s of track.");
158 
159  track->setChi2_u(chi2_u);
160  track->setChi2_v(chi2_v);
161 
162  // Record track info. into storeGate //
163  StatusCode sc = evtStore()->record(track,"Track");
164 
165  if ( sc.isFailure( ) ) {
166  ATH_MSG_FATAL ("Cannot record Track");
167  }
168  }
169 
170  setFilterPassed(true);
171  return StatusCode::SUCCESS;
172 }
173 
177 {
178  ATH_MSG_INFO ("Finalizing TBTracking algorithm");
179  return StatusCode::SUCCESS;
180 }
181 
184 double &a1, double &a2,double &chi2, std::vector<double> &residual)
186 {
187  // Get number of hits in plane //
188  int hitPlaneNum = hitPlaneCont->size();
189 
190  ATH_MSG_DEBUG ("The hit plane container size is: " << hitPlaneNum);
191 
192  std::vector<double> vec_u;
193  std::vector<double> vec_w;
194  std::vector<double> err_vec_u;
195  std::vector<double> err_vec_w;
196 
197  for (const TBHitPlane* hp : *hitPlaneCont) {
198  ATH_MSG_DEBUG ("Position in u: " << hp->getPosu());
199  ATH_MSG_DEBUG ("Position in w: " << hp->getPosw());
200  ATH_MSG_DEBUG ("Error in u: " << hp->getErroru());
201  ATH_MSG_DEBUG ("Error in w: " << hp->getErrorw());
202  vec_u.push_back(hp->getPosu());
203  vec_w.push_back(hp->getPosw());
204  err_vec_u.push_back(hp->getErroru());
205  err_vec_w.push_back(hp->getErrorw());
206  }
207 
208  if(vec_u.size() != vec_w.size()){
209  ATH_MSG_ERROR ("TBPlaneTrackingAlgo: Invalid hits");
210  return false;
211  }
212 
213  bool check;
214 // check = fitHits(vec_u, vec_w, err_vec_u, err_vec_w, a1, a2);
215  check = fitHits(vec_u, vec_w, err_vec_u, a1, a2);
216  if(check == false){
217  ATH_MSG_ERROR ("TBPlaneTrackingAlgo: Invalid denumerator");
218  return false;
219  }
220 
221 // chi2 = getChi2(vec_u, vec_w, err_vec_u, err_vec_w, a1, a2);
222  chi2 = getChi2(vec_u, vec_w, err_vec_u, a1, a2);
223 
224  ATH_MSG_DEBUG ("Fit results:"
225  << " intercept = " << a1
226  << " and slope = " << a2);
227 
228  // Must be wrong //
229  for (int i = 0; i < hitPlaneNum; i++) {
230  residual.push_back(getResidual(vec_u[i],vec_w[i],a1, a2));
231  }
232  return true;
233 }
234 
236 bool TBPlaneTrackingAlgo::fitHits(const std::vector<double> & v_u,
237  const std::vector<double> & v_w,
238  const std::vector<double> & v_eu,
239 // const std::vector<double> & v_ew,
240  double &a1, double &a2)
242 {
243  // v_u = vector of u data points
244  // v_w = vector of w data points
245  // v_eu = vector of errors in u data points
246  // v_ew = vector of errors in w data points
247  // a1 and a2 = fit parameters: u = a1 + a2*w
248 
249  // *** note that the fit algorithm used (given in 'Numerical Methods
250  // in C' section 15.2) assumes that the w data points are known exactly
251  // i.e. that v_ew[i]=0 for all i
252 
253  // 'Numerical Methods' notes that the task of fitting a straight
254  // line model with errors in both coordinates is "considerably harder"
255  // (section 15.3) - but clearly it could be done
256 
257  double m_s = 0;
258  double m_su = 0;
259  double m_sww = 0;
260  double m_sw = 0;
261  double m_suw = 0;
262 
263  int numHits = v_u.size();
264  for(int i = 0; i < numHits; i++){
265  m_s += 1 / (v_eu[i]*v_eu[i]);
266  m_su += v_u[i] / (v_eu[i]*v_eu[i]);
267  m_sww += v_w[i]*v_w[i] / (v_eu[i]*v_eu[i]);
268  m_sw += v_w[i] / (v_eu[i]*v_eu[i]);
269  m_suw += v_u[i]*v_w[i] / (v_eu[i]*v_eu[i]);
270  }
271 
272  const double denom = (m_s*m_sww-m_sw*m_sw);
273  if(denom == 0){
274  return false;
275  }
276 
277  const double inv_denom = 1. / denom;
278  a1 = (m_su*m_sww - m_sw*m_suw) * inv_denom;
279  a2 = (m_s*m_suw - m_su*m_sw) * inv_denom;
280  return true;
281 }
283 double TBPlaneTrackingAlgo::getResidual(const double &u, const double &w
284  , const double &a1, const double &a2)
286 {
287  return (u - a1 - a2*w);
288 }
289 
291 double TBPlaneTrackingAlgo::getChi2(const std::vector<double> &v_u,
292  const std::vector<double> &v_w,
293  const std::vector<double> &v_eu,
294 // const std::vector<double> &v_ew,
295  const double &a1, const double &a2)
297 {
298  // *** as in fitHits() above, the chi squared calculation below
299  // (taken from 'Numerical Methods in C' section 15.2)
300  // assumes that the w data points are known exactly i.e. that
301  // v_ew[i]=0 for all i
302 
303  int numX = v_u.size();
304  double chi2 = 0;
305 
306  for(int i = 0; i < numX; i++){
307  chi2 += (v_u[i] - a1 - a2*v_w[i])*(v_u[i] - a1 - a2*v_w[i])/(v_eu[i]*v_eu[i]);
308  }
309  return chi2;
310 }
311 
312 
316 {
317 
318  ATH_MSG_DEBUG ("Starting FillRandom");
319 
320  TBHitPlaneCont * hitPlaneCont_U = new TBHitPlaneCont();
321  TBHitPlaneCont * hitPlaneCont_V = new TBHitPlaneCont();
322 
323  TBHitPlane *hitPaneU1 = new TBHitPlane();
324  hitPaneU1->setPosu(1); hitPaneU1->setPosw(1);
325  hitPlaneCont_U->push_back(hitPaneU1);
326 
327 
328  TBHitPlane *hitPaneU2 = new TBHitPlane();
329  hitPaneU2->setPosu(2); hitPaneU2->setPosw(2);
330  hitPlaneCont_U->push_back(hitPaneU2);
331 
332  StatusCode sc1 = evtStore()->record(hitPlaneCont_U,"HitPlaneCont_U");
333  if ( sc1.isFailure( ) ) {
334  ATH_MSG_FATAL ("Cannot record HitPlaneCont_U");
335  }
336 
337  TBHitPlane *hitPaneV1 = new TBHitPlane();
338  hitPaneV1->setPosu(1); hitPaneV1->setPosw(1);
339  hitPlaneCont_V->push_back(hitPaneV1);
340 
341  TBHitPlane *hitPaneV2 = new TBHitPlane();
342  hitPaneV2->setPosu(2); hitPaneV2->setPosw(2);
343  hitPlaneCont_V->push_back(hitPaneV2);
344 
345  StatusCode sc2 = evtStore()->record(hitPlaneCont_V,"HitPlaneCont_V");
346  if ( sc2.isFailure( ) ) {
347  ATH_MSG_FATAL ("Cannot record HitPlaneCont_V");
348  }
349 
350  ATH_MSG_DEBUG ("FillRandom Done");
351 
352 }
353 
357 {
358  ATH_MSG_DEBUG (" In buildHits() ");
361 
362  TBBPCCont * bpcCont = nullptr;
363  ATH_CHECK( evtStore()->retrieve(bpcCont, "BPCCont") );
364 
365  // Loop over BPC
366  for (const TBBPC* bpc : *bpcCont) {
367  std::string name = bpc->getDetectorName();
368  ATH_MSG_DEBUG (" Hits in BPC "<< name);
369  // Find calibration index for this BPC
370  unsigned int ind=0;
371  while(ind<m_bpc_names.size())
372  {
373  if(name==m_bpc_names[ind]) break;
374  else ind++;
375  }
376  if(ind==m_bpc_names.size()){
377  ATH_MSG_ERROR ("No calibrations for BPC" << name);
378  continue;
379  }
380 
381  ATH_MSG_DEBUG (" BPC number "<< ind);
382 
383 
384  if(!(bpc->isXPosOverflow()||bpc->isXPulseOverflow())){
385  TBHitPlane * hitu = new TBHitPlane();
386  float w = m_bpc_posZX[ind];
387  // float u =m_bpc_posX[ind] + m_bpc_invX[ind]*bpc->getXPos();
388  float u =m_bpc_posX[ind] + bpc->getXPos();
389  ATH_MSG_DEBUG ("BPC" << ind << "X =" << u);
390  hitu->setPosu(u); hitu->setPosw(w);
392  hitu->setErroru(uerr); hitu->setErrorw(m_bpc_errposZX[ind]);
393  hitu->setValidFlag(bpc->isXPosOverflow()&&bpc->isYPosOverflow());
395  }
396 
397  if(!(bpc->isYPosOverflow()||bpc->isYPulseOverflow())){
398  TBHitPlane * hitv = new TBHitPlane();
399  float w = m_bpc_posZY[ind];
400  // float v =m_bpc_posY[ind] + m_bpc_invY[ind]*bpc->getYPos();
401  float v =m_bpc_posY[ind] + bpc->getYPos();
402  ATH_MSG_DEBUG ("BPC" << ind << "Y =" << v);
403  hitv->setPosu(v); hitv->setPosw(w);
405  hitv->setErroru(verr); hitv->setErrorw(m_bpc_errposZY[ind]);
406  hitv->setValidFlag(bpc->isXPosOverflow()&&bpc->isYPosOverflow());
408  }
409  }
410 
411  return StatusCode::SUCCESS;
412 }
413 
414 
416 {
417  // Get calib constant from an ASCII file with the following structure :
418  //
419  // runnumber
420  // bpcnumber1 coeff1 coeff2 ... coeff8
421  // bpcnumber2 coeff1 coeff2 ... coeff8
422  // ...
423  // bpcnumber6 coeff1 coeff2 ... coeff8
424  // runnumber
425  // ...
426  //
427  // coeff must have the following order :
428  // bpcnumber posX posY posZX posZY errposX errposY errposZX errposZY errmeasX errmeasY
429 
430  ATH_MSG_DEBUG ("Get new calibs for run " << m_runnumber);
431 
432  int bpcnumber= m_bpc_names.size();
433 
434  m_bpc_posX.clear(); m_bpc_posX.resize(bpcnumber);
435  m_bpc_posY.clear(); m_bpc_posY.resize(bpcnumber);
436  m_bpc_posZX.clear(); m_bpc_posZX.resize(bpcnumber);
437  m_bpc_posZY.clear(); m_bpc_posZY.resize(bpcnumber);
438  m_bpc_errposX.clear(); m_bpc_errposX.resize(bpcnumber);
439  m_bpc_errposY.clear(); m_bpc_errposY.resize(bpcnumber);
440  m_bpc_errposZX.clear(); m_bpc_errposZX.resize(bpcnumber);
441  m_bpc_errposZY.clear(); m_bpc_errposZY.resize(bpcnumber);
442  m_bpc_errmeasX.clear(); m_bpc_errmeasX.resize(bpcnumber);
443  m_bpc_errmeasY.clear(); m_bpc_errmeasY.resize(bpcnumber);
444 
445  int pos;
446 
447  std::ifstream calibfile;
448  std::string filename = PathResolver::find_file (m_calib_filename, "DATAPATH");
449  calibfile.open(filename.c_str());
450  if(!calibfile.good()){
451  ATH_MSG_WARNING (" Problem with file named "<< m_calib_filename << " in $DATAPATH");
452  return StatusCode::FAILURE;
453  } else {
454  ATH_MSG_DEBUG (" File: "<< filename << " opened");
455  }
456  unsigned int runnumber;
457  calibfile >> runnumber;
458  pos = calibfile.tellg();
459  ATH_MSG_DEBUG (" Run number "<< runnumber);
460  while((runnumber<m_runnumber)&&(!calibfile.eof()))
461  {
462  runnumber=0;
463  pos = calibfile.tellg();
464  // discard next lines
465  for(int j=0;j<bpcnumber+1;j++) calibfile.ignore(5000,'\n');
466  // check next runnumber
467  calibfile >> runnumber;
468  if(runnumber==0) { // reached an empty line : exit.
469  ATH_MSG_DEBUG ("empty line");
470  calibfile.clear();
471  break;
472  }
473  ATH_MSG_DEBUG (" Run number "<< runnumber);
474  }
475 
476  // Now we found the good set of constant (the ones following pos)
477  if(runnumber==m_runnumber) pos = calibfile.tellg();
478  ATH_MSG_DEBUG (" Pos = "<< pos);
479  calibfile.seekg(pos);
480  ATH_MSG_DEBUG (" Will use the following constants :");
481  for(int j=0;j<bpcnumber;j++)
482  {
483  int bpcn;
484  calibfile >> bpcn;
485  calibfile >> m_bpc_posX[j];
486  calibfile >> m_bpc_posY[j];
487  calibfile >> m_bpc_posZX[j];
488  calibfile >> m_bpc_posZY[j];
489  calibfile >> m_bpc_errposX[j];
490  calibfile >> m_bpc_errposY[j];
491  calibfile >> m_bpc_errposZX[j];
492  calibfile >> m_bpc_errposZY[j];
493  calibfile >> m_bpc_errmeasX[j];
494  calibfile >> m_bpc_errmeasY[j];
495 
496  ATH_MSG_DEBUG (bpcn << " "<<m_bpc_posX[j]
497  << " "<< m_bpc_posY[j]
498  << " "<< m_bpc_posZX[j]
499  << " "<< m_bpc_posZY[j]
500  << " "<< m_bpc_errposX[j]
501  << " "<< m_bpc_errposY[j]
502  << " "<< m_bpc_errposZX[j]
503  << " "<< m_bpc_errposZY[j]
504  << " "<< m_bpc_errmeasX[j]
505  << " "<< m_bpc_errmeasY[j]);
506  }
507 
508  calibfile.close();
509 
510  return StatusCode::SUCCESS;
511 
512 }
TBPlaneTrackingAlgo::m_bpc_errposZY
std::vector< float > m_bpc_errposZY
Definition: TBPlaneTrackingAlgo.h:82
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TBHitPlane::setValidFlag
void setValidFlag(bool valid)
Definition: TBHitPlane.h:45
TBHitPlane.h
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
TBPlaneTrackingAlgo::m_runnumber
unsigned int m_runnumber
Definition: TBPlaneTrackingAlgo.h:89
TBPlaneTrackingAlgo::m_bpc_errposZX
std::vector< float > m_bpc_errposZX
Definition: TBPlaneTrackingAlgo.h:82
TBTrack
Definition: TBTrack.h:20
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
PathResolver::find_file
static std::string find_file(const std::string &logical_file_name, const std::string &search_path, SearchType search_type=LocalSearch)
Definition: PathResolver.cxx:251
ClusterSeg::residual
@ residual
Definition: ClusterNtuple.h:20
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TBBPC
Definition: TBBPC.h:23
TBPlaneTrackingAlgo::m_bpc_posZY
std::vector< float > m_bpc_posZY
Definition: TBPlaneTrackingAlgo.h:81
TBPlaneTrackingAlgo::m_bpc_posX
std::vector< float > m_bpc_posX
Definition: TBPlaneTrackingAlgo.h:81
TBPlaneTrackingAlgo::execute
virtual StatusCode execute() override
Definition: TBPlaneTrackingAlgo.cxx:49
TBPlaneTrackingAlgo::getChi2
double getChi2(const std::vector< double > &v_u, const std::vector< double > &v_w, const std::vector< double > &v_eu, const double &a1, const double &a2)
Calculates the chi2 += ((u_i - a1 - a2*w_i)/eu)^2.
Definition: TBPlaneTrackingAlgo.cxx:291
TBPlaneTrackingAlgo::getnewcalib
StatusCode getnewcalib()
Definition: TBPlaneTrackingAlgo.cxx:415
TBPlaneTrackingAlgo::m_hitPlaneCont_v
TBHitPlaneCont m_hitPlaneCont_v
Definition: TBPlaneTrackingAlgo.h:78
TBHitPlane::setErroru
void setErroru(double eu)
Definition: TBHitPlane.h:42
TBPlaneTrackingAlgo::m_bpc_posY
std::vector< float > m_bpc_posY
Definition: TBPlaneTrackingAlgo.h:81
TBEventInfo::getEventType
int getEventType() const
Definition: TBEventInfo.h:66
TBHitPlane
Definition: TBHitPlane.h:16
TBHitPlane::setPosw
void setPosw(double w)
Definition: TBHitPlane.h:41
TBHitPlane::setPosu
void setPosu(double u)
Definition: TBHitPlane.h:40
TBPlaneTrackingAlgo::getResidual
double getResidual(const double &u, const double &w, const double &a1, const double &a2)
Calculates the residual-> r = (u_i - a1 - a2*w_i)
Definition: TBPlaneTrackingAlgo.cxx:283
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:83
TBPlaneTrackingAlgo::m_testAlgo
bool m_testAlgo
Definition: TBPlaneTrackingAlgo.h:76
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
TBPlaneTrackingAlgo.h
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
TBPlaneTrackingAlgo::buildHits
StatusCode buildHits()
Build HitPlaneCont from BPC.
Definition: TBPlaneTrackingAlgo.cxx:355
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:92
TBPlaneTrackingAlgo::TBPlaneTrackingAlgo
TBPlaneTrackingAlgo(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TBPlaneTrackingAlgo.cxx:21
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
TBHitPlaneCont
Definition: TBHitPlaneCont.h:20
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
chi2
double chi2(TH1 *h0, TH1 *h1)
Definition: comparitor.cxx:522
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
TBTrack.h
TBPlaneTrackingAlgo::fitPlane
bool fitPlane(const TBHitPlaneCont *hitPlaneCont, double &a1, double &a2, double &chi2, std::vector< double > &residual)
Fit data to the function u = a1 + a2*w.
Definition: TBPlaneTrackingAlgo.cxx:183
TBPlaneTrackingAlgo::m_bpc_names
std::vector< std::string > m_bpc_names
Definition: TBPlaneTrackingAlgo.h:85
DataVector::clear
void clear()
Erase all the elements in the collection.
compute_lumi.denom
denom
Definition: compute_lumi.py:76
AthAlgorithm
Definition: AthAlgorithm.h:47
DeMoScan.runnumber
runnumber
Definition: DeMoScan.py:266
PathResolver.h
TBHitPlaneCont.h
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
TBBPCCont.h
TBPlaneTrackingAlgo::m_bpc_errposX
std::vector< float > m_bpc_errposX
Definition: TBPlaneTrackingAlgo.h:82
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
TBPlaneTrackingAlgo::initialize
virtual StatusCode initialize() override
Definition: TBPlaneTrackingAlgo.cxx:42
LArNewCalib_Delay_OFC_Cali.check
check
Definition: LArNewCalib_Delay_OFC_Cali.py:208
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
TBPlaneTrackingAlgo::finalize
virtual StatusCode finalize() override
Definition: TBPlaneTrackingAlgo.cxx:175
python.PyAthena.v
v
Definition: PyAthena.py:157
TBEventInfo
Definition: TBEventInfo.h:27
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TBPlaneTrackingAlgo::m_bpc_errposY
std::vector< float > m_bpc_errposY
Definition: TBPlaneTrackingAlgo.h:82
TBPlaneTrackingAlgo::m_hitPlaneCont_u
TBHitPlaneCont m_hitPlaneCont_u
Definition: TBPlaneTrackingAlgo.h:77
CaloCellTimeCorrFiller.filename
filename
Definition: CaloCellTimeCorrFiller.py:24
TBPlaneTrackingAlgo::m_calib_filename
std::string m_calib_filename
Definition: TBPlaneTrackingAlgo.h:88
TBPlaneTrackingAlgo::m_bpc_errmeasY
std::vector< float > m_bpc_errmeasY
Definition: TBPlaneTrackingAlgo.h:83
TBEventInfo.h
TBPlaneTrackingAlgo::m_bpc_errmeasX
std::vector< float > m_bpc_errmeasX
Definition: TBPlaneTrackingAlgo.h:83
TBHitPlane::setErrorw
void setErrorw(double ew)
Definition: TBHitPlane.h:43
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
python.IoTestsLib.w
def w
Definition: IoTestsLib.py:200
TBPlaneTrackingAlgo::FillRandomHit
void FillRandomHit()
Definition: TBPlaneTrackingAlgo.cxx:314
TBPlaneTrackingAlgo::fitHits
bool fitHits(const std::vector< double > &u, const std::vector< double > &w, const std::vector< double > &eu, double &a1, double &a2)
Fit data to the function u = a1 + a2*w.
Definition: TBPlaneTrackingAlgo.cxx:236
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
checkFileSG.ind
list ind
Definition: checkFileSG.py:118
TBPlaneTrackingAlgo::m_bpc_posZX
std::vector< float > m_bpc_posZX
Definition: TBPlaneTrackingAlgo.h:81
TBBPCCont
Definition: TBBPCCont.h:17