CMS 3D CMS Logo

HGCalParametersFromDD.cc
Go to the documentation of this file.
9 
11 #include "CLHEP/Units/GlobalSystemOfUnits.h"
12 #include <iostream>
13 #include <iomanip>
14 
15 //#define EDM_ML_DEBUG
16 
17 namespace {
18  int getGeometryMode(const char* s, const DDsvalues_type & sv) {
19  DDValue val(s);
20  if (DDfetch(&sv, val)) {
21  const std::vector<std::string> & fvec = val.strings();
22  if (fvec.size() == 0) {
23  throw cms::Exception("HGCalGeom") << "Failed to get " << s << " tag.";
24  }
25 
26  int result(-1);
29  result = (int)(mode);
30  return result;
31  } else {
32  throw cms::Exception("HGCalGeom") << "Failed to get "<< s << " tag.";
33  }
34  }
35 }
36 
38  HGCalParameters& php,
39  const std::string& name,
40  const std::string& namew,
41  const std::string& namec) {
42 
43 #ifdef EDM_ML_DEBUG
44  std::cout << "HGCalParametersFromDD::build called with names " << name << ":"
45  << namew << ":" << namec << std::endl;
46 #endif
47 
48  //Special parameters at simulation level
49  std::string attribute = "Volume";
51  DDValue val(attribute, value, 0.0);
53  DDFilteredView fv(*cpv,filter);
54  bool ok = fv.firstChild();
55 
56  if (ok) {
58  php.mode_ = getGeometryMode("GeometryMode", sv);
60  if (php.mode_ == static_cast<int> (HGCalGeometryMode::Square)) {
61  //Load the SpecPars
62  geom->loadSpecParsSquare(fv, php);
63  //Load the Geometry parameters
64  geom->loadGeometrySquare(fv, php, name);
65  } else if (php.mode_ == static_cast<int> (HGCalGeometryMode::Hexagon)) {
66  //Load the SpecPars
67  geom->loadSpecParsHexagon(fv, php, cpv, namew, namec);
68  //Load the Geometry parameters
69  geom->loadGeometryHexagon(fv, php, name, cpv, namew, namec);
70  //Load cell parameters
71  geom->loadCellParsHexagon(cpv, php);
72  } else if (php.mode_ == static_cast<int> (HGCalGeometryMode::HexagonFull)){
73  //Load the SpecPars
74  geom->loadSpecParsHexagon(fv, php, cpv, namew, namec);
75  //Load the Geometry parameters
76  geom->loadGeometryHexagon(fv, php, name, cpv, namew, namec);
77  //Modify some constants
78  geom->loadWaferHexagon(php);
79  //Load cell parameters
80  geom->loadCellParsHexagon(cpv, php);
81  } else {
82  edm::LogError("HGCalGeom") << "Unknown Geometry type " << php.mode_
83  << " for HGCal " << name << ":" << namew
84  << ":" << namec;
85  throw cms::Exception("DDException")
86  << "Unknown Geometry type " << php.mode_ << " for HGCal " << name
87  << ":" << namew << ":" << namec;
88  }
89  } else {
90  edm::LogError("HGCalGeom") << " Attribute " << val
91  << " not found but needed.";
92  throw cms::Exception("DDException") << "Attribute " << val
93  << " not found but needed.";
94  }
95 
96  edm::LogInfo("HGCalGeom") << "Return from HGCalParametersFromDD::build with "
97  << ok;
98  return ok;
99 }
T parseString(const std::string &value)
void loadSpecParsHexagon(const DDFilteredView &, HGCalParameters &, const DDCompactView *, const std::string &, const std::string &)
bool build(const DDCompactView *, HGCalParameters &, const std::string &, const std::string &, const std::string &)
type of data representation of DDCompactView
Definition: DDCompactView.h:90
bool DDfetch(const DDsvalues_type *, DDValue &)
helper for retrieving DDValues from DDsvalues_type *.
Definition: DDsvalues.cc:80
void loadCellParsHexagon(const DDCompactView *cpv, HGCalParameters &php)
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
std::maps an index to a DDValue. The index corresponds to the index assigned to the name of the std::...
Definition: DDsvalues.h:20
Definition: value.py:1
HGCalGeometryMode
void loadWaferHexagon(HGCalParameters &php)
void loadSpecParsSquare(const DDFilteredView &, HGCalParameters &)
DDsvalues_type mergedSpecifics() const
bool firstChild()
set the current node to the first child ...
void loadGeometryHexagon(const DDFilteredView &, HGCalParameters &, const std::string &, const DDCompactView *, const std::string &, const std::string &)
void loadGeometrySquare(const DDFilteredView &, HGCalParameters &, const std::string &)