ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
InDetDD::BCM_Builder Class Reference

#include <BCM_Builder.h>

Inheritance diagram for InDetDD::BCM_Builder:
Collaboration diagram for InDetDD::BCM_Builder:

Public Member Functions

 BCM_Builder (const std::string &, const std::string &, const IInterface *)
 
virtual ~BCM_Builder ()=default
 default destructor More...
 
virtual StatusCode initialize ()
 standard Athena-Algorithm method More...
 
virtual StatusCode finalize ()
 standard Athena-Algorithm method More...
 
virtual StatusCode build (GeoVPhysVol *parent)
 build the BCM geometry More...
 
virtual StatusCode registerCallback (StoreGateSvc *detStore)
 For alignment. More...
 
virtual StatusCode align (IOVSVC_CALLBACK_ARGS)
 

Private Attributes

std::vector< double > m_module0
 member variables for algorithm properties: More...
 
std::vector< double > m_moduleI
 
std::vector< double > m_moduleII
 
std::vector< double > m_moduleIII
 
std::vector< double > m_moduleIV
 
std::vector< double > m_moduleV
 
std::vector< double > m_moduleVI
 
std::vector< double > m_moduleVII
 
unsigned int m_moduleon
 
bool m_bcmon
 
bool m_BDparameters
 

Detailed Description

Definition at line 27 of file BCM_Builder.h.

Constructor & Destructor Documentation

◆ BCM_Builder()

InDetDD::BCM_Builder::BCM_Builder ( const std::string &  t,
const std::string &  n,
const IInterface *  p 
)

Definition at line 25 of file BCM_Builder.cxx.

28  :
29  base_class(t,n,p)
30 {
31 
32  //default settings
33  // TRANS_X TRANS_Y TRANS_Z ROT_X ROT_Y ROT_Z DIMENSION_Z DIAM_TRANS_Y DIAM_TRANS_Z DIAM_DIAM_X DIAM_DIAM_Y DIAM_DIAM_Z LAMEL_OFFSET_H LAMEL_OFFSET_I LAMEL_OFFSET_J
34  m_module0.push_back(95.744); m_module0.push_back(0); m_module0.push_back(1882.4); m_module0.push_back(0); m_module0.push_back(45); m_module0.push_back(0); m_module0.push_back(0.4); m_module0.push_back(0); m_module0.push_back(-59.785); m_module0.push_back(0.2); m_module0.push_back(0); m_module0.push_back(-0.4); m_module0.push_back(34.860); m_module0.push_back(29.509); m_module0.push_back(20.205); //F410
35  m_moduleI.push_back(0); m_moduleI.push_back(95.744); m_moduleI.push_back(1882.4); m_moduleI.push_back(0); m_moduleI.push_back(45); m_moduleI.push_back(90); m_moduleI.push_back(0.4); m_moduleI.push_back(0); m_moduleI.push_back(-59.785); m_moduleI.push_back(0.2); m_moduleI.push_back(0); m_moduleI.push_back(-0.4); m_moduleI.push_back(34.860); m_moduleI.push_back(29.509); m_moduleI.push_back(20.205); //F405
36  m_moduleII.push_back(-95.744); m_moduleII.push_back(0); m_moduleII.push_back(1882.4); m_moduleII.push_back(0); m_moduleII.push_back(45); m_moduleII.push_back(180); m_moduleII.push_back(0.4); m_moduleII.push_back(0); m_moduleII.push_back(-59.785); m_moduleII.push_back(0.2); m_moduleII.push_back(0); m_moduleII.push_back(-0.4); m_moduleII.push_back(34.860); m_moduleII.push_back(29.509); m_moduleII.push_back(20.205); //F413
37  m_moduleIII.push_back(0); m_moduleIII.push_back(-95.744); m_moduleIII.push_back(1882.4); m_moduleIII.push_back(0); m_moduleIII.push_back(45); m_moduleIII.push_back(270); m_moduleIII.push_back(0.4); m_moduleIII.push_back(0); m_moduleIII.push_back(-59.785); m_moduleIII.push_back(0.2); m_moduleIII.push_back(0); m_moduleIII.push_back(-0.4); m_moduleIII.push_back(34.860); m_moduleIII.push_back(29.509); m_moduleIII.push_back(20.205); //F404
38  m_moduleIV.push_back(95.744); m_moduleIV.push_back(0); m_moduleIV.push_back(-1882.4); m_moduleIV.push_back(180); m_moduleIV.push_back(-45); m_moduleIV.push_back(0); m_moduleIV.push_back(1.4); m_moduleIV.push_back(0); m_moduleIV.push_back(-59.785); m_moduleIV.push_back(0.2); m_moduleIV.push_back(0); m_moduleIV.push_back(-0.4); m_moduleIV.push_back(34.860); m_moduleIV.push_back(29.509); m_moduleIV.push_back(20.205); //F424
39  m_moduleV.push_back(0); m_moduleV.push_back(95.744); m_moduleV.push_back(-1882.4); m_moduleV.push_back(180); m_moduleV.push_back(-45); m_moduleV.push_back(90); m_moduleV.push_back(1.4); m_moduleV.push_back(0); m_moduleV.push_back(-59.785); m_moduleV.push_back(0.2); m_moduleV.push_back(0); m_moduleV.push_back(-0.4); m_moduleV.push_back(34.860); m_moduleV.push_back(29.509); m_moduleV.push_back(20.205); //F420
40  m_moduleVI.push_back(-95.744); m_moduleVI.push_back(0); m_moduleVI.push_back(-1882.4); m_moduleVI.push_back(180); m_moduleVI.push_back(-45); m_moduleVI.push_back(180); m_moduleVI.push_back(1.4); m_moduleVI.push_back(0); m_moduleVI.push_back(-59.785); m_moduleVI.push_back(0.2); m_moduleVI.push_back(0); m_moduleVI.push_back(-0.4); m_moduleVI.push_back(34.860); m_moduleVI.push_back(29.509); m_moduleVI.push_back(20.205); //F422
41  m_moduleVII.push_back(0); m_moduleVII.push_back(-95.744); m_moduleVII.push_back(-1882.4); m_moduleVII.push_back(180); m_moduleVII.push_back(-45); m_moduleVII.push_back(270); m_moduleVII.push_back(0.4); m_moduleVII.push_back(0); m_moduleVII.push_back(-59.785); m_moduleVII.push_back(0.2); m_moduleVII.push_back(0); m_moduleVII.push_back(-0.4); m_moduleVII.push_back(34.860); m_moduleVII.push_back(29.509); m_moduleVII.push_back(20.205); //F408
42 
43  // template for property decalration
44  declareProperty("Modul0", m_module0);
45  declareProperty("ModulI", m_moduleI);
46  declareProperty("ModulII", m_moduleII);
47  declareProperty("ModulIII", m_moduleIII);
48  declareProperty("ModulIV", m_moduleIV);
49  declareProperty("ModulV", m_moduleV);
50  declareProperty("ModulVI", m_moduleVI);
51  declareProperty("ModulVII", m_moduleVII);
52  declareProperty("ModulesOn", m_moduleon=255);
53  declareProperty("BCMon", m_bcmon=true);
54  declareProperty("DBparameters", m_BDparameters=true);
55 }

