Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:17:46

0001 #include "PHG4DetectorGroupSubsystem.h"
0002 
0003 #include <g4main/PHG4Subsystem.h>  // for PHG4Subsystem
0004 
0005 #include <phparameter/PHParameters.h>
0006 #include <phparameter/PHParametersContainer.h>
0007 
0008 #include <pdbcalbase/PdbParameterMapContainer.h>
0009 
0010 #include <phool/PHCompositeNode.h>
0011 #include <phool/PHDataNode.h>
0012 #include <phool/PHNode.h>  // for PHNode
0013 #include <phool/PHNodeIterator.h>
0014 #include <phool/getClass.h>
0015 #include <phool/phool.h>
0016 
0017 #include <TSystem.h>
0018 
0019 #include <boost/format.hpp>
0020 
0021 // boost stacktrace has shadowed variables
0022 #pragma GCC diagnostic push
0023 #pragma GCC diagnostic ignored "-Wshadow"
0024 #include <boost/stacktrace.hpp>
0025 #pragma GCC diagnostic pop
0026 
0027 #include <cassert>  // for assert
0028 #include <cstdlib>  // for exit
0029 #include <iostream>
0030 #include <sstream>
0031 
0032 PHG4DetectorGroupSubsystem::PHG4DetectorGroupSubsystem(const std::string &name, const int lyr)
0033   : PHG4Subsystem(name)
0034   , m_ParamsContainerDefault(new PHParametersContainer(Name()))
0035   , m_Layer(lyr)
0036 {
0037   // put the layer into the name so we get unique names
0038   // for multiple layers
0039   std::ostringstream nam;
0040   nam << name << "_" << lyr;
0041   Name(nam.str());
0042 }
0043 
0044 int PHG4DetectorGroupSubsystem::Init(PHCompositeNode *topNode)
0045 {
0046   m_SaveTopNode = topNode;
0047   m_ParamsContainerDefault->set_name(Name());
0048   int iret = InitSubsystem(topNode);
0049   return iret;
0050 }
0051 
0052 int PHG4DetectorGroupSubsystem::InitRun(PHCompositeNode *topNode)
0053 {
0054   PHNodeIterator iter(topNode);
0055   PHCompositeNode *parNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "PAR"));
0056   PHCompositeNode *runNode = dynamic_cast<PHCompositeNode *>(iter.findFirst("PHCompositeNode", "RUN"));
0057 
0058   std::string g4geonodename = "G4GEO_";
0059   std::string paramnodename = "G4GEOPARAM_";
0060   std::string calibdetname;
0061   int isSuperDetector = 0;
0062   if (m_SuperDetector != "NONE")
0063   {
0064     g4geonodename += SuperDetector();
0065     m_ParamsContainer = findNode::getClass<PHParametersContainer>(parNode, g4geonodename);
0066     if (!m_ParamsContainer)
0067     {
0068       PHNodeIterator parIter(parNode);
0069       PHCompositeNode *DetNode = dynamic_cast<PHCompositeNode *>(parIter.findFirst("PHCompositeNode", SuperDetector()));
0070       if (!DetNode)
0071       {
0072         DetNode = new PHCompositeNode(SuperDetector());
0073         parNode->addNode(DetNode);
0074       }
0075       m_ParamsContainer = new PHParametersContainer(m_SuperDetector);
0076       DetNode->addNode(new PHDataNode<PHParametersContainer>(m_ParamsContainer, g4geonodename));
0077     }
0078     paramnodename += m_SuperDetector;
0079     calibdetname = m_SuperDetector;
0080     isSuperDetector = 1;
0081   }
0082   else
0083   {
0084     m_ParamsContainer = new PHParametersContainer(Name());
0085     g4geonodename += m_ParamsContainer->Name();
0086     parNode->addNode(new PHDataNode<PHParametersContainer>(m_ParamsContainer, g4geonodename));
0087     paramnodename += m_ParamsContainer->Name();
0088     calibdetname = m_ParamsContainer->Name();
0089   }
0090 
0091   PHParametersContainer::ConstRange begin_end = m_ParamsContainerDefault->GetAllParameters();
0092   for (PHParametersContainer::ConstIterator piter = begin_end.first; piter != begin_end.second; ++piter)
0093   {
0094     m_ParamsContainer->AddPHParameters(piter->first, piter->second);
0095   }
0096   // the content has been handed off to the param container on the node tree
0097   // clear our internal map of parameters and delete it to avoid it being used accidentally
0098   m_ParamsContainerDefault->clear();
0099   delete m_ParamsContainerDefault;
0100   m_ParamsContainerDefault = nullptr;
0101   // ASSUMPTION: if we read from DB and/or file we don't want the stuff from
0102   // the node tree
0103   // We leave the defaults intact in case there is no entry for
0104   // those in the object read from the DB or file
0105   // Order: read first DB, then calib file if both are enabled
0106   if (get_filetype() != PHG4DetectorGroupSubsystem::none)
0107   {
0108     ReadParamsFromFile(calibdetname, get_filetype(), isSuperDetector);
0109   }
0110   else
0111   {
0112     // if not filled from file or DB, check if we have a node containing those calibrations
0113     // on the node tree and load them (the embedding wants to use the
0114     // parameters saved on the previous pass)
0115     PdbParameterMapContainer *nodeparams = findNode::getClass<PdbParameterMapContainer>(topNode, paramnodename);
0116     if (nodeparams)
0117     {
0118       m_ParamsContainer->FillFrom(nodeparams);
0119     }
0120   }
0121   // parameters set in the macro always override whatever is read from
0122   // the node tree, DB or file
0123   UpdateParametersWithMacro();
0124   // save updated persistant copy on node tree
0125   PHCompositeNode *RunDetNode = runNode;
0126   if (m_SuperDetector != "NONE")
0127   {
0128     PHNodeIterator runIter(runNode);
0129     RunDetNode = dynamic_cast<PHCompositeNode *>(runIter.findFirst("PHCompositeNode", SuperDetector()));
0130     if (!RunDetNode)
0131     {
0132       RunDetNode = new PHCompositeNode(SuperDetector());
0133       runNode->addNode(RunDetNode);
0134     }
0135   }
0136   m_ParamsContainer->SaveToNodeTree(RunDetNode, paramnodename);
0137   // define the materials for the detector
0138   // at this point all flags are known so materials set in the macro can
0139   // be implemented here
0140   DefineMaterials();
0141   int iret = InitRunSubsystem(topNode);
0142   m_ParamsContainer->UpdateNodeTree(RunDetNode, paramnodename);
0143   if (Verbosity() > 0)
0144   {
0145     PdbParameterMapContainer *nodeparams = findNode::getClass<PdbParameterMapContainer>(topNode, paramnodename);
0146     std::cout << Name() << std::endl;
0147     nodeparams->print();
0148   }
0149   m_BeginRunExecutedFlag = 1;
0150   return iret;
0151 }
0152 
0153 void PHG4DetectorGroupSubsystem::SuperDetector(const std::string &name)
0154 {
0155   m_SuperDetector = name;
0156   return;
0157 }
0158 
0159 double PHG4DetectorGroupSubsystem::get_double_param(const int detid, const std::string &name) const
0160 {
0161   const PHParameters *params = m_ParamsContainer->GetParameters(detid);
0162   if (params)
0163   {
0164     return params->get_double_param(name);
0165   }
0166   else
0167   {
0168     std::cout << PHWHERE << " no parameters for detid " << detid << std::endl;
0169     gSystem->Exit(1);
0170     exit(1);
0171   }
0172 }
0173 
0174 int PHG4DetectorGroupSubsystem::get_int_param(const int detid, const std::string &name) const
0175 {
0176   const PHParameters *params = m_ParamsContainer->GetParameters(detid);
0177   if (params)
0178   {
0179     return params->get_int_param(name);
0180   }
0181   else
0182   {
0183     std::cout << PHWHERE << " no parameters for detid " << detid << std::endl;
0184     gSystem->Exit(1);
0185     exit(1);
0186   }
0187 }
0188 
0189 std::string
0190 PHG4DetectorGroupSubsystem::get_string_param(const int detid, const std::string &name) const
0191 {
0192   const PHParameters *params = m_ParamsContainer->GetParameters(detid);
0193   if (params)
0194   {
0195     return params->get_string_param(name);
0196   }
0197   else
0198   {
0199     std::cout << PHWHERE << " no parameters for detid " << detid << std::endl;
0200     gSystem->Exit(1);
0201     exit(1);
0202   }
0203 }
0204 
0205 void PHG4DetectorGroupSubsystem::set_double_param(const int detid, const std::string &name, const double dval)
0206 {
0207   auto iter = m_DefaultDoubleParamsMap.find(detid);
0208   if (iter == m_DefaultDoubleParamsMap.end())
0209   {
0210     std::cout << "called like set_double_param(" << detid << ", \""
0211               << name << "\", " << dval << ")" << std::endl;
0212     std::cout << "detid " << detid << " not implemented" << std::endl;
0213     std::cout << "implemented detector ids: " << std::endl;
0214     for (auto &iter2 : m_DefaultDoubleParamsMap)
0215     {
0216       std::cout << "detid: " << iter2.first << std::endl;
0217     }
0218     return;
0219   }
0220   if (iter->second.find(name) == iter->second.end())
0221   {
0222     std::cout << "double parameter " << name << " not implemented for detid "
0223               << detid << std::endl;
0224     std::cout << "implemented double parameters are:" << std::endl;
0225     for (auto &iter2 : iter->second)
0226     {
0227       std::cout << iter2.first << std::endl;
0228     }
0229     return;
0230   }
0231   // here we know we have entries for the detector id and the variable name exists
0232   // in the defaults, so now lets set it
0233   // with C++11 insert returns a pair of an iterator to the element and
0234   // a boolean if the object was inserted or if it already exist (in which case it
0235   // does not get replaced). We do not check this because we do not care if a new map
0236   // was inserted or not. All we need is the iterator to it
0237   std::map<const std::string, double> newdmap;
0238   auto ret = m_MacroDoubleParamsMap.insert(make_pair(detid, newdmap));
0239   // here we use the operator [] rather than insert because we
0240   // want to create a new entry if [name] does not exist. If it does
0241   // exist we want to overwrite it (so even if a parameter is set twice,
0242   // the last setting in the macro is used). Using insert would preserve the first
0243   // parameter setting
0244   ret.first->second[name] = dval;
0245   return;
0246 }
0247 
0248 void PHG4DetectorGroupSubsystem::set_int_param(const int detid, const std::string &name, const int ival)
0249 {
0250   auto iter = m_DefaultIntegerParamsMap.find(detid);
0251   if (iter == m_DefaultIntegerParamsMap.end())
0252   {
0253     std::cout << "called like set_int_param(" << detid << ", \""
0254               << name << "\", " << ival << ")" << std::endl;
0255     std::cout << "detid " << detid << " not implemented" << std::endl;
0256     std::cout << "implemented detector ids: " << std::endl;
0257     for (auto &iter2 : m_DefaultIntegerParamsMap)
0258     {
0259       std::cout << "detid: " << iter2.first << std::endl;
0260     }
0261     return;
0262   }
0263   if (iter->second.find(name) == iter->second.end())
0264   {
0265     std::cout << "int parameter " << name << " not implemented for detid"
0266               << detid << std::endl;
0267     std::cout << "implemented int parameters are:" << std::endl;
0268     for (auto &iter2 : iter->second)
0269     {
0270       std::cout << iter2.first << std::endl;
0271     }
0272     return;
0273   }
0274   // here we know we have entries for the detector id and the variable name exists
0275   // in the defaults, so now lets set it
0276   std::map<const std::string, int> newintmap;
0277   auto ret = m_MacroIntegerParamsMap.insert(make_pair(detid, newintmap));
0278   // here we use the operator [] rather than insert because we
0279   // want to create a new entry if [name] does not exist. If it does
0280   // exist we want to overwrite it (so even if a parameter is set twice,
0281   // the last setting in the macro is used). Using insert would preserve the first
0282   // parameter setting
0283   ret.first->second[name] = ival;
0284 }
0285 
0286 void PHG4DetectorGroupSubsystem::set_string_param(const int detid, const std::string &name, const std::string &sval)
0287 {
0288   auto iter = m_DefaultStringParamsMap.find(detid);
0289   if (iter == m_DefaultStringParamsMap.end())
0290   {
0291     std::cout << "called like set_string_param(" << detid << ", \""
0292               << name << "\", " << sval << ")" << std::endl;
0293     std::cout << "detid " << detid << " not implemented" << std::endl;
0294     std::cout << "implemented detector ids: " << std::endl;
0295     for (auto &iter2 : m_DefaultStringParamsMap)
0296     {
0297       std::cout << "detid: " << iter2.first << std::endl;
0298     }
0299     return;
0300   }
0301   if (iter->second.find(name) == iter->second.end())
0302   {
0303     std::cout << "string parameter " << name << " not implemented for detid "
0304               << detid << std::endl;
0305     std::cout << "implemented string parameters are:" << std::endl;
0306     for (auto &iter2 : iter->second)
0307     {
0308       std::cout << iter2.first << std::endl;
0309     }
0310     return;
0311   }
0312   // here we know we have entries for the detector id and the variable name exists
0313   // in the defaults, so now lets set it
0314 
0315   // with C++11 insert returns a pair of an iterator to the element and
0316   // a boolean if the object was inserted or if it already exist (in which case it
0317   // does not get replaced). We do not check this because we do not care if a new map
0318   // was inserted or not. All we need is the iterator to it
0319   std::map<const std::string, std::string> newdmap;
0320   auto ret = m_MacroStringParamsMap.insert(make_pair(detid, newdmap));
0321   // here we use the operator [] rather than insert because we
0322   // want to create a new entry if [name] does not exist. If it does
0323   // exist we want to overwrite it (so even if a parameter is set twice,
0324   // the last setting in the macro is used). Using insert would preserve the first
0325   // parameter setting
0326   ret.first->second[name] = sval;
0327   return;
0328 }
0329 
0330 void PHG4DetectorGroupSubsystem::UpdateParametersWithMacro()
0331 {
0332   for (auto &iter1 : m_MacroDoubleParamsMap)
0333   {
0334     PHParameters *params = GetParamsContainer()->GetParametersToModify(iter1.first);
0335     for (auto &iter2 : iter1.second)
0336     {
0337       params->set_double_param(iter2.first, iter2.second);
0338     }
0339   }
0340 
0341   for (auto &iter1 : m_MacroIntegerParamsMap)
0342   {
0343     PHParameters *params = GetParamsContainer()->GetParametersToModify(iter1.first);
0344     for (auto &iter2 : iter1.second)
0345     {
0346       params->set_int_param(iter2.first, iter2.second);
0347     }
0348   }
0349 
0350   for (auto &iter1 : m_MacroStringParamsMap)
0351   {
0352     PHParameters *params = GetParamsContainer()->GetParametersToModify(iter1.first);
0353     for (auto &iter2 : iter1.second)
0354     {
0355       params->set_string_param(iter2.first, iter2.second);
0356     }
0357   }
0358   return;
0359 }
0360 
0361 // all set_default_XXX_param methods work the same way
0362 // They use the returned pair <iterator, bool> for c++11 map.insert. The boolean tells us
0363 // if a new element was inserted (true) or an iterator to the exisiting one is returned (false)
0364 // map.insert does not overwrite existing entries. So what we are doing here is
0365 // get an iterator to the double/int/string map for a given detector (for us it does not
0366 // matter if it already exists or a new one is inserted, we just need an iterator to it)
0367 // Then we use map.insert to insert the new double/int/string parameter into the
0368 // double/int/string map. If
0369 // the return boolean is false, it means an entry for this parameter already exists
0370 // which is just bad (means you called set_default_XXX_param for the same parameter
0371 // twice in your code), so tell the user to fix the code and exit
0372 
0373 void PHG4DetectorGroupSubsystem::set_default_double_param(const int detid, const std::string &name, const double dval)
0374 {
0375   std::map<const std::string, double> newdoublemap;
0376   auto ret = m_DefaultDoubleParamsMap.insert(make_pair(detid, newdoublemap));
0377   auto ret2 = ret.first->second.insert(make_pair(name, dval));
0378   if (ret2.second == false)
0379   {
0380     std::cout << PHWHERE << "Default double Parameter " << name
0381               << " for detid " << detid << " already set to "
0382               << ret.first->second[name] << " will not overwrite with " << dval << std::endl;
0383     std::cout << "Means: You are calling set_default_double_param twice for the same parameter" << std::endl;
0384     std::cout << "Please make up your mind and call it only once using the correct default" << std::endl;
0385     gSystem->Exit(1);
0386     exit(1);
0387   }
0388   return;
0389 }
0390 
0391 void PHG4DetectorGroupSubsystem::set_default_int_param(const int detid, const std::string &name, const int ival)
0392 {
0393   std::map<const std::string, int> newintmap;
0394   auto ret = m_DefaultIntegerParamsMap.insert(make_pair(detid, newintmap));
0395   auto ret2 = ret.first->second.insert(make_pair(name, ival));
0396   if (ret2.second == false)
0397   {
0398     std::cout << PHWHERE << "Default integer Parameter " << name
0399               << " for detid " << detid << " already set to "
0400               << ret.first->second[name] << " will not overwrite with " << ival << std::endl;
0401     std::cout << "Means: You are calling set_default_int_param twice for the same parameter" << std::endl;
0402     std::cout << "Please make up your mind and call it only once using the correct default" << std::endl;
0403     gSystem->Exit(1);
0404     exit(1);
0405   }
0406   return;
0407 }
0408 
0409 void PHG4DetectorGroupSubsystem::set_default_string_param(const int detid, const std::string &name, const std::string &sval)
0410 {
0411   std::map<const std::string, std::string> newstringmap;
0412   auto ret = m_DefaultStringParamsMap.insert(make_pair(detid, newstringmap));
0413   auto ret2 = ret.first->second.insert(make_pair(name, sval));
0414   if (ret2.second == false)
0415   {
0416     std::cout << PHWHERE << "Default String Parameter " << name
0417               << " for detid " << detid << " already set to "
0418               << ret.first->second[name] << " will not overwrite with " << sval << std::endl;
0419     std::cout << "Means: You are calling set_default_string_param twice for the same parameter" << std::endl;
0420     std::cout << "Please make up your mind and call it only once using the correct default" << std::endl;
0421     gSystem->Exit(1);
0422     exit(1);
0423   }
0424   return;
0425 }
0426 
0427 void PHG4DetectorGroupSubsystem::InitializeParameters()
0428 {
0429   for (auto &iter : m_LayerSet)
0430   {
0431     set_default_int_param(iter, "absorberactive", 0);
0432     set_default_int_param(iter, "absorbertruth", 0);
0433     set_default_int_param(iter, "blackhole", 0);
0434     set_default_int_param(iter, "supportactive", 0);
0435   }
0436   SetDefaultParameters();  // call method from specific subsystem
0437   // now load those parameters to our params class
0438   for (const auto &iter1 : m_DefaultDoubleParamsMap)
0439   {
0440     PHParameters *detidparams = m_ParamsContainerDefault->GetParametersToModify(iter1.first);
0441     if (!detidparams)
0442     {
0443       detidparams = new PHParameters((boost::format("%s_%d") % Name() % iter1.first).str());
0444       m_ParamsContainerDefault->AddPHParameters(iter1.first, detidparams);
0445     }
0446     for (auto &iter2 : iter1.second)
0447     {
0448       detidparams->set_double_param(iter2.first, iter2.second);
0449     }
0450   }
0451 
0452   for (auto &iter1 : m_DefaultIntegerParamsMap)
0453   {
0454     PHParameters *detidparams = m_ParamsContainerDefault->GetParametersToModify(iter1.first);
0455     if (!detidparams)
0456     {
0457       detidparams = new PHParameters((boost::format("%s_%d") % Name() % iter1.first).str());
0458       m_ParamsContainerDefault->AddPHParameters(iter1.first, detidparams);
0459     }
0460     for (auto &iter2 : iter1.second)
0461     {
0462       detidparams->set_int_param(iter2.first, iter2.second);
0463     }
0464   }
0465 
0466   for (auto &iter1 : m_DefaultStringParamsMap)
0467   {
0468     PHParameters *detidparams = m_ParamsContainerDefault->GetParametersToModify(iter1.first);
0469     if (!detidparams)
0470     {
0471       detidparams = new PHParameters((boost::format("%s_%d") % Name() % iter1.first).str());
0472       m_ParamsContainerDefault->AddPHParameters(iter1.first, detidparams);
0473     }
0474     for (auto &iter2 : iter1.second)
0475     {
0476       detidparams->set_string_param(iter2.first, iter2.second);
0477     }
0478   }
0479 }
0480 
0481 int PHG4DetectorGroupSubsystem::SaveParamsToFile(const PHG4DetectorGroupSubsystem::FILE_TYPE ftyp)
0482 {
0483   std::string extension;
0484   switch (ftyp)
0485   {
0486   case xml:
0487     extension = "xml";
0488     break;
0489   case root:
0490     extension = "root";
0491     break;
0492   default:
0493     std::cout << PHWHERE << "filetype " << ftyp << " not implemented" << std::endl;
0494     exit(1);
0495   }
0496   int iret = 0;
0497   assert(m_ParamsContainer);
0498   iret = m_ParamsContainer->WriteToFile(extension, m_CalibFileDir);
0499   if (iret)
0500   {
0501     std::cout << "problem saving to " << extension << " file " << std::endl;
0502   }
0503   return iret;
0504 }
0505 
0506 int PHG4DetectorGroupSubsystem::ReadParamsFromFile(const std::string & /*name*/, const PHG4DetectorGroupSubsystem::FILE_TYPE ftyp, const int /*issuper*/)
0507 {
0508   std::string extension;
0509   switch (ftyp)
0510   {
0511   case xml:
0512     extension = "xml";
0513     break;
0514   case root:
0515     extension = "root";
0516     break;
0517   default:
0518     std::cout << PHWHERE << "filetype " << ftyp << " not implemented" << std::endl;
0519     exit(1);
0520   }
0521   int iret = 1;
0522   //  int iret = params->ReadFromFile(name, extension, layer, issuper, m_CalibFileDir);
0523   //  if (iret)
0524   std::cout << boost::stacktrace::stacktrace();
0525   std::cout << std::endl
0526             << "DO NOT PANIC - this is not a segfault" << std::endl;
0527   std::cout << "This method is a dummy, tell the offline gurus about it and give this stack trace" << std::endl;
0528   std::cout << "problem reading from " << extension << " file " << std::endl;
0529   std::cout << "problem reading from DB" << std::endl;
0530   gSystem->Exit(1);
0531   return iret;
0532 }
0533 
0534 void PHG4DetectorGroupSubsystem::SetActive(const int detid, const int i)
0535 {
0536   set_int_param(detid, "active", i);
0537 }
0538 
0539 void PHG4DetectorGroupSubsystem::SetActive(const int i)
0540 {
0541   for (auto &detid : m_LayerSet)
0542   {
0543     set_int_param(detid, "active", i);
0544   }
0545 }
0546 
0547 void PHG4DetectorGroupSubsystem::SetAbsorberActive(const int detid, const int i)
0548 {
0549   set_int_param(detid, "absorberactive", i);
0550 }
0551 
0552 void PHG4DetectorGroupSubsystem::SetAbsorberActive(const int i)
0553 {
0554   for (auto &detid : m_LayerSet)
0555   {
0556     set_int_param(detid, "absorberactive", i);
0557   }
0558 }
0559 
0560 void PHG4DetectorGroupSubsystem::SetSupportActive(const int detid, const int i)
0561 {
0562   set_int_param(detid, "supportactive", i);
0563 }
0564 
0565 void PHG4DetectorGroupSubsystem::SetSupportActive(const int i)
0566 {
0567   for (auto &detid : m_LayerSet)
0568   {
0569     set_int_param(detid, "supportactive", i);
0570   }
0571 }
0572 
0573 void PHG4DetectorGroupSubsystem::BlackHole(const int detid, const int i)
0574 {
0575   set_int_param(detid, "blackhole", i);
0576 }
0577 
0578 void PHG4DetectorGroupSubsystem::BlackHole(const int i)
0579 {
0580   for (auto &detid : m_LayerSet)
0581   {
0582     set_int_param(detid, "blackhole", i);
0583   }
0584 }
0585 
0586 void PHG4DetectorGroupSubsystem::SetAbsorberTruth(const int detid, const int i)
0587 {
0588   set_int_param(detid, "absorbertruth", i);
0589 }
0590 
0591 void PHG4DetectorGroupSubsystem::SetAbsorberTruth(const int i)
0592 {
0593   for (auto &detid : m_LayerSet)
0594   {
0595     set_int_param(detid, "absorbertruth", i);
0596   }
0597 }
0598 
0599 void PHG4DetectorGroupSubsystem::PrintDefaultParams() const
0600 {
0601   std::cout << "Default Parameters: " << std::endl;
0602   std::cout << "int values: " << std::endl;
0603   for (auto &iter1 : m_DefaultIntegerParamsMap)
0604   {
0605     std::cout << "Detector id: " << iter1.first << std::endl;
0606     for (auto &iter2 : iter1.second)
0607     {
0608       std::cout << iter2.first << " : " << iter2.second << std::endl;
0609     }
0610   }
0611   std::cout << "double values: " << std::endl;
0612   for (auto &iter1 : m_DefaultDoubleParamsMap)
0613   {
0614     std::cout << "Detector id: " << iter1.first << std::endl;
0615     for (auto &iter2 : iter1.second)
0616     {
0617       std::cout << iter2.first << " : " << iter2.second << std::endl;
0618     }
0619   }
0620   std::cout << "string values: " << std::endl;
0621   for (auto &iter1 : m_DefaultStringParamsMap)
0622   {
0623     std::cout << "Detector id: " << iter1.first << std::endl;
0624     for (auto &iter2 : iter1.second)
0625     {
0626       std::cout << iter2.first << " : " << iter2.second << std::endl;
0627     }
0628   }
0629   return;
0630 }
0631 
0632 void PHG4DetectorGroupSubsystem::PrintMacroParams() const
0633 {
0634   std::cout << "Macro Parameters: " << std::endl;
0635   std::cout << "int values: " << std::endl;
0636   for (auto &iter1 : m_MacroIntegerParamsMap)
0637   {
0638     std::cout << "Detector id: " << iter1.first << std::endl;
0639     for (auto &iter2 : iter1.second)
0640     {
0641       std::cout << iter2.first << " : " << iter2.second << std::endl;
0642     }
0643   }
0644   std::cout << "double values: " << std::endl;
0645   for (auto &iter1 : m_MacroDoubleParamsMap)
0646   {
0647     std::cout << "Detector id: " << iter1.first << std::endl;
0648     for (auto &iter2 : iter1.second)
0649     {
0650       std::cout << iter2.first << " : " << iter2.second << std::endl;
0651     }
0652   }
0653   std::cout << "string values: " << std::endl;
0654   for (auto &iter1 : m_MacroStringParamsMap)
0655   {
0656     std::cout << "Detector id: " << iter1.first << std::endl;
0657     for (auto &iter2 : iter1.second)
0658     {
0659       std::cout << iter2.first << " : " << iter2.second << std::endl;
0660     }
0661   }
0662   return;
0663 }