1 /////////////////////////////////////////////////////////
2 // Manager and hits classes for set:MUON version 0 //
3 /////////////////////////////////////////////////////////
8 #include <TLorentzVector.h>
10 #include "AliMUONv0.h"
14 #include "AliCallf77.h"
19 extern "C" void type_of_call trig(float (*)[4], float (*)[4], int& iflag);
23 //___________________________________________
24 AliMUONv0::AliMUONv0() : AliMUON()
29 //___________________________________________
30 AliMUONv0::AliMUONv0(const char *name, const char *title)
34 // z-Positions of Chambers
35 // const Float_t zch[7]={515., 690., 962.85, 1249., 1449., 1610, 1710.};
36 const Float_t zch[7]={515., 690., 975., 1249., 1449., 1610, 1710.};
39 const Float_t dmi[7]={ 35., 47., 66., 80., 80., 96., 101.96};
42 const Float_t dma[7]={183., 245., 316.6, 520., 520., 824., 874.};
46 fChambers = new TObjArray(14);
48 for (Int_t i=0; i<7; i++) {
49 for (Int_t j=0; j< 2; j++) {
52 // Default Parameters for Muon Tracking Stations
55 (*fChambers)[k] = new AliMUONchamber();
56 AliMUONchamber* chamber = (AliMUONchamber*) (*fChambers)[k];
58 chamber->SetZPOS(zch[i]);
60 chamber->InitGeo(zch[i]);
61 chamber->SetRInner(dmi[i]/2);
62 chamber->SetROuter(dma[i]/2);
72 //___________________________________________
73 void AliMUONv0::Trigger(Float_t (*x)[4], Float_t (*y)[4], Int_t& iflag)
78 //___________________________________________
79 void AliMUONv0::CreateGeometry()
81 Int_t *idtmed = fIdtmed->GetArray()-1099;
83 // Note: all chambers have the same structure, which could be
84 // easily parameterised. This was intentionally not done in order
85 // to give a starting point for the implementation of the actual
86 // design of each station.
88 // Distance between Stations
93 Float_t zpos1, zpos2, zfpos;
94 Float_t dframep=3.; // Value for station 3 should be 6 ...
101 Float_t dstation[5]={8., 8., 24.3, 8., 8.};
102 // Float_t dstation[5]={20., 20., 24.3, 20., 20.};
103 // Float_t dstation[5]={20., 100., 100., 100., 100.};
106 // Rotation matrices in the x-y plane
109 AliMatrix(idrotm[1100], 90., 0., 90., 90., 0., 0.);
111 AliMatrix(idrotm[1101], 90., 90., 90., 180., 0., 0.);
113 AliMatrix(idrotm[1102], 90., 180., 90., 270., 0., 0.);
115 AliMatrix(idrotm[1103], 90., 270., 90., 0., 0., 0.);
117 Float_t phi=2*TMath::Pi()/12/2;
120 // pointer to the current chamber
121 // pointer to the current chamber
122 Int_t idAlu1=idtmed[1103];
123 Int_t idAlu2=idtmed[1104];
124 // Int_t idAlu1=idtmed[1100];
125 // Int_t idAlu2=idtmed[1100];
126 Int_t idAir=idtmed[1100];
127 Int_t idGas=idtmed[1105];
130 AliMUONchamber *iChamber;
131 //********************************************************************
133 //********************************************************************
135 iChamber=(AliMUONchamber*) (*fChambers)[0];
136 zpos1=iChamber->ZPosition()-dstation[0]/2;
137 zpos2=zpos1+dstation[0];
138 zfpos=-(iChamber->fdGas+dframez)/2;
142 tpar[0] = iChamber->RInner()-dframep1;
143 tpar[1] = (iChamber->ROuter()+dframep1)/TMath::Cos(phi);
144 //tpar[2] = dstation[0]/2;
145 tpar[2] = dstation[0]/4;
147 gMC->Gsvolu("C01M", "TUBE", idAir, tpar, 3);
148 gMC->Gsvolu("C02M", "TUBE", idAir, tpar, 3);
149 gMC->Gspos("C01M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
150 gMC->Gspos("C02M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
157 pgpar[4] = -dframez/2;
158 pgpar[5] = iChamber->ROuter();
159 pgpar[6] = pgpar[5]+dframep1;
160 pgpar[7] = +dframez/2;
163 gMC->Gsvolu("C01O", "PGON", idAlu1, pgpar, 10);
164 gMC->Gsvolu("C02O", "PGON", idAlu1, pgpar, 10);
165 gMC->Gspos("C01O",1,"C01M", 0.,0.,-zfpos, 0,"ONLY");
166 gMC->Gspos("C01O",2,"C01M", 0.,0.,+zfpos, 0,"ONLY");
167 gMC->Gspos("C02O",1,"C02M", 0.,0.,-zfpos, 0,"ONLY");
168 gMC->Gspos("C02O",2,"C02M", 0.,0.,+zfpos, 0,"ONLY");
171 tpar[0]= iChamber->RInner()-dframep1;
172 tpar[1]= iChamber->RInner();
174 gMC->Gsvolu("C01I", "TUBE", idAlu1, tpar, 3);
175 gMC->Gsvolu("C02I", "TUBE", idAlu1, tpar, 3);
177 gMC->Gspos("C01I",1,"C01M", 0.,0.,-zfpos, 0,"ONLY");
178 gMC->Gspos("C01I",2,"C01M", 0.,0.,+zfpos, 0,"ONLY");
179 gMC->Gspos("C02I",1,"C02M", 0.,0.,-zfpos, 0,"ONLY");
180 gMC->Gspos("C02I",2,"C02M", 0.,0.,+zfpos, 0,"ONLY");
185 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
186 bpar[1] = dframep1/2;
188 gMC->Gsvolu("C01B", "BOX", idAlu1, bpar, 3);
189 gMC->Gsvolu("C02B", "BOX", idAlu1, bpar, 3);
191 gMC->Gspos("C01B",1,"C01M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
192 idrotm[1100],"ONLY");
193 gMC->Gspos("C01B",2,"C01M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
194 idrotm[1100],"ONLY");
195 gMC->Gspos("C01B",3,"C01M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
196 idrotm[1101],"ONLY");
197 gMC->Gspos("C01B",4,"C01M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
198 idrotm[1101],"ONLY");
199 gMC->Gspos("C01B",5,"C01M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
200 idrotm[1100],"ONLY");
201 gMC->Gspos("C01B",6,"C01M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
202 idrotm[1100],"ONLY");
203 gMC->Gspos("C01B",7,"C01M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
204 idrotm[1101],"ONLY");
205 gMC->Gspos("C01B",8,"C01M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
206 idrotm[1101],"ONLY");
208 gMC->Gspos("C02B",1,"C02M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
209 idrotm[1100],"ONLY");
210 gMC->Gspos("C02B",2,"C02M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
211 idrotm[1100],"ONLY");
212 gMC->Gspos("C02B",3,"C02M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
213 idrotm[1101],"ONLY");
214 gMC->Gspos("C02B",4,"C02M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
215 idrotm[1101],"ONLY");
216 gMC->Gspos("C02B",5,"C02M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
217 idrotm[1100],"ONLY");
218 gMC->Gspos("C02B",6,"C02M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
219 idrotm[1100],"ONLY");
220 gMC->Gspos("C02B",7,"C02M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
221 idrotm[1101],"ONLY");
222 gMC->Gspos("C02B",8,"C02M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
223 idrotm[1101],"ONLY");
226 // Chamber Material represented by Alu sheet
227 tpar[0]= iChamber->RInner();
228 tpar[1]= iChamber->ROuter();
229 tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
230 gMC->Gsvolu("C01A", "TUBE", idAlu2, tpar, 3);
231 gMC->Gsvolu("C02A", "TUBE",idAlu2, tpar, 3);
232 gMC->Gspos("C01A", 1, "C01M", 0., 0., 0., 0, "ONLY");
233 gMC->Gspos("C02A", 1, "C02M", 0., 0., 0., 0, "ONLY");
236 // tpar[2] = iChamber->fdGas;
237 tpar[2] = iChamber->fdGas/2;
238 gMC->Gsvolu("C01G", "TUBE", idtmed[1108], tpar, 3);
239 gMC->Gsvolu("C02G", "TUBE", idtmed[1108], tpar, 3);
240 gMC->Gspos("C01G", 1, "C01A", 0., 0., 0., 0, "ONLY");
241 gMC->Gspos("C02G", 1, "C02A", 0., 0., 0., 0, "ONLY");
243 // Frame Crosses to be placed inside gas
246 dr = (iChamber->ROuter() - iChamber->RInner());
247 bpar[0] = TMath::Sqrt(dr*dr-dframep1*dframep1/4)/2;
248 bpar[1] = dframep1/2;
249 bpar[2] = iChamber->fdGas/2;
250 gMC->Gsvolu("C01F", "BOX", idAlu1, bpar, 3);
251 gMC->Gsvolu("C02F", "BOX", idAlu1, bpar, 3);
253 gMC->Gspos("C01F",1,"C01G", +iChamber->RInner()+bpar[0] , 0, 0,
254 idrotm[1100],"ONLY");
255 gMC->Gspos("C01F",2,"C01G", -iChamber->RInner()-bpar[0] , 0, 0,
256 idrotm[1100],"ONLY");
257 gMC->Gspos("C01F",3,"C01G", 0, +iChamber->RInner()+bpar[0] , 0,
258 idrotm[1101],"ONLY");
259 gMC->Gspos("C01F",4,"C01G", 0, -iChamber->RInner()-bpar[0] , 0,
260 idrotm[1101],"ONLY");
262 gMC->Gspos("C02F",1,"C02G", +iChamber->RInner()+bpar[0] , 0, 0,
263 idrotm[1100],"ONLY");
264 gMC->Gspos("C02F",2,"C02G", -iChamber->RInner()-bpar[0] , 0, 0,
265 idrotm[1100],"ONLY");
266 gMC->Gspos("C02F",3,"C02G", 0, +iChamber->RInner()+bpar[0] , 0,
267 idrotm[1101],"ONLY");
268 gMC->Gspos("C02F",4,"C02G", 0, -iChamber->RInner()-bpar[0] , 0,
269 idrotm[1101],"ONLY");
274 //********************************************************************
276 //********************************************************************
277 iChamber=(AliMUONchamber*) (*fChambers)[2];
278 zpos1=iChamber->ZPosition()-dstation[1]/2;
279 zpos2=zpos1+dstation[1];
280 zfpos=-(iChamber->fdGas+dframez)/2;
284 tpar[0] = iChamber->RInner()-dframep;
285 tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
286 //tpar[2] = dstation[1]/2;
287 tpar[2] = dstation[1]/4;
289 gMC->Gsvolu("C03M", "TUBE", idAir, tpar, 3);
290 gMC->Gsvolu("C04M", "TUBE", idAir, tpar, 3);
291 gMC->Gspos("C03M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
292 gMC->Gspos("C04M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
299 pgpar[4] = -dframez/2;
300 pgpar[5] = iChamber->ROuter();
301 pgpar[6] = pgpar[5]+dframep;
302 pgpar[7] = +dframez/2;
305 gMC->Gsvolu("C03O", "PGON", idAlu1, pgpar, 10);
306 gMC->Gsvolu("C04O", "PGON", idAlu1, pgpar, 10);
307 gMC->Gspos("C03O",1,"C03M", 0.,0.,-zfpos, 0,"ONLY");
308 gMC->Gspos("C03O",2,"C03M", 0.,0.,+zfpos, 0,"ONLY");
309 gMC->Gspos("C04O",1,"C04M", 0.,0.,-zfpos, 0,"ONLY");
310 gMC->Gspos("C04O",2,"C04M", 0.,0.,+zfpos, 0,"ONLY");
313 tpar[0]= iChamber->RInner()-dframep;
314 tpar[1]= iChamber->RInner();
316 gMC->Gsvolu("C03I", "TUBE", idAlu1, tpar, 3);
317 gMC->Gsvolu("C04I", "TUBE", idAlu1, tpar, 3);
319 gMC->Gspos("C03I",1,"C03M", 0.,0.,-zfpos, 0,"ONLY");
320 gMC->Gspos("C03I",2,"C03M", 0.,0.,+zfpos, 0,"ONLY");
321 gMC->Gspos("C04I",1,"C04M", 0.,0.,-zfpos, 0,"ONLY");
322 gMC->Gspos("C04I",2,"C04M", 0.,0.,+zfpos, 0,"ONLY");
327 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
330 gMC->Gsvolu("C03B", "BOX", idAlu1, bpar, 3);
331 gMC->Gsvolu("C04B", "BOX", idAlu1, bpar, 3);
333 gMC->Gspos("C03B",1,"C03M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
334 idrotm[1100],"ONLY");
335 gMC->Gspos("C03B",2,"C03M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
336 idrotm[1100],"ONLY");
337 gMC->Gspos("C03B",3,"C03M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
338 idrotm[1101],"ONLY");
339 gMC->Gspos("C03B",4,"C03M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
340 idrotm[1101],"ONLY");
341 gMC->Gspos("C03B",5,"C03M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
342 idrotm[1100],"ONLY");
343 gMC->Gspos("C03B",6,"C03M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
344 idrotm[1100],"ONLY");
345 gMC->Gspos("C03B",7,"C03M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
346 idrotm[1101],"ONLY");
347 gMC->Gspos("C03B",8,"C03M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
348 idrotm[1101],"ONLY");
350 gMC->Gspos("C04B",1,"C04M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
351 idrotm[1100],"ONLY");
352 gMC->Gspos("C04B",2,"C04M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
353 idrotm[1100],"ONLY");
354 gMC->Gspos("C04B",3,"C04M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
355 idrotm[1101],"ONLY");
356 gMC->Gspos("C04B",4,"C04M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
357 idrotm[1101],"ONLY");
358 gMC->Gspos("C04B",5,"C04M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
359 idrotm[1100],"ONLY");
360 gMC->Gspos("C04B",6,"C04M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
361 idrotm[1100],"ONLY");
362 gMC->Gspos("C04B",7,"C04M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
363 idrotm[1101],"ONLY");
364 gMC->Gspos("C04B",8,"C04M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
365 idrotm[1101],"ONLY");
368 // Chamber Material represented by Alu sheet
369 tpar[0]= iChamber->RInner();
370 tpar[1]= iChamber->ROuter();
371 tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
372 gMC->Gsvolu("C03A", "TUBE", idAlu2, tpar, 3);
373 gMC->Gsvolu("C04A", "TUBE", idAlu2, tpar, 3);
374 gMC->Gspos("C03A", 1, "C03M", 0., 0., 0., 0, "ONLY");
375 gMC->Gspos("C04A", 1, "C04M", 0., 0., 0., 0, "ONLY");
378 // tpar[2] = iChamber->fdGas;
379 tpar[2] = iChamber->fdGas/2;
380 gMC->Gsvolu("C03G", "TUBE", idGas, tpar, 3);
381 gMC->Gsvolu("C04G", "TUBE", idGas, tpar, 3);
382 gMC->Gspos("C03G", 1, "C03A", 0., 0., 0., 0, "ONLY");
383 gMC->Gspos("C04G", 1, "C04A", 0., 0., 0., 0, "ONLY");
387 // Frame Crosses to be placed inside gas
388 dr = (iChamber->ROuter() - iChamber->RInner());
389 bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
391 bpar[2] = iChamber->fdGas/2;
392 gMC->Gsvolu("C03F", "BOX", idAlu1, bpar, 3);
393 gMC->Gsvolu("C04F", "BOX", idAlu1, bpar, 3);
395 gMC->Gspos("C03F",1,"C03G", +iChamber->RInner()+bpar[0] , 0, 0,
396 idrotm[1100],"ONLY");
397 gMC->Gspos("C03F",2,"C03G", -iChamber->RInner()-bpar[0] , 0, 0,
398 idrotm[1100],"ONLY");
399 gMC->Gspos("C03F",3,"C03G", 0, +iChamber->RInner()+bpar[0] , 0,
400 idrotm[1101],"ONLY");
401 gMC->Gspos("C03F",4,"C03G", 0, -iChamber->RInner()-bpar[0] , 0,
402 idrotm[1101],"ONLY");
404 gMC->Gspos("C04F",1,"C04G", +iChamber->RInner()+bpar[0] , 0, 0,
405 idrotm[1100],"ONLY");
406 gMC->Gspos("C04F",2,"C04G", -iChamber->RInner()-bpar[0] , 0, 0,
407 idrotm[1100],"ONLY");
408 gMC->Gspos("C04F",3,"C04G", 0, +iChamber->RInner()+bpar[0] , 0,
409 idrotm[1101],"ONLY");
410 gMC->Gspos("C04F",4,"C04G", 0, -iChamber->RInner()-bpar[0] , 0,
411 idrotm[1101],"ONLY");
416 //********************************************************************
418 //********************************************************************
420 iChamber=(AliMUONchamber*) (*fChambers)[4];
421 zpos1=iChamber->ZPosition(); // 975-13.75
422 zpos2=zpos1 // +dstation;
426 tpar[0] = iChamber->RInner()-dframep;
427 tpar[1]= TMath::Sqrt((iChamber->ROuter()+dframep)*(iChamber->ROuter()+dframep) + dframep*dframep) ;
431 gMC->Gsvolu("C05M", "TUBE", idAir, tpar, 3);
432 gMC->Gsvolu("C06M", "TUBE", idAir, tpar, 3);
433 gMC->Gspos("C05M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
434 gMC->Gspos("C06M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
436 // Mother volume for one quadrant
439 tspar[2]= // dframez;
441 tspar[3] = 0.-TMath::ATan2(dframep/2.,iChamber->RInner()-dframep)*180/kPI;
442 tspar[4] = 90.+TMath::ATan2(dframep/2,iChamber->RInner()-dframep)*180/kPI;
443 gMC->Gsvolu("C05Q", "TUBS", idAir, tspar, 5);
444 gMC->Gsvolu("C06Q", "TUBS", idAir, tspar, 5);
445 // Position the four quadrants
446 gMC->Gspos("C05Q",1,"C05M", 0., 0., 5.325, idrotm[1100], "ONLY");
447 gMC->Gspos("C05Q",2,"C05M", 0., 0.,-5.325, idrotm[1101], "ONLY");
448 gMC->Gspos("C05Q",3,"C05M", 0., 0., 5.325, idrotm[1102], "ONLY");
449 gMC->Gspos("C05Q",4,"C05M", 0., 0.,-5.325, idrotm[1103], "ONLY");
451 gMC->Gspos("C06Q",1,"C06M", 0., 0., 5.325, idrotm[1100], "ONLY");
452 gMC->Gspos("C06Q",2,"C06M", 0., 0.,-5.325, idrotm[1101], "ONLY");
453 gMC->Gspos("C06Q",3,"C06M", 0., 0., 5.325, idrotm[1102], "ONLY");
454 gMC->Gspos("C06Q",4,"C06M", 0., 0.,-5.325, idrotm[1103], "ONLY");
457 tspar[0]= iChamber->ROuter();
458 tspar[1]= iChamber->ROuter()+dframep;
461 gMC->Gsvolu("C05O", "TUBS", idAir, tspar, 5);
462 gMC->Gsvolu("C06O", "TUBS", idAir, tspar, 5);
463 gMC->Gspos("C05O",1,"C05Q", 0.,0.,0., 0,"ONLY");
464 gMC->Gspos("C06O",1,"C06Q", 0.,0.,0., 0,"ONLY");
467 tspar[0]= iChamber->RInner()-dframep;
468 tspar[1]= iChamber->RInner();
469 gMC->Gsvolu("C05I", "TUBS", idAir, tspar, 5);
470 gMC->Gsvolu("C06I", "TUBS", idAir, tspar, 5);
471 gMC->Gspos("C05I",1,"C05Q", 0.,0.,0., 0,"ONLY");
472 gMC->Gspos("C06I",1,"C06Q", 0.,0.,0., 0,"ONLY");
474 // Boundary half frame
475 bpar[0] = (iChamber->ROuter() +dframep*2 - iChamber->RInner())/2;
478 gMC->Gsvolu("C05B", "BOX", idAlu1, bpar, 3);
479 gMC->Gsvolu("C06B", "BOX", idAlu1, bpar, 3);
481 gMC->Gspos("C05B",1,"C05Q", iChamber->RInner()+bpar[0] ,-bpar[1],0., idrotm[1100],"ONLY");
482 gMC->Gspos("C05B",2,"C05Q", -bpar[1],iChamber->RInner()+bpar[0] ,0., idrotm[1101],"ONLY");
483 gMC->Gspos("C06B",1,"C06Q", iChamber->RInner()+bpar[0] ,-bpar[1],0., idrotm[1100],"ONLY");
484 gMC->Gspos("C06B",2,"C06Q", -bpar[1],iChamber->RInner()+bpar[0] ,0., idrotm[1101],"ONLY");
486 // Boundary second half frame (should not overlapp with sensitive surface, nor frames)
487 // Effective outer radius due to circle effect
489 iChamber->ROuter()*iChamber->ROuter() - dframep*dframep );
490 bpar[0] = (rMax - iChamber->RInner() ) /2;
491 bpar[2] = (5.325- (0.055 + 0.325)) / 2;
492 gMC->Gsvolu("C05H", "BOX", idAlu1, bpar, 3);
493 gMC->Gsvolu("C06H", "BOX", idAlu1, bpar, 3);
495 gMC->Gspos("C05H",1,"C05Q", rMin+bpar[0],bpar[1], 0.055+0.325+bpar[2] , idrotm[1100],"ONLY");
496 gMC->Gspos("C05H",2,"C05Q", rMin+bpar[0],bpar[1],-(0.055+0.325+bpar[2]), idrotm[1100],"ONLY");
497 gMC->Gspos("C05H",3,"C05Q", bpar[1],rMin+bpar[0], 0.055+0.325+bpar[2] , idrotm[1101],"ONLY");
498 gMC->Gspos("C05H",4,"C05Q", bpar[1],rMin+bpar[0],-(0.055+0.325+bpar[2]), idrotm[1101],"ONLY");
499 gMC->Gspos("C06H",1,"C06Q", rMin+bpar[0],bpar[1], 0.055+0.325+bpar[2] , idrotm[1100],"ONLY");
500 gMC->Gspos("C06H",2,"C06Q", rMin+bpar[0],bpar[1],-(0.055+0.325+bpar[2]), idrotm[1100],"ONLY");
501 gMC->Gspos("C06H",3,"C06Q", bpar[1],rMin+bpar[0], 0.055+0.325+bpar[2] , idrotm[1101],"ONLY");
502 gMC->Gspos("C06H",4,"C06Q", bpar[1],rMin+bpar[0],-(0.055+0.325+bpar[2]), idrotm[1101],"ONLY");
504 // Chamber Material represented by Alu sheet
505 // tspar[2] = (iChamber->fdAlu)+(iChamber->fdGas);
506 tspar[0]= iChamber->RInner();
507 tspar[1]= iChamber->ROuter();
508 tspar[2] = 0.055 + 0.325;
509 gMC->Gsvolu("C05A", "TUBS", idAlu2, tspar, 5);
510 gMC->Gsvolu("C06A", "TUBS", idAlu2, tspar, 5);
511 gMC->Gspos("C05A", 1, "C05Q", 0., 0., 0., 0, "ONLY");
512 gMC->Gspos("C06A", 1, "C06Q", 0., 0., 0., 0, "ONLY");
515 // tpar[2] = iChamber->fdGas;
517 gMC->Gsvolu("C05G", "TUBS", idGas, tspar, 5);
518 gMC->Gsvolu("C06G", "TUBS", idGas, tspar, 5);
519 gMC->Gspos("C05G", 1, "C05A", 0., 0., 0., 0, "ONLY");
520 gMC->Gspos("C06G", 1, "C06A", 0., 0., 0., 0, "ONLY");
522 // Overwrite sensitive volume with ALU
523 // Overwrite Gaz volume
525 gMC->Gsvolu("C05Z", "BOX", idAlu1, bpar, 3);
526 gMC->Gsvolu("C06Z", "BOX", idAlu1, bpar, 3);
527 gMC->Gspos("C05Z",1,"C05G", rMin+bpar[0] ,bpar[1],0., idrotm[1100],"ONLY");
528 gMC->Gspos("C05Z",2,"C05G", bpar[1], rMin+bpar[0] ,0., idrotm[1101],"ONLY");
529 gMC->Gspos("C06Z",1,"C06G", rMin+bpar[0] ,bpar[1],0., idrotm[1100],"ONLY");
530 gMC->Gspos("C06Z",2,"C06G", bpar[1], rMin+bpar[0] ,0., idrotm[1101],"ONLY");
532 //********************************************************************
534 //********************************************************************
535 iChamber=(AliMUONchamber*) (*fChambers)[4];
536 zpos1=iChamber->ZPosition()-dstation[2]/2;
537 zpos2=zpos1+dstation[2];
538 zfpos= // -(iChamber->fdGas+dframez)/2;
542 tpar[0] = iChamber->RInner()-dframep;
543 tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
544 tpar[2] = // dstation[3]/2;
546 gMC->Gsvolu("C05M", "TUBE", idAir, tpar, 3);
547 gMC->Gsvolu("C06M", "TUBE", idAir, tpar, 3);
548 gMC->Gspos("C05M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
549 gMC->Gspos("C06M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
556 pgpar[4] = // -dframez/2;
558 pgpar[5] = iChamber->ROuter();
559 pgpar[6] = pgpar[5]+dframep;
560 pgpar[7] = // +dframez/2;
564 gMC->Gsvolu("C05O", "PGON", idAlu1, pgpar, 10);
565 gMC->Gsvolu("C06O", "PGON", idAlu1, pgpar, 10);
566 gMC->Gspos("C05O",1,"C05M", 0.,0.,-zfpos, 0,"ONLY");
567 gMC->Gspos("C05O",2,"C05M", 0.,0.,+zfpos, 0,"ONLY");
568 gMC->Gspos("C06O",1,"C06M", 0.,0.,-zfpos, 0,"ONLY");
569 gMC->Gspos("C06O",2,"C06M", 0.,0.,+zfpos, 0,"ONLY");
572 tpar[0]= iChamber->RInner()-dframep;
573 tpar[1]= iChamber->RInner();
574 tpar[2]= // dframez/2;
576 gMC->Gsvolu("C05I", "TUBE", idAlu1, tpar, 3);
577 gMC->Gsvolu("C06I", "TUBE", idAlu1, tpar, 3);
579 gMC->Gspos("C05I",1,"C05M", 0.,0.,-zfpos, 0,"ONLY");
580 gMC->Gspos("C05I",2,"C05M", 0.,0.,+zfpos, 0,"ONLY");
581 gMC->Gspos("C06I",1,"C06M", 0.,0.,-zfpos, 0,"ONLY");
582 gMC->Gspos("C06I",2,"C06M", 0.,0.,+zfpos, 0,"ONLY");
586 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
588 bpar[2] = // dframez/2;
590 gMC->Gsvolu("C05B", "BOX", idAlu1, bpar, 3);
591 gMC->Gsvolu("C06B", "BOX", idAlu1, bpar, 3);
593 gMC->Gspos("C05B",1,"C05M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
594 idrotm[1100],"ONLY");
595 gMC->Gspos("C05B",2,"C05M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
596 idrotm[1100],"ONLY");
597 gMC->Gspos("C05B",3,"C05M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
598 idrotm[1101],"ONLY");
599 gMC->Gspos("C05B",4,"C05M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
600 idrotm[1101],"ONLY");
601 gMC->Gspos("C05B",5,"C05M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
602 idrotm[1100],"ONLY");
603 gMC->Gspos("C05B",6,"C05M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
604 idrotm[1100],"ONLY");
605 gMC->Gspos("C05B",7,"C05M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
606 idrotm[1101],"ONLY");
607 gMC->Gspos("C05B",8,"C05M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
608 idrotm[1101],"ONLY");
610 gMC->Gspos("C06B",1,"C06M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
611 idrotm[1100],"ONLY");
612 gMC->Gspos("C06B",2,"C06M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
613 idrotm[1100],"ONLY");
614 gMC->Gspos("C06B",3,"C06M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
615 idrotm[1101],"ONLY");
616 gMC->Gspos("C06B",4,"C06M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
617 idrotm[1101],"ONLY");
618 gMC->Gspos("C06B",5,"C06M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
619 idrotm[1100],"ONLY");
620 gMC->Gspos("C06B",6,"C06M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
621 idrotm[1100],"ONLY");
622 gMC->Gspos("C06B",7,"C06M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
623 idrotm[1101],"ONLY");
624 gMC->Gspos("C06B",8,"C06M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
625 idrotm[1101],"ONLY");
630 // Chamber Material represented by Alu sheet
631 tpar[0]= iChamber->RInner();
632 tpar[1]= iChamber->ROuter();
633 tpar[2] = // (iChamber->fdGas+iChamber->fdAlu)/2;
635 gMC->Gsvolu("C05A", "TUBE", idAlu2, tpar, 3);
636 gMC->Gsvolu("C06A", "TUBE", idAlu2, tpar, 3);
637 gMC->Gspos("C05A", 1, "C05M", 0., 0., 0., 0, "ONLY");
638 gMC->Gspos("C06A", 1, "C06M", 0., 0., 0., 0, "ONLY");
641 tpar[2] = // iChamber->fdGas/2;
643 gMC->Gsvolu("C05G", "TUBE", idGas, tpar, 3);
644 gMC->Gsvolu("C06G", "TUBE", idGas, tpar, 3);
645 gMC->Gspos("C05G", 1, "C05A", 0., 0., 0., 0, "ONLY");
646 gMC->Gspos("C06G", 1, "C06A", 0., 0., 0., 0, "ONLY");
648 // Frame Crosses to be placed inside gas
650 dr = (iChamber->ROuter() - iChamber->RInner());
651 bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
653 bpar[2] = // iChamber->fdGas/2;
655 gMC->Gsvolu("C05F", "BOX", idAlu1, bpar, 3);
656 gMC->Gsvolu("C06F", "BOX", idAlu1, bpar, 3);
658 gMC->Gspos("C05F",1,"C05G", +iChamber->RInner()+bpar[0] , 0, 0,
659 idrotm[1100],"ONLY");
660 gMC->Gspos("C05F",2,"C05G", -iChamber->RInner()-bpar[0] , 0, 0,
661 idrotm[1100],"ONLY");
662 gMC->Gspos("C05F",3,"C05G", 0, +iChamber->RInner()+bpar[0] , 0,
663 idrotm[1101],"ONLY");
664 gMC->Gspos("C05F",4,"C05G", 0, -iChamber->RInner()-bpar[0] , 0,
665 idrotm[1101],"ONLY");
667 gMC->Gspos("C06F",1,"C06G", +iChamber->RInner()+bpar[0] , 0, 0,
668 idrotm[1100],"ONLY");
669 gMC->Gspos("C06F",2,"C06G", -iChamber->RInner()-bpar[0] , 0, 0,
670 idrotm[1100],"ONLY");
671 gMC->Gspos("C06F",3,"C06G", 0, +iChamber->RInner()+bpar[0] , 0,
672 idrotm[1101],"ONLY");
673 gMC->Gspos("C06F",4,"C06G", 0, -iChamber->RInner()-bpar[0] , 0,
674 idrotm[1101],"ONLY");
679 //********************************************************************
681 //********************************************************************
682 iChamber=(AliMUONchamber*) (*fChambers)[6];
683 zpos1=iChamber->ZPosition()-dstation[3]/2;
684 zpos2=zpos1+dstation[3];
685 zfpos=-(iChamber->fdGas+dframez)/2;
689 tpar[0] = iChamber->RInner()-dframep;
690 tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
691 //tpar[2] = dstation[3]/2;
692 tpar[2] = dstation[3]/4;
694 gMC->Gsvolu("C07M", "TUBE", idAir, tpar, 3);
695 gMC->Gsvolu("C08M", "TUBE", idAir, tpar, 3);
696 gMC->Gspos("C07M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
697 gMC->Gspos("C08M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
704 pgpar[4] = -dframez/2;
705 pgpar[5] = iChamber->ROuter();
706 pgpar[6] = pgpar[5]+dframep;
707 pgpar[7] = +dframez/2;
710 gMC->Gsvolu("C07O", "PGON", idAlu1, pgpar, 10);
711 gMC->Gsvolu("C08O", "PGON", idAlu1, pgpar, 10);
712 gMC->Gspos("C07O",1,"C07M", 0.,0.,-zfpos, 0,"ONLY");
713 gMC->Gspos("C07O",2,"C07M", 0.,0.,+zfpos, 0,"ONLY");
714 gMC->Gspos("C08O",1,"C08M", 0.,0.,-zfpos, 0,"ONLY");
715 gMC->Gspos("C08O",2,"C08M", 0.,0.,+zfpos, 0,"ONLY");
718 tpar[0]= iChamber->RInner()-dframep;
719 tpar[1]= iChamber->RInner();
721 gMC->Gsvolu("C07I", "TUBE", idAlu1, tpar, 3);
722 gMC->Gsvolu("C08I", "TUBE", idAlu1, tpar, 3);
724 gMC->Gspos("C07I",1,"C07M", 0.,0.,-zfpos, 0,"ONLY");
725 gMC->Gspos("C07I",2,"C07M", 0.,0.,+zfpos, 0,"ONLY");
726 gMC->Gspos("C08I",1,"C08M", 0.,0.,-zfpos, 0,"ONLY");
727 gMC->Gspos("C08I",2,"C08M", 0.,0.,+zfpos, 0,"ONLY");
731 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
734 gMC->Gsvolu("C07B", "BOX", idAlu1, bpar, 3);
735 gMC->Gsvolu("C08B", "BOX", idAlu1, bpar, 3);
737 gMC->Gspos("C07B",1,"C07M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
738 idrotm[1100],"ONLY");
739 gMC->Gspos("C07B",2,"C07M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
740 idrotm[1100],"ONLY");
741 gMC->Gspos("C07B",3,"C07M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
742 idrotm[1101],"ONLY");
743 gMC->Gspos("C07B",4,"C07M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
744 idrotm[1101],"ONLY");
745 gMC->Gspos("C07B",5,"C07M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
746 idrotm[1100],"ONLY");
747 gMC->Gspos("C07B",6,"C07M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
748 idrotm[1100],"ONLY");
749 gMC->Gspos("C07B",7,"C07M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
750 idrotm[1101],"ONLY");
751 gMC->Gspos("C07B",8,"C07M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
752 idrotm[1101],"ONLY");
754 gMC->Gspos("C08B",1,"C08M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
755 idrotm[1100],"ONLY");
756 gMC->Gspos("C08B",2,"C08M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
757 idrotm[1100],"ONLY");
758 gMC->Gspos("C08B",3,"C08M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
759 idrotm[1101],"ONLY");
760 gMC->Gspos("C08B",4,"C08M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
761 idrotm[1101],"ONLY");
762 gMC->Gspos("C08B",5,"C08M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
763 idrotm[1100],"ONLY");
764 gMC->Gspos("C08B",6,"C08M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
765 idrotm[1100],"ONLY");
766 gMC->Gspos("C08B",7,"C08M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
767 idrotm[1101],"ONLY");
768 gMC->Gspos("C08B",8,"C08M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
769 idrotm[1101],"ONLY");
774 // Chamber Material represented by Alu sheet
775 tpar[0]= iChamber->RInner();
776 tpar[1]= iChamber->ROuter();
777 tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
778 gMC->Gsvolu("C07A", "TUBE", idAlu2, tpar, 3);
779 gMC->Gsvolu("C08A", "TUBE", idAlu2, tpar, 3);
780 gMC->Gspos("C07A", 1, "C07M", 0., 0., 0., 0, "ONLY");
781 gMC->Gspos("C08A", 1, "C08M", 0., 0., 0., 0, "ONLY");
784 // tpar[2] = iChamber->fdGas;
785 tpar[2] = iChamber->fdGas/2;
786 gMC->Gsvolu("C07G", "TUBE", idGas, tpar, 3);
787 gMC->Gsvolu("C08G", "TUBE", idGas, tpar, 3);
788 gMC->Gspos("C07G", 1, "C07A", 0., 0., 0., 0, "ONLY");
789 gMC->Gspos("C08G", 1, "C08A", 0., 0., 0., 0, "ONLY");
791 // Frame Crosses to be placed inside gas
793 dr = (iChamber->ROuter() - iChamber->RInner());
794 bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
796 bpar[2] = iChamber->fdGas/2;
797 gMC->Gsvolu("C07F", "BOX", idAlu1, bpar, 3);
798 gMC->Gsvolu("C08F", "BOX", idAlu1, bpar, 3);
800 gMC->Gspos("C07F",1,"C07G", +iChamber->RInner()+bpar[0] , 0, 0,
801 idrotm[1100],"ONLY");
802 gMC->Gspos("C07F",2,"C07G", -iChamber->RInner()-bpar[0] , 0, 0,
803 idrotm[1100],"ONLY");
804 gMC->Gspos("C07F",3,"C07G", 0, +iChamber->RInner()+bpar[0] , 0,
805 idrotm[1101],"ONLY");
806 gMC->Gspos("C07F",4,"C07G", 0, -iChamber->RInner()-bpar[0] , 0,
807 idrotm[1101],"ONLY");
809 gMC->Gspos("C08F",1,"C08G", +iChamber->RInner()+bpar[0] , 0, 0,
810 idrotm[1100],"ONLY");
811 gMC->Gspos("C08F",2,"C08G", -iChamber->RInner()-bpar[0] , 0, 0,
812 idrotm[1100],"ONLY");
813 gMC->Gspos("C08F",3,"C08G", 0, +iChamber->RInner()+bpar[0] , 0,
814 idrotm[1101],"ONLY");
815 gMC->Gspos("C08F",4,"C08G", 0, -iChamber->RInner()-bpar[0] , 0,
816 idrotm[1101],"ONLY");
818 //********************************************************************
820 //********************************************************************
821 iChamber=(AliMUONchamber*) (*fChambers)[8];
822 zpos1=iChamber->ZPosition()-dstation[4]/2;
823 zpos2=zpos1+dstation[4];
824 zfpos=-(iChamber->fdGas+dframez)/2;
828 tpar[0] = iChamber->RInner()-dframep;
829 tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
830 //tpar[2] = dstation[4]/2;
831 tpar[2] = dstation[4]/4;
833 gMC->Gsvolu("C09M", "TUBE", idAir, tpar, 3);
834 gMC->Gsvolu("C10M", "TUBE", idAir, tpar, 3);
835 gMC->Gspos("C09M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
836 gMC->Gspos("C10M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
843 pgpar[4] = -dframez/2;
844 pgpar[5] = iChamber->ROuter();
845 pgpar[6] = pgpar[5]+dframep;
846 pgpar[7] = +dframez/2;
849 gMC->Gsvolu("C09O", "PGON", idAlu1, pgpar, 10);
850 gMC->Gsvolu("C10O", "PGON", idAlu1, pgpar, 10);
851 gMC->Gspos("C09O",1,"C09M", 0.,0.,-zfpos, 0,"ONLY");
852 gMC->Gspos("C09O",2,"C09M", 0.,0.,+zfpos, 0,"ONLY");
853 gMC->Gspos("C10O",1,"C10M", 0.,0.,-zfpos, 0,"ONLY");
854 gMC->Gspos("C10O",2,"C10M", 0.,0.,+zfpos, 0,"ONLY");
857 tpar[0]= iChamber->RInner()-dframep;
858 tpar[1]= iChamber->RInner();
860 gMC->Gsvolu("C09I", "TUBE", idAlu1, tpar, 3);
861 gMC->Gsvolu("C10I", "TUBE", idAlu1, tpar, 3);
863 gMC->Gspos("C09I",1,"C09M", 0.,0.,-zfpos, 0,"ONLY");
864 gMC->Gspos("C09I",2,"C09M", 0.,0.,+zfpos, 0,"ONLY");
865 gMC->Gspos("C10I",1,"C10M", 0.,0.,-zfpos, 0,"ONLY");
866 gMC->Gspos("C10I",2,"C10M", 0.,0.,+zfpos, 0,"ONLY");
872 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
875 gMC->Gsvolu("C09B", "BOX", idAlu1, bpar, 3);
876 gMC->Gsvolu("C10B", "BOX", idAlu1, bpar, 3);
878 gMC->Gspos("C09B",1,"C09M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
879 idrotm[1100],"ONLY");
880 gMC->Gspos("C09B",2,"C09M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
881 idrotm[1100],"ONLY");
882 gMC->Gspos("C09B",3,"C09M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
883 idrotm[1101],"ONLY");
884 gMC->Gspos("C09B",4,"C09M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
885 idrotm[1101],"ONLY");
886 gMC->Gspos("C09B",5,"C09M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
887 idrotm[1100],"ONLY");
888 gMC->Gspos("C09B",6,"C09M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
889 idrotm[1100],"ONLY");
890 gMC->Gspos("C09B",7,"C09M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
891 idrotm[1101],"ONLY");
892 gMC->Gspos("C09B",8,"C09M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
893 idrotm[1101],"ONLY");
895 gMC->Gspos("C10B",1,"C10M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
896 idrotm[1100],"ONLY");
897 gMC->Gspos("C10B",2,"C10M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
898 idrotm[1100],"ONLY");
899 gMC->Gspos("C10B",3,"C10M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
900 idrotm[1101],"ONLY");
901 gMC->Gspos("C10B",4,"C10M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
902 idrotm[1101],"ONLY");
903 gMC->Gspos("C10B",5,"C10M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
904 idrotm[1100],"ONLY");
905 gMC->Gspos("C10B",6,"C10M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
906 idrotm[1100],"ONLY");
907 gMC->Gspos("C10B",7,"C10M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
908 idrotm[1101],"ONLY");
909 gMC->Gspos("C10B",8,"C10M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
910 idrotm[1101],"ONLY");
915 // Chamber Material represented by Alu sheet
916 tpar[0]= iChamber->RInner();
917 tpar[1]= iChamber->ROuter();
918 tpar[2] = (iChamber->fdGas+iChamber->fdAlu)/2;
919 gMC->Gsvolu("C09A", "TUBE", idAlu2, tpar, 3);
920 gMC->Gsvolu("C10A", "TUBE", idAlu2, tpar, 3);
921 gMC->Gspos("C09A", 1, "C09M", 0., 0., 0., 0, "ONLY");
922 gMC->Gspos("C10A", 1, "C10M", 0., 0., 0., 0, "ONLY");
925 // tpar[2] = iChamber->fdGas;
926 tpar[2] = iChamber->fdGas/2;
927 gMC->Gsvolu("C09G", "TUBE", idGas, tpar, 3);
928 gMC->Gsvolu("C10G", "TUBE", idGas, tpar, 3);
929 gMC->Gspos("C09G", 1, "C09A", 0., 0., 0., 0, "ONLY");
930 gMC->Gspos("C10G", 1, "C10A", 0., 0., 0., 0, "ONLY");
932 // Frame Crosses to be placed inside gas
934 dr = (iChamber->ROuter() - iChamber->RInner());
935 bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
937 bpar[2] = iChamber->fdGas/2;
938 gMC->Gsvolu("C09F", "BOX", idAlu1, bpar, 3);
939 gMC->Gsvolu("C10F", "BOX", idAlu1, bpar, 3);
941 gMC->Gspos("C09F",1,"C09G", +iChamber->RInner()+bpar[0] , 0, 0,
942 idrotm[1100],"ONLY");
943 gMC->Gspos("C09F",2,"C09G", -iChamber->RInner()-bpar[0] , 0, 0,
944 idrotm[1100],"ONLY");
945 gMC->Gspos("C09F",3,"C09G", 0, +iChamber->RInner()+bpar[0] , 0,
946 idrotm[1101],"ONLY");
947 gMC->Gspos("C09F",4,"C09G", 0, -iChamber->RInner()-bpar[0] , 0,
948 idrotm[1101],"ONLY");
950 gMC->Gspos("C10F",1,"C10G", +iChamber->RInner()+bpar[0] , 0, 0,
951 idrotm[1100],"ONLY");
952 gMC->Gspos("C10F",2,"C10G", -iChamber->RInner()-bpar[0] , 0, 0,
953 idrotm[1100],"ONLY");
954 gMC->Gspos("C10F",3,"C10G", 0, +iChamber->RInner()+bpar[0] , 0,
955 idrotm[1101],"ONLY");
956 gMC->Gspos("C10F",4,"C10G", 0, -iChamber->RInner()-bpar[0] , 0,
957 idrotm[1101],"ONLY");
960 ///////////////////////////////////////
961 // GEOMETRY FOR THE TRIGGER CHAMBERS //
962 ///////////////////////////////////////
964 // Distance between planes inside each trigger station
965 const Float_t DTPLANES = 15.;
967 // Parameters of the Trigger Chambers
970 const Float_t X_MC1_MIN=38.;
971 const Float_t X_MC1_MED=51.;
972 const Float_t X_MC1_MAX=272.;
973 const Float_t Y_MC1_MIN=34.;
974 const Float_t Y_MC1_MAX=51.;
975 const Float_t R_MIN1=48.;
976 const Float_t R_MAX1=64.;
979 iChamber=(AliMUONchamber*) (*fChambers)[10];
980 zpos1=iChamber->ZPosition();
981 zpos2=zpos1+DTPLANES;
983 // Mother volume definition
984 tpar[0] = iChamber->RInner();
985 tpar[1] = iChamber->ROuter();
987 gMC->Gsvolu("CM11", "TUBE", idAir, tpar, 3);
988 gMC->Gsvolu("CM12", "TUBE", idAir, tpar, 3);
990 // Definition of the flange between the beam shielding and the RPC
995 gMC->Gsvolu("CF1A", "TUBE", idAlu1, tpar, 3); //Al
996 gMC->Gspos("CF1A", 1, "CM11", 0., 0., 0., 0, "MANY");
997 gMC->Gspos("CF1A", 2, "CM12", 0., 0., 0., 0, "MANY");
999 // Definition of prototype for chambers in the first plane
1005 gMC->Gsvolu("CC1A", "BOX ", idAlu1, tpar, 0); //Al
1006 gMC->Gsvolu("CB1A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
1007 gMC->Gsvolu("CG1A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
1013 const Float_t X_MC1A=X_MC1_MED+(X_MC1_MAX-X_MC1_MED)/2.;
1014 const Float_t Y_MC1A=0.;
1015 const Float_t Z_MC1A=0.;
1018 gMC->Gsposp("CG1A", 1, "CB1A", 0., 0., 0., 0, "ONLY",tpar,3);
1020 gMC->Gsposp("CB1A", 1, "CC1A", 0., 0., 0., 0, "ONLY",tpar,3);
1022 tpar[0] = (X_MC1_MAX-X_MC1_MED)/2.;
1023 tpar[1] = Y_MC1_MIN;
1024 gMC->Gsposp("CC1A", 1, "CM11",X_MC1A,Y_MC1A,Z_MC1A, 0, "ONLY", tpar, 3);
1025 gMC->Gsposp("CC1A", 2, "CM11",-X_MC1A,Y_MC1A,Z_MC1A, 0, "ONLY", tpar, 3);
1028 tpar[0] = (X_MC1_MAX-X_MC1_MIN)/2.;
1029 tpar[1] = (Y_MC1_MAX-Y_MC1_MIN)/2.;
1031 const Float_t X_MC1B=X_MC1_MIN+tpar[0];
1032 const Float_t Y_MC1B=Y_MC1_MIN+tpar[1];
1033 const Float_t Z_MC1B=0.;
1035 gMC->Gsposp("CC1A", 3, "CM11",X_MC1B,Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
1036 gMC->Gsposp("CC1A", 4, "CM11",-X_MC1B,Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
1037 gMC->Gsposp("CC1A", 5, "CM11",X_MC1B,-Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
1038 gMC->Gsposp("CC1A", 6, "CM11",-X_MC1B,-Y_MC1B,Z_MC1B, 0, "ONLY", tpar, 3);
1041 tpar[0] = X_MC1_MAX/2;
1042 tpar[1] = Y_MC1_MAX/2;
1044 const Float_t X_MC1C=tpar[0];
1045 const Float_t Y_MC1C=Y_MC1_MAX+tpar[1];
1046 const Float_t Z_MC1C=0.;
1048 gMC->Gsposp("CC1A", 7, "CM11",X_MC1C,Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
1049 gMC->Gsposp("CC1A", 8, "CM11",-X_MC1C,Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
1050 gMC->Gsposp("CC1A", 9, "CM11",X_MC1C,-Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
1051 gMC->Gsposp("CC1A", 10, "CM11",-X_MC1C,-Y_MC1C,Z_MC1C, 0, "ONLY", tpar, 3);
1054 tpar[0] = X_MC1_MAX/2.;
1055 tpar[1] = Y_MC1_MIN;
1057 const Float_t X_MC1D=tpar[0];
1058 const Float_t Z_MC1D=0.;
1060 Float_t Y_MC1D=4.*Y_MC1_MIN;
1061 gMC->Gsposp("CC1A", 11, "CM11",X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1062 gMC->Gsposp("CC1A", 12, "CM11",X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1063 gMC->Gsposp("CC1A", 13, "CM11",-X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1064 gMC->Gsposp("CC1A", 14, "CM11",-X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1066 Y_MC1D=6.*Y_MC1_MIN;
1067 gMC->Gsposp("CC1A", 15, "CM11",X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1068 gMC->Gsposp("CC1A", 16, "CM11",X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1069 gMC->Gsposp("CC1A", 17, "CM11",-X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1070 gMC->Gsposp("CC1A", 18, "CM11",-X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1072 Y_MC1D=8.*Y_MC1_MIN;
1073 gMC->Gsposp("CC1A", 19, "CM11",X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1074 gMC->Gsposp("CC1A", 20, "CM11",X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1075 gMC->Gsposp("CC1A", 21, "CM11",-X_MC1D,Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1076 gMC->Gsposp("CC1A", 22, "CM11",-X_MC1D,-Y_MC1D,Z_MC1D, 0, "ONLY", tpar, 3);
1078 // Positioning first plane in ALICE
1079 gMC->Gspos("CM11", 1, "ALIC", 0., 0., zpos1, 0, "ONLY");
1081 // End of geometry definition for the first plane
1083 // Station 1 - plan 2 - same RPCs as plan 1 ==> small non covered area
1084 // Y position moved (ratio zpos2/zpos1)
1085 const Float_t Z_1S2=zpos2/zpos1;
1087 // Definition of prototype for chambers in the second plane
1093 gMC->Gsvolu("CC2A", "BOX ", idAlu1, tpar, 0); //Al
1094 gMC->Gsvolu("CB2A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
1095 gMC->Gsvolu("CG2A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
1101 const Float_t X_MC2A=X_MC1A;
1102 const Float_t Y_MC2A=0.;
1103 const Float_t Z_MC2A=0.;
1106 gMC->Gsposp("CG2A", 1, "CB2A", 0., 0., 0., 0, "ONLY",tpar,3);
1108 gMC->Gsposp("CB2A", 1, "CC2A", 0., 0., 0., 0, "ONLY",tpar,3);
1110 tpar[0] = (X_MC1_MAX-X_MC1_MED)/2.;
1111 tpar[1] = Y_MC1_MIN;
1112 gMC->Gsposp("CC2A", 1, "CM12",X_MC2A,Y_MC2A,Z_MC2A, 0, "ONLY", tpar, 3);
1113 gMC->Gsposp("CC2A", 2, "CM12",-X_MC2A,Y_MC2A,Z_MC2A, 0, "ONLY", tpar, 3);
1116 tpar[0] = (X_MC1_MAX-X_MC1_MIN)/2.;
1117 tpar[1] = (Y_MC1_MAX-Y_MC1_MIN)/2.;
1119 const Float_t X_MC2B=X_MC1B;
1120 const Float_t Y_MC2B=2.*Y_MC1_MIN*Z_1S2-Y_MC1_MIN*1.5+Y_MC1_MAX*0.5;
1121 const Float_t Z_MC2B=0.;
1123 gMC->Gsposp("CC2A", 3, "CM12",X_MC2B,Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
1124 gMC->Gsposp("CC2A", 4, "CM12",-X_MC2B,Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
1125 gMC->Gsposp("CC2A", 5, "CM12",X_MC2B,-Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
1126 gMC->Gsposp("CC2A", 6, "CM12",-X_MC2B,-Y_MC2B,Z_MC2B, 0, "ONLY", tpar, 3);
1129 tpar[0] = X_MC1_MAX/2;
1130 tpar[1] = Y_MC1_MAX/2;
1132 const Float_t X_MC2C=X_MC1C;
1133 const Float_t Y_MC2C=2.*Y_MC1_MIN*Z_1S2-Y_MC1_MIN*2.+Y_MC1_MAX*1.5;
1134 const Float_t Z_MC2C=0.;
1136 gMC->Gsposp("CC2A", 7, "CM12",X_MC2C,Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
1137 gMC->Gsposp("CC2A", 8, "CM12",-X_MC2C,Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
1138 gMC->Gsposp("CC2A", 9, "CM12",X_MC2C,-Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
1139 gMC->Gsposp("CC2A", 10, "CM12",-X_MC2C,-Y_MC2C,Z_MC2C, 0, "ONLY", tpar, 3);
1142 tpar[0] = X_MC1_MAX/2.;
1143 tpar[1] = Y_MC1_MIN;
1145 const Float_t X_MC2D=X_MC1D;
1146 const Float_t Z_MC2D=0.;
1148 Float_t Y_MC2D=4.*Y_MC1_MIN*Z_1S2;
1149 gMC->Gsposp("CC2A", 11, "CM12",X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1150 gMC->Gsposp("CC2A", 12, "CM12",X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1151 gMC->Gsposp("CC2A", 13, "CM12",-X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1152 gMC->Gsposp("CC2A", 14, "CM12",-X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1154 Y_MC2D=6.*Y_MC1_MIN*Z_1S2;
1155 gMC->Gsposp("CC2A", 15, "CM12",X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1156 gMC->Gsposp("CC2A", 16, "CM12",X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1157 gMC->Gsposp("CC2A", 17, "CM12",-X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1158 gMC->Gsposp("CC2A", 18, "CM12",-X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1160 Y_MC2D=8.*Y_MC1_MIN*Z_1S2;
1161 gMC->Gsposp("CC2A", 19, "CM12",X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1162 gMC->Gsposp("CC2A", 20, "CM12",X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1163 gMC->Gsposp("CC2A", 21, "CM12",-X_MC2D,Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1164 gMC->Gsposp("CC2A", 22, "CM12",-X_MC2D,-Y_MC2D,Z_MC2D, 0, "ONLY", tpar, 3);
1166 gMC->Gspos("CM12", 1, "ALIC", 0., 0., zpos2, 0, "ONLY");
1169 iChamber=(AliMUONchamber*) (*fChambers)[12];
1170 Float_t zpos3=iChamber->ZPosition();
1171 Float_t zpos4=zpos3+DTPLANES;
1173 // Parameters of the Trigger Chambers
1175 const Float_t X_MC3_MIN=X_MC1_MIN*zpos3/zpos1;
1176 const Float_t X_MC3_MED=X_MC1_MED*zpos3/zpos1;
1177 const Float_t X_MC3_MAX=X_MC1_MAX*zpos3/zpos1;
1178 const Float_t Y_MC3_MIN=Y_MC1_MIN*zpos3/zpos1;
1179 const Float_t Y_MC3_MAX=Y_MC1_MAX*zpos3/zpos1;
1180 const Float_t R_MIN3=R_MIN1*zpos3/zpos1;
1181 const Float_t R_MAX3=R_MAX1*zpos3/zpos1;
1183 // Mother volume definition
1184 tpar[0] = iChamber->RInner();
1185 tpar[1] = iChamber->ROuter();
1187 gMC->Gsvolu("CM21", "TUBE", idAir, tpar, 3);
1188 gMC->Gsvolu("CM22", "TUBE", idAir, tpar, 3);
1190 // Definition of the flange between the beam shielding and the RPC
1195 gMC->Gsvolu("CF2A", "TUBE", idAlu1, tpar, 3); //Al
1196 gMC->Gspos("CF2A", 1, "CM21", 0., 0., 0., 0, "MANY");
1197 gMC->Gspos("CF2A", 2, "CM22", 0., 0., 0., 0, "MANY");
1199 // Definition of prototype for chambers in the third plane
1205 gMC->Gsvolu("CC3A", "BOX ", idAlu1, tpar, 0); //Al
1206 gMC->Gsvolu("CB3A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
1207 gMC->Gsvolu("CG3A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
1213 const Float_t X_MC3A=X_MC3_MED+(X_MC3_MAX-X_MC3_MED)/2.;
1214 const Float_t Y_MC3A=0.;
1215 const Float_t Z_MC3A=0.;
1218 gMC->Gsposp("CG3A", 1, "CB3A", 0., 0., 0., 0, "ONLY",tpar,3);
1220 gMC->Gsposp("CB3A", 1, "CC3A", 0., 0., 0., 0, "ONLY",tpar,3);
1221 tpar[0] = (X_MC3_MAX-X_MC3_MED)/2.;
1222 tpar[1] = Y_MC3_MIN;
1224 gMC->Gsposp("CC3A", 1, "CM21",X_MC3A,Y_MC3A,Z_MC3A, 0, "ONLY", tpar, 3);
1225 gMC->Gsposp("CC3A", 2, "CM21",-X_MC3A,Y_MC3A,Z_MC3A, 0, "ONLY", tpar, 3);
1228 tpar[0] = (X_MC3_MAX-X_MC3_MIN)/2.;
1229 tpar[1] = (Y_MC3_MAX-Y_MC3_MIN)/2.;
1231 const Float_t X_MC3B=X_MC3_MIN+tpar[0];
1232 const Float_t Y_MC3B=Y_MC3_MIN+tpar[1];
1233 const Float_t Z_MC3B=0.;
1235 gMC->Gsposp("CC3A", 3, "CM21",X_MC3B,Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
1236 gMC->Gsposp("CC3A", 4, "CM21",-X_MC3B,Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
1237 gMC->Gsposp("CC3A", 5, "CM21",X_MC3B,-Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
1238 gMC->Gsposp("CC3A", 6, "CM21",-X_MC3B,-Y_MC3B,Z_MC3B, 0, "ONLY", tpar, 3);
1241 tpar[0] = X_MC3_MAX/2.;
1242 tpar[1] = Y_MC3_MAX/2.;
1244 const Float_t X_MC3C=tpar[0];
1245 const Float_t Y_MC3C=Y_MC3_MAX+tpar[1];
1246 const Float_t Z_MC3C=0.;
1248 gMC->Gsposp("CC3A", 7, "CM21",X_MC3C,Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
1249 gMC->Gsposp("CC3A", 8, "CM21",-X_MC3C,Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
1250 gMC->Gsposp("CC3A", 9, "CM21",X_MC3C,-Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
1251 gMC->Gsposp("CC3A", 10, "CM21",-X_MC3C,-Y_MC3C,Z_MC3C, 0, "ONLY", tpar, 3);
1254 tpar[0] = X_MC3_MAX/2.;
1255 tpar[1] = Y_MC3_MIN;
1257 const Float_t X_MC3D=tpar[0];
1258 const Float_t Z_MC3D=0.;
1260 Float_t Y_MC3D=4.*Y_MC3_MIN;
1261 gMC->Gsposp("CC3A", 11, "CM21",X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1262 gMC->Gsposp("CC3A", 12, "CM21",X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1263 gMC->Gsposp("CC3A", 13, "CM21",-X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1264 gMC->Gsposp("CC3A", 14, "CM21",-X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1266 Y_MC3D=6.*Y_MC3_MIN;
1267 gMC->Gsposp("CC3A", 15, "CM21",X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1268 gMC->Gsposp("CC3A", 16, "CM21",X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1269 gMC->Gsposp("CC3A", 17, "CM21",-X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1270 gMC->Gsposp("CC3A", 18, "CM21",-X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1272 Y_MC3D=8.*Y_MC3_MIN;
1273 gMC->Gsposp("CC3A", 19, "CM21",X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1274 gMC->Gsposp("CC3A", 20, "CM21",X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1275 gMC->Gsposp("CC3A", 21, "CM21",-X_MC3D,Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1276 gMC->Gsposp("CC3A", 22, "CM21",-X_MC3D,-Y_MC3D,Z_MC3D, 0, "ONLY", tpar, 3);
1278 // Positioning third plane in ALICE
1279 gMC->Gspos("CM21", 1, "ALIC", 0., 0., zpos3, 0, "ONLY");
1281 // End of geometry definition for the third plane
1283 // Station 2 - plan 4 - same RPCs as plan 3 ==> small non covered area
1284 // Y position moved (ratio zpos4/zpos3)
1285 const Float_t Z_3S4=zpos4/zpos3;
1287 // Definition of prototype for chambers in the fourth plane
1293 gMC->Gsvolu("CC4A", "BOX ", idAlu1, tpar, 0); //Al
1294 gMC->Gsvolu("CB4A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
1295 gMC->Gsvolu("CG4A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
1301 const Float_t X_MC4A=X_MC3A;
1302 const Float_t Y_MC4A=0.;
1303 const Float_t Z_MC4A=0.;
1306 gMC->Gsposp("CG4A", 1, "CB4A", 0., 0., 0., 0, "ONLY",tpar,3);
1308 gMC->Gsposp("CB4A", 1, "CC4A", 0., 0., 0., 0, "ONLY",tpar,3);
1310 tpar[0] = (X_MC3_MAX-X_MC3_MED)/2.;
1311 tpar[1] = Y_MC3_MIN;
1312 gMC->Gsposp("CC4A", 1, "CM22",X_MC4A,Y_MC4A,Z_MC4A, 0, "ONLY", tpar, 3);
1313 gMC->Gsposp("CC4A", 2, "CM22",-X_MC4A,Y_MC4A,Z_MC4A, 0, "ONLY", tpar, 3);
1316 tpar[0] = (X_MC3_MAX-X_MC3_MIN)/2.;
1317 tpar[1] = (Y_MC3_MAX-Y_MC3_MIN)/2.;
1319 const Float_t X_MC4B=X_MC3B;
1320 const Float_t Y_MC4B=2.*Y_MC3_MIN*Z_3S4-Y_MC3_MIN*1.5+Y_MC3_MAX*0.5;
1321 const Float_t Z_MC4B=0.;
1323 gMC->Gsposp("CC4A", 3, "CM22",X_MC4B,Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
1324 gMC->Gsposp("CC4A", 4, "CM22",-X_MC4B,Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
1325 gMC->Gsposp("CC4A", 5, "CM22",X_MC4B,-Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
1326 gMC->Gsposp("CC4A", 6, "CM22",-X_MC4B,-Y_MC4B,Z_MC4B, 0, "ONLY", tpar, 3);
1329 tpar[0] = X_MC3_MAX/2;
1330 tpar[1] = Y_MC3_MAX/2;
1332 const Float_t X_MC4C=X_MC3C;
1333 const Float_t Y_MC4C=2.*Y_MC3_MIN*Z_3S4-Y_MC3_MIN*2.+Y_MC3_MAX*1.5;
1334 const Float_t Z_MC4C=0.;
1336 gMC->Gsposp("CC4A", 7, "CM22",X_MC4C,Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
1337 gMC->Gsposp("CC4A", 8, "CM22",-X_MC4C,Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
1338 gMC->Gsposp("CC4A", 9, "CM22",X_MC4C,-Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
1339 gMC->Gsposp("CC4A", 10, "CM22",-X_MC4C,-Y_MC4C,Z_MC4C, 0, "ONLY", tpar, 3);
1342 tpar[0] = X_MC3_MAX/2.;
1343 tpar[1] = Y_MC3_MIN;
1345 const Float_t X_MC4D=X_MC3D;
1346 const Float_t Z_MC4D=0.;
1348 Float_t Y_MC4D=4.*Y_MC3_MIN*Z_3S4;
1349 gMC->Gsposp("CC4A", 11, "CM22",X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1350 gMC->Gsposp("CC4A", 12, "CM22",X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1351 gMC->Gsposp("CC4A", 13, "CM22",-X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1352 gMC->Gsposp("CC4A", 14, "CM22",-X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1354 Y_MC4D=6.*Y_MC3_MIN*Z_3S4;
1355 gMC->Gsposp("CC4A", 15, "CM22",X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1356 gMC->Gsposp("CC4A", 16, "CM22",X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1357 gMC->Gsposp("CC4A", 17, "CM22",-X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1358 gMC->Gsposp("CC4A", 18, "CM22",-X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1360 Y_MC4D=8.*Y_MC3_MIN*Z_3S4;
1361 gMC->Gsposp("CC4A", 19, "CM22",X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1362 gMC->Gsposp("CC4A", 20, "CM22",X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1363 gMC->Gsposp("CC4A", 21, "CM22",-X_MC4D,Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1364 gMC->Gsposp("CC4A", 22, "CM22",-X_MC4D,-Y_MC4D,Z_MC4D, 0, "ONLY", tpar, 3);
1366 gMC->Gspos("CM22", 1, "ALIC", 0., 0., zpos4, 0, "ONLY");
1371 //___________________________________________
1372 void AliMUONv0::CreateMaterials()
1374 // *** DEFINITION OF AVAILABLE MUON MATERIALS ***
1377 Float_t ag1[3] = { 39.95,12.01,16. };
1378 Float_t zg1[3] = { 18.,6.,8. };
1379 Float_t wg1[3] = { .8,.0667,.13333 };
1380 Float_t dg1 = .001821;
1382 // Ar-buthane-freon gas -- trigger chambers
1383 Float_t atr1[4] = { 39.95,12.01,1.01,19. };
1384 Float_t ztr1[4] = { 18.,6.,1.,9. };
1385 Float_t wtr1[4] = { .56,.1262857,.2857143,.028 };
1386 Float_t dtr1 = .002599;
1389 Float_t agas[3] = { 39.95,12.01,16. };
1390 Float_t zgas[3] = { 18.,6.,8. };
1391 Float_t wgas[3] = { .74,.086684,.173316 };
1392 Float_t dgas = .0018327;
1394 // Ar-Isobutane gas (80%+20%) -- tracking
1395 Float_t ag[3] = { 39.95,12.01,1.01 };
1396 Float_t zg[3] = { 18.,6.,1. };
1397 Float_t wg[3] = { .8,.057,.143 };
1398 Float_t dg = .0019596;
1400 // Ar-Isobutane-Forane-SF6 gas (49%+7%+40%+4%) -- trigger
1401 Float_t atrig[5] = { 39.95,12.01,1.01,19.,32.066 };
1402 Float_t ztrig[5] = { 18.,6.,1.,9.,16. };
1403 Float_t wtrig[5] = { .49,1.08,1.5,1.84,0.04 };
1404 Float_t dtrig = .0031463;
1408 Float_t abak[3] = {12.01 , 1.01 , 16.};
1409 Float_t zbak[3] = {6. , 1. , 8.};
1410 Float_t wbak[3] = {6. , 6. , 1.};
1413 Float_t epsil, stmin, deemax, tmaxfd, stemax;
1415 Int_t ISXFLD = gAlice->Field()->Integ();
1416 Float_t SXMGMX = gAlice->Field()->Max();
1418 // --- Define the various materials for GEANT ---
1419 AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
1420 AliMaterial(10, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
1421 AliMaterial(15, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
1422 AliMixture(19, "Bakelite$", abak, zbak, dbak, -3, wbak);
1423 AliMixture(20, "ArC4H10 GAS$", ag, zg, dg, 3, wg);
1424 AliMixture(21, "TRIG GAS$", atrig, ztrig, dtrig, -5, wtrig);
1425 AliMixture(22, "ArCO2 80%$", ag1, zg1, dg1, 3, wg1);
1426 AliMixture(23, "Ar-freon $", atr1, ztr1, dtr1, 4, wtr1);
1427 AliMixture(24, "ArCO2 GAS$", agas, zgas, dgas, 3, wgas);
1429 epsil = .001; // Tracking precision,
1430 stemax = -1.; // Maximum displacement for multiple scat
1431 tmaxfd = -20.; // Maximum angle due to field deflection
1432 deemax = -.3; // Maximum fractional energy loss, DLS
1436 AliMedium(1, "AIR_CH_US ", 15, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
1440 AliMedium(4, "ALU_CH_US ", 9, 0, ISXFLD, SXMGMX, tmaxfd, fMaxStepAlu,
1441 fMaxDestepAlu, epsil, stmin);
1442 AliMedium(5, "ALU_CH_US ", 10, 0, ISXFLD, SXMGMX, tmaxfd, fMaxStepAlu,
1443 fMaxDestepAlu, epsil, stmin);
1447 AliMedium(6, "AR_CH_US ", 20, 1, ISXFLD, SXMGMX, tmaxfd, fMaxStepGas,
1448 fMaxDestepGas, epsil, stmin);
1450 // Ar-Isobuthane-Forane-SF6 gas
1452 AliMedium(7, "GAS_CH_TRIGGER ", 21, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
1454 AliMedium(8, "BAKE_CH_TRIGGER ", 19, 0, ISXFLD, SXMGMX, tmaxfd, fMaxStepAlu,
1455 fMaxDestepAlu, epsil, stmin);
1457 AliMedium(9, "ARG_CO2 ", 22, 1, ISXFLD, SXMGMX, tmaxfd, fMaxStepGas,
1458 fMaxDestepAlu, epsil, stmin);
1462 //___________________________________________
1464 void AliMUONv0::Init()
1466 printf("\n\n\n Start Init for version 0 - CPC chamber type\n\n\n");
1469 // Initialize Tracking Chambers
1471 for (Int_t i=0; i<NCH; i++) {
1472 ( (AliMUONchamber*) (*fChambers)[i])->Init();
1476 // Set the chamber (sensitive region) GEANT identifier
1477 AliMC* gMC = AliMC::GetMC();
1478 ((AliMUONchamber*)(*fChambers)[0])->SetGid(gMC->VolId("C01G"));
1479 ((AliMUONchamber*)(*fChambers)[1])->SetGid(gMC->VolId("C02G"));
1480 ((AliMUONchamber*)(*fChambers)[2])->SetGid(gMC->VolId("C03G"));
1481 ((AliMUONchamber*)(*fChambers)[3])->SetGid(gMC->VolId("C04G"));
1482 ((AliMUONchamber*)(*fChambers)[4])->SetGid(gMC->VolId("C05G"));
1483 ((AliMUONchamber*)(*fChambers)[5])->SetGid(gMC->VolId("C06G"));
1484 ((AliMUONchamber*)(*fChambers)[6])->SetGid(gMC->VolId("C07G"));
1485 ((AliMUONchamber*)(*fChambers)[7])->SetGid(gMC->VolId("C08G"));
1486 ((AliMUONchamber*)(*fChambers)[8])->SetGid(gMC->VolId("C09G"));
1487 ((AliMUONchamber*)(*fChambers)[9])->SetGid(gMC->VolId("C10G"));
1488 ((AliMUONchamber*)(*fChambers)[10])->SetGid(gMC->VolId("CG1A"));
1489 ((AliMUONchamber*)(*fChambers)[11])->SetGid(gMC->VolId("CG2A"));
1490 ((AliMUONchamber*)(*fChambers)[12])->SetGid(gMC->VolId("CG3A"));
1491 ((AliMUONchamber*)(*fChambers)[13])->SetGid(gMC->VolId("CG4A"));
1493 printf("\n\n\n Finished Init for version 0 - CPC chamber type\n\n\n");
1496 //___________________________________________
1497 void AliMUONv0::StepManager()
1501 static Int_t vol[2];
1506 Float_t destep, step;
1508 static Float_t eloss, eloss2, xhit, yhit, tlength;
1509 const Float_t big=1.e10;
1512 static Float_t hits[14];
1514 TClonesArray &lhits = *fHits;
1517 // Set maximum step size for gas
1518 // numed=gMC->GetMedium();
1520 // Only charged tracks
1521 if( !(gMC->TrackCharge()) ) return;
1523 // Only gas gap inside chamber
1524 // Tag chambers and record hits when track enters
1526 id=gMC->CurrentVolID(copy);
1528 for (Int_t i=1; i<=NCH; i++) {
1529 if(id==((AliMUONchamber*)(*fChambers)[i-1])->GetGid()){
1534 if (idvol == -1) return;
1536 // Get current particle id (ipart), track position (pos) and momentum (mom)
1537 gMC->TrackPosition(pos);
1538 gMC->TrackMomentum(mom);
1540 ipart = gMC->TrackPid();
1541 //Int_t ipart1 = gMC->IdFromPDG(ipart);
1542 //printf("ich, ipart %d %d \n",vol[0],ipart1);
1545 // momentum loss and steplength in last step
1546 destep = gMC->Edep();
1547 step = gMC->TrackStep();
1550 // record hits when track enters ...
1551 if( gMC->IsTrackEntering()) {
1552 gMC->SetMaxStep(fMaxStepGas);
1553 Double_t tc = mom[0]*mom[0]+mom[1]*mom[1];
1554 Double_t rt = TMath::Sqrt(tc);
1555 Double_t pmom = TMath::Sqrt(tc+mom[2]*mom[2]);
1556 Double_t tx=mom[0]/pmom;
1557 Double_t ty=mom[1]/pmom;
1558 Double_t tz=mom[2]/pmom;
1559 Double_t s=((AliMUONchamber*)(*fChambers)[idvol])
1560 ->GetResponseModel()
1562 theta = Float_t(TMath::ATan2(rt,Double_t(mom[2])))*kRaddeg;
1563 phi = Float_t(TMath::ATan2(Double_t(mom[1]),Double_t(mom[0])))*kRaddeg;
1564 hits[0] = Float_t(ipart); // Geant3 particle type
1565 hits[1] = pos[0]+s*tx; // X-position for hit
1566 hits[2] = pos[1]+s*ty; // Y-position for hit
1567 hits[3] = pos[2]+s*tz; // Z-position for hit
1568 hits[4] = theta; // theta angle of incidence
1569 hits[5] = phi; // phi angle of incidence
1570 hits[8] = (Float_t) fNclusters; // first padhit
1571 hits[9] = -1; // last pad hit
1574 hits[10] = mom[3]; // hit momentum P
1575 hits[11] = mom[0]; // Px/P
1576 hits[12] = mom[1]; // Py/P
1577 hits[13] = mom[2]; // Pz/P
1580 // phi angle of incidence
1586 // Only if not trigger chamber
1589 // Initialize hit position (cursor) in the segmentation model
1590 ((AliMUONchamber*) (*fChambers)[idvol])
1591 ->SigGenInit(pos[0], pos[1], pos[2]);
1594 //printf("In the Trigger Chamber #%d\n",idvol-9);
1600 // Calculate the charge induced on a pad (disintegration) in case
1602 // Mip left chamber ...
1603 if( gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()){
1604 gMC->SetMaxStep(big);
1608 // Only if not trigger chamber
1611 MakePadHits(0.5*(xhit+pos[0]),0.5*(yhit+pos[1]),eloss,idvol);
1616 if (fNclusters > (Int_t)hits[8]) {
1618 hits[9]= (Float_t) fNclusters;
1621 new(lhits[fNhits++])
1622 AliMUONhit(fIshunt,gAlice->CurrentTrack(),vol,hits);
1625 // Check additional signal generation conditions
1626 // defined by the segmentation
1627 // model (boundary crossing conditions)
1629 (((AliMUONchamber*) (*fChambers)[idvol])
1630 ->SigGenCond(pos[0], pos[1], pos[2]))
1632 ((AliMUONchamber*) (*fChambers)[idvol])
1633 ->SigGenInit(pos[0], pos[1], pos[2]);
1634 // printf("\n-> MakePadHits, reason special %d",ipart);
1636 MakePadHits(0.5*(xhit+pos[0]),0.5*(yhit+pos[1]),eloss,idvol);
1642 // nothing special happened, add up energy loss