◆ ~BCM_Builder()

virtual InDetDD::BCM_Builder::~BCM_Builder ( )
virtualdefault

default destructor

Member Function Documentation

◆ align()

StatusCode InDetDD::BCM_Builder::align ( IOVSVC_CALLBACK_ARGS  )
virtual

Definition at line 275 of file BCM_Builder.cxx.

276 {
277  // Return Failure since no function has been registered
278  return StatusCode::FAILURE;
279 }

◆ build()

StatusCode InDetDD::BCM_Builder::build ( GeoVPhysVol *  parent)
virtual

build the BCM geometry

Definition at line 79 of file BCM_Builder.cxx.

80 {
81  if(!m_bcmon) {
82  ATH_MSG_INFO("BCM disabled.");
83  return StatusCode::SUCCESS;
84  }
85 
86  // Unfortunately add is not part of the abstract interface of GeoVPhysVol so we have to dynamic cast
87  // to the concrete class.
88  GeoFullPhysVol* Phys = dynamic_cast<GeoFullPhysVol *>(pv);
89  if (!Phys) {
90  ATH_MSG_ERROR("Parent volume is not a GeoFullPhysVol as expected.");
91  return StatusCode::FAILURE;
92  }
93 
94 // ATH_MSG_INFO("BCMBuilder building..."); //commented out by D.Dobos on request by M.Elsing
95 
96  StoredMaterialManager * materialManager;
97  if (StatusCode::SUCCESS != detStore()->retrieve(materialManager, std::string("MATERIALS"))) {
98  ATH_MSG_ERROR("Failed to retrieve Material Manager");
99  return StatusCode::FAILURE;
100  }
101 
102  //create geometry manager
104 
105  StatusCode sc;
106 
107  if(m_BDparameters)
108  {
109  DecodeVersionKey versionKey("InnerDetector");
110 
111  // Issue error if AUTO.
112  if (versionKey.tag() == "AUTO")
113  {
114  ATH_MSG_ERROR("AUTO Atlas version. Please select a version.");
115  }
116 
117  ATH_MSG_INFO("Building BCM with Version Tag: " << versionKey.tag() << " at Node: " << versionKey.node());
118 
119  IRDBAccessSvc *accessSvc;
120  sc = service("RDBAccessSvc",accessSvc);
121  if (sc.isFailure())
122  {
123  ATH_MSG_FATAL("Could not locate RDBAccessSvc");
124  delete manager;
125  return StatusCode::FAILURE;
126  }
127 
128  // Print the BCM version tag:
129  std::string BCMVersionTag;
130  BCMVersionTag = accessSvc->getChildTag("BCM", versionKey.tag(), versionKey.node());
131  ATH_MSG_INFO("BCM Version: " << BCMVersionTag);
132 
133  // Check if version is empty. If so, then the BCM cannot be built. This may or may not be intentional. We just issue an INFO message.
134  if (BCMVersionTag.empty())
135  {
136  ATH_MSG_INFO("No BCM Version. BCM will not be built.");
137  delete manager;
138  return StatusCode::SUCCESS;
139  }
140 
141  IRDBRecordset_ptr DBmodul = accessSvc->getRecordsetPtr("BCMModule", versionKey.tag(), versionKey.node());
142  //DBmodul = accessSvc->getRecordset("BCMModule", "InnerDetector-DC3-Dev", "InnerDetector");
143 
144  ATH_MSG_DEBUG(" --> Number of records fetched = " << DBmodul->size());
145 
146  unsigned int ind;
147  long moduleNo;
148  //std::vector<double>* module_property = NULL;
149  for(ind = 0; ind < DBmodul->size(); ind++)
150  {
151  const IRDBRecord* rec = (*DBmodul)[ind];
152 
153  moduleNo = rec->getLong("MODULE_ID");
154  //check if this module is suposed to be builded
155 
156  unsigned int mask = (1 << moduleNo);
157  if((mask & m_moduleon) != mask)
158  {
159  //this module is not sopoused to be built
160  continue;
161  }
162 
163  std::vector<double> module_property;
164  module_property.push_back(rec->getFloat("TRANS_X"));
165  module_property.push_back(rec->getFloat("TRANS_Y"));
166  module_property.push_back(rec->getFloat("TRANS_Z"));
167  module_property.push_back(rec->getFloat("ROT_X"));
168  module_property.push_back(rec->getFloat("ROT_Y"));
169  module_property.push_back(rec->getFloat("ROT_Z"));
170  module_property.push_back(rec->getFloat("DIMESION_Z"));
171  module_property.push_back(rec->getFloat("DIAM_TRANS_Y"));
172  module_property.push_back(rec->getFloat("DIAM_TRANS_Z"));
173  module_property.push_back(rec->getFloat("DIAM_DIAM_X"));
174  module_property.push_back(rec->getFloat("DIAM_DAIM_Y"));
175  module_property.push_back(rec->getFloat("DIAM_DIAM_Z"));
176  module_property.push_back(rec->getFloat("OFF_H"));
177  module_property.push_back(rec->getFloat("OFF_I"));
178  module_property.push_back(rec->getFloat("OFF_J"));
179 
180  //set the BCM_GeometryManeger
181  manager->ModuleOn(moduleNo);
182  manager->Module(moduleNo)->Set(moduleNo, &module_property);
183  }
184  ATH_MSG_DEBUG(" --> Number succesfully read from DB");
185  }
186  else
187  {
188  //parameters via jobOptions
189  int moduleNo;
190  const std::vector<double>* module_property = nullptr;
191  for(moduleNo = 0; moduleNo < 8; moduleNo++)
192  {
193  unsigned int mask = (1 << moduleNo);
194  if((mask & m_moduleon) != mask)
195  {
196  //this module is not sopoused to be built
197  continue;
198  }
199  if(moduleNo == 0) module_property = &m_module0;
200  else if(moduleNo == 1) module_property = &m_moduleI;
201  else if(moduleNo == 2) module_property = &m_moduleII;
202  else if(moduleNo == 3) module_property = &m_moduleIII;
203  else if(moduleNo == 4) module_property = &m_moduleIV;
204  else if(moduleNo == 5) module_property = &m_moduleV;
205  else if(moduleNo == 6) module_property = &m_moduleVI;
206  else if(moduleNo == 7) module_property = &m_moduleVII;
207 
208  //set the BCM_GeometryManeger
209  manager->ModuleOn(moduleNo);
210  if (module_property){
211  manager->Module(moduleNo)->Set(moduleNo, module_property);
212  } else {
213  ATH_MSG_ERROR("module_property pointer is null in BCM_Builder.cxx");
214  }
215  }
216  }
217 
218  //we are now adding eight BCM modules
219  BCM_Module bcm;
220 
221  for(int i=0; i<8; i++)
222  {
223  //see if this module is to be built
224  if(!(manager->IsModuleOn(i)))
225  continue;
226 
227  //the module should be build
229 
230  //setting transformation
231  GeoTrf::Translation3D pos(parameters->Position_X(), parameters->Position_Y(), parameters->Position_Z());
232  GeoTrf::Transform3D rm = GeoTrf::RotateZ3D(parameters->Rotation_Z()*Gaudi::Units::deg)
233  * GeoTrf::RotateY3D(parameters->Rotation_Y()*Gaudi::Units::deg)
234  * GeoTrf::RotateX3D(parameters->Rotation_X()*Gaudi::Units::deg)
235  * GeoTrf::RotateZ3D(-90.*Gaudi::Units::deg)
236  * GeoTrf::RotateY3D(-90.*Gaudi::Units::deg);
237  GeoIntrusivePtr<GeoTransform> xform{new GeoTransform(GeoTrf::Transform3D(pos*rm))};
238  ATH_MSG_DEBUG(" --> Module " << i << " build!");
239 
240  //building module
241  int k=i+951;
242 
243  GeoIntrusivePtr<GeoNameTag> tag{new GeoNameTag("BCM Module")};
244  if (materialManager){
245  GeoVPhysVol* bcmModPhys = bcm.Build(materialManager, parameters, (msgLvl(MSG::INFO) ? &msg(MSG::INFO) : nullptr));
246  Phys->add(tag);
247  Phys->add(new GeoIdentifierTag(k));
248  Phys->add(xform);
249  Phys->add(bcmModPhys);
250  }
251  }
252 
253  ATH_MSG_DEBUG("Registering BCM_GeometryManager.");
254  sc = detStore()->record(manager, "BCMParameters");
255 
256  if (sc.isFailure())
257  {
258  ATH_MSG_ERROR("Could not register BCM_GeometryManager");
259  return StatusCode::FAILURE ;
260  }
261  return StatusCode::SUCCESS;
262 
263 }

◆ finalize()

StatusCode InDetDD::BCM_Builder::finalize ( )
virtual

standard Athena-Algorithm method

Definition at line 71 of file BCM_Builder.cxx.

72 {
74  return sc;
75 }

◆ initialize()

StatusCode InDetDD::BCM_Builder::initialize ( )
virtual

standard Athena-Algorithm method

Definition at line 59 of file BCM_Builder.cxx.

60 {
61 
63  if (sc.isFailure()) return sc;
64 
65  ATH_MSG_INFO("BCMBuilder initialize() successful in " << name());
66  return StatusCode::SUCCESS;
67 }

◆ registerCallback()

StatusCode InDetDD::BCM_Builder::registerCallback ( StoreGateSvc detStore)
virtual

For alignment.

Definition at line 268 of file BCM_Builder.cxx.

269 {
270  return StatusCode::SUCCESS;
271 }

Member Data Documentation

◆ m_bcmon

bool InDetDD::BCM_Builder::m_bcmon
private

Definition at line 64 of file BCM_Builder.h.

◆ m_BDparameters

bool InDetDD::BCM_Builder::m_BDparameters
private

Definition at line 65 of file BCM_Builder.h.

◆ m_module0

std::vector<double> InDetDD::BCM_Builder::m_module0
private

member variables for algorithm properties:

