+ (void) iLay;
+ TGeoMedium *glassFiber = GetMedium("SDD SI CHIP$");// glassFiber TO CODE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ TGeoMedium *siliconChip = GetMedium("SDD SI CHIP$");// ITSsddSiChip
+ TGeoMedium *plastiChip = GetMedium("SDDKAPTON (POLYCH2)$"); // ITSsddKAPTON_POLYCH2
+ TGeoMedium *copper = GetMedium("COPPER$");
+ TGeoMedium *alCu12SDD = GetMedium("INOX$"); // ITSsddAlCu12, to code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ TGeoMedium *stainless = GetMedium("INOX$"); // for screws, what is the material ???????????
+
+ //=========================================
+ // cooling support of the Carlos card (HeatBridge):
+ TGeoVolumeAssembly *assemblySupCarlos = new TGeoVolumeAssembly("assemblySupCarlos");
+
+ TGeoBBox *supCarlosBoard1 = new TGeoBBox("",fgkCarlosSuppX1/2,fgkCarlosSuppY1/2,
+ fgkCarlosSuppZ/2);
+ TGeoBBox *supCarlosBoard2 = new TGeoBBox("",fgkCarlosSuppX2/2,fgkCarlosSuppY2/2,
+ fgkCarlosSuppZ/2);
+ TGeoVolume *vSupCarlosBoard1 = new TGeoVolume("vSupCarlosBoard1",
+ supCarlosBoard1, alCu12SDD);
+ TGeoVolume *vSupCarlosBoard2 = new TGeoVolume("vSupCarlosBoard2",
+ supCarlosBoard2, alCu12SDD);
+ vSupCarlosBoard1->SetLineColor(4);
+ vSupCarlosBoard2->SetLineColor(4);
+
+
+ Double_t shiftGlob = -fgkCarlosSuppZ/2+fgkCarlosSuppTopLen;
+ // shift of the main planes in the direction of their width
+ // the center is fixed at the center of the 2 small fixing arms on each sides.
+ //shiftGlob=0.5;
+
+ shiftGlob+= 0.5*fgkCarlosSuppY3/cos((90-fgkCarlosSuppAngle)*TMath::DegToRad());
+ shiftGlob-= 0.5*fgkCarlosSuppY2*tan((90-fgkCarlosSuppAngle)*TMath::DegToRad());
+ Double_t shiftGlobY = shiftGlob*sin(fgkCarlosSuppAngle*TMath::DegToRad());
+ Double_t shiftGlobZ = shiftGlob*cos(fgkCarlosSuppAngle*TMath::DegToRad());
+
+ TGeoTranslation *carlosSupTr1 = new TGeoTranslation( -fgkCarlosSuppX2/2,
+ (-fgkCarlosSuppY1+fgkCarlosSuppY2)/2+shiftGlobY,
+ +shiftGlobZ);
+
+ TGeoTranslation *carlosSupTr2 = new TGeoTranslation( fgkCarlosSuppX1/2,
+ shiftGlobY,
+ shiftGlobZ);
+
+ assemblySupCarlos->AddNode(vSupCarlosBoard1, 0, carlosSupTr1);
+ assemblySupCarlos->AddNode(vSupCarlosBoard2, 0, carlosSupTr2);
+
+ //=========================================
+ // fixing arm of the cooling support :
+ TGeoBBox *supCarlosBoard3 = new TGeoBBox("",fgkCarlosSuppX3/2,fgkCarlosSuppY3/2,
+ fgkCarlosSuppZ3/2);
+ TGeoVolume *vSupCarlosBoard3 = new TGeoVolume("vSupCarlosBoard3",
+ supCarlosBoard3, alCu12SDD);
+ vSupCarlosBoard3->SetLineColor(4);
+
+ // screw inside :
+ TGeoTube *littleScrew = new TGeoTube("littleScrew", 0, fgkLittleScrewR,
+ fgkCarlosSuppY3/2);
+ TGeoVolume *vLittleScrew = new TGeoVolume("vLittleScrew",
+ littleScrew, stainless);
+ TGeoRotation *rotScrew = new TGeoRotation("",0,90,0);
+ TGeoCombiTrans *cbScrew1 = new TGeoCombiTrans(0, 0, fgkCarlosSuppZ3/2 -
+ fgkLittleScrewHeadR-0.07, rotScrew);
+ TGeoCombiTrans *cbScrew2 = new TGeoCombiTrans(0, 0, -fgkCarlosSuppZ3/2 +
+ fgkLittleScrewHeadR+0.07, rotScrew);
+ vSupCarlosBoard3->AddNode(vLittleScrew,1, cbScrew1);
+ vSupCarlosBoard3->AddNode(vLittleScrew,2, cbScrew2);
+
+ TGeoRotation *carlosSupRot = new TGeoRotation("carlosSuppInvertAngle",
+ 0, fgkCarlosSuppAngle, 0);
+ TGeoCombiTrans *carlosSupTr3 = new TGeoCombiTrans((fgkCarlosSuppX1+
+ fgkCarlosSuppX2+fgkCarlosSuppX3)/2,0,0, carlosSupRot);
+ TGeoCombiTrans *carlosSupTr4 = new TGeoCombiTrans(-(fgkCarlosSuppX1+
+ fgkCarlosSuppX2+fgkCarlosSuppX3)/2,0,0, carlosSupRot);
+ assemblySupCarlos->AddNode(vSupCarlosBoard3, 0, carlosSupTr3);
+ assemblySupCarlos->AddNode(vSupCarlosBoard3, 1, carlosSupTr4);
+
+
+ //=========================================
+ // screws fixing the board on the U tube
+ Double_t aaa = fgkCarlosSuppY3; // ???
+ //Double_t aaa = fgkCarlosSuppY3/2 + fgkLittleScrewHeadH/2;
+ Double_t bbb = fgkCarlosSuppZ3/2 - fgkLittleScrewHeadR;
+ Double_t screw1y = ( aaa*cos(TMath::DegToRad()*fgkCarlosSuppAngle) -
+ bbb*sin(TMath::DegToRad()*fgkCarlosSuppAngle) );
+ Double_t screw1z = ( aaa*sin(TMath::DegToRad()*fgkCarlosSuppAngle) +
+ bbb*cos(TMath::DegToRad()*fgkCarlosSuppAngle) )-0.07;
+
+ TGeoRotation *CarlosSuppRot = (TGeoRotation *)fCommonTr[0];
+
+ TGeoCombiTrans* lScrewTr1 = new TGeoCombiTrans((fgkCarlosSuppX1+
+ fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
+ screw1y,screw1z, CarlosSuppRot);
+
+ TGeoCombiTrans* lScrewTr2 = new TGeoCombiTrans((fgkCarlosSuppX1+
+ fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
+ screw1z,screw1y, CarlosSuppRot);
+
+ TGeoCombiTrans *lScrewTr3 = new TGeoCombiTrans(-(fgkCarlosSuppX1+
+ fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
+ screw1y,screw1z, CarlosSuppRot);
+
+ TGeoCombiTrans *lScrewTr4 = new TGeoCombiTrans(-(fgkCarlosSuppX1+
+ fgkCarlosSuppX2+fgkCarlosSuppX3)/2,
+ screw1z,screw1y, CarlosSuppRot);
+
+ assemblySupCarlos->AddNode(fCommonVol[0], 1, lScrewTr1);
+ assemblySupCarlos->AddNode(fCommonVol[0], 2, lScrewTr2);
+ assemblySupCarlos->AddNode(fCommonVol[0], 3, lScrewTr3);
+ assemblySupCarlos->AddNode(fCommonVol[0], 4, lScrewTr4);
+
+ //=========================================
+ // board
+ Double_t p1[3], p2[3], vX[3] = {1,0,0};
+ AliITSv11GeomCableFlat card1("cardCarlos1", fgkCarlosCardZ1, fgkCarlosCardY1); // name, width, thickness
+ card1.SetNLayers(2);
+ card1.SetLayer(0, fgkCarlosCardCuY, copper, kOrange); // index, thickness, material, color
+ card1.SetLayer(1, fgkCarlosCardY1-fgkCarlosCardCuY, glassFiber, 30);
+ card1.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
+ p1[0] = -fgkCarlosCardX1/2;
+ p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
+ p1[2] = fgkCarlosCardShift;
+ p2[0] = fgkCarlosCardX1/2;
+ p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
+ p2[2] = fgkCarlosCardShift;
+ card1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
+ card1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
+ card1.CreateAndInsertBoxCableSegment(1,90);
+
+ AliITSv11GeomCableFlat card2("cardCarlos2", fgkCarlosCardZ2, fgkCarlosCardY1); // name, width, thickness
+ card2.SetNLayers(2);
+ card2.SetLayer(0, fgkCarlosCardCuY, copper, kOrange); // index, thickness, material, color
+ card2.SetLayer(1, fgkCarlosCardY1-fgkCarlosCardCuY, glassFiber, 30);
+ card2.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
+
+ p1[0] = -fgkCarlosCardX1/2;
+ p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
+ p1[2] = fgkCarlosCardShift + fgkCarlosCardZ1/2 + fgkCarlosCardZ2/2;
+
+ p2[0] = -fgkCarlosCardX1/2 + fgkCarlosCardX2;
+ p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge;
+ p2[2] = fgkCarlosCardShift + fgkCarlosCardZ1/2 + fgkCarlosCardZ2/2;
+ card2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
+ card2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
+ card2.CreateAndInsertBoxCableSegment(1,90);
+
+ //=========================================
+ // some chips on the board
+
+ AliITSv11GeomCableFlat u1("carlosCardU1", fgkCarlosU1Z, fgkCarlosU1Y); // name, width, thickness
+ u1.SetNLayers(2);
+ u1.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
+ u1.SetLayer(1, fgkCarlosU1Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
+ u1.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
+
+ p1[0] = fgkCarlosU1posX - fgkCarlosU1X/2;
+ p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU1Y/2;
+ p1[2] = fgkCarlosCardShift + fgkCarlosU1posZ;
+
+ p2[0] = fgkCarlosU1posX + fgkCarlosU1X/2;
+ p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU1Y/2;
+ p2[2] = fgkCarlosCardShift + fgkCarlosU1posZ;
+ u1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
+ u1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
+ u1.CreateAndInsertBoxCableSegment(1,90);
+
+ //---
+ AliITSv11GeomCableFlat u2("carlosCardU2", fgkCarlosU2Z, fgkCarlosU2Y); // name, width, thickness
+ u2.SetNLayers(2);
+ u2.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
+ u2.SetLayer(1, fgkCarlosU2Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
+ u2.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
+
+ p1[0] = fgkCarlosU2posX - fgkCarlosU2X/2;
+ p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU2Y/2;
+ p1[2] = fgkCarlosCardShift + fgkCarlosU2posZ;
+
+ p2[0] = fgkCarlosU2posX + fgkCarlosU2X/2;
+ p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU2Y/2;
+ p2[2] = fgkCarlosCardShift + fgkCarlosU2posZ;
+ u2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
+ u2.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
+ u2.CreateAndInsertBoxCableSegment(1,90);
+
+ //---
+ AliITSv11GeomCableFlat u3("carlosCardU3", fgkCarlosU3Z, fgkCarlosU3Y); // name, width, thickness
+ u3.SetNLayers(2);
+ u3.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
+ u3.SetLayer(1, fgkCarlosU3Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
+ u3.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
+
+ Double_t u3Y = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU3Y/2;
+ p1[0] = fgkCarlosU3posX - fgkCarlosU3X/2;
+ p1[1] = u3Y;
+ p1[2] = fgkCarlosCardShift + fgkCarlosU3posZ;
+
+ p2[0] = fgkCarlosU3posX + fgkCarlosU3X/2;
+ p2[1] = u3Y;
+ p2[2] = fgkCarlosCardShift + fgkCarlosU3posZ;
+ u3.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
+ u3.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
+ TGeoVolume *u3Vol = u3.CreateAndInsertBoxCableSegment(1,90);
+
+ //--- U4 is like U3 (?)
+ TGeoCombiTrans *u4Trans = new TGeoCombiTrans;
+ u4Trans->RotateX(90);
+ u4Trans->SetTranslation(fgkCarlosU4posX, u3Y,
+ fgkCarlosCardShift + fgkCarlosU4posZ);
+ assemblySupCarlos->AddNode(u3Vol, 2, u4Trans);
+
+ //---
+ AliITSv11GeomCableFlat u17("carlosCardU17", fgkCarlosU17Z, fgkCarlosU17Y); // name, width, thickness
+ u17.SetNLayers(2);
+ u17.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
+ u17.SetLayer(1, fgkCarlosU17Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
+ u17.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
+
+ p1[0] = fgkCarlosU17posX - fgkCarlosU17X/2;
+ p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU17Y/2;
+ p1[2] = fgkCarlosCardShift + fgkCarlosU17posZ;
+
+ p2[0] = fgkCarlosU17posX + fgkCarlosU17X/2;
+ p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU17Y/2;
+ p2[2] = fgkCarlosCardShift + fgkCarlosU17posZ;
+ u17.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
+ u17.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
+ u17.CreateAndInsertBoxCableSegment(1,90);
+
+ //---
+ AliITSv11GeomCableFlat u35("carlosCardU35", fgkCarlosU35Z, fgkCarlosU35Y); // name, width, thickness
+ u35.SetNLayers(2);
+ u35.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
+ u35.SetLayer(1, fgkCarlosU35Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
+ u35.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
+
+ p1[0] = fgkCarlosU35posX - fgkCarlosU35X/2;
+ p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU35Y/2;
+ p1[2] = fgkCarlosCardShift + fgkCarlosU35posZ;
+
+ p2[0] = fgkCarlosU35posX + fgkCarlosU35X/2;
+ p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU35Y/2;
+ p2[2] = fgkCarlosCardShift + fgkCarlosU35posZ;
+ u35.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
+ u35.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
+ u35.CreateAndInsertBoxCableSegment(1,90);
+
+ //---
+ AliITSv11GeomCableFlat u36("carlosCardU36", fgkCarlosU36Z, fgkCarlosU36Y); // name, width, thickness
+ u36.SetNLayers(2);
+ u36.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
+ u36.SetLayer(1, fgkCarlosU36Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
+ u36.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
+
+ p1[0] = fgkCarlosU36posX - fgkCarlosU36X/2;
+ p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU36Y/2;
+ p1[2] = fgkCarlosCardShift + fgkCarlosU36posZ;
+
+ p2[0] = fgkCarlosU36posX + fgkCarlosU36X/2;
+ p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosU36Y/2;
+ p2[2] = fgkCarlosCardShift + fgkCarlosU36posZ;
+ u36.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
+ u36.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
+ u36.CreateAndInsertBoxCableSegment(1,90);
+
+ //--- QZ1
+ AliITSv11GeomCableFlat qz1("carlosCardQZ1", fgkCarlosQZ1Z, fgkCarlosQZ1Y); // name, width, thickness
+ qz1.SetNLayers(2);
+ qz1.SetLayer(0, fgkCarlosCardChipSiThick, siliconChip, kGreen); // index, thickness, material, color
+ qz1.SetLayer(1, fgkCarlosQZ1Y - fgkCarlosCardChipSiThick, plastiChip, kGray+3);
+ qz1.SetInitialNode( (TGeoVolume *) assemblySupCarlos);
+
+ p1[0] = fgkCarlosQZ1posX - fgkCarlosQZ1X/2;
+ p1[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosQZ1Y/2;
+ p1[2] = fgkCarlosCardShift + fgkCarlosQZ1posZ;
+
+ p2[0] = fgkCarlosQZ1posX + fgkCarlosQZ1X/2;
+ p2[1] = shiftGlobY - fgkCarlosCard2HeatBridge + fgkCarlosCardY1/2 + fgkCarlosQZ1Y/2;
+ p2[2] = fgkCarlosCardShift + fgkCarlosQZ1posZ;
+ qz1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 0, p1, vX);
+ qz1.AddCheckPoint( (TGeoVolume *) assemblySupCarlos, 1, p2, vX);
+ qz1.CreateAndInsertBoxCableSegment(1,90);
+
+ return assemblySupCarlos;
+}
+
+//________________________________________________________________________
+Int_t AliITSv11GeometrySDD::CreateLVCard() {
+ //
+ // Creates the assemblies containing the LV cards (left and right)
+ //
+
+ TGeoMedium *glassFiber = GetMedium("SDD SI CHIP$");// glassFiber TO CODE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ TGeoMedium *siliconChip = GetMedium("SDD SI CHIP$");// ITSsddSiChip
+ TGeoMedium *plastiChip = GetMedium("SDDKAPTON (POLYCH2)$"); // ITSsddKAPTON_POLYCH2
+ TGeoMedium *copper = GetMedium("COPPER$");
+ TGeoMedium *alCu12SDD = GetMedium("INOX$"); // ITSsddAlCu12, to code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ TGeoMedium *stainless = GetMedium("INOX$"); // for screws, what is the material ???????????
+
+ fCardLVL = new TGeoVolumeAssembly("ITSsddLVCardLeft");
+ fCardLVR = new TGeoVolumeAssembly("ITSsddLVCardRight");
+
+ // we are going to use flat cable class to create multilayer box,
+ // then we can use the pointers to created volumes to place them elsewhere
+ Double_t p1[3], p2[3], vX[3] = {1,0,0};
+
+ Double_t carLVfullThick = fgkLVcardZ+fgkLVcardCuZ;
+ AliITSv11GeomCableFlat cardLV("cardLV", fgkLVcardY, carLVfullThick); // name, width, thickness
+ cardLV.SetNLayers(2);
+ cardLV.SetLayer(0, fgkLVcardCuZ, copper, 30); // index, thickness, material, color
+ cardLV.SetLayer(1, fgkLVcardZ, glassFiber, 30);
+ cardLV.SetInitialNode( (TGeoVolume *) fCardLVL);
+ p1[0] = 0;
+ p1[1] = fgkLVcardY/2;
+ p1[2] = 0;
+ p2[0] = fgkLVcardX;
+ p2[1] = fgkLVcardY/2;
+ p2[2] = 0;
+ cardLV.AddCheckPoint( (TGeoVolume *) fCardLVL, 0, p1, vX);
+ cardLV.AddCheckPoint( (TGeoVolume *) fCardLVL, 1, p2, vX);
+ TGeoVolume* boxVol = cardLV.CreateAndInsertBoxCableSegment(1);
+ TGeoRotation *rotAdd = new TGeoRotation("",90,0,0);
+ TGeoCombiTrans *trCard = new TGeoCombiTrans(-fgkLVcardX/2,fgkLVcardY/2,0,rotAdd);
+ fCardLVR->AddNode(boxVol, 1, trCard);
+
+ Double_t chip0fullThick = fgkLVChip0Z + fgkLVChip0SiZ;
+ AliITSv11GeomCableFlat chipO("chipO", fgkLVChip0Y, chip0fullThick); // name, width, thickness
+ chipO.SetNLayers(2);
+ chipO.SetLayer(0, fgkLVChip0SiZ, siliconChip, 8); // index, thickness, material, color
+ chipO.SetLayer(1, fgkLVChip0Z, plastiChip, 12);
+ chipO.SetInitialNode( (TGeoVolume *) fCardLVL);
+ p1[0] = (fgkLVChip0PosX - fgkLVChip0X/2);
+ p1[1] = fgkLVChip0PosY;
+ p1[2] = carLVfullThick/2 + chip0fullThick/2;
+
+ p2[0] = (fgkLVChip0PosX + fgkLVChip0X/2);
+ p2[1] = fgkLVChip0PosY;
+ p2[2] = carLVfullThick/2 + chip0fullThick/2;
+ chipO.AddCheckPoint( (TGeoVolume *) fCardLVL, 0, p1, vX);
+ chipO.AddCheckPoint( (TGeoVolume *) fCardLVL, 1, p2, vX);
+ boxVol = chipO.CreateAndInsertBoxCableSegment(1);
+ trCard = new TGeoCombiTrans( -fgkLVChip0PosX,
+ fgkLVChip0PosY,
+ carLVfullThick/2+chip0fullThick/2, rotAdd);
+ fCardLVR->AddNode(boxVol, 1, trCard);
+
+ // put also this chip on the other side of the card
+ trCard = new TGeoCombiTrans( fgkLVChip0PosX,
+ fgkLVChip0PosY,
+ -carLVfullThick/2-chip0fullThick/2, rotAdd);
+ fCardLVL->AddNode(boxVol, 2, trCard);
+ trCard = new TGeoCombiTrans( -fgkLVChip0PosX,
+ fgkLVChip0PosY,
+ -carLVfullThick/2-chip0fullThick/2, rotAdd);
+ fCardLVR->AddNode(boxVol, 2, trCard);
+
+ Double_t chip1fullThick = fgkLVChip1Z + fgkLVChip1SiZ;
+ AliITSv11GeomCableFlat chip1("chip1", fgkLVChip1Y, chip1fullThick);
+ chip1.SetNLayers(2);
+ chip1.SetLayer(0, fgkLVChip1SiZ, siliconChip, 8);
+ chip1.SetLayer(1, fgkLVChip1Z, plastiChip, 12);
+ chip1.SetInitialNode( (TGeoVolume *) fCardLVL);
+ p1[0] = (fgkLVChip1PosX-fgkLVChip1X/2);
+ p1[1] = fgkLVChip1PosY;
+ p1[2] = carLVfullThick/2 + chip1fullThick/2;
+
+ p2[0] = (fgkLVChip1PosX+fgkLVChip1X/2);
+ p2[1] = fgkLVChip1PosY;
+ p2[2] = carLVfullThick/2 + chip1fullThick/2;
+ chip1.AddCheckPoint( (TGeoVolume *) fCardLVL, 0, p1, vX);
+ chip1.AddCheckPoint( (TGeoVolume *) fCardLVL, 1, p2, vX);
+ boxVol = chip1.CreateAndInsertBoxCableSegment(1);
+ trCard = new TGeoCombiTrans( -fgkLVChip1PosX,
+ fgkLVChip1PosY,
+ carLVfullThick/2 + chip1fullThick/2, rotAdd);
+ fCardLVR->AddNode(boxVol, 1, trCard);
+
+ Double_t chip2fullThick = fgkLVChip2Z + fgkLVChip2SiZ;
+ AliITSv11GeomCableFlat chip2("chip2", fgkLVChip2Y, chip2fullThick);
+ chip2.SetNLayers(2);
+ chip2.SetLayer(0, fgkLVChip2SiZ, siliconChip, 8);
+ chip2.SetLayer(1, fgkLVChip2Z, plastiChip, 12);
+ chip2.SetInitialNode( (TGeoVolume *) fCardLVL);
+ p1[0] = (fgkLVChip2PosX-fgkLVChip2X/2);
+ p1[1] = fgkLVChip2PosY;
+ p1[2] = carLVfullThick/2 + chip2fullThick/2;
+ p2[0] = (fgkLVChip2PosX+fgkLVChip2X/2);
+ p2[1] = fgkLVChip2PosY;
+ p2[2] = carLVfullThick/2 + chip2fullThick/2;
+ chip2.AddCheckPoint( (TGeoVolume *) fCardLVL, 0, p1, vX);
+ chip2.AddCheckPoint( (TGeoVolume *) fCardLVL, 1, p2, vX);
+ boxVol = chip2.CreateAndInsertBoxCableSegment(1);
+ trCard = new TGeoCombiTrans( -fgkLVChip2PosX,
+ fgkLVChip2PosY,
+ carLVfullThick/2 + chip2fullThick/2, rotAdd);
+ fCardLVR->AddNode(boxVol, 1, trCard);
+
+ Double_t chip3fullThick = fgkLVChip3Z + fgkLVChip3SiZ;
+ AliITSv11GeomCableFlat chip3("chip3", fgkLVChip3Y, chip3fullThick);
+ chip3.SetNLayers(2);
+ chip3.SetLayer(0, fgkLVChip3Z, plastiChip, 12);
+ chip3.SetLayer(1, fgkLVChip3SiZ, siliconChip, 8);
+ chip3.SetInitialNode( (TGeoVolume *) fCardLVL);
+ p1[0] = (fgkLVChip3PosX-fgkLVChip3X/2);
+ p1[1] = fgkLVChip3PosY;
+ p1[2] = -carLVfullThick/2 - chip3fullThick/2;
+ p2[0] = (fgkLVChip3PosX+fgkLVChip3X/2);
+ p2[1] = fgkLVChip3PosY;
+ p2[2] = -carLVfullThick/2 - chip3fullThick/2;
+ chip3.AddCheckPoint( (TGeoVolume *) fCardLVL, 0, p1, vX);
+ chip3.AddCheckPoint( (TGeoVolume *) fCardLVL, 1, p2, vX);
+ boxVol = chip3.CreateAndInsertBoxCableSegment(1);
+ trCard = new TGeoCombiTrans( -fgkLVChip3PosX,
+ fgkLVChip3PosY,
+ -carLVfullThick/2 - chip3fullThick/2, rotAdd);
+ fCardLVR->AddNode(boxVol, 1, trCard);
+
+ // the Al pieces for heat exchange :
+ TGeoBBox *alLVcooling1 = new TGeoBBox("alLVcooling1" ,
+ fgkLVcoolX1/2, fgkLVcoolY1/2, fgkLVcoolZ1/2);
+
+ TGeoTranslation *alLVcooling1Tr = new TGeoTranslation("alLVcooling1Tr",
+ (fgkLVcoolX1/2+fgkLVcoolX2),
+ fgkLVcoolPosY+fgkLVcoolY1/2,
+ carLVfullThick/2+chip0fullThick+fgkLVcoolZ1/2);
+ TGeoTranslation *alLVcooling1TrB = new TGeoTranslation("alLVcooling1TrB",
+ (fgkLVcoolX1/2+fgkLVcoolX2),
+ fgkLVcoolPosY+fgkLVcoolY1/2,
+ -(carLVfullThick/2+chip0fullThick+fgkLVcoolZ1/2));
+
+ TGeoVolume *vAlLVcooling1 = new TGeoVolume("vAlLVcooling1",alLVcooling1,
+ alCu12SDD);
+ vAlLVcooling1->SetLineColor(2);
+
+ //--
+ TGeoBBox * alLVcooling2 = new TGeoBBox("lLVcooling2" ,
+ fgkLVcoolX2/2, fgkLVcoolY2/2, fgkLVcoolZ2/2);
+ TGeoTranslation *alLVcooling2Tr = new TGeoTranslation("alLVcooling2Tr",
+ (fgkLVcoolX2/2),
+ fgkLVcoolPosY+fgkLVcoolY1/2,
+ carLVfullThick/2+chip0fullThick+fgkLVcoolZ1-fgkLVcoolZ2/2);
+ TGeoTranslation *alLVcooling2TrB = new TGeoTranslation("alLVcooling2TrB",
+ (fgkLVcoolX2/2),
+ fgkLVcoolPosY+fgkLVcoolY1/2,
+ -(carLVfullThick/2+chip0fullThick+fgkLVcoolZ1-fgkLVcoolZ2/2));
+
+ TGeoVolume *vAlLVcooling2 = new TGeoVolume("vAlLVcooling2",alLVcooling2,
+ alCu12SDD);
+ vAlLVcooling2->SetLineColor(2);
+
+ //--
+ Double_t alLVcoolZ3 = (fgkLVcardCuZ+fgkLVcardZ+2.*(fgkLVChip0SiZ+fgkLVChip0Z)
+ +fgkLVcoolZ1*2.);
+ TGeoBBox * alLVcooling3 = new TGeoBBox("lLVcooling3" ,
+ fgkLVcoolX3/2, fgkLVcoolY3/2, alLVcoolZ3/2);
+ TGeoTranslation *alLVcooling3Tr = new TGeoTranslation("alLVcooling3Tr",
+ (-fgkLVcoolX3/2),
+ fgkLVcoolPosY+fgkLVcoolY1-fgkLVcoolY3/2,
+ 0);
+ TGeoVolume *vAlLVcooling3 = new TGeoVolume("vAlLVcooling3",alLVcooling3,alCu12SDD);
+ vAlLVcooling3->SetLineColor(2);
+
+ //=== screw fixing th LV card to the U cooling tube :
+ TGeoTube *littleScrew = new TGeoTube("littleScrewLV", 0, fgkLittleScrewR,
+ fgkLVcoolY3/2);
+ TGeoVolume *vLittleScrew = new TGeoVolume("vLittleScrewLV",
+ littleScrew, stainless);
+ TGeoRotation *rotScrew = new TGeoRotation("",0,90,0);
+
+ TGeoCombiTrans *cbScrew = new TGeoCombiTrans(0,0,fgkShiftLittleScrewLV,
+ rotScrew);
+ vAlLVcooling3->AddNode(vLittleScrew, 1, cbScrew);
+
+ TGeoTube *littleScrewHead = new TGeoTube("littleScrewLVhead",
+ 0, fgkLittleLVScrewHeadR,
+ fgkLittleScrewHeadH/2);
+ TGeoVolume *vLittleScrewHead = new TGeoVolume("vLittleScrewLVhead",
+ littleScrewHead, stainless);
+ vLittleScrewHead->SetLineColor(kGray);
+ TGeoCombiTrans *cbScrewHeadL = new TGeoCombiTrans( -fgkLVcoolX3/2,
+ fgkLVcoolPosY+fgkLVcoolY1 + fgkLittleScrewHeadH/2,
+ fgkShiftLittleScrewLV,
+ rotScrew);
+ fCardLVL->AddNode(vLittleScrewHead, 1, cbScrewHeadL);
+
+ TGeoCombiTrans *cbScrewHeadR = new TGeoCombiTrans( fgkLVcoolX3/2,
+ fgkLVcoolPosY+fgkLVcoolY1 + fgkLittleScrewHeadH/2,
+ fgkShiftLittleScrewLV,
+ rotScrew);
+ fCardLVR->AddNode(vLittleScrewHead, 1, cbScrewHeadR);
+
+ // adding the cooling pieces to the left card
+ fCardLVL->AddNode(vAlLVcooling1, 1,alLVcooling1Tr);
+ fCardLVL->AddNode(vAlLVcooling1, 2,alLVcooling1TrB);
+ fCardLVL->AddNode(vAlLVcooling2, 1,alLVcooling2Tr);
+ fCardLVL->AddNode(vAlLVcooling2, 2,alLVcooling2TrB);
+ fCardLVL->AddNode(vAlLVcooling3, 1,alLVcooling3Tr);
+
+ TGeoTranslation *alLVcooling1TrR = new TGeoTranslation("alLVcooling1TrR",
+ -(fgkLVcoolX1/2+fgkLVcoolX2),
+ fgkLVcoolPosY+fgkLVcoolY1/2,
+ carLVfullThick/2+chip0fullThick+fgkLVcoolZ1/2);
+ TGeoTranslation *alLVcooling1TrBR = new TGeoTranslation("alLVcooling1TrBR",
+ -(fgkLVcoolX1/2+fgkLVcoolX2),
+ fgkLVcoolPosY+fgkLVcoolY1/2,
+ -(carLVfullThick/2+chip0fullThick+fgkLVcoolZ1/2));
+ TGeoTranslation *alLVcooling2TrR = new TGeoTranslation("alLVcooling2TrR",
+ -(fgkLVcoolX2/2),
+ fgkLVcoolPosY+fgkLVcoolY1/2,
+ carLVfullThick/2+chip0fullThick+fgkLVcoolZ1-fgkLVcoolZ2/2);
+ TGeoTranslation *alLVcooling2TrBR = new TGeoTranslation("alLVcooling2TrBR",
+ -(fgkLVcoolX2/2),
+ fgkLVcoolPosY+fgkLVcoolY1/2,
+ -(carLVfullThick/2+chip0fullThick+fgkLVcoolZ1-fgkLVcoolZ2/2));
+
+ TGeoTranslation *alLVcooling3TrR = new TGeoTranslation("alLVcooling3TrR",
+ fgkLVcoolX3/2,
+ fgkLVcoolPosY+fgkLVcoolY1-fgkLVcoolY3/2,
+ 0);
+ // and to the right card
+ fCardLVR->AddNode(vAlLVcooling1, 1,alLVcooling1TrR);
+ fCardLVR->AddNode(vAlLVcooling1, 2,alLVcooling1TrBR);
+ fCardLVR->AddNode(vAlLVcooling2, 1,alLVcooling2TrR);
+ fCardLVR->AddNode(vAlLVcooling2, 2,alLVcooling2TrBR);
+ fCardLVR->AddNode(vAlLVcooling3, 1,alLVcooling3TrR);
+
+ return kTRUE;
+}
+
+//________________________________________________________________________
+TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateHVCard(Int_t iLay){
+ //
+ // return an assembly containing the HV card
+ //
+ iLay = iLay;
+
+ TGeoMedium *ceramic = GetMedium("CERAMICS$"); // ceramicHVcard
+ TGeoMedium *medSMDcapaMiddle = GetMedium("SDD X7R capacitors$"); // TO CODE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ TGeoMedium *medSMDcapaEnd = GetMedium("SDD X7R capacitors$"); // SDDX7RcapacitorsSDD TO CODE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ TGeoMedium *stainless = GetMedium("INOX$"); // ITSspdStainlesSteal ???????????
+ TGeoMedium *plastic = GetMedium("SDDKAPTON (POLYCH2)$"); // ITS_ITSsddKAPTON_POLYCH2 ???????????
+ TGeoMedium *alCu12SDD = GetMedium("INOX$"); // ITSsddAlCu12 : to code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ TGeoVolumeAssembly *highVCard = new TGeoVolumeAssembly("ITSsddHVCard");
+
+ //====================================
+ //--- the card itself
+ TGeoBBox *ceramicCard = new TGeoBBox("ceramCard", fgkHVCardCeramX/2,
+ fgkHVCardCeramY/2, fgkHVCardCeramZ/2);
+ TGeoVolume *vCeramicCard = new TGeoVolume("vCeramCard", ceramicCard, ceramic);
+ vCeramicCard->SetLineColor(38);// or 9 blue slightly dark
+
+ highVCard->AddNode(vCeramicCard, 1, 0);
+
+
+ //====================================
+ //--- capacitors
+
+ // capa1
+ TGeoBBox *capa1Middle = new TGeoBBox("cardHVCapa1Middle", fgkHVCardCapa1X/2,
+ fgkHVCardCapa1Ymid/2, fgkHVCardCapa1Z/2);
+ TGeoVolume *vCapa1Middle = new TGeoVolume("vCardHVCapa1Middle",capa1Middle,
+ medSMDcapaMiddle);
+
+ TGeoBBox *capa1End = new TGeoBBox("cardHVCapa1End", fgkHVCardCapa1X/2,
+ fgkHVCardCapa1Yend/2, fgkHVCardCapa1Z/2);
+ TGeoVolume *vCapa1End = new TGeoVolume("vCardHVCapa1End",capa1End,
+ medSMDcapaEnd);
+ vCapa1End->SetLineColor(18);// grey silver
+ TGeoTranslation *capa1EndTr1 = new TGeoTranslation("cardHVcapa1EndTr1", 0,
+ (fgkHVCardCapa1Ymid+fgkHVCardCapa1Yend)/2,0);
+ TGeoTranslation *capa1EndTr2 = new TGeoTranslation("cardHVcapa1EndTr2", 0,
+ -(fgkHVCardCapa1Ymid+fgkHVCardCapa1Yend)/2,0);
+
+ TGeoTranslation *capa1PosTr = new TGeoTranslation("cardHVcapa1PosTr",
+ fgkHVCardCapa1PosX, fgkHVCardCapa1PosY,
+ -fgkHVCardCeramZ/2-fgkHVCardCapa1Z/2);
+
+ TGeoVolumeAssembly *capa1 = new TGeoVolumeAssembly("cardHVCapa1");
+ capa1->AddNode(vCapa1Middle, 1,0);
+ capa1->AddNode(vCapa1End, 1, capa1EndTr1);
+ capa1->AddNode(vCapa1End, 2, capa1EndTr2);
+
+ highVCard->AddNode(capa1, 1, capa1PosTr);
+
+ // capa2
+ TGeoBBox *capa2Middle = new TGeoBBox("cardHVCapa2Middle", fgkHVCardCapa2X/2,
+ fgkHVCardCapa2Ymid/2, fgkHVCardCapa2Z/2);
+ TGeoVolume *vCapa2Middle = new TGeoVolume("vCardHVCapa2Middle",capa2Middle,
+ medSMDcapaMiddle);
+
+ TGeoBBox *capa2End = new TGeoBBox("cardHVCapa2End", fgkHVCardCapa2X/2,
+ fgkHVCardCapa2Yend/2, fgkHVCardCapa2Z/2);
+ TGeoVolume *vCapa2End = new TGeoVolume("vCardHVCapa2End",capa2End,
+ medSMDcapaEnd);
+ vCapa2End->SetLineColor(18);// grey silver
+ TGeoTranslation *capa2EndTr1 = new TGeoTranslation("cardHVcapa2EndTr1", 0,
+ (fgkHVCardCapa2Ymid+fgkHVCardCapa2Yend)/2,0);
+ TGeoTranslation *capa2EndTr2 = new TGeoTranslation("cardHVcapa2EndTr2", 0,
+ -(fgkHVCardCapa2Ymid+fgkHVCardCapa2Yend)/2,0);
+
+ TGeoTranslation *capa2PosTr = new TGeoTranslation("cardHVcapa2PosTr",
+ fgkHVCardCapa2PosX, fgkHVCardCapa2PosY,
+ -fgkHVCardCeramZ/2-fgkHVCardCapa2Z/2);
+
+ TGeoVolumeAssembly *capa2 = new TGeoVolumeAssembly("cardHVCapa2");
+ capa2->AddNode(vCapa2Middle, 1,0);
+ capa2->AddNode(vCapa2End, 1, capa2EndTr1);
+ capa2->AddNode(vCapa2End, 2, capa2EndTr2);
+
+ highVCard->AddNode(capa2, 1, capa2PosTr);
+
+ // capa3
+ TGeoBBox *capa3Middle = new TGeoBBox("cardHVCapa3Middle", fgkHVCardCapa3Xmid/2,
+ fgkHVCardCapa3Y/2, fgkHVCardCapa3Z/2);
+ TGeoVolume *vCapa3Middle = new TGeoVolume("vCardHVCapa3Middle",capa3Middle,
+ medSMDcapaMiddle);
+
+ TGeoBBox *capa3End = new TGeoBBox("cardHVCapa3End", fgkHVCardCapa3Xend/2,
+ fgkHVCardCapa3Y/2, fgkHVCardCapa3Z/2);
+ TGeoVolume *vCapa3End = new TGeoVolume("vCardHVCapa3End",capa3End,
+ medSMDcapaEnd);
+ vCapa3End->SetLineColor(18);// grey silver
+
+ TGeoTranslation *capa3EndTr1 = new TGeoTranslation("cardHVcapa3EndTr1",
+ (fgkHVCardCapa3Xmid+fgkHVCardCapa3Xend)/2, 0, 0);
+ TGeoTranslation *capa3EndTr2 = new TGeoTranslation("cardHVcapa2EndTr2",
+ -(fgkHVCardCapa3Xmid+fgkHVCardCapa3Xend)/2, 0, 0);
+
+ TGeoVolumeAssembly *capa3 = new TGeoVolumeAssembly("cardHVCapa3");
+ capa3->AddNode(vCapa3Middle, 1,0);
+ capa3->AddNode(vCapa3End, 1, capa3EndTr1);
+ capa3->AddNode(vCapa3End, 2, capa3EndTr2);
+
+ TGeoTranslation *capa3PosTr1 = new TGeoTranslation("cardHVcapa3PosTr1",
+ fgkHVCardCapa3PosX1, fgkHVCardCapa3PosY1,
+ -fgkHVCardCeramZ/2-fgkHVCardCapa3Z/2);
+
+ TGeoTranslation *capa3PosTr2 = new TGeoTranslation("cardHVcapa3PosTr2",
+ fgkHVCardCapa3PosX2, fgkHVCardCapa3PosY1,
+ -fgkHVCardCeramZ/2-fgkHVCardCapa3Z/2);
+
+ TGeoTranslation *capa3PosTr3 = new TGeoTranslation("cardHVcapa3PosTr3",
+ fgkHVCardCapa3PosX3, fgkHVCardCapa3PosY2,
+ -fgkHVCardCeramZ/2-fgkHVCardCapa3Z/2);
+
+ TGeoTranslation *capa3PosTr4 = new TGeoTranslation("cardHVcapa3PosTr4",
+ fgkHVCardCapa3PosX4, fgkHVCardCapa3PosY2,
+ -fgkHVCardCeramZ/2-fgkHVCardCapa3Z/2);
+
+ TGeoTranslation *capa3PosTr5 = new TGeoTranslation("cardHVcapa3PosTr5",
+ fgkHVCardCapa3PosX5, fgkHVCardCapa3PosY3,
+ -fgkHVCardCeramZ/2-fgkHVCardCapa3Z/2);
+
+ highVCard->AddNode(capa3, 1, capa3PosTr1);
+ highVCard->AddNode(capa3, 2, capa3PosTr2);
+ highVCard->AddNode(capa3, 3, capa3PosTr3);
+ highVCard->AddNode(capa3, 4, capa3PosTr4);
+ highVCard->AddNode(capa3, 5, capa3PosTr5);
+
+ //====================================
+ //--- connexions to LV card
+
+ Double_t fgkConnexLVHVdiam1 = 0.8*fgkmm;
+ Double_t fgkConnexLVHVdiam2 = 2*fgkmm;
+ Double_t fgkConnexLVHVlen = 6.2*fgkmm;
+ Double_t fgkConnexLVHVx = 3*fgkmm;
+ Double_t fgkConnexLVHVy1 = 8*fgkmm;
+ Double_t fgkConnexLVHVdy = 2.5*fgkmm;
+
+ TGeoTube *connexLVHVmetal = new TGeoTube("connexLVHVmetal",0,
+ fgkConnexLVHVdiam1/2,fgkConnexLVHVlen/2);
+ TGeoTube *connexLVHVplastic = new TGeoTube("connexLVHVplastic",
+ fgkConnexLVHVdiam1/2,
+ fgkConnexLVHVdiam2/2,
+ fgkConnexLVHVlen/2);
+ TGeoVolume *vConnexLVHVmetal = new TGeoVolume("ITSsddConnexLVHVmetal",
+ connexLVHVmetal, stainless);
+ TGeoVolume *vConnexLVHVplast = new TGeoVolume("ITSsddConnexLVHVplast",
+ connexLVHVplastic, plastic);
+ vConnexLVHVmetal->SetLineColor(10);// white
+ vConnexLVHVplast->SetLineColor(12); // dark grey
+
+ TGeoVolumeAssembly *connexion = new TGeoVolumeAssembly("ITSsddConnexLVHV");
+ connexion->AddNode(vConnexLVHVmetal, 1, 0);
+ connexion->AddNode(vConnexLVHVplast, 1, 0);
+
+ TGeoTranslation *trConnexion1 = new TGeoTranslation(-fgkConnexLVHVx,fgkConnexLVHVy1,
+ -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
+ TGeoTranslation *trConnexion2 = new TGeoTranslation( fgkConnexLVHVx,fgkConnexLVHVy1,
+ -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
+
+ TGeoTranslation *trConnexion3 = new TGeoTranslation(-fgkConnexLVHVx,
+ fgkConnexLVHVy1+fgkConnexLVHVdy,
+ -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
+ TGeoTranslation *trConnexion4 = new TGeoTranslation( fgkConnexLVHVx,
+ fgkConnexLVHVy1+fgkConnexLVHVdy,
+ -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
+
+ TGeoTranslation *trConnexion5 = new TGeoTranslation(-fgkConnexLVHVx,
+ fgkConnexLVHVy1+2*fgkConnexLVHVdy,
+ -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
+ TGeoTranslation *trConnexion6 = new TGeoTranslation( fgkConnexLVHVx,
+ fgkConnexLVHVy1+2*fgkConnexLVHVdy,
+ -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
+
+ TGeoTranslation *trConnexion7 = new TGeoTranslation(-fgkConnexLVHVx,
+ fgkConnexLVHVy1+3*fgkConnexLVHVdy,
+ -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
+ TGeoTranslation *trConnexion8 = new TGeoTranslation( fgkConnexLVHVx,
+ fgkConnexLVHVy1+3*fgkConnexLVHVdy,
+ -fgkHVCardCeramZ/2-fgkConnexLVHVlen/2 );
+
+ highVCard->AddNode(connexion, 1, trConnexion1);
+ highVCard->AddNode(connexion, 2, trConnexion2);
+ highVCard->AddNode(connexion, 3, trConnexion3);
+ highVCard->AddNode(connexion, 4, trConnexion4);
+ highVCard->AddNode(connexion, 5, trConnexion5);
+ highVCard->AddNode(connexion, 6, trConnexion6);
+ highVCard->AddNode(connexion, 7, trConnexion7);
+ highVCard->AddNode(connexion, 8, trConnexion8);
+
+ //====================================
+ //--- cooling pieces
+
+ TGeoBBox *cardHVcool1 = new TGeoBBox("cardHVcool1",fgkHVCardCool1X/2,
+ fgkHVCardCool1Y/2, fgkHVCardCool1Z/2);
+
+
+ TGeoBBox *cardHVcool2 = new TGeoBBox("cardHVcool2",fgkHVCardCool2X/2,
+ fgkHVCardCool2Y/2, fgkHVCardCool2Z/2);
+
+ TGeoBBox *cardHVcool3 = new TGeoBBox("cardHVcool3",fgkHVCardCool3X/2,
+ fgkHVCardCool3Y/2, fgkHVCardCool3Z/2);
+
+ TGeoVolume *vCardHVcool1 = new TGeoVolume("vCardHVcool1",cardHVcool1,
+ alCu12SDD);
+ TGeoVolume *vCardHVcool2 = new TGeoVolume("vCardHVcool2",cardHVcool2,
+ alCu12SDD);
+ TGeoVolume *vCardHVcool3 = new TGeoVolume("vCardHVcool3",cardHVcool3,
+ alCu12SDD);
+ // This last volume contains the screw used for fixing
+ // the card to the cooling tube ...
+ TGeoTube *littleScrewHV = new TGeoTube("littleScrewHV", 0, fgkLittleScrewR,
+ fgkHVCardCool3Y/2);
+ TGeoVolume *vLittleScrewHV = new TGeoVolume("vLittleScrewHV",
+ littleScrewHV, stainless);
+
+ TGeoRotation *rotScrewHead = new TGeoRotation("",0,90,0);
+ vCardHVcool3->AddNode(vLittleScrewHV, 1,rotScrewHead);
+
+ vCardHVcool1->SetLineColor(2); //red
+ vCardHVcool2->SetLineColor(2); //red
+ vCardHVcool3->SetLineColor(2); //red
+
+ TGeoTranslation *cool1Tr1 = new TGeoTranslation("cardHVcool1Tr1",
+ fgkHVCardCeramX/2-fgkHVCardCool1X/2,
+ -fgkHVCardCoolDY+fgkHVCardCool1Y/2,
+ fgkHVCardCeramZ/2+fgkHVCardCool1Z/2);
+ TGeoTranslation *cool1Tr2 = new TGeoTranslation("cardHVcool1Tr2",
+ -fgkHVCardCeramX/2+fgkHVCardCool1X/2,
+ -fgkHVCardCoolDY+fgkHVCardCool1Y/2,
+ fgkHVCardCeramZ/2+fgkHVCardCool1Z/2);
+
+ highVCard->AddNode(vCardHVcool1, 1, cool1Tr1);
+ highVCard->AddNode(vCardHVcool1, 2, cool1Tr2);
+
+ TGeoTranslation *cool2Tr1 = new TGeoTranslation("cardHVcool2Tr1",
+ fgkHVCardCeramX/2-fgkHVCardCool1X+fgkHVCardCool2X/2,
+ -fgkHVCardCoolDY-fgkHVCardCool2Y/2,
+ fgkHVCardCeramZ/2+fgkHVCardCool2Z/2);
+
+ TGeoTranslation *cool2Tr2 = new TGeoTranslation("cardHVcool2Tr2",
+ -fgkHVCardCeramX/2+fgkHVCardCool1X-fgkHVCardCool2X/2,
+ -fgkHVCardCoolDY-fgkHVCardCool2Y/2,
+ fgkHVCardCeramZ/2+fgkHVCardCool2Z/2);
+
+ highVCard->AddNode(vCardHVcool2, 1, cool2Tr1);
+ highVCard->AddNode(vCardHVcool2, 2, cool2Tr2);
+
+ TGeoTranslation *cool3Tr1 = new TGeoTranslation("cardHVcool2Tr1",
+ fgkHVCardCeramX/2-fgkHVCardCool1X+fgkHVCardCool2X+fgkHVCardCool3X/2,
+ -fgkHVCardCoolDY-fgkHVCardCool3Y/2,
+ fgkHVCardCeramZ/2+fgkHVCardCool2Z-fgkHVCardCool3Z/2);
+
+ TGeoTranslation *cool3Tr2 = new TGeoTranslation("cardHVcool2Tr2",
+ -fgkHVCardCeramX/2+fgkHVCardCool1X-fgkHVCardCool2X-fgkHVCardCool3X/2,
+ -fgkHVCardCoolDY-fgkHVCardCool3Y/2,
+ fgkHVCardCeramZ/2+fgkHVCardCool2Z-fgkHVCardCool3Z/2);
+
+ highVCard->AddNode(vCardHVcool3, 1, cool3Tr1);
+ highVCard->AddNode(vCardHVcool3, 2, cool3Tr2);
+
+ //====================================
+ //--- screws
+ TGeoCombiTrans *cbScrewHead1 = new TGeoCombiTrans("cardHVscrewHeadTr1",
+ fgkHVCardCeramX/2-fgkHVCardCool1X+fgkHVCardCool2X+fgkHVCardCool3X/2,
+ -fgkHVCardCoolDY+fgkLittleScrewHeadH/2,
+ fgkHVCardCeramZ/2+fgkHVCardCool2Z-fgkHVCardCool3Z/2,
+ rotScrewHead);
+ TGeoCombiTrans *cbScrewHead2 = new TGeoCombiTrans("cardHVscrewHeadTr2",
+ -fgkHVCardCeramX/2+fgkHVCardCool1X-fgkHVCardCool2X-fgkHVCardCool3X/2,
+ -fgkHVCardCoolDY+fgkLittleScrewHeadH/2,
+ fgkHVCardCeramZ/2+fgkHVCardCool2Z-fgkHVCardCool3Z/2,
+ rotScrewHead);
+
+ highVCard->AddNode(fCommonVol[0], 1, cbScrewHead1);
+ highVCard->AddNode(fCommonVol[0], 2, cbScrewHead2);
+
+ return highVCard;
+}
+
+
+//________________________________________________________________________
+TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateEndLadderCards(Int_t iLay) {
+//
+// return an assembly containing the LV, HV and Carlos cards of one ladder
+// and their cooling system
+//
+
+ TGeoMedium *alCu12SDD = GetMedium("AL$"); // ITSsddAlCu12 : to code !!!!!!!!!!!!!!
+ TGeoMedium *phynoxSDD = GetMedium("INOX$");
+ TGeoMedium *coolerMediumSDD = GetMedium("WATER$");
+
+ TGeoVolumeAssembly *endLadderCards = new TGeoVolumeAssembly("endLadderCards");
+
+ //=*********************************
+ //--- The rounded pipe for the end ladder card coooling
+
+ Double_t endLadPipeUlength = fgkEndLadPipeUlengthLay3;
+ Double_t endLadPipeArmZ = fgkEndLadPipeArmZLay3;
+ Int_t nCards = 3;
+
+ if (iLay==4) {
+ endLadPipeUlength = fgkEndLadPipeUlengthLay4;
+ endLadPipeArmZ = fgkEndLadPipeArmZLay4;
+ nCards = 4;
+ }
+
+ AliITSv11GeomCableRound endLadderPipe("endLadderPipe", fgkEndLadPipeOuterDiam/2);
+ endLadderPipe.SetNLayers(2);
+ endLadderPipe.SetLayer(0, fgkEndLadPipeInnerDiam/2, coolerMediumSDD, 4);
+ endLadderPipe.SetLayer(1, (fgkEndLadPipeOuterDiam-fgkEndLadPipeInnerDiam)/2, phynoxSDD, fColorPhynox);
+
+ Double_t coolUzPos = fgkEndLadPipeOuterDiam/2+2.*fgkmm; //it is the x coord of the axis
+ // of the U colling pipe in its center
+
+ Double_t coordA[3] = { fgkEndLadPipeUwidth/2, 0, endLadPipeUlength+coolUzPos};
+ Double_t vectA[3] = {0,0,1};
+
+ Double_t coordB[3] = { fgkEndLadPipeUwidth/2,0, fgkEndLadPipeRadius+coolUzPos};
+ Double_t vectB[3] = {0,0,1};
+
+ Double_t coordC[3] = { fgkEndLadPipeUwidth/2-fgkEndLadPipeRadius, 0, coolUzPos};
+ Double_t vectC[3] = {1,0,0};
+
+ Double_t coordD[3] = {-fgkEndLadPipeUwidth/2+fgkEndLadPipeRadius, 0, coolUzPos};
+ Double_t vectD[3] = {-1,0,0};
+
+ Double_t coordE[3] = {-fgkEndLadPipeUwidth/2, 0, fgkEndLadPipeRadius+coolUzPos};
+ Double_t vectE[3] = {0,0,-1};
+
+ Double_t coordF[3] = {-fgkEndLadPipeUwidth/2,0, endLadPipeUlength+coolUzPos};
+ Double_t vectF[3] = {0,0,-1};
+
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 0, coordA, vectA);
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 1, coordB, vectB);
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 2, coordC, vectC);
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 3, coordD, vectD);
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 4, coordE, vectE);
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 5, coordF, vectF);
+
+ endLadderPipe.SetInitialNode((TGeoVolume *) endLadderCards); //Set the root node
+ //endLadderPipe.CreateAndInsertCableSegment( 1);
+ endLadderPipe.CreateAndInsertTubeSegment( 1);
+ //endLadderPipe.CreateAndInsertCableSegment( 2);
+ endLadderPipe.CreateAndInsertTorusSegment( 2);
+ //endLadderPipe.CreateAndInsertCableSegment( 3);
+ endLadderPipe.CreateAndInsertTubeSegment( 3);
+ //endLadderPipe.CreateAndInsertCableSegment( 4);
+ endLadderPipe.CreateAndInsertTorusSegment( 4);
+ //endLadderPipe.CreateAndInsertCableSegment( 5);
+ endLadderPipe.CreateAndInsertTubeSegment( 5);
+
+ TGeoBBox *endLadPipeArmBox = new TGeoBBox("endLadPipeArmBox",fgkEndLadPipeArmX/2,
+ fgkEndLadPipeArmY/2, endLadPipeArmZ/2);
+ TGeoTube *endLadPipeArmTube = new TGeoTube("endLadPipeArmTube", 0,
+ fgkEndLadPipeOuterDiam/2, endLadPipeArmZ/2);
+
+ TGeoTranslation *endLadPipeArmBoxDY1 = new TGeoTranslation("endLadPipeArmBoxDY1",
+ - fgkEndLadPipeArmBoxDX,
+ fgkEndLadPipeArmBoxDY,0);
+ TGeoTranslation *endLadPipeArmBoxDY2 = new TGeoTranslation("endLadPipeArmBoxDY2",
+ fgkEndLadPipeArmBoxDX,
+ fgkEndLadPipeArmBoxDY,0);
+ endLadPipeArmBoxDY1->RegisterYourself();
+ endLadPipeArmBoxDY2->RegisterYourself();
+
+ if(GetDebug(3)) { // Remove compiler warning.
+ endLadPipeArmBox->InspectShape();
+ endLadPipeArmTube->InspectShape();
+ }
+
+ TGeoCompositeShape *endLadPipeArm1 = new TGeoCompositeShape("ITSsddEndLadPipeArm1",
+ "endLadPipeArmBox:endLadPipeArmBoxDY1"
+ "- endLadPipeArmTube");
+ TGeoCompositeShape *endLadPipeArm2 = new TGeoCompositeShape("ITSsddEndLadPipeArm2",
+ "endLadPipeArmBox:endLadPipeArmBoxDY2"
+ "- endLadPipeArmTube");
+
+ TGeoVolume *vEndLadPipeArm1 = new TGeoVolume("ITSsddVolEndLadPipeArm1",
+ endLadPipeArm1, alCu12SDD);
+ TGeoVolume *vEndLadPipeArm2 = new TGeoVolume("ITSsddVolEndLadPipeArm2",
+ endLadPipeArm2, alCu12SDD);
+ vEndLadPipeArm1->SetLineColor(2);
+ vEndLadPipeArm2->SetLineColor(2);
+
+ Double_t armZ = (coolUzPos-fgkEndLadPipeOuterDiam/2+endLadPipeArmZ/2
+ +fgkEndLadPipeArmZpos);
+
+ TGeoTranslation *trEndLadPipeArm1 = new TGeoTranslation("trEndLadPipeArm1",
+ -fgkEndLadPipeUwidth/2,0,armZ);
+ TGeoTranslation *trEndLadPipeArm2 = new TGeoTranslation("trEndLadPipeArm2",
+ fgkEndLadPipeUwidth/2,0,armZ);
+
+ endLadderCards->AddNode(vEndLadPipeArm1, 1, trEndLadPipeArm1);
+ endLadderCards->AddNode(vEndLadPipeArm2, 1, trEndLadPipeArm2);
+
+ //=*********************************
+ //--- LV cards
+ TGeoVolumeAssembly *cardLVassemblyR = fCardLVR;
+ TGeoVolumeAssembly *cardLVassemblyL = fCardLVL;
+
+ Double_t spaceBetweenCards = 0.2*fgkmm;
+
+ Double_t cardLVxShift = (fgkEndLadPipeUwidth/2-fgkEndLadPipeArmX/2
+ +fgkEndLadPipeArmBoxDX);
+ Double_t cardLVyShift = (-fgkLVcoolPosY-fgkLVcoolY1+fgkLVcoolY3
+ +fgkEndLadPipeArmY/2+fgkEndLadPipeArmBoxDY);
+
+ Double_t alLVcoolZ3 = (fgkLVcardCuZ+fgkLVcardZ+2.*(fgkLVChip0SiZ+fgkLVChip0Z)
+ +fgkLVcoolZ1*2.);
+
+ Double_t firstLVCardZ = fgkEndLadPipeArmZpos-fgkEndLadPipeOuterDiam/2.+alLVcoolZ3/2
+ +coolUzPos+1.25*fgkmm;
+ // Position in z of the first LVB with respect to the start of the cooling
+ // rectangular arm, coming (from inside of the ladder)
+ // The cards are added one after the other
+
+ for (Int_t iCard=0; iCard<nCards; iCard++) {
+
+ Double_t cardLVzShift = firstLVCardZ +
+ Double_t(iCard)*(alLVcoolZ3 + 2.*spaceBetweenCards+fgkHVCardCool3Z);
+
+ TGeoTranslation *trCardLVassemblyR = new TGeoTranslation(cardLVxShift,
+ cardLVyShift, cardLVzShift);
+ TGeoTranslation *trCardLVassemblyL = new TGeoTranslation(-cardLVxShift,
+ cardLVyShift, cardLVzShift);
+
+ endLadderCards->AddNode(cardLVassemblyR, iCard+1, trCardLVassemblyR);
+ endLadderCards->AddNode(cardLVassemblyL, iCard+1, trCardLVassemblyL);
+ }
+
+ //=*********************************
+ //--- HV cards
+ TGeoVolumeAssembly *cardHV = fCardHV;
+
+ Double_t coolHVdy = (fgkHVCardCoolDY + fgkHVCardCool3Y
+ + fgkEndLadPipeArmY/2 + fgkEndLadPipeArmBoxDY);
+
+ Double_t coolHVCenterShift = (fgkHVCardCool3Z/2-fgkHVCardCool2Z
+ -(fgkHVCardCeramZ)/2);
+
+ for (Int_t iCard=0; iCard<nCards; iCard++) {
+
+ Double_t fact = iCard*2.+1.;
+ Double_t coolHVdz = (firstLVCardZ + alLVcoolZ3*fact/2 + spaceBetweenCards*fact
+ + fgkHVCardCool3Z*fact/2. + coolHVCenterShift);
+ TGeoTranslation *trCardHV = new TGeoTranslation(0,coolHVdy, coolHVdz);
+ endLadderCards->AddNode(cardHV, iCard+1, trCardHV);
+ }
+
+ //=*********************************
+ //--- Carlos card
+
+ TGeoVolumeAssembly *assemblySupCarlos = fCardCarlos;
+// TGeoRotation *carlosSupRot1 = new TGeoRotation("carlosSuppAngle",
+// 0, -fgkCarlosSuppAngle, 0);
+
+ Double_t spaceBetweenCarlsoCards = 0.1*fgkmm;
+ Double_t firstCarlosCardZ = (firstLVCardZ - alLVcoolZ3/2 + alLVcoolZ3*4 +
+ fgkHVCardCool3Z*4 + spaceBetweenCards*7 + 2*fgkmm);
+ // position in z of the first Carlos board, coming from inside of the ladder
+
+ Double_t coolCarlosDy = (fgkCarlosSuppY3/2 + fgkEndLadPipeArmY/2 +
+ fgkEndLadPipeArmBoxDY);
+
+ for (Int_t iCard=0; iCard<nCards; iCard++) {
+
+ Double_t carloszPos = ( firstCarlosCardZ + fgkCarlosSuppZ3/2 +
+ iCard*(fgkCarlosSuppZ3+spaceBetweenCarlsoCards) );
+ TGeoCombiTrans *carlosPos = new TGeoCombiTrans(0,coolCarlosDy,carloszPos,
+ (TGeoRotation*) fCommonTr[0]);
+
+ endLadderCards->AddNode(assemblySupCarlos, iCard, carlosPos);
+ }
+
+ return endLadderCards;
+}
+
+
+//________________________________________________________________________
+TGeoVolume* AliITSv11GeometrySDD::CreateEndLadderCardsV(Int_t iLay) {
+//
+// return an Pcon containing the LV, HV and Carlos cards of one ladder
+// and their cooling system
+// This is the code actually used for the end ladder cards
+//
+
+ TGeoMedium *alCu12SDD = GetMedium("AL$"); // ITSsddAlCu12 : to code !!!!!!!!!!!!!!
+ TGeoMedium *phynoxSDD = GetMedium("INOX$");
+ TGeoMedium *coolerMediumSDD = GetMedium("WATER$");
+ TGeoMedium *copper = GetMedium("COPPER$");
+ TGeoMedium *plastic = GetMedium("SDDKAPTON (POLYCH2)$"); // ???
+ TGeoMedium *airSDD = GetMedium("SDD AIR$");
+ TGeoMedium *opticalFiber = GetMedium("SDD SI insensitive$"); // To code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+ Double_t endLadPipeUlength = fgkEndLadPipeUlengthLay3;
+ Double_t endLadPipeArmZ = fgkEndLadPipeArmZLay3;
+ Int_t nCards = 3;
+ Double_t rREF = fgkEndLaddCardsShortRadiusLay3;
+ // reference radius corresponding to local y=0
+
+ if (iLay==4) {
+ endLadPipeUlength = fgkEndLadPipeUlengthLay4;
+ endLadPipeArmZ = fgkEndLadPipeArmZLay4;
+ nCards = 4;
+ rREF = fgkEndLaddCardsShortRadiusLay4;
+ }
+
+ Double_t cardLVxShift = (fgkEndLadPipeUwidth/2-fgkEndLadPipeArmX/2
+ +fgkEndLadPipeArmBoxDX);
+ Double_t cardLVyShift = (-fgkLVcoolPosY-fgkLVcoolY1+fgkLVcoolY3
+ +fgkEndLadPipeArmY/2+fgkEndLadPipeArmBoxDY);
+
+ Double_t rMin = rREF + cardLVyShift;
+ // (The LV card is defining rMin because it is the lower object)
+
+ Double_t thickTotCable = 0.5;
+
+ //==================================
+ //--- The Pcon container
+
+ // minimum angle of the Pcon :
+ Double_t tanDPhi = ((fgkEndLadPipeUwidth/2+fgkEndLadPipeArmX/2) /
+ (rREF-fgkEndLadPipeArmY/2) );
+ Double_t dphi = 2*TMath::ATan(tanDPhi)*TMath::RadToDeg();
+ Double_t phi0 = 90-dphi/2;
+ Double_t coolUzPos = fgkEndLadPipeOuterDiam/2 + fgkDistEndLaddCardsLadd; // it is the z coord of the axis
+ // of the U colling pipe in its center
+ Double_t zMax = endLadPipeUlength+coolUzPos;
+ Double_t rMax = rMin + fgkLVcardY;
+ rMax = TMath::Sqrt(rMax*rMax + cardLVxShift*cardLVxShift);
+ Double_t cablesRadius = rMax-0.5;
+
+ TGeoPcon *containerShape = new TGeoPcon("EndLadderCcontainerShape", phi0, dphi, 10);
+ //DefineSection(Int_t snum, Double_t z, Double_t rmin, Double_t rmax);
+ // hard coded numbers are fine tuning to avoid overlaps with other volume in the old geometry
+ containerShape->DefineSection(0, fgkDistEndLaddCardsLadd, rREF-fgkEndLadPipeOuterDiam/2-0.2, rMax);
+ containerShape->DefineSection(1, fgkDistEndLaddCardsLadd+1.4, rREF-fgkEndLadPipeOuterDiam/2-0.2, rMax);
+ containerShape->DefineSection(2, fgkDistEndLaddCardsLadd+1.4, rMin, rMax);
+ containerShape->DefineSection(3, endLadPipeArmZ+2*fgkEndLadPipeRadius, rMin, rMax);
+ containerShape->DefineSection(4, endLadPipeArmZ+2*fgkEndLadPipeRadius, rREF-1.*fgkmm, rMax);
+ containerShape->DefineSection(5, zMax, rREF-1.*fgkmm, rMax);
+ // the following is quite dirty but works for the moment ...
+ containerShape->DefineSection(6, zMax, rREF+fgkCarlosCardZ1/2, rMax);
+ containerShape->DefineSection(7, zMax+1, cablesRadius-thickTotCable/2, rMax);
+
+ // The next parameters define the shape of the Pcon at its end and where cables
+ // are escaping...
+ Double_t cableSectionR1 = cablesRadius-thickTotCable/2;
+ Double_t cableSectionR2 = rMax;
+ Double_t cableSectionZ1 = zMax + 6.3*fgkmm + 2.5*fgkcm;
+ Double_t cableSectionZ2 = zMax + 7.3*fgkmm + 4*fgkcm;
+ // Those 6.3 and 7.3 are to be fixed to stick the maximum to the SDD cone
+ // (I'm waiting for the new cone)
+
+ containerShape->DefineSection(8, cableSectionZ1, cableSectionR1, rMax);
+ containerShape->DefineSection(9, cableSectionZ2, cableSectionR2, rMax);
+
+ TGeoVolume *endLadderCards = new TGeoVolume("endLadderCards",containerShape,airSDD);
+ //endLadderCards->SetVisibility(kFALSE);
+
+ //=*********************************
+ //--- The rounded pipe for the end ladder card cooling
+
+ AliITSv11GeomCableRound endLadderPipe("endLadderPipe", fgkEndLadPipeOuterDiam/2);
+ endLadderPipe.SetNLayers(2);
+ endLadderPipe.SetLayer(0, fgkEndLadPipeInnerDiam/2, coolerMediumSDD, 4);
+ endLadderPipe.SetLayer(1, (fgkEndLadPipeOuterDiam-fgkEndLadPipeInnerDiam)/2, phynoxSDD, fColorPhynox);
+
+ Double_t coordA[3] = { fgkEndLadPipeUwidth/2, rREF, endLadPipeUlength+coolUzPos};
+ Double_t vectA[3] = {0,0,1};
+
+ Double_t coordB[3] = { fgkEndLadPipeUwidth/2,rREF, fgkEndLadPipeRadius+coolUzPos};
+ Double_t vectB[3] = {0,0,1};
+
+ Double_t coordC[3] = { fgkEndLadPipeUwidth/2-fgkEndLadPipeRadius, rREF, coolUzPos};
+ Double_t vectC[3] = {1,0,0};
+
+ Double_t coordD[3] = {-fgkEndLadPipeUwidth/2+fgkEndLadPipeRadius, rREF, coolUzPos};
+ Double_t vectD[3] = {-1,0,0};
+
+ Double_t coordE[3] = {-fgkEndLadPipeUwidth/2, rREF, fgkEndLadPipeRadius+coolUzPos};
+ Double_t vectE[3] = {0,0,-1};
+
+ Double_t coordF[3] = {-fgkEndLadPipeUwidth/2,rREF, endLadPipeUlength+coolUzPos};
+ Double_t vectF[3] = {0,0,-1};
+
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 0, coordA, vectA);
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 1, coordB, vectB);
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 2, coordC, vectC);
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 3, coordD, vectD);
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 4, coordE, vectE);
+ endLadderPipe.AddCheckPoint( (TGeoVolume *) endLadderCards, 5, coordF, vectF);
+
+ endLadderPipe.SetInitialNode((TGeoVolume *) endLadderCards); //Set the root node
+ //endLadderPipe.CreateAndInsertCableSegment( 1);
+ endLadderPipe.CreateAndInsertTubeSegment( 1);
+ //endLadderPipe.CreateAndInsertCableSegment( 2);
+ endLadderPipe.CreateAndInsertTorusSegment( 2);
+ //endLadderPipe.CreateAndInsertCableSegment( 3);
+ endLadderPipe.CreateAndInsertTubeSegment( 3);
+ //endLadderPipe.CreateAndInsertCableSegment( 4);
+ endLadderPipe.CreateAndInsertTorusSegment( 4);
+ //endLadderPipe.CreateAndInsertCableSegment( 5);
+ endLadderPipe.CreateAndInsertTubeSegment( 5);
+
+ TGeoBBox *endLadPipeArmBox = new TGeoBBox("endLadPipeArmBox",fgkEndLadPipeArmX/2,
+ fgkEndLadPipeArmY/2, endLadPipeArmZ/2);
+ TGeoTube *endLadPipeArmTube = new TGeoTube("endLadPipeArmTube", 0,
+ fgkEndLadPipeOuterDiam/2, endLadPipeArmZ/2);
+
+ TGeoTranslation *endLadPipeArmBoxDY1 = new TGeoTranslation("endLadPipeArmBoxDY1",
+ - fgkEndLadPipeArmBoxDX,
+ fgkEndLadPipeArmBoxDY,0);
+ TGeoTranslation *endLadPipeArmBoxDY2 = new TGeoTranslation("endLadPipeArmBoxDY2",
+ fgkEndLadPipeArmBoxDX,
+ fgkEndLadPipeArmBoxDY,0);
+ endLadPipeArmBoxDY1->RegisterYourself();
+ endLadPipeArmBoxDY2->RegisterYourself();
+
+ if(GetDebug(3)) { // Remove compiler warning.
+ endLadPipeArmBox->InspectShape();
+ endLadPipeArmTube->InspectShape();
+ }
+
+ TGeoCompositeShape *endLadPipeArm1 = new TGeoCompositeShape("ITSsddEndLadPipeArm1",
+ "endLadPipeArmBox:endLadPipeArmBoxDY1"
+ "- endLadPipeArmTube");
+ TGeoCompositeShape *endLadPipeArm2 = new TGeoCompositeShape("ITSsddEndLadPipeArm2",
+ "endLadPipeArmBox:endLadPipeArmBoxDY2"
+ "- endLadPipeArmTube");
+
+ TGeoVolume *vEndLadPipeArm1 = new TGeoVolume("ITSsddVolEndLadPipeArm1",
+ endLadPipeArm1, alCu12SDD);
+ TGeoVolume *vEndLadPipeArm2 = new TGeoVolume("ITSsddVolEndLadPipeArm2",
+ endLadPipeArm2, alCu12SDD);
+ vEndLadPipeArm1->SetLineColor(2);
+ vEndLadPipeArm2->SetLineColor(2);
+
+ Double_t armZ = (coolUzPos-fgkEndLadPipeOuterDiam/2+endLadPipeArmZ/2
+ +fgkEndLadPipeArmZpos);
+
+ TGeoTranslation *trEndLadPipeArm1 = new TGeoTranslation("trEndLadPipeArm1",
+ -fgkEndLadPipeUwidth/2,rREF,armZ);
+ TGeoTranslation *trEndLadPipeArm2 = new TGeoTranslation("trEndLadPipeArm2",
+ fgkEndLadPipeUwidth/2,rREF,armZ);
+
+ endLadderCards->AddNode(vEndLadPipeArm1, 1, trEndLadPipeArm1);
+ endLadderCards->AddNode(vEndLadPipeArm2, 1, trEndLadPipeArm2);
+
+ //=*********************************
+ //--- LV cards
+ TGeoVolumeAssembly *cardLVassemblyR = fCardLVR;
+ TGeoVolumeAssembly *cardLVassemblyL = fCardLVL;
+
+ Double_t spaceBetweenCards = 0.2*fgkmm;
+
+
+ Double_t alLVcoolZ3 = (fgkLVcardCuZ+fgkLVcardZ+2.*(fgkLVChip0SiZ+fgkLVChip0Z)
+ +fgkLVcoolZ1*2.);
+
+ Double_t firstLVCardZ = fgkEndLadPipeArmZpos-fgkEndLadPipeOuterDiam/2.+alLVcoolZ3/2
+ +coolUzPos+1.25*fgkmm;
+ // Position in z of the first LVB with respect to the start of the cooling
+ // rectangular arm, coming (from inside of the ladder)
+ // The cards are added one after the other
+
+ for (Int_t iCard=0; iCard<nCards; iCard++) {
+
+ Double_t cardLVzShift = firstLVCardZ +
+ Double_t(iCard)*(alLVcoolZ3 + 2.*spaceBetweenCards+fgkHVCardCool3Z);
+
+ TGeoTranslation *trCardLVassemblyR = new TGeoTranslation(cardLVxShift,
+ cardLVyShift+rREF, cardLVzShift);
+ TGeoTranslation *trCardLVassemblyL = new TGeoTranslation(-cardLVxShift,
+ cardLVyShift+rREF, cardLVzShift);
+
+ endLadderCards->AddNode(cardLVassemblyR, iCard+1, trCardLVassemblyR);
+ endLadderCards->AddNode(cardLVassemblyL, iCard+1, trCardLVassemblyL);
+ }
+
+ //=*********************************
+ //--- HV cards
+ TGeoVolumeAssembly *cardHV = fCardHV;
+
+ Double_t coolHVdy = (fgkHVCardCoolDY + fgkHVCardCool3Y
+ + fgkEndLadPipeArmY/2 + fgkEndLadPipeArmBoxDY);
+ // shift of the HV card in local y w.r.t the local y=0 (center of cooling tube)
+
+ Double_t coolHVCenterShift = (fgkHVCardCool3Z/2-fgkHVCardCool2Z
+ -(fgkHVCardCeramZ)/2);
+
+ for (Int_t iCard=0; iCard<nCards; iCard++) {
+
+ Double_t fact = iCard*2.+1.;
+ Double_t coolHVdz = (firstLVCardZ + alLVcoolZ3*fact/2 + spaceBetweenCards*fact
+ + fgkHVCardCool3Z*fact/2. + coolHVCenterShift);
+ TGeoTranslation *trCardHV = new TGeoTranslation(0,coolHVdy+rREF, coolHVdz);
+ endLadderCards->AddNode(cardHV, iCard+1, trCardHV);
+ }
+
+ //=*********************************
+ //--- Carlos card
+
+ TGeoVolumeAssembly *assemblySupCarlos = fCardCarlos;
+// TGeoRotation *carlosSupRot1 = new TGeoRotation("carlosSuppAngle",
+// 0, -fgkCarlosSuppAngle, 0);
+
+ Double_t spaceBetweenCarlsoCards = 0.1*fgkmm;
+ Double_t firstCarlosCardZ = (firstLVCardZ - alLVcoolZ3/2 + alLVcoolZ3*4 +
+ fgkHVCardCool3Z*4 + spaceBetweenCards*7 + 2*fgkmm);
+ // position in z of the first Carlos board, coming from inside of the ladder
+
+ Double_t coolCarlosDy = (fgkCarlosSuppY3/2 + fgkEndLadPipeArmY/2 +
+ fgkEndLadPipeArmBoxDY);
+
+ for (Int_t iCard=0; iCard<nCards; iCard++) {
+
+ Double_t carloszPos = ( firstCarlosCardZ + fgkCarlosSuppZ3/2 +
+ iCard*(fgkCarlosSuppZ3+spaceBetweenCarlsoCards) );
+ TGeoCombiTrans *carlosPos = new TGeoCombiTrans(0,coolCarlosDy+rREF,carloszPos,
+ (TGeoRotation*) fCommonTr[0]);
+
+ endLadderCards->AddNode(assemblySupCarlos, iCard, carlosPos);
+ }
+
+
+ //=*********************************
+ //--- Cables
+
+
+ Double_t sectionV = (fgkSectionCuPerMod+fgkSectionPlastPerMod
+ + fgkSectionGlassPerMod)*nCards;
+ // We fix thickness, then width is calculated accordingly
+ Double_t width = sectionV/thickTotCable;
+ Double_t thickCu = thickTotCable*fgkSectionCuPerMod
+ / (fgkSectionCuPerMod+fgkSectionPlastPerMod+fgkSectionGlassPerMod);
+ Double_t thickPlast = thickTotCable*fgkSectionPlastPerMod
+ / (fgkSectionCuPerMod+fgkSectionPlastPerMod+fgkSectionGlassPerMod);
+ Double_t thickGlass = thickTotCable - thickCu - thickPlast;
+
+ AliITSv11GeomCableFlat cable("SDDcableEndLadder",width,thickTotCable);
+ cable.SetNLayers(3);
+ cable.SetLayer(0, thickCu, copper, kRed);
+ cable.SetLayer(1, thickPlast, plastic, kYellow);
+ cable.SetLayer(2, thickGlass, opticalFiber, kGreen);
+
+ Double_t zVect[3]={0,0,1};
+ Double_t xMinCable = firstCarlosCardZ+nCards*(fgkCarlosSuppZ3
+ +spaceBetweenCarlsoCards)/2 + 2.9;
+ // the 2.9cm is for taking into account carlos card angle...
+
+ Double_t zEndCable = GetConeZ(cablesRadius-thickTotCable/2, cableSectionR1,
+ cableSectionR2,cableSectionZ1,cableSectionZ2);
+
+ Double_t pos1[3] = {0, cablesRadius, xMinCable};
+ Double_t pos2[3] = {0, cablesRadius, zEndCable};
+ cable.AddCheckPoint( endLadderCards, 0, pos1, zVect );
+ cable.AddCheckPoint( endLadderCards, 1, pos2, zVect );
+ cable.SetInitialNode(endLadderCards);
+ cable.CreateAndInsertCableSegment(1);
+
+ return endLadderCards;
+}
+
+//________________________________________________________________________
+TGeoVolumeAssembly* AliITSv11GeometrySDD::CreateSupportRing(Int_t iLay) {
+//
+// return an assembly of the support rings, attaching the ladders to the cone
+//
+
+
+ iLay = iLay;
+
+ TGeoMedium *stainless = GetMedium("INOX$"); // To code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ TGeoVolumeAssembly *supportRing = new TGeoVolumeAssembly("supportRing");
+
+
+ //**********************************
+ // ruby cage
+
+ Double_t fgkRubyCageX = 9*fgkmm;
+ Double_t fgkRubyCageY = 5.5*fgkmm;
+ Double_t fgkRubyCageZ = 8*fgkmm;
+ Double_t fgkRubyCageInternSide = 5.*fgkmm; //side of the internal square
+ Double_t fgkRubyCageHoleDX = 2.*fgkmm;
+ Double_t fgkRubyCageVIntern = 5.42*fgkmm;
+ Double_t fgkRubyCageScrewHoleR = 4.5/2*fgkmm;
+ Double_t fgkRubyCageScrewHoleY = 1.5*fgkmm;
+
+ TGeoBBox *rubyCageBox = new TGeoBBox("rubyCageBox",fgkRubyCageX/2,fgkRubyCageY/2,
+ fgkRubyCageZ/2);
+
+ Double_t epsilon = 1e-10; //dummy epsilon to force the gl viewer to show holes
+
+ // pieces common to both square and V cages
+ TGeoBBox *rubyCageInternBox = new TGeoBBox("rubyCageInternBox",fgkRubyCageInternSide/2,
+ fgkRubyCageY/2+epsilon, fgkRubyCageInternSide/2);
+
+ TGeoTube *screwHole = new TGeoTube("screwHole", 0, fgkRubyCageScrewHoleR,
+ fgkRubyCageHoleDX/2+epsilon);
+
+ TGeoRotation *rotV = new TGeoRotation("", 90,90,-90);
+ TGeoCombiTrans *trScrewHole = new TGeoCombiTrans("trScrewHole",
+ fgkRubyCageX/2-fgkRubyCageHoleDX/2,
+ -fgkRubyCageY/2+fgkRubyCageScrewHoleY,0,rotV);
+ trScrewHole->RegisterYourself();
+
+ TGeoBBox *screwHoleFoot = new TGeoBBox("screwHoleFoot",fgkRubyCageHoleDX/2+epsilon,
+ fgkRubyCageScrewHoleY/2+epsilon, fgkRubyCageScrewHoleR);
+ TGeoTranslation *trScrewHoleFoot = new TGeoTranslation("trScrewHoleFoot",
+ fgkRubyCageX/2-fgkRubyCageHoleDX/2,
+ -fgkRubyCageY/2+fgkRubyCageScrewHoleY/2, 0);
+ trScrewHoleFoot->RegisterYourself();
+
+
+ // pieces which differ
+ Double_t rubyCageVInternBoxX = fgkRubyCageVIntern - fgkRubyCageInternSide/2;
+
+ TGeoBBox *rubyCageVInternBox = new TGeoBBox("rubyCageVInternBox",rubyCageVInternBoxX/2,
+ fgkRubyCageY/2+epsilon, fgkRubyCageInternSide/2);
+
+ TGeoTranslation *trRubyCageVInternBox = new TGeoTranslation("trRubyCageVInternB",
+ fgkRubyCageX/2-fgkRubyCageHoleDX-rubyCageVInternBoxX/2,0,0);
+ trRubyCageVInternBox->RegisterYourself();
+
+ TGeoTrd1 *rubyCageVInternTriangl = new TGeoTrd1("rubyCageVInternTriangl", 0,
+ fgkRubyCageInternSide/2, fgkRubyCageY/2+epsilon,
+ fgkRubyCageInternSide/4);
+
+ TGeoCombiTrans *trRubyCageVInternTriangl = new TGeoCombiTrans("trRubyCageVInternTriangl",
+ fgkRubyCageX/2-fgkRubyCageHoleDX-rubyCageVInternBoxX-fgkRubyCageInternSide/4
+ +epsilon,0,0, rotV );
+ trRubyCageVInternTriangl->RegisterYourself();
+
+ //---
+ TGeoCompositeShape *rubyCageSquare = new TGeoCompositeShape("rubyCageSquare",
+ "rubyCageBox-(rubyCageInternBox"
+ "+screwHole:trScrewHole+screwHoleFoot:trScrewHoleFoot)");
+
+ TGeoVolume *vRubyCageSquare = new TGeoVolume("vRubyCageSquare",
+ rubyCageSquare, stainless);
+ vRubyCageSquare->SetLineColor(10);
+
+ TGeoCompositeShape *rubyCageV = new TGeoCompositeShape("rubyCageV",
+ "rubyCageBox-(rubyCageVInternBox:trRubyCageVInternB"
+ "+rubyCageVInternTriangl:trRubyCageVInternTriangl"
+ "+screwHole:trScrewHole+screwHoleFoot:trScrewHoleFoot)");
+ TGeoVolume *vRubyCageV = new TGeoVolume("vRubyCageV", rubyCageV, stainless);
+ vRubyCageV->SetLineColor(10);
+
+ if(GetDebug(3)) { // Remove compiler warning.
+ rubyCageBox->InspectShape();
+ rubyCageInternBox->InspectShape();
+ screwHole->InspectShape();
+ screwHoleFoot->InspectShape();
+ rubyCageVInternBox->InspectShape();
+ rubyCageVInternTriangl->InspectShape();
+ }
+
+ supportRing->AddNode(vRubyCageSquare, 0, 0);
+ //supportRing->AddNode(vRubyCageV, 0, 0);
+ return supportRing;
+}
+
+
+
+//________________________________________________________________________
+void AliITSv11GeometrySDD::CreateSDDsensor() {
+//
+// return a box containing the SDD sensor
+//
+
+ TGeoMedium *airSDD = GetMedium("SDD AIR$");
+ TGeoMedium *siliconSDD = GetMedium("SDD SI insensitive$"); // ITSsddSi
+ TGeoMedium *siliconSDDsens = GetMedium("SI$"); // ITSsddSi
+ TGeoMedium *alSDD = GetMedium("AL$"); // ITSal
+ TGeoMedium *polyhamideSDD = GetMedium("SDDKAPTON (POLYCH2)$"); // ITSsddKAPTON_POLYCH2
+ TGeoMedium *glassSDD = GetMedium("SDD SI insensitive$"); // To code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!