CMS 3D CMS Logo

CaloSimParametersFromDD.cc
Go to the documentation of this file.
8 #include <iostream>
9 #include <iomanip>
10 
11 //#define EDM_ML_DEBUG
12 
13 template <typename T>
14 void myPrint(std::string value, const std::vector<T>& vec) {
15  edm::LogVerbatim("HCalGeom") << "CaloSimParametersFromDD: " << vec.size() << " entries for " << value << ":";
16  unsigned int i(0);
17  for (const auto& e : vec) {
18  edm::LogVerbatim("HCalGeom") << " (" << i << ") " << e;
19  ++i;
20  }
21 }
22 
24 #ifdef EDM_ML_DEBUG
25  edm::LogVerbatim("HCalGeom")
26  << "Inside CaloSimParametersFromDD::build(const DDCompactView*, CaloSimulationParameters&)";
27 #endif
28  // Get the names
29  std::string attribute = "ReadOutName";
30  std::string name = "CaloHitsTk";
32  DDFilteredView fv(*cpv, filter);
33  fv.firstChild();
35 
36  php.caloNames_ = getNames("Calorimeter", sv, false);
37  php.levels_ = getNumbers("Levels", sv, false);
38  php.neighbours_ = getNumbers("Neighbours", sv, false);
39  php.insideNames_ = getNames("Inside", sv, false);
40  php.insideLevel_ = getNumbers("InsideLevel", sv, false);
41  php.fCaloNames_ = getNames("FineCalorimeter", sv, true);
42  php.fLevels_ = getNumbers("FineLevels", sv, true);
43 
44  return this->buildParameters(php);
45 }
46 
48 #ifdef EDM_ML_DEBUG
49  edm::LogVerbatim("HCalGeom")
50  << "Inside CaloSimParametersFromDD::build(const cms::DDCompactView*, CaloSimulationParameters&)";
51 #endif
52  // Get the names
53  cms::DDFilteredView fv(cpv->detector(), cpv->detector()->worldVolume());
54  php.caloNames_ = fv.get<std::vector<std::string> >("calo", "Calorimeter");
55  php.levels_ = dbl_to_int(fv.get<std::vector<double> >("calo", "Levels"));
56  php.neighbours_ = dbl_to_int(fv.get<std::vector<double> >("calo", "Neighbours"));
57  php.insideNames_ = fv.get<std::vector<std::string> >("calo", "Inside");
58  php.insideLevel_ = dbl_to_int(fv.get<std::vector<double> >("calo", "InsideLevel"));
59  php.fCaloNames_ = fv.get<std::vector<std::string> >("calo", "FineCalorimeter");
60  php.fLevels_ = dbl_to_int(fv.get<std::vector<double> >("calo", "FineLevels"));
61 
62  return this->buildParameters(php);
63 }
64 
66 #ifdef EDM_ML_DEBUG
67  myPrint("Calorimeter", php.caloNames_);
68  myPrint("Levels", php.levels_);
69  myPrint("Neighbours", php.neighbours_);
70  myPrint("Inside", php.insideNames_);
71  myPrint("InsideLevel", php.insideLevel_);
72  myPrint("FineCalorimeter", php.fCaloNames_);
73  myPrint("FineLevels", php.fLevels_);
74 #endif
75 
76  if (php.caloNames_.size() < php.neighbours_.size()) {
77  edm::LogError("HCalGeom") << "CaloSimParametersFromDD: # of Calorimeter bins " << php.caloNames_.size()
78  << " does not match with " << php.neighbours_.size() << " ==> illegal ";
79  throw cms::Exception("Unknown", "CaloSimParametersFromDD")
80  << "Calorimeter array size does not match with size of neighbours\n";
81  }
82 
83  return true;
84 }
85 
86 std::vector<std::string> CaloSimParametersFromDD::getNames(const std::string& str,
87  const DDsvalues_type& sv,
88  bool ignore) {
89 #ifdef EDM_ML_DEBUG
90  edm::LogVerbatim("HCalGeom") << "CaloSimParametersFromDD::getNames called for " << str;
91 #endif
92  DDValue value(str);
93  if (DDfetch(&sv, value)) {
94 #ifdef EDM_ML_DEBUG
95  edm::LogVerbatim("HCalGeom") << value;
96 #endif
97  const std::vector<std::string>& fvec = value.strings();
98  int nval = fvec.size();
99  if ((nval < 1) && (!ignore)) {
100  edm::LogError("HCalGeom") << "CaloSimParametersFromDD: # of " << str << " bins " << nval << " < 1 ==> illegal ";
101  throw cms::Exception("Unknown", "CaloSimParametersFromDD") << "nval < 2 for array " << str << "\n";
102  }
103 
104  return fvec;
105  } else if (ignore) {
106  std::vector<std::string> fvec;
107  return fvec;
108  } else {
109  edm::LogError("HCalGeom") << "CaloSimParametersFromDD: cannot get array " << str;
110  throw cms::Exception("Unknown", "CaloSimParametersFromDD") << "cannot get array " << str << "\n";
111  }
112 }
113 
115 #ifdef EDM_ML_DEBUG
116  edm::LogVerbatim("HCalGeom") << "CaloSimParametersFromDD::getNumbers called for " << str;
117 #endif
118  DDValue value(str);
119  if (DDfetch(&sv, value)) {
120 #ifdef EDM_ML_DEBUG
121  edm::LogVerbatim("HCalGeom") << value;
122 #endif
123  const std::vector<double>& fvec = value.doubles();
124  int nval = fvec.size();
125  if ((nval < 1) && (!ignore)) {
126  edm::LogError("HCalGeom") << "CaloSimParametersFromDD: # of " << str << " bins " << nval << " < 1 ==> illegal ";
127  throw cms::Exception("Unknown", "CaloSimParametersFromDD") << "nval < 2 for array " << str << "\n";
128  }
129  return dbl_to_int(fvec);
130  } else if (ignore) {
131  std::vector<int> fvec;
132  return fvec;
133  } else {
134  edm::LogError("HCalGeom") << "CaloSimParametersFromDD: cannot get array " << str;
135  throw cms::Exception("Unknown", "CaloSimParametersFromDD") << "cannot get array " << str << "\n";
136  }
137 }
mps_fire.i
i
Definition: mps_fire.py:428
CaloSimulationParameters
Definition: CaloSimulationParameters.h:6
CaloSimParametersFromDD::build
bool build(const DDCompactView *, CaloSimulationParameters &)
Definition: CaloSimParametersFromDD.cc:23
CaloSimulationParameters::neighbours_
std::vector< int > neighbours_
Definition: CaloSimulationParameters.h:13
CaloSimulationParameters::insideLevel_
std::vector< int > insideLevel_
Definition: CaloSimulationParameters.h:15
DDFilteredView::mergedSpecifics
DDsvalues_type mergedSpecifics() const
Definition: DDFilteredView.cc:42
CaloSimParametersFromDD::getNames
std::vector< std::string > getNames(const std::string &, const DDsvalues_type &, bool)
Definition: CaloSimParametersFromDD.cc:86
CaloSimulationParameters::levels_
std::vector< int > levels_
Definition: CaloSimulationParameters.h:12
cms::DDFilteredView
Definition: DDFilteredView.h:70
dbl_to_int
std::vector< int > dbl_to_int(const std::vector< double > &vecdbl)
Converts a std::vector of doubles to a std::vector of int.
Definition: DDutils.h:7
myPrint
void myPrint(std::string value, const std::vector< T > &vec)
Definition: CaloSimParametersFromDD.cc:14
CaloSimulationParameters::caloNames_
std::vector< std::string > caloNames_
Definition: CaloSimulationParameters.h:11
CaloSimulationParameters.h
DDFilteredView::firstChild
bool firstChild()
set the current node to the first child ...
Definition: DDFilteredView.cc:86
DDFilteredView.h
CaloSimulationParameters::fLevels_
std::vector< int > fLevels_
Definition: CaloSimulationParameters.h:18
DDCompactView
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:81
pfDeepBoostedJetPreprocessParams_cfi.sv
sv
Definition: pfDeepBoostedJetPreprocessParams_cfi.py:352
CaloSimParametersFromDD::getNumbers
std::vector< int > getNumbers(const std::string &, const DDsvalues_type &, bool)
Definition: CaloSimParametersFromDD.cc:114
str
#define str(s)
Definition: TestProcessor.cc:51
DDfetch
bool DDfetch(const DDsvalues_type *, DDValue &)
helper for retrieving DDValues from DDsvalues_type *.
Definition: DDsvalues.cc:79
DDFilteredView.h
ALCARECOTkAlBeamHalo_cff.filter
filter
Definition: ALCARECOTkAlBeamHalo_cff.py:27
DDValue.h
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
cms::DDDetector::worldVolume
dd4hep::Volume worldVolume() const
Handle to the world volume containing everything.
Definition: DDDetector.cc:40
DDutils.h
DDFilter.h
value
Definition: value.py:1
CaloSimulationParameters::insideNames_
std::vector< std::string > insideNames_
Definition: CaloSimulationParameters.h:14
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
SequenceTypes.ignore
def ignore(seq)
Definition: SequenceTypes.py:630
CaloSimParametersFromDD.h
DDValue
Definition: DDValue.h:21
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
relativeConstraints.value
value
Definition: relativeConstraints.py:53
Exception
Definition: hltDiff.cc:246
cms::DDCompactView
Definition: DDCompactView.h:31
CaloSimulationParameters::fCaloNames_
std::vector< std::string > fCaloNames_
Definition: CaloSimulationParameters.h:17
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
DDSpecificsMatchesValueFilter
Definition: DDFilter.h:70
DDFilteredView
Definition: DDFilteredView.h:20
CaloSimParametersFromDD::buildParameters
bool buildParameters(const CaloSimulationParameters &)
Definition: CaloSimParametersFromDD.cc:65
DDsvalues_type
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
Definition: DDsvalues.h:12
cms::DDCompactView::detector
const cms::DDDetector * detector() const
Definition: DDCompactView.h:34
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37