]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HMPID/Hgeom.C
for non-miscalibrated digits, set an ad-hoc conversion factor fAdC->fToT to have...
[u/mrichter/AliRoot.git] / HMPID / Hgeom.C
1
2 TGeoManager *g=0;
3
4 void Hgeom(Bool_t isOnlyChambers=kFALSE)
5 {
6   
7   g=new TGeoManager("TestHMPID","Private HMPID geometry");
8   Materials();  
9   gGeoManager->MakeBox("ALIC",gGeoManager->GetMedium("HMPID_CH4"),3000/2,3000/2,3000/2); //arbitrary values  
10   gGeoManager->SetTopVolume(gGeoManager->GetVolume("ALIC"));
11     
12   Hmpid(isOnlyChambers);
13   
14   gGeoManager->CloseGeometry();
15   
16 //  gGeoManager->SetVisOption(0); gGeoManager->SetVisLevel(5); 
17   
18 //  gGeoManager->GetMasterVolume()->Draw();
19 //  Axis();
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
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                                                           
50 }//Materials()
51 //__________________________________________________________________________________________________
52 void Hmpid(Bool_t isOnlyChambers)
53 {
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  
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     
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 
83     }
84     mat->RotateZ(kAngCom);     //apply common rotation  in XY plane    
85     gGeoManager->GetVolume("ALIC")->AddNode(hmp,ch,mat);
86   }
87   if(isOnlyChambers) return; //do not construct the detailed geometry  
88   
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 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
207 void Axis()
208 {
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};
211   TPolyLine3D *pXaxis=new TPolyLine3D(2,X);pXaxis->SetLineColor(kRed);   pXaxis->Draw();
212   TPolyLine3D *pYaxis=new TPolyLine3D(2,Y);pYaxis->SetLineColor(kGreen); pYaxis->Draw();
213   TPolyLine3D *pZaxis=new TPolyLine3D(2,Z);pZaxis->SetLineColor(kBlue);  pZaxis->Draw();
214 }
215 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++