ATLAS Offline Software
Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
RDBMaterialManager Class Referencefinal

#include <RDBMaterialManager.h>

Inheritance diagram for RDBMaterialManager:
Collaboration diagram for RDBMaterialManager:

Public Types

using MaterialMap = std::map< std::string, GeoIntrusivePtr< GeoMaterial > >
 
using MaterialMapIterator = MaterialMap::const_iterator
 

Public Member Functions

 RDBMaterialManager (ISvcLocator *pSvcLocator)
 
virtual ~RDBMaterialManager ()
 
virtual const GeoMaterial * getMaterial (const std::string &name) override
 
virtual const GeoElement * getElement (const std::string &name) override
 
virtual const GeoElement * getElement (unsigned int atomicNumber) override
 
virtual void addMaterial (const std::string &space, GeoMaterial *material) override
 
virtual StoredMaterialManager::MaterialMapIterator begin () const override
 
virtual StoredMaterialManager::MaterialMapIterator end () const override
 
virtual size_t size () override
 
virtual std::ostream & printAll (std::ostream &o=std::cout) const override
 

Private Types

using GeoEleVec = std::vector< GeoIntrusivePtr< GeoElement > >
 

Private Member Functions

StatusCode readMaterialsFromDB (ISvcLocator *pSvcLocator)
 
void buildSpecialMaterials ()
 
GeoElement * searchElementVector (const std::string &name) const
 
GeoElement * searchElementVector (const unsigned int atomicNumber) const
 
GeoMaterial * searchMaterialMap (const std::string &name) const
 

Private Attributes

IRDBRecordset_ptr m_elements
 
IRDBRecordset_ptr m_trtmaterials
 
IRDBRecordset_ptr m_trtmatcomponents
 
IRDBRecordset_ptr m_stdmaterials
 
IRDBRecordset_ptr m_stdmatcomponents
 
IRDBRecordset_ptr m_larmaterials
 
IRDBRecordset_ptr m_larmatcomponents
 
IRDBRecordset_ptr m_muomaterials
 
IRDBRecordset_ptr m_muomatcomponents
 
IRDBRecordset_ptr m_pixmaterials
 
IRDBRecordset_ptr m_pixmatcomponents
 
IRDBRecordset_ptr m_pixtbmaterials
 
IRDBRecordset_ptr m_pixtbmatcomponents
 
IRDBRecordset_ptr m_sctmaterials
 
IRDBRecordset_ptr m_sctmatcomponents
 
IRDBRecordset_ptr m_indetmaterials
 
IRDBRecordset_ptr m_indetmatcomponents
 
IRDBRecordset_ptr m_shieldmaterials
 
IRDBRecordset_ptr m_shieldmatcomponents
 
IRDBRecordset_ptr m_tilematerials
 
IRDBRecordset_ptr m_tilematcomponents
 
IRDBRecordset_ptr m_toromaterials
 
IRDBRecordset_ptr m_toromatcomponents
 
GeoEleVec m_elementVector
 
StoredMaterialManager::MaterialMap m_materialMap
 

Detailed Description

Definition at line 28 of file RDBMaterialManager.h.

Member Typedef Documentation

◆ GeoEleVec

using RDBMaterialManager::GeoEleVec = std::vector<GeoIntrusivePtr<GeoElement> >
private

Definition at line 94 of file RDBMaterialManager.h.

◆ MaterialMap

using StoredMaterialManager::MaterialMap = std::map<std::string, GeoIntrusivePtr<GeoMaterial> >
inherited

Definition at line 30 of file StoredMaterialManager.h.

◆ MaterialMapIterator

using StoredMaterialManager::MaterialMapIterator = MaterialMap::const_iterator
inherited

Definition at line 31 of file StoredMaterialManager.h.

Constructor & Destructor Documentation

◆ RDBMaterialManager()

RDBMaterialManager::RDBMaterialManager ( ISvcLocator *  pSvcLocator)

Definition at line 134 of file RDBMaterialManager.cxx.

135 {
136  if(!readMaterialsFromDB(pSvcLocator).isSuccess()) {
137  throw std::runtime_error("RDBMaterialManager failed to read Geometry DB");
138  }
139 }

◆ ~RDBMaterialManager()

RDBMaterialManager::~RDBMaterialManager ( )
virtualdefault

Member Function Documentation

◆ addMaterial()

void RDBMaterialManager::addMaterial ( const std::string &  space,
GeoMaterial *  material 
)
overridevirtual

Implements StoredMaterialManager.

Definition at line 670 of file RDBMaterialManager.cxx.

670  {
671 
672  MsgStream log(Athena::getMessageSvc(), "GeoModelSvc::RDBMaterialManager");
673  if(log.level()==MSG::VERBOSE)
674  log << MSG::VERBOSE << " ***** RDBMaterialManager::addMaterial() "<<endmsg;
675 
676  std::string key = std::string(material->getName());
677  // Check whether we already have materials with the same space::name defined
678  if(m_materialMap.find(key)!=m_materialMap.end())
679  log << MSG::WARNING << " Attempt to redefine material " << key << "!. The existing instance is kept. Please choose another name for new material" << endmsg;
680  else {
681  material->lock();
682  m_materialMap[key]=material;
683  }
684 }

◆ begin()

StoredMaterialManager::MaterialMapIterator RDBMaterialManager::begin ( ) const
overridevirtual

Implements StoredMaterialManager.

Definition at line 686 of file RDBMaterialManager.cxx.

687 {
688  return m_materialMap.begin();
689 }

◆ buildSpecialMaterials()

void RDBMaterialManager::buildSpecialMaterials ( )
private

Definition at line 718 of file RDBMaterialManager.cxx.

719 {
720  // Create special materials
721  GeoElement* ethElement = new GeoElement("Ether","ET",500.0,0.0);
722  m_elementVector.push_back(ethElement);
723  GeoMaterial* ether = new GeoMaterial("special::Ether",0.0);
724  ether->add(ethElement,1.);
725  addMaterial("special",ether);
726  // "Alternative" assembly material
727  GeoMaterial* hu = new GeoMaterial("special::HyperUranium",0.0);
728  hu->add(ethElement,1.);
729  addMaterial("special",hu);
730 }

◆ end()

StoredMaterialManager::MaterialMapIterator RDBMaterialManager::end ( ) const
overridevirtual

Implements StoredMaterialManager.

Definition at line 691 of file RDBMaterialManager.cxx.

692 {
693  return m_materialMap.end();
694 }

◆ getElement() [1/2]

const GeoElement * RDBMaterialManager::getElement ( const std::string &  name)
overridevirtual

Implements StoredMaterialManager.

Definition at line 580 of file RDBMaterialManager.cxx.

580  {
581 
582  unsigned int ind;
583 
584  std::string element_name;
585  std::string element_symbol;
586  std::string tmp_name;
587 
588  double element_a;
589  double element_z;
590 
591  GeoElement *pelement;
592 
593  pelement = nullptr;
594  pelement = searchElementVector( name);
595  if (pelement != nullptr)
596  return pelement;
597 
598  MsgStream log(Athena::getMessageSvc(), "GeoModelSvc::RDBMaterialManager");
599  if(log.level()==MSG::VERBOSE)
600  log << MSG::VERBOSE << " ***** getElement(): " << name <<endmsg;
601 
602  for(ind = 0; ind < m_elements->size(); ind++)
603  {
604  const IRDBRecord* rec = (*m_elements)[ind];
605 
606  tmp_name = rec->getString("NAME");
607 
608  if( name == tmp_name)
609  {
610  element_name = rec->getString("NAME");
611  element_symbol = rec->getString("SYMBOL");
612  element_a = rec->getDouble("A");
613  element_z = rec->getDouble("Z");
614 
615  pelement = new GeoElement( element_name , element_symbol ,element_z , element_a *(GeoModelKernelUnits::gram/Gaudi::Units::mole));
616 
617  // a table to keep the memory allocation, and easy for delete
618  m_elementVector.push_back( pelement);
619 
620  break;
621  }
622  }
623  if (ind == m_elements->size()) return nullptr;
624 
625  return pelement;
626 
627 }

◆ getElement() [2/2]

const GeoElement * RDBMaterialManager::getElement ( unsigned int  atomicNumber)
overridevirtual

Implements StoredMaterialManager.

Definition at line 630 of file RDBMaterialManager.cxx.

630  {
631 
632  unsigned int ind;
633 
634  std::string element_name;
635  std::string element_symbol;
636 
637  double element_a;
638  double element_z;
639 
640  GeoElement* pelement(0);
641 
642  MsgStream log(Athena::getMessageSvc(), "GeoModelSvc::RDBMaterialManager");
643  if(log.level()==MSG::VERBOSE)
644  log << MSG::VERBOSE << " ***** const getElement(atomicNumber) const : " << atomicNumber <<endmsg;
645 
646  for(ind = 0; ind < m_elements->size(); ind++)
647  {
648  const IRDBRecord* rec = (*m_elements)[ind];
649 
650  if(atomicNumber == rec->getDouble("A"))
651  {
652  element_name = rec->getString("NAME");
653  element_symbol = rec->getString("SYMBOL");
654  element_a = rec->getDouble("A");
655  element_z = rec->getDouble("Z");
656 
657  pelement = new GeoElement( element_name , element_symbol ,element_z , element_a *(GeoModelKernelUnits::gram/Gaudi::Units::mole));
658 
659  // a table to keep the memory allocation, and easy for delete
660  m_elementVector.push_back( pelement);
661 
662  break;
663  }
664  }
665  if (ind == m_elements->size()) return nullptr;
666 
667  return pelement;
668 }

◆ getMaterial()

const GeoMaterial * RDBMaterialManager::getMaterial ( const std::string &  name)
overridevirtual

Implements StoredMaterialManager.

Definition at line 375 of file RDBMaterialManager.cxx.

375  {
376 
377  unsigned int ind{0}, com_ind{0};
378 
379  std::string material_name;
380  std::string tmp_name;
381  long material_id{0};
382  double material_density{0.};
383 
384 
385  std::string component_name{};
386  double component_fraction{0.};
387  int component_id{0};
388 
389  std::string detector;
390  std::string tmp_det;
391  std::string data_id;
392 
393 
394  std::string matcomponents_table;
395 
396  [[maybe_unused]] static const bool specialMaterialsDone = [this]() {
398  return true;
399  }();
400 
401  GeoMaterial* pmaterial;
402 
403  const GeoElement* p_com_element;
404 
405  IRDBRecordset_ptr tmp_materials;
406  IRDBRecordset_ptr tmp_matcomponents;
407 
408  MsgStream log(Athena::getMessageSvc(), "GeoModelSvc::RDBMaterialManager");
409  if(log.level()<=MSG::DEBUG)
410  log << MSG::DEBUG << " ***** getMaterial( ): " << name << endmsg;
411 
412  pmaterial = nullptr;
413  pmaterial = searchMaterialMap( name);
414  if (pmaterial!= nullptr)
415  return pmaterial;
416 
417  if(name.starts_with("std"))
418  {
419  detector = "std";
420  tmp_materials = m_stdmaterials;
421  tmp_matcomponents = m_stdmatcomponents;
422  data_id = "STDMATERIALS_DATA_ID";
423  }
424  else if(name.starts_with("trt"))
425  {
426  detector = "trt";
427  tmp_materials = m_trtmaterials;
428  tmp_matcomponents = m_trtmatcomponents;
429  data_id = "TRTMATERIALS_DATA_ID";
430  }
431  else if(name.starts_with("LAr"))
432  {
433  detector = "LAr";
434  tmp_materials = m_larmaterials;
435  tmp_matcomponents = m_larmatcomponents;
436  data_id = "LARMATERIALS_DATA_ID";
437  }
438  else if(name.starts_with("muo"))
439  {
440  detector = "muo";
441  tmp_materials = m_muomaterials;
442  tmp_matcomponents = m_muomatcomponents;
443  data_id = "MUOMATERIALS_DATA_ID";
444  }
445  else if(name.starts_with("pixtb"))
446  {
447  detector = "pixtb";
448  tmp_materials = m_pixtbmaterials;
449  tmp_matcomponents = m_pixtbmatcomponents;
450  data_id = "PIXELTBMATERIALS_DATA_ID";
451  }
452  else if(name.starts_with("pix"))
453  {
454  detector = "pix";
455  tmp_materials = m_pixmaterials;
456  tmp_matcomponents = m_pixmatcomponents;
457  data_id = "PIXMATERIALS_DATA_ID";
458  }
459  else if(name.starts_with("sct"))
460  {
461  detector = "sct";
462  tmp_materials = m_sctmaterials;
463  tmp_matcomponents = m_sctmatcomponents;
464  data_id = "SCTMATERIALS_DATA_ID";
465  }
466  else if(name.starts_with("indet"))
467  {
468  detector = "indet";
469  tmp_materials = m_indetmaterials;
470  tmp_matcomponents = m_indetmatcomponents;
471  data_id = "INDETMATERIALS_DATA_ID";
472  }
473  else if(name.starts_with("shield"))
474  {
475  detector = "shield";
476  tmp_materials = m_shieldmaterials;
477  tmp_matcomponents = m_shieldmatcomponents;
478  data_id = "SHIELDMATERIALS_DATA_ID";
479  }
480  else if(name.starts_with("tile"))
481  {
482  detector = "tile";
483  tmp_materials = m_tilematerials;
484  tmp_matcomponents = m_tilematcomponents;
485  data_id = "TILEMATERIALS_DATA_ID";
486  }
487  else if(name.starts_with("toro"))
488  {
489  detector = "toro";
490  tmp_materials = m_toromaterials;
491  tmp_matcomponents = m_toromatcomponents;
492  data_id = "TOROMATERIALS_DATA_ID";
493  }
494  else {return 0 ;}
495 
496  for( ind = 0; ind < tmp_materials->size(); ind++)
497  {
498  const IRDBRecord* rec = (*tmp_materials)[ind];
499  tmp_name = detector+"::"+rec->getString("NAME");
500 
501  if( name == tmp_name){
502  material_name =detector+"::"+rec->getString("NAME");
503  material_id = rec->getLong(data_id);
504  material_density = rec->getDouble("DENSITY");
505 
506  if(log.level()<=MSG::DEBUG)
507  log << MSG::DEBUG << " ***** Material: name id density: " << material_name <<" " << material_id <<" "<< material_density << endmsg;
508  break;
509  }
510  }
511 
512  if (ind == tmp_materials->size())
513  return nullptr;
514 
515  pmaterial = new GeoMaterial( material_name,material_density * (GeoModelKernelUnits::gram / Gaudi::Units::cm3));
516 
517  bool firstComponent = true;
518  bool hasSubMaterial = false;
519  bool calculateFraction = false;
520  double totalFraction = 0.;
521  std::vector <const GeoElement*> elementComponents;
522  std::vector <double> elementFractions;
523 
524  for( com_ind = 0; com_ind <tmp_matcomponents->size(); com_ind++)
525  {
526  const IRDBRecord* com_rec = (*tmp_matcomponents)[com_ind];
527 
528  component_id = com_rec->getLong("MATERIAL_ID");
529  if( component_id == material_id)
530  {
531  component_name = com_rec->getString("COMPNAME");
532  component_fraction = com_rec->getDouble("FRACTION");
533 
534  if(firstComponent)
535  {
536  firstComponent = false;
537  if(component_fraction>=1.)
538  calculateFraction = true;
539  }
540 
541  if( CheckElement( component_name) == 1)
542  {
543  p_com_element = getElement(component_name);
544 
545  if(calculateFraction)
546  {
547  totalFraction += component_fraction*p_com_element->getA();
548  elementComponents.push_back(p_com_element);
549  elementFractions.push_back(component_fraction);
550  }
551  else
552  pmaterial->add( p_com_element, component_fraction);
553 
554  }
555  else{
556  hasSubMaterial = true;
557  const GeoMaterial* p_com_material = getMaterial(component_name);
558  pmaterial->add(p_com_material, component_fraction);
559 
560  }
561  }
562  }
563 
564  if(calculateFraction && hasSubMaterial && elementComponents.size()>0)
565  std::cerr << material_name << " description should be changed. Please indicate the exact fraction for elements\n";
566 
567  if(calculateFraction && !elementComponents.empty()) {
568  double inv_totalFraction = 1. / totalFraction;
569  for(unsigned i=0; i<elementComponents.size(); i++)
570  pmaterial->add(elementComponents[i],elementFractions[i]*elementComponents[i]->getA() * inv_totalFraction);
571  }
572 
573  // a table to keep the memory allocation, and easy for delete
574  addMaterial(detector,pmaterial);
575 
576  return pmaterial;
577 }

