+ // Create the geometry of the services
+ //
+ // Names of the TRD services volumina
+ //
+ // UTC1 Cooling arterias (Al)
+ // UTC2 Cooling arterias (Water)
+ // UUxx Volumes for the services at the chambers (Air)
+ // UMCM Readout MCMs (G10/Cu/Si)
+ // UDCS DCSs boards (G10/Cu)
+ // UTP1 Power bars (Cu)
+ // UTCP Cooling pipes (Fe)
+ // UTCH Cooling pipes (Water)
+ // UTPL Power lines (Cu)
+ // UTGD Gas distribution box (V2A)
+ //
+
+ Int_t ilayer = 0;
+ Int_t istack = 0;
+
+ Float_t xpos = 0.0;
+ Float_t ypos = 0.0;
+ Float_t zpos = 0.0;
+
+ const Int_t kTag = 100;
+ Char_t cTagV[kTag];
+
+ const Int_t kNparBox = 3;
+ Float_t parBox[kNparBox];
+
+ const Int_t kNparTube = 3;
+ Float_t parTube[kNparTube];
+
+ // Services inside the baby frame
+ const Float_t kBBMdz = 223.0;
+ const Float_t kBBSdz = 8.5;
+
+ // Services inside the back frame
+ const Float_t kBFMdz = 118.0;
+ const Float_t kBFSdz = 8.5;
+
+ // The rotation matrices
+ const Int_t kNmatrix = 10;
+ Int_t matrix[kNmatrix];
+ gMC->Matrix(matrix[0], 100.0, 0.0, 90.0, 90.0, 10.0, 0.0); // rotation around y-axis
+ gMC->Matrix(matrix[1], 80.0, 0.0, 90.0, 90.0, 10.0, 180.0); // rotation around y-axis
+ gMC->Matrix(matrix[2], 0.0, 0.0, 90.0, 90.0, 90.0, 0.0);
+ gMC->Matrix(matrix[3], 180.0, 0.0, 90.0, 90.0, 90.0, 180.0);
+ gMC->Matrix(matrix[4], 90.0, 0.0, 0.0, 0.0, 90.0, 90.0);
+ gMC->Matrix(matrix[5], 100.0, 0.0, 90.0, 270.0, 10.0, 0.0);
+ gMC->Matrix(matrix[6], 80.0, 0.0, 90.0, 270.0, 10.0, 180.0);
+ gMC->Matrix(matrix[7], 90.0, 10.0, 90.0, 100.0, 0.0, 0.0); // rotation around z-axis
+ gMC->Matrix(matrix[8], 90.0, 350.0, 90.0, 80.0, 0.0, 0.0); // rotation around z-axis
+ gMC->Matrix(matrix[9], 90.0, 90.0, 90.0, 180.0, 0.0, 0.0); // rotation around z-axis
+
+ //
+ // The cooling arterias
+ //
+
+ // Width of the cooling arterias
+ const Float_t kCOLwid = 0.8;
+ // Height of the cooling arterias
+ const Float_t kCOLhgt = 6.5;
+ // Positioning of the cooling
+ const Float_t kCOLposx = 1.0;
+ const Float_t kCOLposz = -1.2;
+ // Thickness of the walls of the cooling arterias
+ const Float_t kCOLthk = 0.1;
+ const Int_t kNparCOL = 3;
+ Float_t parCOL[kNparCOL];
+ parCOL[0] = 0.0;
+ parCOL[1] = 0.0;
+ parCOL[2] = 0.0;
+ gMC->Gsvolu("UTC1","BOX ",idtmed[1308-1],parCOL,0);
+ gMC->Gsvolu("UTC3","BOX ",idtmed[1308-1],parCOL,0);
+ parCOL[0] = kCOLwid/2.0 - kCOLthk;
+ parCOL[1] = -1.0;
+ parCOL[2] = kCOLhgt/2.0 - kCOLthk;
+ gMC->Gsvolu("UTC2","BOX ",idtmed[1314-1],parCOL,kNparCOL);
+ gMC->Gsvolu("UTC4","BOX ",idtmed[1314-1],parCOL,kNparCOL);
+
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = 0.0;
+ gMC->Gspos("UTC2",1,"UTC1", xpos,ypos,zpos,0,"ONLY");
+ gMC->Gspos("UTC4",1,"UTC3", xpos,ypos,zpos,0,"ONLY");
+
+ for (ilayer = 1; ilayer < kNlayer; ilayer++) {
+
+ // Along the chambers
+ xpos = fgkCwidth[ilayer]/2.0 + kCOLwid/2.0 + kCOLposx;
+ ypos = 0.0;
+ zpos = fgkVrocsm + fgkSMpltT - fgkCalZpos
+ + kCOLhgt/2.0 - fgkSheight/2.0 + kCOLposz
+ + ilayer * (fgkCH + fgkVspace);
+ parCOL[0] = kCOLwid /2.0;
+ parCOL[1] = fgkSlength/2.0;
+ parCOL[2] = kCOLhgt /2.0;
+ gMC->Gsposp("UTC1",ilayer ,"UTI1", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC1",ilayer+ kNlayer,"UTI1",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC1",ilayer+6*kNlayer,"UTI2", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC1",ilayer+7*kNlayer,"UTI2",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC1",ilayer+8*kNlayer ,"UTI3", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC1",ilayer+9*kNlayer,"UTI3",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parCOL,kNparCOL);
+
+ // Front of supermodules
+ xpos = fgkCwidth[ilayer]/2.0 + kCOLwid/2.0 + kCOLposx;
+ ypos = 0.0;
+ zpos = fgkVrocsm + fgkSMpltT - fgkCalZpos
+ + kCOLhgt/2.0 - fgkSheight/2.0 + kCOLposz
+ + ilayer * (fgkCH + fgkVspace);
+ parCOL[0] = kCOLwid /2.0;
+ parCOL[1] = fgkFlength/2.0;
+ parCOL[2] = kCOLhgt /2.0;
+ gMC->Gsposp("UTC3",ilayer+2*kNlayer,"UTF1", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC3",ilayer+3*kNlayer,"UTF1",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC3",ilayer+4*kNlayer,"UTF2", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC3",ilayer+5*kNlayer,"UTF2",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parCOL,kNparCOL);
+
+ }
+
+ for (ilayer = 1; ilayer < kNlayer; ilayer++) {
+
+ // In baby frame
+ xpos = fgkCwidth[ilayer]/2.0 + kCOLwid/2.0 + kCOLposx - 2.5;
+ ypos = kBBSdz/2.0 - kBBMdz/2.0;
+ zpos = fgkVrocsm + fgkSMpltT - fgkCalZpos
+ + kCOLhgt/2.0 - fgkSheight/2.0 + kCOLposz
+ + ilayer * (fgkCH + fgkVspace);
+ parCOL[0] = kCOLwid/2.0;
+ parCOL[1] = kBBSdz /2.0;
+ parCOL[2] = kCOLhgt/2.0;
+ gMC->Gsposp("UTC3",ilayer+6*kNlayer,"BBTRD", xpos, ypos, zpos
+ ,matrix[0],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC3",ilayer+7*kNlayer,"BBTRD",-xpos, ypos, zpos
+ ,matrix[1],"ONLY",parCOL,kNparCOL);
+
+ }
+
+ for (ilayer = 1; ilayer < kNlayer; ilayer++) {
+
+ // In back frame
+ xpos = fgkCwidth[ilayer]/2.0 + kCOLwid/2.0 + kCOLposx - 0.3;
+ ypos = -kBFSdz/2.0 + kBFMdz/2.0;
+ zpos = fgkVrocsm + fgkSMpltT - fgkCalZpos
+ + kCOLhgt/2.0 - fgkSheight/2.0 + kCOLposz
+ + ilayer * (fgkCH + fgkVspace);
+ parCOL[0] = kCOLwid/2.0;
+ parCOL[1] = kBFSdz /2.0;
+ parCOL[2] = kCOLhgt/2.0;
+ gMC->Gsposp("UTC3",ilayer+6*kNlayer,"BFTRD", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC3",ilayer+7*kNlayer,"BFTRD",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parCOL,kNparCOL);
+
+ }
+
+ // The upper most layer
+ // Along the chambers
+ xpos = fgkCwidth[5]/2.0 - kCOLhgt/2.0 - 1.3;
+ ypos = 0.0;
+ zpos = fgkSheight/2.0 - fgkSMpltT - 0.4 - kCOLwid/2.0;
+ parCOL[0] = kCOLwid /2.0;
+ parCOL[1] = fgkSlength/2.0;
+ parCOL[2] = kCOLhgt /2.0;
+ gMC->Gsposp("UTC1",6 ,"UTI1", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC1",6+ kNlayer,"UTI1",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC1",6+6*kNlayer,"UTI2", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC1",6+7*kNlayer,"UTI2",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC1",6+8*kNlayer,"UTI3", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC1",6+9*kNlayer,"UTI3",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ // Front of supermodules
+ xpos = fgkCwidth[5]/2.0 - kCOLhgt/2.0 - 1.3;
+ ypos = 0.0;
+ zpos = fgkSheight/2.0 - fgkSMpltT - 0.4 - kCOLwid/2.0;
+ parCOL[0] = kCOLwid /2.0;
+ parCOL[1] = fgkFlength/2.0;
+ parCOL[2] = kCOLhgt /2.0;
+ gMC->Gsposp("UTC3",6+2*kNlayer,"UTF1", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC3",6+3*kNlayer,"UTF1",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC3",6+4*kNlayer,"UTF2", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC3",6+5*kNlayer,"UTF2",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ // In baby frame
+ xpos = fgkCwidth[5]/2.0 - kCOLhgt/2.0 - 3.1;
+ ypos = kBBSdz/2.0 - kBBMdz/2.0;
+ zpos = fgkSheight/2.0 - fgkSMpltT - 0.4 - kCOLwid/2.0;
+ parCOL[0] = kCOLwid/2.0;
+ parCOL[1] = kBBSdz /2.0;
+ parCOL[2] = kCOLhgt/2.0;
+ gMC->Gsposp("UTC3",6+6*kNlayer,"BBTRD", xpos, ypos, zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC3",6+7*kNlayer,"BBTRD",-xpos, ypos, zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ // In back frame
+ xpos = fgkCwidth[5]/2.0 - kCOLhgt/2.0 - 1.3;
+ ypos = -kBFSdz/2.0 + kBFMdz/2.0;
+ zpos = fgkSheight/2.0 - fgkSMpltT - 0.4 - kCOLwid/2.0;
+ parCOL[0] = kCOLwid/2.0;
+ parCOL[1] = kBFSdz /2.0;
+ parCOL[2] = kCOLhgt/2.0;
+ gMC->Gsposp("UTC3",6+6*kNlayer,"BFTRD", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+ gMC->Gsposp("UTC3",6+7*kNlayer,"BFTRD",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parCOL,kNparCOL);
+
+ //
+ // The power bus bars
+ //
+
+ const Float_t kPWRwid = 0.6;
+ // Increase the height of the power bus bars to take into
+ // account the material of additional cables, etc.
+ const Float_t kPWRhgtA = 5.0 + 0.2;
+ const Float_t kPWRhgtB = 5.0;
+ const Float_t kPWRposx = 2.0;
+ const Float_t kPWRposz = 0.1;
+ const Int_t kNparPWR = 3;
+ Float_t parPWR[kNparPWR];
+ parPWR[0] = 0.0;
+ parPWR[1] = 0.0;
+ parPWR[2] = 0.0;
+ gMC->Gsvolu("UTP1","BOX ",idtmed[1325-1],parPWR,0);
+ gMC->Gsvolu("UTP3","BOX ",idtmed[1325-1],parPWR,0);
+
+ for (ilayer = 1; ilayer < kNlayer; ilayer++) {
+
+ // Along the chambers
+ xpos = fgkCwidth[ilayer]/2.0 + kPWRwid/2.0 + kPWRposx;
+ ypos = 0.0;
+ zpos = fgkVrocsm + fgkSMpltT - fgkCalZpos
+ + kPWRhgtA/2.0 - fgkSheight/2.0 + kPWRposz
+ + ilayer * (fgkCH + fgkVspace);
+ parPWR[0] = kPWRwid /2.0;
+ parPWR[1] = fgkSlength/2.0;
+ parPWR[2] = kPWRhgtA /2.0;
+ gMC->Gsposp("UTP1",ilayer ,"UTI1", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP1",ilayer+ kNlayer,"UTI1",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP1",ilayer+6*kNlayer,"UTI2", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP1",ilayer+7*kNlayer,"UTI2",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP1",ilayer+8*kNlayer,"UTI3", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP1",ilayer+9*kNlayer,"UTI3",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parPWR,kNparPWR);
+
+ // Front of supermodule
+ xpos = fgkCwidth[ilayer]/2.0 + kPWRwid/2.0 + kPWRposx;
+ ypos = 0.0;
+ zpos = fgkVrocsm + fgkSMpltT - fgkCalZpos
+ + kPWRhgtA/2.0 - fgkSheight/2.0 + kPWRposz
+ + ilayer * (fgkCH + fgkVspace);
+ parPWR[0] = kPWRwid /2.0;
+ parPWR[1] = fgkFlength/2.0;
+ parPWR[2] = kPWRhgtA /2.0;
+ gMC->Gsposp("UTP3",ilayer+2*kNlayer,"UTF1", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP3",ilayer+3*kNlayer,"UTF1",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP3",ilayer+4*kNlayer,"UTF2", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP3",ilayer+5*kNlayer,"UTF2",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parPWR,kNparPWR);
+
+ }
+
+ for (ilayer = 1; ilayer < kNlayer; ilayer++) {
+
+ // In baby frame
+ xpos = fgkCwidth[ilayer]/2.0 + kPWRwid/2.0 + kPWRposx - 2.5;
+ ypos = kBBSdz/2.0 - kBBMdz/2.0;
+ zpos = fgkVrocsm + fgkSMpltT - fgkCalZpos
+ + kPWRhgtB/2.0 - fgkSheight/2.0 + kPWRposz
+ + ilayer * (fgkCH + fgkVspace);
+ parPWR[0] = kPWRwid /2.0;
+ parPWR[1] = kBBSdz /2.0;
+ parPWR[2] = kPWRhgtB/2.0;
+ gMC->Gsposp("UTP3",ilayer+6*kNlayer,"BBTRD", xpos, ypos, zpos
+ ,matrix[0],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP3",ilayer+7*kNlayer,"BBTRD",-xpos, ypos, zpos
+ ,matrix[1],"ONLY",parPWR,kNparPWR);
+
+ }
+
+ for (ilayer = 1; ilayer < kNlayer; ilayer++) {
+
+ // In back frame
+ xpos = fgkCwidth[ilayer]/2.0 + kPWRwid/2.0 + kPWRposx - 0.3;
+ ypos = -kBFSdz/2.0 + kBFMdz/2.0;
+ zpos = fgkVrocsm + fgkSMpltT - fgkCalZpos
+ + kPWRhgtB/2.0 - fgkSheight/2.0 + kPWRposz
+ + ilayer * (fgkCH + fgkVspace);
+ parPWR[0] = kPWRwid /2.0;
+ parPWR[1] = kBFSdz /2.0;
+ parPWR[2] = kPWRhgtB/2.0;
+ gMC->Gsposp("UTP3",ilayer+8*kNlayer,"BFTRD", xpos,ypos,zpos
+ ,matrix[0],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP3",ilayer+9*kNlayer,"BFTRD",-xpos,ypos,zpos
+ ,matrix[1],"ONLY",parPWR,kNparPWR);
+
+ }
+
+ // The upper most layer
+ // Along the chambers
+ xpos = fgkCwidth[5]/2.0 + kPWRhgtB/2.0 - 1.3;
+ ypos = 0.0;
+ zpos = fgkSheight/2.0 - fgkSMpltT - 0.6 - kPWRwid/2.0;
+ parPWR[0] = kPWRwid /2.0;
+ parPWR[1] = fgkSlength/2.0;
+ parPWR[2] = kPWRhgtB /2.0 ;
+ gMC->Gsposp("UTP1",6 ,"UTI1", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP1",6+ kNlayer,"UTI1",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP1",6+6*kNlayer,"UTI2", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP1",6+7*kNlayer,"UTI2",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP1",6+8*kNlayer,"UTI3", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP1",6+9*kNlayer,"UTI3",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ // Front of supermodules
+ xpos = fgkCwidth[5]/2.0 + kPWRhgtB/2.0 - 1.3;
+ ypos = 0.0;
+ zpos = fgkSheight/2.0 - fgkSMpltT - 0.6 - kPWRwid/2.0;
+ parPWR[0] = kPWRwid /2.0;
+ parPWR[1] = fgkFlength/2.0;
+ parPWR[2] = kPWRhgtB /2.0;
+ gMC->Gsposp("UTP3",6+2*kNlayer,"UTF1", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP3",6+3*kNlayer,"UTF1",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP3",6+4*kNlayer,"UTF2", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP3",6+5*kNlayer,"UTF2",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ // In baby frame
+ xpos = fgkCwidth[5]/2.0 + kPWRhgtB/2.0 - 3.0;
+ ypos = kBBSdz/2.0 - kBBMdz/2.0;
+ zpos = fgkSheight/2.0 - fgkSMpltT - 0.6 - kPWRwid/2.0;
+ parPWR[0] = kPWRwid /2.0;
+ parPWR[1] = kBBSdz /2.0;
+ parPWR[2] = kPWRhgtB/2.0;
+ gMC->Gsposp("UTP3",6+6*kNlayer,"BBTRD", xpos, ypos, zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP3",6+7*kNlayer,"BBTRD",-xpos, ypos, zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ // In back frame
+ xpos = fgkCwidth[5]/2.0 + kPWRhgtB/2.0 - 1.3;
+ ypos = -kBFSdz/2.0 + kBFMdz/2.0;
+ zpos = fgkSheight/2.0 - fgkSMpltT - 0.6 - kPWRwid/2.0;
+ parPWR[0] = kPWRwid /2.0;
+ parPWR[1] = kBFSdz /2.0;
+ parPWR[2] = kPWRhgtB/2.0;
+ gMC->Gsposp("UTP3",6+8*kNlayer,"BFTRD", xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+ gMC->Gsposp("UTP3",6+9*kNlayer,"BFTRD",-xpos,ypos,zpos
+ ,matrix[3],"ONLY",parPWR,kNparPWR);
+
+ //
+ // The gas tubes connecting the chambers in the super modules with holes
+ // Material: Stainless steel
+ //
+
+ parTube[0] = 0.0;
+ parTube[1] = 2.2/2.0;
+ parTube[2] = fgkClength[5][2]/2.0 - fgkHspace/2.0;
+ gMC->Gsvolu("UTG1","TUBE",idtmed[1308-1],parTube,kNparTube);
+ parTube[0] = 0.0;
+ parTube[1] = 2.1/2.0;
+ parTube[2] = fgkClength[5][2]/2.0 - fgkHspace/2.0;
+ gMC->Gsvolu("UTG2","TUBE",idtmed[1309-1],parTube,kNparTube);
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = 0.0;
+ gMC->Gspos("UTG2",1,"UTG1",xpos,ypos,zpos,0,"ONLY");
+ for (ilayer = 0; ilayer < kNlayer; ilayer++) {
+ xpos = fgkCwidth[ilayer]/2.0 + kCOLwid/2.0 - 1.5;
+ ypos = 0.0;
+ zpos = fgkVrocsm + fgkSMpltT + kCOLhgt/2.0 - fgkSheight/2.0 + 5.0
+ + ilayer * (fgkCH + fgkVspace);
+ gMC->Gspos("UTG1",1+ilayer,"UTI3", xpos, ypos, zpos,matrix[4],"ONLY");
+ gMC->Gspos("UTG1",7+ilayer,"UTI3",-xpos, ypos, zpos,matrix[4],"ONLY");
+ }
+
+ //
+ // The volumes for the services at the chambers
+ //
+
+ const Int_t kNparServ = 3;
+ Float_t parServ[kNparServ];
+
+ for (istack = 0; istack < kNstack; istack++) {
+ for (ilayer = 0; ilayer < kNlayer; ilayer++) {
+
+ Int_t iDet = GetDetectorSec(ilayer,istack);
+
+ snprintf(cTagV,kTag,"UU%02d",iDet);
+ parServ[0] = fgkCwidth[ilayer] /2.0;
+ parServ[1] = fgkClength[ilayer][istack]/2.0 - fgkHspace/2.0;
+ parServ[2] = fgkCsvH /2.0;
+ gMC->Gsvolu(cTagV,"BOX",idtmed[1302-1],parServ,kNparServ);
+
+ }
+ }
+
+ //
+ // The cooling pipes inside the service volumes
+ //
+
+ // The cooling pipes
+ parTube[0] = 0.0;
+ parTube[1] = 0.0;
+ parTube[2] = 0.0;
+ gMC->Gsvolu("UTCP","TUBE",idtmed[1324-1],parTube,0);
+ // The cooling water
+ parTube[0] = 0.0;
+ parTube[1] = 0.2/2.0;
+ parTube[2] = -1.0;
+ gMC->Gsvolu("UTCH","TUBE",idtmed[1314-1],parTube,kNparTube);
+ // Water inside the cooling pipe
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = 0.0;
+ gMC->Gspos("UTCH",1,"UTCP",xpos,ypos,zpos,0,"ONLY");
+
+ // Position the cooling pipes in the mother volume
+ for (istack = 0; istack < kNstack; istack++) {
+ for (ilayer = 0; ilayer < kNlayer; ilayer++) {
+ Int_t iDet = GetDetectorSec(ilayer,istack);
+ Int_t iCopy = GetDetector(ilayer,istack,0) * 100;
+ Int_t nMCMrow = GetRowMax(ilayer,istack,0);
+ Float_t ySize = (GetChamberLength(ilayer,istack) - 2.0*fgkRpadW)
+ / ((Float_t) nMCMrow);
+ snprintf(cTagV,kTag,"UU%02d",iDet);
+ for (Int_t iMCMrow = 0; iMCMrow < nMCMrow; iMCMrow++) {
+ xpos = 0.0;
+ ypos = (0.5 + iMCMrow) * ySize
+ - fgkClength[ilayer][istack]/2.0 + fgkHspace/2.0;
+ zpos = 0.0 + 0.742/2.0;
+ // The cooling pipes
+ parTube[0] = 0.0;
+ parTube[1] = 0.3/2.0; // Thickness of the cooling pipes
+ parTube[2] = fgkCwidth[ilayer]/2.0;
+ gMC->Gsposp("UTCP",iCopy+iMCMrow,cTagV,xpos,ypos,zpos
+ ,matrix[2],"ONLY",parTube,kNparTube);
+ }
+ }
+ }
+
+ //
+ // The power lines
+ //
+
+ // The copper power lines
+ parTube[0] = 0.0;
+ parTube[1] = 0.0;
+ parTube[2] = 0.0;
+ gMC->Gsvolu("UTPL","TUBE",idtmed[1305-1],parTube,0);
+
+ // Position the power lines in the mother volume
+ for (istack = 0; istack < kNstack; istack++) {
+ for (ilayer = 0; ilayer < kNlayer; ilayer++) {
+ Int_t iDet = GetDetectorSec(ilayer,istack);
+ Int_t iCopy = GetDetector(ilayer,istack,0) * 100;
+ Int_t nMCMrow = GetRowMax(ilayer,istack,0);
+ Float_t ySize = (GetChamberLength(ilayer,istack) - 2.0*fgkRpadW)
+ / ((Float_t) nMCMrow);
+ snprintf(cTagV,kTag,"UU%02d",iDet);
+ for (Int_t iMCMrow = 0; iMCMrow < nMCMrow; iMCMrow++) {
+ xpos = 0.0;
+ ypos = (0.5 + iMCMrow) * ySize - 1.0
+ - fgkClength[ilayer][istack]/2.0 + fgkHspace/2.0;
+ zpos = -0.4 + 0.742/2.0;
+ parTube[0] = 0.0;
+ parTube[1] = 0.2/2.0; // Thickness of the power lines
+ parTube[2] = fgkCwidth[ilayer]/2.0;
+ gMC->Gsposp("UTPL",iCopy+iMCMrow,cTagV,xpos,ypos,zpos
+ ,matrix[2],"ONLY",parTube,kNparTube);
+ }
+ }
+ }
+
+ //
+ // The MCMs
+ //
+
+ const Float_t kMCMx = 3.0;
+ const Float_t kMCMy = 3.0;
+ const Float_t kMCMz = 0.3;
+
+ const Float_t kMCMpcTh = 0.1;
+ const Float_t kMCMcuTh = 0.0025;
+ const Float_t kMCMsiTh = 0.03;
+ const Float_t kMCMcoTh = 0.04;
+
+ // The mother volume for the MCMs (air)
+ const Int_t kNparMCM = 3;
+ Float_t parMCM[kNparMCM];
+ parMCM[0] = kMCMx /2.0;
+ parMCM[1] = kMCMy /2.0;
+ parMCM[2] = kMCMz /2.0;
+ gMC->Gsvolu("UMCM","BOX",idtmed[1302-1],parMCM,kNparMCM);
+
+ // The MCM carrier G10 layer
+ parMCM[0] = kMCMx /2.0;
+ parMCM[1] = kMCMy /2.0;
+ parMCM[2] = kMCMpcTh/2.0;
+ gMC->Gsvolu("UMC1","BOX",idtmed[1319-1],parMCM,kNparMCM);
+ // The MCM carrier Cu layer
+ parMCM[0] = kMCMx /2.0;
+ parMCM[1] = kMCMy /2.0;
+ parMCM[2] = kMCMcuTh/2.0;
+ gMC->Gsvolu("UMC2","BOX",idtmed[1318-1],parMCM,kNparMCM);
+ // The silicon of the chips
+ parMCM[0] = kMCMx /2.0;
+ parMCM[1] = kMCMy /2.0;
+ parMCM[2] = kMCMsiTh/2.0;
+ gMC->Gsvolu("UMC3","BOX",idtmed[1320-1],parMCM,kNparMCM);
+ // The aluminum of the cooling plates
+ parMCM[0] = kMCMx /2.0;
+ parMCM[1] = kMCMy /2.0;
+ parMCM[2] = kMCMcoTh/2.0;
+ gMC->Gsvolu("UMC4","BOX",idtmed[1324-1],parMCM,kNparMCM);
+
+ // Put the MCM material inside the MCM mother volume
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = -kMCMz /2.0 + kMCMpcTh/2.0;
+ gMC->Gspos("UMC1",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
+ zpos += kMCMpcTh/2.0 + kMCMcuTh/2.0;
+ gMC->Gspos("UMC2",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
+ zpos += kMCMcuTh/2.0 + kMCMsiTh/2.0;
+ gMC->Gspos("UMC3",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
+ zpos += kMCMsiTh/2.0 + kMCMcoTh/2.0;
+ gMC->Gspos("UMC4",1,"UMCM",xpos,ypos,zpos,0,"ONLY");
+
+ // Position the MCMs in the mother volume
+ for (istack = 0; istack < kNstack; istack++) {
+ for (ilayer = 0; ilayer < kNlayer; ilayer++) {
+ Int_t iDet = GetDetectorSec(ilayer,istack);
+ Int_t iCopy = GetDetector(ilayer,istack,0) * 1000;
+ Int_t nMCMrow = GetRowMax(ilayer,istack,0);
+ Float_t ySize = (GetChamberLength(ilayer,istack) - 2.0*fgkRpadW)
+ / ((Float_t) nMCMrow);
+ Int_t nMCMcol = 8;
+ Float_t xSize = (GetChamberWidth(ilayer) - 2.0*fgkCpadW)
+ / ((Float_t) nMCMcol + 6); // Introduce 6 gaps
+ Int_t iMCM[8] = { 1, 2, 3, 5, 8, 9, 10, 12 }; // 0..7 MCM + 6 gap structure
+ snprintf(cTagV,kTag,"UU%02d",iDet);
+ for (Int_t iMCMrow = 0; iMCMrow < nMCMrow; iMCMrow++) {
+ for (Int_t iMCMcol = 0; iMCMcol < nMCMcol; iMCMcol++) {
+ xpos = (0.5 + iMCM[iMCMcol]) * xSize + 1.0
+ - fgkCwidth[ilayer]/2.0;
+ ypos = (0.5 + iMCMrow) * ySize + 1.0
+ - fgkClength[ilayer][istack]/2.0 + fgkHspace/2.0;
+ zpos = -0.4 + 0.742/2.0;
+ gMC->Gspos("UMCM",iCopy+iMCMrow*10+iMCMcol,cTagV
+ ,xpos,ypos,zpos,0,"ONLY");
+ // Add two additional smaller cooling pipes on top of the MCMs
+ // to mimic the meandering structure
+ xpos = (0.5 + iMCM[iMCMcol]) * xSize + 1.0
+ - fgkCwidth[ilayer]/2.0;
+ ypos = (0.5 + iMCMrow) * ySize
+ - fgkClength[ilayer][istack]/2.0 + fgkHspace/2.0;
+ zpos = 0.0 + 0.742/2.0;
+ parTube[0] = 0.0;
+ parTube[1] = 0.3/2.0; // Thickness of the cooling pipes
+ parTube[2] = kMCMx/2.0;
+ gMC->Gsposp("UTCP",iCopy+iMCMrow*10+iMCMcol+ 50,cTagV
+ ,xpos,ypos+1.0,zpos
+ ,matrix[2],"ONLY",parTube,kNparTube);
+ gMC->Gsposp("UTCP",iCopy+iMCMrow*10+iMCMcol+500,cTagV
+ ,xpos,ypos+2.0,zpos
+ ,matrix[2],"ONLY",parTube,kNparTube);
+
+ }
+ }
+
+ }
+ }
+
+ //
+ // The DCS boards
+ //
+
+ const Float_t kDCSx = 9.0;
+ const Float_t kDCSy = 14.5;
+ const Float_t kDCSz = 0.3;
+
+ const Float_t kDCSpcTh = 0.15;
+ const Float_t kDCScuTh = 0.01;
+ const Float_t kDCScoTh = 0.04;
+
+ // The mother volume for the DCSs (air)
+ const Int_t kNparDCS = 3;
+ Float_t parDCS[kNparDCS];
+ parDCS[0] = kDCSx /2.0;
+ parDCS[1] = kDCSy /2.0;
+ parDCS[2] = kDCSz /2.0;
+ gMC->Gsvolu("UDCS","BOX",idtmed[1302-1],parDCS,kNparDCS);
+
+ // The DCS carrier G10 layer
+ parDCS[0] = kDCSx /2.0;
+ parDCS[1] = kDCSy /2.0;
+ parDCS[2] = kDCSpcTh/2.0;
+ gMC->Gsvolu("UDC1","BOX",idtmed[1319-1],parDCS,kNparDCS);
+ // The DCS carrier Cu layer
+ parDCS[0] = kDCSx /2.0;
+ parDCS[1] = kDCSy /2.0;
+ parDCS[2] = kDCScuTh/2.0;
+ gMC->Gsvolu("UDC2","BOX",idtmed[1318-1],parDCS,kNparDCS);
+ // The aluminum of the cooling plates
+ parDCS[0] = 5.0 /2.0;
+ parDCS[1] = 5.0 /2.0;
+ parDCS[2] = kDCScoTh/2.0;
+ gMC->Gsvolu("UDC3","BOX",idtmed[1324-1],parDCS,kNparDCS);
+
+ // Put the DCS material inside the DCS mother volume
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = -kDCSz /2.0 + kDCSpcTh/2.0;
+ gMC->Gspos("UDC1",1,"UDCS",xpos,ypos,zpos,0,"ONLY");
+ zpos += kDCSpcTh/2.0 + kDCScuTh/2.0;
+ gMC->Gspos("UDC2",1,"UDCS",xpos,ypos,zpos,0,"ONLY");
+ zpos += kDCScuTh/2.0 + kDCScoTh/2.0;
+ gMC->Gspos("UDC3",1,"UDCS",xpos,ypos,zpos,0,"ONLY");
+
+ // Put the DCS board in the chamber services mother volume
+ for (istack = 0; istack < kNstack; istack++) {
+ for (ilayer = 0; ilayer < kNlayer; ilayer++) {
+ Int_t iDet = GetDetectorSec(ilayer,istack);
+ Int_t iCopy = iDet + 1;
+ xpos = fgkCwidth[ilayer]/2.0 - 1.9 * (GetChamberLength(ilayer,istack) - 2.0*fgkRpadW)
+ / ((Float_t) GetRowMax(ilayer,istack,0));
+ ypos = 0.05 * fgkClength[ilayer][istack];
+ zpos = kDCSz/2.0 - fgkCsvH/2.0;
+ snprintf(cTagV,kTag,"UU%02d",iDet);
+ gMC->Gspos("UDCS",iCopy,cTagV,xpos,ypos,zpos,0,"ONLY");
+ }
+ }
+
+ //
+ // The ORI boards
+ //
+
+ const Float_t kORIx = 4.2;
+ const Float_t kORIy = 13.5;
+ const Float_t kORIz = 0.3;
+
+ const Float_t kORIpcTh = 0.15;
+ const Float_t kORIcuTh = 0.01;
+ const Float_t kORIcoTh = 0.04;
+
+ // The mother volume for the ORIs (air)
+ const Int_t kNparORI = 3;
+ Float_t parORI[kNparORI];
+ parORI[0] = kORIx /2.0;
+ parORI[1] = kORIy /2.0;
+ parORI[2] = kORIz /2.0;
+ gMC->Gsvolu("UORI","BOX",idtmed[1302-1],parORI,kNparORI);
+
+ // The ORI carrier G10 layer
+ parORI[0] = kORIx /2.0;
+ parORI[1] = kORIy /2.0;
+ parORI[2] = kORIpcTh/2.0;
+ gMC->Gsvolu("UOR1","BOX",idtmed[1319-1],parORI,kNparORI);
+ // The ORI carrier Cu layer
+ parORI[0] = kORIx /2.0;
+ parORI[1] = kORIy /2.0;
+ parORI[2] = kORIcuTh/2.0;
+ gMC->Gsvolu("UOR2","BOX",idtmed[1318-1],parORI,kNparORI);
+ // The aluminum of the cooling plates
+ parORI[0] = kORIx /2.0;
+ parORI[1] = kORIy /2.0;
+ parORI[2] = kORIcoTh/2.0;
+ gMC->Gsvolu("UOR3","BOX",idtmed[1324-1],parORI,kNparORI);
+
+ // Put the ORI material inside the ORI mother volume
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = -kORIz /2.0 + kORIpcTh/2.0;
+ gMC->Gspos("UOR1",1,"UORI",xpos,ypos,zpos,0,"ONLY");
+ zpos += kORIpcTh/2.0 + kORIcuTh/2.0;
+ gMC->Gspos("UOR2",1,"UORI",xpos,ypos,zpos,0,"ONLY");
+ zpos += kORIcuTh/2.0 + kORIcoTh/2.0;
+ gMC->Gspos("UOR3",1,"UORI",xpos,ypos,zpos,0,"ONLY");
+
+ // Put the ORI board in the chamber services mother volume
+ for (istack = 0; istack < kNstack; istack++) {
+ for (ilayer = 0; ilayer < kNlayer; ilayer++) {
+ Int_t iDet = GetDetectorSec(ilayer,istack);
+ Int_t iCopy = iDet + 1;
+ xpos = fgkCwidth[ilayer]/2.0 - 1.92 * (GetChamberLength(ilayer,istack) - 2.0*fgkRpadW)
+ / ((Float_t) GetRowMax(ilayer,istack,0));
+ ypos = -16.0;
+ zpos = kORIz/2.0 - fgkCsvH/2.0;
+ snprintf(cTagV,kTag,"UU%02d",iDet);
+ gMC->Gspos("UORI",iCopy ,cTagV,xpos,ypos,zpos,0,"ONLY");
+ xpos = -fgkCwidth[ilayer]/2.0 + 3.8 * (GetChamberLength(ilayer,istack) - 2.0*fgkRpadW)
+ / ((Float_t) GetRowMax(ilayer,istack,0));
+ ypos = -16.0;
+ zpos = kORIz/2.0 - fgkCsvH/2.0;
+ snprintf(cTagV,kTag,"UU%02d",iDet);
+ gMC->Gspos("UORI",iCopy+kNdet,cTagV,xpos,ypos,zpos,0,"ONLY");
+ }
+ }
+
+ //
+ // Services in front of the super module
+ //
+
+ // Gas in-/outlet pipes (INOX)
+ parTube[0] = 0.0;
+ parTube[1] = 0.0;
+ parTube[2] = 0.0;
+ gMC->Gsvolu("UTG3","TUBE",idtmed[1308-1],parTube,0);
+ // The gas inside the in-/outlet pipes (Xe)
+ parTube[0] = 0.0;
+ parTube[1] = 1.2/2.0;
+ parTube[2] = -1.0;
+ gMC->Gsvolu("UTG4","TUBE",idtmed[1309-1],parTube,kNparTube);
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = 0.0;
+ gMC->Gspos("UTG4",1,"UTG3",xpos,ypos,zpos,0,"ONLY");
+ for (ilayer = 0; ilayer < kNlayer-1; ilayer++) {
+ xpos = 0.0;
+ ypos = fgkClength[ilayer][2]/2.0
+ + fgkClength[ilayer][1]
+ + fgkClength[ilayer][0];
+ zpos = 9.0 - fgkSheight/2.0
+ + ilayer * (fgkCH + fgkVspace);
+ parTube[0] = 0.0;
+ parTube[1] = 1.5/2.0;
+ parTube[2] = fgkCwidth[ilayer]/2.0 - 2.5;
+ gMC->Gsposp("UTG3",ilayer+1 ,"UTI1", xpos, ypos, zpos
+ ,matrix[2],"ONLY",parTube,kNparTube);
+ gMC->Gsposp("UTG3",ilayer+1+1*kNlayer,"UTI1", xpos,-ypos, zpos
+ ,matrix[2],"ONLY",parTube,kNparTube);
+ gMC->Gsposp("UTG3",ilayer+1+2*kNlayer,"UTI2", xpos, ypos, zpos
+ ,matrix[2],"ONLY",parTube,kNparTube);
+ gMC->Gsposp("UTG3",ilayer+1+3*kNlayer,"UTI2", xpos,-ypos, zpos
+ ,matrix[2],"ONLY",parTube,kNparTube);
+ gMC->Gsposp("UTG3",ilayer+1+4*kNlayer,"UTI3", xpos, ypos, zpos
+ ,matrix[2],"ONLY",parTube,kNparTube);
+ gMC->Gsposp("UTG3",ilayer+1+5*kNlayer,"UTI3", xpos,-ypos, zpos
+ ,matrix[2],"ONLY",parTube,kNparTube);
+ }
+
+ // Gas distribution box
+ parBox[0] = 14.50/2.0;
+ parBox[1] = 4.52/2.0;
+ parBox[2] = 5.00/2.0;
+ gMC->Gsvolu("UTGD","BOX ",idtmed[1308-1],parBox,kNparBox);
+ parBox[0] = 14.50/2.0;
+ parBox[1] = 4.00/2.0;
+ parBox[2] = 4.40/2.0;
+ gMC->Gsvolu("UTGI","BOX ",idtmed[1309-1],parBox,kNparBox);
+ parTube[0] = 0.0;
+ parTube[1] = 4.0/2.0;
+ parTube[2] = 8.0/2.0;
+ gMC->Gsvolu("UTGT","TUBE",idtmed[1308-1],parTube,kNparTube);
+ parTube[0] = 0.0;
+ parTube[1] = 3.4/2.0;
+ parTube[2] = 8.0/2.0;
+ gMC->Gsvolu("UTGG","TUBE",idtmed[1309-1],parTube,kNparTube);
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = 0.0;
+ gMC->Gspos("UTGI",1,"UTGD",xpos,ypos,zpos, 0,"ONLY");
+ gMC->Gspos("UTGG",1,"UTGT",xpos,ypos,zpos, 0,"ONLY");
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = 0.0;
+ gMC->Gspos("UTGD",1,"UTF1",xpos,ypos,zpos, 0,"ONLY");
+ xpos = -3.0;
+ ypos = 0.0;
+ zpos = 6.5;
+ gMC->Gspos("UTGT",1,"UTF1",xpos,ypos,zpos, 0,"ONLY");
+ xpos = -11.25;
+ ypos = 0.0;
+ zpos = 0.5;
+ gMC->Gspos("UTGT",3,"UTF1",xpos,ypos,zpos,matrix[2],"ONLY");
+ xpos = 11.25;
+ ypos = 0.0;
+ zpos = 0.5;
+ gMC->Gspos("UTGT",5,"UTF1",xpos,ypos,zpos,matrix[2],"ONLY");
+
+ // Cooling manifolds
+ parBox[0] = 5.0/2.0;
+ parBox[1] = 23.0/2.0;
+ parBox[2] = 70.0/2.0;
+ gMC->Gsvolu("UTCM","BOX ",idtmed[1302-1],parBox,kNparBox);
+ parBox[0] = 5.0/2.0;
+ parBox[1] = 5.0/2.0;
+ parBox[2] = 70.0/2.0;
+ gMC->Gsvolu("UTCA","BOX ",idtmed[1308-1],parBox,kNparBox);
+ parBox[0] = 5.0/2.0 - 0.3;
+ parBox[1] = 5.0/2.0 - 0.3;
+ parBox[2] = 70.0/2.0 - 0.3;
+ gMC->Gsvolu("UTCW","BOX ",idtmed[1314-1],parBox,kNparBox);
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = 0.0;
+ gMC->Gspos("UTCW",1,"UTCA", xpos, ypos, zpos, 0,"ONLY");
+ xpos = 0.0;
+ ypos = 5.0/2.0 - 23.0/2.0;
+ zpos = 0.0;
+ gMC->Gspos("UTCA",1,"UTCM", xpos, ypos, zpos, 0,"ONLY");
+ parTube[0] = 0.0;
+ parTube[1] = 3.0/2.0;
+ parTube[2] = 18.0/2.0;
+ gMC->Gsvolu("UTCO","TUBE",idtmed[1308-1],parTube,kNparTube);
+ parTube[0] = 0.0;
+ parTube[1] = 3.0/2.0 - 0.3;
+ parTube[2] = 18.0/2.0;
+ gMC->Gsvolu("UTCL","TUBE",idtmed[1314-1],parTube,kNparTube);
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = 0.0;
+ gMC->Gspos("UTCL",1,"UTCO", xpos, ypos, zpos, 0,"ONLY");
+ xpos = 0.0;
+ ypos = 2.5;
+ zpos = -70.0/2.0 + 7.0;
+ gMC->Gspos("UTCO",1,"UTCM", xpos, ypos, zpos,matrix[4],"ONLY");
+ zpos += 7.0;
+ gMC->Gspos("UTCO",2,"UTCM", xpos, ypos, zpos,matrix[4],"ONLY");
+ zpos += 7.0;
+ gMC->Gspos("UTCO",3,"UTCM", xpos, ypos, zpos,matrix[4],"ONLY");
+ zpos += 7.0;
+ gMC->Gspos("UTCO",4,"UTCM", xpos, ypos, zpos,matrix[4],"ONLY");
+ zpos += 7.0;
+ gMC->Gspos("UTCO",5,"UTCM", xpos, ypos, zpos,matrix[4],"ONLY");
+ zpos += 7.0;
+ gMC->Gspos("UTCO",6,"UTCM", xpos, ypos, zpos,matrix[4],"ONLY");
+ zpos += 7.0;
+ gMC->Gspos("UTCO",7,"UTCM", xpos, ypos, zpos,matrix[4],"ONLY");
+ zpos += 7.0;
+ gMC->Gspos("UTCO",8,"UTCM", xpos, ypos, zpos,matrix[4],"ONLY");
+
+ xpos = 40.0;
+ ypos = fgkFlength/2.0 - 23.0/2.0;
+ zpos = 0.0;
+ gMC->Gspos("UTCM",1,"UTF1", xpos, ypos, zpos,matrix[0],"ONLY");
+ gMC->Gspos("UTCM",2,"UTF1",-xpos, ypos, zpos,matrix[1],"ONLY");
+ gMC->Gspos("UTCM",3,"UTF2", xpos,-ypos, zpos,matrix[5],"ONLY");
+ gMC->Gspos("UTCM",4,"UTF2",-xpos,-ypos, zpos,matrix[6],"ONLY");
+
+ // Power connection boards (Cu)
+ parBox[0] = 0.5/2.0;
+ parBox[1] = 15.0/2.0;
+ parBox[2] = 7.0/2.0;
+ gMC->Gsvolu("UTPC","BOX ",idtmed[1325-1],parBox,kNparBox);
+ for (ilayer = 0; ilayer < kNlayer-1; ilayer++) {
+ xpos = fgkCwidth[ilayer]/2.0 + kPWRwid/2.0;
+ ypos = 0.0;
+ zpos = fgkVrocsm + fgkSMpltT + kPWRhgtA/2.0 - fgkSheight/2.0 + kPWRposz
+ + (ilayer+1) * (fgkCH + fgkVspace);
+ gMC->Gspos("UTPC",ilayer ,"UTF1", xpos,ypos,zpos,matrix[0],"ONLY");
+ gMC->Gspos("UTPC",ilayer+kNlayer,"UTF1",-xpos,ypos,zpos,matrix[1],"ONLY");
+ }
+ xpos = fgkCwidth[5]/2.0 + kPWRhgtA/2.0 - 2.0;
+ ypos = 0.0;
+ zpos = fgkSheight/2.0 - fgkSMpltT - 2.0;
+ gMC->Gspos("UTPC",5 ,"UTF1", xpos,ypos,zpos,matrix[3],"ONLY");
+ gMC->Gspos("UTPC",5+kNlayer,"UTF1",-xpos,ypos,zpos,matrix[3],"ONLY");
+
+ // Power connection panel (Al)
+ parBox[0] = 60.0/2.0;
+ parBox[1] = 10.0/2.0;
+ parBox[2] = 3.0/2.0;
+ gMC->Gsvolu("UTPP","BOX ",idtmed[1301-1],parBox,kNparBox);
+ xpos = 0.0;
+ ypos = 0.0;
+ zpos = 18.0;
+ gMC->Gspos("UTPP",1,"UTF1", xpos,ypos,zpos,0,"ONLY");
+
+ //
+ // Electronics boxes