Definition at line 55 of file BCM_Builder.h.

◆ m_moduleI

std::vector<double> InDetDD::BCM_Builder::m_moduleI
private

Definition at line 56 of file BCM_Builder.h.

◆ m_moduleII

std::vector<double> InDetDD::BCM_Builder::m_moduleII
private

Definition at line 57 of file BCM_Builder.h.

◆ m_moduleIII

std::vector<double> InDetDD::BCM_Builder::m_moduleIII
private

Definition at line 58 of file BCM_Builder.h.

◆ m_moduleIV

std::vector<double> InDetDD::BCM_Builder::m_moduleIV
private

Definition at line 59 of file BCM_Builder.h.

◆ m_moduleon

unsigned int InDetDD::BCM_Builder::m_moduleon
private

Definition at line 63 of file BCM_Builder.h.

◆ m_moduleV

std::vector<double> InDetDD::BCM_Builder::m_moduleV
private

Definition at line 60 of file BCM_Builder.h.

◆ m_moduleVI

std::vector<double> InDetDD::BCM_Builder::m_moduleVI
private

Definition at line 61 of file BCM_Builder.h.

◆ m_moduleVII

std::vector<double> InDetDD::BCM_Builder::m_moduleVII
private

Definition at line 62 of file BCM_Builder.h.


