]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HMPID/Hgeom.C
ANALYSIS lib is added
[u/mrichter/AliRoot.git] / HMPID / Hgeom.C
CommitLineData
fe88cf1b 1
fe88cf1b 2TGeoManager *g=0;
3
c5c19d6a 4void Hgeom(Bool_t isOnlyChambers=kFALSE)
fe88cf1b 5{
6
df9bc77c 7 g=new TGeoManager("TestHMPID","Private HMPID geometry");
fe88cf1b 8 Materials();
df9bc77c 9 gGeoManager->MakeBox("ALIC",gGeoManager->GetMedium("HMPID_CH4"),3000/2,3000/2,3000/2); //arbitrary values
fe88cf1b 10 gGeoManager->SetTopVolume(gGeoManager->GetVolume("ALIC"));
11
c5c19d6a 12 Hmpid(isOnlyChambers);
fe88cf1b 13
14 gGeoManager->CloseGeometry();
15
df9bc77c 16// gGeoManager->SetVisOption(0); gGeoManager->SetVisLevel(5);
fe88cf1b 17
df9bc77c 18// gGeoManager->GetMasterVolume()->Draw();
19// Axis();
fe88cf1b 20// gPad->GetView()->SetView(3,94,-70,0);
21 new TBrowser;
22}
23//__________________________________________________________________________________________________
24void Materials()
25{
26//Media for HMPID
27 Double_t a=0,z=0,den=0,radlen=0,intlen=0;//tmp vars for material parameters
df9bc77c 28 // A Z rho
29 TGeoMaterial *ar,*al,*cu,*w,*ro; TGeoMixture *c6f14,*sio2,*ch4,*csi;
30 al =new TGeoMaterial("HMPID_Al" , 26.982 , 13 , 2.700);
31 ro =new TGeoMaterial("HMPID_Neoc" , 12.01 , 6 , 0.1 );
32 cu =new TGeoMaterial("HMPID_Cu" , 63.546 , 29 , 8.960);
33 w =new TGeoMaterial("HMPID_W" , 183.840 , 74 , 19.300);
34 ar =new TGeoMaterial("HMPID_Ar" , 39.948 , 18 , 1.396);
35 c6f14=new TGeoMixture ("HMPID_C6F14",2,1.68 );c6f14->DefineElement(0, 12.010, 6,6); c6f14->DefineElement(1, 18.998, 9,14);
36 sio2 =new TGeoMixture ("HMPID_SiO2" ,2,2.20 );sio2 ->DefineElement(0, 28.085,14,1); sio2->DefineElement(1, 15.999, 8, 2);
37 ch4 =new TGeoMixture ("HMPID_CH4" ,2,0.4224e-3);ch4 ->DefineElement(0, 12.010, 6,1); ch4->DefineElement(1, 1.007, 1, 4);
38 csi =new TGeoMixture ("HMPID_CsI" ,2,1.8 );csi ->DefineElement(0,132.900,55,1); csi->DefineElement(1,126.900,53, 1);
39
40 new TGeoMedium("HMPID_Al" ,1,al);
41 new TGeoMedium("HMPID_Neoc" ,2,ro);
42 new TGeoMedium("HMPID_Cu" ,3,cu);
43 new TGeoMedium("HMPID_W" ,4,w );
44 new TGeoMedium("HMPID_C6F14",6,c6f14);
45 new TGeoMedium("HMPID_SiO2" ,7,sio2);
46 new TGeoMedium("HMPID_CH4" ,8,ch4);
47 new TGeoMedium("HMPID_CsI" ,9,csi);
48 new TGeoMedium("HMPID_Ar" ,1,ar);
49
fe88cf1b 50}//Materials()
51//__________________________________________________________________________________________________
c5c19d6a 52void Hmpid(Bool_t isOnlyChambers)
fe88cf1b 53{
df9bc77c 54 Double_t cm=1,mm=0.1*cm,um=0.0001*cm;//length units
55 TGeoMedium *al =gGeoManager->GetMedium("HMPID_Al");
56 TGeoMedium *ch4 =gGeoManager->GetMedium("HMPID_CH4");
57 TGeoMedium *roha =gGeoManager->GetMedium("HMPID_Rohacell");
58 TGeoMedium *neoc =gGeoManager->GetMedium("HMPID_Neoceram");
59 TGeoMedium *c6f14=gGeoManager->GetMedium("HMPID_C6F14");
60 TGeoMedium *sio2 =gGeoManager->GetMedium("HMPID_SiO2");
61 TGeoMedium *cu =gGeoManager->GetMedium("HMPID_Cu");
62 TGeoMedium *w =gGeoManager->GetMedium("HMPID_W");
63 TGeoMedium *csi =gGeoManager->GetMedium("HMPID_CsI");
64 TGeoMedium *ar =gGeoManager->GetMedium("HMPID_Ar");
65
66 TGeoVolume *hmp=gGeoManager->MakeBox ("Hmp",ch4,1681*mm/2, 1466*mm/2,(2*80*mm+2*41*mm)/2);//2033P1 z from p84 TDR
fe88cf1b 67 const Double_t kAngHor=19.5; // horizontal angle between chambers 19.5 grad
68 const Double_t kAngVer=20; // vertical angle between chambers 20 grad
df9bc77c 69 const Double_t kAngCom=30; // common HMPID rotation around z 30 grad
70 const Double_t trans[3]={490*cm,0*cm,0*cm}; //center of the chamber is on window- proximity gap surface
71 for(Int_t ch=0;ch<=6;ch++){//place 7 chambers
72 TGeoHMatrix *mat=new TGeoHMatrix;
73 mat->RotateY(90); //rotate around y since initial position is in XY plane -> now in YZ plane
74 mat->SetTranslation(trans); //now plane in YZ is shifted along x
75 switch(ch){
76 case 0: mat->RotateY(kAngHor); mat->RotateZ(-kAngVer); break; //right and down
77 case 1: mat->RotateZ(-kAngVer); break; //down
78 case 2: mat->RotateY(kAngHor); break; //right
79 case 3: break; //no rotation
80 case 4: mat->RotateY(-kAngHor); break; //left
81 case 5: mat->RotateZ(kAngVer); break; //up
82 case 6: mat->RotateY(-kAngHor); mat->RotateZ(kAngVer); break; //left and up
fe88cf1b 83 }
df9bc77c 84 mat->RotateZ(kAngCom); //apply common rotation in XY plane
85 gGeoManager->GetVolume("ALIC")->AddNode(hmp,ch,mat);
fe88cf1b 86 }
87 if(isOnlyChambers) return; //do not construct the detailed geometry
fe88cf1b 88
df9bc77c 89 TGeoRotation *rot=new TGeoRotation("HwireRot"); rot->RotateY(90); //rotate wires around Y to be along X (initially along Z)
90 TGeoVolume *sbo=gGeoManager->MakeBox ("Hsbo",ch4 , 1419*mm/2 , 1378.00*mm/2 , 50.5*mm/2);//2072P1
91 TGeoVolume *cov=gGeoManager->MakeBox ("Hcov",al , 1419*mm/2 , 1378.00*mm/2 , 0.5*mm/2);
92 TGeoVolume *hon=gGeoManager->MakeBox ("Hhon",roha , 1359*mm/2 , 1318.00*mm/2 , 49.5*mm/2);
93 TGeoVolume *rad=gGeoManager->MakeBox ("Hrad",c6f14, 1330*mm/2 , 413.00*mm/2 , 24.0*mm/2); //2011P1
94 TGeoVolume *neo=gGeoManager->MakeBox ("Hneo",neoc , 1330*mm/2 , 413.00*mm/2 , 4.0*mm/2);
95 TGeoVolume *win=gGeoManager->MakeBox ("Hwin",sio2 , 1330*mm/2 , 413.00*mm/2 , 5.0*mm/2);
96 TGeoVolume *si1=gGeoManager->MakeBox ("Hsi1",sio2 , 1330*mm/2 , 5.00*mm/2 , 15.0*mm/2);
97 TGeoVolume *si2=gGeoManager->MakeBox ("Hsi2",neoc , 10*mm/2 , 403.00*mm/2 , 15.0*mm/2);
98 TGeoVolume *spa=gGeoManager->MakeTube("Hspa",sio2 , 0*mm , 5.00*mm , 15.0*mm/2);
99 TGeoVolume *fr4=gGeoManager->MakeBox ("Hfr4",ch4 , 1407*mm/2 , 1366.00*mm/2 , 15.0*mm/2);//2043P1
100 TGeoVolume *f4a=gGeoManager->MakeBox ("Hf4a",al , 1407*mm/2 , 1366.00*mm/2 , 10.0*mm/2);
101 TGeoVolume *f4i=gGeoManager->MakeBox ("Hf4i",ch4 , 1323*mm/2 , 1296.00*mm/2 , 10.0*mm/2);
102 TGeoVolume *col=gGeoManager->MakeTube("Hcol",cu , 0*mm , 100.00*um , 1323.0*mm/2);
103 TGeoVolume *sec=gGeoManager->MakeBox ("Hsec",ch4 , 648*mm/2 , 411.00*mm/2 , 45.5*mm/2);//sec=gap+ppf
104 TGeoVolume *ppf=gGeoManager->MakeBox ("Hppf",al , 648*mm/2 , 411.00*mm/2 , 40.0*mm/2);//2001P2
105 TGeoVolume *lar=gGeoManager->MakeBox ("Hlar",ar , 181*mm/2 , 89.25*mm/2 , 38.3*mm/2);//2001P2
106 TGeoVolume *smo=gGeoManager->MakeBox ("Hsmo",ar , 114*mm/2 , 89.25*mm/2 , 38.3*mm/2);//2001P2
107 TGeoVolume *gap=gGeoManager->MakeBox ("Hgap",ch4 , 640*mm/2 , 403.20*mm/2 , 5.5*mm/2);//gap=pad+ano+cat
108 TGeoVolume *cat=gGeoManager->MakeTube("Hcat",cu , 0*mm , 50.00*um , 8.0*mm/2);
109 TGeoVolume *ano=gGeoManager->MakeTube("Hano",w , 0*mm , 20.00*um , 8.0*mm/2);
110 TGeoVolume *pad=gGeoManager->MakeBox ("Hpad",csi , 8*mm/2 , 8.40*mm/2 , 1.0*mm/2);
111//
112// ^ Y z= z=-12mm z=98.25mm ALIC->7xHmp (virtual)-->1xHsbo (virtual) --->2xHcov (real) 2072P1
113// | ____________________________________ | |-->1xHhon (real) 2072P1
114// | | ______ ____ ______ | |
115// | | | | | * | | | |->3xHrad (virtual) --->1xHneo (real) 2011P1
116// | |50.5mm| |24mm| * |45.5mm| | | |-->1xHwin (real) 2011P1
117// | | | | | * | | | | |-->2xHsi1 (real) 2011P1
118// | | | |____| * |______| | | |-->2xHsi2 (real) 2011P1
119// | | | ____ * ______ | | |->30xHspa (real) 2011P1
120// | | | | | * | | | |
121// | | | | | * | | | |->1xHfr4 (vitual) --->1xHf4a (real)---->1xHf4i(virtual) 2043P1
122// | | sb | | rad| * | | | | |-->322xHcol (real) 2043P1
123// | | | |____| * |______| | |
124// | | | ____ * ______ | |->6xHsec (virtual) --> 1xHppf(real) ---->8xHlar (virtual) 2001P1
125// | | | | | * | | | |--->8xHsmo (virtual) 2001P1
126// | | | | | * | | | |
127// | | | | | * | | | |-> 1xHgap (virtual) --->48xHrow (virtual) -->80xHcel (virtual) -->4xHcat (real) from p84 TDR
128// | |______| |____| * |______| | |-->2xHano (real) from p84 TDR
129// |____________________________________| |-->1xHpad (real) from p84 TDR
130// --->Z
131 hmp->AddNode(sbo ,1,new TGeoTranslation( 0*mm, 0*mm, -73.75*mm)); //p.84 TDR
132 sbo->AddNode(hon ,1,new TGeoTranslation( 0*mm,0*mm, 0*mm)); //2072P1
133 sbo->AddNode(cov ,1,new TGeoTranslation( 0*mm,0*mm, +25*mm));
134 sbo->AddNode(cov ,2,new TGeoTranslation( 0*mm,0*mm, -25*mm));
135 hmp->AddNode(rad,2,new TGeoTranslation( 0*mm,+434*mm, -12.00*mm));
136 hmp->AddNode(rad,1,new TGeoTranslation( 0*mm, 0*mm, -12.00*mm));
137 hmp->AddNode(rad,0,new TGeoTranslation( 0*mm,-434*mm, -12.00*mm));
138 rad->AddNode(neo,1,new TGeoTranslation( 0*mm, 0*mm, -10.0*mm));
139 rad->AddNode(win,1,new TGeoTranslation( 0*mm, 0*mm, 9.5*mm));
140 rad->AddNode(si1,1,new TGeoTranslation( 0*mm,-204*mm, -0.5*mm)); rad->AddNode(si1,2,new TGeoTranslation( 0*mm,+204*mm, -0.5*mm));
141 rad->AddNode(si2,1,new TGeoTranslation(-660*mm, 0*mm, -0.5*mm)); rad->AddNode(si2,2,new TGeoTranslation(+660*mm, 0*mm, -0.5*mm));
142 for(Int_t i=0;i<3;i++) for(Int_t j=0;j<10;j++) rad->AddNode(spa,copy=10*i+j,new TGeoTranslation(-1330*mm/2+116*mm+j*122*mm,(i-1)*105*mm,-0.5*mm));
143 hmp->AddNode(fr4,1,new TGeoTranslation( 0*mm, 0*mm, 9.00*mm)); //p.84 TDR
144 for(int i=1;i<=322;i++) fr4->AddNode(col,i,new TGeoCombiTrans( 0*mm, -1296/2*mm+i*4*mm,-5*mm,rot)); //F4 2043P1
145 fr4->AddNode(f4a,1,new TGeoTranslation( 0*mm,0*mm, 2.5*mm));
146 f4a->AddNode(f4i,1,new TGeoTranslation( 0*mm,0*mm, 0*mm));
147 hmp->AddNode(sec,4,new TGeoTranslation(-335*mm,+433*mm, 98.25*mm)); hmp->AddNode(sec,5,new TGeoTranslation(+335*mm,+433*mm, 98.25*mm));
148 hmp->AddNode(sec,2,new TGeoTranslation(-335*mm, 0*mm, 98.25*mm)); hmp->AddNode(sec,3,new TGeoTranslation(+335*mm, 0*mm, 98.25*mm));
149 hmp->AddNode(sec,0,new TGeoTranslation(-335*mm,-433*mm, 98.25*mm)); hmp->AddNode(sec,1,new TGeoTranslation(+335*mm,-433*mm, 98.25*mm));
150 sec->AddNode(gap,1,new TGeoTranslation(0,0,-20.00*mm));
151 TGeoVolume *row= gap->Divide("Hrow",2,48,0,0);//along Y->48 rows
152 TGeoVolume *cel= row->Divide("Hcel",1,80,0,0);//along X->80 cells
153 cel->AddNode(cat,1,new TGeoCombiTrans (0, 3.15*mm , -2.70*mm , rot)); //4 cathode wires
154 cel->AddNode(ano,1,new TGeoCombiTrans (0, 2.00*mm , -0.29*mm , rot)); //2 anod wires
155 cel->AddNode(cat,2,new TGeoCombiTrans (0, 1.05*mm , -2.70*mm , rot));
156 cel->AddNode(cat,3,new TGeoCombiTrans (0, -1.05*mm , -2.70*mm , rot));
157 cel->AddNode(ano,2,new TGeoCombiTrans (0, -2.00*mm , -0.29*mm , rot));
158 cel->AddNode(cat,4,new TGeoCombiTrans (0, -3.15*mm , -2.70*mm , rot));
159 cel->AddNode(pad,1,new TGeoTranslation(0, 0.00*mm , 2.25*mm)); //1 pad
160 sec->AddNode(ppf,1,new TGeoTranslation(0,0, 2.75*mm));
161// ^ Y single cell 5.5mm CH4 = 1*mm CsI + 4.45*mm CsI x cath +0.05*mm safety margin
162// | ______________________________
163// | | | ^ ||
164// | | 1.05mm ||
165// 2.2*mm| xxxxxxxxxxxxxxxxxxxxxxxxxxxx |-- 50um x || cat shift x=0mm , y= 3.15mm , z=-2.70mm
166// | | ||
167// | | ||
168// __ | .......................... | 2.1mm 20un . || ano shift x=0mm , y= 2.00mm , z=-0.29mm
169// | | ||
170// | | ||
171// | xxxxxxxxxxxxxxxxxxxxxxxxxxxx |-- x || cat shift x=0mm , y= 1.05mm , z=-2.70mm
172// | | ||
173// | | 8.4mm ||
174// 4*mm | | 2.1mm || pad shift x=0mm , y= 0.00mm , z=2.25*mm
175// | | ||
176// | | ||
177// | xxxxxxxxxxxxxxxxxxxxxxxxxxxx |-- x || cat shift x=0mm , y=-1.05mm , z=-2.70mm
178// | | ||
179// | | ||
180// __ | .......................... | 2.1mm . 2.04mm|| ano shift x=0mm , y=-2.00mm , z=-0.29mm
181// | | ||
182// | | ||
183// | xxxxxxxxxxxxxxxxxxxxxxxxxxxx |-- x 4.45mm || cat shift x=0mm , y=-3.15mm , z=-2.70mm
184// 2.2*mm| | ||
185// | | 1.05mm ||
186// |______________________________| v ||
187// < 8 mm >
188// ----->X ----->Z
189 ppf->AddNode(lar,1,new TGeoTranslation(-224.5*mm,-151.875*mm, 0.85*mm));
190 ppf->AddNode(lar,2,new TGeoTranslation(-224.5*mm,- 50.625*mm, 0.85*mm));
191 ppf->AddNode(lar,3,new TGeoTranslation(-224.5*mm,+ 50.625*mm, 0.85*mm));
192 ppf->AddNode(lar,4,new TGeoTranslation(-224.5*mm,+151.875*mm, 0.85*mm));
193 ppf->AddNode(lar,5,new TGeoTranslation(+224.5*mm,-151.875*mm, 0.85*mm));
194 ppf->AddNode(lar,6,new TGeoTranslation(+224.5*mm,- 50.625*mm, 0.85*mm));
195 ppf->AddNode(lar,7,new TGeoTranslation(+224.5*mm,+ 50.625*mm, 0.85*mm));
196 ppf->AddNode(lar,8,new TGeoTranslation(+224.5*mm,+151.875*mm, 0.85*mm));
197 ppf->AddNode(smo,1,new TGeoTranslation(- 65.0*mm,-151.875*mm, 0.85*mm));
198 ppf->AddNode(smo,2,new TGeoTranslation(- 65.0*mm,- 50.625*mm, 0.85*mm));
199 ppf->AddNode(smo,3,new TGeoTranslation(- 65.0*mm,+ 50.625*mm, 0.85*mm));
200 ppf->AddNode(smo,4,new TGeoTranslation(- 65.0*mm,+151.875*mm, 0.85*mm));
201 ppf->AddNode(smo,5,new TGeoTranslation(+ 65.0*mm,-151.875*mm, 0.85*mm));
202 ppf->AddNode(smo,6,new TGeoTranslation(+ 65.0*mm,- 50.625*mm, 0.85*mm));
203 ppf->AddNode(smo,7,new TGeoTranslation(+ 65.0*mm,+ 50.625*mm, 0.85*mm));
204 ppf->AddNode(smo,8,new TGeoTranslation(+ 65.0*mm,+151.875*mm, 0.85*mm));
205}//Hmpid()
206//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
fe88cf1b 207void Axis()
208{
c5c19d6a 209// Draw axises on top of geometry
210 Double_t X[6]={0,0,0,300,0,0}; Double_t Y[6]={0,0,0,0,300,0}; Double_t Z[6]={0,0,0,0,0,300};
fe88cf1b 211 TPolyLine3D *pXaxis=new TPolyLine3D(2,X);pXaxis->SetLineColor(kRed); pXaxis->Draw();
212 TPolyLine3D *pYaxis=new TPolyLine3D(2,Y);pYaxis->SetLineColor(kGreen); pYaxis->Draw();
c5c19d6a 213 TPolyLine3D *pZaxis=new TPolyLine3D(2,Z);pZaxis->SetLineColor(kBlue); pZaxis->Draw();
fe88cf1b 214}
df9bc77c 215//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++