117 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo info: Creating an instance";
127 central = sArgs[
"CentralName"];
128 shift = nArgs[
"Shift"];
131 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo debug: Parent " << parentName <<
" Central " <<
central <<
" NameSpace "
134 sideRod = vsArgs[
"SideRodName"];
138 for (
int i = 0;
i < (int)(
sideRod.size());
i++) {
142 LogDebug(
"TOBGeom") <<
"\tsideRodX[" <<
i <<
"] = " <<
j;
145 endRod1 = sArgs[
"EndRod1Name"];
149 <<
"positioned " <<
endRod1Y.size() <<
" times at";
153 endRod2 = sArgs[
"EndRod2Name"];
159 cable = sArgs[
"CableName"];
161 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo debug: " <<
cable <<
" to be "
162 <<
"positioned at z = " <<
cableZ;
164 clamp = sArgs[
"ClampName"];
167 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo debug: " <<
clamp <<
" to be "
168 <<
"positioned " <<
clampX.size() <<
" times at";
169 for (
int i = 0;
i < (int)(
clampX.size());
i++)
177 <<
"positioned " <<
sideCoolX.size() <<
" times at";
182 endCool = sArgs[
"EndCoolName"];
187 <<
"positioned with " <<
endCoolRot <<
" rotation at"
194 <<
"positioned " <<
optFibreX.size() <<
" times at";
202 <<
"positioned " <<
sideClampX.size() <<
" times at";
209 <<
"positioned " <<
sideClampX.size() <<
" times at";
214 module = sArgs[
"ModuleName"];
224 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo debug:\t" <<
connect.size() <<
" ICC positioned with no rotation";
225 for (
int i = 0;
i < (int)(
connect.size());
i++)
230 aohX = vArgs[
"AOHx"];
231 aohY = vArgs[
"AOHy"];
232 aohZ = vArgs[
"AOHz"];
233 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo debug:\t" <<
aohName <<
" AOH will be positioned on ICC's";
236 <<
"\tz = " <<
aohZ[
i];
240 LogDebug(
"TOBGeom") <<
"==>> Constructing DDTOBRodAlgo...";
245 for (
int i = 0;
i < (int)(
sideRod.size());
i++) {
250 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << j + 1 <<
" positioned in " << rodName
251 <<
" at " << r <<
" with no rotation";
256 for (
int i = 0;
i < (int)(
clampX.size());
i++) {
260 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << i + 1 <<
" positioned in " << rodName
261 <<
" at " << r <<
" with no rotation";
269 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << i + 1 <<
" positioned in " << rodName
270 <<
" at " << r <<
" with no rotation";
278 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << i + 1 <<
" positioned in " << rodName
279 <<
" at " << r <<
" with no rotation";
288 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << i + 1 <<
" positioned in " << rodName
289 <<
" at " << r <<
" with no rotation";
296 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << i + 1 <<
" positioned in " << rodName
297 <<
" at " << r <<
" with no rotation";
305 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << i + 1 <<
" positioned in " << centName
306 <<
" at " << r <<
" with no rotation";
311 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child1 <<
" number 1 "
312 <<
"positioned in " << centName <<
" at " << r1 <<
" with no rotation";
320 cpv.
position(child2, centName, 1, r2, rot2);
321 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child2 <<
" number 1 "
322 <<
"positioned in " << centName <<
" at " << r2 <<
" with " << rot2;
328 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child3 <<
" number 1 "
329 <<
"positioned in " << centName <<
" at " << r3 <<
" with no rotation";
336 if (rotstr !=
"NULL") {
341 cpv.
position(child, centName, i + 1, r, rot);
342 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << i + 1 <<
" positioned in " << centName
343 <<
" at " << r <<
" with " <<
rot;
347 for (
int i = 0;
i < (int)(
connect.size());
i++) {
351 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << i + 1 <<
" positioned in " << centName
352 <<
" at " << r <<
" with no rotation";
364 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << copyNumber <<
" positioned in " << centName
365 <<
" at " << r <<
" with no rotation";
372 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << copyNumber <<
" positioned in "
373 << centName <<
" at " << r <<
" with no rotation";
377 for (
unsigned int j = 1;
j < 4;
j++) {
399 LogDebug(
"TOBGeom") <<
"DDTOBRodAlgo test: " << child <<
" number " << copyNumber <<
" positioned in "
400 << centName <<
" at " << r <<
" with no rotation";
406 LogDebug(
"TOBGeom") <<
"<<== End of DDTOBRodAlgo construction ...";
static AlgebraicMatrix initialize()
void execute(DDCompactView &cpv) override
void position(const DDLogicalPart &self, const DDLogicalPart &parent, const std::string ©no, const DDTranslation &trans, const DDRotation &rot, const DDDivision *div=nullptr)
vector< double > optFibreZ
DDName is used to identify DDD entities uniquely.
vector< double > connectZ
static std::string & ns()
vector< double > aohCopies
Compact representation of the geometrical detector hierarchy.
vector< double > sideRodY
Represents a uniquely identifyable rotation matrix.
vector< double > sideRodZ
U second(std::pair< T, U > const &p)
vector< double > sideClamp2DZ
vector< double > connectY
vector< double > sideCoolY
vector< double > sideCoolZ
vector< double > endRod1Y
vector< double > optFibreX
vector< double > sideRodX
vector< double > sideClamp1DZ
vector< double > sideClampX
vector< double > endRod1Z
#define DEFINE_EDM_PLUGIN(factory, type, name)
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'
void initialize(const DDNumericArguments &nArgs, const DDVectorArguments &vArgs, const DDMapArguments &mArgs, const DDStringArguments &sArgs, const DDStringVectorArguments &vsArgs) override
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DDTranslation
vector< double > sideCoolX
vector< string > moduleRot