◆ printAll()

std::ostream & RDBMaterialManager::printAll ( std::ostream &  o = std::cout) const
overridevirtual

Implements StoredMaterialManager.

Definition at line 701 of file RDBMaterialManager.cxx.

702 {
703  o << "============Material Manager Element List========================\n";
704  for (GeoElement* elt : m_elementVector){
705  o << elt->getSymbol() << '\t' << elt->getZ() << '\t' << elt->getA() * (Gaudi::Units::mole / GeoModelKernelUnits::gram) << '\t' << elt->getName() << "\n";
706  }
707 
708  for (const auto& p : m_materialMap){
709  o << "Material: " << p.first << " Density " << p.second->getDensity() * (Gaudi::Units::cm3 / GeoModelKernelUnits::gram) << "\n";
710  for (size_t i = 0; i< p.second->getNumElements();i++) {
711  o <<" ***** ***** "<< int (p.second->getFraction(i)*100) << "% \t" << p.second->getElement(i)->getName() << std::endl;
712  }
713  }
714 
715  return o;
716 }

◆ readMaterialsFromDB()

StatusCode RDBMaterialManager::readMaterialsFromDB ( ISvcLocator *  pSvcLocator)
private

Definition at line 141 of file RDBMaterialManager.cxx.

142 {
143  IGeoModelSvc* iGeoModel{};
144  IRDBAccessSvc* iAccessSvc{};
145  MsgStream log(Athena::getMessageSvc(), "GeoModelSvc::RDBMaterialManager");
146 
147  ATH_CHECK(pSvcLocator->service("GeoModelSvc",iGeoModel));
148  ATH_CHECK(pSvcLocator->service("RDBAccessSvc",iAccessSvc));
149 
150  auto warn = [&](const std::string & msg){
151  if (log.level()<=MSG::WARNING){
152  log << MSG::WARNING <<msg << endmsg;
153  }
154  };
155  auto debug = [&](const std::string & msg){
156  if (log.level()<=MSG::DEBUG){
157  log << MSG::DEBUG <<msg << endmsg;
158  }
159  };
160  const bool loadDefaults = iGeoModel->geoConfig() != GeoModel::GEO_RUN4;
161  auto defaulted = [=](const IRDBRecordset_ptr pRecordset) -> bool{
162  return (loadDefaults and pRecordset->size() == 0);
163  };
164  // Do not load defaults for RUN4
165  if (loadDefaults) debug("Will load material defaults if not present");
166 
167  // --- Standard materials, elements
168  DecodeVersionKey keyAtlas(iGeoModel, "ATLAS");
169  m_elements = iAccessSvc->getRecordsetPtr("Elements",keyAtlas.tag(),keyAtlas.node());
170  if(defaulted(m_elements)) {
171  warn("Getting Elements with default tag");
172  m_elements = iAccessSvc->getRecordsetPtr("Elements","Materials-00","Materials");
173  }
174  m_stdmatcomponents = iAccessSvc->getRecordsetPtr("StdMatComponents",keyAtlas.tag(),keyAtlas.node());
175  if(defaulted(m_stdmatcomponents)) {
176  warn("Getting StdMatComponents with default tag");
177  m_stdmatcomponents = iAccessSvc->getRecordsetPtr("StdMatComponents","Materials-00","Materials");
178  }
179  m_stdmaterials = iAccessSvc->getRecordsetPtr("StdMaterials",keyAtlas.tag(),keyAtlas.node());
180  if(defaulted(m_stdmaterials)) {
181  warn("Getting StdMaterials with default tag");
182  m_stdmaterials = iAccessSvc->getRecordsetPtr("StdMaterials","Materials-00","Materials");
183  }
184 
185  // --- Pixel materials
186  DecodeVersionKey keyPixel(iGeoModel, "Pixel");
187  m_pixmatcomponents = iAccessSvc->getRecordsetPtr("PixMatComponents",keyPixel.tag(),keyPixel.node());
188  if(defaulted(m_pixmatcomponents)) {
189  warn("Getting PixMatComponents with default tag");
190  m_pixmatcomponents = iAccessSvc->getRecordsetPtr("PixMatComponents","PixMatComponents-00");
191  }
192  m_pixmaterials = iAccessSvc->getRecordsetPtr("PixMaterials",keyPixel.tag(),keyPixel.node());
193  if(defaulted(m_pixmaterials)) {
194  warn("Getting PixMaterials with default tag");
195  m_pixmaterials = iAccessSvc->getRecordsetPtr("PixMaterials","PixMaterials-00");
196  }
197 
198  // --- Pixel materials for TB
199  //for test beam materials we just issue debug level messages. Perhaps this load can be fully omitted?
200  m_pixtbmatcomponents = iAccessSvc->getRecordsetPtr("PixelTBMatComponents",keyPixel.tag(),keyPixel.node());
201  if(defaulted( m_pixtbmatcomponents)) {
202  debug("Getting PixTBMatComponents with default tag" );
203  m_pixtbmatcomponents = iAccessSvc->getRecordsetPtr("PixMatComponents","PixMatComponents-00");
204  }
205  m_pixtbmaterials = iAccessSvc->getRecordsetPtr("PixelTBMaterials",keyPixel.tag(),keyPixel.node());
206  if(defaulted(m_pixtbmaterials)) {
207  debug("Getting PixTBMaterials with default tag");
208  m_pixtbmaterials = iAccessSvc->getRecordsetPtr("PixMaterials","PixMaterials-00");
209  }
210 
211  // --- SCT materials
212  DecodeVersionKey keySCT(iGeoModel, "SCT");
213  m_sctmatcomponents = iAccessSvc->getRecordsetPtr("SCTMatComponents",keySCT.tag(),keySCT.node());
214  if(defaulted(m_sctmatcomponents)) {
215  warn("Getting SCTMatComponents with default tag");
216  m_sctmatcomponents = iAccessSvc->getRecordsetPtr("SCTMatComponents","SCTMatComponents-00");
217  }
218 
219  m_sctmaterials = iAccessSvc->getRecordsetPtr("SCTMaterials",keySCT.tag(),keySCT.node());
220  if(defaulted(m_sctmaterials)) {
221  warn("Getting SCTMaterials with default tag");
222  m_sctmaterials = iAccessSvc->getRecordsetPtr("SCTMaterials","SCTMaterials-00");
223  }
224 
225  // --- TRT materials
226  DecodeVersionKey keyTRT(iGeoModel, "TRT");
227  m_trtmatcomponents = iAccessSvc->getRecordsetPtr("TrtMatComponents",keyTRT.tag(),keyTRT.node());
228  if(defaulted(m_trtmatcomponents)) {
229  warn("Getting TrtMatComponents with default tag");
230  m_trtmatcomponents = iAccessSvc->getRecordsetPtr("TrtMatComponents","TrtMatComponents-00");
231  }
232  m_trtmaterials = iAccessSvc->getRecordsetPtr("TrtMaterials",keyTRT.tag(),keyTRT.node());
233  if(defaulted(m_trtmaterials)) {
234  warn("Getting TrtMaterials with default tag");
235  m_trtmaterials = iAccessSvc->getRecordsetPtr("TrtMaterials","TrtMaterials-00");
236  }
237 
238  // --- InDet common materials
239  DecodeVersionKey keyInDet(iGeoModel, "InnerDetector");
240  m_indetmatcomponents = iAccessSvc->getRecordsetPtr("InDetMatComponents",keyInDet.tag(),keyInDet.node());
241  if(defaulted(m_indetmatcomponents)) {
242  debug("Getting InDetMatComponents with default tag");
243  m_indetmatcomponents = iAccessSvc->getRecordsetPtr("InDetMatComponents","InDetMatComponents-00");
244  }
245 
246  m_indetmaterials = iAccessSvc->getRecordsetPtr("InDetMaterials",keyInDet.tag(),keyInDet.node());
247  if(defaulted(m_indetmaterials)) {
248  debug("Getting InDetMaterials with default tag");
249  m_indetmaterials = iAccessSvc->getRecordsetPtr("InDetMaterials","InDetMaterials-00");
250  }
251 
252  // --- LAr materials
253  DecodeVersionKey keyLAr(iGeoModel, "LAr");
254  m_larmatcomponents = iAccessSvc->getRecordsetPtr("LArMatComponents",keyLAr.tag(),keyLAr.node());
255  if(defaulted(m_larmatcomponents)) {
256  warn("Getting LArMatComponents with default tag");
257  m_larmatcomponents = iAccessSvc->getRecordsetPtr("LArMatComponents","LArMatComponents-00");
258  }
259  m_larmaterials = iAccessSvc->getRecordsetPtr("LArMaterials",keyLAr.tag(),keyLAr.node());
260  if(defaulted(m_larmaterials)) {
261  warn("Getting LArMaterials with default tag");
262  m_larmaterials = iAccessSvc->getRecordsetPtr("LArMaterials","LArMaterials-00");
263  }
264 
265  // --- Tile materials
266  DecodeVersionKey keyTile(iGeoModel, "TileCal");
267  m_tilematcomponents = iAccessSvc->getRecordsetPtr("TileMatComponents",keyTile.tag(),keyTile.node());
268  if (defaulted(m_tilematcomponents)) {
269  warn("Getting TileMatComponents with default tag" );
270  m_tilematcomponents = iAccessSvc->getRecordsetPtr("TileMatComponents","TileMatComponents-00");
271  }
272  m_tilematerials = iAccessSvc->getRecordsetPtr("TileMaterials",keyTile.tag(),keyTile.node());
273  if(defaulted(m_tilematerials)) {
274  warn("Getting TileMaterials with default tag");
275  m_tilematerials = iAccessSvc->getRecordsetPtr("TileMaterials","TileMaterials-00");
276  }
277 
278  // --- Muon
279  DecodeVersionKey keyMuon(iGeoModel, "MuonSpectrometer");
280  m_muomatcomponents = iAccessSvc->getRecordsetPtr("MUOMatComponents",keyMuon.tag(),keyMuon.node());
281  if(defaulted(m_muomatcomponents)) {
282  warn("Getting MUOMatComponents with default tag");
283  m_muomatcomponents = iAccessSvc->getRecordsetPtr("MUOMatComponents","MUOMatComponents-00");
284  }
285  m_muomaterials = iAccessSvc->getRecordsetPtr("MUOMaterials",keyMuon.tag(),keyMuon.node());
286  if(defaulted(m_muomaterials)) {
287  warn("Getting MUOMaterials with default tag" );
288  m_muomaterials = iAccessSvc->getRecordsetPtr("MUOMaterials","MUOMaterials-00");
289  }
290  m_shieldmatcomponents = iAccessSvc->getRecordsetPtr("ShieldMatComponents",keyMuon.tag(),keyMuon.node());
291  if(defaulted(m_shieldmatcomponents)) {
292  warn("Getting ShieldMatComponents with default tag");
293  m_shieldmatcomponents = iAccessSvc->getRecordsetPtr("ShieldMatComponents","ShieldMatComponents-00");
294  }
295  m_shieldmaterials = iAccessSvc->getRecordsetPtr("ShieldMaterials",keyMuon.tag(),keyMuon.node());
296  if(defaulted(m_shieldmaterials)) {
297  warn("Getting ShieldMaterials with default tag");
298  m_shieldmaterials = iAccessSvc->getRecordsetPtr("ShieldMaterials","ShieldMaterials-00");
299  }
300  m_toromatcomponents = iAccessSvc->getRecordsetPtr("ToroMatComponents",keyMuon.tag(),keyMuon.node());
301  if(defaulted(m_toromatcomponents)) {
302  warn("Getting ToroMatComponents with default tag");
303  m_toromatcomponents = iAccessSvc->getRecordsetPtr("ToroMatComponents","ToroMatComponents-00");
304  }
305  m_toromaterials = iAccessSvc->getRecordsetPtr("ToroMaterials",keyMuon.tag(),keyMuon.node());
306  if(defaulted(m_toromaterials)) {
307  warn("Getting ToroMaterials with default tag");
308  m_toromaterials = iAccessSvc->getRecordsetPtr("ToroMaterials","ToroMaterials-00");
309  }
310  return StatusCode::SUCCESS;
311 }

◆ searchElementVector() [1/2]

GeoElement * RDBMaterialManager::searchElementVector ( const std::string &  name) const
private

Definition at line 336 of file RDBMaterialManager.cxx.

337 {
338  MsgStream log(Athena::getMessageSvc(), "GeoModelSvc::RDBMaterialManager");
339 
340  NameEquals matchByName(name);
341  GeoEleVec::const_iterator e=std::find_if(m_elementVector.begin(), m_elementVector.end(),matchByName);
342 
343  if (e!=m_elementVector.end()) {
344  if(log.level()==MSG::VERBOSE)
345  log << MSG::VERBOSE << " ***** in searchElementVector() search succes " << endmsg;
346  return *e;
347  }
348  else {
349  if(log.level()==MSG::VERBOSE)
350  log << MSG::VERBOSE << " ***** in searchElementVector() search fail " << endmsg;
351  return nullptr;
352  }
353 }

◆ searchElementVector() [2/2]

GeoElement * RDBMaterialManager::searchElementVector ( const unsigned int  atomicNumber) const
private

Definition at line 356 of file RDBMaterialManager.cxx.

357 {
358  MsgStream log(Athena::getMessageSvc(), "GeoModelSvc::RDBMaterialManager");
359 
360  NumberEquals matchByNumber(atomicNumber);
361  GeoEleVec::const_iterator e=std::find_if(m_elementVector.begin(), m_elementVector.end(), matchByNumber);
362 
363  if (e!=m_elementVector.end()) {
364  if(log.level()==MSG::VERBOSE)
365  log << MSG::VERBOSE << " ***** in searchElementVector(atomicNumber) search succes " << endmsg;
366  return *e;
367  }
368 
369  if(log.level()==MSG::VERBOSE)
370  log << MSG::VERBOSE << " ***** in searchElementVector(atomicNumber) search succes " << endmsg;
371  return nullptr;
372 
373 }

