]>
Commit | Line | Data |
---|---|---|
fe88cf1b | 1 | |
fe88cf1b | 2 | TGeoManager *g=0; |
3 | ||
c5c19d6a | 4 | void 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 | //__________________________________________________________________________________________________ | |
24 | void 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 | 52 | void 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 | 207 | void 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 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |