ATLAS Offline Software
TBCaloCoordinate.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // ***************************************************************************
6 // Liquid Argon detector description package
7 // -----------------------------------------
8 //
9 //****************************************************************************
10 
12 
13 #include "GaudiKernel/Bootstrap.h"
14 #include "Gaudi/Property.h"
15 #include "GaudiKernel/IService.h"
16 #include "GaudiKernel/IToolSvc.h"
17 #include "GaudiKernel/ISvcLocator.h"
18 #include "GaudiKernel/IMessageSvc.h"
19 #include <vector>
20 
23 
25 #include "TBDetDescr/TBElement.h"
26 #include "TBDetDescr/TBElementID.h"
27 
28 //#include "CLHEP/Geometry/Transform3D.h"
30 #include "GaudiKernel/ThreadLocalContext.h"
31 #include <iostream>
32 #include <iomanip>
33 
34 
35 using Amg::Vector3D;
36 using Amg::Transform3D;
37 using Amg::Rotation3D;
38 using Amg::Translation3D;
40 
41 
42 static const InterfaceID IID_TBCaloCoordinate("TBCaloCoordinate", 1, 0);
43 
44 const InterfaceID& TBCaloCoordinate::interfaceID( )
45 { return IID_TBCaloCoordinate; }
46 
48  const std::string& name,
49  const IInterface* parent) :
51  m_table_axis_data(0.), m_table_axis_MC(0.),
52  m_table_proj_data(0.), m_table_proj_MC(0.),
53  m_table_eta(0.),
54  m_calo_phi_shift(0.), m_calo_theta_shift(0.),
55  m_calo_psi_shift(0.), m_calo_x_shift(0.),
56  m_calo_y_shift(0.), m_calo_z_shift(0.),
57  m_table_theta(0.), m_table_z(0.), m_table_delta(0.),
58  m_table_calc_theta(0.), m_table_calc_x(0.),
59  m_DBRead(-1), m_PoolRead(-1), m_runNumber(0), m_firstevt(0)
60 {
61  declareInterface<TBCaloCoordinate>( this );
62 
63  // by default, assume Atlas : m_DBRead=-1, m_PoolRead=-1
64  // other clients need to include the jobOpt fragment and set
65  // what they want via the properties :
66 
67  declareProperty("DBRead",m_DBRead);
68  declareProperty("PoolRead",m_PoolRead);
69 
70  declareProperty("calo_phi_shift",m_calo_phi_shift);
71  declareProperty("calo_theta_shift",m_calo_theta_shift);
72  declareProperty("calo_psi_shift",m_calo_psi_shift);
73  declareProperty("calo_x_shift",m_calo_x_shift);
74  declareProperty("calo_y_shift",m_calo_y_shift);
75  declareProperty("calo_z_shift",m_calo_z_shift);
76 
77  declareProperty("table_eta",m_table_eta);
78 
79  // default values for MC, will be overwritten by Pool numbers
80  m_table_axis_MC = 6062.;
81  m_table_proj_MC = 1276. - 6062.;
82 
83  // number taken from the note ATC-TT-IN-0001, Feb 12, 2005:
84  m_table_axis_data = 6208.;
85 
86  // number extracted from the Tiles table rotation program, S. Solodkov, Nov 2004
87  m_table_proj_data = -3910. ;
88 
89  // this will be calculated
91  m_table_calc_x=0.;
92 
95  //m_table_rotate = new Rotate3D();
96  m_table_rotate = new RotationMatrix3D(); // uninitialized, but always assigned before use
97  m_table_shift = new Translation3D(0.,0.,0.);
98  m_postool=0;
99  m_MCmgr=0;
100  m_range = new CaloPhiRange;
101 }
102 
105 {
106  float eta = -1.*std::log(tan( (float)
107  ((m_calo_theta_shift+m_range->twopi()/4.)/2.)));
108 
110  ( " Numbers used for Calo geometry : "
111  << "phi=" << m_calo_phi_shift << " theta="
112  << m_calo_theta_shift << " (=> deta=" << eta << ") psi="
113  << m_calo_psi_shift << " x,y,z= "
114  << m_calo_x_shift << " "
115  << m_calo_y_shift << " "
116  << m_calo_z_shift );
117 
118  // For global Calo position build HepTransforms according to
119  // jobOpt parameters :
120 
125 
126  StatusCode sc = StatusCode::SUCCESS;
127  return sc;
128 }
129 
131 {
134  delete m_table_rotate;
135  delete m_table_shift;
136  delete m_range;
137 }
138 
141 {
142  StatusCode sc = StatusCode::SUCCESS;
143  return sc;
144 }
145 
146 void
148  Vector3D& pt_local)
149 {
151  pt_local = (*m_transform_ctb_to_calo)*pt_ctb;
152 }
153 
154 void
156  Vector3D& pt_ctb)
157 {
159  pt_ctb = (*m_transform_calo_to_ctb)*pt_local;
160 }
161 
162 void
163 TBCaloCoordinate::ctb_to_local( double& x_ctb, double& y_ctb, double& z_ctb,
164  double& x_local, double& y_local, double& z_local)
165 {
166  Vector3D pt_ctb(x_ctb,y_ctb,z_ctb);
167  Vector3D pt_local(0.,0.,0.);
168 
169  ctb_to_local(pt_ctb,pt_local);
170 
171  x_local = pt_local.x();
172  y_local = pt_local.y();
173  z_local = pt_local.z();
174 
175  //log << MSG::DEBUG << "ctb : " << x_ctb << " " << y_ctb << " "
176  // << z_ctb << " " << endmsg;
177  //log << MSG::DEBUG << " ==> local : " << x_local << " " << y_local << " "
178  // << z_local << " " << endmsg;
179 }
180 
181 void
182 TBCaloCoordinate::local_to_ctb(double& x_local,double& y_local,double& z_local,
183  double& x_ctb, double& y_ctb, double& z_ctb)
184 {
185  Vector3D pt_local(x_local,y_local,z_local);
186  Vector3D pt_ctb(0.,0.,0.);
187 
188  local_to_ctb(pt_local,pt_ctb);
189 
190  x_ctb = pt_ctb.x();
191  y_ctb = pt_ctb.y();
192  z_ctb = pt_ctb.z();
193 
194  //log << MSG::DEBUG << " local : " << x_local << " " << y_local << " "
195  // << z_local << " " << endmsg;
196  //log << MSG::DEBUG << " ==> ctb : " << x_ctb << " " << y_ctb << " "
197  // << z_ctb << " " << endmsg;
198 }
199 
200 double
202 {
204  return m_table_eta;
205 }
206 
207 double
209 {
211  return m_table_delta;
212 }
213 
214 // This is where the work is done :
215 
216 void
218 {
219  if ( m_firstevt == 0 ) {
220  const EventContext& ctx = Gaudi::Hive::currentContext();
221  m_runNumber = ctx.eventID().run_number();
222  m_firstevt = 1;
223  }
224 
225  if ( m_DBRead >= 0 ) {
226  bool result = read_data_position();
227  if (!result) read_user_position();
228  }
229  else if ( m_PoolRead >= 0 ) {
230  bool result = read_MC_position();
231  if (!result) read_user_position();
232  }
233  else
235 
236 }
237 void
239 {
240  if ( m_firstevt == 0 ) m_firstevt = 1;
241 
242  if ( m_DBRead >= 0 || m_PoolRead >= 0) {
244  }
245  else
247 }
248 
249 Transform3D*
251 {
253 }
254 
255 Transform3D*
257 {
259 }
260 
261 void
263 {
264  RotationMatrix3D junkrot = htrans.rotation();
265  double alpha = Eigen::AngleAxisd(junkrot).angle();
266  Eigen::Vector3d junkaxis = Eigen::AngleAxisd(junkrot).axis();
267 
268  ATH_MSG_INFO ("");
269 
270  ATH_MSG_INFO ( " -> Rotation : axis x,y,z = " << junkaxis[Amg::x]
271  << " " << junkaxis[Amg::y] << " " << junkaxis[Amg::z]);
272  ATH_MSG_INFO ( " angle = " << alpha );
273 
274  Amg::Vector3D junktransl = htrans.translation();
275 
276  ATH_MSG_INFO ( " -> Translation : x,y,z = " <<
277  junktransl[Amg::x] << " " << junktransl[Amg::y] << " " << junktransl[Amg::z] );
278 
279  ATH_MSG_INFO ("");
280 
281 }
282 
283 bool
285 {
286  // -------- Access to DB tool : will try once, if fails will use the default (user)
287 
288  if ( m_DBRead == 0 ) {
289 
290  // Horrible hack : DCS update were missing for the end of the data-taking
291  if ( m_runNumber >= 2102455 ) {
292  m_DBRead = -1;
293  return false;
294  }
295  // Horrible hack : DCS indicated infinite eta value for some runs
296  if ( m_runNumber > 2102164 && m_runNumber <= 2102208 ) {
297  m_DBRead = -1;
298  return false;
299  }
300 
301  IToolSvc* p_toolSvc = 0;
302  StatusCode sc = service("ToolSvc", p_toolSvc);
303  if (sc.isFailure()) {
304  ATH_MSG_ERROR ( "Cannot find ToolSvc ??? " );
305  m_DBRead = -1;
306  return false;
307  }
308  else {
309  sc = p_toolSvc->retrieveTool("TBCaloPosTool", m_postool);
310  if(sc.isFailure()) {
312  ( "Cannot get Calo table position from DB : keep default" );
313  m_DBRead = -1;
314  return false;
315  }
316  else {
317  ATH_MSG_DEBUG ( "Did get Calo table position from DB !" );
318  m_DBRead = 1;
319  }
320  }
321  }
322 
323  if ( m_DBRead > 0 ) {
324  m_table_eta = m_postool->eta();
326  m_table_z = m_postool->z();
328 
329  // Protection : if result is crasy, switch to handcoded default
330  if ( m_table_eta < 0. || m_table_eta > 1.5 ) {
331  ATH_MSG_INFO ( " ==> Calorimeter table position read from DB makes no sense, DB updates will be overwitten " );
332  ATH_MSG_INFO ( " " );
333  m_DBRead = 1;
334  return false;
335  }
336 
337  if (m_firstevt == 1 ) {
338  ATH_MSG_INFO ( " --------------------------------------------------------------------- " );
339  ATH_MSG_INFO ( " " );
340  ATH_MSG_INFO ( " Calorimeter table position is read from DB : for run " << m_runNumber
341  << " eta is = " << m_table_eta );
342  ATH_MSG_INFO ( " " );
343 
344 
345  ATH_MSG_INFO ( " If it does not match the LAr logbook, inform LAr people " );
346  ATH_MSG_INFO ( " " );
347  ATH_MSG_INFO ( " " );
348  ATH_MSG_INFO ( " Other (unused) table numbers are : theta=" << m_table_theta
349  << " z=" << m_table_z << " delta=" << m_table_delta );
350  ATH_MSG_INFO ( " --------------------------------------------------------------------- " );
351 
352  m_firstevt = 2;
353  }
354  }
355 
356  // ------- OK, it worked : now do the work
357 
358  // in Atlas, theta is the angle with the z axis, and it is
359  // given by the formula atan(exp(-m_table_eta))*2.
360  // but here, we want the angle against the y axis :
363 
365  //*m_table_shift = TranslateX3D(m_table_calc_x);
367 
369 
370  //print_transform( *m_transform_calo_to_ctb );
371 
373 
374  ATH_MSG_DEBUG ( "Calculated table position is : " );
375  ATH_MSG_DEBUG ( " angle against y axis = "
376  << m_table_calc_theta );
377  ATH_MSG_DEBUG ( " x shift = " << m_table_calc_x );
378 
379  ATH_MSG_DEBUG ( " Final corresponding Moovement : " );
380  //print_transform( *m_transform_calo_to_ctb );
381 
382  return true;
383 }
384 
385 bool
387 {
388  if (!m_MCmgr) {
389  ATH_MSG_INFO ( "Retreiving TBDetDescrManager" );
390 
391  // get the manager used for simulation :
392 
393  ATH_CHECK( detStore()->retrieve( m_MCmgr ), false );
394  }
395 
396  ATH_MSG_DEBUG ( " found TBDetDescrManager " );
397 
398  TBElement LArTileMother = m_MCmgr->getElement(TBElementID::CALO);
399  if (LArTileMother.id() == TBElementID::Unknown ) return false;
400 
401  ATH_MSG_DEBUG ( " found CALO envelope " );
402 
403  // ------- OK, now do the work :
404 
405  Vector3D pos = LArTileMother.position();
406  *m_table_shift = Translation3D(pos.x(),pos.y(),pos.z());
407 
408  // FIXME : rotation has the wrong sign !
409  *m_table_rotate = (LArTileMother.rotation()).inverse();
410 
411  *m_transform_calo_to_ctb = (*m_table_shift)*(*m_table_rotate);
412 
413  // Extract m_table_eta
414  // Not completely satisfactory : it's wrong if the calorimeter is rotated
415  // around z and/or x in addition to y (it's not supposed
416  // to be the case in MC but still ...)
417  //float angle = m_transform_calo_to_ctb->getRotation().delta();
418  float angle = Eigen::AngleAxisd(m_transform_calo_to_ctb->rotation()).angle();
419  m_table_eta = -1.*std::log(tan((float) (m_range->twopi()/4. - angle)/2.));
420 
421  if(m_table_eta<0. || m_table_eta > 1.5) {
422  ATH_MSG_INFO ( " m_table_eta is not in [0,1.5] -> will set it to 0. " );
423  m_table_eta = 0.;
424  }
425 
426  //log << MSG::DEBUG << " Enveloppe position is read from Pool, and is : "
427  // << endmsg;
428  //print_transform( *m_transform_calo_to_ctb );
429 
431 
432  return true;
433 }
434 
435 void
437 {
438  // This is a fall back solution if numbers are not found anywhere else
439  // Note that the hypothesis is that it is DATA
440 
441  // do the work once :
442  //if (m_firstevt > 1 ) return;
443 
444  // default :
445  m_table_eta = 0.45;
446 
447  // Horrible hack : DCS indicated infinite eta for some periods
448  if ( m_runNumber >= 2102181 && m_runNumber < 2102208 ) m_table_eta = 0.55;
449  if ( m_runNumber == 2102208 ) m_table_eta = 0.42;
450 
451  // Horrible hack : DCS update were missing for the end of the data-taking
452  if ( m_runNumber >= 2102455 && m_runNumber < 2102470 ) m_table_eta = 0.1;
453  if ( m_runNumber >= 2102470 && m_runNumber < 2102478 ) m_table_eta = 0.2;
454  if ( m_runNumber >= 2102478 && m_runNumber < 2102488 ) m_table_eta = 0.3;
455  if ( m_runNumber >= 2102488 && m_runNumber < 2102498 ) m_table_eta = 0.4;
456  if ( m_runNumber >= 2102498 && m_runNumber < 2102512 ) m_table_eta = 0.5;
457  if ( m_runNumber >= 2102512 && m_runNumber < 2102530 ) m_table_eta = 0.7;
458  if ( m_runNumber >= 2102530 && m_runNumber < 2102758 ) m_table_eta = 0.6;
459 
460  if ( m_runNumber >= 2102758 && m_runNumber < 2102903 ) m_table_eta = 0.55;
461  if ( m_runNumber >= 2102903 && m_runNumber < 2102936 ) m_table_eta = 0.5;
462  if ( m_runNumber >= 2102936 && m_runNumber < 2102953 ) m_table_eta = 0.3;
463  if ( m_runNumber >= 2102953 && m_runNumber < 2102980 ) m_table_eta = 0.4;
464  if ( m_runNumber >= 2102980 ) m_table_eta = 0.3;
465 
466  ATH_MSG_DEBUG ( " --------------------------------------------------------------------- " );
467  ATH_MSG_DEBUG ( " " );
468  ATH_MSG_DEBUG ( " Calorimeter table DCS either OFF of not used, position is hardcoded : for run "
469  << m_runNumber << " eta is = " << m_table_eta );
470  ATH_MSG_DEBUG ( " " );
471  ATH_MSG_DEBUG ( " If it does not match the LAr logbook, inform LAr people " );
472  ATH_MSG_DEBUG ( " " );
473  ATH_MSG_DEBUG ( " --------------------------------------------------------------------- " );
474 
476 
477  if(m_DBRead >= 0)
479  else
481 
483  //*m_table_shift = TranslateX3D(m_table_calc_x);
485 
487 
488  //print_transform( *m_transform_calo_to_ctb );
489 
491 
492  ATH_MSG_DEBUG ( " Moovement defined by hardcoded numbers : eta was set to "
493  << m_table_eta);
494 
495  ATH_MSG_DEBUG ( "Calculated table position is : " );
496  ATH_MSG_DEBUG ( " angle against y axis = "
497  << m_table_calc_theta );
498 
499  m_firstevt = 2;
500 
501  //log << MSG::DEBUG << " x shift = " << m_table_calc_x << endmsg;
502  //print_transform( *m_transform_calo_to_ctb );
503 
504 }
505 
506 void
508 {
509  // do the work once :
510  if (m_firstevt > 1 ) return;
511 
512  m_table_calc_theta= 0.;
513  m_table_calc_x= 0;
514 
516  //*m_table_shift = TranslateX3D(m_table_calc_x);
518  *m_transform_calo_to_ctb = (*m_table_shift)*(*m_table_rotate);
520 
521  m_firstevt = 2;
522 
523  ATH_MSG_DEBUG ( " Neutral Moovement : " );
524  //print_transform( *m_transform_calo_to_ctb );
525 
526 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TBCaloCoordinate::m_table_theta
double m_table_theta
Definition: TBCaloCoordinate.h:152
TBCaloCoordinate::m_table_axis_data
double m_table_axis_data
Definition: TBCaloCoordinate.h:132
TBCaloCoordinate::m_table_axis_MC
double m_table_axis_MC
Definition: TBCaloCoordinate.h:133
TBCaloCoordinate::local_to_ctb
void local_to_ctb(Amg::Vector3D &pt_local, Amg::Vector3D &pt_ctb)
General use method: basic translation between the 2 cartesian coordinate systems:
TBCaloCoordinate::m_table_delta
double m_table_delta
Definition: TBCaloCoordinate.h:154
CaloPhiRange
This class defines the phi convention for Calorimeters.
Definition: CaloPhiRange.h:28
Amg::Rotation3D
Eigen::Quaternion< double > Rotation3D
Definition: GeoPrimitives.h:43
TBCaloCoordinate::m_table_calc_theta
double m_table_calc_theta
Definition: TBCaloCoordinate.h:156
get_generator_info.result
result
Definition: get_generator_info.py:21
TBCaloCoordinate::m_calo_y_shift
double m_calo_y_shift
Definition: TBCaloCoordinate.h:148
TBCaloCoordinate::transform_ctb_to_calo
Amg::Transform3D * transform_ctb_to_calo()
method accessing the transformations
Definition: TBCaloCoordinate.cxx:256
ITBCaloPosTool::eta
virtual double eta()=0
access eta value
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TBCaloCoordinate::m_rotz_extra_calo_to_ctb
Amg::Transform3D m_rotz_extra_calo_to_ctb
Definition: TBCaloCoordinate.h:171
TBDetDescrManager.h
TBCaloCoordinate::m_table_z
double m_table_z
Definition: TBCaloCoordinate.h:153
TBCaloCoordinate::m_transform_ctb_to_calo
Amg::Transform3D * m_transform_ctb_to_calo
Definition: TBCaloCoordinate.h:178
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
TBCaloCoordinate::interfaceID
static const InterfaceID & interfaceID()
Definition: TBCaloCoordinate.cxx:44
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TBCaloCoordinate::TBCaloCoordinate
TBCaloCoordinate(const std::string &type, const std::string &name, const IInterface *parent)
Definition: TBCaloCoordinate.cxx:47
Amg::y
@ y
Definition: GeoPrimitives.h:35
TBCaloCoordinate::m_calo_x_shift
double m_calo_x_shift
Definition: TBCaloCoordinate.h:147
TBCaloCoordinate.h
TBCaloCoordinate::~TBCaloCoordinate
~TBCaloCoordinate()
Definition: TBCaloCoordinate.cxx:130
TBCaloCoordinate::read_table_position
virtual void read_table_position()
clients who want the real position must call this
Definition: TBCaloCoordinate.cxx:217
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
TBDetDescrManager::getElement
const TBElement & getElement(TBElementID::TBElementID id) const
Definition: TBDetDescrManager.cxx:121
TBCaloCoordinate::m_transform_calo_to_ctb
Amg::Transform3D * m_transform_calo_to_ctb
Definition: TBCaloCoordinate.h:177
drawFromPickle.atan
atan
Definition: drawFromPickle.py:36
TBCaloCoordinate::m_calo_theta_shift
double m_calo_theta_shift
Definition: TBCaloCoordinate.h:145
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
TBCaloCoordinate::m_table_rotate
Amg::RotationMatrix3D * m_table_rotate
Definition: TBCaloCoordinate.h:165
TBCaloCoordinate::m_translxyz_extra_calo_to_ctb
Amg::Transform3D m_translxyz_extra_calo_to_ctb
Definition: TBCaloCoordinate.h:174
TBCaloCoordinate::m_postool
ITBCaloPosTool * m_postool
Definition: TBCaloCoordinate.h:186
TBCaloCoordinate::m_calo_psi_shift
double m_calo_psi_shift
Definition: TBCaloCoordinate.h:146
TBCaloCoordinate::beam_local_phi
double beam_local_phi()
the most common use-case : the H8 beam goes along the x axis -> that are the local calorimeters eta a...
Definition: TBCaloCoordinate.cxx:208
TBCaloCoordinate::m_calo_phi_shift
double m_calo_phi_shift
Definition: TBCaloCoordinate.h:144
GeoPrimitives.h
Amg::z
@ z
Definition: GeoPrimitives.h:36
TBCaloCoordinate::read_fake_table_position
virtual void read_fake_table_position()
clients who want to avoid the DB-decoding, and force a fixed eta must call this :
Definition: TBCaloCoordinate.cxx:238
TBCaloCoordinate::m_table_eta
double m_table_eta
Definition: TBCaloCoordinate.h:140
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ITBCaloPosTool::delta
virtual double delta()=0
access delta value
TBCaloCoordinate::m_roty_extra_calo_to_ctb
Amg::Transform3D m_roty_extra_calo_to_ctb
Definition: TBCaloCoordinate.h:172
TBCaloCoordinate::m_runNumber
long m_runNumber
Definition: TBCaloCoordinate.h:181
TBElementID::Unknown
@ Unknown
Definition: TBElementID.h:12
TBCaloCoordinate::print_transform
void print_transform(Amg::Transform3D &htrans)
printout method
Definition: TBCaloCoordinate.cxx:262
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
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:73
Amg::x
@ x
Definition: GeoPrimitives.h:34
TBCaloCoordinate::m_table_calc_x
double m_table_calc_x
Definition: TBCaloCoordinate.h:157
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
TBCaloCoordinate::m_firstevt
int m_firstevt
Definition: TBCaloCoordinate.h:184
test_pyathena.parent
parent
Definition: test_pyathena.py:15
TBCaloCoordinate::transform_calo_to_ctb
Amg::Transform3D * transform_calo_to_ctb()
method accessing the transformations
Definition: TBCaloCoordinate.cxx:250
CaloPhiRange.h
CaloPhiRange class declaration.
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
CaloPhiRange::twopi
static double twopi()
Definition: CaloPhiRange.h:46
TBCaloCoordinate::read_user_position
void read_user_position()
Definition: TBCaloCoordinate.cxx:436
TBElement::position
Amg::Vector3D position() const
Definition: TBElement.h:35
TBElement::rotation
Amg::RotationMatrix3D rotation() const
Definition: TBElement.h:36
ITBCaloPosTool::theta
virtual double theta()=0
access eta value
TBCaloCoordinate::m_table_proj_data
double m_table_proj_data
Definition: TBCaloCoordinate.h:135
TBCaloCoordinate::m_DBRead
int m_DBRead
Definition: TBCaloCoordinate.h:160
ITBCaloPosTool::z
virtual double z()=0
access eta value
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
TBCaloCoordinate::finalize
StatusCode finalize()
Definition: TBCaloCoordinate.cxx:140
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
TBElementID::CALO
@ CALO
Definition: TBElementID.h:27
TBCaloCoordinate::m_calo_z_shift
double m_calo_z_shift
Definition: TBCaloCoordinate.h:149
TBCaloCoordinate::ctb_to_local
void ctb_to_local(Amg::Vector3D &pt_ctb, Amg::Vector3D &pt_local)
General use method: basic translation between the 2 cartesian coordinate systems:
TBCaloCoordinate::read_neutral_position
void read_neutral_position()
Definition: TBCaloCoordinate.cxx:507
Amg::RotationMatrix3D
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Definition: GeoPrimitives.h:49
TBCaloCoordinate::m_rotx_extra_calo_to_ctb
Amg::Transform3D m_rotx_extra_calo_to_ctb
Definition: TBCaloCoordinate.h:173
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
TBCaloCoordinate::beam_local_eta
double beam_local_eta()
the most common use-case : the H8 beam goes along the x axis -> that are the local calorimeters eta a...
Definition: TBCaloCoordinate.cxx:201
TBCaloCoordinate::initialize
StatusCode initialize()
Definition: TBCaloCoordinate.cxx:104
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
TBCaloCoordinate::m_PoolRead
int m_PoolRead
Definition: TBCaloCoordinate.h:161
TBElement
Definition: TBElement.h:20
TBCaloCoordinate::read_MC_position
bool read_MC_position()
Definition: TBCaloCoordinate.cxx:386
TBElement.h
Amg::AngleAxis3D
Eigen::AngleAxisd AngleAxis3D
Definition: GeoPrimitives.h:45
TBElementID.h
AthAlgTool
Definition: AthAlgTool.h:26
TBCaloCoordinate::read_data_position
bool read_data_position()
Definition: TBCaloCoordinate.cxx:284
TBCaloCoordinate::m_table_shift
Amg::Translation3D * m_table_shift
Definition: TBCaloCoordinate.h:167
ITBCaloPosTool.h
TBCaloCoordinate::m_table_proj_MC
double m_table_proj_MC
Definition: TBCaloCoordinate.h:136
TBCaloCoordinate::m_range
CaloPhiRange * m_range
Definition: TBCaloCoordinate.h:188
TBElement::id
TBElementID::TBElementID id() const
Definition: TBElement.h:33
TBCaloCoordinate::m_MCmgr
const TBDetDescrManager * m_MCmgr
Definition: TBCaloCoordinate.h:187