#include <TGeoManager.h>
#include <TGeoVolume.h>
#include <TGeoPcon.h>
+#include <TGeoCone.h>
#include <TGeoTube.h> // contaings TGeoTubeSeg
#include <TGeoArb8.h>
#include <TGeoCompositeShape.h>
#define SQ(A) ((A)*(A))
-#define printArb8(A) \
+#define printArb8(A) if(GetDebug()){\
cout << A->GetName() << ":"; \
for(Int_t iii=0;iii<8;iii+=2){ cout <<"("<<A->GetVertices()[iii]<<"," \
<<A->GetVertices()[iii+1]<<","<<-A->GetDz()<<")";}\
for(Int_t iii=8;iii<16;iii+=2){ cout <<"("<<A->GetVertices()[iii]<<"," \
<<A->GetVertices()[iii+1]<<","<<A->GetDz()<<")";}\
- cout << endl;
+ cout << endl; }
-#define printPcon(A) \
+#define printPcon(A) if(GetDebug()){\
cout << A->GetName() << ": N=" << A->GetNz() << " Phi1=" << A->GetPhi1() \
<< ", Dphi=" << A->GetDphi() << endl; \
cout << "i\t Z \t Rmin \t Rmax" << endl; \
for(Int_t iii=0;iii<A->GetNz();iii++){ \
cout << iii << "\t" << A->GetZ(iii) << "\t" << A->GetRmin(iii) \
<< "\t" << A->GetRmax(iii) << endl; \
- } // end for iii
+ }} // end for iii
-#define printTube(A) \
+#define printTube(A) if(GetDebug()){\
cout << A->GetName() <<": Rmin="<<A->GetRmin()\
- <<" Rmax=" <<A->GetRmax()<<" Dz="<<A->GetDz()<<endl;
+ <<" Rmax=" <<A->GetRmax()<<" Dz="<<A->GetDz()<<endl;}
-#define printTubeSeg(A) \
+#define printTubeSeg(A) if(GetDebug()){\
cout << A->GetName() <<": Phi1="<<A->GetPhi1()<< \
" Phi2="<<A->GetPhi2()<<" Rmin="<<A->GetRmin()\
- <<" Rmax=" <<A->GetRmax()<<" Dz="<<A->GetDz()<<endl;
+ <<" Rmax=" <<A->GetRmax()<<" Dz="<<A->GetDz()<<endl;}
+
+#define printConeSeg(A) if(GetDebug()){\
+ cout << A->GetName() <<": Phi1="<<A->GetPhi1()<< \
+ " Phi2="<<A->GetPhi2()<<" Rmin1="<<A->GetRmin1()\
+ <<" Rmax1=" <<A->GetRmax1()<<" Rmin2="<<A->GetRmin2()\
+ <<" Rmax2=" <<A->GetRmax2()<<" Dz="<<A->GetDz()<<endl;}
+
+#define printBBox(A) if(GetDebug()){\
+ cout << A->GetName() <<": Dx="<<A->GetDX()<< \
+ " Dy="<<A->GetDY()<<" Dz="<<A->GetDZ() <<endl;}
ClassImp(AliITSv11)
TGeoPcon *itsv = new TGeoPcon("ITS Top Volume, Daughter of ALIC",
0.0,360.0,2);
// DefineSection(section number, Z, Rmin, Rmax).
- itsv->DefineSection(0,-100.0*kcm,0.01*kcm,50.0*kcm);
- itsv->DefineSection(1,+100.0*kcm,0.01*kcm,50.0*kcm);
+ itsv->DefineSection(0,-300.0*kcm,0.01*kcm,50.0*kcm);
+ itsv->DefineSection(1,+300.0*kcm,0.01*kcm,50.0*kcm);
TGeoVolume *ITSV = new TGeoVolume("ITSV",itsv,0);
//mgr->AddVolume(ITSV);
ITSV->SetVisibility(kFALSE);
SPDCone(ITSV);
SDDCone(ITSV);
SSDCone(ITSV);
+ ServicesCableSupport(ITSV);
}
//______________________________________________________________________
Double_t AliITSv11::RmaxFrom2Points(TGeoPcon *p,Int_t i1,Int_t i2,Double_t z){
Ds = new TGeoTube("ITS SPD Therm Screen Flange fill Ds",
TSCRinD+TSCarbonFiberThA,TSCRoutD-TSCarbonFiberThA,
0.5*TSCLengthD);
- //printTube(D);
- //printTube(Ds);
+ printTube(D);
+ printTube(Ds);
Dw = new TGeoTubeSeg("ITS SPD Therm Screen Flange Wing Dw",
TSCRoutD,TSCRwingD ,0.5*TSCLengthD,
TSCAngleD0-0.5*TSCAngleDD,TSCAngleD0+0.5*TSCAngleDD);
TSCRoutD,TSCRwingD-TSCarbonFiberThA,
0.5*TSCLengthD,TSCAngleD0-0.5*TSCAngleDDs,
TSCAngleD0+0.5*TSCAngleDDs);
- //printTubeSeg(Dw);
- //printTubeSeg(Dws);
+ printTubeSeg(Dw);
+ printTubeSeg(Dws);
k = 0;
for(i=-1;i<2;i++){
th = ((Double_t)(i+1))*TSCAngle*kRadian;
xco[6] = xco[5];
yco[6] = 0.0;
xci[6] = xci[5];
- yci[6] = 0.0;/*
+ yci[6] = 0.0;
+ if(GetDebug()){
cout.precision(4);
cout.width(7);
- cout <<"i \t xo yo \t xi yi \t xbo ybo \t xbi ybi \t xco yco \t xci yxi"<<endl;
+ cout <<"i \t xo yo \t xi yi \t xbo ybo \t xbi ybi "
+ "\t xco yco \t xci yxi"<<endl;
for(i=0;i<7;i++){
cout << i <<"\t"<<xo[i]<<","<<yo[i];
cout <<"\t"<<xi[i]<<","<<yi[i];
cout <<"\t"<<xbi[i]<<","<<ybi[i];
cout <<"\t"<<xco[i]<<","<<yco[i];
cout <<"\t"<<xci[i]<<","<<yci[i];
- cout<<endl;} */
+ cout<<endl;}
+ } // end if GetDebug()
//+++++++++++++++++++++++++
A1->SetVertex(0,xo[0],yo[0]);
A1->SetVertex(1,xo[1],yo[1]);
C3->SetVertex(2,xci[6],yci[6]);
C3->SetVertex(3,xci[5],yci[5]);
// Defining the hole, filled with air
- Double_t p1,c1,x,y;
+ Double_t p1,c1,x,y,x7[3],y7[3];
p1 = (xo[0]-xi[0])/(yo[0]-yi[0]);
c1 = xo[0]+0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(xo[0]-xi[0])+
SQ(yo[0]-yi[0]))/(xo[0]-xi[0]);
x = p1*(y-yo[0])+c1;
Ah1->SetVertex(0,x,y);
Bh1->SetVertex(0,x,y);
- Ch1->SetVertex(0,x,y);
+ Ch1->SetVertex(4,x,y);
y = TSCRinA+TSCarbonFiberThA;
x = p1*(y-yo[0])+c1;
Ah1->SetVertex(3,x,y);
Bh1->SetVertex(3,x,y);
- Ch1->SetVertex(3,x,y);
+ x7[0] = x; y7[0] = y; // vortexing done after last point
+ //Ch1->SetVertex(7,x,y);
p1 = (xo[1]-xi[1])/(yo[1]-yi[1]);
c1 = xo[1]-0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(xo[1]-xi[1])+
SQ(yo[1]-yi[1]))/(xo[1]-xi[1]);
x = p1*(y-yo[1])+c1;
Ah1->SetVertex(1,x,y);
Bh1->SetVertex(1,x,y);
- Ch1->SetVertex(1,x,y);
+ Ch1->SetVertex(5,x,y);
y = TSCRinA+TSCarbonFiberThA;
x = p1*(y-yo[1])+c1;
Ah1->SetVertex(2,x,y);
Bh1->SetVertex(2,x,y);
- Ch1->SetVertex(2,x,y);
+ Ch1->SetVertex(6,x,y);
//
// The easist way to get the points for the hole in volume A2 is to
// rotate it to the Y axis where the y coordinates are easier to know
yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
Ah2->SetVertex(0,xp,yp);
Bh2->SetVertex(0,xp,yp);
- Ch2->SetVertex(0,xp,yp);
+ Ch2->SetVertex(4,xp,yp);
y = yb+2.0*TSCarbonFiberThA;
x = p1*(y-ya)+c1;
xp = TMath::Cos(-th)*x-TMath::Sin(-th)*y;
yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
Ah2->SetVertex(3,xp,yp);
Bh2->SetVertex(3,xp,yp);
- Ch2->SetVertex(3,xp,yp);
+ x7[1] = x; y7[1] = y; // vortexing done after last point
+ //Ch2->SetVertex(7,xp,yp);
xa = TMath::Cos(th)*xo[2]-TMath::Sin(th)*yo[2];
ya = TMath::Sin(th)*xo[2]+TMath::Cos(th)*yo[2];
xb = TMath::Cos(th)*xi[2]-TMath::Sin(th)*yi[2];
yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
Ah2->SetVertex(1,xp,yp);
Bh2->SetVertex(1,xp,yp);
- Ch2->SetVertex(1,xp,yp);
+ Ch2->SetVertex(5,xp,yp);
y = yb+2.0*TSCarbonFiberThA;
x = p1*(y-ya)+c1;
xp = TMath::Cos(-th)*x-TMath::Sin(-th)*y;
yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
Ah2->SetVertex(2,xp,yp);
Bh2->SetVertex(2,xp,yp);
- Ch2->SetVertex(2,xp,yp);
+ Ch2->SetVertex(6,xp,yp);
//
p1 = (yo[5]-yi[5])/(xo[5]-xi[5]);
c1 = yo[5]+0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(yo[5]-yi[5])+
y = p1*(x-xo[5])+c1;
Ah3->SetVertex(0,x,y);
Bh3->SetVertex(0,x,y);
- Ch3->SetVertex(0,x,y);
+ Ch3->SetVertex(4,x,y);
x = xi[5]+2.0*TSCarbonFiberThA;
y = p1*(x-xo[5])+c1;
Ah3->SetVertex(3,x,y);
Bh3->SetVertex(3,x,y);
- Ch3->SetVertex(3,x,y);
+ x7[2] = x; y7[2] = y; // vortexing done after last point
+ //Ch3->SetVertex(7,x,y);
y = 2.0*TSCarbonFiberThA;
x = xo[5]-TSCarbonFiberThA;
Ah3->SetVertex(1,x,y);
Bh3->SetVertex(1,x,y);
+ Ch3->SetVertex(5,x,y);
y = 2.0*TSCarbonFiberThA;
x = xi[5]+2.0*TSCarbonFiberThA;
Ah3->SetVertex(2,x,y);
Bh3->SetVertex(2,x,y);
- Ch3->SetVertex(2,x,y);
+ Ch3->SetVertex(6,x,y);
//
for(i=0;i<4;i++){ // define points at +dz
A1->SetVertex(i+4,(A1->GetVertices())[2*i],(A1->GetVertices())[1+2*i]);
Bh3->SetVertex(i+4,(Bh3->GetVertices())[2*i],
(Bh3->GetVertices())[1+2*i]);
} // end for
- //printArb8(A1);
- //printArb8(Ah1);
- //printArb8(A2);
- //printArb8(Ah2);
- //printArb8(A3);
- //printArb8(Ah3);
- //printArb8(B1);
- //printArb8(Bh1);
- //printArb8(B2);
- //printArb8(Bh2);
- //printArb8(B3);
- //printArb8(Bh3);
//
p1 = (xco[0]-xci[0])/(yco[0]-yci[0]);
c1 = xco[0]+0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(xco[0]-xci[0])+
SQ(yco[0]-yci[0]))/(xco[0]-xci[0]);
y = TSCRoutC-2.*TSCarbonFiberThA;
x = p1*(y-yco[0])+c1;
- Ch1->SetVertex(4,x,y);
+ Ch1->SetVertex(0,x,y);
y = TSCRinC+TSCarbonFiberThA;
x = p1*(y-yci[0])+c1;
- Ch1->SetVertex(6,x,y);
+ Ch1->SetVertex(2,x,y);
p1 = (xco[1]-xci[1])/(yco[1]-yci[1]);
c1 = xco[1]-0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(xco[1]-xci[1])+
SQ(yco[1]-yci[1]))/(xco[1]-xci[1]);
y = TSCRoutC-2.*TSCarbonFiberThA;
x = p1*(y-yco[1])+c1;
- Ch1->SetVertex(5,x,y);
+ Ch1->SetVertex(1,x,y);
y = TSCRinC+TSCarbonFiberThA;
x = p1*(y-yci[1])+c1;
- Ch1->SetVertex(7,x,y);
+ Ch1->SetVertex(3,x,y);
//
th = 0.5*TSCAngle*kRadian;
xa = TMath::Cos(th)*xco[1]-TMath::Sin(th)*yco[1];
yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
yp = ya-TSCarbonFiberThA;
xp = p1*(y-ya)+c1;
- Ch2->SetVertex(4,xp,yp);
+ Ch2->SetVertex(0,xp,yp);
y = yb+2.0*TSCarbonFiberThA;
x = p1*(y-ya)+c1;
xp = TMath::Cos(-th)*x-TMath::Sin(-th)*y;
yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
- Ch2->SetVertex(6,xp,yp);
+ Ch2->SetVertex(2,xp,yp);
xa = TMath::Cos(th)*xco[2]-TMath::Sin(th)*yco[2];
ya = TMath::Sin(th)*xco[2]+TMath::Cos(th)*yco[2];
xb = TMath::Cos(th)*xci[2]-TMath::Sin(th)*yci[2];
x = p1*(y-ya)+c1;
xp = TMath::Cos(-th)*x-TMath::Sin(-th)*y;
yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
- Ch2->SetVertex(5,xp,yp);
+ Ch2->SetVertex(1,xp,yp);
y = yb+2.0*TSCarbonFiberThA;
x = p1*(y-ya)+c1;
xp = TMath::Cos(-th)*x-TMath::Sin(-th)*y;
yp = TMath::Sin(-th)*x+TMath::Cos(-th)*y;
- Ch2->SetVertex(7,xp,yp);
+ Ch2->SetVertex(3,xp,yp);
//
p1 = (yco[5]-yci[5])/(xco[5]-xci[5]);
c1 = yco[5]+0.5*TSCarbonFiberThA*TMath::Sqrt(SQ(yco[5]-yci[5])+
SQ(xco[5]-xci[5]))/(yco[5]-yci[5]);
x = xco[5]-TSCarbonFiberThA;
y = p1*(x-xco[5])+c1;
- Ch3->SetVertex(4,x,y);
+ Ch3->SetVertex(0,x,y);
x = xci[5]+2.0*TSCarbonFiberThA;
y = p1*(x-xci[5])+c1;
- Ch3->SetVertex(6,x,y);
+ Ch3->SetVertex(2,x,y);
y = 2.0*TSCarbonFiberThA;
x = xco[5]-TSCarbonFiberThA;
- Ch3->SetVertex(5,x,y);
+ Ch3->SetVertex(1,x,y);
y = 2.0*TSCarbonFiberThA;
x = xci[5]+2.0*TSCarbonFiberThA;
- Ch3->SetVertex(7,x,y);
- //printArb8(C1);
- //printArb8(Ch1);
- //printArb8(C2);
- //printArb8(Ch2);
- //printArb8(C3);
- //printArb8(Ch3);
+ Ch3->SetVertex(3,x,y);
+ Ch1->SetVertex(7,x7[0],y7[0]); // 7th point most be done last ???
+ Ch2->SetVertex(7,x7[1],y7[1]); // 7th point most be done last ???
+ Ch3->SetVertex(7,x7[2],y7[2]); // 7th point most be done last ???
+ printArb8(A1);
+ printArb8(Ah1);
+ printArb8(A2);
+ printArb8(Ah2);
+ printArb8(A3);
+ printArb8(Ah3);
+ printArb8(B1);
+ printArb8(Bh1);
+ printArb8(B2);
+ printArb8(Bh2);
+ printArb8(B3);
+ printArb8(Bh3);
+ printArb8(C1);
+ printArb8(Ch1);
+ printArb8(C2);
+ printArb8(Ch2);
+ printArb8(C3);
+ printArb8(Ch3);
//
// Define Minimal volume to inclose this SPD Thermal Sheald.
M1 = new TGeoPcon("ITSspdShealdVV",0.0,360.0,9);
M1->Rmax(8) = M1->GetRmax(7);
M2 = new TGeoTubeSeg("ITSspdShealdWingVV",
M1->GetRmax(8),Dw->GetRmax(),Dw->GetDz(),Dw->GetPhi1(),Dw->GetPhi2());
- //printTubeSeg(M2);
+ printTubeSeg(M2);
//
x = 0.5*(M1->GetZ(8) + M1->GetZ(7));
tranITSspdShealdVVt0 = new TGeoTranslation("ITSspdShealdVVt0",0.0,0.0,x);
rotITSspdShealdVVt3->SetName("ITSspdShealdVVt3");
rotITSspdShealdVVt3->RegisterYourself();
M = new TGeoCompositeShape("ITS SPD Thermal sheald volume",
- "ITSspdShealdVV+"
- "ITSspdShealdWingVV:ITSspdShealdVVt0+"
- "ITSspdShealdWingVV:ITSspdShealdVVt1+"
- "ITSspdShealdWingVV:ITSspdShealdVVt2+"
+ "(((ITSspdShealdVV+"
+ "ITSspdShealdWingVV:ITSspdShealdVVt0)+"
+ "ITSspdShealdWingVV:ITSspdShealdVVt1)+"
+ "ITSspdShealdWingVV:ITSspdShealdVVt2)+"
"ITSspdShealdWingVV:ITSspdShealdVVt3");
//
TGeoManager *mgr = gGeoManager;
Mv->AddNode(B3v,7,new TGeoCombiTrans(*tranb,*rot));
Mv->AddNode(B3v,8,new TGeoCombiTrans(*tranbm,*rot));
Mv->AddNode(C3v,4,new TGeoCombiTrans(*tranc,*rot));
+ if(GetDebug()){
+ A1v->PrintNodes();
+ Ah1v->PrintNodes();
+ A2v->PrintNodes();
+ Ah2v->PrintNodes();
+ A3v->PrintNodes();
+ Ah3v->PrintNodes();
+ B1v->PrintNodes();
+ Bh1v->PrintNodes();
+ B2v->PrintNodes();
+ Bh2v->PrintNodes();
+ B3v->PrintNodes();
+ Bh3v->PrintNodes();
+ C1v->PrintNodes();
+ Ch1v->PrintNodes();
+ C2v->PrintNodes();
+ Ch2v->PrintNodes();
+ C3v->PrintNodes();
+ Ch3v->PrintNodes();
+ Dv->PrintNodes();
+ Dsv->PrintNodes();
+ Dwv->PrintNodes();
+ Dwsv->PrintNodes();
+ //Mv->PrintNodes();
+ } // end if
}
//______________________________________________________________________
void AliITSv11::SDDCone(TGeoVolume *Moth){
const Double_t TSBoltRadius = 0.5*220.*kmm; // Radius in volume C
const Double_t TSBoltAngle0 = 0.0*kDegree; // Angle in volume C
const Double_t TSBoltdAngle = 30.0*kDegree; // Angle in Volume C
- Double_t x,y,z,t;
+ Double_t x,y,z,t,t0;
Int_t i,n;
TGeoTube *A,*B,*C,*D;
TGeoTranslation *tran;
tran = new TGeoTranslation("",x,y,-z);
Cv->AddNode(Dv,i+n+1,tran);
} // end for i
+ if(GetDebug()){
+ Av->PrintNodes();
+ Bv->PrintNodes();
+ Cv->PrintNodes();
+ Dv->PrintNodes();
+ } // end if
// SDD Suport Cone
//
//
//const Int_t Nmounts = 4;
//const Double_t DmountAngle = 9.0; // degrees
const Double_t RoutMax = 0.5*560.0*kmm;
- //const Double_t RoutHole = 0.5*965.0*kmm;
const Double_t RoutMin = 0.5*539.0*kmm;
- const Double_t RholeMaxOut = 214.5*kmm;
- const Double_t RholeMaxIn = 115.5*kmm;
- //const Double_t RholeMin = 0.5*740.0*kmm;
- //const Double_t RpostMin = 316.0*kmm;
- const Int_t NpostsOut = 6;
- const Int_t NpostsIn = 3;
- const Double_t Phi0PostOut = 0.0; // degree
- const Double_t Phi0PostIn = 0.0; // degree
- const Double_t dRpostOut = 16.0*kmm;
- const Double_t dRpostIn = 16.0*kmm;
- const Double_t ZpostMaxOut = 116.0*kmm;
- const Double_t ZpostMaxIn = 190.0*kmm;
+ // Holes in cone for cables
+ const Double_t PhiHole1 = 0.0*kDegree;
+ const Double_t dPhiHole1 = 25.0*kDegree;
+ const Double_t RholeMax1 = 0.5*528.*kmm;
+ const Double_t RholeMin1 = 0.5*464.*kmm;
+ const Double_t PhiHole2 = 0.0*kDegree;
+ const Double_t dPhiHole2 = 50.0*kDegree;
+ const Double_t RholeMax2 = 0.5*375.*kmm;
+ const Double_t RholeMin2 = 0.5*280.*kmm;
+ //
+ //const Int_t NpostsOut = 6;
+ //const Int_t NpostsIn = 3;
+ //const Double_t Phi0PostOut = 0.0; // degree
+ //const Double_t Phi0PostIn = 0.0; // degree
+ //const Double_t dRpostOut = 16.0*kmm;
+ //const Double_t dRpostIn = 16.0*kmm;
+ //const Double_t ZpostMaxOut = 116.0*kmm;
+ //const Double_t ZpostMaxIn = 190.0*kmm;
const Double_t RinMax = 0.5*216*kmm;
const Double_t RinCylinder = 0.5*231.0*kmm;
- const Double_t RinHole = 0.5*220.0*kmm;
+ //const Double_t RinHole = 0.5*220.0*kmm;
const Double_t RinMin = 0.5*210.0*kmm;
const Double_t dZin = 15.0*kmm; // ???
//
" in error. abort.");
return;
} // end if
- TGeoPcon *E = new TGeoPcon("ITS SDD Suport cone Carbon Fiber Surface outer",
+ TGeoPcon *E = new TGeoPcon("ITSsddSuportConeCarbonFiberSurfaceE",
0.0,360.0,12);
E->Z(0) = 0.0;
E->Rmin(0) = RoutMin;
E->Rmin(6) = Rmin;
printPcon(E);
// Inner Core, Inserto material
- TGeoPcon *F = new TGeoPcon("ITS SDD Suport cone Inserto Stesalite",
- 0.0,360.0,9);
+ TGeoPcon *F = new TGeoPcon("ITSsddSuportConeInsertoStesaliteF",0.,360.0,9);
F->Z(0) = E->GetZ(0);
F->Rmin(0) = E->GetRmin(0)+Cthick;
F->Rmax(0) = E->GetRmax(0)-Cthick;
F->Rmax(6) = RmaxFromZpCone(F,Tc,F->GetZ(6));
F->Rmax(7) = F->GetRmax(6);
F->Z(8) = ZFromRmaxpCone(F,Tc,F->GetRmax(8),-Cthick);
- //F->Rmin(9) = F->Rmin(7);
- //F->Z(9) = F->GetZ(9);
- //F->Rmax(9) = (E->GetRmax(8)-E->GetRmax(11))/(E->GetZ(8)-E->GetZ(11))*
- // (F->GetZ(9)-F->GetZ(8))+F->GetRmax(8);
printPcon(F);
// Inner Core, Inserto material
- TGeoPcon *G = new TGeoPcon("ITS SDD Suport cone Foam core",
- 0.0,360.0,4);
+ TGeoPcon *G = new TGeoPcon("ITSsddSuportConeFoamCoreG",0.0,360.0,4);
RadiusOfCurvature(Rcurv+Cthick,0.0,F->GetZ(1),F->GetRmin(1),Tc,Z,Rmin);
G->Z(0) = Z;
G->Rmin(0) = Rmin;
G->Rmin(3) = G->GetRmax(3);
printPcon(G);
//
- TGeoVolume *Ev,*Fv,*Gv;
- Ev = new TGeoVolume("ITSsddConeE",E,SDDcf);
- Ev->SetVisibility(kTRUE);
- Ev->SetLineColor(4);
- Ev->SetLineWidth(1);
- Ev->SetFillColor(Ev->GetLineColor());
- Ev->SetFillStyle(4000); // 0% transparent
- Fv = new TGeoVolume("ITSsddConeF",F,SDDfs);
- Fv->SetVisibility(kTRUE);
- Fv->SetLineColor(2);
- Fv->SetLineWidth(1);
- Fv->SetFillColor(Fv->GetLineColor());
- Fv->SetFillStyle(4010); // 10% transparent
- Gv = new TGeoVolume("ITSsddConeG",G,SDDfo);
- Gv->SetVisibility(kTRUE);
- Gv->SetLineColor(7);
- Gv->SetLineWidth(1);
- Gv->SetFillColor(Gv->GetLineColor());
- Gv->SetFillStyle(4050); // 50% transparent
+ TGeoPcon *H = new TGeoPcon("ITSsddSuportConeHoleH",PhiHole1,dPhiHole1,4);
+ H->Rmin(0) = RholeMax1;
+ H->Rmax(0) = H->GetRmin(0);
+ H->Z(0) = ZFromRminpCone(E,Tc,H->GetRmin(0));
+ H->Rmax(1) = H->GetRmax(0);
+ H->Z(1) = ZFromRmaxpCone(E,Tc,H->GetRmax(1));
+ H->Rmin(1) = RminFromZpCone(E,Tc,H->GetZ(1));
+ H->Rmin(2) = RholeMin1;
+ H->Z(2) = ZFromRminpCone(E,Tc,H->GetRmin(2));
+ H->Rmax(2) = RmaxFromZpCone(E,Tc,H->GetZ(2));
+ H->Rmin(3) = H->GetRmin(2);
+ H->Rmax(3) = H->GetRmin(3);
+ H->Z(3) = ZFromRminpCone(E,Tc,H->GetRmin(3));
+ printPcon(H);
+ //
+ x = Cthick/(0.5*(RholeMax1+RholeMin1));
+ t0 = PhiHole1 - x/kRadian;
+ t = dPhiHole1 + 2.0*x/kRadian;
+ TGeoPcon *I = new TGeoPcon("ITSsddSuportConeHoleI",t0,t,4);
+ I->Rmin(0) = RholeMax1+Cthick;
+ I->Rmax(0) = I->GetRmin(0);
+ I->Z(0) = ZFromRminpCone(F,Tc,I->GetRmin(0));
+ I->Rmax(1) = I->GetRmax(0);
+ I->Z(1) = ZFromRmaxpCone(F,Tc,I->GetRmax(1));
+ I->Rmin(1) = RminFromZpCone(F,Tc,I->GetZ(1));
+ I->Rmin(2) = RholeMin1-Cthick;
+ I->Z(2) = ZFromRminpCone(F,Tc,I->GetRmin(2));
+ I->Rmax(2) = RmaxFromZpCone(F,Tc,I->GetZ(2));
+ I->Rmin(3) = I->GetRmin(2);
+ I->Rmax(3) = I->GetRmin(3);
+ I->Z(3) = ZFromRmaxpCone(F,Tc,I->GetRmax(3));
+ printPcon(I);
+ //
+ TGeoPcon *J = new TGeoPcon("ITSsddSuportConeHoleJ",PhiHole2,dPhiHole2,4);
+ J->Rmin(0) = RholeMax2;
+ J->Rmax(0) = J->GetRmin(0);
+ J->Z(0) = ZFromRminpCone(E,Tc,J->GetRmin(0));
+ J->Rmax(1) = J->GetRmax(0);
+ J->Z(1) = ZFromRmaxpCone(E,Tc,J->GetRmax(1));
+ J->Rmin(1) = RminFromZpCone(E,Tc,J->GetZ(1));
+ J->Rmin(2) = RholeMin2;
+ J->Z(2) = ZFromRminpCone(E,Tc,J->GetRmin(2));
+ J->Rmax(2) = RmaxFromZpCone(E,Tc,J->GetZ(2));
+ J->Rmin(3) = J->GetRmin(2);
+ J->Rmax(3) = J->GetRmin(3);
+ J->Z(3) = ZFromRmaxpCone(E,Tc,J->GetRmax(3));
+ printPcon(J);
+ //
+ x = Cthick/(0.5*(RholeMax2+RholeMin2));
+ t0 = PhiHole2 - x/kRadian;
+ t = dPhiHole2 + 2.0*x/kRadian;
+ TGeoPcon *K = new TGeoPcon("ITSsddSuportConeHoleK",t0,t,4);
+ K->Rmin(0) = RholeMax2+Cthick;
+ K->Rmax(0) = K->GetRmin(0);
+ K->Z(0) = ZFromRminpCone(F,Tc,K->GetRmin(0));
+ K->Rmax(1) = K->GetRmax(0);
+ K->Z(1) = ZFromRmaxpCone(F,Tc,K->GetRmax(1));
+ K->Rmin(1) = RminFromZpCone(F,Tc,K->GetZ(1));
+ K->Rmin(2) = RholeMin2-Cthick;
+ K->Z(2) = ZFromRminpCone(F,Tc,K->GetRmin(2));
+ K->Rmax(2) = RmaxFromZpCone(F,Tc,K->GetZ(2));
+ K->Rmin(3) = K->GetRmin(2);
+ K->Rmax(3) = K->GetRmin(3);
+ K->Z(3) = ZFromRmaxpCone(F,Tc,K->GetRmax(3));
+ printPcon(K);
+ //
+ TGeoCompositeShape *L,*M,*N;
+ rot = new TGeoRotation("ITSsddRotZ30",0.0,0.0,30.0);
+ rot->RegisterYourself();
+ rot = new TGeoRotation("ITSsddRotZ60",0.0,0.0,60.0);
+ rot->RegisterYourself();
+ rot = new TGeoRotation("ITSsddRotZ90",0.0,0.0,90.0);
+ rot->RegisterYourself();
+ rot = new TGeoRotation("ITSsddRotZ120",0.0,0.0,120.0);
+ rot->RegisterYourself();
+ rot = new TGeoRotation("ITSsddRotZ150",0.0,0.0,150.0);
+ rot->RegisterYourself();
+ rot = new TGeoRotation("ITSsddRotZ180",0.0,0.0,180.0);
+ rot->RegisterYourself();
+ rot = new TGeoRotation("ITSsddRotZ210",0.0,0.0,210.0);
+ rot->RegisterYourself();
+ rot = new TGeoRotation("ITSsddRotZ240",0.0,0.0,240.0);
+ rot->RegisterYourself();
+ rot = new TGeoRotation("ITSsddRotZ270",0.0,0.0,270.0);
+ rot->RegisterYourself();
+ rot = new TGeoRotation("ITSsddRotZ300",0.0,0.0,300.0);
+ rot->RegisterYourself();
+ rot = new TGeoRotation("ITSsddRotZ330",0.0,0.0,330.0);
+ rot->RegisterYourself();
+ L = new TGeoCompositeShape("ITS SDD Suport Cone","((((((((((((((((("
+ "ITSsddSuportConeCarbonFiberSurfaceE -"
+ "ITSsddSuportConeHoleH) -"
+ "ITSsddSuportConeHoleH:ITSsddRotZ30) -"
+ "ITSsddSuportConeHoleH:ITSsddRotZ60) -"
+ "ITSsddSuportConeHoleH:ITSsddRotZ90) -"
+ "ITSsddSuportConeHoleH:ITSsddRotZ120) -"
+ "ITSsddSuportConeHoleH:ITSsddRotZ150) -"
+ "ITSsddSuportConeHoleH:ITSsddRotZ180) -"
+ "ITSsddSuportConeHoleH:ITSsddRotZ210) -"
+ "ITSsddSuportConeHoleH:ITSsddRotZ240) -"
+ "ITSsddSuportConeHoleH:ITSsddRotZ270) -"
+ "ITSsddSuportConeHoleH:ITSsddRotZ300) -"
+ "ITSsddSuportConeHoleH:ITSsddRotZ330) -"
+ "ITSsddSuportConeHoleJ) -"
+ "ITSsddSuportConeHoleJ:ITSsddRotZ60) -"
+ "ITSsddSuportConeHoleJ:ITSsddRotZ120) -"
+ "ITSsddSuportConeHoleJ:ITSsddRotZ180) -"
+ "ITSsddSuportConeHoleJ:ITSsddRotZ240) -"
+ "ITSsddSuportConeHoleJ:ITSsddRotZ300");
+ M = new TGeoCompositeShape("ITS SDD Suport Cone Inserto Stesalite",
+ "((((((((((((((((("
+ "ITSsddSuportConeInsertoStesaliteF -"
+ "ITSsddSuportConeHoleI) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ30) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ60) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ90) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ120) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ150) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ180) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ210) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ240) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ270) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ300) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ330) -"
+ "ITSsddSuportConeHoleK) -"
+ "ITSsddSuportConeHoleK:ITSsddRotZ60) -"
+ "ITSsddSuportConeHoleK:ITSsddRotZ120) -"
+ "ITSsddSuportConeHoleK:ITSsddRotZ180) -"
+ "ITSsddSuportConeHoleK:ITSsddRotZ240) -"
+ "ITSsddSuportConeHoleK:ITSsddRotZ300");
+ N = new TGeoCompositeShape("ITS SDD Suport Cone Foam Core",
+ "((((((((((((((((("
+ "ITSsddSuportConeFoamCoreG -"
+ "ITSsddSuportConeHoleI) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ30) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ60) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ90) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ120) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ150) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ180) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ210) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ240) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ270) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ300) -"
+ "ITSsddSuportConeHoleI:ITSsddRotZ330) -"
+ "ITSsddSuportConeHoleK) -"
+ "ITSsddSuportConeHoleK:ITSsddRotZ60) -"
+ "ITSsddSuportConeHoleK:ITSsddRotZ120) -"
+ "ITSsddSuportConeHoleK:ITSsddRotZ180) -"
+ "ITSsddSuportConeHoleK:ITSsddRotZ240) -"
+ "ITSsddSuportConeHoleK:ITSsddRotZ300");
+ //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ TGeoVolume *Lv,*Mv,*Nv;
+ Lv = new TGeoVolume("ITSsddConeL",L,SDDcf);
+ Lv->SetVisibility(kTRUE);
+ Lv->SetLineColor(4);
+ Lv->SetLineWidth(1);
+ Lv->SetFillColor(Lv->GetLineColor());
+ Lv->SetFillStyle(4000); // 0% transparent
+ Mv = new TGeoVolume("ITSsddConeM",M,SDDfs);
+ Mv->SetVisibility(kTRUE);
+ Mv->SetLineColor(2);
+ Mv->SetLineWidth(1);
+ Mv->SetFillColor(Mv->GetLineColor());
+ Mv->SetFillStyle(4010); // 10% transparent
+ Nv = new TGeoVolume("ITSsddConeN",N,SDDfo);
+ Nv->SetVisibility(kTRUE);
+ Nv->SetLineColor(7);
+ Nv->SetLineWidth(1);
+ Nv->SetFillColor(Nv->GetLineColor());
+ Nv->SetFillStyle(4050); // 50% transparent
//
- Fv->AddNode(Gv,1,0);
- Ev->AddNode(Fv,1,0);
+ Mv->AddNode(Nv,1,0);
+ Lv->AddNode(Mv,1,0);
tran = new TGeoTranslation("",0.0,0.0,-Z0);
- Moth->AddNode(Ev,1,tran);
+ Moth->AddNode(Lv,1,tran);
rot = new TGeoRotation("",0.0,180.0*kDegree,0.0);
rotran = new TGeoCombiTrans("",0.0,0.0,Z0,rot);
- Moth->AddNode(Ev,2,rotran);
+ delete rot;// rot not explicity used in AddNode functions.
+ Moth->AddNode(Lv,2,rotran);
+ if(GetDebug()){
+ Lv->PrintNodes();
+ Mv->PrintNodes();
+ Nv->PrintNodes();
+ } // end if
}
//______________________________________________________________________
void AliITSv11::SSDCone(TGeoVolume *Moth){
// none.
// Return:
// none.
- const Double_t ZThCylinder = 1140.0*kmm;//
+ //
+ TGeoMedium *SSDcf = 0; // SSD support cone Carbon Fiber materal number.
+ TGeoMedium *SSDfs = 0; // SSD support cone inserto stesalite 4411w.
+ TGeoMedium *SSDfo = 0; // SSD support cone foam, Rohacell 50A.
+ TGeoMedium *SSDss = 0; // SSD support cone screw material,Stainless steal
+ TGeoMedium *SSDair = 0; // SSD support cone Air
+ TGeoMedium *SSDal = 0; // SSD support cone SDD mounting bracket Al
+ TGeoManager *mgr = gGeoManager;
+ SSDcf = mgr->GetMedium("ITSssdCarbonFiber");
+ SSDfs = mgr->GetMedium("ITSssdStaselite4411w");
+ SSDfo = mgr->GetMedium("ITSssdRohacell50A");
+ SSDss = mgr->GetMedium("ITSssdStainlessSteal");
+ SSDair= mgr->GetMedium("ITSssdAir");
+ SSDal = mgr->GetMedium("ITSssdAl");
+ //
+ // SSD Central cylinder/Thermal Sheald.
+ const Double_t ZThCylinder = 1140.0*kmm; //
+ const Double_t ZThCylFoam = 1020.0*kmm; //
+ const Double_t RThCylOuter = 0.5*595.0*kmm; //
+ const Double_t CthickThCyl = 0.64*kmm; //
+ const Double_t FoamThickTh = 5.0*kmm; //
+ const Double_t dZThCylThEnd = 6.0*kmm; //
+ const Double_t RThCylInerEnd= 0.5*560.5*kmm; //
+ TGeoPcon *CA,*CB;
+ TGeoTube*CC;
+ //
+ CA = new TGeoPcon("ITS SSD Thermal Centeral CylinderA",0.0,360.0,6);
+ CB = new TGeoPcon("ITS SSD Thermal Centeral CylinderB",0.0,360.0,6);
+ CC = new TGeoTube("ITS SSD Thermal Centeral CylinderC",
+ RThCylOuter-CthickThCyl-FoamThickTh,
+ RThCylOuter-CthickThCyl,0.5*ZThCylFoam);
+ CA->Z(0) = -0.5*ZThCylinder;
+ CA->Rmin(0) = RThCylInerEnd;
+ CA->Rmax(0) = RThCylOuter;
+ CA->Z(1) = CA->GetZ(0) + dZThCylThEnd;
+ CA->Rmin(1) = CA->GetRmin(0);
+ CA->Rmax(1) = CA->GetRmax(0);
+ CA->Z(2) = -0.5*ZThCylFoam;
+ CA->Rmin(2) = RThCylOuter - 2.0*CthickThCyl-FoamThickTh;
+ CA->Rmax(2) = CA->GetRmax(0);
+ CA->Z(3) = -CA->GetZ(2);
+ CA->Rmin(3) = CA->GetRmin(2);
+ CA->Rmax(3) = CA->GetRmax(2);
+ CA->Z(4) = -CA->GetZ(1);
+ CA->Rmin(4) = CA->GetRmin(1);
+ CA->Rmax(4) = CA->GetRmax(1);
+ CA->Z(5) = -CA->GetZ(0);
+ CA->Rmin(5) = CA->GetRmin(0);
+ CA->Rmax(5) = CA->GetRmax(0);
+ //
+ CB->Z(0) = CA->GetZ(0);
+ CB->Rmin(0) = CA->GetRmin(0) + CthickThCyl;
+ CB->Rmax(0) = CA->GetRmax(0) - CthickThCyl;
+ CB->Z(1) = CA->GetZ(1);
+ CB->Rmin(1) = CA->GetRmin(1) + CthickThCyl;
+ CB->Rmax(1) = CA->GetRmax(1) - CthickThCyl;
+ CB->Z(2) = CA->GetZ(2);
+ CB->Rmin(2) = CA->GetRmin(2) + CthickThCyl;
+ CB->Rmax(2) = CA->GetRmax(2) - CthickThCyl;
+ CB->Z(3) = CA->GetZ(3);
+ CB->Rmin(3) = CA->GetRmin(3) + CthickThCyl;
+ CB->Rmax(3) = CA->GetRmax(3) - CthickThCyl;
+ CB->Z(4) = CA->GetZ(4);
+ CB->Rmin(4) = CA->GetRmin(4) + CthickThCyl;
+ CB->Rmax(4) = CA->GetRmax(4) - CthickThCyl;
+ CB->Z(5) = CA->GetZ(5);
+ CB->Rmin(5) = CA->GetRmin(5) + CthickThCyl;
+ CB->Rmax(5) = CA->GetRmax(5) - CthickThCyl;
+ //
+ printPcon(CA);
+ printPcon(CB);
+ printTube(CC);
+ TGeoVolume *CAv,*CBv,*CCv;
+ CAv = new TGeoVolume("ITSssdCentCylCA",CA,SSDcf);
+ CAv->SetVisibility(kTRUE);
+ CAv->SetLineColor(4); // blue
+ CAv->SetLineWidth(1);
+ CAv->SetFillColor(CAv->GetLineColor());
+ CAv->SetFillStyle(4010); // 10% transparent
+ CBv = new TGeoVolume("ITSssdCentCylCB",CB,SSDfs);
+ CBv->SetVisibility(kTRUE);
+ CBv->SetLineColor(2); // red
+ CBv->SetLineWidth(1);
+ CBv->SetFillColor(CBv->GetLineColor());
+ CBv->SetFillStyle(4010); // 10% transparent
+ CCv = new TGeoVolume("ITSssdCentCylCC",CC,SSDfo);
+ CCv->SetVisibility(kTRUE);
+ CCv->SetLineColor(3); // green
+ CCv->SetLineWidth(1);
+ CCv->SetFillColor(CCv->GetLineColor());
+ CCv->SetFillStyle(4010); // 10% transparent
+ CBv->AddNode(CCv,1,0);
+ CAv->AddNode(CBv,1,0);
+ Moth->AddNode(CAv,1,0);
+ if(GetDebug()){
+ CAv->PrintNodes();
+ CBv->PrintNodes();
+ CCv->PrintNodes();
+ } // end if
//
const Double_t Thickness = 13.0*kmm; // Thickness of Rohacell+carbon fiber
const Double_t Cthick = 1.5*kmm; // Carbon finber thickness
const Double_t RsddSupportPlate = 0.5*585.0*kmm;
const Double_t ThSDDsupportPlate = 4.0*kmm;
const Double_t WsddSupportPlate = 70.0*kmm;
- TGeoMedium *SSDcf = 0; // SSD support cone Carbon Fiber materal number.
- TGeoMedium *SSDfs = 0; // SSD support cone inserto stesalite 4411w.
- TGeoMedium *SSDfo = 0; // SSD support cone foam, Rohacell 50A.
- TGeoMedium *SSDss = 0; // SSD support cone screw material,Stainless steal
- TGeoMedium *SSDair = 0; // SSD support cone Air
- TGeoMedium *SSDal = 0; // SSD support cone SDD mounting bracket Al
-
+ //
// Lets start with the upper left outer carbon fiber surface.
// Between za[2],rmaxa[2] and za[4],rmaxa[4] there is a curved section
// given by rmaxa = rmaxa[2]-r*Sind(t) for 0<=t<=Tc and
TGeoPcon *A = new TGeoPcon("ITS SSD Suport cone Carbon Fiber "
"Surface outer left",phi,dphi,7);
for(i=0;i<A->GetNz();i++){
- //if(fDebug) cout<<i<<"A: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- A->DefineSection(i,z[i],rn[i],rx[i]);
+ A->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(A);
//
// Poly-cone Volume B. Stesalite inside volume A.
// Now lets define the Inserto Stesalite 4411w material volume.
TGeoPcon *B = new TGeoPcon("ITS SSD Suport cone Inserto Stesalite "
"left edge",phi,dphi,6);
for(i=0;i<B->GetNz();i++){
- //if(fDebug) cout<<i<<"B: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- B->DefineSection(i,z[i],rn[i],rx[i]);
+ B->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(B);
//
// Poly-cone Volume C. Foam inside volume A.
// Now lets define the Rohacell foam material volume.
TGeoPcon *C = new TGeoPcon("ITS SSD Suport cone Rohacell foam "
"left edge",phi,dphi,4);
for(i=0;i<C->GetNz();i++){
- //if(fDebug) cout<<i<<"C: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- C->DefineSection(i,z[i],rn[i],rx[i]);
+ C->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(C);
//
// In volume SCB, th Inserto Stesalite 4411w material volume, there
// are a number of Stainless steel screw and pin studs which will be
rn[0] = 0.0*kmm,rx[0] = 6.0*kmm,z[0] = 0.5*10.0*kmm; // mm
TGeoTube *D = new TGeoTube("ITS Screw+stud used to mount things to "
"the SSD support cone",rn[0],rx[0],z[0]);
+ printTube(D);
rn[0] = 0.0*kmm;rx[0] = 6.0*kmm;z[0] = 0.5*12.0*kmm; // mm
TGeoTube *E = new TGeoTube("ITS pin used to mount things to the "
"SSD support cone",rn[0],rx[0],z[0]);
+ printTube(E);
//
// Poly-cone Volume F. Foam in spoak reagion, inside volume A.
// There is no carbon fiber between this upper left section and the
TGeoPcon *F = new TGeoPcon("ITS SSD Top Suport cone Rohacell foam "
"Spoak",phi,dphi,4);
for(i=0;i<F->GetNz();i++){
- //if(fDebug) cout<<i<<"F: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- F->DefineSection(i,z[i],rn[i],rx[i]);
+ F->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(F);
//=================================================================
// Poly-cone Volume G.
// Now for the spoak part of the SSD cone.
TGeoPcon *G = new TGeoPcon("ITS SSD spoak carbon fiber surfaces",
phi,dphi,4);
for(i=0;i<G->GetNz();i++){
- //if(fDebug) cout<<i<<"G: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- G->DefineSection(i,z[i],rn[i],rx[i]);
+ G->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(G);
// For the foam core.
// Poly-cone Volume H.
t = Cthick/(0.5*(RholeMax+RholeMin));// It is not posible to get the
TGeoPcon *H = new TGeoPcon("ITS SSD support cone Rohacell foam Spoak",
phi,dphi,4);
for(i=0;i<H->GetNz();i++){
- //if(fDebug) cout<<i<<"H: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- H->DefineSection(i,z[i],rn[i],rx[i]);
+ H->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(H);
//
//==================================================================
// Now for the Inner most part of the SSD cone.
TGeoPcon *I = new TGeoPcon("ITS SSD lower/inner right part of SSD "
"cone",phi,dphi,9);
for(i=0;i<I->GetNz();i++){
- //if(fDebug) cout<<i<<"I: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- I->DefineSection(i,z[i],rn[i],rx[i]);
+ I->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(I);
// Now for Inserto volume at the inner most radius.
// Poly-cone Volume K.
phi = 0.0;
TGeoPcon *K = new TGeoPcon("ITS SSD inner most inserto material",
phi,dphi,6);
for(i=0;i<K->GetNz();i++){
- //if(fDebug) cout<<i<<"K: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- K->DefineSection(i,z[i],rn[i],rx[i]);
+ K->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(K);
// Now for foam core at the inner most radius.
// Poly-cone Volume J.
phi = 0.0;
rx[3] = rn[3];
TGeoPcon *J = new TGeoPcon("ITS SSD inner most foam core",phi,dphi,4);
for(i=0;i<J->GetNz();i++){
- //if(fDebug) cout<<i<<"J: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- J->DefineSection(i,z[i],rn[i],rx[i]);
+ J->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(J);
// Now for foam core at the top of the inner most radius where
// the spoaks are.
t = Cthick/(0.5*(RholeMax+RholeMin));// It is not posible to get the
TGeoPcon *L = new TGeoPcon("ITS SSD Bottom cone Rohacell foam Spoak",
phi,dphi,4);
for(i=0;i<L->GetNz();i++){
- //if(fDebug) cout<<i<<"L: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- L->DefineSection(i,z[i],rn[i],rx[i]);
+ L->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(L);
// Now for the SSD mounting posts
// Poly-cone Volume O.
dphi = 180.0*dRpost/(RpostMin+0.5*dRpost)/TMath::Pi(); //
TGeoPcon *O = new TGeoPcon("ITS SSD mounting post, carbon fiber",
phi,dphi,3);
for(i=0;i<O->GetNz();i++){
- //if(fDebug) cout<<i<<"O: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- O->DefineSection(i,z[i],rn[i],rx[i]);
+ O->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(O);
// Now for the SSD mounting posts
// Poly-cone Volume P.
t = 180.0*Cthick/(RpostMin+0.5*dRpost)/TMath::Pi();
TGeoPcon *P = new TGeoPcon("ITS SSD mounting post, Inserto",
phi,dphi,3);
for(i=0;i<P->GetNz();i++){
- //if(fDebug) cout<<i<<"P: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- P->DefineSection(i,z[i],rn[i],rx[i]);
+ P->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(P);
// This insrto continues into the SSD cone displacing the foam
// and the carbon fiber surface at those points where the posts are.
//Poly-cone Vol. M
TGeoPcon *M = new TGeoPcon("ITS SSD mounting post foam substitute, "
"Inserto",phi,dphi,4);
for(i=0;i<M->GetNz();i++){
- //if(fDebug) cout<<i<<"M: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- M->DefineSection(i,z[i],rn[i],rx[i]);
+ M->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(M);
//
//Poly-cone Vol. N
phi = P->GetPhi1();
TGeoPcon *N = new TGeoPcon("ITS SSD mounting post CF subsititute, "
"Inserto",phi,dphi,4);
for(i=0;i<N->GetNz();i++){
- //if(fDebug) cout<<i<<"N: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- N->DefineSection(i,z[i],rn[i],rx[i]);
+ N->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(N);
// Bolt heads holding the SSD-SDD tube to the SSD cone.
// Bolt -- PolyCone
//Poly-cone Volume Q.
TGeoPcon *Q = new TGeoPcon("ITS SSD Thermal sheal stainless steel "
"bolts",phi,dphi,4);
for(i=0;i<Q->GetNz();i++){
- //if(fDebug) cout<<i<<"Q: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- Q->DefineSection(i,z[i],rn[i],rx[i]);
+ Q->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(Q);
// air infront of bolt (stasolit Volume K) -- Tube
z[0] = 0.5*(ThSDDsupportPlate-Cthick);
rn[0] = 0.0*kmm;
rx[0] = R->GetRmax();
TGeoTube *S = new TGeoTube("ITS Air in front of Stainless Steal "
"Screw end, N6",rn[0],rx[0],z[0]);
+ printTube(S);
// SDD support plate, SSD side.
//Poly-cone Volume T.
- dphi = TMath::RadToDeg()*TMath::ATan2(0.5*WsddSupportPlate,RsddSupportPlate);
+ dphi = TMath::RadToDeg()*TMath::ATan2(0.5*WsddSupportPlate,
+ RsddSupportPlate);
phi = Phi0SDDsupports-0.5*dphi;
z[0] = K->GetZ(2);
rn[0] = I->GetRmin(4);
TGeoPcon *T = new TGeoPcon("ITS SSD-SDD mounting bracket Inserto->Al.",
phi,dphi,2);
for(i=0;i<T->GetNz();i++){
- //if(fDebug) cout<<i<<"T: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- T->DefineSection(i,z[i],rn[i],rx[i]);
+ T->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(T);
//
// Poly-cone Volume U.
TGeoPcon *U;
U = new TGeoPcon("ITS SSD-SDD mounting bracket CF->Al.",phi,dphi,2);
}// end if
for(i=0;i<U->GetNz();i++){
- //if(fDebug) cout<<i<<"U: z="<<z[i]<<" Rmin="<<rn[i]<<" Rmax="<<rx[i]<<endl;
- U->DefineSection(i,z[i],rn[i],rx[i]);
+ U->DefineSection(i,z[i],rn[i],rx[i]);
} // end for i
+ printPcon(U);
//
- TGeoManager *mgr = gGeoManager;
- SSDcf = mgr->GetMedium("ITSssdCarbonFiber");
- SSDfs = mgr->GetMedium("ITSssdStaselite4411w");
- SSDfo = mgr->GetMedium("ITSssdRohacell50A");
- SSDss = mgr->GetMedium("ITSssdStainlessSteal");
- SSDair= mgr->GetMedium("ITSssdAir");
- SSDal = mgr->GetMedium("ITSssdAl");
TGeoVolume *Av,*Bv,*Cv,*Dv,*Ev,*Fv,*Gv,*Hv,*Iv,*Jv,*Kv,*Lv,*Mv,*Nv,
*Ov,*Pv,*Qv,*Rv,*Sv,*Tv,*Uv;
Av = new TGeoVolume("ITSssdConeA",A,SSDcf);
Uv->SetFillStyle(4010); // 10% transparent
//
TGeoTranslation *tran = new TGeoTranslation("ITSssdConeTrans",0.0,0.0,-Z0);
- TGeoRotation *rot180 = new TGeoRotation("ITSssdConeRot180",0.0,180.0,0.0);
+ TGeoRotation *rot180 = new TGeoRotation("",0.0,180.0,0.0);
TGeoCombiTrans *flip = new TGeoCombiTrans("ITSssdConeFlip",0.0,0.0,Z0,rot180);
+ delete rot180;// rot not explicity used in AddNode functions.
TGeoTranslation *tranR,*tranS;
TGeoCombiTrans *fliptran,*rottran;
TGeoRotation *rot,*zspoaks,*zspoaks180;
zspoaks180 = new TGeoRotation("",0.0,180.0,
((Double_t)i*360.)/((Double_t)Nspoaks));
fliptran = new TGeoCombiTrans("",0.0,0.0,Z0,zspoaks180);
+ delete zspoaks180;// rot not explicity used in AddNode functions.
Moth->AddNode(Gv,Nspoaks+i+1,fliptran); // RB26 side
} // end for i
Iv->AddNode(Jv,1,0);
Ov->AddNode(Pv,1,0);
t0 = (P->GetPhi1()+0.5*P->GetDphi())*kRadian;
t = (0.25* P->GetDphi())*kRadian;
- z[0] = 0.5*(P->GetRmin(2)+P->GetRmax(2))+0.25*(P->GetRmax(2)-P->GetRmin(2));
+ z[0] = 0.5*(P->GetRmin(2)+P->GetRmax(2))+
+ 0.25*(P->GetRmax(2)-P->GetRmin(2));
x = z[0]*TMath::Cos(t0+t);
y = z[0]*TMath::Sin(t0+t);
tran = new TGeoTranslation("",x,y,P->GetZ(2)-Q->GetZ(3));
Pv->AddNode(Qv,NcQ++,tran); // Screw head
- z[0] = 0.5*(P->GetRmin(2)+P->GetRmax(2))-0.25*(P->GetRmax(2)-P->GetRmin(2));
+ z[0] = 0.5*(P->GetRmin(2)+P->GetRmax(2))-
+ 0.25*(P->GetRmax(2)-P->GetRmin(2));
x = z[0]*TMath::Cos(t0-t);
y = z[0]*TMath::Sin(t0-t);
tran = new TGeoTranslation("",x,y,P->GetZ(2)-Q->GetZ(3));
zposts180 = new TGeoRotation("",0.0,180.0,
((Double_t)i*360.)/((Double_t)Nposts));
fliptran = new TGeoCombiTrans("",0.0,0.0,Z0,zposts180);
+ delete zposts180;// rot not explicity used in AddNode functions.
Moth->AddNode(Ov,Nposts+i+1,fliptran); // RB26 side
} // end for i
//
tran= new TGeoTranslation("",RcylinderScrews*TMath::Cos(t),
RcylinderScrews*TMath::Sin(t),0.0);
Kv->AddNode(Qv,NcQ++,tran);
+ tran = new TGeoTranslation("",RcylinderScrews*TMath::Cos(t),
+ RcylinderScrews*TMath::Sin(t),
+ CB->GetZ(0)+D->GetDz());
+ CBv->AddNode(Dv,NcD++,tran);
+ tran = new TGeoTranslation("",RcylinderScrews*TMath::Cos(t),
+ RcylinderScrews*TMath::Sin(t),
+ CB->GetZ(5)-D->GetDz());
+ CBv->AddNode(Dv,NcD++,tran);
if(/*not where volumes U and T are*/kTRUE){
tranR = new TGeoTranslation("",RcylinderScrews*TMath::Cos(t),
RcylinderScrews*TMath::Sin(t),
RoutHole*TMath::Sin(t),
B->GetZ(0)+D->GetDz());
Bv->AddNode(Dv,NcD++,tran);
- //if(fDebug) cout << "D: NcD="<<NcD<<endl;
} // end or j
for(j=-Nbpins/2;j<=Nbpins/2;j++){ // pins per ITS-TPC bracket
t = t0 + 3.0*((Double_t)j)*kRadian;
RoutHole*TMath::Sin(t),
B->GetZ(0)+D->GetDz());
Bv->AddNode(Ev,NcE++,tran);
- //if(fDebug) cout << "E: NcE="<<NcE<<endl;
} // end or j
t0 = (96.5+187.*((Double_t)i))*kRadian;
for(j=0;j<Nrailsc;j++){ // screws per ITS-rail bracket
RoutHole*TMath::Sin(t),
B->GetZ(0)+D->GetDz());
Bv->AddNode(Dv,NcD++,tran);
- //if(fDebug) cout << "D2: NcD="<<NcD<<endl;
} // end or j
t0 = (91.5+184.*((Double_t)i))*kRadian;
for(j=-Nrailp/2;j<=Nrailp/2;j++)if(j!=0){ // pins per ITS-rail bracket
RoutHole*TMath::Sin(t),
B->GetZ(0)+D->GetDz());
Bv->AddNode(Ev,NcE++,tran);
- //if(fDebug) cout << "E2: NcE="<<NcE<<endl;
} // end or j
} // end for i
for(i=0;i<Nmounts;i++){ // mounting points for SPD-cone+Beam-pipe support
RoutHole*TMath::Sin(t),
B->GetZ(0)+D->GetDz());
Bv->AddNode(Dv,NcD++,tran);
- //if(fDebug) cout << "D3: NcD="<<NcD<<endl;
} // end for j
for(j=0;j<1;j++){ // 1 pin per bracket
t = t0;
RoutHole*TMath::Sin(t),
B->GetZ(0)+D->GetDz());
Bv->AddNode(Ev,NcE++,tran);
- //if(fDebug) cout << "E3: NcE="<<NcE<<endl;
} // end for j
} // end for i
t = (T->GetPhi1()+0.5*T->GetDphi())*kRadian;
rot = new TGeoRotation("",0.0,0.0,t0);
Kv->AddNode(Tv,NcT++,rot);
Iv->AddNode(Uv,NcU++,rot);
- //if(fDebug) cout << "T/U: copy number="<<i+1<<endl;
- //for(j=0;j<1;j++){ // 1 screws per bracket
- // t = t0;
- //} // end for j
for(j=0;j<2;j++)if(j!=0){ // 2 pin per bracket
t = t0 + ((Double_t)j)*0.5*DssdsddBracketAngle;
tran = new TGeoTranslation("",RinHole*TMath::Cos(t),
Kv->AddNode(Ev,NcE++,tran);
} // end for j
} // end for i
+ if(GetDebug()){
+ Av->PrintNodes();
+ Bv->PrintNodes();
+ Cv->PrintNodes();
+ Dv->PrintNodes();
+ Ev->PrintNodes();
+ Fv->PrintNodes();
+ Gv->PrintNodes();
+ Hv->PrintNodes();
+ Iv->PrintNodes();
+ Jv->PrintNodes();
+ Kv->PrintNodes();
+ Lv->PrintNodes();
+ Mv->PrintNodes();
+ Nv->PrintNodes();
+ Ov->PrintNodes();
+ Pv->PrintNodes();
+ Qv->PrintNodes();
+ Rv->PrintNodes();
+ Sv->PrintNodes();
+ Tv->PrintNodes();
+ Uv->PrintNodes();
+ } // end if
}
//______________________________________________________________________
void AliITSv11::CreateMaterials(){
new TGeoMedium("ITSssdAl",6,Al,SSDcone);
}
//______________________________________________________________________
+void AliITSv11::ServicesCableSupport(TGeoVolume *Moth){
+ // Define the detail ITS cable support trays on both the RB24 and
+ // RB26 sides..
+ // Inputs:
+ // none.
+ // Outputs:
+ // none.
+ // Return:
+ // none.
+ // Based on the Drawings SSup_201A.jpg unless otherwise stated,
+ // Volumes A...,
+ TGeoMedium *SUPcf = 0; // SUP support cone Carbon Fiber materal number.
+ TGeoMedium *SUPfs = 0; // SUP support cone inserto stesalite 4411w.
+ TGeoMedium *SUPfo = 0; // SUP support cone foam, Rohacell 50A.
+ TGeoMedium *SUPss = 0; // SUP support cone screw material,Stainless steal
+ TGeoMedium *SUPair = 0; // SUP support cone Air
+ TGeoMedium *SUPal = 0; // SUP support cone SDD mounting bracket Al
+ TGeoManager *mgr = gGeoManager;
+ SUPcf = mgr->GetMedium("ITSssdCarbonFiber");
+ SUPfs = mgr->GetMedium("ITSssdStaselite4411w");
+ SUPfo = mgr->GetMedium("ITSssdRohacell50A");
+ SUPss = mgr->GetMedium("ITSssdStainlessSteal");
+ SUPair= mgr->GetMedium("ITSssdAir");
+ SUPal = mgr->GetMedium("ITSssdAl");
+ //
+ Int_t i,j;
+ Double_t x,y,z,t,t0,dt,di,r;
+
+ // RB 24 side
+ const Double_t Z024 = 900*kmm;//SSup_203A.jpg
+ const Double_t ThssFrame24 = 5.0*kmm;
+ const Double_t RssFrame24 = 444.0*kmm-ThssFrame24; // SSup_204A.jpg
+ const Double_t WidthFrame24 = 10.0*kmm;
+ const Double_t HightFrame24 = 10.0*kmm;
+ const Double_t Phi0Frame24 = 15.2*kDegree; // SSup_602A.jpg
+ const Double_t Phi1Frame24 = (90.0-7.6)*kDegree; // SSup_802A.jpg
+ const Double_t ZssFrameSection24 = (415.0-10.0)*kmm;
+ const Int_t NZsections24 = 4;
+ const Int_t NPhiSections24 = 4;
+ const Int_t NFramesPhi24 = 4;
+ TGeoTubeSeg *A24,*M24; // Cylinderial support structure
+ TGeoBBox *B24; // Cylinderial support structure
+
+ M24 = new TGeoTubeSeg("ITS sup Cable tray support frame mother volume M24",
+ RssFrame24,RssFrame24+ThssFrame24,
+ 0.5*(4.*ZssFrameSection24+5*WidthFrame24),
+ Phi0Frame24,Phi1Frame24);
+ A24 = new TGeoTubeSeg("ITS sup Cable tray support frame radial section A24",
+ RssFrame24,RssFrame24+ThssFrame24,0.5*WidthFrame24,
+ Phi0Frame24,Phi1Frame24);
+ B24 = new TGeoBBox("ITS sup Cable tray support frame Z section B24",
+ 0.5*ThssFrame24,0.5*HightFrame24,0.5*ZssFrameSection24);
+ printTubeSeg(A24);
+ printTubeSeg(M24);
+ printBBox(B24);
+ TGeoVolume *A24v,*B24v,*M24v;
+ TGeoTranslation *tran;
+ TGeoRotation *rot;
+ TGeoCombiTrans *tranrot;
+ //
+ A24v = new TGeoVolume("ITSsupFrameA24",A24,SUPss);
+ A24v->SetVisibility(kTRUE);
+ A24v->SetLineColor(1); // black
+ A24v->SetLineWidth(1);
+ A24v->SetFillColor(A24v->GetLineColor());
+ A24v->SetFillStyle(4000); // 0% transparent
+ B24v = new TGeoVolume("ITSsupFrameB24",B24,SUPss);
+ B24v->SetVisibility(kTRUE);
+ B24v->SetLineColor(1); // black
+ B24v->SetLineWidth(1);
+ B24v->SetFillColor(B24v->GetLineColor());
+ B24v->SetFillStyle(4000); // 0% transparent
+ M24v = new TGeoVolume("ITSsupFrameM24",M24,SUPair);
+ M24v->SetVisibility(kTRUE);
+ M24v->SetLineColor(7); // light blue
+ M24v->SetLineWidth(1);
+ M24v->SetFillColor(M24v->GetLineColor());
+ M24v->SetFillStyle(4090); // 90% transparent
+ //
+ Int_t NcA24=1,NcB24=1;
+ t0 = Phi0Frame24;
+ dt = (Phi1Frame24-Phi0Frame24)/((Double_t)NPhiSections24);
+ for(i=0;i<=NZsections24;i++){
+ di = (Double_t) i;
+ z = -M24->GetDz()+A24->GetDz() + di*(ZssFrameSection24+WidthFrame24);
+ tran = new TGeoTranslation("",0.0,0.0,z);
+ M24v->AddNode(A24v,NcA24++,tran);
+ r = RssFrame24+B24->GetDX();
+ z = z + A24->GetDz()+B24->GetDZ();
+ if(i<NZsections24) for(j=0;j<=NPhiSections24;j++){
+ t = t0 + ((Double_t)j)*dt;
+ rot = new TGeoRotation("",0.0,0.0,t);
+ y = r*TMath::Sin(t*kRadian);
+ x = r*TMath::Cos(t*kRadian);
+ tranrot = new TGeoCombiTrans("",x,y,z,rot);
+ delete rot;// rot not explicity used in AddNode functions.
+ M24v->AddNode(B24v,NcB24++,tranrot);
+ } // end for j
+ } // end for i
+ tran = new TGeoTranslation("",0.0,0.0,Z024+M24->GetDz());
+ Moth->AddNode(M24v,1,tran);
+ for(i=1;i<NFramesPhi24;i++){
+ di = (Double_t) i;
+ rot = new TGeoRotation("",0.0,0.0,90.0*di);
+ tranrot = new TGeoCombiTrans("",0.0,0.0,Z024+M24->GetDz(),rot);
+ delete rot;// rot not explicity used in AddNode functions.
+ Moth->AddNode(M24v,i+1,tranrot);
+ } // end for i
+ if(GetDebug()){
+ A24v->PrintNodes();
+ B24v->PrintNodes();
+ M24v->PrintNodes();
+ } // end if
+ //
+ // RB 26 side
+ const Double_t Z026 = -900*kmm;//SSup_203A.jpg
+ const Double_t ThssFrame26 = 5.0*kmm;
+ const Double_t R0ssFrame26 = 444.5*kmm-ThssFrame26; // SSup_204A.jpg
+ const Double_t R1ssFrame26 = 601.6*kmm-ThssFrame26; // SSup_208A.jpg
+ const Double_t WidthFrame26 = 10.0*kmm;
+ //const Double_t HightFrame26 = 10.0*kmm;
+ const Double_t Phi0Frame26 = 15.2*kDegree; // SSup_602A.jpg
+ const Double_t Phi1Frame26 = (90.0-7.6)*kDegree; // SSup_802A.jpg
+ const Double_t ZssFrameSection26 = (415.0-10.0)*kmm;
+ const Int_t NZsections26 = 4;
+ const Int_t NPhiSections26 = 4;
+ const Int_t NFramesPhi26 = 4;
+ TGeoConeSeg *A26[NZsections26+1],*M26; // Cylinderial support structure
+ TGeoArb8 *B26; // Cylinderial support structure
+ Char_t name[100];
+ Double_t r1,r2,m;
+
+ M26 = new TGeoConeSeg("ITS sup Cable tray support frame mother volume M26",
+ 0.5*(4.*ZssFrameSection26+5*WidthFrame26),
+ R1ssFrame26,R1ssFrame26+ThssFrame26,
+ R0ssFrame26,R0ssFrame26+ThssFrame26,
+ Phi0Frame26,Phi1Frame26);
+ m = -((R1ssFrame26-R0ssFrame26)/
+ (((Double_t)NZsections26)*(ZssFrameSection26+WidthFrame26)));
+ for(i=0;i<NZsections26+1;i++){
+ di = ((Double_t) i)*(ZssFrameSection26+WidthFrame26);
+ sprintf(name,
+ "ITS sup Cable tray support frame radial section A26[%d]",i);
+ r1 = R1ssFrame26+m*di;
+ r2 = R1ssFrame26+m*(di+WidthFrame26);
+ A26[i] = new TGeoConeSeg(name,0.5*WidthFrame26,r2,r2+ThssFrame26,
+ r1,r1+ThssFrame26,Phi0Frame26,Phi1Frame26);
+ } // end for i
+ B26 = new TGeoArb8("ITS sup Cable tray support frame Z section B26",
+ 0.5*ZssFrameSection26);
+ r = 0.25*(A26[0]->GetRmax1()+A26[0]->GetRmin1()+
+ A26[1]->GetRmax2()+A26[1]->GetRmin2());
+ B26->SetVertex(0,A26[0]->GetRmax2()-r,+0.5*WidthFrame26);
+ B26->SetVertex(1,A26[0]->GetRmax2()-r,-0.5*WidthFrame26);
+ B26->SetVertex(2,A26[0]->GetRmin2()-r,-0.5*WidthFrame26);
+ B26->SetVertex(3,A26[0]->GetRmin2()-r,+0.5*WidthFrame26);
+ B26->SetVertex(4,A26[1]->GetRmax1()-r,+0.5*WidthFrame26);
+ B26->SetVertex(5,A26[1]->GetRmax1()-r,-0.5*WidthFrame26);
+ B26->SetVertex(6,A26[1]->GetRmin1()-r,-0.5*WidthFrame26);
+ B26->SetVertex(7,A26[1]->GetRmin1()-r,+0.5*WidthFrame26);
+ for(i=0;i<NZsections26+1;i++) printConeSeg(A26[i]);
+ printConeSeg(M26);
+ printArb8(B26);
+ TGeoVolume *A26v[NZsections26+1],*B26v,*M26v;
+ //
+ for(i=0;i<NZsections26+1;i++){
+ sprintf(name,"ITSsupFrameA26[%d]",i);
+ A26v[i] = new TGeoVolume(name,A26[i],SUPss);
+ A26v[i]->SetVisibility(kTRUE);
+ A26v[i]->SetLineColor(1); // black
+ A26v[i]->SetLineWidth(1);
+ A26v[i]->SetFillColor(A26v[i]->GetLineColor());
+ A26v[i]->SetFillStyle(4000); // 0% transparent
+ } // end for i
+ B26v = new TGeoVolume("ITSsupFrameB26",B26,SUPss);
+ B26v->SetVisibility(kTRUE);
+ B26v->SetLineColor(1); // black
+ B26v->SetLineWidth(1);
+ B26v->SetFillColor(B26v->GetLineColor());
+ B26v->SetFillStyle(4000); // 0% transparent
+ M26v = new TGeoVolume("ITSsupFrameM26",M26,SUPair);
+ M26v->SetVisibility(kTRUE);
+ M26v->SetLineColor(7); // light blue
+ M26v->SetLineWidth(1);
+ M26v->SetFillColor(M26v->GetLineColor());
+ M26v->SetFillStyle(4090); // 90% transparent
+ //
+ Int_t NcB26=1;
+ t0 = Phi0Frame26;
+ dt = (Phi1Frame26-Phi0Frame26)/((Double_t)NPhiSections26);
+ for(i=0;i<=NZsections26;i++){
+ di = ((Double_t) i)*(ZssFrameSection26+WidthFrame26);
+ z = -M26->GetDz()+A26[i]->GetDz() + di;
+ tran = new TGeoTranslation("",0.0,0.0,z);
+ M26v->AddNode(A26v[i],1,tran);
+ z = z+B26->GetDz();
+ if(i<NZsections26)for(j=0;j<=NPhiSections26;j++){
+ r = 0.25*(A26[i]->GetRmax1()+A26[i]->GetRmin1()+
+ A26[i+1]->GetRmax2()+A26[i+1]->GetRmin2());
+ t = t0 + ((Double_t)j)*dt;
+ rot = new TGeoRotation("",0.0,0.0,t);
+ y = r*TMath::Sin(t*kRadian);
+ x = r*TMath::Cos(t*kRadian);
+ tranrot = new TGeoCombiTrans("",x,y,z,rot);
+ delete rot; // rot not explicity used in AddNode functions.
+ M26v->AddNode(B26v,NcB26++,tranrot);
+ } // end for j
+ } // end for i
+ tran = new TGeoTranslation("",0.0,0.0,Z026-M26->GetDz());
+ Moth->AddNode(M26v,1,tran);
+ for(i=1;i<NFramesPhi26;i++){
+ rot = new TGeoRotation("",0.0,0.0,90.0*((Double_t)i));
+ tranrot = new TGeoCombiTrans(*tran,*rot);
+ delete rot; // rot not explicity used in AddNode functions.
+ Moth->AddNode(M26v,i+1,tranrot);
+ } // end for i
+ if(GetDebug()){
+ for(i=0;i<NZsections26+1;i++) A26v[i]->PrintNodes();
+ B26v->PrintNodes();
+ M26v->PrintNodes();
+ } // end if
+}
+//______________________________________________________________________
void AliITSv11::InitAliITSgeom(){
// Based on the geometry tree defined in Geant 3.21, this
// routine initilizes the Class AliITSgeom from the Geant 3.21 ITS
-void SetViewVolumes(const char* opt){
- //
- if(!strstr(opt,"all")) return;
- //
-}
//----------------------------------------------------------------------
void Displayv11(const char* filename=""){
// Display AliITSv11 Geometry
// Retrurn:
// none.
- Displayit();
-}
-//----------------------------------------------------------------------
-void Displayit(){
- // Display AliITSv11 Geometry
- // Inputs:
- // const char* filename output file with the display in it
- // Outputs:
- // none.
- // Retrurn:
- // none.
-
gSystem->Load("libGeom");
//
- TCanvas *c1 = new TCanvas("C1","ITS Simulation Geometry",900,900);
- c1->Divide(2,2);
- //
if(gGeoManager) delete gGeoManager;
- TGeoManager *mgr2 = gGeoManager = new TGeoManager("ITSGeometry",
- " ITS Simulation Geometry Manager");
+ mgr2 = gGeoManager = new TGeoManager("ITSGeometry",
+ " ITS Simulation Geometry Manager");
//
TGeoMaterial *vacmat = new TGeoMaterial("Vacume",0,0,0);
TGeoMedium *vacmed = new TGeoMedium("Vacume_med",1,vacmat);
mgr2->SetTopVolume(ALIC);
//
AliITSv11 *its = new AliITSv11();
- its->SetDebug(1);
+ its->SetDebug(ISetits(0,-1));
its->CreateMaterials();
its->CreateGeometry();
- //SetViewVolumes("all");
//
mgr2->CloseGeometry();
- mgr2->SetNsegments(80);
+ //
+ TControlBar *bar=new TControlBar("vertical","ITS Geometry Display",10,10);
+ bar->AddButton("Set ITS Debug level 1","ISetits(0,1)","Debug on");
+ bar->AddButton("Set ITS Debug level 0","ISetits(0,0)","Debug off");
+ bar->AddButton("Set ITS Theta,Phi cut on","ISetits(2,1)","Cut on");
+ bar->AddButton("Set ITS Theta,Phi cut off","ISetits(2,0)","Cut off");
+ bar->AddButton("Set axis on","ISetits(3,1)","Show Axis on");
+ bar->AddButton("Set axis off","ISetits(3,0)","Show Axis off");
+ bar->AddButton("Set perspective on","ISetits(4,1)","Perspective on");
+ bar->AddButton("Set perspective off","ISetits(4,0)","Perspective off");
+ bar->AddButton("Set circle/80","ISetits(1,80)","circles ~ by 80 lines");
+ bar->AddButton("Display Geometry","Displayit()","Run Displayit");
+ bar->AddButton("Display SDD Cone","EngineeringSDDCone()",
+ "Run EngineeringSDDCone");
+ bar->AddButton("Display SDD Centeral Cylinder","EngineeringSDDCylinder()",
+ "Run EngineeringSDDCylinder");
+ bar->AddButton("Display SUP RB24 side","EngineeringSupRB24()",
+ "Run EngineeringSDDCylinder");
+ bar->AddButton("Display SUP RB26 side","EngineeringSupRB26()",
+ "Run EngineeringSupRB26");
+ bar->AddButton("Quit/Exit",".q","Exit");
+ bar->Show();
+ gROOT->SaveContext();
+ //Displayit();
+}
+//----------------------------------------------------------------------
+Int_t ISetits(Int_t t,Int_t v){
+ static Int_t itsdebug=0,nsegments=80,cut=0,axis=1,perspective=0;
+
+ switch (t) {
+ case 0:
+ if(v<0) return itsdebug;
+ itsdebug = v;
+ break;
+ case 1:
+ if(v<0) return nsegments;
+ nsegments= v;
+ break;
+ case 2:
+ if(v<0) return cut;
+ cut = v;
+ break;
+ case 3:
+ if(v<0) return axis;
+ axis = v;
+ break;
+ case 4:
+ if(v<0) return perspective;
+ perspective = v;
+ break;
+ }// end switch
+ return 0;
+}
+//----------------------------------------------------------------------
+Double_t DSetits(Int_t t,Double_t v){
+ static Double_t phimincut=0.0,phimaxcut=180.0;
+ static Double_t longitude=90.0,latitude=0.0,psi=0.0;
+
+ switch (t) {
+ case 0:
+ if(v<0.) return phimincut;
+ phimincut = v;
+ break;
+ case 1:
+ if(v<0.) return phimaxcut;
+ phimaxcut = v;
+ break;
+ case 2:
+ if(v<0.) return longitude;
+ longitude = v;
+ break;
+ case 3:
+ if(v<0.) return latitude;
+ latitude = v;
+ break;
+ case 4:
+ if(v<0.) return latitude;
+ latitude = v;
+ break;
+ }// end switch
+ return 0;
+}
+//----------------------------------------------------------------------
+void Displayit(){
+ // Display AliITSv11 Geometry
+ // Inputs:
+ // const char* filename output file with the display in it
+ // Outputs:
+ // none.
+ // Retrurn:
+ // none.
+ Int_t irr;
+ //
+ TGeoManager *mgr2 = gGeoManager;
+ TGeoVolume *ALIC = mgr2->GetTopVolume();
+ TCanvas *c1;
+ if(!(c1 = (TCanvas*)gROOT->FindObject("C1")))
+ c1 = new TCanvas("C1","ITS Simulation Geometry",900,900);
+ c1->Divide(2,2);
+ //
+ mgr2->SetNsegments(ISetits(1,-1));
//
mgr2->SetVisLevel(6);
mgr2->SetVisOption(0);
//mgr2->CheckOverlaps(0.01);
//mgr2->PrintOverlaps();
- //mgr2->SetPhiRange(0.0,180.0);
+ if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
//
c1->cd(1);
ALIC->Draw();
TPad *p1 = c1->GetPad(1);
TView *view1 = p1->GetView();
if(view1){
- view1->SetParralel();
+ view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view1->SetParralel();
+ else view1->SetPerspective();
view1->Front();
- view1->ShowAxis();
- } // end if view2
+ if(ISetits(3,-1)!=0) view1->ShowAxis();
+ } // end if view1
c1->cd(2);
ALIC->Draw();
TPad *p2 = c1->GetPad(2);
TView *view2 = p2->GetView();
if(view2){
- view2->SetParralel();
+ view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view2->SetParralel();
+ else view2->SetPerspective();
view2->RotateView(60.,30.);
- view2->ShowAxis();
+ if(ISetits(3,-1)!=0) view2->ShowAxis();
} // end if view2
c1->cd(3);
- c1->SetPhi(90.0); c1->SetTheta(90.0);
ALIC->Draw();
+ c1->SetPhi(90.0); c1->SetTheta(90.0);
TPad *p3 = c1->GetPad(3);
TView *view3 = p3->GetView();
if(view3){
- view3->SetParralel();
+ view3->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view3->SetParralel();
+ else view3->SetPerspective();
view3->Top();
- view3->ShowAxis();
+ if(ISetits(3,-1)!=0) view3->ShowAxis();
} // end if view3
c1->cd(4);
ALIC->Draw();
TPad *p4 = c1->GetPad(4);
TView *view4 = p4->GetView();
if(view4){
- view4->SetParralel();
+ view4->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view4->SetParralel();
+ else view4->SetPerspective();
view4->Side();
- view4->ShowAxis();
+ if(ISetits(3,-1)!=0) view4->ShowAxis();
} // end if view4
//
}
+//----------------------------------------------------------------------
+void EngineeringSDDCone(){
+ // Display SDD Cone Geometry
+ // Inputs:
+ // none.
+ // Outputs:
+ // none.
+ // Retrurn:
+ // none.
+ Int_t irr;
+ //
+ TGeoManager *mgr2 = gGeoManager;
+ TGeoVolume *ALIC = mgr2->GetTopVolume();
+ TCanvas *c2;
+ if(!(c2 = (TCanvas*)gROOT->FindObject("C2")))
+ c2 = new TCanvas("C2","ITS SDD Cone Geometry",900,450);
+ c2->Divide(2,1);
+ TGeoVolume *ITS,*SDD=0;
+ TGeoNode *node;
+ //
+ node = ALIC->FindNode("ITSV_1");
+ ITS = node->GetVolume();
+ node = ITS->FindNode("ITSsddConeL_1");
+ SDD = node->GetVolume();
+ //
+ mgr2->SetNsegments(ISetits(1,-1));
+ //
+ mgr2->SetVisLevel(6);
+ mgr2->SetVisOption(0);
+ //mgr2->CheckOverlaps(0.01);
+ //mgr2->PrintOverlaps();
+ mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
+ if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
+ //
+ c2->cd(1);
+ SDD->Draw();
+ TPad *p1 = c2->GetPad(1);
+ TView *view1 = p1->GetView();
+ if(view1){
+ view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view1->SetParralel();
+ else view1->SetPerspective();
+ view1->Front();
+ if(ISetits(3,-1)!=0) view1->ShowAxis();
+ } // end if view1
+ //
+ c2->cd(2);
+ SDD->Draw();
+ TPad *p2 = c2->GetPad(2);
+ TView *view2 = p2->GetView();
+ if(view2){
+ view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view2->SetParralel();
+ else view2->SetPerspective();
+ view2->Top();
+ if(ISetits(3,-1)!=0) view2->ShowAxis();
+ } // end if view1
+ //
+}
+//----------------------------------------------------------------------
+void EngineeringSDDCylinder(){
+ // Display SDD Cylinder Geometry
+ // Inputs:
+ // none.
+ // Outputs:
+ // none.
+ // Retrurn:
+ // none.
+ Int_t irr;
+ //
+ TGeoManager *mgr2 = gGeoManager;
+ TGeoVolume *ALIC = mgr2->GetTopVolume();
+ TCanvas *c3;
+ if(!(c3 = (TCanvas*)gROOT->FindObject("C3")))
+ c3 = new TCanvas("C3","ITS SDD Cylinder Geometry",900,450);
+ c3->Divide(2,1);
+ TGeoVolume *ITS,*SDD=0;
+ TGeoNode *node;
+ TArrow *arrow=new TArrow();
+ //
+ node = ALIC->FindNode("ITSV_1");
+ ITS = node->GetVolume();
+ node = ITS->FindNode("ITSsddCentCylCF_1");
+ SDD = node->GetVolume();
+ Double_t Rmin = ((TGeoTube*)(SDD->GetShape()))->GetRmin();
+ Double_t Rmax = ((TGeoTube*)(SDD->GetShape()))->GetRmax();
+ Double_t Dz = ((TGeoTube*)(SDD->GetShape()))->GetDz();
+ //
+ mgr2->SetNsegments(ISetits(1,-1));
+ //
+ mgr2->SetVisLevel(6);
+ mgr2->SetVisOption(0);
+ //mgr2->CheckOverlaps(0.01);
+ //mgr2->PrintOverlaps();
+ mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
+ if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
+ //
+ c3->cd(1);
+ SDD->Draw();
+ TPad *p1 = c3->GetPad(1);
+ TView *view1 = p1->GetView();
+ if(view1){
+ view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view1->SetParralel();
+ else view1->SetPerspective();
+ view1->Front();
+ if(ISetits(3,-1)!=0) view1->ShowAxis();
+ } // end if view1
+ arrow->DrawArrow(1.01*Rmax,-Dz,1.01*Rmax,+Dz);
+ //
+ c3->cd(2);
+ SDD->Draw();
+ TPad *p2 = c3->GetPad(2);
+ TView *view2 = p2->GetView();
+ if(view2){
+ view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view2->SetParralel();
+ else view2->SetPerspective();
+ view2->Top();
+ if(ISetits(3,-1)!=0) view2->ShowAxis();
+ } // end if view2
+ arrow->DrawArrow(Rmax,0.0,Rmax,0.0);
+ Double_t s = TMath::Sin(0.7),c = TMath::Cos(0.7);
+ arrow->DrawArrow(-Rmin*c,-Rmin*s,Rmin*c,Rmin*s);
+ //
+}
+//----------------------------------------------------------------------
+void EngineeringSupRB24(){
+ // Display SDD Cylinder Geometry
+ // Inputs:
+ // none.
+ // Outputs:
+ // none.
+ // Retrurn:
+ // none.
+ Int_t irr;
+ //
+ TGeoManager *mgr2 = gGeoManager;
+ TGeoVolume *ALIC = mgr2->GetTopVolume();
+ TCanvas *c4;
+ if(!(c4 = (TCanvas*)gROOT->FindObject("C4")))
+ c4 = new TCanvas("C4","ITS SDD Cylinder Geometry",900,450);
+ c4->Divide(2,1);
+ TGeoVolume *ITS,*SUPRB24=0;
+ TGeoNode *node;
+ TArrow *arrow=new TArrow();
+ //
+ node = ALIC->FindNode("ITSV_1");
+ ITS = node->GetVolume();
+ node = ITS->FindNode("ITSsupFrameM24_1");
+ SUPRB24 = node->GetVolume();
+ //
+ mgr2->SetNsegments(ISetits(1,-1));
+ //
+ mgr2->SetVisLevel(6);
+ mgr2->SetVisOption(0);
+ //mgr2->CheckOverlaps(0.01);
+ //mgr2->PrintOverlaps();
+ mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
+ if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
+ //
+ c4->cd(1);
+ SUPRB24->Draw();
+ TPad *p1 = c4->GetPad(1);
+ TView *view1 = p1->GetView();
+ if(view1){
+ view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view1->SetParralel();
+ else view1->SetPerspective();
+ view1->Front();
+ if(ISetits(3,-1)!=0) view1->ShowAxis();
+ } // end if view1
+ //
+ c4->cd(2);
+ SUPRB24->Draw();
+ TPad *p2 = c4->GetPad(2);
+ TView *view2 = p2->GetView();
+ if(view2){
+ view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view2->SetParralel();
+ else view2->SetPerspective();
+ view2->Top();
+ if(ISetits(3,-1)!=0) view2->ShowAxis();
+ } // end if view2
+ //
+}
+
+//----------------------------------------------------------------------
+void EngineeringSupRB26(){
+ // Display SDD Cylinder Geometry
+ // Inputs:
+ // none.
+ // Outputs:
+ // none.
+ // Retrurn:
+ // none.
+ Int_t irr;
+ //
+ TGeoManager *mgr2 = gGeoManager;
+ TGeoVolume *ALIC = mgr2->GetTopVolume();
+ TCanvas *c5;
+ if(!(c5 = (TCanvas*)gROOT->FindObject("C5")))
+ c5 = new TCanvas("C5","ITS SDD Cylinder Geometry",900,450);
+ c5->Divide(2,1);
+ TGeoVolume *ITS,*SUPRB26=0;
+ TGeoNode *node;
+ TArrow *arrow=new TArrow();
+ //
+ node = ALIC->FindNode("ITSV_1");
+ ITS = node->GetVolume();
+ node = ITS->FindNode("ITSsupFrameM26_1");
+ SUPRB26 = node->GetVolume();
+ //
+ mgr2->SetNsegments(ISetits(1,-1));
+ //
+ mgr2->SetVisLevel(6);
+ mgr2->SetVisOption(0);
+ //mgr2->CheckOverlaps(0.01);
+ //mgr2->PrintOverlaps();
+ mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
+ if(ISetits(2,-1)!=0) mgr2->SetPhiRange(DSetits(1,-1.),DSetits(0,-1.));
+ //
+ c5->cd(1);
+ SUPRB26->Draw();
+ TPad *p1 = c5->GetPad(1);
+ TView *view1 = p1->GetView();
+ if(view1){
+ view1->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view1->SetParralel();
+ else view1->SetPerspective();
+ view1->Front();
+ if(ISetits(3,-1)!=0) view1->ShowAxis();
+ } // end if view1
+ //
+ c5->cd(2);
+ SUPRB26->Draw();
+ TPad *p2 = c5->GetPad(2);
+ TView *view2 = p2->GetView();
+ if(view2){
+ view2->SetView(DSetits(2,-1.),DSetits(3,-1.),DSetits(4,-1.),irr);
+ if(irr) cout <<"error="<<irr<<endl;
+ if(ISetits(4,-1)==0) view2->SetParralel();
+ else view2->SetPerspective();
+ view2->Top();
+ if(ISetits(3,-1)!=0) view2->ShowAxis();
+ } // end if view2
+ //
+}