00101 {
00102
00103 LogDebug("TOBGeom") << "==>> Constructing DDTOBRadCableAlgo...";
00104 DDName diskName = parent().name();
00105
00106
00107 for (int i=0; i<(int)(names.size()); i++) {
00108
00109 DDSolid solid;
00110 std::string name;
00111 double dz, rin, rout;
00112
00113
00114 name = "TOBCoolingManifold" + names[i] + "a";
00115 dz = coolRout1;
00116 DDName manifoldName_a(name, idNameSpace);
00117 solid = DDSolidFactory::torus(manifoldName_a,coolRin,coolRout1,coolR1[i],coolStartPhi1,coolDeltaPhi1);
00118 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00119 << DDName(name, idNameSpace) << " Torus made of "
00120 << coolM1 << " from " << coolStartPhi1/deg << " to " << (coolStartPhi1+coolDeltaPhi1)/deg
00121 << " with Rin " << coolRin << " Rout " << coolRout1
00122 << " R torus " << coolR1[i];
00123 DDName coolManifoldName_a(DDSplit(coolM1).first, DDSplit(coolM1).second);
00124 DDMaterial coolManifoldMatter_a(coolManifoldName_a);
00125 DDLogicalPart coolManifoldLogic_a(DDName(name, idNameSpace), coolManifoldMatter_a, solid);
00126
00127 DDTranslation r1(0, 0, (dz-diskDz));
00128 DDpos(DDName(name,idNameSpace), diskName, i+1, r1, DDRotation());
00129 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00130 << DDName(name,idNameSpace) << " number " << i+1
00131 << " positioned in " << diskName << " at " << r1
00132 << " with no rotation";
00133
00134 name = "TOBCoolingManifoldFluid" + names[i] + "a";
00135 solid = DDSolidFactory::torus(DDName(name, idNameSpace),coolRin,coolRout2,coolR1[i],coolStartPhi2,coolDeltaPhi2);
00136 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00137 << DDName(name, idNameSpace) << " Torus made of "
00138 << coolM2 << " from " << coolStartPhi2/deg << " to " << (coolStartPhi2+coolDeltaPhi2)/deg
00139 << " with Rin " << coolRin << " Rout " << coolRout2
00140 << " R torus " << coolR1[i];
00141 DDName coolManifoldFluidName_a(DDSplit(coolM2).first, DDSplit(coolM2).second);
00142 DDMaterial coolManifoldFluidMatter_a(coolManifoldFluidName_a);
00143 DDLogicalPart coolManifoldFluidLogic_a(DDName(name, idNameSpace), coolManifoldFluidMatter_a, solid);
00144 DDpos(DDName(name,idNameSpace), manifoldName_a, i+1, DDTranslation(), DDRotation());
00145 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00146 << DDName(name,idNameSpace) << " number " << i+1
00147 << " positioned in " << coolManifoldName_a
00148 << " with no translation and no rotation";
00149
00150 name = "TOBCoolingManifold" + names[i] + "r";
00151 dz = coolRout1;
00152 DDName manifoldName_r(name, idNameSpace);
00153 solid = DDSolidFactory::torus(manifoldName_r,coolRin,coolRout1,coolR2[i],coolStartPhi1,coolDeltaPhi1);
00154 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00155 << DDName(name, idNameSpace) << " Torus made of "
00156 << coolM1 << " from " << coolStartPhi1/deg << " to " << (coolStartPhi1+coolDeltaPhi1)/deg
00157 << " with Rin " << coolRin << " Rout " << coolRout1
00158 << " R torus " << coolR2[i];
00159 DDName coolManifoldName_r(DDSplit(coolM1).first, DDSplit(coolM1).second);
00160 DDMaterial coolManifoldMatter_r(coolManifoldName_r);
00161 DDLogicalPart coolManifoldLogic_r(DDName(name, idNameSpace), coolManifoldMatter_r, solid);
00162
00163 r1 = DDTranslation(0, 0, (dz-diskDz));
00164 DDpos(DDName(name,idNameSpace), diskName, i+1, r1, DDRotation());
00165 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00166 << DDName(name,idNameSpace) << " number " << i+1
00167 << " positioned in " << diskName << " at " << r1
00168 << " with no rotation";
00169
00170 name = "TOBCoolingManifoldFluid" + names[i] + "r";
00171 solid = DDSolidFactory::torus(DDName(name, idNameSpace),coolRin,coolRout2,coolR2[i],coolStartPhi2,coolDeltaPhi2);
00172 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00173 << DDName(name, idNameSpace) << " Torus made of "
00174 << coolM2 << " from " << coolStartPhi2/deg << " to " << (coolStartPhi2+coolDeltaPhi2)/deg
00175 << " with Rin " << coolRin << " Rout " << coolRout2
00176 << " R torus " << coolR2[i];
00177 DDName coolManifoldFluidName_r(DDSplit(coolM2).first, DDSplit(coolM2).second);
00178 DDMaterial coolManifoldFluidMatter_r(coolManifoldFluidName_r);
00179 DDLogicalPart coolManifoldFluidLogic_r(DDName(name, idNameSpace), coolManifoldFluidMatter_r, solid);
00180 DDpos(DDName(name,idNameSpace), manifoldName_r, i+1, DDTranslation(), DDRotation());
00181 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00182 << DDName(name,idNameSpace) << " number " << i+1
00183 << " positioned in " << coolManifoldName_r
00184 << " with no translation and no rotation";
00185
00186
00187 name = "TOBConn" + names[i];
00188 dz = 0.5*connT;
00189 rin = 0.5*(rodRin[i]+rodRout[i])-0.5*connW;
00190 rout = 0.5*(rodRin[i]+rodRout[i])+0.5*connW;
00191 solid = DDSolidFactory::tubs(DDName(name, idNameSpace), dz, rin,
00192 rout, 0, twopi);
00193 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00194 << DDName(name, idNameSpace) << " Tubs made of "
00195 << connM[i] << " from 0 to " << twopi/deg
00196 << " with Rin " << rin << " Rout " << rout
00197 << " ZHalf " << dz;
00198 DDName connName(DDSplit(connM[i]).first, DDSplit(connM[i]).second);
00199 DDMaterial connMatter(connName);
00200 DDLogicalPart connLogic(DDName(name, idNameSpace), connMatter, solid);
00201
00202 DDTranslation r2(0, 0, (dz-diskDz));
00203 DDpos(DDName(name,idNameSpace), diskName, i+1, r2, DDRotation());
00204 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00205 << DDName(name,idNameSpace) << " number " << i+1
00206 << " positioned in " << diskName << " at " << r2
00207 << " with no rotation";
00208
00209
00210 name = "TOBRadServices" + names[i];
00211 rin = 0.5*(rodRin[i]+rodRout[i]);
00212 rout = ( i+1 == (int)(names.size()) ? rMax : 0.5*(rodRin[i+1]+rodRout[i+1]) );
00213 std::vector<double> pgonZ;
00214 pgonZ.push_back(-0.5*cableT);
00215 pgonZ.push_back(cableT*(rin/rMax-0.5));
00216 pgonZ.push_back(0.5*cableT);
00217 std::vector<double> pgonRmin;
00218 pgonRmin.push_back(rin);
00219 pgonRmin.push_back(rin);
00220 pgonRmin.push_back(rin);
00221 std::vector<double> pgonRmax;
00222 pgonRmax.push_back(rout);
00223 pgonRmax.push_back(rout);
00224 pgonRmax.push_back(rout);
00225 solid = DDSolidFactory::polycone(DDName(name, idNameSpace), 0, twopi,
00226 pgonZ, pgonRmin, pgonRmax);
00227 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00228 << DDName(name, idNameSpace) <<" Polycone made of "
00229 << cableM[i] << " from 0 to " << twopi/deg
00230 << " and with " << pgonZ.size() << " sections";
00231 for (int ii = 0; ii < (int)(pgonZ.size()); ii++)
00232 LogDebug("TOBGeom") << "\t[" << ii << "]\tZ = " << pgonZ[ii]
00233 << "\tRmin = " << pgonRmin[ii] << "\tRmax = "
00234 << pgonRmax[ii];
00235 DDName cableName(DDSplit(cableM[i]).first, DDSplit(cableM[i]).second);
00236 DDMaterial cableMatter(cableName);
00237 DDLogicalPart cableLogic(DDName(name, idNameSpace), cableMatter, solid);
00238
00239 DDTranslation r3(0, 0, (diskDz-(i+0.5)*cableT));
00240 DDpos(DDName(name,idNameSpace), diskName, i+1, r3, DDRotation());
00241 LogDebug("TOBGeom") << "DDTOBRadCableAlgo test: "
00242 << DDName(name,idNameSpace) << " number " <<i+1
00243 << " positioned in " << diskName << " at " << r3
00244 << " with no rotation";
00245
00246 }
00247
00248 LogDebug("TOBGeom") << "<<== End of DDTOBRadCableAlgo construction ...";
00249 }