12#include "Gaudi/Property.h"
13#include "GaudiKernel/IService.h"
14#include "GaudiKernel/IToolSvc.h"
27#include "GeoModelKernel/GeoFullPhysVol.h"
28#include "GeoModelKernel/GeoDefinitions.h"
29#include "GaudiKernel/SystemOfUnits.h"
37 const std::string& name,
38 const IInterface* parent)
39 : base_class(
type, name, parent)
50 std::string strTag =
"ATLAS-00";
51 std::string strNode =
"ATLAS";
53 SmartIF<IGeoModelSvc> geoModelSvc{service(
"GeoModelSvc")};
58 <<
" " << detectorKey.
tag());
59 if ( detectorKey.
tag() !=
"LAr-H8-00" && detectorKey.
tag() !=
"LAr-H6-00"
60 && detectorKey.
tag() !=
"LAr-G3-00")
62 strTag = detectorKey.
tag();
63 strNode = detectorKey.
node();
65 ATH_MSG_INFO (
"LAr simplified geometry will use : " << strTag <<
" " << strNode);
68 SmartIF<IGeoDbTagSvc> geoDbTag{service(
"GeoDbTagSvc")};
70 SmartIF<IRDBAccessSvc> rdbSvc{service(geoDbTag->getParamSvcName())};
75 m_recCryoCyl = rdbSvc->getRecordsetPtr(
"CryoCylinders",strTag,strNode);
77 m_recCryoCyl = rdbSvc->getRecordsetPtr(
"CryoCylinders",
"CryoCylinders-00");
79 m_recPresGeo = rdbSvc->getRecordsetPtr(
"PresamplerGeometry",strTag,strNode);
81 m_recPresGeo = rdbSvc->getRecordsetPtr(
"PresamplerGeometry",
"PresamplerGeometry-00");
83 m_recBarrGeo = rdbSvc->getRecordsetPtr(
"BarrelGeometry",strTag,strNode);
85 m_recBarrGeo = rdbSvc->getRecordsetPtr(
"BarrelGeometry",
"BarrelGeometry-00");
89 m_recPresPos = rdbSvc->getRecordsetPtr(
"PresamplerPosition",detectorKeyAtl.
tag(),detectorKeyAtl.
node());
92 m_recPresPos = rdbSvc->getRecordsetPtr(
"PresamplerPosition",strTag,strNode);
95 m_EmecGeo = rdbSvc->getRecordsetPtr(
"EmecGeometry",strTag,strNode);
97 m_HEC = rdbSvc->getRecordsetPtr(
"HadronicEndcap",strTag,strNode);
99 m_HEC = rdbSvc->getRecordsetPtr(
"HadronicEndcap",
"HadronicEndcap-00");
101 ATH_MSG_INFO (
" LArRecoSimpleGeomTool successfully initialized ");
102 return StatusCode::SUCCESS;
108 std::vector<double>& radius,
109 std::vector<double>&
depth,
110 std::vector<double>& hlength )
const
117 std::string key =
map_av(alvol);
120 if(detStore()->retrieve(storedPV,key)==StatusCode::FAILURE)
130 GeoFullPhysVol* fullPV = storedPV->
getPhysVol();
131 htrans = fullPV->getAbsoluteTransform()*fullPV->getDefAbsoluteTransform().inverse();
143 if (lar->
size()<14)
return false;
146 rad = rec->
getDouble(
"RMIN")*Gaudi::Units::cm;
147 len = rec->
getDouble(
"DZ")*Gaudi::Units::cm /2.;
148 dep = rec->
getDouble(
"DR")*Gaudi::Units::cm;
150 dep = dep +rec->
getDouble(
"DR")*Gaudi::Units::cm;
152 dep = dep +rec->
getDouble(
"DR")*Gaudi::Units::cm;
158 radius.push_back( rad + dep/2.);
159 depth.push_back( dep/2. );
160 hlength.push_back( len );
169 if (lar->
size()<15)
return false;
173 rad = rec->
getDouble(
"RMIN")*Gaudi::Units::cm;
174 len = rec->
getDouble(
"DZ")*Gaudi::Units::cm /2.;
175 dep = rec->
getDouble(
"DR")*Gaudi::Units::cm;
181 radius.push_back( rad + dep/2. );
182 depth.push_back( dep /2.);
183 hlength.push_back( len );
187 rad = rec->
getDouble(
"RMIN")*Gaudi::Units::cm;
188 len = rec->
getDouble(
"DZ")*Gaudi::Units::cm /2.;
189 dep = rec->
getDouble(
"DR")*Gaudi::Units::cm;
195 radius.push_back( rad + dep/2.);
196 depth.push_back( dep /2.);
197 hlength.push_back( len );
201 rad = rec->
getDouble(
"RMIN")*Gaudi::Units::cm;
202 len = rec->
getDouble(
"DZ")*Gaudi::Units::cm /2.;
203 dep = rec->
getDouble(
"DR")*Gaudi::Units::cm;
209 radius.push_back( rad + dep/2. );
210 depth.push_back( dep /2.);
211 hlength.push_back( len );
215 rad = rec->
getDouble(
"RMIN")*Gaudi::Units::cm;
216 len = rec->
getDouble(
"DZ")*Gaudi::Units::cm /2.;
217 dep = rec->
getDouble(
"DR")*Gaudi::Units::cm;
223 radius.push_back( rad + dep/2. );
224 depth.push_back( dep /2.);
225 hlength.push_back( len );
235 if (lar->
size()==0)
return false;
238 rad = rec->
getDouble(
"RMIN")*Gaudi::Units::cm;
239 dep = rec->
getDouble(
"RMAX")*Gaudi::Units::cm - rad;
242 if ( !lar || lar->
size()==0)
return false;
245 len = rec->
getDouble(
"ZMAX")*Gaudi::Units::cm;
251 radius.push_back( rad + dep/2.);
252 depth.push_back( dep /2.);
253 hlength.push_back( len );
263 if (lar->
size()==0)
return false;
266 rad = rec->
getDouble(
"RMIN")*Gaudi::Units::cm;
267 dep = rec->
getDouble(
"RMAX")*Gaudi::Units::cm - rad;
268 len = rec->
getDouble(
"ZMAX")*Gaudi::Units::cm;
274 radius.push_back( rad + dep/2.);
275 depth.push_back( dep /2.);
276 hlength.push_back( len );
287 std::vector<double>&
z,
288 std::vector<double>&
depth,
289 std::vector<double>& rmin, std::vector<double>& rmax )
const
295 std::string key =
map_av(alvol);
298 if(detStore()->retrieve(storedPV,key)==StatusCode::FAILURE)
308 GeoFullPhysVol* fullPV = storedPV->
getPhysVol();
309 htrans = fullPV->getAbsoluteTransform()*fullPV->getDefAbsoluteTransform().inverse();
317 double ri,ra,dep,zcent;
325 if (lar->
size()<60)
return false;
329 ri = rec->
getDouble(
"RMIN")*Gaudi::Units::cm;
330 ra = ri + rec->
getDouble(
"DR")*Gaudi::Units::cm;
331 dep = rec->
getDouble(
"DZ")*Gaudi::Units::cm;
332 zcent = rec->
getDouble(
"ZMIN")*Gaudi::Units::cm + dep/2.;
340 rmin.push_back( ri );
341 rmax.push_back( ra );
342 depth.push_back( dep/2. );
343 z.push_back( zcent );
348 ri = rec->
getDouble(
"RMIN")*Gaudi::Units::cm;
349 ra = ri + rec->
getDouble(
"DR")*Gaudi::Units::cm;
350 dep = rec->
getDouble(
"DZ")*Gaudi::Units::cm;
351 zcent = rec->
getDouble(
"ZMIN")*Gaudi::Units::cm + dep/2.;
359 rmin.push_back( ri );
360 rmax.push_back( ra );
361 depth.push_back( dep/2. );
362 z.push_back( zcent );
375 ri = rec->
getDouble(
"RMIN")*Gaudi::Units::cm;
376 ra = rec->
getDouble(
"RMAX")*Gaudi::Units::cm;
377 dep = rec->
getDouble(
"TCK")*Gaudi::Units::cm;
378 zcent = rec->
getDouble(
"ZPOS")*Gaudi::Units::cm + dep/2.;
386 rmin.push_back( ri );
387 rmax.push_back( ra );
388 depth.push_back( dep/2. );
389 z.push_back( zcent );
402 ri = rec->
getDouble(
"RMIN")*Gaudi::Units::cm;
403 ra = rec->
getDouble(
"RMAX")*Gaudi::Units::cm;
404 dep = rec->
getDouble(
"ETOT")*Gaudi::Units::cm;
405 zcent = rec->
getDouble(
"Z1")*Gaudi::Units::cm + dep/2.;
413 rmin.push_back( ri );
414 rmax.push_back( ra );
415 depth.push_back( dep/2. );
416 z.push_back( zcent );
426 if (lar->
size()==0)
return false;
430 ri = rec->
getDouble(
"ROORIG")*Gaudi::Units::cm;
431 ra = rec->
getDouble(
"REND")*Gaudi::Units::cm;
435 dep = dep*Gaudi::Units::cm;
436 zcent = rec->
getDouble(
"ZSTART")*Gaudi::Units::cm + dep/2.;
444 rmin.push_back( ri );
445 rmax.push_back( ra );
446 depth.push_back( dep/2. );
447 z.push_back( zcent );
458 if (lar->
size()==0)
return false;
462 ri = rec->
getDouble(
"ROORIG")*Gaudi::Units::cm;
463 ra = rec->
getDouble(
"REND")*Gaudi::Units::cm;
467 dep = dep*Gaudi::Units::cm;
473 zcent = zcent*Gaudi::Units::cm + dep/2.;
481 rmin.push_back( ri );
482 rmax.push_back( ra );
483 depth.push_back( dep/2. );
484 z.push_back( zcent );
493 nb = 8.6*Gaudi::Units::cm;
494 rmin.push_back( nb );
495 nb = 47.5*Gaudi::Units::cm;
496 rmax.push_back( nb );
498 nb = 45.*Gaudi::Units::cm;
499 depth.push_back( nb/2. );
501 nb = (466.85 + nb/2. )*Gaudi::Units::cm;
512 nb = 8.6*Gaudi::Units::cm;
513 rmin.push_back( nb );
514 nb = 47.5*Gaudi::Units::cm;
515 rmax.push_back( nb );
517 nb = 45.*Gaudi::Units::cm;
518 depth.push_back( nb/2. );
520 nb = (512.3 + nb/2. )*Gaudi::Units::cm;
531 nb = 8.6*Gaudi::Units::cm;
532 rmin.push_back( nb );
533 nb = 47.5*Gaudi::Units::cm;
534 rmax.push_back( nb );
536 nb = 45.*Gaudi::Units::cm;
537 depth.push_back( nb/2. );
539 nb = (559.75 + nb/2. )*Gaudi::Units::cm;
557 std::vector<double>& radius,
558 std::vector<double>&
depth,
559 std::vector<double>& hlength )
562 std::string key =
map_av(alvol);
565 if(detStore()->retrieve(storedPV,key)==StatusCode::FAILURE)
575 GeoFullPhysVol* fullPV = storedPV->
getPhysVol();
576 htrans = fullPV->getAbsoluteTransform()*fullPV->getDefAbsoluteTransform().inverse();
589 std::vector<double>& radius,
590 std::vector<double>&
depth,
591 std::vector<double>& hlength )
594 std::string key =
map_av(alvol);
597 if(detStore()->retrieve(storedPV,key)==StatusCode::FAILURE)
607 GeoFullPhysVol* fullPV = storedPV->
getPhysVol();
608 htrans = fullPV->getAbsoluteTransform()*fullPV->getDefAbsoluteTransform().inverse();
624 return std::string(
"LARCRYO_B");
626 return std::string(
"LARCRYO_EC_POS");
628 return std::string(
"LARCRYO_EC_NEG");
630 return std::string(
"SOLENOID");
632 return std::string(
"PRESAMPLER_B_POS");
634 return std::string(
"PRESAMPLER_B_NEG");
636 return std::string(
"EMB_POS");
638 return std::string(
"EMB_NEG");
640 return std::string(
"PRESAMPLER_EC_POS");
642 return std::string(
"PRESAMPLER_EC_NEG");
644 return std::string(
"EMEC_POS");
646 return std::string(
"EMEC_NEG");
648 return std::string(
"HEC1_POS");
650 return std::string(
"HEC1_NEG");
652 return std::string(
"HEC2_POS");
654 return std::string(
"HEC2_NEG");
656 return std::string(
"FCAL1_POS");
658 return std::string(
"FCAL1_NEG");
660 return std::string(
"FCAL2_POS");
662 return std::string(
"FCAL2_NEG");
664 return std::string(
"FCAL3_POS");
666 return std::string(
"FCAL3_NEG");
668 return std::string(
"");
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition of CaloDetDescriptor.
CaloPhiRange class declaration.
Definition of the abstract IRDBAccessSvc interface.
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition of the abstract IRDBRecord interface.
Definition of the abstract IRDBRecordset interface.
ALIGNVOL
LAr Alignable volumes.
This is a helper class to query the version tags from GeoModelSvc and determine the appropriate tag a...
const std::string & tag() const
Return version tag.
const std::string & node() const
Return the version node.
IRDBRecord is one record in the IRDBRecordset object.
virtual double getDouble(const std::string &fieldName) const =0
Get double field value.
virtual unsigned int size() const =0
GeoFullPhysVol * getPhysVol()
Destructor.
std::string depth
tag string for intendation
bool contains(const std::string &s, const std::string ®x)
does a string contain the substring
Eigen::Affine3d Transform3D