◆ searchMaterialMap()

GeoMaterial * RDBMaterialManager::searchMaterialMap ( const std::string &  name) const
private

Definition at line 316 of file RDBMaterialManager.cxx.

317 {
318  MsgStream log(Athena::getMessageSvc(), "GeoModelSvc::RDBMaterialManager");
319 
320  MaterialMap::const_iterator m = m_materialMap.find(std::string(name));
321 
322  if (m!=m_materialMap.end()) {
323  if(log.level()==MSG::VERBOSE)
324  log << MSG::VERBOSE << " ***** in searchMaterialMap(): search sucess " << endmsg;
325  return (*m).second;
326  }
327 
328  if(log.level()==MSG::VERBOSE)
329  log << MSG::VERBOSE << " ***** in searchMaterialMap(): search fail " << endmsg;
330 
331  return nullptr;
332 
333 }

◆ size()

size_t RDBMaterialManager::size ( )
overridevirtual

Implements StoredMaterialManager.

Definition at line 696 of file RDBMaterialManager.cxx.

697 {
698  return m_materialMap.size();
699 }

Member Data Documentation

◆ m_elements

IRDBRecordset_ptr RDBMaterialManager::m_elements
private

Definition at line 69 of file RDBMaterialManager.h.

◆ m_elementVector

GeoEleVec RDBMaterialManager::m_elementVector
private

Definition at line 95 of file RDBMaterialManager.h.

◆ m_indetmatcomponents

IRDBRecordset_ptr RDBMaterialManager::m_indetmatcomponents
private

Definition at line 86 of file RDBMaterialManager.h.

