]> git.uio.no Git - u/mrichter/AliRoot.git/blame - RICH/RichGeom.C
Change width of sliding window (minor change)
[u/mrichter/AliRoot.git] / RICH / RichGeom.C
CommitLineData
473cb33a 1TGeoManager *g=0;
2AliRICHParam *p=0;
3Int_t copy; //volume copy number
4Double_t dx,dy,dz,r1,r2;//tmp vars for volume dimentions
5Double_t cm=1,m=100*cm,mm=0.1*cm,mkm=0.001*cm;//length units
6
7void Geom()
8{
9 AliRICHParam::SetRadioSrc(kTRUE);
10 p=new AliRICHParam;
11
12 //gSystem->Load("libGeom.so");
13 g=new TGeoManager("GEL","Aerogel test configuration");
14 Materials();
15 TGeoVolume *pMother=g->MakeBox("Mother",g->GetMedium("Air"),dx=30*m/2,dy=30*m/2,dz=30*m/2); //arbitrary values
16 g->SetTopVolume(g->GetVolume("Mother"));
17
18 Rich(pMother);
19
20 Colors();
21 g->CloseGeometry();
22
23 g->SetVisOption(0); g->SetVisLevel(5);
24
25 g->GetMasterVolume()->Draw();
26 Axis();
27// gPad->GetView()->SetView(3,94,-70,0);
28 new TBrowser;
29}
30//__________________________________________________________________________________________________
31void Aerogel()
32{
33
34 TGeoVolume *pGel =g->MakeBox("RGEL" ,g->GetMedium("Air"),dx=10*cm/2,dy= 10*cm/2 ,dz=10*cm/2);//10x10x10 cm aerogel cubic
35 for(int i=1;i<=7;i++)//put 7 cubics
36 g->GetVolume("Mother")->AddNode(pGel,copy=i,new TGeoCombiTrans(p->C(i)->Center().X(), p->C(i)->Center().Y(), p->C(i)->Center().Z(),
37 new TGeoRotation(Form("GelRot%i",i),p->C(i)->ThetaXd(),p->C(i)->PhiXd(),
38 p->C(i)->ThetaYd(),p->C(i)->PhiYd(),
39 p->C(i)->ThetaZd(),p->C(i)->PhiZd())));
40
41}
42//__________________________________________________________________________________________________
43void Materials()
44{
45// Defines all the materials and tracking media
46 Double_t a=0,z=0,den=0,radlen=0,intlen=0;//tmp vars for material parameters
47 new TGeoMaterial("Air" ,a=26.98 ,z=13,den=0.4224 ); new TGeoMedium("Air" ,1,g->GetMaterial("Air"));
48 new TGeoMaterial("CH4" ,a=26.98 ,z=13,den=0.4224 ); pCH4 =new TGeoMedium("CH4" ,2,g->GetMaterial("CH4"));
49 new TGeoMaterial("CsI" ,a=26.98 ,z=13,den=2.7 ,radlen=24.01*cm,intlen=70.6*cm); pCsI =new TGeoMedium("CsI" ,3,g->GetMaterial("CsI"));
50 new TGeoMaterial("Al" ,a=26.98 ,z=13,den=2.7 ,radlen=24.01*cm,intlen=70.6*cm); pAl =new TGeoMedium("Al" ,4,g->GetMaterial("Al"));
51 new TGeoMaterial("W" ,a=183.84,z=27,den=19.3,radlen= 9.59*cm,intlen=0.35*cm); pW =new TGeoMedium("W" ,5,g->GetMaterial("W"));
52 new TGeoMaterial("Cu" ,a=55.845,z=26,den=7.87,radlen=13.84*cm,intlen=82.8*cm); pCu =new TGeoMedium("Cu" ,6,g->GetMaterial("Cu"));
53 new TGeoMaterial("Rohacell" ,a=12.01 ,z=6 ,den=0.1 ,radlen=18.8,intlen=0); pRoha =new TGeoMedium("Rohacell" ,7,g->GetMaterial("Rohacell"));
54 new TGeoMaterial("SiO2" ,a=0 ,z=0 ,den=0); pSiO2 =new TGeoMedium("SiO2" ,8,g->GetMaterial("SiO2"));
55 new TGeoMaterial("C6F14" ,a=0 ,z=0 ,den=0); pC6F14=new TGeoMedium("C6F14" ,9,g->GetMaterial("C6F14"));
56//Medium for Sr90 source
57 new TGeoMaterial("Perpex" ,a=55.845,z=26,den=7.87,radlen=13.84*cm,intlen=82.8*cm); pPerpex=new TGeoMedium("Perpex" ,10,g->GetMaterial("Perpex"));
58 new TGeoMaterial("Steel" ,a=55.845,z=26,den=7.87,radlen=13.84*cm,intlen=82.8*cm); pSteel =new TGeoMedium("Steel" ,11,g->GetMaterial("Steel"));
59 new TGeoMaterial("Mylar" ,a=55.845,z=26,den=7.87,radlen=13.84*cm,intlen=82.8*cm); pMylar =new TGeoMedium("Mylar" ,12,g->GetMaterial("Mylar"));
60 new TGeoMaterial("Sr90" ,a=87.62 ,z=38,den=7.87,radlen=13.84*cm,intlen=82.8*cm); pSr =new TGeoMedium("Sr90" ,13,g->GetMaterial("Sr90"));
61}//Materials()
62//__________________________________________________________________________________________________
63void Rich(TGeoVolume *pTop)
64{
65//Rich
66 TGeoVolume *pRich=g->MakeBox( "Rich" ,g->GetMedium("CH4"),dx=(6*mm+1681*mm+6*mm)/2, //main RICH volume
67 dy=(6*mm+1466*mm+6*mm)/2,
68 dz=(80*mm+40*mm)*2/2); //x,y taken from 2033P1 z from p84 TDR
69 for(int i=1;i<=p->Nchambers();i++)//put 7 chambers
70 pTop->AddNode(pRich,copy=i,new TGeoCombiTrans(p->C(i)->Center().X(), p->C(i)->Center().Y(), p->C(i)->Center().Z(),
71 new TGeoRotation(Form("RichRot%i",i),p->C(i)->ThetaXd(),p->C(i)->PhiXd(),
72 p->C(i)->ThetaYd(),p->C(i)->PhiYd(),
73 p->C(i)->ThetaZd(),p->C(i)->PhiZd()))); //Rich to Mother
74
75 PadPanelFrame(pRich); //photocathode
76 Gap(pRich); //anod wires
77 Frame3(pRich); //cathode wires
78 Frame4(pRich); //collection wires
79 if(!p->IsRadioSrc()) Radiators(pRich);
80 else Sr90(pRich);
81 Sandbox(pRich);
82}//Rich()
83//__________________________________________________________________________________________________
84void PadPanelFrame(TGeoVolume *pTop)
85{
86//Pad Panel frame
87 TGeoVolume *pPpf =g->MakeBox("PPF" ,g->GetMedium("Al") ,dx=648*mm/2,dy= 411*mm/2 ,dz=40 *mm/2);//PPF 2001P2 inner size of the slab by 1mm more
88 TGeoVolume *pPpfLarge=g->MakeBox("PPFlarge" ,g->GetMedium("Air") ,dx=181*mm/2,dy=89.25*mm/2 ,dz=38.3*mm/2);//large whole
89 TGeoVolume *pPpfSmall=g->MakeBox("PPFsmall" ,g->GetMedium("Air") ,dx=114*mm/2,dy=89.25*mm/2 ,dz=38.3*mm/2);//small whole
90 TGeoVolume *pPc =g->MakeBox("PC" ,g->GetMedium("CsI") ,dx=644*mm/2,dy= 407*mm/2 ,dz= 1.7*mm/2);//by 0.2 mm more then actual size (PCB 2006P1)
91
92 pTop->AddNode(pPpf,copy=1,new TGeoTranslation(-335*mm,-433*mm,8*cm+20*mm));//F1 2040P1 z p.84 TDR
93 pTop->AddNode(pPpf,copy=2,new TGeoTranslation(+335*mm,-433*mm,8*cm+20*mm));
94 pTop->AddNode(pPpf,copy=3,new TGeoTranslation(-335*mm, 0*mm,8*cm+20*mm));
95 pTop->AddNode(pPpf,copy=4,new TGeoTranslation(+335*mm, 0*mm,8*cm+20*mm));
96 pTop->AddNode(pPpf,copy=5,new TGeoTranslation(-335*mm,+433*mm,8*cm+20*mm));
97 pTop->AddNode(pPpf,copy=6,new TGeoTranslation(+335*mm,+433*mm,8*cm+20*mm));
98 pPpf->AddNode( pPc ,copy=1,new TGeoTranslation( 0*mm, 0*mm,-19.15*mm));//PPF 2001P2
99 pPpf->AddNode(pPpfLarge,copy=1,new TGeoTranslation(-224.5*mm,-151.875*mm, 0.85*mm));
100 pPpf->AddNode(pPpfLarge,copy=2,new TGeoTranslation(-224.5*mm,- 50.625*mm, 0.85*mm));
101 pPpf->AddNode(pPpfLarge,copy=3,new TGeoTranslation(-224.5*mm,+ 50.625*mm, 0.85*mm));
102 pPpf->AddNode(pPpfLarge,copy=4,new TGeoTranslation(-224.5*mm,+151.875*mm, 0.85*mm));
103 pPpf->AddNode(pPpfSmall,copy=1,new TGeoTranslation(- 65.0*mm,-151.875*mm, 0.85*mm));
104 pPpf->AddNode(pPpfSmall,copy=2,new TGeoTranslation(- 65.0*mm,- 50.625*mm, 0.85*mm));
105 pPpf->AddNode(pPpfSmall,copy=3,new TGeoTranslation(- 65.0*mm,+ 50.625*mm, 0.85*mm));
106 pPpf->AddNode(pPpfSmall,copy=4,new TGeoTranslation(- 65.0*mm,+151.875*mm, 0.85*mm));
107 pPpf->AddNode(pPpfSmall,copy=5,new TGeoTranslation(+ 65.0*mm,-151.875*mm, 0.85*mm));
108 pPpf->AddNode(pPpfSmall,copy=6,new TGeoTranslation(+ 65.0*mm,- 50.625*mm, 0.85*mm));
109 pPpf->AddNode(pPpfSmall,copy=7,new TGeoTranslation(+ 65.0*mm,+ 50.625*mm, 0.85*mm));
110 pPpf->AddNode(pPpfSmall,copy=8,new TGeoTranslation(+ 65.0*mm,+151.875*mm, 0.85*mm));
111 pPpf->AddNode(pPpfLarge,copy=5,new TGeoTranslation(+224.5*mm,-151.875*mm, 0.85*mm));
112 pPpf->AddNode(pPpfLarge,copy=6,new TGeoTranslation(+224.5*mm,- 50.625*mm, 0.85*mm));
113 pPpf->AddNode(pPpfLarge,copy=7,new TGeoTranslation(+224.5*mm,+ 50.625*mm, 0.85*mm));
114 pPpf->AddNode(pPpfLarge,copy=8,new TGeoTranslation(+224.5*mm,+151.875*mm, 0.85*mm));
115}//PadPanelFrame()
116//__________________________________________________________________________________________________
117void Gap(TGeoVolume *pTop)
118{
119//Gap - anod wires
120 TGeoVolume *pGap =g->MakeBox ("Gap" ,g->GetMedium("CH4") ,dx=648*mm/2,dy= 411*mm/2 ,dz=4.45*mm/2);//xy as PPF 2001P2 z WP 2099P1
121 TGeoVolume *pAnod=g->MakeTube("Anod" ,g->GetMedium("W") ,r1= 0*mm ,r2= 20*mkm/2 ,dz=648*mm/2); //WP 2099P1 z = gap x PPF 2001P2
122 TGeoRotation *pAnodRot=new TGeoRotation("AnodRot",90,90,0);
123
124 pTop->AddNode(pGap,copy=1,new TGeoTranslation(-335*mm,-433*mm,8*cm-2.225*mm)); //F1 2040P1 z WP 2099P1
125 pTop->AddNode(pGap,copy=2,new TGeoTranslation(+335*mm,-433*mm,8*cm-2.225*mm));
126 pTop->AddNode(pGap,copy=3,new TGeoTranslation(-335*mm, 0*mm,8*cm-2.225*mm));
127 pTop->AddNode(pGap,copy=4,new TGeoTranslation(+335*mm, 0*mm,8*cm-2.225*mm));
128 pTop->AddNode(pGap,copy=5,new TGeoTranslation(-335*mm,+433*mm,8*cm-2.225*mm));
129 pTop->AddNode(pGap,copy=6,new TGeoTranslation(+335*mm,+433*mm,8*cm-2.225*mm));
130 for(int i=1;i<=96;i++)
131 pGap->AddNode(pAnod,copy=i,new TGeoCombiTrans( 0*mm, -411/2*mm+i*4*mm, 0.185*mm,pAnodRot)); //WP 2099P1
132}//Gap()
133//__________________________________________________________________________________________________
134void Frame3(TGeoVolume *pTop)
135{//Frame 3- cathode wires
136 TGeoVolume *pCath=g->MakeTube("Cath" ,g->GetMedium("Cu") ,r1=0 ,r2=100*mkm/2,dz=1323*mm/2);//r WP 2099P1 z F3 2041P1
137 TGeoRotation *pCathRot=new TGeoRotation("CathRot",90,90,0);
138 for(int i=1;i<=618;i++)
139 pTop->AddNode(pCath,copy=i,new TGeoCombiTrans( 0*mm, -649.5*mm+i*2.1*mm, 75*mm,pCathRot)); //WP 2099P1
140}//Frame3()
141//__________________________________________________________________________________________________
142void Frame4(TGeoVolume *pTop)
143{
144//Frame 4- collection wires
145 TGeoVolume *pF4 =g->MakeBox( "F4" ,g->GetMedium("CH4") ,dx=1407*mm/2 ,dy=1366*mm/2 ,dz= 15*mm/2);//F4 2043P1
146 TGeoVolume *pF4al=g->MakeBox( "F4al" ,g->GetMedium("Al") ,dx=1407*mm/2 ,dy=1366*mm/2 ,dz= 10*mm/2);
147 TGeoVolume *pF4in=g->MakeBox( "F4in" ,g->GetMedium("CH4") ,dx=1323*mm/2 ,dy=1296*mm/2 ,dz= 10*mm/2);
148 TGeoVolume *pColl=g->MakeTube("Coll" ,g->GetMedium("Cu") ,r1= 0*mm ,r2=100*mkm/2 ,dz=1323*mm/2);
149 TGeoRotation *pCollRot=new TGeoRotation("CollRot",90,90,0);
150
151 pTop->AddNode(pF4 ,copy=1,new TGeoTranslation( 0*mm,0*mm, 9*mm)); //F4 to Rich p.84 TDR
152 pF4 ->AddNode(pF4al ,copy=1,new TGeoTranslation( 0*mm,0*mm, 2.5*mm)); //F4 al to F4 2043P1
153 pF4al->AddNode(pF4in ,copy=1,new TGeoTranslation( 0*mm,0*mm, 0*mm)); //F4 whole F4 al 2043P1
154 for(int i=1;i<=322;i++)
155 pF4->AddNode(pColl,copy=i,new TGeoCombiTrans( 0*mm, -1296/2*mm+i*4*mm, -5*mm,pCollRot)); //F4 2043P1
156}//void Frame4()
157//__________________________________________________________________________________________________
158void Radiators(TGeoVolume *pTop)
159{
160 TGeoVolume *pRad =g->MakeBox( "Rad" ,g->GetMedium("C6F14") ,dx=1330*mm/2 ,dy= 413*mm/2 ,dz= 24*mm/2); // Rad 2011P1
161 TGeoVolume *pRadFront =g->MakeBox( "RadFront" ,g->GetMedium("Neoceram") ,dx=1330*mm/2 ,dy= 413*mm/2 ,dz= 4*mm/2);
162 TGeoVolume *pRadWin =g->MakeBox( "RadWin" ,g->GetMedium("SiO2") ,dx=1330*mm/2 ,dy= 413*mm/2 ,dz= 5*mm/2);
163 TGeoVolume *pRadLong =g->MakeBox( "RadLong" ,g->GetMedium("Neoceram") ,dx=1330*mm/2 ,dy= 5*mm/2 ,dz= 15*mm/2);
164 TGeoVolume *pRadShort =g->MakeBox( "RadShort" ,g->GetMedium("Neoceram") ,dx= 10*mm/2 ,dy= 403*mm/2 ,dz= 15*mm/2);
165 TGeoVolume *pRadSpacer=g->MakeTube("RadSpacer",g->GetMedium("SiO2") ,r1= 0 ,r2=10*mm/2 ,dz= 15*mm/2);
166
167 pTop->AddNode(pRad ,copy=1,new TGeoTranslation( 0*mm,-434*mm, -12*mm));
168 pTop->AddNode(pRad ,copy=2,new TGeoTranslation( 0*mm, 0*mm, -12*mm));
169 pTop->AddNode(pRad ,copy=3,new TGeoTranslation( 0*mm,+434*mm, -12*mm));
170
171 pRad ->AddNode(pRadFront ,copy=1,new TGeoTranslation( 0*mm, 0*mm, -10.0*mm));
172 pRad ->AddNode(pRadWin ,copy=1,new TGeoTranslation( 0*mm, 0*mm, 9.5*mm));
173 pRad ->AddNode(pRadLong ,copy=1,new TGeoTranslation( 0*mm,-204*mm, -0.5*mm));
174 pRad ->AddNode(pRadLong ,copy=2,new TGeoTranslation( 0*mm,+204*mm, -0.5*mm));
175 pRad ->AddNode(pRadShort ,copy=1,new TGeoTranslation(-660*mm, 0*mm, -0.5*mm));
176 pRad ->AddNode(pRadShort ,copy=2,new TGeoTranslation(+660*mm, 0*mm, -0.5*mm));
177 for(int i=0;i<3;i++)
178 for(int j=0;j<10;j++)
179 pRad->AddNode(pRadSpacer,copy=10*i+j,new TGeoTranslation(-1330*mm/2+116*mm+j*122*mm,(i-1)*105*mm,-0.5*mm));
180}//Radiators()
181//__________________________________________________________________________________________________
182void Sr90(TGeoVolume *pTop)
183{
184 pSrc =g->MakeTube("Src" ,g->GetMedium("CH4") , 0 , 70*mm/2 , 30*mm/2); //top container
185 pAlGlass =g->MakeTube("SrcAlGlass" ,g->GetMedium("Al") , 0 , 38*mm/2 ,21.8*mm/2); //Al glass wall
186 pPerpexPlug =g->MakeTube("SrcPerpex" ,g->GetMedium("Perpex"), 0 , 34*mm/2 , 20*mm/2); //Perpex plug
187 pScrewCentral=g->MakeTube("SrcScrewCentral" ,g->GetMedium("Steel") , 0 , 5*mm/2 , 15*mm/2); //Steel screw in the center
188 pScrewSr90 =g->MakeTube("SrcScrewSr90" ,g->GetMedium("Steel") , 0 , 2*mm/2 , 10*mm/2); //Steel screw to support Sr90
189 pSr90 =g->MakeTube("SrcSr90" ,g->GetMedium("Sr90") , 0 , 1*mm/2 , 1*mm/2); //Sr90 source
190 pHolePerpex =g->MakeTube("SrcHolePerpex" ,g->GetMedium("Air") , 0 , 4*mm/2 , 10*mm/2); //Air hole in perpex plug
191 pHoleAl =g->MakeTube("SrcHoleAl" ,g->GetMedium("Air") , 0 , 5*mm/2 , 1.8*mm/2); //Air hole in Al glass bottom
192 pMylarFoil =g->MakeTube("SrcMylarFoil" ,g->GetMedium("Mylar") , 0 , 30*mm/2 , 50*mkm/2); //Mylar foil
193
194 pTop->AddNode(pSrc,1,new TGeoTranslation(30*cm,0,1*cm));
195 pSrc ->AddNode(pMylarFoil,1,new TGeoTranslation(0,0,21.8*mm/2+50*mkm/2));
196 pSrc ->AddNode(pAlGlass,1,new TGeoTranslation(0,0,0)); //Al glass to fake Src volume
197 pAlGlass->AddNode( pHoleAl ,1,new TGeoTranslation(6*mm,0, -10*mm));
198 pAlGlass->AddNode( pPerpexPlug ,1,new TGeoTranslation(0*mm,0, 0.9*mm));
199 pPerpexPlug->AddNode( pHolePerpex ,1,new TGeoTranslation(6*mm,0, -5*mm));
200 pPerpexPlug->AddNode( pScrewCentral,1,new TGeoTranslation(0 ,0, 2.5*mm));
201 pPerpexPlug->AddNode( pScrewSr90 ,1,new TGeoTranslation(6*mm,0, 5*mm));
202 pScrewSr90->AddNode( pSr90 ,1,new TGeoTranslation(0 ,0,-4.5*mm));
203}//Sr90()
204//__________________________________________________________________________________________________
205void Sandbox(TGeoVolume *pTop)
206{//Sandbox
207 TGeoVolume *pSandBox =g->MakeBox( "SandBox" ,g->GetMedium("Air") ,dx=1419*mm/2 ,dy=1378*mm/2 ,dz=50.5*mm/2); //2072P1
208 TGeoVolume *pSandCover=g->MakeBox( "SandCover",g->GetMedium("Al") ,dx=1419*mm/2 ,dy=1378*mm/2 ,dz= 0.5*mm/2);
209 TGeoVolume *pSandComb =g->MakeBox( "SandComb" ,g->GetMedium("Roha") ,dx=1359*mm/2 ,dy=1318*mm/2 ,dz=49.5*mm/2);
210
211 pTop->AddNode(pSandBox,copy=1,new TGeoTranslation( 0*mm,0*mm, -73.75*mm)); //p.84 TDR
212 pSandBox->AddNode(pSandComb ,copy=1,new TGeoTranslation( 0*mm,0*mm, 0*mm)); //2072P1
213 pSandBox->AddNode(pSandCover ,copy=1,new TGeoTranslation( 0*mm,0*mm, +25*mm));
214 pSandBox->AddNode(pSandCover ,copy=2,new TGeoTranslation( 0*mm,0*mm, -25*mm));
215}//Sandbox()
216//__________________________________________________________________________________________________
217void Axis()
218{
219// Draw axises on top of geometry
220 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};
221 TPolyLine3D *pXaxis=new TPolyLine3D(2,X);pXaxis->SetLineColor(kRed); pXaxis->Draw();
222 TPolyLine3D *pYaxis=new TPolyLine3D(2,Y);pYaxis->SetLineColor(kGreen); pYaxis->Draw();
223 TPolyLine3D *pZaxis=new TPolyLine3D(2,Z);pZaxis->SetLineColor(kBlue); pZaxis->Draw();
224}
225//__________________________________________________________________________________________________
226void Colors()
227{
228//Set volume colors
229 TGeoVolume *pVol=0;
230 pVol=g->GetVolume("Pc") ; if(pVol) pVol->SetLineColor(kGreen);
231 pVol=g->GetVolume("PPFlarge") ; if(pVol) pVol->SetLineColor(kYellow);
232 pVol=g->GetVolume("PPFsmall") ; if(pVol) pVol->SetLineColor(kYellow);
233 pVol=g->GetVolume("RadFront") ; if(pVol) pVol->SetLineColor(kRed);
234 pVol=g->GetVolume("RadLong") ; if(pVol) pVol->SetLineColor(46);
235 pVol=g->GetVolume("RadShort") ; if(pVol) pVol->SetLineColor(kMagenta);
236 pVol=g->GetVolume("RadWin") ; if(pVol) pVol->SetLineColor(kBlue);
237 pVol=g->GetVolume("RadSpacer"); if(pVol) pVol->SetLineColor(kYellow);
238 pVol=g->GetVolume("SrcSr90") ; if(pVol) pVol->SetLineColor(kRed);
239 pVol=g->GetVolume("SrcScrewSr90") ; if(pVol) pVol->SetLineColor(kGreen);
240 pVol=g->GetVolume("SrcHolePerpex") ; if(pVol) pVol->SetLineColor(26);
241 pVol=g->GetVolume("SrcHoleAl") ; if(pVol) pVol->SetLineColor(27);
242}