019444f15138447b49945cbb82a26e12d7102b1a
[u/mrichter/AliRoot.git] / STRUCT / AliFRAMEv1.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /*
17 $Log$
18 */
19
20 ///////////////////////////////////////////////////////////////////////////////
21 //                                                                           //
22 //  Space frame class                                                          //
23 //                                                                           //
24 //Begin_Html
25 /*
26 <img src="picts/AliFRAMEClass.gif">
27 */
28 //End_Html
29 //                                                                           //
30 ///////////////////////////////////////////////////////////////////////////////
31
32 #include "AliFRAMEv1.h"
33 #include "AliRun.h"
34  
35 ClassImp(AliFRAMEv1)
36  
37 //_____________________________________________________________________________
38 AliFRAMEv1::AliFRAMEv1()
39 {
40   //
41   // Default constructor for space frame
42   //
43 }
44  
45 //_____________________________________________________________________________
46 AliFRAMEv1::AliFRAMEv1(const char *name, const char *title)
47        : AliFRAME(name,title)
48 {
49   //
50   // Standard constructor for space frame
51   //
52 }
53  
54 //_____________________________________________________________________________
55 void AliFRAMEv1::CreateGeometry()
56 {
57   //
58   // Create space frame geometry
59   //
60   //Begin_Html
61   /*
62     <img src="picts/AliFRAME.gif">
63   */
64   //End_Html
65   //Begin_Html
66   /*
67     <img src="picts/AliFRAMETree.gif">
68   */
69   //End_Html
70
71   Int_t *idtmed = fIdtmed->GetArray()-1199;
72
73   Float_t dphi, dz_small, zpos, ddphi;
74   Float_t tspar[5];
75   Float_t tsparl[5];
76   Float_t par[50], dz_long;
77   
78   //     R_IN : INNER RADIUS 
79   //     R_OU : OUTER RADIUS 
80   //     DR   : WALL THICKNESS 
81   //   2*Z_IN : FREE SPACE IN Z FOR PHOS 
82   //   2*Z_RI : FREE SPACE IN Z FOR RICH 
83   //   2*Z_OU : LENGTH 
84   //   2*DZ   : WIDTH OF FRAME ELEMENTS 
85   Float_t r_in = 395;
86   Float_t r_ou = 420;
87   Float_t dr   = 0.3;
88   Float_t z_in = 130;
89   Float_t z_ou = 350;
90   Float_t z_ri = 236.25;
91   Float_t dz   = 8.75;
92   
93   
94   //     Space Frame 
95   
96   par[0] = r_in;
97   par[1] = r_ou;
98   par[2] = z_ou;
99   gMC->Gsvolu("BFMO", "TUBE", idtmed[1214], par, 3);
100   
101   //     Rings perpendicular to the beam 
102   
103   //     full rings at the ends 
104   
105   par[0] = r_in;
106   par[1] = r_ou;
107   par[2] = dz;
108   gMC->Gsvolu("BRO1", "TUBE", idtmed[1218], par, 3);
109   par[0] = r_in +dr;
110   par[1] = r_ou -dr;
111   par[2] = dz - dr;
112   gMC->Gsvolu("BRI1", "TUBE", idtmed[1214], par, 3);
113   gMC->Gspos("BRI1", 1, "BRO1", 0., 0., 0., 0, "ONLY");
114   zpos = z_ou - dz;
115   gMC->Gspos("BRO1", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY");
116   gMC->Gspos("BRO1", 2, "BFMO", 0., 0., zpos, 0, "ONLY");
117   
118   //     space for the HMPID 
119   
120   tspar[0] = r_in;
121   tspar[1] = r_ou;
122   tspar[2] = dz;
123   tspar[3] = -240.;
124   tspar[4] = 60.;
125   gMC->Gsvolu("BRO2", "TUBS", idtmed[1218], tspar, 5);
126   tspar[0] = r_in + dr;
127   tspar[1] = r_ou - dr;
128   tspar[2] = dz - dr;
129   gMC->Gsvolu("BRI2", "TUBS", idtmed[1214], tspar, 5);
130   gMC->Gspos("BRI2", 1, "BRO2", 0., 0., 0., 0, "ONLY");
131   zpos = z_in + dz;
132   gMC->Gspos("BRO2", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY");
133   gMC->Gspos("BRO2", 2, "BFMO", 0., 0., zpos, 0, "ONLY");
134   
135   
136   
137   tspar[0] = r_in;
138   tspar[1] = r_ou;
139   tspar[2] = dz;
140   tspar[3] = 60.;
141   tspar[4] = 120.;
142   gMC->Gsvolu("BRO3", "TUBS", idtmed[1218], tspar, 5);
143   tspar[0] = r_in + dr;
144   tspar[1] = r_ou - dr;
145   tspar[2] = dz - dr;
146   gMC->Gsvolu("BRI3", "TUBS", idtmed[1214], tspar, 5);
147   gMC->Gspos("BRI3", 1, "BRO3", 0., 0., 0., 0, "ONLY");
148   zpos = 245.;
149   gMC->Gspos("BRO3", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY");
150   gMC->Gspos("BRO3", 2, "BFMO", 0., 0., zpos, 0, "ONLY");
151   
152   //     longitudinal beams 
153   
154   //     outside phi=60-120 
155   
156   //     virtual elements 
157   
158   dz_small  = (z_ou - z_in -4*dz)/2;
159   dz_long   = z_in;
160   tsparl[0] = r_in;
161   tsparl[1] = r_ou;
162   tsparl[2] = dz_small;
163   
164   //     left and right 
165   
166   tsparl[3] = -240.;
167   tsparl[4] = 60.;
168   gMC->Gsvolu("BLO1", "TUBS", idtmed[1214], tsparl, 5);
169   gMC->Gsdvt("BLD1", "BLO1", 20., 2, idtmed[1214], 15);
170   
171   //     central, leaving space for rich and phos 
172   
173   tsparl[2] = dz_long;
174   tsparl[3] = -20.;
175   tsparl[4] = 60.;
176   gMC->Gsvolu("BLO2", "TUBS", idtmed[1214], tsparl, 5);
177   gMC->Gsdvt("BLD2", "BLO2", 20., 2, idtmed[1214], 5);
178   tsparl[3] = 120.;
179   tsparl[4] = 200.;
180   gMC->Gsvolu("BLO3", "TUBS", idtmed[1214], tsparl, 5);
181   gMC->Gsdvt("BLD3", "BLO3", 20., 2, idtmed[1214], 5);
182   
183   //     real elements 
184   
185   dphi  = dz/(TMath::Pi()*(r_in + r_ou))*360;
186   ddphi = dphi * dr/dz;
187   tspar[0] = tsparl[0];
188   tspar[1] = tsparl[1];
189   tspar[2] = dz_small;
190   tspar[3] = 10. - dphi;
191   tspar[4] = 10.;
192   gMC->Gsvolu("BL01", "TUBS", idtmed[1218], tspar, 5);
193   
194   tspar[0] = tsparl[0] + dr;
195   tspar[1] = tsparl[1] - dr;
196   tspar[3] = 10. - dphi + ddphi;
197   tspar[4] = 10. - ddphi;
198   gMC->Gsvolu("BL02", "TUBS", idtmed[1214], tspar, 5);
199   gMC->Gspos("BL02", 1, "BL01", 0., 0., 0., 0, "ONLY");
200   
201
202   tspar[0] = tsparl[0];
203   tspar[1] = tsparl[1];
204   tspar[2] = dz_long;
205   tspar[3] = 10. - dphi;
206   tspar[4] = 10.;
207   gMC->Gsvolu("BL11", "TUBS", idtmed[1218], tspar, 5);
208   
209   tspar[0] = tsparl[0] + dr;
210   tspar[1] = tsparl[1] - dr;
211   tspar[3] = 10. - dphi + ddphi;
212   tspar[4] = 10. - ddphi;
213   gMC->Gsvolu("BL12", "TUBS", idtmed[1214], tspar, 5);
214   gMC->Gspos("BL12", 1, "BL11", 0., 0., 0., 0, "ONLY");
215   
216   gMC->Gspos("BL01", 1, "BLD1", 0., 0., 0., 0, "ONLY");
217   gMC->Gspos("BL11", 1, "BLD2", 0., 0., 0., 0, "ONLY");
218   gMC->Gspos("BL11", 2, "BLD3", 0., 0., 0., 0, "ONLY");
219   
220   zpos = z_in +2*dz + dz_small;
221   gMC->Gspos("BLO1", 1, "BFMO", 0., 0.,-zpos, 0, "ONLY");
222   gMC->Gspos("BLO1", 2, "BFMO", 0., 0., zpos, 0, "ONLY");
223   gMC->Gspos("BLO2", 1, "BFMO", 0., 0.,   0., 0, "ONLY");
224   gMC->Gspos("BLO3", 1, "BFMO", 0., 0.,   0., 0, "ONLY");
225   
226   //     PHI=60-120 (RICH) 
227   
228   tsparl[0] = r_in;
229   tsparl[1] = r_ou;
230   tsparl[2] = (z_ou - z_ri -4*dz)/2;
231   tsparl[3] = 60.;
232   tsparl[4] = 120.;
233   gMC->Gsvolu("BLO4", "TUBS", idtmed[1214], tsparl, 5);
234   gMC->Gsdvt("BLD4", "BLO4", 20., 2, idtmed[1214], 3);
235   tspar[0] = tsparl[0];
236   tspar[1] = tsparl[1];
237   tspar[2] = tsparl[2];
238   tspar[3] = 10. - dphi;
239   tspar[4] = 10.;
240   gMC->Gsvolu("BL03", "TUBS", idtmed[1218], tspar, 5);
241   
242   tspar[0] = tsparl[0] + dr;
243   tspar[1] = tsparl[1] - dr;
244   tspar[2] = tsparl[2];
245   tspar[3] = 10. - dphi + ddphi;
246   tspar[4] = 10. - ddphi;
247   gMC->Gsvolu("BL04", "TUBS", idtmed[1214], tspar, 5);
248   gMC->Gspos("BL04", 1, "BL03", 0., 0., 0., 0, "ONLY");
249   
250   gMC->Gspos("BL03", 1, "BLD4", 0., 0., 0., 0, "ONLY");
251   
252   gMC->Gspos("BLO4", 1, "BFMO", 0., 0., 293.125, 0, "ONLY");
253   gMC->Gspos("BLO4", 2, "BFMO", 0., 0.,-293.125, 0, "ONLY");
254   
255   gMC->Gspos("BFMO", 1, "ALIC", 0., 0., 0., 0, "ONLY");
256   gMC->Gsatt("BFMO", "SEEN", 0);
257 }
258
259 //_____________________________________________________________________________
260 void AliFRAMEv1::DrawModule()
261 {
262   //
263   // Draw a shaded view of the space frame
264   //
265
266   // Set everything unseen
267   gMC->Gsatt("*", "seen", -1);
268   // 
269   // Set ALIC mother transparent
270   gMC->Gsatt("ALIC","SEEN",0);
271   //
272   // Set the volumes visible
273   gMC->Gsatt("BFMO","seen",0);
274   gMC->Gsatt("BRO1","seen",1);
275   gMC->Gsatt("BRI1","seen",0);
276   gMC->Gsatt("BRO2","seen",1);
277   gMC->Gsatt("BRI2","seen",0);
278   gMC->Gsatt("BRO3","seen",1);
279   gMC->Gsatt("BRI3","seen",0);
280   gMC->Gsatt("BLO1","seen",0);
281   gMC->Gsatt("BLD1","seen",0);
282   gMC->Gsatt("BLO2","seen",0);
283   gMC->Gsatt("BLD2","seen",0);
284   gMC->Gsatt("BLO3","seen",0);
285   gMC->Gsatt("BLD3","seen",0);
286   gMC->Gsatt("BL01","seen",1);
287   gMC->Gsatt("BL02","seen",1);
288   gMC->Gsatt("BL11","seen",1);
289   gMC->Gsatt("BL12","seen",1);
290   gMC->Gsatt("BLO4","seen",0);
291   gMC->Gsatt("BLD4","seen",0);
292   gMC->Gsatt("BL03","seen",1);
293   gMC->Gsatt("BL04","seen",1);
294   //
295   gMC->Gdopt("hide", "on");
296   gMC->Gdopt("shad", "on");
297   gMC->Gsatt("*", "fill", 7);
298   gMC->SetClipBox(".");
299   gMC->DefaultRange();
300   gMC->Gdraw("alic", 40, 30, 0, 10, 10, .015, .015);
301   gMC->Gdhead(1111, "Space Frame");
302   gMC->Gdman(18, 4, "MAN");
303 }
304
305 //_____________________________________________________________________________
306 void AliFRAMEv1::CreateMaterials()
307 {
308
309   //
310   // Create materials for the space frame
311   //
312   
313   Int_t   ISXFLD = gAlice->Field()->Integ();
314   Float_t SXMGMX = gAlice->Field()->Max();
315   
316   Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
317   Float_t zsteel[4] = { 26.,24.,28.,14. };
318   Float_t wsteel[4] = { .715,.18,.1,.005 };
319   
320   Float_t epsil, stmin, deemax, tmaxfd, stemax;
321   
322   //     STEEL 
323
324
325   // --- Define the various materials for GEANT --- 
326   AliMaterial(15, "AIR$      ", 14.61, 7.3, .001205, 30423.24, 67500);
327   AliMixture(19, "STAINLESS STEEL$", asteel, zsteel, 7.88, 4, wsteel);
328   
329   // **************** 
330   //     Defines tracking media parameters. 
331   //     Les valeurs sont commentees pour laisser le defaut 
332   //     a GEANT (version 3-21, page CONS200), f.m. 
333   epsil  = .001; // Tracking precision, 
334   stemax = -1.;  // Maximum displacement for multiple scat 
335   tmaxfd = -20.; // Maximum angle due to field deflection 
336   deemax = -.3;  // Maximum fractional energy loss, DLS 
337   stmin  = -.8;
338   // *************** 
339   //ifield0 = 0;  // Field off 
340   //ifield1 = 2;  // 1.0 T. FIELD (DIPOLE) 
341   //ifield3 = 3;
342   
343   //    Air 
344   
345   // 0.2 T. FIELD (L3) 
346   AliMedium(15, "AIR_L3_US        ", 15, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
347   
348   //    Steel 
349   
350   AliMedium(19, "ST_L3_US          ", 19, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
351 }
352
353
354
355
356
357
358
359
360
361
362