The documentation for this class was generated from the following files:
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
InDetDD::BCM_Builder::m_moduleV
std::vector< double > m_moduleV
Definition: BCM_Builder.h:60
InDetDD::BCM_Builder::m_moduleVI
std::vector< double > m_moduleVI
Definition: BCM_Builder.h:61
InDetDD::BCM_Builder::m_bcmon
bool m_bcmon
Definition: BCM_Builder.h:64
InDetDD::BCM_Builder::m_BDparameters
bool m_BDparameters
Definition: BCM_Builder.h:65
python.tests.PyTestsLib.finalize
def finalize(self)
_info( "content of StoreGate..." ) self.sg.dump()
Definition: PyTestsLib.py:53
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
IRDBAccessSvc::getRecordsetPtr
virtual IRDBRecordset_ptr getRecordsetPtr(const std::string &node, const std::string &tag, const std::string &tag2node="", const std::string &connName="ATLASDD")=0
Provides access to the Recordset object containing HVS-tagged data.
initialize
void initialize()
Definition: run_EoverP.cxx:894
deg
#define deg
Definition: SbPolyhedron.cxx:17
BCM_Module
Definition: BCM_Module.h:25
BCM_ModuleParameters
Definition: BCM_ModuleParameters.h:20
BCM_Module::Build
GeoPhysVol * Build(StoredMaterialManager *mat_mgr, const BCM_ModuleParameters *parameters, MsgStream *msg)
Definition: BCM_Module.cxx:18
BCM_GeometryManager
Definition: BCM_GeometryManager.h:20
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
InDetDD::BCM_Builder::m_moduleIV
std::vector< double > m_moduleIV
Definition: BCM_Builder.h:59
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
InDetDD::BCM_Builder::m_moduleII
std::vector< double > m_moduleII
Definition: BCM_Builder.h:57
InDetDD::BCM_Builder::m_moduleVII
std::vector< double > m_moduleVII
Definition: BCM_Builder.h:62
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
IRDBAccessSvc::getChildTag
virtual std::string getChildTag(const std::string &childNode, const std::string &parentTag, const std::string &parentNode, const std::string &connName="ATLASDD")=0
Gets the tag name for the node by giving its parent node tag.
lumiFormat.i
int i
Definition: lumiFormat.py:92
beamspotman.n
n
Definition: beamspotman.py:731
IRDBAccessSvc
IRDBAccessSvc is an abstract interface to the athena service that provides the following functionalit...
Definition: IRDBAccessSvc.h:45
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
DecodeVersionKey
This is a helper class to query the version tags from GeoModelSvc and determine the appropriate tag a...
Definition: DecodeVersionKey.h:18
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
IRDBRecord::getLong
virtual long getLong(const std::string &fieldName) const =0
Get long field value.
IRDBRecordset_ptr
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition: IRDBAccessSvc.h:25
InDetDD::BCM_Builder::m_module0
std::vector< double > m_module0
member variables for algorithm properties:
Definition: BCM_Builder.h:55
python.PyKernel.detStore
detStore
Definition: PyKernel.py:41
InDetDD::BCM_Builder::m_moduleI
std::vector< double > m_moduleI
Definition: BCM_Builder.h:56
InDetDD::BCM_Builder::m_moduleIII
std::vector< double > m_moduleIII
Definition: BCM_Builder.h:58
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
IRDBRecord
IRDBRecord is one record in the IRDBRecordset object.
Definition: IRDBRecord.h:27
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
python.changerun.pv
pv
Definition: changerun.py:81
StoredMaterialManager
This class holds one or more material managers and makes them storeable, under StoreGate.
Definition: StoredMaterialManager.h:28
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
python.Logging.manager
manager
Definition: PhysicsAnalysis/D3PDTools/AnaAlgorithm/python/Logging.py:92
CaloCondBlobAlgs_fillNoiseFromASCII.tag
string tag
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:24
InDetDD::BCM_Builder::m_moduleon
unsigned int m_moduleon
Definition: BCM_Builder.h:63
IRDBRecord::getFloat
virtual float getFloat(const std::string &fieldName) const =0
Get float field value.
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
checkFileSG.ind
list ind
Definition: checkFileSG.py:118
fitman.k
k
Definition: fitman.py:528