CMS 3D CMS Logo

DDHGCalModule.cc
Go to the documentation of this file.
1 // File: DDHGCalModule.cc
3 // Description: Geometry factory class for HGCal (EE and HESil)
5 
6 #include <algorithm>
7 #include <cmath>
8 #include <map>
9 #include <string>
10 #include <unordered_set>
11 #include <vector>
12 
28 
29 //#define EDM_ML_DEBUG
30 using namespace geant_units::operators;
31 
32 class DDHGCalModule : public DDAlgorithm {
33 public:
34  // Constructor and Destructor
35  DDHGCalModule(); // const std::string & name);
36 
37  void initialize(const DDNumericArguments& nArgs,
38  const DDVectorArguments& vArgs,
39  const DDMapArguments& mArgs,
40  const DDStringArguments& sArgs,
41  const DDStringVectorArguments& vsArgs) override;
42  void execute(DDCompactView& cpv) override;
43 
44 protected:
45  void constructLayers(const DDLogicalPart&, DDCompactView& cpv);
46  double rMax(double z);
47  void positionSensitive(DDLogicalPart& glog, double rin, double rout, DDCompactView& cpv);
48 
49 private:
50  static constexpr double tol_ = 0.00001;
51 
52  std::vector<std::string> wafer_; // Wafers
53  std::vector<std::string> materials_; // Materials
54  std::vector<std::string> names_; // Names
55  std::vector<double> thick_; // Thickness of the material
56  std::vector<int> copyNumber_; // Initial copy numbers
57  std::vector<int> layers_; // Number of layers in a section
58  std::vector<double> layerThick_; // Thickness of each section
59  std::vector<int> layerType_; // Type of the layer
60  std::vector<int> layerSense_; // COntent of a layer (sensitive?)
61  double zMinBlock_; // Starting z-value of the block
62  double rMaxFine_; // Maximum r-value for fine wafer
63  double waferW_; // Width of the wafer
64  int sectors_; // Sectors
65  std::vector<double> slopeB_; // Slope at the lower R
66  std::vector<double> slopeT_; // Slopes at the larger R
67  std::vector<double> zFront_; // Starting Z values for the slopes
68  std::vector<double> rMaxFront_; // Corresponding rMax's
69  std::string idNameSpace_; // Namespace of this and ALL sub-parts
70  std::unordered_set<int> copies_; // List of copy #'s
71 };
72 
74 #ifdef EDM_ML_DEBUG
75  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: Creating an instance";
76 #endif
77 }
78 
80  const DDVectorArguments& vArgs,
81  const DDMapArguments&,
82  const DDStringArguments& sArgs,
83  const DDStringVectorArguments& vsArgs) {
84  wafer_ = vsArgs["WaferName"];
85 #ifdef EDM_ML_DEBUG
86  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << wafer_.size() << " wafers";
87  for (unsigned int i = 0; i < wafer_.size(); ++i)
88  edm::LogVerbatim("HGCalGeom") << "Wafer_[" << i << "] " << wafer_[i];
89 #endif
90  materials_ = vsArgs["MaterialNames"];
91  names_ = vsArgs["VolumeNames"];
92  thick_ = vArgs["Thickness"];
93  copyNumber_.resize(materials_.size(), 1);
94 #ifdef EDM_ML_DEBUG
95  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << materials_.size() << " types of volumes";
96  for (unsigned int i = 0; i < names_.size(); ++i)
97  edm::LogVerbatim("HGCalGeom") << "Volume [" << i << "] " << names_[i] << " of thickness " << thick_[i]
98  << " filled with " << materials_[i] << " first copy number " << copyNumber_[i];
99 #endif
100  layers_ = dbl_to_int(vArgs["Layers"]);
101  layerThick_ = vArgs["LayerThick"];
102 #ifdef EDM_ML_DEBUG
103  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << layers_.size() << " blocks";
104  for (unsigned int i = 0; i < layers_.size(); ++i)
105  edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] of thickness " << layerThick_[i] << " with " << layers_[i]
106  << " layers";
107 #endif
108  layerType_ = dbl_to_int(vArgs["LayerType"]);
109  layerSense_ = dbl_to_int(vArgs["LayerSense"]);
110 #ifdef EDM_ML_DEBUG
111  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << layerType_.size() << " layers";
112  for (unsigned int i = 0; i < layerType_.size(); ++i)
113  edm::LogVerbatim("HGCalGeom") << "Layer [" << i << "] with material type " << layerType_[i] << " sensitive class "
114  << layerSense_[i];
115 #endif
116  zMinBlock_ = nArgs["zMinBlock"];
117  rMaxFine_ = nArgs["rMaxFine"];
118  waferW_ = nArgs["waferW"];
119  sectors_ = (int)(nArgs["Sectors"]);
120 #ifdef EDM_ML_DEBUG
121  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: zStart " << zMinBlock_ << " rFineCoarse " << rMaxFine_
122  << " wafer width " << waferW_ << " sectors " << sectors_;
123 #endif
124  slopeB_ = vArgs["SlopeBottom"];
125  slopeT_ = vArgs["SlopeTop"];
126  zFront_ = vArgs["ZFront"];
127  rMaxFront_ = vArgs["RMaxFront"];
128 #ifdef EDM_ML_DEBUG
129  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: Bottom slopes " << slopeB_[0] << ":" << slopeB_[1] << " and "
130  << slopeT_.size() << " slopes for top";
131  for (unsigned int i = 0; i < slopeT_.size(); ++i)
132  edm::LogVerbatim("HGCalGeom") << "Block [" << i << "] Zmin " << zFront_[i] << " Rmax " << rMaxFront_[i] << " Slope "
133  << slopeT_[i];
134 #endif
135  idNameSpace_ = DDCurrentNamespace::ns();
136 #ifdef EDM_ML_DEBUG
137  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: NameSpace " << idNameSpace_;
138 #endif
139 }
140 
142 // DDHGCalModule methods...
144 
146 #ifdef EDM_ML_DEBUG
147  edm::LogVerbatim("HGCalGeom") << "==>> Constructing DDHGCalModule...";
148 #endif
149  copies_.clear();
150  constructLayers(parent(), cpv);
151 #ifdef EDM_ML_DEBUG
152  edm::LogVerbatim("HGCalGeom") << copies_.size() << " different wafer copy numbers";
153  int k(0);
154  for (std::unordered_set<int>::const_iterator itr = copies_.begin(); itr != copies_.end(); ++itr, ++k)
155  edm::LogVerbatim("HGCalGeom") << "Copy[" << k << "] : " << (*itr);
156 #endif
157  copies_.clear();
158 #ifdef EDM_ML_DEBUG
159  edm::LogVerbatim("HGCalGeom") << "<<== End of DDHGCalModule construction ...";
160 #endif
161 }
162 
164 #ifdef EDM_ML_DEBUG
165  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: \t\tInside Layers";
166 #endif
167  double zi(zMinBlock_);
168  int laymin(0);
169  const double tol(0.01);
170  for (unsigned int i = 0; i < layers_.size(); i++) {
171  double zo = zi + layerThick_[i];
172  double routF = rMax(zi);
173  int laymax = laymin + layers_[i];
174  double zz = zi;
175  double thickTot(0);
176  for (int ly = laymin; ly < laymax; ++ly) {
177  int ii = layerType_[ly];
178  int copy = copyNumber_[ii];
179  double rinB = (layerSense_[ly] == 0) ? (zo * slopeB_[0]) : (zo * slopeB_[1]);
180  zz += (0.5 * thick_[ii]);
181  thickTot += thick_[ii];
182 
183  std::string name = "HGCal" + names_[ii] + std::to_string(copy);
184 #ifdef EDM_ML_DEBUG
185  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: Layer " << ly << ":" << ii << " Front " << zi << ", " << routF
186  << " Back " << zo << ", " << rinB << " superlayer thickness " << layerThick_[i];
187 #endif
188  DDName matName(DDSplit(materials_[ii]).first, DDSplit(materials_[ii]).second);
189  DDMaterial matter(matName);
190  DDLogicalPart glog;
191  if (layerSense_[ly] == 0) {
192  double alpha = geant_units::piRadians / sectors_;
193  double rmax = routF * cos(alpha) - tol;
194  std::vector<double> pgonZ, pgonRin, pgonRout;
195  pgonZ.emplace_back(-0.5 * thick_[ii]);
196  pgonZ.emplace_back(0.5 * thick_[ii]);
197  pgonRin.emplace_back(rinB);
198  pgonRin.emplace_back(rinB);
199  pgonRout.emplace_back(rmax);
200  pgonRout.emplace_back(rmax);
202  DDName(name, idNameSpace_), sectors_, -alpha, 2 * geant_units::piRadians, pgonZ, pgonRin, pgonRout);
203  glog = DDLogicalPart(solid.ddname(), matter, solid);
204 #ifdef EDM_ML_DEBUG
205  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << solid.name() << " polyhedra of " << sectors_
206  << " sectors covering " << convertRadToDeg(-alpha) << ":"
207  << (360.0 + convertRadToDeg(-alpha)) << " with " << pgonZ.size() << " sections";
208  for (unsigned int k = 0; k < pgonZ.size(); ++k)
209  edm::LogVerbatim("HGCalGeom") << "[" << k << "] z " << pgonZ[k] << " R " << pgonRin[k] << ":" << pgonRout[k];
210 #endif
211  } else {
213  DDName(name, idNameSpace_), 0.5 * thick_[ii], rinB, routF, 0.0, 2 * geant_units::piRadians);
214  glog = DDLogicalPart(solid.ddname(), matter, solid);
215 #ifdef EDM_ML_DEBUG
216  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << solid.name() << " Tubs made of " << matName
217  << " of dimensions " << rinB << ", " << routF << ", " << 0.5 * thick_[ii]
218  << ", 0.0, 360.0";
219  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule test position in: " << glog.name() << " number " << copy;
220 #endif
221  positionSensitive(glog, rinB, routF, cpv);
222  }
223  DDTranslation r1(0, 0, zz);
224  DDRotation rot;
225  cpv.position(glog, module, copy, r1, rot);
226  ++copyNumber_[ii];
227 #ifdef EDM_ML_DEBUG
228  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << glog.name() << " number " << copy << " positioned in "
229  << module.name() << " at " << r1 << " with " << rot;
230 #endif
231  zz += (0.5 * thick_[ii]);
232  } // End of loop over layers in a block
233  zi = zo;
234  laymin = laymax;
235  if (fabs(thickTot - layerThick_[i]) > tol_) {
236  if (thickTot > layerThick_[i]) {
237  edm::LogError("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " is smaller than thickness "
238  << thickTot << " of all its components **** ERROR ****\n";
239  } else {
240  edm::LogWarning("HGCalGeom") << "Thickness of the partition " << layerThick_[i] << " does not match with "
241  << thickTot << " of the components\n";
242  }
243  }
244  } // End of loop over blocks
245 }
246 
247 double DDHGCalModule::rMax(double z) {
248  double r(0);
249 #ifdef EDM_ML_DEBUG
250  unsigned int ik(0);
251 #endif
252  for (unsigned int k = 0; k < slopeT_.size(); ++k) {
253  if (z < zFront_[k])
254  break;
255  r = rMaxFront_[k] + (z - zFront_[k]) * slopeT_[k];
256 #ifdef EDM_ML_DEBUG
257  ik = k;
258 #endif
259  }
260 #ifdef EDM_ML_DEBUG
261  edm::LogVerbatim("HGCalGeom") << "rMax : " << z << ":" << ik << ":" << r;
262 #endif
263  return r;
264 }
265 
266 void DDHGCalModule::positionSensitive(DDLogicalPart& glog, double rin, double rout, DDCompactView& cpv) {
267  double dx = 0.5 * waferW_;
268  double dy = 3.0 * dx * tan(30._deg);
269  double rr = 2.0 * dx * tan(30._deg);
270  int ncol = (int)(2.0 * rout / waferW_) + 1;
271  int nrow = (int)(rout / (waferW_ * tan(30._deg))) + 1;
272  int incm(0), inrm(0), kount(0), ntot(0), nin(0), nfine(0), ncoarse(0);
273 #ifdef EDM_ML_DEBUG
274  edm::LogVerbatim("HGCalGeom") << glog.ddname() << " rout " << rout << " Row " << nrow << " Column " << ncol;
275 #endif
276  for (int nr = -nrow; nr <= nrow; ++nr) {
277  int inr = (nr >= 0) ? nr : -nr;
278  for (int nc = -ncol; nc <= ncol; ++nc) {
279  int inc = (nc >= 0) ? nc : -nc;
280  if (inr % 2 == inc % 2) {
281  double xpos = nc * dx;
282  double ypos = nr * dy;
283  auto const& corner = HGCalGeomTools::waferCorner(xpos, ypos, dx, rr, rin, rout, true);
284  ++ntot;
285  if (corner.first > 0) {
286  int copy = HGCalTypes::packTypeUV(0, nc, nr);
287  if (inc > incm)
288  incm = inc;
289  if (inr > inrm)
290  inrm = inr;
291  kount++;
292  if (copies_.count(copy) == 0)
293  copies_.insert(copy);
294  if (corner.first == (int)(HGCalParameters::k_CornerSize)) {
295  double rpos = std::sqrt(xpos * xpos + ypos * ypos);
296  DDTranslation tran(xpos, ypos, 0.0);
298  ++nin;
299  DDName name = (rpos < rMaxFine_) ? DDName(DDSplit(wafer_[0]).first, DDSplit(wafer_[0]).second)
300  : DDName(DDSplit(wafer_[1]).first, DDSplit(wafer_[1]).second);
301  cpv.position(name, glog.ddname(), copy, tran, rotation);
302  if (rpos < rMaxFine_)
303  ++nfine;
304  else
305  ++ncoarse;
306 #ifdef EDM_ML_DEBUG
307  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: " << name << " number " << copy << " positioned in "
308  << glog.ddname() << " at " << tran << " with " << rotation;
309 #endif
310  }
311  }
312  }
313  }
314  }
315 #ifdef EDM_ML_DEBUG
316  edm::LogVerbatim("HGCalGeom") << "DDHGCalModule: # of columns " << incm << " # of rows " << inrm << " and " << nin
317  << ":" << kount << ":" << ntot << " wafers (" << nfine << ":" << ncoarse << ") for "
318  << glog.ddname() << " R " << rin << ":" << rout;
319 #endif
320 }
321 
322 DEFINE_EDM_PLUGIN(DDAlgorithmFactory, DDHGCalModule, "hgcal:DDHGCalModule");
DDHGCalModule::materials_
std::vector< std::string > materials_
Definition: DDHGCalModule.cc:53
DDHGCalModule::execute
void execute(DDCompactView &cpv) override
Definition: DDHGCalModule.cc:145
PluginFactory.h
photonAnalyzer_cfi.rMax
rMax
Definition: photonAnalyzer_cfi.py:91
HGCalGeomTools::waferCorner
static std::pair< int32_t, int32_t > waferCorner(double xpos, double ypos, double r, double R, double rMin, double rMax, bool oldBug=false)
Definition: HGCalGeomTools.cc:223
DDCurrentNamespace.h
mps_fire.i
i
Definition: mps_fire.py:428
geometryCSVtoXML.zz
zz
Definition: geometryCSVtoXML.py:19
MessageLogger.h
filterCSVwithJSON.copy
copy
Definition: filterCSVwithJSON.py:36
DDHGCalModule::layerThick_
std::vector< double > layerThick_
Definition: DDHGCalModule.cc:58
DDName
DDName is used to identify DDD entities uniquely.
Definition: DDName.h:15
DDHGCalModule::zMinBlock_
double zMinBlock_
Definition: DDHGCalModule.cc:61
zMuMuMuonUserData.alpha
alpha
zGenParticlesMatch = cms.InputTag(""),
Definition: zMuMuMuonUserData.py:9
findQualityFiles.rr
string rr
Definition: findQualityFiles.py:185
angle_units::operators::convertRadToDeg
constexpr NumType convertRadToDeg(NumType radians)
Definition: angle_units.h:21
DDSplit.h
HGCalParameters::k_CornerSize
static constexpr uint32_t k_CornerSize
Definition: HGCalParameters.h:38
distTCMET_cfi.corner
corner
Definition: distTCMET_cfi.py:38
nin
int nin
Definition: CascadeWrapper.h:114
DDHGCalModule::layers_
std::vector< int > layers_
Definition: DDHGCalModule.cc:57
edm::second
U second(std::pair< T, U > const &p)
Definition: ParameterSet.cc:222
DDHGCalModule::names_
std::vector< std::string > names_
Definition: DDHGCalModule.cc:54
geant_units::operators
Definition: GeantUnits.h:18
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
DDHGCalModule::wafer_
std::vector< std::string > wafer_
Definition: DDHGCalModule.cc:52
dqmdumpme.first
first
Definition: dqmdumpme.py:55
edm::LogWarning
Log< level::Warning, false > LogWarning
Definition: MessageLogger.h:122
DDMaterial
DDMaterial is used to define and access material information.
Definition: DDMaterial.h:45
funct::cos
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
DDHGCalModule::copies_
std::unordered_set< int > copies_
Definition: DDHGCalModule.cc:70
DDHGCalModule::constructLayers
void constructLayers(const DDLogicalPart &, DDCompactView &cpv)
Definition: DDHGCalModule.cc:163
DDHGCalModule::copyNumber_
std::vector< int > copyNumber_
Definition: DDHGCalModule.cc:56
DDTranslation
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Definition: DDTranslation.h:7
DDSolidFactory::polyhedra
static DDSolid polyhedra(const DDName &name, int sides, double startPhi, double deltaPhi, const std::vector< double > &z, const std::vector< double > &rmin, const std::vector< double > &rmax)
Creates a polyhedra (refere to Geant3 or Geant4 documentation)
Definition: DDSolid.cc:551
DDHGCalModule::sectors_
int sectors_
Definition: DDHGCalModule.cc:64
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
DDCompactView
Compact representation of the geometrical detector hierarchy.
Definition: DDCompactView.h:81
DDBase::name
const N & name() const
Definition: DDBase.h:59
DDHGCalModule::idNameSpace_
std::string idNameSpace_
Definition: DDHGCalModule.cc:69
DDSolidFactory::tubs
static DDSolid tubs(const DDName &name, double zhalf, double rIn, double rOut, double startPhi, double deltaPhi)
Definition: DDSolid.cc:653
DDSolid.h
dqmdumpme.k
k
Definition: dqmdumpme.py:60
DEFINE_EDM_PLUGIN
#define DEFINE_EDM_PLUGIN(factory, type, name)
Definition: PluginFactory.h:124
DDHGCalModule::rMax
double rMax(double z)
Definition: DDHGCalModule.cc:247
HGCalTypes::packTypeUV
static int32_t packTypeUV(int type, int u, int v)
Definition: HGCalTypes.cc:3
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
DDHGCalModule::layerSense_
std::vector< int > layerSense_
Definition: DDHGCalModule.cc:60
angle_units::piRadians
constexpr long double piRadians(M_PIl)
DDHGCalModule::zFront_
std::vector< double > zFront_
Definition: DDHGCalModule.cc:67
idealTransformation.rotation
dictionary rotation
Definition: idealTransformation.py:1
EgHLTOffHistBins_cfi.nr
nr
Definition: EgHLTOffHistBins_cfi.py:4
DDBase::ddname
const N & ddname() const
Definition: DDBase.h:61
DDHGCalModule::DDHGCalModule
DDHGCalModule()
Definition: DDHGCalModule.cc:73
GeantUnits.h
edmplugin::PluginFactory
Definition: PluginFactory.h:34
DDLogicalPart
A DDLogicalPart aggregates information concerning material, solid and sensitveness ....
Definition: DDLogicalPart.h:93
DDTypes.h
DDMaterial.h
funct::tan
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
DDHGCalModule::waferW_
double waferW_
Definition: DDHGCalModule.cc:63
createfilelist.int
int
Definition: createfilelist.py:10
DDutils.h
DDHGCalModule::slopeT_
std::vector< double > slopeT_
Definition: DDHGCalModule.cc:66
DDHGCalModule::rMaxFine_
double rMaxFine_
Definition: DDHGCalModule.cc:62
PVValHelper::dy
Definition: PVValidationHelpers.h:49
edm::LogError
Log< level::Error, false > LogError
Definition: MessageLogger.h:123
DDLogicalPart.h
itr
std::vector< std::pair< float, float > >::iterator itr
Definition: HGCDigitizer.cc:29
DDHGCalModule
Definition: DDHGCalModule.cc:32
alignCSCRings.r
r
Definition: alignCSCRings.py:93
ReadMapType< double >
DDHGCalModule::initialize
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
Definition: DDHGCalModule.cc:79
HGCalGeomTools.h
DDAlgorithm.h
DDHGCalModule::slopeB_
std::vector< double > slopeB_
Definition: DDHGCalModule.cc:65
DDHGCalModule::layerType_
std::vector< int > layerType_
Definition: DDHGCalModule.cc:59
DDHGCalGeom::constructLayers
void constructLayers(const cms::DDNamespace &ns, const std::vector< std::string > &wafers, const std::vector< std::string > &covers, const std::vector< int > &layerType, const std::vector< int > &layerSense, const std::vector< int > &maxModule, const std::vector< std::string > &names, const std::vector< std::string > &materials, std::vector< int > &copyNumber, const std::vector< double > &layerThick, const double &absorbW, const double &absorbH, const double &waferTot, const double &rMax, const double &rMaxFine, std::unordered_set< int > &copies, int firstLayer, int lastLayer, double zFront, double totalWidth, bool ignoreCenter, dd4hep::Volume &module)
Definition: DDHGCalTBModuleX.cc:22
diffTwoXMLs.r1
r1
Definition: diffTwoXMLs.py:53
edm::LogVerbatim
Log< level::Info, true > LogVerbatim
Definition: MessageLogger.h:128
DDCurrentNamespace::ns
static std::string & ns()
Definition: DDCurrentNamespace.cc:3
makeMuonMisalignmentScenario.rot
rot
Definition: makeMuonMisalignmentScenario.py:322
DDHGCalModule::rMaxFront_
std::vector< double > rMaxFront_
Definition: DDHGCalModule.cc:68
Skims_PA_cff.name
name
Definition: Skims_PA_cff.py:17
DDSolid
A DDSolid represents the shape of a part.
Definition: DDSolid.h:39
DDRotation
Represents a uniquely identifyable rotation matrix.
Definition: DDTransform.h:57
initialize
static AlgebraicMatrix initialize()
Definition: BeamSpotTransientTrackingRecHit.cc:24
DDHGCalModule::thick_
std::vector< double > thick_
Definition: DDHGCalModule.cc:55
DDHGCalModule::positionSensitive
void positionSensitive(DDLogicalPart &glog, double rin, double rout, DDCompactView &cpv)
Definition: DDHGCalModule.cc:266
HGCalTypes.h
DDAlgorithmFactory.h
edm::Log
Definition: MessageLogger.h:70
HGCalParameters.h
class-composition.parent
parent
Definition: class-composition.py:88
cuy.ii
ii
Definition: cuy.py:590
PVValHelper::dx
Definition: PVValidationHelpers.h:48
DDSplit
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'
Definition: DDSplit.cc:3
DDCompactView::position
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string &copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
Definition: DDCompactView.cc:76