◆ m_indetmaterials

IRDBRecordset_ptr RDBMaterialManager::m_indetmaterials
private

Definition at line 85 of file RDBMaterialManager.h.

◆ m_larmatcomponents

IRDBRecordset_ptr RDBMaterialManager::m_larmatcomponents
private

Definition at line 76 of file RDBMaterialManager.h.

◆ m_larmaterials

IRDBRecordset_ptr RDBMaterialManager::m_larmaterials
private

Definition at line 75 of file RDBMaterialManager.h.

◆ m_materialMap

StoredMaterialManager::MaterialMap RDBMaterialManager::m_materialMap
private

Definition at line 96 of file RDBMaterialManager.h.

◆ m_muomatcomponents

IRDBRecordset_ptr RDBMaterialManager::m_muomatcomponents
private

Definition at line 78 of file RDBMaterialManager.h.

◆ m_muomaterials

IRDBRecordset_ptr RDBMaterialManager::m_muomaterials
private

Definition at line 77 of file RDBMaterialManager.h.

◆ m_pixmatcomponents

IRDBRecordset_ptr RDBMaterialManager::m_pixmatcomponents
private

Definition at line 80 of file RDBMaterialManager.h.

◆ m_pixmaterials

IRDBRecordset_ptr RDBMaterialManager::m_pixmaterials
private

Definition at line 79 of file RDBMaterialManager.h.

◆ m_pixtbmatcomponents

IRDBRecordset_ptr RDBMaterialManager::m_pixtbmatcomponents
private

Definition at line 82 of file RDBMaterialManager.h.

◆ m_pixtbmaterials

IRDBRecordset_ptr RDBMaterialManager::m_pixtbmaterials
private

Definition at line 81 of file RDBMaterialManager.h.

◆ m_sctmatcomponents

IRDBRecordset_ptr RDBMaterialManager::m_sctmatcomponents
private

Definition at line 84 of file RDBMaterialManager.h.

◆ m_sctmaterials

IRDBRecordset_ptr RDBMaterialManager::m_sctmaterials
private

Definition at line 83 of file RDBMaterialManager.h.

◆ m_shieldmatcomponents

IRDBRecordset_ptr RDBMaterialManager::m_shieldmatcomponents
private

Definition at line 88 of file RDBMaterialManager.h.

◆ m_shieldmaterials

IRDBRecordset_ptr RDBMaterialManager::m_shieldmaterials
private

Definition at line 87 of file RDBMaterialManager.h.

◆ m_stdmatcomponents

IRDBRecordset_ptr RDBMaterialManager::m_stdmatcomponents
private

Definition at line 74 of file RDBMaterialManager.h.

◆ m_stdmaterials

IRDBRecordset_ptr RDBMaterialManager::m_stdmaterials
private

Definition at line 73 of file RDBMaterialManager.h.

◆ m_tilematcomponents

IRDBRecordset_ptr RDBMaterialManager::m_tilematcomponents
private

Definition at line 90 of file RDBMaterialManager.h.

◆ m_tilematerials

IRDBRecordset_ptr RDBMaterialManager::m_tilematerials
private

Definition at line 89 of file RDBMaterialManager.h.

◆ m_toromatcomponents

IRDBRecordset_ptr RDBMaterialManager::m_toromatcomponents
private

Definition at line 92 of file RDBMaterialManager.h.

◆ m_toromaterials

IRDBRecordset_ptr RDBMaterialManager::m_toromaterials
private

Definition at line 91 of file RDBMaterialManager.h.

◆ m_trtmatcomponents

IRDBRecordset_ptr RDBMaterialManager::m_trtmatcomponents
private

Definition at line 72 of file RDBMaterialManager.h.

◆ m_trtmaterials

IRDBRecordset_ptr RDBMaterialManager::m_trtmaterials
private

Definition at line 71 of file RDBMaterialManager.h.


The documentation for this class was generated from the following files:
RDBMaterialManager::m_indetmatcomponents
IRDBRecordset_ptr m_indetmatcomponents
Definition: RDBMaterialManager.h:86
CheckElement
int CheckElement(std::string &name)
Definition: RDBMaterialManager.cxx:50
NumberEquals
Definition: RDBMaterialManager.cxx:41
RDBMaterialManager::m_shieldmatcomponents
IRDBRecordset_ptr m_shieldmatcomponents
Definition: RDBMaterialManager.h:88
RDBMaterialManager::addMaterial
virtual void addMaterial(const std::string &space, GeoMaterial *material) override
Definition: RDBMaterialManager.cxx:670
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
RDBMaterialManager::m_toromaterials
IRDBRecordset_ptr m_toromaterials
Definition: RDBMaterialManager.h:91
IGeoModelSvc
Definition: IGeoModelSvc.h:17
RDBMaterialManager::m_larmatcomponents
IRDBRecordset_ptr m_larmatcomponents
Definition: RDBMaterialManager.h:76
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
RDBMaterialManager::m_sctmaterials
IRDBRecordset_ptr m_sctmaterials
Definition: RDBMaterialManager.h:83
IRDBRecord::getString
virtual const std::string & getString(const std::string &fieldName) const =0
Get string field value.
RDBMaterialManager::m_materialMap
StoredMaterialManager::MaterialMap m_materialMap
Definition: RDBMaterialManager.h:96
RDBMaterialManager::m_muomaterials
IRDBRecordset_ptr m_muomaterials
Definition: RDBMaterialManager.h:77
RDBMaterialManager::m_trtmaterials
IRDBRecordset_ptr m_trtmaterials
Definition: RDBMaterialManager.h:71
cm3
#define cm3
RDBMaterialManager::m_sctmatcomponents
IRDBRecordset_ptr m_sctmatcomponents
Definition: RDBMaterialManager.h:84
python.SystemOfUnits.gram
int gram
Definition: SystemOfUnits.py:165
RDBMaterialManager::m_pixmaterials
IRDBRecordset_ptr m_pixmaterials
Definition: RDBMaterialManager.h:79
Athena::getMessageSvc
IMessageSvc * getMessageSvc(bool quiet=false)
Definition: getMessageSvc.cxx:20
TRT::Hit::detector
@ detector
Definition: HitInfo.h:78
RDBMaterialManager::m_stdmatcomponents
IRDBRecordset_ptr m_stdmatcomponents
Definition: RDBMaterialManager.h:74
RDBMaterialManager::m_elementVector
GeoEleVec m_elementVector
Definition: RDBMaterialManager.h:95
RDBMaterialManager::m_trtmatcomponents
IRDBRecordset_ptr m_trtmatcomponents
Definition: RDBMaterialManager.h:72
RDBMaterialManager::m_muomatcomponents
IRDBRecordset_ptr m_muomatcomponents
Definition: RDBMaterialManager.h:78
lumiFormat.i
int i
Definition: lumiFormat.py:92
IRDBAccessSvc
IRDBAccessSvc is an abstract interface to the athena service that provides the following functionalit...
Definition: IRDBAccessSvc.h:45
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
DecodeVersionKey
This is a helper class to query the version tags from GeoModelSvc and determine the appropriate tag a...
Definition: DecodeVersionKey.h:18
GeoModel::GEO_RUN4
@ GEO_RUN4
Definition: IGeoDbTagSvc.h:21
IRDBRecord::getLong
virtual long getLong(const std::string &fieldName) const =0
Get long field value.
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
RDBMaterialManager::readMaterialsFromDB
StatusCode readMaterialsFromDB(ISvcLocator *pSvcLocator)
Definition: RDBMaterialManager.cxx:141
IRDBRecordset_ptr
std::shared_ptr< IRDBRecordset > IRDBRecordset_ptr
Definition: IRDBAccessSvc.h:25
RDBMaterialManager::m_tilematerials
IRDBRecordset_ptr m_tilematerials
Definition: RDBMaterialManager.h:89
RDBMaterialManager::m_pixmatcomponents
IRDBRecordset_ptr m_pixmatcomponents
Definition: RDBMaterialManager.h:80
RDBMaterialManager::m_tilematcomponents
IRDBRecordset_ptr m_tilematcomponents
Definition: RDBMaterialManager.h:90
createCoolChannelIdFile.element_name
element_name
Definition: createCoolChannelIdFile.py:47
RDBMaterialManager::getMaterial
virtual const GeoMaterial * getMaterial(const std::string &name) override
Definition: RDBMaterialManager.cxx:375
RDBMaterialManager::m_toromatcomponents
IRDBRecordset_ptr m_toromatcomponents
Definition: RDBMaterialManager.h:92
RDBMaterialManager::m_stdmaterials
IRDBRecordset_ptr m_stdmaterials
Definition: RDBMaterialManager.h:73
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
debug
const bool debug
Definition: MakeUncertaintyPlots.cxx:53
ReadBadBitsFromCool.warn
warn
Definition: ReadBadBitsFromCool.py:43
RDBMaterialManager::getElement
virtual const GeoElement * getElement(const std::string &name) override
Definition: RDBMaterialManager.cxx:580
RDBMaterialManager::m_indetmaterials
IRDBRecordset_ptr m_indetmaterials
Definition: RDBMaterialManager.h:85
NameEquals
Definition: RDBMaterialManager.cxx:31
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
RDBMaterialManager::buildSpecialMaterials
void buildSpecialMaterials()
Definition: RDBMaterialManager.cxx:718
IRDBRecord
IRDBRecord is one record in the IRDBRecordset object.
Definition: IRDBRecord.h:27
DEBUG
#define DEBUG
Definition: page_access.h:11
RDBMaterialManager::searchMaterialMap
GeoMaterial * searchMaterialMap(const std::string &name) const
Definition: RDBMaterialManager.cxx:316
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
mole
#define mole
IRDBRecord::getDouble
virtual double getDouble(const std::string &fieldName) const =0
Get double field value.
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
RDBMaterialManager::m_pixtbmaterials
IRDBRecordset_ptr m_pixtbmaterials
Definition: RDBMaterialManager.h:81
RDBMaterialManager::m_shieldmaterials
IRDBRecordset_ptr m_shieldmaterials
Definition: RDBMaterialManager.h:87
python.AutoConfigFlags.msg
msg
Definition: AutoConfigFlags.py:7
RDBMaterialManager::m_pixtbmatcomponents
IRDBRecordset_ptr m_pixtbmatcomponents
Definition: RDBMaterialManager.h:82
checkFileSG.ind
list ind
Definition: checkFileSG.py:118
RDBMaterialManager::m_elements
IRDBRecordset_ptr m_elements
Definition: RDBMaterialManager.h:69
RDBMaterialManager::searchElementVector
GeoElement * searchElementVector(const std::string &name) const
Definition: RDBMaterialManager.cxx:336
RDBMaterialManager::m_larmaterials
IRDBRecordset_ptr m_larmaterials
Definition: RDBMaterialManager.h:75
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37