18 #include "CLHEP/Units/GlobalPhysicalConstants.h"
19 #include "CLHEP/Units/GlobalSystemOfUnits.h"
22 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC info: Creating an instance";
36 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC debug: Parent " << parentName
41 layRin = vArgs[
"RadiusLo"];
43 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC debug: Disk Rmin " <<
rMin
44 <<
"\tRMax " <<
rMax <<
"\tSeparation of layers "
45 <<
deltaR <<
" with " <<
layRin.size() <<
" layers at R =";
46 for (i = 0; i <
layRin.size(); i++)
53 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC debug: SupportCylinder "
54 <<
"Thickness " <<
cylinderT <<
"\tSupportDisk "
55 <<
"Thickness " <<
supportT <<
"\tExtra width along R "
58 cableT = nArgs[
"CableThick"];
60 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC debug: Cable Thickness "
61 <<
cableT <<
" with materials: ";
62 for (i = 0; i <
cableMat.size(); i++)
65 strucMat = vsArgs[
"StructureMaterial"];
67 <<
" materials for open structure:";
72 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC debug: " <<
layers.size()
74 for (i=0; i<
layers.size(); i++)
81 LogDebug(
"TIBGeom") <<
"==>> Constructing DDTIBRadCableAlgo_MTCC...";
94 for (
unsigned int i=0;
i<
layRin.size();
i++) {
98 for(
unsigned int j=0;
j<
layers.size();
j++) {
110 rout, 0, CLHEP::twopi);
111 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC test: "
114 << CLHEP::twopi/CLHEP::deg <<
" with Rin " << rin
115 <<
" Rout " << rout <<
" ZHalf " << dz;
120 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC test: "
122 <<
" positioned in " << diskName <<
" at " << r1
123 <<
" with no rotation";
128 if (
i == 0) rin =
rMin;
131 rout, 0, CLHEP::twopi);
132 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC test: "
135 << CLHEP::twopi/CLHEP::deg <<
" with Rin " << rin
136 <<
" Rout " << rout <<
" ZHalf " << dz;
143 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC test: "
145 <<
" positioned in " << diskName
146 <<
" at " << r2 <<
" with no rotation";
151 std::vector<double> pgonZ;
152 pgonZ.push_back(-0.5*
cableT);
154 pgonZ.push_back(0.5*
cableT);
155 std::vector<double> pgonRmin;
156 pgonRmin.push_back(rv);
157 pgonRmin.push_back(rv);
158 pgonRmin.push_back(rv);
159 std::vector<double> pgonRmax;
160 pgonRmax.push_back(
rMax);
161 pgonRmax.push_back(
rMax);
162 pgonRmax.push_back(rv);
164 CLHEP::twopi,pgonZ, pgonRmin, pgonRmax);
165 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC test: "
168 <<
" from 0 to " << CLHEP::twopi/CLHEP::deg
169 <<
" and with " << pgonZ.size() <<
" sections";
170 for (
unsigned int ii = 0;
ii <pgonZ.size();
ii++)
171 LogDebug(
"TIBGeom") <<
"\t" <<
"\tZ = " << pgonZ[
ii] <<
"\tRmin = "
172 << pgonRmin[
ii] <<
"\tRmax = " << pgonRmax[
ii];
174 LogDebug(
"TIBGeom") <<
" material cableName " << i <<
" " << cableName;
180 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC test: "
182 <<
" positioned in " << diskName <<
" at "
183 << r3 <<
" with no rotation";
190 for(
unsigned int j=0;
j<
layers.size();
j++) {
198 unsigned int i =
layRin.size();
203 rout, 0, CLHEP::twopi);
204 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC test: "
207 << CLHEP::twopi/CLHEP::deg <<
" with Rin " << rin
208 <<
" Rout " << rout <<
" ZHalf " << dz;
215 LogDebug(
"TIBGeom") <<
"DDTIBRadCableAlgo_MTCC test: "
217 <<
" positioned in " << diskName
218 <<
" at " << r2 <<
" with no rotation";
221 LogDebug(
"TIBGeom") <<
"<<== End of DDTIBRadCableAlgo_MTCC construction ...";
std::vector< double > layers
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs)
virtual ~DDTIBRadCableAlgo_MTCC()
DDMaterial is used to define and access material information.
static DDSolid polycone(const DDName &name, double startPhi, double deltaPhi, const std::vector< double > &z, const std::vector< double > &rmin, const std::vector< double > &rmax)
Creates a polycone (refere to Geant3 or Geant4 documentation)
void position(const DDLogicalPart &self, const DDLogicalPart &parent, std::string copyno, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=NULL)
DDName is used to identify DDD entities uniquely.
static std::string & ns()
std::string dbl_to_string(const double &in)
Converts only the integer part of a double to a string.
type of data representation of DDCompactView
A DDSolid represents the shape of a part.
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Represents a uniquely identifyable rotation matrix.
std::vector< std::string > strucMat
U second(std::pair< T, U > const &p)
std::vector< std::string > cableMat
A DDLogicalPart aggregates information concerning material, solid and sensitveness ...
std::vector< double > layRin
static DDSolid tubs(const DDName &name, double zhalf, double rIn, double rOut, double startPhi, double deltaPhi)
void execute(DDCompactView &cpv)
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'