From 39c2e17092679807bf1e7376b7fdad08b671e99c Mon Sep 17 00:00:00 2001 From: masera Date: Tue, 26 Mar 2013 08:57:17 +0000 Subject: [PATCH] new material added: PHYNOX. More reastic description of the cooling tubes side A. New method CreateCoolingTubes (Mario Sitta) --- ITS/AliITSv11.cxx | 9 + ITS/AliITSv11GeometrySPD.cxx | 359 ++++++++++++++++++++++++++--------- ITS/AliITSv11GeometrySPD.h | 3 + 3 files changed, 278 insertions(+), 93 deletions(-) diff --git a/ITS/AliITSv11.cxx b/ITS/AliITSv11.cxx index a4a841dfae7..e90ded71e9a 100644 --- a/ITS/AliITSv11.cxx +++ b/ITS/AliITSv11.cxx @@ -948,6 +948,12 @@ void AliITSv11::CreateMaterials() Float_t wNiSn[2] = {0.33, 0.67}; Float_t dNiSn = wNiSn[0]*8.908 + wNiSn[1]*7.310; + // SPD cooling capillaries (Phynox) + Float_t aPhynox[5] = { 55.8450, 58.9332, 51.9961, 58.6934, 95.94 }; + Float_t zPhynox[5] = { 26. , 27. , 24. , 28. , 42. }; + Float_t wPhynox[5] = { 0.17 , 0.40 , 0.20 , 0.16 , 0.07 }; + Float_t dPhynox = 8.3; + AliMaterial(1,"SI$",0.28086E+02,0.14000E+02,0.23300E+01,0.93600E+01,0.99900E+03); AliMedium(1,"SI$",1,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi); @@ -969,6 +975,9 @@ void AliITSv11::CreateMaterials() AliMixture(7,"SDD SI CHIP$",aSICHIP,zSICHIP,dSICHIP,6,wSICHIP); AliMedium(7,"SDD SI CHIP$",7,0,ifield,fieldm,tmaxfdSi,stemaxSi,deemaxSi,epsilSi,stminSi); + AliMixture(8,"PHYNOX$",aPhynox,zPhynox,dPhynox,5,wPhynox); + AliMedium(8,"PHYNOX$",8,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); + AliMixture(9,"SDD C (M55J)$",aCM55J,zCM55J,dCM55J,4,wCM55J); AliMedium(9,"SDD C (M55J)$",9,0,ifield,fieldm,tmaxfd,stemax,deemax,epsil,stmin); diff --git a/ITS/AliITSv11GeometrySPD.cxx b/ITS/AliITSv11GeometrySPD.cxx index 9f669647884..944b1945920 100644 --- a/ITS/AliITSv11GeometrySPD.cxx +++ b/ITS/AliITSv11GeometrySPD.cxx @@ -413,7 +413,6 @@ void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth, Int_t sect, //TGeoMedium *medSPDal = 0;//SPD support cone SDD mounting bracket Al TGeoMedium *medSPDcf = GetMedium("SPD C (M55J)$", mgr); TGeoMedium *medSPDss = GetMedium("INOX$", mgr); - TGeoMedium *medSPDair = GetMedium("AIR$", mgr); TGeoMedium *medSPDcoolfl = GetMedium("Freon$", mgr); //ITSspdCoolingFluid // const Double_t ksecDz = 0.5 * 500.0 * fgkmm; @@ -610,7 +609,7 @@ void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth, Int_t sect, Double_t *xp[ksecNRadii], *xp2[ksecNRadii]; Double_t *yp[ksecNRadii], *yp2[ksecNRadii]; TGeoXtru *sA0, *sA1, *sB0, *sB1; - TGeoCompositeShape *sB2; + TGeoCompositeShape *sA2, *sB2; TGeoBBox *sB3; TGeoEltu *sTA0, *sTA1; TGeoTube *sTB0, *sTB1; //,*sM0; @@ -772,7 +771,7 @@ void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth, Int_t sect, } // end if GetDebug(3) } // end for i sA0 = new TGeoXtru(2); - sA0->SetName("ITS SPD Carbon fiber support Sector A0"); + sA0->SetName("SectorA0"); sA0->DefinePolygon(m, xpp, ypp); sA0->DefineSection(0, -ksecDz); sA0->DefineSection(1, ksecDz); @@ -832,10 +831,13 @@ void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth, Int_t sect, } // end for k } // end for i sA1 = new TGeoXtru(2); - sA1->SetName("ITS SPD Carbon fiber support Sector Air A1"); + sA1->SetName("SectorA1"); sA1->DefinePolygon(m, xpp2, ypp2); - sA1->DefineSection(0, -ksecDz); - sA1->DefineSection(1, ksecDz); + sA1->DefineSection(0, -ksecDz-ksecCthick2); + sA1->DefineSection(1, ksecDz+ksecCthick2); + + sA2 = new TGeoCompositeShape("ITS SPD Carbon fiber support Sector A0", + "SectorA0-SectorA1"); // // Error in TGeoEltu. Semi-axis X must be < Semi-axis Y (?). sTA0 = new TGeoEltu("ITS SPD Cooling Tube TA0", 0.5 * ksecCoolTubeFlatY, @@ -916,7 +918,6 @@ void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth, Int_t sect, if(GetDebug(3)) { if(medSPDcf) medSPDcf->Dump(); else AliInfo("medSPDcf = 0"); if(medSPDss) medSPDss->Dump(); else AliInfo("medSPDss = 0"); - if(medSPDair) medSPDair->Dump(); else AliInfo("medSPDAir = 0"); if(medSPDcoolfl) medSPDcoolfl->Dump();else AliInfo("medSPDcoolfl = 0"); sA0->InspectShape(); sA1->InspectShape(); @@ -931,19 +932,12 @@ void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth, Int_t sect, StavesInSector(vM0); // create other volumes with some graphical settings TGeoVolume *vA0 = new TGeoVolume("ITSSPDCarbonFiberSupportSectorA0", - sA0, medSPDcf); + sA2, medSPDcf); vA0->SetVisibility(kTRUE); vA0->SetLineColor(4); // Blue vA0->SetLineWidth(1); vA0->SetFillColor(vA0->GetLineColor()); vA0->SetFillStyle(4010); // 10% transparent - TGeoVolume *vA1 = new TGeoVolume("ITSSPDCarbonFiberSupportSectorAirA1", - sA1, medSPDair); - vA1->SetVisibility(kTRUE); - vA1->SetLineColor(7); // light Blue - vA1->SetLineWidth(1); - vA1->SetFillColor(vA1->GetLineColor()); - vA1->SetFillStyle(4090); // 90% transparent TGeoVolume *vTA0 = new TGeoVolume("ITSSPDCoolingTubeTA0", sTA0, medSPDss); vTA0->SetVisibility(kTRUE); vTA0->SetLineColor(15); // gray @@ -1015,7 +1009,6 @@ void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth, Int_t sect, // add volumes to mother container passed as argument of this method moth->AddNode(vM0,1,0); // Add virtual volume to mother - vA0->AddNode(vA1,1,0); // Put air inside carbon fiber. vTA0->AddNode(vTA1,1,0); // Put cooling liquid indide tube middel. vTB0->AddNode(vTB1,1,0); // Put cooling liquid inside tube end. Double_t tubeEndLocal[3]={0.0,0.0,sTA0->GetDz()}; @@ -1183,7 +1176,6 @@ void AliITSv11GeometrySPD::CarbonFiberSector(TGeoVolume *moth, Int_t sect, if(GetDebug(3)){ vM0->PrintNodes(); vA0->PrintNodes(); - vA1->PrintNodes(); vB0->PrintNodes(); vB3->PrintNodes(); vTA0->PrintNodes(); @@ -3171,6 +3163,7 @@ void AliITSv11GeometrySPD::CreateServices(TGeoVolume *moth) const // New method to implement SPD services // // Created: 25 Jul 2012 Mario Sitta + // Updated: 15 Nov 2012 Mario Sitta // // Data provided by C.Gargiulo from CAD @@ -3231,16 +3224,6 @@ void AliITSv11GeometrySPD::CreateServices(TGeoVolume *moth) const const Double_t kSetPinHeadRmin = fgkmm * 1.5; const Double_t kSetPinHeadThick = fgkmm * 1.5; const Double_t kSetPinOutClipH = fgkmm * 1.0; - // Cooling pipes - const Double_t kCoolPipeSideARin = fgkmm * 1.5; - const Double_t kCoolPipeSideARout = fgkmm * 1.8; - const Double_t kCoolPipeSideCRin = fgkmm * 0.5; - const Double_t kCoolPipeSideCRout = fgkmm * 0.85; - const Double_t kCoolPipeHeight[3] = {11.0, 14.0, 18.0}; // TO BE CHECKED! - const Double_t kCoolPipeRadius[3] = {12.0, 14.0, 15.0}; // TO BE CHECKED! - const Double_t kCoolPipeZSPD = fgkcm * 8.45; // TO BE CHECKED! - - Int_t kPurple = 6; // Purple (Root does not define it) // Local variables Double_t xprof[12], yprof[12]; @@ -3406,8 +3389,6 @@ void AliITSv11GeometrySPD::CreateServices(TGeoVolume *moth) const // We have the shapes: now create the real volumes TGeoMedium *medInox = GetMedium("INOX$"); TGeoMedium *medCu = GetMedium("COPPER$"); - TGeoMedium *medFreon = GetMedium("Freon$"); - TGeoMedium *medGasFr = GetMedium("GASEOUS FREON$"); TGeoMedium *medSPDcf = GetMedium("SPD shield$"); TGeoVolume *manifblk = new TGeoVolume("ITSSPDBlkManif", @@ -3628,28 +3609,6 @@ void AliITSv11GeometrySPD::CreateServices(TGeoVolume *moth) const coolmanifC->AddNode(screwoutmanif, 6, new TGeoCombiTrans( 0, ypos,-zpos, new TGeoRotation("",0,-90,0))); - // We create here the cooling pipes because it's easier to place them now - AliITSv11GeomCableRound *coolpipeA[6]; - AliITSv11GeomCableRound *coolpipeC[6]; - - for (Int_t i = 0; i<6; i++) { - Char_t pipename[11]; - snprintf(pipename,11,"coolPipeA%d",i+1); - coolpipeA[i] = new AliITSv11GeomCableRound(pipename,kCoolPipeSideARout); - snprintf(pipename,11,"coolPipeC%d",i+1); - coolpipeC[i] = new AliITSv11GeomCableRound(pipename,kCoolPipeSideCRout); - - coolpipeA[i]->SetNLayers(2); - coolpipeA[i]->SetLayer(0, kCoolPipeSideARin, medGasFr, kPurple); - coolpipeA[i]->SetLayer(1,(kCoolPipeSideARout-kCoolPipeSideARin), - medCu, kYellow); - - coolpipeC[i]->SetNLayers(2); - coolpipeC[i]->SetLayer(0, kCoolPipeSideCRin, medFreon, kPurple); - coolpipeC[i]->SetLayer(1,(kCoolPipeSideCRout-kCoolPipeSideCRin), - medCu, kYellow); - } - xpos = manifblksh->GetDX() - kCoolManifCollXPos; ypos = manifblksh->GetDY() + manifcollcyl1sh->GetDz(); zpos =-manifblksh->GetDZ() + kCoolManifCollZ0; @@ -3680,51 +3639,12 @@ void AliITSv11GeometrySPD::CreateServices(TGeoVolume *moth) const new TGeoCombiTrans(-xpos, -y, zpos, new TGeoRotation("",0,90,0))); - y += manifcollcyl2sh->GetDz(); - Double_t coordL[3] = { xpos,-y,zpos}; - Double_t coordR[3] = {-xpos,-y,zpos}; - Double_t vect[3] = {0, 1, 0}; - coolpipeA[2*i]->AddCheckPoint(coolmanifA, 0, coordL, vect); - coolpipeC[2*i]->AddCheckPoint(coolmanifC, 0, coordL, vect); - coolpipeA[2*i+1]->AddCheckPoint(coolmanifA, 0, coordR, vect); - coolpipeC[2*i+1]->AddCheckPoint(coolmanifC, 0, coordR, vect); - coordL[1] -= kCoolPipeHeight[i]*fgkmm; - coordR[1] = coordL[1]; - coolpipeA[2*i]->AddCheckPoint(coolmanifA, 1, coordL, vect); - coolpipeC[2*i]->AddCheckPoint(coolmanifC, 1, coordL, vect); - coolpipeA[2*i+1]->AddCheckPoint(coolmanifA, 1, coordR, vect); - coolpipeC[2*i+1]->AddCheckPoint(coolmanifC, 1, coordR, vect); - coordL[1] -= kCoolPipeRadius[i]*fgkmm; - coordL[2] -= kCoolPipeRadius[i]*fgkmm; - coordR[1] = coordL[1]; - coordR[2] = coordL[2]; - vect[1] = 0; - vect[2] = -1; - coolpipeA[2*i]->AddCheckPoint(coolmanifA, 2, coordL, vect); - coolpipeC[2*i]->AddCheckPoint(coolmanifC, 2, coordL, vect); - coolpipeA[2*i+1]->AddCheckPoint(coolmanifA, 2, coordR, vect); - coolpipeC[2*i+1]->AddCheckPoint(coolmanifC, 2, coordR, vect); - coordL[2] = -kCoolPipeZSPD; - coordR[2] = -kCoolPipeZSPD; - coolpipeA[2*i]->AddCheckPoint(coolmanifA, 3, coordL, vect); - coolpipeC[2*i]->AddCheckPoint(coolmanifC, 3, coordL, vect); - coolpipeA[2*i+1]->AddCheckPoint(coolmanifA, 3, coordR, vect); - coolpipeC[2*i+1]->AddCheckPoint(coolmanifC, 3, coordR, vect); - zpos += kCoolManifCollDZ; } - for (Int_t i=0; i<6; i++) { - coolpipeA[i]->SetInitialNode((TGeoVolume *)coolmanifA); - coolpipeC[i]->SetInitialNode((TGeoVolume *)coolmanifC); - - coolpipeA[i]->CreateAndInsertTubeSegment(1); - coolpipeC[i]->CreateAndInsertTubeSegment(1); - coolpipeA[i]->CreateAndInsertTorusSegment(2,180); - coolpipeC[i]->CreateAndInsertTorusSegment(2,180); - coolpipeA[i]->CreateAndInsertTubeSegment(3); - coolpipeC[i]->CreateAndInsertTubeSegment(3); - } + // Now add the cooling tubes to the assembly + CreateCoolingTubes(coolmanifA, kFALSE); + CreateCoolingTubes(coolmanifC, kTRUE); // Finally put everything in the mother volume @@ -3746,6 +3666,259 @@ void AliITSv11GeometrySPD::CreateServices(TGeoVolume *moth) const } +//______________________________________________________________________ +void AliITSv11GeometrySPD::CreateCoolingTubes(TGeoVolume *moth, Bool_t sideC) const +{ + // + // Private method to implement SPD cooling tubes + // going from the manifolds to the staves + // Since their form is quite complicate (especially on Side C + // where capillaries are located) a separate method is used + // If sideC is true, the cooling tubes on Side C are created + // along with the cooling loops (aka "capillaries"), otherwise + // the (simpler) tubes on Side A get created. + // + // In all variables: L = Left (X > 0) R = Right (X < 0) + // + // Created: 10 Nov 2012 Mario Sitta + // + // Data provided by C.Gargiulo from CAD + + // Cooling manifolds - THESE VALUES *MUST* MATCH WITH CALLING METHOD! + const Double_t kCoolManifWidth = fgkmm * 22.0; + const Double_t kCoolManifLength = fgkmm * 50.0; + const Double_t kCoolManifThick = fgkmm * 7.0; + const Double_t kCoolManifCollH1 = fgkmm * 2.5; + const Double_t kCoolManifCollH2 = fgkmm * 5.0; + // Cooling pipes + const Double_t kCoolPipeSideARin = fgkmm * 1.5; + const Double_t kCoolPipeSideARout = fgkmm * 1.8; + const Double_t kCoolPipeSideCRin = fgkmm * 0.5; + const Double_t kCoolPipeSideCRout = fgkmm * 0.85; + const Double_t kCoolPipeHeight = fgkmm * 1.923; + const Double_t kCoolPipeCRadiusL[3] = {11.0, 14.0, 31.34};// TO BE CHECKED! + const Double_t kCoolPipeCRadiusR[3] = {12.0, 14.0, 35.54};// TO BE CHECKED! + const Double_t kCoolPipeARadiusL12[2] = {14.0, 30.0}; + const Double_t kCoolPipeARadiusR12[2] = {14.0, 30.0}; + const Double_t kCoolPipeARadiusL34[2] = {22.0, 30.0}; + const Double_t kCoolPipeARadiusR34[2] = {22.0, 30.0}; + const Double_t kCoolPipeARadiusL[3]= {14.0, 14.0, 31.34}; // TO BE CHECKED! + const Double_t kCoolPipeARadiusR[3]= {14.0, 14.0, 35.54}; // TO BE CHECKED! + const Double_t kCoolPipeZSPD = fgkcm * 8.47; + // Cooling pipes position - THESE VALUES *MUST* MATCH WITH CALLING METHOD! + const Double_t kCoolManifCollXPos = fgkmm * 5.0; + const Double_t kCoolManifCollDZ = fgkmm * 13.0; + const Double_t kCoolManifCollZ0 = fgkmm * 9.0; + + Int_t kPurple = 6; // Purple (Root does not define it) + + // Local variables + Double_t xpos, ypos, zpos; + Char_t pipename[11]; + + // + TGeoMedium *medPhynox = GetMedium("PHYNOX$"); + TGeoMedium *medFreon = GetMedium("Freon$"); + TGeoMedium *medGasFr = GetMedium("GASEOUS FREON$"); + + // The cooling tubes are created as CableRound volumes + // because it's easier to compose them piece by piece + AliITSv11GeomCableRound *coolpipe[6]; + + if (sideC) + for (Int_t i = 0; i<6; i++) { + snprintf(pipename,11,"coolPipeC%d",i+1); + coolpipe[i] = new AliITSv11GeomCableRound(pipename,kCoolPipeSideCRout); + coolpipe[i]->SetNLayers(2); + coolpipe[i]->SetLayer(0, kCoolPipeSideCRin, medFreon, kPurple); + coolpipe[i]->SetLayer(1,(kCoolPipeSideCRout-kCoolPipeSideCRin), + medPhynox, kYellow); + } + else + for (Int_t i = 0; i<6; i++) { + snprintf(pipename,11,"coolPipeA%d",i+1); + coolpipe[i] = new AliITSv11GeomCableRound(pipename,kCoolPipeSideARout); + coolpipe[i]->SetNLayers(2); + coolpipe[i]->SetLayer(0, kCoolPipeSideARin, medGasFr, kPurple); + coolpipe[i]->SetLayer(1,(kCoolPipeSideARout-kCoolPipeSideARin), + medPhynox, kYellow); + } + + // Now place them in the mother assembly + xpos = kCoolManifWidth/2 - kCoolManifCollXPos; + ypos = kCoolManifThick/2 + kCoolManifCollH1 + kCoolManifCollH2; + zpos =-kCoolManifLength/2 + kCoolManifCollZ0; + + if (sideC) { // On Side C tubes are simpler and can be created in a loop + + for (Int_t i=0; i<3; i++) { + + Double_t coordL[3] = { xpos,-ypos,zpos}; + Double_t coordR[3] = {-xpos,-ypos,zpos}; + Double_t vect[3] = {0, 1, 0}; + coolpipe[2*i]->AddCheckPoint(moth, 0, coordL, vect); + coolpipe[2*i+1]->AddCheckPoint(moth, 0, coordR, vect); + coordL[1] -= kCoolPipeHeight; + coordR[1] = coordL[1]; + coolpipe[2*i]->AddCheckPoint(moth, 1, coordL, vect); + coolpipe[2*i+1]->AddCheckPoint(moth, 1, coordR, vect); + coordL[1] -= kCoolPipeCRadiusL[i]*fgkmm; + coordL[2] -= kCoolPipeCRadiusL[i]*fgkmm; + coordR[1] -= kCoolPipeCRadiusR[i]*fgkmm; + coordR[2] -= kCoolPipeCRadiusR[i]*fgkmm; + vect[1] = 0; + vect[2] = -1; + coolpipe[2*i]->AddCheckPoint(moth, 2, coordL, vect); + coolpipe[2*i+1]->AddCheckPoint(moth, 2, coordR, vect); + coordL[2] = -kCoolPipeZSPD; + coordR[2] = -kCoolPipeZSPD; + coolpipe[2*i]->AddCheckPoint(moth, 3, coordL, vect); + coolpipe[2*i+1]->AddCheckPoint(moth, 3, coordR, vect); + + zpos += kCoolManifCollDZ; + } + + for (Int_t i=0; i<6; i++) { + coolpipe[i]->SetInitialNode(moth); + + coolpipe[i]->CreateAndInsertTubeSegment(1); + coolpipe[i]->CreateAndInsertTorusSegment(2,180); + coolpipe[i]->CreateAndInsertTubeSegment(3); + } + + } else { // On Side A tubes are all different so are created one by one + + Double_t coordL[3] = { xpos,-ypos,zpos}; + Double_t coordR[3] = {-xpos,-ypos,zpos}; + Double_t vect[3] = {0, 1, 0}; + coolpipe[0]->AddCheckPoint(moth, 0, coordL, vect); + coolpipe[1]->AddCheckPoint(moth, 0, coordR, vect); + coordL[1] -= kCoolPipeHeight; + coordR[1] = coordL[1]; + coolpipe[0]->AddCheckPoint(moth, 1, coordL, vect); + coolpipe[1]->AddCheckPoint(moth, 1, coordR, vect); + coordL[1] -= SinD(45) *kCoolPipeARadiusL12[0]*fgkmm; + coordL[2] -= (1+CosD(45))*kCoolPipeARadiusL12[0]*fgkmm; + coordR[1] -= SinD(45) *kCoolPipeARadiusR12[0]*fgkmm; + coordR[2] -= (1+CosD(45))*kCoolPipeARadiusR12[0]*fgkmm; + vect[1] = TMath::Sqrt(2); + vect[2] = -vect[1]; + coolpipe[0]->AddCheckPoint(moth, 2, coordL, vect); + coolpipe[1]->AddCheckPoint(moth, 2, coordR, vect); + coordL[1] += (1-CosD(45))*kCoolPipeARadiusL12[1]*fgkmm; + coordL[2] -= SinD(45) *kCoolPipeARadiusL12[1]*fgkmm; + coordR[1] += (1-CosD(45))*kCoolPipeARadiusR12[1]*fgkmm; + coordR[2] -= SinD(45) *kCoolPipeARadiusR12[1]*fgkmm; + vect[1] = 0; + vect[2] = -1; + coolpipe[0]->AddCheckPoint(moth, 3, coordL, vect); + coolpipe[1]->AddCheckPoint(moth, 3, coordR, vect); + coordL[2] = -kCoolPipeZSPD; + coordR[2] = -kCoolPipeZSPD; + coolpipe[0]->AddCheckPoint(moth, 4, coordL, vect); + coolpipe[1]->AddCheckPoint(moth, 4, coordR, vect); + + coolpipe[0]->SetInitialNode(moth); + coolpipe[0]->CreateAndInsertTubeSegment(1); + coolpipe[0]->CreateAndInsertTorusSegment(2,180); + coolpipe[0]->CreateAndInsertTorusSegment(3,180); + coolpipe[0]->CreateAndInsertTubeSegment(4); + + coolpipe[1]->SetInitialNode(moth); + coolpipe[1]->CreateAndInsertTubeSegment(1); + coolpipe[1]->CreateAndInsertTorusSegment(2,180); + coolpipe[1]->CreateAndInsertTorusSegment(3,180); + coolpipe[1]->CreateAndInsertTubeSegment(4); + + zpos += kCoolManifCollDZ; + + coordL[0] = xpos; coordL[1] = -ypos; coordL[2] = zpos; + coordR[0] =-xpos; coordR[1] = -ypos; coordR[2] = zpos; + vect[0] = 0; vect[1] = 1; vect[2] = 0; + + coolpipe[2]->AddCheckPoint(moth, 0, coordL, vect); + coolpipe[3]->AddCheckPoint(moth, 0, coordR, vect); + coordL[1] -= kCoolPipeHeight; + coordR[1] = coordL[1]; + coolpipe[2]->AddCheckPoint(moth, 1, coordL, vect); + coolpipe[3]->AddCheckPoint(moth, 1, coordR, vect); + coordL[1] -= SinD(45) *kCoolPipeARadiusL34[0]*fgkmm; + coordL[2] -= (1+CosD(45))*kCoolPipeARadiusL34[0]*fgkmm; + coordR[1] -= SinD(45) *kCoolPipeARadiusR34[0]*fgkmm; + coordR[2] -= (1+CosD(45))*kCoolPipeARadiusR34[0]*fgkmm; + vect[1] = TMath::Sqrt(2); + vect[2] = -vect[1]; + coolpipe[2]->AddCheckPoint(moth, 2, coordL, vect); + coolpipe[3]->AddCheckPoint(moth, 2, coordR, vect); + coordL[1] += (1-CosD(45))*kCoolPipeARadiusL34[1]*fgkmm; + coordL[2] -= SinD(45) *kCoolPipeARadiusL34[1]*fgkmm; + coordR[1] += (1-CosD(45))*kCoolPipeARadiusR34[1]*fgkmm; + coordR[2] -= SinD(45) *kCoolPipeARadiusR34[1]*fgkmm; + vect[1] = 0; + vect[2] = -1; + coolpipe[2]->AddCheckPoint(moth, 3, coordL, vect); + coolpipe[3]->AddCheckPoint(moth, 3, coordR, vect); + coordL[2] = -kCoolPipeZSPD; + coordR[2] = -kCoolPipeZSPD; + coolpipe[2]->AddCheckPoint(moth, 4, coordL, vect); + coolpipe[3]->AddCheckPoint(moth, 4, coordR, vect); + + coolpipe[2]->SetInitialNode(moth); + coolpipe[2]->CreateAndInsertTubeSegment(1); + coolpipe[2]->CreateAndInsertTorusSegment(2,180); + coolpipe[2]->CreateAndInsertTorusSegment(3,180); + coolpipe[2]->CreateAndInsertTubeSegment(4); + + coolpipe[3]->SetInitialNode(moth); + coolpipe[3]->CreateAndInsertTubeSegment(1); + coolpipe[3]->CreateAndInsertTorusSegment(2,180); + coolpipe[3]->CreateAndInsertTorusSegment(3,180); + coolpipe[3]->CreateAndInsertTubeSegment(4); + + zpos += kCoolManifCollDZ; + + coordL[0] = xpos; coordL[1] = -ypos; coordL[2] = zpos; + coordR[0] =-xpos; coordR[1] = -ypos; coordR[2] = zpos; + vect[0] = 0; vect[1] = 1; vect[2] = 0; + + coolpipe[4]->AddCheckPoint(moth, 0, coordL, vect); + coolpipe[5]->AddCheckPoint(moth, 0, coordR, vect); + coordL[1] -= kCoolPipeHeight; + coordR[1] = coordL[1]; + coolpipe[4]->AddCheckPoint(moth, 1, coordL, vect); + coolpipe[5]->AddCheckPoint(moth, 1, coordR, vect); + coordL[1] -= kCoolPipeARadiusL[2]*fgkmm; + coordL[2] -= kCoolPipeARadiusL[2]*fgkmm; + coordR[1] -= kCoolPipeARadiusR[2]*fgkmm; + coordR[2] -= kCoolPipeARadiusR[2]*fgkmm; + vect[1] = 0; + vect[2] = -1; + coolpipe[4]->AddCheckPoint(moth, 2, coordL, vect); + coolpipe[5]->AddCheckPoint(moth, 2, coordR, vect); + coordL[2] = -kCoolPipeZSPD; + coordR[2] = -kCoolPipeZSPD; + coolpipe[4]->AddCheckPoint(moth, 3, coordL, vect); + coolpipe[5]->AddCheckPoint(moth, 3, coordR, vect); + + coolpipe[4]->SetInitialNode(moth); + coolpipe[4]->CreateAndInsertTubeSegment(1); + coolpipe[4]->CreateAndInsertTorusSegment(2,180); + coolpipe[4]->CreateAndInsertTubeSegment(3); + + coolpipe[5]->SetInitialNode(moth); + coolpipe[5]->CreateAndInsertTubeSegment(1); + coolpipe[5]->CreateAndInsertTorusSegment(2,180); + coolpipe[5]->CreateAndInsertTubeSegment(3); + + } // if (sideC) + + if(GetDebug(3)) + for (Int_t i=0; i<6; i++) + coolpipe[i]->PrintCheckPoints(); + +} + + //______________________________________________________________________ TGeoVolume* AliITSv11GeometrySPD::CreateExtender( const Double_t *extenderParams, const TGeoMedium *extenderMedium, diff --git a/ITS/AliITSv11GeometrySPD.h b/ITS/AliITSv11GeometrySPD.h index 4200e203c67..926402703ee 100644 --- a/ITS/AliITSv11GeometrySPD.h +++ b/ITS/AliITSv11GeometrySPD.h @@ -152,6 +152,9 @@ class AliITSv11GeometrySPD : public AliITSv11Geometry Bool_t CFHolePoints(Double_t s,Double_t r1,Double_t r2,Double_t l, Double_t &x,Double_t &y)const; + // create the cooling tubes going from the manifolds to the staves + void CreateCoolingTubes(TGeoVolume *moth, Bool_t sideC) const; + /* Data members */ static const Double_t fgkGapLadder;// thicknes of the empty (air) gap left -- 2.43.5