1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 Revision 1.4 2000/06/26 14:02:38 morsch
19 Add class AliMUONConstants with MUON specific constants using static memeber data and access methods.
21 Revision 1.3 2000/06/22 14:10:05 morsch
22 HP scope problems corrected (PH)
24 Revision 1.2 2000/06/15 07:58:49 morsch
25 Code from MUON-dev joined
27 Revision 1.1.2.14 2000/06/14 14:37:25 morsch
28 Initialization of TriggerCircuit added (PC)
30 Revision 1.1.2.13 2000/06/09 21:55:47 morsch
31 Most coding rule violations corrected.
33 Revision 1.1.2.12 2000/05/05 11:34:29 morsch
36 Revision 1.1.2.11 2000/05/05 10:06:48 morsch
37 Coding Rule violations regarding trigger section corrected (CP)
38 Log messages included.
41 /////////////////////////////////////////////////////////
42 // Manager and hits classes for set:MUON version 0 //
43 /////////////////////////////////////////////////////////
48 #include <TLorentzVector.h>
51 #include "AliMUONv1.h"
54 #include "AliCallf77.h"
56 #include "AliMUONChamber.h"
57 #include "AliMUONHit.h"
58 #include "AliMUONPadHit.h"
59 #include "AliMUONConstants.h"
63 //___________________________________________
64 AliMUONv1::AliMUONv1() : AliMUON()
70 //___________________________________________
71 AliMUONv1::AliMUONv1(const char *name, const char *title)
77 //___________________________________________
78 void AliMUONv1::CreateGeometry()
81 // Note: all chambers have the same structure, which could be
82 // easily parameterised. This was intentionally not done in order
83 // to give a starting point for the implementation of the actual
84 // design of each station.
85 Int_t *idtmed = fIdtmed->GetArray()-1099;
87 // Distance between Stations
92 Float_t zpos1, zpos2, zfpos;
93 Float_t dframep=.001; // Value for station 3 should be 6 ...
94 Float_t dframep1=.001;
95 // Bool_t frames=kTRUE;
103 // Rotation matrices in the x-y plane
106 AliMatrix(idrotm[1100], 90., 0., 90., 90., 0., 0.);
108 AliMatrix(idrotm[1101], 90., 90., 90., 180., 0., 0.);
110 AliMatrix(idrotm[1102], 90., 180., 90., 270., 0., 0.);
112 AliMatrix(idrotm[1103], 90., 270., 90., 0., 0., 0.);
114 Float_t phi=2*TMath::Pi()/12/2;
117 // pointer to the current chamber
118 // pointer to the current chamber
119 Int_t idAlu1=idtmed[1103];
120 Int_t idAlu2=idtmed[1104];
121 // Int_t idAlu1=idtmed[1100];
122 // Int_t idAlu2=idtmed[1100];
123 Int_t idAir=idtmed[1100];
124 Int_t idGas=idtmed[1105];
127 AliMUONChamber *iChamber, *iChamber1, *iChamber2;
128 //********************************************************************
130 //********************************************************************
132 // indices 1 and 2 for first and second chambers in the station
133 // iChamber (first chamber) kept for other quanties than Z,
134 // assumed to be the same in both chambers
135 iChamber1 = iChamber = (AliMUONChamber*) (*fChambers)[0];
136 iChamber2 =(AliMUONChamber*) (*fChambers)[1];
137 zpos1=iChamber1->Z();
138 zpos2=iChamber2->Z();
139 dstation = zpos2 - zpos1;
140 zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
144 tpar[0] = iChamber->RInner()-dframep1;
145 tpar[1] = (iChamber->ROuter()+dframep1)/TMath::Cos(phi);
146 tpar[2] = dstation/4;
148 gMC->Gsvolu("C01M", "TUBE", idAir, tpar, 3);
149 gMC->Gsvolu("C02M", "TUBE", idAir, tpar, 3);
150 gMC->Gspos("C01M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
151 gMC->Gspos("C02M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
158 pgpar[4] = -dframez/2;
159 pgpar[5] = iChamber->ROuter();
160 pgpar[6] = pgpar[5]+dframep1;
161 pgpar[7] = +dframez/2;
164 gMC->Gsvolu("C01O", "PGON", idAlu1, pgpar, 10);
165 gMC->Gsvolu("C02O", "PGON", idAlu1, pgpar, 10);
166 gMC->Gspos("C01O",1,"C01M", 0.,0.,-zfpos, 0,"ONLY");
167 gMC->Gspos("C01O",2,"C01M", 0.,0.,+zfpos, 0,"ONLY");
168 gMC->Gspos("C02O",1,"C02M", 0.,0.,-zfpos, 0,"ONLY");
169 gMC->Gspos("C02O",2,"C02M", 0.,0.,+zfpos, 0,"ONLY");
172 tpar[0]= iChamber->RInner()-dframep1;
173 tpar[1]= iChamber->RInner();
175 gMC->Gsvolu("C01I", "TUBE", idAlu1, tpar, 3);
176 gMC->Gsvolu("C02I", "TUBE", idAlu1, tpar, 3);
178 gMC->Gspos("C01I",1,"C01M", 0.,0.,-zfpos, 0,"ONLY");
179 gMC->Gspos("C01I",2,"C01M", 0.,0.,+zfpos, 0,"ONLY");
180 gMC->Gspos("C02I",1,"C02M", 0.,0.,-zfpos, 0,"ONLY");
181 gMC->Gspos("C02I",2,"C02M", 0.,0.,+zfpos, 0,"ONLY");
186 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
187 bpar[1] = dframep1/2;
189 gMC->Gsvolu("C01B", "BOX", idAlu1, bpar, 3);
190 gMC->Gsvolu("C02B", "BOX", idAlu1, bpar, 3);
192 gMC->Gspos("C01B",1,"C01M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
193 idrotm[1100],"ONLY");
194 gMC->Gspos("C01B",2,"C01M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
195 idrotm[1100],"ONLY");
196 gMC->Gspos("C01B",3,"C01M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
197 idrotm[1101],"ONLY");
198 gMC->Gspos("C01B",4,"C01M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
199 idrotm[1101],"ONLY");
200 gMC->Gspos("C01B",5,"C01M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
201 idrotm[1100],"ONLY");
202 gMC->Gspos("C01B",6,"C01M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
203 idrotm[1100],"ONLY");
204 gMC->Gspos("C01B",7,"C01M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
205 idrotm[1101],"ONLY");
206 gMC->Gspos("C01B",8,"C01M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
207 idrotm[1101],"ONLY");
209 gMC->Gspos("C02B",1,"C02M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
210 idrotm[1100],"ONLY");
211 gMC->Gspos("C02B",2,"C02M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
212 idrotm[1100],"ONLY");
213 gMC->Gspos("C02B",3,"C02M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
214 idrotm[1101],"ONLY");
215 gMC->Gspos("C02B",4,"C02M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
216 idrotm[1101],"ONLY");
217 gMC->Gspos("C02B",5,"C02M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
218 idrotm[1100],"ONLY");
219 gMC->Gspos("C02B",6,"C02M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
220 idrotm[1100],"ONLY");
221 gMC->Gspos("C02B",7,"C02M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
222 idrotm[1101],"ONLY");
223 gMC->Gspos("C02B",8,"C02M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
224 idrotm[1101],"ONLY");
227 // Chamber Material represented by Alu sheet
228 tpar[0]= iChamber->RInner();
229 tpar[1]= iChamber->ROuter();
230 tpar[2] = (iChamber->DGas()+iChamber->DAlu())/2;
231 gMC->Gsvolu("C01A", "TUBE", idAlu2, tpar, 3);
232 gMC->Gsvolu("C02A", "TUBE",idAlu2, tpar, 3);
233 gMC->Gspos("C01A", 1, "C01M", 0., 0., 0., 0, "ONLY");
234 gMC->Gspos("C02A", 1, "C02M", 0., 0., 0., 0, "ONLY");
237 // tpar[2] = iChamber->DGas();
238 tpar[2] = iChamber->DGas()/2;
239 gMC->Gsvolu("C01G", "TUBE", idtmed[1108], tpar, 3);
240 gMC->Gsvolu("C02G", "TUBE", idtmed[1108], tpar, 3);
241 gMC->Gspos("C01G", 1, "C01A", 0., 0., 0., 0, "ONLY");
242 gMC->Gspos("C02G", 1, "C02A", 0., 0., 0., 0, "ONLY");
244 // Frame Crosses to be placed inside gas
247 dr = (iChamber->ROuter() - iChamber->RInner());
248 bpar[0] = TMath::Sqrt(dr*dr-dframep1*dframep1/4)/2;
249 bpar[1] = dframep1/2;
250 bpar[2] = iChamber->DGas()/2;
251 gMC->Gsvolu("C01F", "BOX", idAlu1, bpar, 3);
252 gMC->Gsvolu("C02F", "BOX", idAlu1, bpar, 3);
254 gMC->Gspos("C01F",1,"C01G", +iChamber->RInner()+bpar[0] , 0, 0,
255 idrotm[1100],"ONLY");
256 gMC->Gspos("C01F",2,"C01G", -iChamber->RInner()-bpar[0] , 0, 0,
257 idrotm[1100],"ONLY");
258 gMC->Gspos("C01F",3,"C01G", 0, +iChamber->RInner()+bpar[0] , 0,
259 idrotm[1101],"ONLY");
260 gMC->Gspos("C01F",4,"C01G", 0, -iChamber->RInner()-bpar[0] , 0,
261 idrotm[1101],"ONLY");
263 gMC->Gspos("C02F",1,"C02G", +iChamber->RInner()+bpar[0] , 0, 0,
264 idrotm[1100],"ONLY");
265 gMC->Gspos("C02F",2,"C02G", -iChamber->RInner()-bpar[0] , 0, 0,
266 idrotm[1100],"ONLY");
267 gMC->Gspos("C02F",3,"C02G", 0, +iChamber->RInner()+bpar[0] , 0,
268 idrotm[1101],"ONLY");
269 gMC->Gspos("C02F",4,"C02G", 0, -iChamber->RInner()-bpar[0] , 0,
270 idrotm[1101],"ONLY");
275 //********************************************************************
277 //********************************************************************
278 // indices 1 and 2 for first and second chambers in the station
279 // iChamber (first chamber) kept for other quanties than Z,
280 // assumed to be the same in both chambers
281 iChamber1 = iChamber = (AliMUONChamber*) (*fChambers)[2];
282 iChamber2 =(AliMUONChamber*) (*fChambers)[3];
283 zpos1=iChamber1->Z();
284 zpos2=iChamber2->Z();
285 dstation = zpos2 - zpos1;
286 zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
290 tpar[0] = iChamber->RInner()-dframep;
291 tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
292 tpar[2] = dstation/4;
294 gMC->Gsvolu("C03M", "TUBE", idAir, tpar, 3);
295 gMC->Gsvolu("C04M", "TUBE", idAir, tpar, 3);
296 gMC->Gspos("C03M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
297 gMC->Gspos("C04M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
304 pgpar[4] = -dframez/2;
305 pgpar[5] = iChamber->ROuter();
306 pgpar[6] = pgpar[5]+dframep;
307 pgpar[7] = +dframez/2;
310 gMC->Gsvolu("C03O", "PGON", idAlu1, pgpar, 10);
311 gMC->Gsvolu("C04O", "PGON", idAlu1, pgpar, 10);
312 gMC->Gspos("C03O",1,"C03M", 0.,0.,-zfpos, 0,"ONLY");
313 gMC->Gspos("C03O",2,"C03M", 0.,0.,+zfpos, 0,"ONLY");
314 gMC->Gspos("C04O",1,"C04M", 0.,0.,-zfpos, 0,"ONLY");
315 gMC->Gspos("C04O",2,"C04M", 0.,0.,+zfpos, 0,"ONLY");
318 tpar[0]= iChamber->RInner()-dframep;
319 tpar[1]= iChamber->RInner();
321 gMC->Gsvolu("C03I", "TUBE", idAlu1, tpar, 3);
322 gMC->Gsvolu("C04I", "TUBE", idAlu1, tpar, 3);
324 gMC->Gspos("C03I",1,"C03M", 0.,0.,-zfpos, 0,"ONLY");
325 gMC->Gspos("C03I",2,"C03M", 0.,0.,+zfpos, 0,"ONLY");
326 gMC->Gspos("C04I",1,"C04M", 0.,0.,-zfpos, 0,"ONLY");
327 gMC->Gspos("C04I",2,"C04M", 0.,0.,+zfpos, 0,"ONLY");
332 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
335 gMC->Gsvolu("C03B", "BOX", idAlu1, bpar, 3);
336 gMC->Gsvolu("C04B", "BOX", idAlu1, bpar, 3);
338 gMC->Gspos("C03B",1,"C03M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
339 idrotm[1100],"ONLY");
340 gMC->Gspos("C03B",2,"C03M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
341 idrotm[1100],"ONLY");
342 gMC->Gspos("C03B",3,"C03M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
343 idrotm[1101],"ONLY");
344 gMC->Gspos("C03B",4,"C03M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
345 idrotm[1101],"ONLY");
346 gMC->Gspos("C03B",5,"C03M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
347 idrotm[1100],"ONLY");
348 gMC->Gspos("C03B",6,"C03M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
349 idrotm[1100],"ONLY");
350 gMC->Gspos("C03B",7,"C03M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
351 idrotm[1101],"ONLY");
352 gMC->Gspos("C03B",8,"C03M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
353 idrotm[1101],"ONLY");
355 gMC->Gspos("C04B",1,"C04M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
356 idrotm[1100],"ONLY");
357 gMC->Gspos("C04B",2,"C04M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
358 idrotm[1100],"ONLY");
359 gMC->Gspos("C04B",3,"C04M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
360 idrotm[1101],"ONLY");
361 gMC->Gspos("C04B",4,"C04M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
362 idrotm[1101],"ONLY");
363 gMC->Gspos("C04B",5,"C04M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
364 idrotm[1100],"ONLY");
365 gMC->Gspos("C04B",6,"C04M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
366 idrotm[1100],"ONLY");
367 gMC->Gspos("C04B",7,"C04M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
368 idrotm[1101],"ONLY");
369 gMC->Gspos("C04B",8,"C04M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
370 idrotm[1101],"ONLY");
373 // Chamber Material represented by Alu sheet
374 tpar[0]= iChamber->RInner();
375 tpar[1]= iChamber->ROuter();
376 tpar[2] = (iChamber->DGas()+iChamber->DAlu())/2;
377 gMC->Gsvolu("C03A", "TUBE", idAlu2, tpar, 3);
378 gMC->Gsvolu("C04A", "TUBE", idAlu2, tpar, 3);
379 gMC->Gspos("C03A", 1, "C03M", 0., 0., 0., 0, "ONLY");
380 gMC->Gspos("C04A", 1, "C04M", 0., 0., 0., 0, "ONLY");
383 // tpar[2] = iChamber->DGas();
384 tpar[2] = iChamber->DGas()/2;
385 gMC->Gsvolu("C03G", "TUBE", idGas, tpar, 3);
386 gMC->Gsvolu("C04G", "TUBE", idGas, tpar, 3);
387 gMC->Gspos("C03G", 1, "C03A", 0., 0., 0., 0, "ONLY");
388 gMC->Gspos("C04G", 1, "C04A", 0., 0., 0., 0, "ONLY");
392 // Frame Crosses to be placed inside gas
393 dr = (iChamber->ROuter() - iChamber->RInner());
394 bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
396 bpar[2] = iChamber->DGas()/2;
397 gMC->Gsvolu("C03F", "BOX", idAlu1, bpar, 3);
398 gMC->Gsvolu("C04F", "BOX", idAlu1, bpar, 3);
400 gMC->Gspos("C03F",1,"C03G", +iChamber->RInner()+bpar[0] , 0, 0,
401 idrotm[1100],"ONLY");
402 gMC->Gspos("C03F",2,"C03G", -iChamber->RInner()-bpar[0] , 0, 0,
403 idrotm[1100],"ONLY");
404 gMC->Gspos("C03F",3,"C03G", 0, +iChamber->RInner()+bpar[0] , 0,
405 idrotm[1101],"ONLY");
406 gMC->Gspos("C03F",4,"C03G", 0, -iChamber->RInner()-bpar[0] , 0,
407 idrotm[1101],"ONLY");
409 gMC->Gspos("C04F",1,"C04G", +iChamber->RInner()+bpar[0] , 0, 0,
410 idrotm[1100],"ONLY");
411 gMC->Gspos("C04F",2,"C04G", -iChamber->RInner()-bpar[0] , 0, 0,
412 idrotm[1100],"ONLY");
413 gMC->Gspos("C04F",3,"C04G", 0, +iChamber->RInner()+bpar[0] , 0,
414 idrotm[1101],"ONLY");
415 gMC->Gspos("C04F",4,"C04G", 0, -iChamber->RInner()-bpar[0] , 0,
416 idrotm[1101],"ONLY");
419 //********************************************************************
421 //********************************************************************
422 // indices 1 and 2 for first and second chambers in the station
423 // iChamber (first chamber) kept for other quanties than Z,
424 // assumed to be the same in both chambers
425 iChamber1 = iChamber = (AliMUONChamber*) (*fChambers)[4];
426 iChamber2 =(AliMUONChamber*) (*fChambers)[5];
427 zpos1=iChamber1->Z();
428 zpos2=iChamber2->Z();
429 dstation = zpos2 - zpos1;
431 zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
434 tpar[0] = iChamber->RInner()-dframep;
435 tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
436 tpar[2] = dstation/4;
437 gMC->Gsvolu("C05M", "TUBE", idAir, tpar, 3);
438 gMC->Gsvolu("C06M", "TUBE", idAir, tpar, 3);
439 gMC->Gspos("C05M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
440 gMC->Gspos("C06M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
447 pgpar[4] = -dframez/2;
448 pgpar[5] = iChamber->ROuter();
449 pgpar[6] = pgpar[5]+dframep;
450 pgpar[7] = +dframez/2;
453 gMC->Gsvolu("C05O", "PGON", idAlu1, pgpar, 10);
454 gMC->Gsvolu("C06O", "PGON", idAlu1, pgpar, 10);
455 gMC->Gspos("C05O",1,"C05M", 0.,0.,-zfpos, 0,"ONLY");
456 gMC->Gspos("C05O",2,"C05M", 0.,0.,+zfpos, 0,"ONLY");
457 gMC->Gspos("C06O",1,"C06M", 0.,0.,-zfpos, 0,"ONLY");
458 gMC->Gspos("C06O",2,"C06M", 0.,0.,+zfpos, 0,"ONLY");
461 tpar[0]= iChamber->RInner()-dframep;
462 tpar[1]= iChamber->RInner();
464 gMC->Gsvolu("C05I", "TUBE", idAlu1, tpar, 3);
465 gMC->Gsvolu("C06I", "TUBE", idAlu1, tpar, 3);
467 gMC->Gspos("C05I",1,"C05M", 0.,0.,-zfpos, 0,"ONLY");
468 gMC->Gspos("C05I",2,"C05M", 0.,0.,+zfpos, 0,"ONLY");
469 gMC->Gspos("C06I",1,"C06M", 0.,0.,-zfpos, 0,"ONLY");
470 gMC->Gspos("C06I",2,"C06M", 0.,0.,+zfpos, 0,"ONLY");
474 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
477 gMC->Gsvolu("C05B", "BOX", idAlu1, bpar, 3);
478 gMC->Gsvolu("C06B", "BOX", idAlu1, bpar, 3);
480 gMC->Gspos("C05B",1,"C05M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
481 idrotm[1100],"ONLY");
482 gMC->Gspos("C05B",2,"C05M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
483 idrotm[1100],"ONLY");
484 gMC->Gspos("C05B",3,"C05M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
485 idrotm[1101],"ONLY");
486 gMC->Gspos("C05B",4,"C05M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
487 idrotm[1101],"ONLY");
488 gMC->Gspos("C05B",5,"C05M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
489 idrotm[1100],"ONLY");
490 gMC->Gspos("C05B",6,"C05M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
491 idrotm[1100],"ONLY");
492 gMC->Gspos("C05B",7,"C05M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
493 idrotm[1101],"ONLY");
494 gMC->Gspos("C05B",8,"C05M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
495 idrotm[1101],"ONLY");
497 gMC->Gspos("C06B",1,"C06M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
498 idrotm[1100],"ONLY");
499 gMC->Gspos("C06B",2,"C06M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
500 idrotm[1100],"ONLY");
501 gMC->Gspos("C06B",3,"C06M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
502 idrotm[1101],"ONLY");
503 gMC->Gspos("C06B",4,"C06M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
504 idrotm[1101],"ONLY");
505 gMC->Gspos("C06B",5,"C06M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
506 idrotm[1100],"ONLY");
507 gMC->Gspos("C06B",6,"C06M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
508 idrotm[1100],"ONLY");
509 gMC->Gspos("C06B",7,"C06M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
510 idrotm[1101],"ONLY");
511 gMC->Gspos("C06B",8,"C06M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
512 idrotm[1101],"ONLY");
517 // Chamber Material represented by Alu sheet
518 tpar[0]= iChamber->RInner();
519 tpar[1]= iChamber->ROuter();
520 tpar[2] = (iChamber->DGas()+iChamber->DAlu())/2;
521 gMC->Gsvolu("C05A", "TUBE", idAlu2, tpar, 3);
522 gMC->Gsvolu("C06A", "TUBE", idAlu2, tpar, 3);
523 gMC->Gspos("C05A", 1, "C05M", 0., 0., 0., 0, "ONLY");
524 gMC->Gspos("C06A", 1, "C06M", 0., 0., 0., 0, "ONLY");
527 tpar[2] = iChamber->DGas()/2.;
528 gMC->Gsvolu("C05G", "TUBE", idGas, tpar, 3);
529 gMC->Gsvolu("C06G", "TUBE", idGas, tpar, 3);
530 gMC->Gspos("C05G", 1, "C05A", 0., 0., 0., 0, "ONLY");
531 gMC->Gspos("C06G", 1, "C06A", 0., 0., 0., 0, "ONLY");
533 // Frame Crosses to be placed inside gas
535 dr = (iChamber->ROuter() - iChamber->RInner());
536 bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
538 bpar[2] = iChamber->DGas()/2;
539 gMC->Gsvolu("C05F", "BOX", idAlu1, bpar, 3);
540 gMC->Gsvolu("C06F", "BOX", idAlu1, bpar, 3);
542 gMC->Gspos("C05F",1,"C05G", +iChamber->RInner()+bpar[0] , 0, 0,
543 idrotm[1100],"ONLY");
544 gMC->Gspos("C05F",2,"C05G", -iChamber->RInner()-bpar[0] , 0, 0,
545 idrotm[1100],"ONLY");
546 gMC->Gspos("C05F",3,"C05G", 0, +iChamber->RInner()+bpar[0] , 0,
547 idrotm[1101],"ONLY");
548 gMC->Gspos("C05F",4,"C05G", 0, -iChamber->RInner()-bpar[0] , 0,
549 idrotm[1101],"ONLY");
551 gMC->Gspos("C06F",1,"C06G", +iChamber->RInner()+bpar[0] , 0, 0,
552 idrotm[1100],"ONLY");
553 gMC->Gspos("C06F",2,"C06G", -iChamber->RInner()-bpar[0] , 0, 0,
554 idrotm[1100],"ONLY");
555 gMC->Gspos("C06F",3,"C06G", 0, +iChamber->RInner()+bpar[0] , 0,
556 idrotm[1101],"ONLY");
557 gMC->Gspos("C06F",4,"C06G", 0, -iChamber->RInner()-bpar[0] , 0,
558 idrotm[1101],"ONLY");
561 //********************************************************************
563 //********************************************************************
564 // indices 1 and 2 for first and second chambers in the station
565 // iChamber (first chamber) kept for other quanties than Z,
566 // assumed to be the same in both chambers
567 iChamber1 = iChamber = (AliMUONChamber*) (*fChambers)[6];
568 iChamber2 =(AliMUONChamber*) (*fChambers)[7];
569 zpos1=iChamber1->Z();
570 zpos2=iChamber2->Z();
571 dstation = zpos2 - zpos1;
572 zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
576 tpar[0] = iChamber->RInner()-dframep;
577 tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
578 tpar[2] = dstation/4;
580 gMC->Gsvolu("C07M", "TUBE", idAir, tpar, 3);
581 gMC->Gsvolu("C08M", "TUBE", idAir, tpar, 3);
582 gMC->Gspos("C07M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
583 gMC->Gspos("C08M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
590 pgpar[4] = -dframez/2;
591 pgpar[5] = iChamber->ROuter();
592 pgpar[6] = pgpar[5]+dframep;
593 pgpar[7] = +dframez/2;
596 gMC->Gsvolu("C07O", "PGON", idAlu1, pgpar, 10);
597 gMC->Gsvolu("C08O", "PGON", idAlu1, pgpar, 10);
598 gMC->Gspos("C07O",1,"C07M", 0.,0.,-zfpos, 0,"ONLY");
599 gMC->Gspos("C07O",2,"C07M", 0.,0.,+zfpos, 0,"ONLY");
600 gMC->Gspos("C08O",1,"C08M", 0.,0.,-zfpos, 0,"ONLY");
601 gMC->Gspos("C08O",2,"C08M", 0.,0.,+zfpos, 0,"ONLY");
604 tpar[0]= iChamber->RInner()-dframep;
605 tpar[1]= iChamber->RInner();
607 gMC->Gsvolu("C07I", "TUBE", idAlu1, tpar, 3);
608 gMC->Gsvolu("C08I", "TUBE", idAlu1, tpar, 3);
610 gMC->Gspos("C07I",1,"C07M", 0.,0.,-zfpos, 0,"ONLY");
611 gMC->Gspos("C07I",2,"C07M", 0.,0.,+zfpos, 0,"ONLY");
612 gMC->Gspos("C08I",1,"C08M", 0.,0.,-zfpos, 0,"ONLY");
613 gMC->Gspos("C08I",2,"C08M", 0.,0.,+zfpos, 0,"ONLY");
617 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
620 gMC->Gsvolu("C07B", "BOX", idAlu1, bpar, 3);
621 gMC->Gsvolu("C08B", "BOX", idAlu1, bpar, 3);
623 gMC->Gspos("C07B",1,"C07M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
624 idrotm[1100],"ONLY");
625 gMC->Gspos("C07B",2,"C07M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
626 idrotm[1100],"ONLY");
627 gMC->Gspos("C07B",3,"C07M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
628 idrotm[1101],"ONLY");
629 gMC->Gspos("C07B",4,"C07M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
630 idrotm[1101],"ONLY");
631 gMC->Gspos("C07B",5,"C07M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
632 idrotm[1100],"ONLY");
633 gMC->Gspos("C07B",6,"C07M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
634 idrotm[1100],"ONLY");
635 gMC->Gspos("C07B",7,"C07M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
636 idrotm[1101],"ONLY");
637 gMC->Gspos("C07B",8,"C07M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
638 idrotm[1101],"ONLY");
640 gMC->Gspos("C08B",1,"C08M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
641 idrotm[1100],"ONLY");
642 gMC->Gspos("C08B",2,"C08M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
643 idrotm[1100],"ONLY");
644 gMC->Gspos("C08B",3,"C08M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
645 idrotm[1101],"ONLY");
646 gMC->Gspos("C08B",4,"C08M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
647 idrotm[1101],"ONLY");
648 gMC->Gspos("C08B",5,"C08M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
649 idrotm[1100],"ONLY");
650 gMC->Gspos("C08B",6,"C08M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
651 idrotm[1100],"ONLY");
652 gMC->Gspos("C08B",7,"C08M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
653 idrotm[1101],"ONLY");
654 gMC->Gspos("C08B",8,"C08M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
655 idrotm[1101],"ONLY");
660 // Chamber Material represented by Alu sheet
661 tpar[0]= iChamber->RInner();
662 tpar[1]= iChamber->ROuter();
663 tpar[2] = (iChamber->DGas()+iChamber->DAlu())/2;
664 gMC->Gsvolu("C07A", "TUBE", idAlu2, tpar, 3);
665 gMC->Gsvolu("C08A", "TUBE", idAlu2, tpar, 3);
666 gMC->Gspos("C07A", 1, "C07M", 0., 0., 0., 0, "ONLY");
667 gMC->Gspos("C08A", 1, "C08M", 0., 0., 0., 0, "ONLY");
670 // tpar[2] = iChamber->DGas();
671 tpar[2] = iChamber->DGas()/2;
672 gMC->Gsvolu("C07G", "TUBE", idGas, tpar, 3);
673 gMC->Gsvolu("C08G", "TUBE", idGas, tpar, 3);
674 gMC->Gspos("C07G", 1, "C07A", 0., 0., 0., 0, "ONLY");
675 gMC->Gspos("C08G", 1, "C08A", 0., 0., 0., 0, "ONLY");
677 // Frame Crosses to be placed inside gas
679 dr = (iChamber->ROuter() - iChamber->RInner());
680 bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
682 bpar[2] = iChamber->DGas()/2;
683 gMC->Gsvolu("C07F", "BOX", idAlu1, bpar, 3);
684 gMC->Gsvolu("C08F", "BOX", idAlu1, bpar, 3);
686 gMC->Gspos("C07F",1,"C07G", +iChamber->RInner()+bpar[0] , 0, 0,
687 idrotm[1100],"ONLY");
688 gMC->Gspos("C07F",2,"C07G", -iChamber->RInner()-bpar[0] , 0, 0,
689 idrotm[1100],"ONLY");
690 gMC->Gspos("C07F",3,"C07G", 0, +iChamber->RInner()+bpar[0] , 0,
691 idrotm[1101],"ONLY");
692 gMC->Gspos("C07F",4,"C07G", 0, -iChamber->RInner()-bpar[0] , 0,
693 idrotm[1101],"ONLY");
695 gMC->Gspos("C08F",1,"C08G", +iChamber->RInner()+bpar[0] , 0, 0,
696 idrotm[1100],"ONLY");
697 gMC->Gspos("C08F",2,"C08G", -iChamber->RInner()-bpar[0] , 0, 0,
698 idrotm[1100],"ONLY");
699 gMC->Gspos("C08F",3,"C08G", 0, +iChamber->RInner()+bpar[0] , 0,
700 idrotm[1101],"ONLY");
701 gMC->Gspos("C08F",4,"C08G", 0, -iChamber->RInner()-bpar[0] , 0,
702 idrotm[1101],"ONLY");
704 //********************************************************************
706 //********************************************************************
707 // indices 1 and 2 for first and second chambers in the station
708 // iChamber (first chamber) kept for other quanties than Z,
709 // assumed to be the same in both chambers
710 iChamber1 = iChamber = (AliMUONChamber*) (*fChambers)[8];
711 iChamber2 =(AliMUONChamber*) (*fChambers)[9];
712 zpos1=iChamber1->Z();
713 zpos2=iChamber2->Z();
714 dstation = zpos2 - zpos1;
715 zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
719 tpar[0] = iChamber->RInner()-dframep;
720 tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
721 tpar[2] = dstation/4;
723 gMC->Gsvolu("C09M", "TUBE", idAir, tpar, 3);
724 gMC->Gsvolu("C10M", "TUBE", idAir, tpar, 3);
725 gMC->Gspos("C09M", 1, "ALIC", 0., 0., zpos1 , 0, "ONLY");
726 gMC->Gspos("C10M", 1, "ALIC", 0., 0., zpos2 , 0, "ONLY");
733 pgpar[4] = -dframez/2;
734 pgpar[5] = iChamber->ROuter();
735 pgpar[6] = pgpar[5]+dframep;
736 pgpar[7] = +dframez/2;
739 gMC->Gsvolu("C09O", "PGON", idAlu1, pgpar, 10);
740 gMC->Gsvolu("C10O", "PGON", idAlu1, pgpar, 10);
741 gMC->Gspos("C09O",1,"C09M", 0.,0.,-zfpos, 0,"ONLY");
742 gMC->Gspos("C09O",2,"C09M", 0.,0.,+zfpos, 0,"ONLY");
743 gMC->Gspos("C10O",1,"C10M", 0.,0.,-zfpos, 0,"ONLY");
744 gMC->Gspos("C10O",2,"C10M", 0.,0.,+zfpos, 0,"ONLY");
747 tpar[0]= iChamber->RInner()-dframep;
748 tpar[1]= iChamber->RInner();
750 gMC->Gsvolu("C09I", "TUBE", idAlu1, tpar, 3);
751 gMC->Gsvolu("C10I", "TUBE", idAlu1, tpar, 3);
753 gMC->Gspos("C09I",1,"C09M", 0.,0.,-zfpos, 0,"ONLY");
754 gMC->Gspos("C09I",2,"C09M", 0.,0.,+zfpos, 0,"ONLY");
755 gMC->Gspos("C10I",1,"C10M", 0.,0.,-zfpos, 0,"ONLY");
756 gMC->Gspos("C10I",2,"C10M", 0.,0.,+zfpos, 0,"ONLY");
762 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
765 gMC->Gsvolu("C09B", "BOX", idAlu1, bpar, 3);
766 gMC->Gsvolu("C10B", "BOX", idAlu1, bpar, 3);
768 gMC->Gspos("C09B",1,"C09M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
769 idrotm[1100],"ONLY");
770 gMC->Gspos("C09B",2,"C09M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
771 idrotm[1100],"ONLY");
772 gMC->Gspos("C09B",3,"C09M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
773 idrotm[1101],"ONLY");
774 gMC->Gspos("C09B",4,"C09M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
775 idrotm[1101],"ONLY");
776 gMC->Gspos("C09B",5,"C09M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
777 idrotm[1100],"ONLY");
778 gMC->Gspos("C09B",6,"C09M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
779 idrotm[1100],"ONLY");
780 gMC->Gspos("C09B",7,"C09M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
781 idrotm[1101],"ONLY");
782 gMC->Gspos("C09B",8,"C09M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
783 idrotm[1101],"ONLY");
785 gMC->Gspos("C10B",1,"C10M", +iChamber->RInner()+bpar[0] , 0,-zfpos,
786 idrotm[1100],"ONLY");
787 gMC->Gspos("C10B",2,"C10M", -iChamber->RInner()-bpar[0] , 0,-zfpos,
788 idrotm[1100],"ONLY");
789 gMC->Gspos("C10B",3,"C10M", 0, +iChamber->RInner()+bpar[0] ,-zfpos,
790 idrotm[1101],"ONLY");
791 gMC->Gspos("C10B",4,"C10M", 0, -iChamber->RInner()-bpar[0] ,-zfpos,
792 idrotm[1101],"ONLY");
793 gMC->Gspos("C10B",5,"C10M", +iChamber->RInner()+bpar[0] , 0,+zfpos,
794 idrotm[1100],"ONLY");
795 gMC->Gspos("C10B",6,"C10M", -iChamber->RInner()-bpar[0] , 0,+zfpos,
796 idrotm[1100],"ONLY");
797 gMC->Gspos("C10B",7,"C10M", 0, +iChamber->RInner()+bpar[0] ,+zfpos,
798 idrotm[1101],"ONLY");
799 gMC->Gspos("C10B",8,"C10M", 0, -iChamber->RInner()-bpar[0] ,+zfpos,
800 idrotm[1101],"ONLY");
805 // Chamber Material represented by Alu sheet
806 tpar[0]= iChamber->RInner();
807 tpar[1]= iChamber->ROuter();
808 tpar[2] = (iChamber->DGas()+iChamber->DAlu())/2;
809 gMC->Gsvolu("C09A", "TUBE", idAlu2, tpar, 3);
810 gMC->Gsvolu("C10A", "TUBE", idAlu2, tpar, 3);
811 gMC->Gspos("C09A", 1, "C09M", 0., 0., 0., 0, "ONLY");
812 gMC->Gspos("C10A", 1, "C10M", 0., 0., 0., 0, "ONLY");
815 // tpar[2] = iChamber->DGas();
816 tpar[2] = iChamber->DGas()/2;
817 gMC->Gsvolu("C09G", "TUBE", idGas, tpar, 3);
818 gMC->Gsvolu("C10G", "TUBE", idGas, tpar, 3);
819 gMC->Gspos("C09G", 1, "C09A", 0., 0., 0., 0, "ONLY");
820 gMC->Gspos("C10G", 1, "C10A", 0., 0., 0., 0, "ONLY");
822 // Frame Crosses to be placed inside gas
824 dr = (iChamber->ROuter() - iChamber->RInner());
825 bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
827 bpar[2] = iChamber->DGas()/2;
828 gMC->Gsvolu("C09F", "BOX", idAlu1, bpar, 3);
829 gMC->Gsvolu("C10F", "BOX", idAlu1, bpar, 3);
831 gMC->Gspos("C09F",1,"C09G", +iChamber->RInner()+bpar[0] , 0, 0,
832 idrotm[1100],"ONLY");
833 gMC->Gspos("C09F",2,"C09G", -iChamber->RInner()-bpar[0] , 0, 0,
834 idrotm[1100],"ONLY");
835 gMC->Gspos("C09F",3,"C09G", 0, +iChamber->RInner()+bpar[0] , 0,
836 idrotm[1101],"ONLY");
837 gMC->Gspos("C09F",4,"C09G", 0, -iChamber->RInner()-bpar[0] , 0,
838 idrotm[1101],"ONLY");
840 gMC->Gspos("C10F",1,"C10G", +iChamber->RInner()+bpar[0] , 0, 0,
841 idrotm[1100],"ONLY");
842 gMC->Gspos("C10F",2,"C10G", -iChamber->RInner()-bpar[0] , 0, 0,
843 idrotm[1100],"ONLY");
844 gMC->Gspos("C10F",3,"C10G", 0, +iChamber->RInner()+bpar[0] , 0,
845 idrotm[1101],"ONLY");
846 gMC->Gspos("C10F",4,"C10G", 0, -iChamber->RInner()-bpar[0] , 0,
847 idrotm[1101],"ONLY");
850 ///////////////////////////////////////
851 // GEOMETRY FOR THE TRIGGER CHAMBERS //
852 ///////////////////////////////////////
854 // 03/00 P. Dupieux : introduce a slighly more realistic
855 // geom. of the trigger readout planes with
856 // 2 Zpos per trigger plane (alternate
857 // between left and right of the trigger)
859 // Parameters of the Trigger Chambers
862 const Float_t kXMC1MIN=34.;
863 const Float_t kXMC1MED=51.;
864 const Float_t kXMC1MAX=272.;
865 const Float_t kYMC1MIN=34.;
866 const Float_t kYMC1MAX=51.;
867 const Float_t kRMIN1=50.;
868 const Float_t kRMAX1=62.;
869 const Float_t kRMIN2=50.;
870 const Float_t kRMAX2=66.;
872 // zposition of the middle of the gas gap in mother vol
873 const Float_t kZMCm=-3.6;
874 const Float_t kZMCp=+3.6;
877 // TRIGGER STATION 1 - TRIGGER STATION 1 - TRIGGER STATION 1
879 // iChamber 1 and 2 for first and second chambers in the station
880 // iChamber (first chamber) kept for other quanties than Z,
881 // assumed to be the same in both chambers
882 iChamber1 = iChamber = (AliMUONChamber*) (*fChambers)[10];
883 iChamber2 =(AliMUONChamber*) (*fChambers)[11];
886 // zpos1 and zpos2 are now the middle of the first and second
887 // plane of station 1 :
888 // zpos1=(16075+15995)/2=16035 mm, thick/2=40 mm
889 // zpos2=(16225+16145)/2=16185 mm, thick/2=40 mm
891 // zpos1m=15999 mm , zpos1p=16071 mm (middles of gas gaps)
892 // zpos2m=16149 mm , zpos2p=16221 mm (middles of gas gaps)
893 // rem : the total thickness accounts for 1 mm of al on both
894 // side of the RPCs (see zpos1 and zpos2), as previously
896 zpos1=iChamber1->Z();
897 zpos2=iChamber2->Z();
900 // Mother volume definition
901 tpar[0] = iChamber->RInner();
902 tpar[1] = iChamber->ROuter();
904 gMC->Gsvolu("CM11", "TUBE", idAir, tpar, 3);
905 gMC->Gsvolu("CM12", "TUBE", idAir, tpar, 3);
907 // Definition of the flange between the beam shielding and the RPC
912 gMC->Gsvolu("CF1A", "TUBE", idAlu1, tpar, 3); //Al
913 gMC->Gspos("CF1A", 1, "CM11", 0., 0., 0., 0, "MANY");
914 gMC->Gspos("CF1A", 2, "CM12", 0., 0., 0., 0, "MANY");
917 // FIRST PLANE OF STATION 1
919 // ratios of zpos1m/zpos1p and inverse for first plane
920 Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
924 // Definition of prototype for chambers in the first plane
930 gMC->Gsvolu("CC1A", "BOX ", idAlu1, tpar, 0); //Al
931 gMC->Gsvolu("CB1A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
932 gMC->Gsvolu("CG1A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
938 const Float_t kXMC1A=kXMC1MED+(kXMC1MAX-kXMC1MED)/2.;
939 const Float_t kYMC1Am=0.;
940 const Float_t kYMC1Ap=0.;
943 gMC->Gsposp("CG1A", 1, "CB1A", 0., 0., 0., 0, "ONLY",tpar,3);
945 gMC->Gsposp("CB1A", 1, "CC1A", 0., 0., 0., 0, "ONLY",tpar,3);
948 tpar[0] = (kXMC1MAX-kXMC1MED)/2.;
951 gMC->Gsposp("CC1A", 1, "CM11",kXMC1A,kYMC1Am,kZMCm, 0, "ONLY", tpar, 3);
952 gMC->Gsposp("CC1A", 2, "CM11",-kXMC1A,kYMC1Ap,kZMCp, 0, "ONLY", tpar, 3);
955 Float_t tpar1save=tpar[1];
956 Float_t y1msave=kYMC1Am;
957 Float_t y1psave=kYMC1Ap;
959 tpar[0] = (kXMC1MAX-kXMC1MIN)/2.;
960 tpar[1] = (kYMC1MAX-kYMC1MIN)/2.;
962 const Float_t kXMC1B=kXMC1MIN+tpar[0];
963 const Float_t kYMC1Bp=(y1msave+tpar1save)*zpm+tpar[1];
964 const Float_t kYMC1Bm=(y1psave+tpar1save)*zmp+tpar[1];
966 gMC->Gsposp("CC1A", 3, "CM11",kXMC1B,kYMC1Bp,kZMCp, 0, "ONLY", tpar, 3);
967 gMC->Gsposp("CC1A", 4, "CM11",-kXMC1B,kYMC1Bm,kZMCm, 0, "ONLY", tpar, 3);
968 gMC->Gsposp("CC1A", 5, "CM11",kXMC1B,-kYMC1Bp,kZMCp, 0, "ONLY", tpar, 3);
969 gMC->Gsposp("CC1A", 6, "CM11",-kXMC1B,-kYMC1Bm,kZMCm, 0, "ONLY", tpar, 3);
971 // chamber type C (end of type B !!)
976 tpar[0] = kXMC1MAX/2;
977 tpar[1] = kYMC1MAX/2;
979 const Float_t kXMC1C=tpar[0];
980 // warning : same Z than type B
981 const Float_t kYMC1Cp=(y1psave+tpar1save)*1.+tpar[1];
982 const Float_t kYMC1Cm=(y1msave+tpar1save)*1.+tpar[1];
984 gMC->Gsposp("CC1A", 7, "CM11",kXMC1C,kYMC1Cp,kZMCp, 0, "ONLY", tpar, 3);
985 gMC->Gsposp("CC1A", 8, "CM11",-kXMC1C,kYMC1Cm,kZMCm, 0, "ONLY", tpar, 3);
986 gMC->Gsposp("CC1A", 9, "CM11",kXMC1C,-kYMC1Cp,kZMCp, 0, "ONLY", tpar, 3);
987 gMC->Gsposp("CC1A", 10, "CM11",-kXMC1C,-kYMC1Cm,kZMCm, 0, "ONLY", tpar, 3);
989 // chamber type D, E and F (same size)
994 tpar[0] = kXMC1MAX/2.;
997 const Float_t kXMC1D=tpar[0];
998 const Float_t kYMC1Dp=(y1msave+tpar1save)*zpm+tpar[1];
999 const Float_t kYMC1Dm=(y1psave+tpar1save)*zmp+tpar[1];
1001 gMC->Gsposp("CC1A", 11, "CM11",kXMC1D,kYMC1Dm,kZMCm, 0, "ONLY", tpar, 3);
1002 gMC->Gsposp("CC1A", 12, "CM11",-kXMC1D,kYMC1Dp,kZMCp, 0, "ONLY", tpar, 3);
1003 gMC->Gsposp("CC1A", 13, "CM11",kXMC1D,-kYMC1Dm,kZMCm, 0, "ONLY", tpar, 3);
1004 gMC->Gsposp("CC1A", 14, "CM11",-kXMC1D,-kYMC1Dp,kZMCp, 0, "ONLY", tpar, 3);
1010 const Float_t kYMC1Ep=(y1msave+tpar1save)*zpm+tpar[1];
1011 const Float_t kYMC1Em=(y1psave+tpar1save)*zmp+tpar[1];
1013 gMC->Gsposp("CC1A", 15, "CM11",kXMC1D,kYMC1Ep,kZMCp, 0, "ONLY", tpar, 3);
1014 gMC->Gsposp("CC1A", 16, "CM11",-kXMC1D,kYMC1Em,kZMCm, 0, "ONLY", tpar, 3);
1015 gMC->Gsposp("CC1A", 17, "CM11",kXMC1D,-kYMC1Ep,kZMCp, 0, "ONLY", tpar, 3);
1016 gMC->Gsposp("CC1A", 18, "CM11",-kXMC1D,-kYMC1Em,kZMCm, 0, "ONLY", tpar, 3);
1021 const Float_t kYMC1Fp=(y1msave+tpar1save)*zpm+tpar[1];
1022 const Float_t kYMC1Fm=(y1psave+tpar1save)*zmp+tpar[1];
1024 gMC->Gsposp("CC1A", 19, "CM11",kXMC1D,kYMC1Fm,kZMCm, 0, "ONLY", tpar, 3);
1025 gMC->Gsposp("CC1A", 20, "CM11",-kXMC1D,kYMC1Fp,kZMCp, 0, "ONLY", tpar, 3);
1026 gMC->Gsposp("CC1A", 21, "CM11",kXMC1D,-kYMC1Fm,kZMCm, 0, "ONLY", tpar, 3);
1027 gMC->Gsposp("CC1A", 22, "CM11",-kXMC1D,-kYMC1Fp,kZMCp, 0, "ONLY", tpar, 3);
1029 // Positioning first plane in ALICE
1030 gMC->Gspos("CM11", 1, "ALIC", 0., 0., zpos1, 0, "ONLY");
1032 // End of geometry definition for the first plane of station 1
1036 // SECOND PLANE OF STATION 1 : proj ratio = zpos2/zpos1
1038 const Float_t kZ12=zpos2/zpos1;
1040 // Definition of prototype for chambers in the second plane of station 1
1046 gMC->Gsvolu("CC2A", "BOX ", idAlu1, tpar, 0); //Al
1047 gMC->Gsvolu("CB2A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
1048 gMC->Gsvolu("CG2A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
1054 const Float_t kXMC2A=kXMC1A*kZ12;
1055 const Float_t kYMC2Am=0.;
1056 const Float_t kYMC2Ap=0.;
1059 gMC->Gsposp("CG2A", 1, "CB2A", 0., 0., 0., 0, "ONLY",tpar,3);
1061 gMC->Gsposp("CB2A", 1, "CC2A", 0., 0., 0., 0, "ONLY",tpar,3);
1064 tpar[0] = ((kXMC1MAX-kXMC1MED)/2.)*kZ12;
1065 tpar[1] = kYMC1MIN*kZ12;
1067 gMC->Gsposp("CC2A", 1, "CM12",kXMC2A,kYMC2Am,kZMCm, 0, "ONLY", tpar, 3);
1068 gMC->Gsposp("CC2A", 2, "CM12",-kXMC2A,kYMC2Ap,kZMCp, 0, "ONLY", tpar, 3);
1073 tpar[0] = ((kXMC1MAX-kXMC1MIN)/2.)*kZ12;
1074 tpar[1] = ((kYMC1MAX-kYMC1MIN)/2.)*kZ12;
1076 const Float_t kXMC2B=kXMC1B*kZ12;
1077 const Float_t kYMC2Bp=kYMC1Bp*kZ12;
1078 const Float_t kYMC2Bm=kYMC1Bm*kZ12;
1079 gMC->Gsposp("CC2A", 3, "CM12",kXMC2B,kYMC2Bp,kZMCp, 0, "ONLY", tpar, 3);
1080 gMC->Gsposp("CC2A", 4, "CM12",-kXMC2B,kYMC2Bm,kZMCm, 0, "ONLY", tpar, 3);
1081 gMC->Gsposp("CC2A", 5, "CM12",kXMC2B,-kYMC2Bp,kZMCp, 0, "ONLY", tpar, 3);
1082 gMC->Gsposp("CC2A", 6, "CM12",-kXMC2B,-kYMC2Bm,kZMCm, 0, "ONLY", tpar, 3);
1085 // chamber type C (end of type B !!)
1087 tpar[0] = (kXMC1MAX/2)*kZ12;
1088 tpar[1] = (kYMC1MAX/2)*kZ12;
1090 const Float_t kXMC2C=kXMC1C*kZ12;
1091 const Float_t kYMC2Cp=kYMC1Cp*kZ12;
1092 const Float_t kYMC2Cm=kYMC1Cm*kZ12;
1093 gMC->Gsposp("CC2A", 7, "CM12",kXMC2C,kYMC2Cp,kZMCp, 0, "ONLY", tpar, 3);
1094 gMC->Gsposp("CC2A", 8, "CM12",-kXMC2C,kYMC2Cm,kZMCm, 0, "ONLY", tpar, 3);
1095 gMC->Gsposp("CC2A", 9, "CM12",kXMC2C,-kYMC2Cp,kZMCp, 0, "ONLY", tpar, 3);
1096 gMC->Gsposp("CC2A", 10, "CM12",-kXMC2C,-kYMC2Cm,kZMCm, 0, "ONLY", tpar, 3);
1098 // chamber type D, E and F (same size)
1100 tpar[0] = (kXMC1MAX/2.)*kZ12;
1101 tpar[1] = kYMC1MIN*kZ12;
1103 const Float_t kXMC2D=kXMC1D*kZ12;
1104 const Float_t kYMC2Dp=kYMC1Dp*kZ12;
1105 const Float_t kYMC2Dm=kYMC1Dm*kZ12;
1106 gMC->Gsposp("CC2A", 11, "CM12",kXMC2D,kYMC2Dm,kZMCm, 0, "ONLY", tpar, 3);
1107 gMC->Gsposp("CC2A", 12, "CM12",-kXMC2D,kYMC2Dp,kZMCp, 0, "ONLY", tpar, 3);
1108 gMC->Gsposp("CC2A", 13, "CM12",kXMC2D,-kYMC2Dm,kZMCm, 0, "ONLY", tpar, 3);
1109 gMC->Gsposp("CC2A", 14, "CM12",-kXMC2D,-kYMC2Dp,kZMCp, 0, "ONLY", tpar, 3);
1111 const Float_t kYMC2Ep=kYMC1Ep*kZ12;
1112 const Float_t kYMC2Em=kYMC1Em*kZ12;
1113 gMC->Gsposp("CC2A", 15, "CM12",kXMC2D,kYMC2Ep,kZMCp, 0, "ONLY", tpar, 3);
1114 gMC->Gsposp("CC2A", 16, "CM12",-kXMC2D,kYMC2Em,kZMCm, 0, "ONLY", tpar, 3);
1115 gMC->Gsposp("CC2A", 17, "CM12",kXMC2D,-kYMC2Ep,kZMCp, 0, "ONLY", tpar, 3);
1116 gMC->Gsposp("CC2A", 18, "CM12",-kXMC2D,-kYMC2Em,kZMCm, 0, "ONLY", tpar, 3);
1119 const Float_t kYMC2Fp=kYMC1Fp*kZ12;
1120 const Float_t kYMC2Fm=kYMC1Fm*kZ12;
1121 gMC->Gsposp("CC2A", 19, "CM12",kXMC2D,kYMC2Fm,kZMCm, 0, "ONLY", tpar, 3);
1122 gMC->Gsposp("CC2A", 20, "CM12",-kXMC2D,kYMC2Fp,kZMCp, 0, "ONLY", tpar, 3);
1123 gMC->Gsposp("CC2A", 21, "CM12",kXMC2D,-kYMC2Fm,kZMCm, 0, "ONLY", tpar, 3);
1124 gMC->Gsposp("CC2A", 22, "CM12",-kXMC2D,-kYMC2Fp,kZMCp, 0, "ONLY", tpar, 3);
1126 // Positioning second plane of station 1 in ALICE
1128 gMC->Gspos("CM12", 1, "ALIC", 0., 0., zpos2, 0, "ONLY");
1130 // End of geometry definition for the second plane of station 1
1134 // TRIGGER STATION 2 - TRIGGER STATION 2 - TRIGGER STATION 2
1137 // zpos3 and zpos4 are now the middle of the first and second
1138 // plane of station 2 :
1139 // zpos3=(17075+16995)/2=17035 mm, thick/2=40 mm
1140 // zpos4=(17225+17145)/2=17185 mm, thick/2=40 mm
1142 // zpos3m=16999 mm , zpos3p=17071 mm (middles of gas gaps)
1143 // zpos4m=17149 mm , zpos4p=17221 mm (middles of gas gaps)
1144 // rem : the total thickness accounts for 1 mm of al on both
1145 // side of the RPCs (see zpos3 and zpos4), as previously
1146 iChamber1 = iChamber = (AliMUONChamber*) (*fChambers)[12];
1147 iChamber2 =(AliMUONChamber*) (*fChambers)[13];
1148 Float_t zpos3=iChamber1->Z();
1149 Float_t zpos4=iChamber2->Z();
1152 // Mother volume definition
1153 tpar[0] = iChamber->RInner();
1154 tpar[1] = iChamber->ROuter();
1157 gMC->Gsvolu("CM21", "TUBE", idAir, tpar, 3);
1158 gMC->Gsvolu("CM22", "TUBE", idAir, tpar, 3);
1160 // Definition of the flange between the beam shielding and the RPC
1161 // ???? interface shielding
1167 gMC->Gsvolu("CF2A", "TUBE", idAlu1, tpar, 3); //Al
1168 gMC->Gspos("CF2A", 1, "CM21", 0., 0., 0., 0, "MANY");
1169 gMC->Gspos("CF2A", 2, "CM22", 0., 0., 0., 0, "MANY");
1173 // FIRST PLANE OF STATION 2 : proj ratio = zpos3/zpos1
1175 const Float_t kZ13=zpos3/zpos1;
1177 // Definition of prototype for chambers in the first plane of station 2
1182 gMC->Gsvolu("CC3A", "BOX ", idAlu1, tpar, 0); //Al
1183 gMC->Gsvolu("CB3A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
1184 gMC->Gsvolu("CG3A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
1191 const Float_t kXMC3A=kXMC1A*kZ13;
1192 const Float_t kYMC3Am=0.;
1193 const Float_t kYMC3Ap=0.;
1196 gMC->Gsposp("CG3A", 1, "CB3A", 0., 0., 0., 0, "ONLY",tpar,3);
1198 gMC->Gsposp("CB3A", 1, "CC3A", 0., 0., 0., 0, "ONLY",tpar,3);
1201 tpar[0] = ((kXMC1MAX-kXMC1MED)/2.)*kZ13;
1202 tpar[1] = kYMC1MIN*kZ13;
1203 gMC->Gsposp("CC3A", 1, "CM21",kXMC3A,kYMC3Am,kZMCm, 0, "ONLY", tpar, 3);
1204 gMC->Gsposp("CC3A", 2, "CM21",-kXMC3A,kYMC3Ap,kZMCp, 0, "ONLY", tpar, 3);
1208 tpar[0] = ((kXMC1MAX-kXMC1MIN)/2.)*kZ13;
1209 tpar[1] = ((kYMC1MAX-kYMC1MIN)/2.)*kZ13;
1211 const Float_t kXMC3B=kXMC1B*kZ13;
1212 const Float_t kYMC3Bp=kYMC1Bp*kZ13;
1213 const Float_t kYMC3Bm=kYMC1Bm*kZ13;
1214 gMC->Gsposp("CC3A", 3, "CM21",kXMC3B,kYMC3Bp,kZMCp, 0, "ONLY", tpar, 3);
1215 gMC->Gsposp("CC3A", 4, "CM21",-kXMC3B,kYMC3Bm,kZMCm, 0, "ONLY", tpar, 3);
1216 gMC->Gsposp("CC3A", 5, "CM21",kXMC3B,-kYMC3Bp,kZMCp, 0, "ONLY", tpar, 3);
1217 gMC->Gsposp("CC3A", 6, "CM21",-kXMC3B,-kYMC3Bm,kZMCm, 0, "ONLY", tpar, 3);
1220 // chamber type C (end of type B !!)
1221 tpar[0] = (kXMC1MAX/2)*kZ13;
1222 tpar[1] = (kYMC1MAX/2)*kZ13;
1224 const Float_t kXMC3C=kXMC1C*kZ13;
1225 const Float_t kYMC3Cp=kYMC1Cp*kZ13;
1226 const Float_t kYMC3Cm=kYMC1Cm*kZ13;
1227 gMC->Gsposp("CC3A", 7, "CM21",kXMC3C,kYMC3Cp,kZMCp, 0, "ONLY", tpar, 3);
1228 gMC->Gsposp("CC3A", 8, "CM21",-kXMC3C,kYMC3Cm,kZMCm, 0, "ONLY", tpar, 3);
1229 gMC->Gsposp("CC3A", 9, "CM21",kXMC3C,-kYMC3Cp,kZMCp, 0, "ONLY", tpar, 3);
1230 gMC->Gsposp("CC3A", 10, "CM21",-kXMC3C,-kYMC3Cm,kZMCm, 0, "ONLY", tpar, 3);
1233 // chamber type D, E and F (same size)
1235 tpar[0] = (kXMC1MAX/2.)*kZ13;
1236 tpar[1] = kYMC1MIN*kZ13;
1238 const Float_t kXMC3D=kXMC1D*kZ13;
1239 const Float_t kYMC3Dp=kYMC1Dp*kZ13;
1240 const Float_t kYMC3Dm=kYMC1Dm*kZ13;
1241 gMC->Gsposp("CC3A", 11, "CM21",kXMC3D,kYMC3Dm,kZMCm, 0, "ONLY", tpar, 3);
1242 gMC->Gsposp("CC3A", 12, "CM21",-kXMC3D,kYMC3Dp,kZMCp, 0, "ONLY", tpar, 3);
1243 gMC->Gsposp("CC3A", 13, "CM21",kXMC3D,-kYMC3Dm,kZMCm, 0, "ONLY", tpar, 3);
1244 gMC->Gsposp("CC3A", 14, "CM21",-kXMC3D,-kYMC3Dp,kZMCp, 0, "ONLY", tpar, 3);
1246 const Float_t kYMC3Ep=kYMC1Ep*kZ13;
1247 const Float_t kYMC3Em=kYMC1Em*kZ13;
1248 gMC->Gsposp("CC3A", 15, "CM21",kXMC3D,kYMC3Ep,kZMCp, 0, "ONLY", tpar, 3);
1249 gMC->Gsposp("CC3A", 16, "CM21",-kXMC3D,kYMC3Em,kZMCm, 0, "ONLY", tpar, 3);
1250 gMC->Gsposp("CC3A", 17, "CM21",kXMC3D,-kYMC3Ep,kZMCp, 0, "ONLY", tpar, 3);
1251 gMC->Gsposp("CC3A", 18, "CM21",-kXMC3D,-kYMC3Em,kZMCm, 0, "ONLY", tpar, 3);
1253 const Float_t kYMC3Fp=kYMC1Fp*kZ13;
1254 const Float_t kYMC3Fm=kYMC1Fm*kZ13;
1255 gMC->Gsposp("CC3A", 19, "CM21",kXMC3D,kYMC3Fm,kZMCm, 0, "ONLY", tpar, 3);
1256 gMC->Gsposp("CC3A", 20, "CM21",-kXMC3D,kYMC3Fp,kZMCp, 0, "ONLY", tpar, 3);
1257 gMC->Gsposp("CC3A", 21, "CM21",kXMC3D,-kYMC3Fm,kZMCm, 0, "ONLY", tpar, 3);
1258 gMC->Gsposp("CC3A", 22, "CM21",-kXMC3D,-kYMC3Fp,kZMCp, 0, "ONLY", tpar, 3);
1261 // Positioning first plane of station 2 in ALICE
1263 gMC->Gspos("CM21", 1, "ALIC", 0., 0., zpos3, 0, "ONLY");
1265 // End of geometry definition for the first plane of station 2
1270 // SECOND PLANE OF STATION 2 : proj ratio = zpos4/zpos1
1272 const Float_t kZ14=zpos4/zpos1;
1274 // Definition of prototype for chambers in the second plane of station 2
1280 gMC->Gsvolu("CC4A", "BOX ", idAlu1, tpar, 0); //Al
1281 gMC->Gsvolu("CB4A", "BOX ", idtmed[1107], tpar, 0); //Bakelite
1282 gMC->Gsvolu("CG4A", "BOX ", idtmed[1106], tpar, 0); //Gas streamer
1288 const Float_t kXMC4A=kXMC1A*kZ14;
1289 const Float_t kYMC4Am=0.;
1290 const Float_t kYMC4Ap=0.;
1293 gMC->Gsposp("CG4A", 1, "CB4A", 0., 0., 0., 0, "ONLY",tpar,3);
1295 gMC->Gsposp("CB4A", 1, "CC4A", 0., 0., 0., 0, "ONLY",tpar,3);
1298 tpar[0] = ((kXMC1MAX-kXMC1MED)/2.)*kZ14;
1299 tpar[1] = kYMC1MIN*kZ14;
1300 gMC->Gsposp("CC4A", 1, "CM22",kXMC4A,kYMC4Am,kZMCm, 0, "ONLY", tpar, 3);
1301 gMC->Gsposp("CC4A", 2, "CM22",-kXMC4A,kYMC4Ap,kZMCp, 0, "ONLY", tpar, 3);
1305 tpar[0] = ((kXMC1MAX-kXMC1MIN)/2.)*kZ14;
1306 tpar[1] = ((kYMC1MAX-kYMC1MIN)/2.)*kZ14;
1308 const Float_t kXMC4B=kXMC1B*kZ14;
1309 const Float_t kYMC4Bp=kYMC1Bp*kZ14;
1310 const Float_t kYMC4Bm=kYMC1Bm*kZ14;
1311 gMC->Gsposp("CC4A", 3, "CM22",kXMC4B,kYMC4Bp,kZMCp, 0, "ONLY", tpar, 3);
1312 gMC->Gsposp("CC4A", 4, "CM22",-kXMC4B,kYMC4Bm,kZMCm, 0, "ONLY", tpar, 3);
1313 gMC->Gsposp("CC4A", 5, "CM22",kXMC4B,-kYMC4Bp,kZMCp, 0, "ONLY", tpar, 3);
1314 gMC->Gsposp("CC4A", 6, "CM22",-kXMC4B,-kYMC4Bm,kZMCm, 0, "ONLY", tpar, 3);
1317 // chamber type C (end of type B !!)
1318 tpar[0] =(kXMC1MAX/2)*kZ14;
1319 tpar[1] = (kYMC1MAX/2)*kZ14;
1321 const Float_t kXMC4C=kXMC1C*kZ14;
1322 const Float_t kYMC4Cp=kYMC1Cp*kZ14;
1323 const Float_t kYMC4Cm=kYMC1Cm*kZ14;
1324 gMC->Gsposp("CC4A", 7, "CM22",kXMC4C,kYMC4Cp,kZMCp, 0, "ONLY", tpar, 3);
1325 gMC->Gsposp("CC4A", 8, "CM22",-kXMC4C,kYMC4Cm,kZMCm, 0, "ONLY", tpar, 3);
1326 gMC->Gsposp("CC4A", 9, "CM22",kXMC4C,-kYMC4Cp,kZMCp, 0, "ONLY", tpar, 3);
1327 gMC->Gsposp("CC4A", 10, "CM22",-kXMC4C,-kYMC4Cm,kZMCm, 0, "ONLY", tpar, 3);
1330 // chamber type D, E and F (same size)
1331 tpar[0] = (kXMC1MAX/2.)*kZ14;
1332 tpar[1] = kYMC1MIN*kZ14;
1334 const Float_t kXMC4D=kXMC1D*kZ14;
1335 const Float_t kYMC4Dp=kYMC1Dp*kZ14;
1336 const Float_t kYMC4Dm=kYMC1Dm*kZ14;
1337 gMC->Gsposp("CC4A", 11, "CM22",kXMC4D,kYMC4Dm,kZMCm, 0, "ONLY", tpar, 3);
1338 gMC->Gsposp("CC4A", 12, "CM22",-kXMC4D,kYMC4Dp,kZMCp, 0, "ONLY", tpar, 3);
1339 gMC->Gsposp("CC4A", 13, "CM22",kXMC4D,-kYMC4Dm,kZMCm, 0, "ONLY", tpar, 3);
1340 gMC->Gsposp("CC4A", 14, "CM22",-kXMC4D,-kYMC4Dp,kZMCp, 0, "ONLY", tpar, 3);
1342 const Float_t kYMC4Ep=kYMC1Ep*kZ14;
1343 const Float_t kYMC4Em=kYMC1Em*kZ14;
1344 gMC->Gsposp("CC4A", 15, "CM22",kXMC4D,kYMC4Ep,kZMCp, 0, "ONLY", tpar, 3);
1345 gMC->Gsposp("CC4A", 16, "CM22",-kXMC4D,kYMC4Em,kZMCm, 0, "ONLY", tpar, 3);
1346 gMC->Gsposp("CC4A", 17, "CM22",kXMC4D,-kYMC4Ep,kZMCp, 0, "ONLY", tpar, 3);
1347 gMC->Gsposp("CC4A", 18, "CM22",-kXMC4D,-kYMC4Em,kZMCm, 0, "ONLY", tpar, 3);
1349 const Float_t kYMC4Fp=kYMC1Fp*kZ14;
1350 const Float_t kYMC4Fm=kYMC1Fm*kZ14;
1351 gMC->Gsposp("CC4A", 19, "CM22",kXMC4D,kYMC4Fm,kZMCm, 0, "ONLY", tpar, 3);
1352 gMC->Gsposp("CC4A", 20, "CM22",-kXMC4D,kYMC4Fp,kZMCp, 0, "ONLY", tpar, 3);
1353 gMC->Gsposp("CC4A", 21, "CM22",kXMC4D,-kYMC4Fm,kZMCm, 0, "ONLY", tpar, 3);
1354 gMC->Gsposp("CC4A", 22, "CM22",-kXMC4D,-kYMC4Fp,kZMCp, 0, "ONLY", tpar, 3);
1357 // Positioning second plane of station 2 in ALICE
1359 gMC->Gspos("CM22", 1, "ALIC", 0., 0., zpos4, 0, "ONLY");
1361 // End of geometry definition for the second plane of station 2
1363 // End of trigger geometry definition
1369 //___________________________________________
1370 void AliMUONv1::CreateMaterials()
1372 // *** DEFINITION OF AVAILABLE MUON MATERIALS ***
1375 Float_t ag1[3] = { 39.95,12.01,16. };
1376 Float_t zg1[3] = { 18.,6.,8. };
1377 Float_t wg1[3] = { .8,.0667,.13333 };
1378 Float_t dg1 = .001821;
1380 // Ar-buthane-freon gas -- trigger chambers
1381 Float_t atr1[4] = { 39.95,12.01,1.01,19. };
1382 Float_t ztr1[4] = { 18.,6.,1.,9. };
1383 Float_t wtr1[4] = { .56,.1262857,.2857143,.028 };
1384 Float_t dtr1 = .002599;
1387 Float_t agas[3] = { 39.95,12.01,16. };
1388 Float_t zgas[3] = { 18.,6.,8. };
1389 Float_t wgas[3] = { .74,.086684,.173316 };
1390 Float_t dgas = .0018327;
1392 // Ar-Isobutane gas (80%+20%) -- tracking
1393 Float_t ag[3] = { 39.95,12.01,1.01 };
1394 Float_t zg[3] = { 18.,6.,1. };
1395 Float_t wg[3] = { .8,.057,.143 };
1396 Float_t dg = .0019596;
1398 // Ar-Isobutane-Forane-SF6 gas (49%+7%+40%+4%) -- trigger
1399 Float_t atrig[5] = { 39.95,12.01,1.01,19.,32.066 };
1400 Float_t ztrig[5] = { 18.,6.,1.,9.,16. };
1401 Float_t wtrig[5] = { .49,1.08,1.5,1.84,0.04 };
1402 Float_t dtrig = .0031463;
1406 Float_t abak[3] = {12.01 , 1.01 , 16.};
1407 Float_t zbak[3] = {6. , 1. , 8.};
1408 Float_t wbak[3] = {6. , 6. , 1.};
1411 Float_t epsil, stmin, deemax, tmaxfd, stemax;
1413 Int_t iSXFLD = gAlice->Field()->Integ();
1414 Float_t sXMGMX = gAlice->Field()->Max();
1416 // --- Define the various materials for GEANT ---
1417 AliMaterial(9, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
1418 AliMaterial(10, "ALUMINIUM$", 26.98, 13., 2.7, 8.9, 37.2);
1419 AliMaterial(15, "AIR$ ", 14.61, 7.3, .001205, 30423.24, 67500);
1420 AliMixture(19, "Bakelite$", abak, zbak, dbak, -3, wbak);
1421 AliMixture(20, "ArC4H10 GAS$", ag, zg, dg, 3, wg);
1422 AliMixture(21, "TRIG GAS$", atrig, ztrig, dtrig, -5, wtrig);
1423 AliMixture(22, "ArCO2 80%$", ag1, zg1, dg1, 3, wg1);
1424 AliMixture(23, "Ar-freon $", atr1, ztr1, dtr1, 4, wtr1);
1425 AliMixture(24, "ArCO2 GAS$", agas, zgas, dgas, 3, wgas);
1427 epsil = .001; // Tracking precision,
1428 stemax = -1.; // Maximum displacement for multiple scat
1429 tmaxfd = -20.; // Maximum angle due to field deflection
1430 deemax = -.3; // Maximum fractional energy loss, DLS
1434 AliMedium(1, "AIR_CH_US ", 15, 1, iSXFLD, sXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
1438 AliMedium(4, "ALU_CH_US ", 9, 0, iSXFLD, sXMGMX, tmaxfd, fMaxStepAlu,
1439 fMaxDestepAlu, epsil, stmin);
1440 AliMedium(5, "ALU_CH_US ", 10, 0, iSXFLD, sXMGMX, tmaxfd, fMaxStepAlu,
1441 fMaxDestepAlu, epsil, stmin);
1445 AliMedium(6, "AR_CH_US ", 20, 1, iSXFLD, sXMGMX, tmaxfd, fMaxStepGas,
1446 fMaxDestepGas, epsil, stmin);
1448 // Ar-Isobuthane-Forane-SF6 gas
1450 AliMedium(7, "GAS_CH_TRIGGER ", 21, 1, iSXFLD, sXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
1452 AliMedium(8, "BAKE_CH_TRIGGER ", 19, 0, iSXFLD, sXMGMX, tmaxfd, fMaxStepAlu,
1453 fMaxDestepAlu, epsil, stmin);
1455 AliMedium(9, "ARG_CO2 ", 22, 1, iSXFLD, sXMGMX, tmaxfd, fMaxStepGas,
1456 fMaxDestepAlu, epsil, stmin);
1459 //___________________________________________
1461 void AliMUONv1::Init()
1464 // Initialize Tracking Chambers
1467 printf("\n\n\n Start Init for version 1 - CPC chamber type\n\n\n");
1469 for (i=0; i<AliMUONConstants::NCh(); i++) {
1470 ( (AliMUONChamber*) (*fChambers)[i])->Init();
1474 // Set the chamber (sensitive region) GEANT identifier
1475 AliMC* gMC = AliMC::GetMC();
1476 ((AliMUONChamber*)(*fChambers)[0])->SetGid(gMC->VolId("C01G"));
1477 ((AliMUONChamber*)(*fChambers)[1])->SetGid(gMC->VolId("C02G"));
1478 ((AliMUONChamber*)(*fChambers)[2])->SetGid(gMC->VolId("C03G"));
1479 ((AliMUONChamber*)(*fChambers)[3])->SetGid(gMC->VolId("C04G"));
1480 ((AliMUONChamber*)(*fChambers)[4])->SetGid(gMC->VolId("C05G"));
1481 ((AliMUONChamber*)(*fChambers)[5])->SetGid(gMC->VolId("C06G"));
1482 ((AliMUONChamber*)(*fChambers)[6])->SetGid(gMC->VolId("C07G"));
1483 ((AliMUONChamber*)(*fChambers)[7])->SetGid(gMC->VolId("C08G"));
1484 ((AliMUONChamber*)(*fChambers)[8])->SetGid(gMC->VolId("C09G"));
1485 ((AliMUONChamber*)(*fChambers)[9])->SetGid(gMC->VolId("C10G"));
1486 ((AliMUONChamber*)(*fChambers)[10])->SetGid(gMC->VolId("CG1A"));
1487 ((AliMUONChamber*)(*fChambers)[11])->SetGid(gMC->VolId("CG2A"));
1488 ((AliMUONChamber*)(*fChambers)[12])->SetGid(gMC->VolId("CG3A"));
1489 ((AliMUONChamber*)(*fChambers)[13])->SetGid(gMC->VolId("CG4A"));
1491 printf("\n\n\n Finished Init for version 0 - CPC chamber type\n\n\n");
1494 printf("\n\n\n Start Init for Trigger Circuits\n\n\n");
1495 for (i=0; i<AliMUONConstants::NTriggerCircuit(); i++) {
1496 ( (AliMUONTriggerCircuit*) (*fTriggerCircuits)[i])->Init(i);
1498 printf(" Finished Init for Trigger Circuits\n\n\n");
1503 //___________________________________________
1504 void AliMUONv1::StepManager()
1508 static Int_t vol[2];
1513 Float_t destep, step;
1515 static Float_t eloss, eloss2, xhit, yhit, tof, tlength;
1516 const Float_t kBig=1.e10;
1518 static Float_t hits[15];
1520 TClonesArray &lhits = *fHits;
1523 // Set maximum step size for gas
1524 // numed=gMC->GetMedium();
1526 // Only charged tracks
1527 if( !(gMC->TrackCharge()) ) return;
1529 // Only gas gap inside chamber
1530 // Tag chambers and record hits when track enters
1532 id=gMC->CurrentVolID(copy);
1534 for (Int_t i=1; i<=AliMUONConstants::NCh(); i++) {
1535 if(id==((AliMUONChamber*)(*fChambers)[i-1])->GetGid()){
1540 if (idvol == -1) return;
1542 // Get current particle id (ipart), track position (pos) and momentum (mom)
1543 gMC->TrackPosition(pos);
1544 gMC->TrackMomentum(mom);
1546 ipart = gMC->TrackPid();
1547 //Int_t ipart1 = gMC->IdFromPDG(ipart);
1548 //printf("ich, ipart %d %d \n",vol[0],ipart1);
1551 // momentum loss and steplength in last step
1552 destep = gMC->Edep();
1553 step = gMC->TrackStep();
1556 // record hits when track enters ...
1557 if( gMC->IsTrackEntering()) {
1558 gMC->SetMaxStep(fMaxStepGas);
1559 Double_t tc = mom[0]*mom[0]+mom[1]*mom[1];
1560 Double_t rt = TMath::Sqrt(tc);
1561 Double_t pmom = TMath::Sqrt(tc+mom[2]*mom[2]);
1562 Double_t tx=mom[0]/pmom;
1563 Double_t ty=mom[1]/pmom;
1564 Double_t tz=mom[2]/pmom;
1565 Double_t s=((AliMUONChamber*)(*fChambers)[idvol])
1568 theta = Float_t(TMath::ATan2(rt,Double_t(mom[2])))*kRaddeg;
1569 phi = Float_t(TMath::ATan2(Double_t(mom[1]),Double_t(mom[0])))*kRaddeg;
1570 hits[0] = Float_t(ipart); // Geant3 particle type
1571 hits[1] = pos[0]+s*tx; // X-position for hit
1572 hits[2] = pos[1]+s*ty; // Y-position for hit
1573 hits[3] = pos[2]+s*tz; // Z-position for hit
1574 hits[4] = theta; // theta angle of incidence
1575 hits[5] = phi; // phi angle of incidence
1576 hits[8] = (Float_t) fNPadHits; // first padhit
1577 hits[9] = -1; // last pad hit
1580 hits[10] = mom[3]; // hit momentum P
1581 hits[11] = mom[0]; // Px/P
1582 hits[12] = mom[1]; // Py/P
1583 hits[13] = mom[2]; // Pz/P
1585 tof=gMC->TrackTime();
1586 hits[14] = tof; // Time of flight
1587 // phi angle of incidence
1593 // Only if not trigger chamber
1596 // Initialize hit position (cursor) in the segmentation model
1597 ((AliMUONChamber*) (*fChambers)[idvol])
1598 ->SigGenInit(pos[0], pos[1], pos[2]);
1601 //printf("In the Trigger Chamber #%d\n",idvol-9);
1607 // Calculate the charge induced on a pad (disintegration) in case
1609 // Mip left chamber ...
1610 if( gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()){
1611 gMC->SetMaxStep(kBig);
1616 Float_t localPos[3];
1617 Float_t globalPos[3] = {pos[0], pos[1], pos[2]};
1620 gMC->Gmtod(globalPos,localPos,1);
1623 // tracking chambers
1624 x0 = 0.5*(xhit+pos[0]);
1625 y0 = 0.5*(yhit+pos[1]);
1635 if (eloss >0) MakePadHits(x0,y0,z0,eloss,tof,idvol);
1640 if (fNPadHits > (Int_t)hits[8]) {
1642 hits[9]= (Float_t) fNPadHits;
1645 new(lhits[fNhits++])
1646 AliMUONHit(fIshunt,gAlice->CurrentTrack(),vol,hits);
1649 // Check additional signal generation conditions
1650 // defined by the segmentation
1651 // model (boundary crossing conditions)
1653 (((AliMUONChamber*) (*fChambers)[idvol])
1654 ->SigGenCond(pos[0], pos[1], pos[2]))
1656 ((AliMUONChamber*) (*fChambers)[idvol])
1657 ->SigGenInit(pos[0], pos[1], pos[2]);
1659 Float_t localPos[3];
1660 Float_t globalPos[3] = {pos[0], pos[1], pos[2]};
1661 gMC->Gmtod(globalPos,localPos,1);
1664 // printf("\n-> MakePadHits, reason special %d",ipart);
1665 if (eloss > 0 && idvol < 10)
1666 MakePadHits(0.5*(xhit+pos[0]),0.5*(yhit+pos[1]),localPos[2],eloss,tof,idvol);
1672 // nothing special happened, add up energy loss