13 #include "CLHEP/Units/GlobalPhysicalConstants.h"
14 #include "CLHEP/Units/GlobalSystemOfUnits.h"
18 sideRod(0), sideRodX(0), sideRodY(0), sideRodZ(0), endRod1Y(0), endRod1Z(0),
19 clampX(0), clampZ(0), sideCoolX(0), sideCoolY(0), sideCoolZ(0),
20 endCoolY(0), endCoolZ(0),
21 optFibreX(0),optFibreZ(0),
22 sideClampX(0), sideClamp1DZ(0), sideClamp2DZ(0), moduleRot(0), moduleY(0),
23 moduleZ(0),
connect(0), connectY(0), connectZ(0),
24 aohCopies(0), aohX(0), aohY(0), aohZ(0) {
25 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo info: Creating an instance";
37 shift = nArgs[
"Shift"];
40 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo debug: Parent " << parentName
41 <<
" Central " <<
central <<
" NameSpace "
44 sideRod = vsArgs[
"SideRodName"];
50 <<
" to be positioned " <<
sideRodX.size()
51 <<
" times at y = " <<
sideRodY[
i] <<
" z = "
61 <<
"positioned " <<
endRod1Y.size() <<
" times at";
70 <<
"positioned at y = " <<
endRod2Y <<
" z = "
73 cable = sArgs[
"CableName"];
75 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo debug: " <<
cable <<
" to be "
76 <<
"positioned at z = " <<
cableZ;
78 clamp = sArgs[
"ClampName"];
81 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo debug: " <<
clamp <<
" to be "
82 <<
"positioned " <<
clampX.size() <<
" times at";
83 for (
int i=0;
i<(int)(
clampX.size());
i++)
92 <<
"positioned " <<
sideCoolX.size() <<
" times at";
103 <<
"positioned with " <<
endCoolRot <<
" rotation at"
111 <<
"positioned " <<
optFibreX.size() <<
" times at";
120 <<
"positioned " <<
sideClampX.size() <<
" times at";
128 <<
"positioned " <<
sideClampX.size() <<
" times at";
134 module = sArgs[
"ModuleName"];
137 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo debug:\t" <<
module <<
" positioned "
147 <<
" ICC positioned with no rotation";
154 aohX = vArgs[
"AOHx"];
155 aohY = vArgs[
"AOHy"];
156 aohZ = vArgs[
"AOHz"];
157 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo debug:\t" <<
aohName <<
" AOH will be positioned on ICC's";
160 <<
"\tx = " <<
aohX[
i]
161 <<
"\ty = " <<
aohY[
i]
162 <<
"\tz = " <<
aohZ[
i];
168 LogDebug(
"TOBGeom") <<
"==>> Constructing DDTOBRodAlgo...";
178 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
179 << j+1 <<
" positioned in " << rodName <<
" at "
180 << r <<
" with no rotation";
185 for (
int i=0;
i<(int)(
clampX.size());
i++) {
189 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
190 << i+1 <<
" positioned in " << rodName <<
" at "
191 << r <<
" with no rotation";
199 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
200 << i+1 <<
" positioned in " << rodName <<
" at "
201 << r <<
" with no rotation";
209 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
210 << i+1 <<
" positioned in " << rodName <<
" at "
211 << r <<
" with no rotation";
220 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
221 << i+1 <<
" positioned in " << rodName <<
" at "
222 << r <<
" with no rotation";
229 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
230 << i+1 <<
" positioned in " << rodName <<
" at "
231 << r <<
" with no rotation";
239 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
240 << i+1 <<
" positioned in " << centName <<
" at "
241 << r <<
" with no rotation";
246 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child1 <<
" number 1 "
247 <<
"positioned in " << centName <<
" at " << r1
248 <<
" with no rotation";
256 cpv.
position(child2, centName, 1, r2, rot2);
257 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child2 <<
" number 1 "
258 <<
"positioned in " << centName <<
" at " << r2
265 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child3 <<
" number 1 "
266 <<
"positioned in " << centName <<
" at " << r3
267 <<
" with no rotation";
274 if (rotstr !=
"NULL") {
279 cpv.
position(child, centName, i+1, r, rot);
280 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
281 << i+1 <<
" positioned in " << centName <<
" at "
282 << r <<
" with " <<
rot;
290 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
291 << i+1 <<
" positioned in " << centName <<
" at "
292 << r <<
" with no rotation";
304 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
305 << copyNumber <<
" positioned in " << centName <<
" at "
306 << r <<
" with no rotation";
313 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
314 << copyNumber <<
" positioned in " << centName <<
" at "
315 << r <<
" with no rotation";
319 for (
unsigned int j = 1;
j<4;
j++ ) {
344 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number "
345 << copyNumber <<
" positioned in " << centName <<
" at "
346 << r <<
" with no rotation";
352 LogDebug(
"TOBGeom") <<
"<<== End of DDTOBRodAlgo construction ...";
std::vector< double > sideRodZ
std::vector< double > sideCoolX
std::vector< std::string > sideRod
std::vector< double > sideClamp2DZ
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs)
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.
std::vector< double > optFibreX
std::vector< double > connectZ
static std::string & ns()
std::vector< double > endRod1Y
type of data representation of DDCompactView
std::vector< double > sideRodY
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
Represents a uniquely identifyable rotation matrix.
std::vector< double > aohX
std::vector< double > moduleY
U second(std::pair< T, U > const &p)
std::vector< std::string > connect
std::vector< double > clampZ
std::vector< double > optFibreZ
std::vector< double > sideClampX
void execute(DDCompactView &cpv)
std::vector< double > clampX
std::vector< double > sideClamp1DZ
std::vector< double > sideCoolZ
std::vector< double > aohCopies
std::vector< double > moduleZ
std::vector< double > connectY
std::vector< double > aohY
std::vector< double > aohZ
std::vector< std::string > moduleRot
std::vector< double > sideCoolY
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'
std::vector< double > sideRodX
std::vector< double > endRod1Z