]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONv1.cxx
obsolete command removed
[u/mrichter/AliRoot.git] / MUON / AliMUONv1.cxx
CommitLineData
a9e2aefa 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/*
17$Log$
802a864d 18Revision 1.4 2000/06/26 14:02:38 morsch
19Add class AliMUONConstants with MUON specific constants using static memeber data and access methods.
20
f665c1ea 21Revision 1.3 2000/06/22 14:10:05 morsch
22HP scope problems corrected (PH)
23
e17592e9 24Revision 1.2 2000/06/15 07:58:49 morsch
25Code from MUON-dev joined
26
a9e2aefa 27Revision 1.1.2.14 2000/06/14 14:37:25 morsch
28Initialization of TriggerCircuit added (PC)
29
30Revision 1.1.2.13 2000/06/09 21:55:47 morsch
31Most coding rule violations corrected.
32
33Revision 1.1.2.12 2000/05/05 11:34:29 morsch
34Log inside comments.
35
36Revision 1.1.2.11 2000/05/05 10:06:48 morsch
37Coding Rule violations regarding trigger section corrected (CP)
38Log messages included.
39*/
40
41/////////////////////////////////////////////////////////
42// Manager and hits classes for set:MUON version 0 //
43/////////////////////////////////////////////////////////
44
45#include <TTUBE.h>
46#include <TNode.h>
47#include <TRandom.h>
48#include <TLorentzVector.h>
49#include <iostream.h>
50
51#include "AliMUONv1.h"
52#include "AliRun.h"
53#include "AliMC.h"
54#include "AliCallf77.h"
55#include "AliConst.h"
56#include "AliMUONChamber.h"
57#include "AliMUONHit.h"
58#include "AliMUONPadHit.h"
f665c1ea 59#include "AliMUONConstants.h"
a9e2aefa 60
61ClassImp(AliMUONv1)
62
63//___________________________________________
64AliMUONv1::AliMUONv1() : AliMUON()
65{
66// Constructor
67 fChambers = 0;
68}
69
70//___________________________________________
71AliMUONv1::AliMUONv1(const char *name, const char *title)
72 : AliMUON(name,title)
73{
74// Constructor
75}
76
77//___________________________________________
78void AliMUONv1::CreateGeometry()
79{
80//
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;
86
87// Distance between Stations
88//
89 Float_t bpar[3];
90 Float_t tpar[3];
91 Float_t pgpar[10];
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;
96 Bool_t frames=kFALSE;
97
98 Float_t dframez=0.9;
99 Float_t dr;
100 Float_t dstation;
101
102//
103// Rotation matrices in the x-y plane
104 Int_t idrotm[1199];
105// phi= 0 deg
106 AliMatrix(idrotm[1100], 90., 0., 90., 90., 0., 0.);
107// phi= 90 deg
108 AliMatrix(idrotm[1101], 90., 90., 90., 180., 0., 0.);
109// phi= 180 deg
110 AliMatrix(idrotm[1102], 90., 180., 90., 270., 0., 0.);
111// phi= 270 deg
112 AliMatrix(idrotm[1103], 90., 270., 90., 0., 0., 0.);
113//
114 Float_t phi=2*TMath::Pi()/12/2;
115
116//
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];
125
126
127 AliMUONChamber *iChamber, *iChamber1, *iChamber2;
128//********************************************************************
129// Station 1 **
130//********************************************************************
131// CONCENTRIC
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;
141
142//
143// Mother volume
144 tpar[0] = iChamber->RInner()-dframep1;
145 tpar[1] = (iChamber->ROuter()+dframep1)/TMath::Cos(phi);
146 tpar[2] = dstation/4;
147
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");
152// Aluminium frames
153// Outer frames
154 pgpar[0] = 360/12/2;
155 pgpar[1] = 360.;
156 pgpar[2] = 12.;
157 pgpar[3] = 2;
158 pgpar[4] = -dframez/2;
159 pgpar[5] = iChamber->ROuter();
160 pgpar[6] = pgpar[5]+dframep1;
161 pgpar[7] = +dframez/2;
162 pgpar[8] = pgpar[5];
163 pgpar[9] = pgpar[6];
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");
170//
171// Inner frame
172 tpar[0]= iChamber->RInner()-dframep1;
173 tpar[1]= iChamber->RInner();
174 tpar[2]= dframez/2;
175 gMC->Gsvolu("C01I", "TUBE", idAlu1, tpar, 3);
176 gMC->Gsvolu("C02I", "TUBE", idAlu1, tpar, 3);
177
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");
182//
183// Frame Crosses
184 if (frames) {
185
186 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
187 bpar[1] = dframep1/2;
188 bpar[2] = dframez/2;
189 gMC->Gsvolu("C01B", "BOX", idAlu1, bpar, 3);
190 gMC->Gsvolu("C02B", "BOX", idAlu1, bpar, 3);
191
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");
208
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");
225 }
226//
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");
235//
236// Sensitive volumes
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");
243//
244// Frame Crosses to be placed inside gas
245 if (frames) {
246
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);
253
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");
262
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");
271 }
272
273//
274//
275//********************************************************************
276// Station 2 **
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;
287
288//
289// Mother volume
290 tpar[0] = iChamber->RInner()-dframep;
291 tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
292 tpar[2] = dstation/4;
293
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");
298// Aluminium frames
299// Outer frames
300 pgpar[0] = 360/12/2;
301 pgpar[1] = 360.;
302 pgpar[2] = 12.;
303 pgpar[3] = 2;
304 pgpar[4] = -dframez/2;
305 pgpar[5] = iChamber->ROuter();
306 pgpar[6] = pgpar[5]+dframep;
307 pgpar[7] = +dframez/2;
308 pgpar[8] = pgpar[5];
309 pgpar[9] = pgpar[6];
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");
316//
317// Inner frame
318 tpar[0]= iChamber->RInner()-dframep;
319 tpar[1]= iChamber->RInner();
320 tpar[2]= dframez/2;
321 gMC->Gsvolu("C03I", "TUBE", idAlu1, tpar, 3);
322 gMC->Gsvolu("C04I", "TUBE", idAlu1, tpar, 3);
323
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");
328//
329// Frame Crosses
330 if (frames) {
331
332 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
333 bpar[1] = dframep/2;
334 bpar[2] = dframez/2;
335 gMC->Gsvolu("C03B", "BOX", idAlu1, bpar, 3);
336 gMC->Gsvolu("C04B", "BOX", idAlu1, bpar, 3);
337
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");
354
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");
371 }
372//
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");
381//
382// Sensitive volumes
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");
389
390 if (frames) {
391//
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;
395 bpar[1] = dframep/2;
396 bpar[2] = iChamber->DGas()/2;
397 gMC->Gsvolu("C03F", "BOX", idAlu1, bpar, 3);
398 gMC->Gsvolu("C04F", "BOX", idAlu1, bpar, 3);
399
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");
408
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");
417 }
418
419//********************************************************************
420// Station 3 **
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;
430
431 zfpos=-(iChamber->DGas()+dframez+iChamber->DAlu())/2;
432//
433// Mother volume
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");
441// Aluminium frames
442// Outer frames
443 pgpar[0] = 360/12/2;
444 pgpar[1] = 360.;
445 pgpar[2] = 12.;
446 pgpar[3] = 2;
447 pgpar[4] = -dframez/2;
448 pgpar[5] = iChamber->ROuter();
449 pgpar[6] = pgpar[5]+dframep;
450 pgpar[7] = +dframez/2;
451 pgpar[8] = pgpar[5];
452 pgpar[9] = pgpar[6];
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");
459//
460// Inner frame
461 tpar[0]= iChamber->RInner()-dframep;
462 tpar[1]= iChamber->RInner();
463 tpar[2]= dframez/2;
464 gMC->Gsvolu("C05I", "TUBE", idAlu1, tpar, 3);
465 gMC->Gsvolu("C06I", "TUBE", idAlu1, tpar, 3);
466
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");
471//
472// Frame Crosses
473 if (frames) {
474 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
475 bpar[1] = dframep/2;
476 bpar[2] = dframez/2;
477 gMC->Gsvolu("C05B", "BOX", idAlu1, bpar, 3);
478 gMC->Gsvolu("C06B", "BOX", idAlu1, bpar, 3);
479
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");
496
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");
513 }
514
515
516//
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");
525//
526// Sensitive volumes
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");
532//
533// Frame Crosses to be placed inside gas
534 if (frames) {
535 dr = (iChamber->ROuter() - iChamber->RInner());
536 bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
537 bpar[1] = dframep/2;
538 bpar[2] = iChamber->DGas()/2;
539 gMC->Gsvolu("C05F", "BOX", idAlu1, bpar, 3);
540 gMC->Gsvolu("C06F", "BOX", idAlu1, bpar, 3);
541
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");
550
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");
559}
560
561//********************************************************************
562// Station 4 **
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;
573
574//
575// Mother volume
576 tpar[0] = iChamber->RInner()-dframep;
577 tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
578 tpar[2] = dstation/4;
579
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");
584// Aluminium frames
585// Outer frames
586 pgpar[0] = 360/12/2;
587 pgpar[1] = 360.;
588 pgpar[2] = 12.;
589 pgpar[3] = 2;
590 pgpar[4] = -dframez/2;
591 pgpar[5] = iChamber->ROuter();
592 pgpar[6] = pgpar[5]+dframep;
593 pgpar[7] = +dframez/2;
594 pgpar[8] = pgpar[5];
595 pgpar[9] = pgpar[6];
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");
602//
603// Inner frame
604 tpar[0]= iChamber->RInner()-dframep;
605 tpar[1]= iChamber->RInner();
606 tpar[2]= dframez/2;
607 gMC->Gsvolu("C07I", "TUBE", idAlu1, tpar, 3);
608 gMC->Gsvolu("C08I", "TUBE", idAlu1, tpar, 3);
609
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");
614//
615// Frame Crosses
616 if (frames) {
617 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
618 bpar[1] = dframep/2;
619 bpar[2] = dframez/2;
620 gMC->Gsvolu("C07B", "BOX", idAlu1, bpar, 3);
621 gMC->Gsvolu("C08B", "BOX", idAlu1, bpar, 3);
622
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");
639
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");
656 }
657
658
659//
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");
668//
669// Sensitive volumes
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");
676//
677// Frame Crosses to be placed inside gas
678 if (frames) {
679 dr = (iChamber->ROuter() - iChamber->RInner());
680 bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
681 bpar[1] = dframep/2;
682 bpar[2] = iChamber->DGas()/2;
683 gMC->Gsvolu("C07F", "BOX", idAlu1, bpar, 3);
684 gMC->Gsvolu("C08F", "BOX", idAlu1, bpar, 3);
685
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");
694
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");
703 }
704//********************************************************************
705// Station 5 **
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;
716
717//
718// Mother volume
719 tpar[0] = iChamber->RInner()-dframep;
720 tpar[1] = (iChamber->ROuter()+dframep)/TMath::Cos(phi);
721 tpar[2] = dstation/4;
722
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");
727// Aluminium frames
728// Outer frames
729 pgpar[0] = 360/12/2;
730 pgpar[1] = 360.;
731 pgpar[2] = 12.;
732 pgpar[3] = 2;
733 pgpar[4] = -dframez/2;
734 pgpar[5] = iChamber->ROuter();
735 pgpar[6] = pgpar[5]+dframep;
736 pgpar[7] = +dframez/2;
737 pgpar[8] = pgpar[5];
738 pgpar[9] = pgpar[6];
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");
745//
746// Inner frame
747 tpar[0]= iChamber->RInner()-dframep;
748 tpar[1]= iChamber->RInner();
749 tpar[2]= dframez/2;
750 gMC->Gsvolu("C09I", "TUBE", idAlu1, tpar, 3);
751 gMC->Gsvolu("C10I", "TUBE", idAlu1, tpar, 3);
752
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");
757
758 if (frames) {
759//
760// Frame Crosses
761
762 bpar[0] = (iChamber->ROuter() - iChamber->RInner())/2;
763 bpar[1] = dframep/2;
764 bpar[2] = dframez/2;
765 gMC->Gsvolu("C09B", "BOX", idAlu1, bpar, 3);
766 gMC->Gsvolu("C10B", "BOX", idAlu1, bpar, 3);
767
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");
784
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");
801 }
802
803
804//
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");
813//
814// Sensitive volumes
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");
821//
822// Frame Crosses to be placed inside gas
823 if (frames) {
824 dr = (iChamber->ROuter() - iChamber->RInner());
825 bpar[0] = TMath::Sqrt(dr*dr-dframep*dframep/4)/2;
826 bpar[1] = dframep/2;
827 bpar[2] = iChamber->DGas()/2;
828 gMC->Gsvolu("C09F", "BOX", idAlu1, bpar, 3);
829 gMC->Gsvolu("C10F", "BOX", idAlu1, bpar, 3);
830
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");
839
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");
848 }
849
850///////////////////////////////////////
851// GEOMETRY FOR THE TRIGGER CHAMBERS //
852///////////////////////////////////////
853
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)
858
859// Parameters of the Trigger Chambers
860
861
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.;
871
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;
875
876
877// TRIGGER STATION 1 - TRIGGER STATION 1 - TRIGGER STATION 1
878
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];
884
885 // 03/00
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
890 //
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
895
896 zpos1=iChamber1->Z();
897 zpos2=iChamber2->Z();
898
899
900// Mother volume definition
901 tpar[0] = iChamber->RInner();
902 tpar[1] = iChamber->ROuter();
903 tpar[2] = 4.0;
904 gMC->Gsvolu("CM11", "TUBE", idAir, tpar, 3);
905 gMC->Gsvolu("CM12", "TUBE", idAir, tpar, 3);
906
907// Definition of the flange between the beam shielding and the RPC
908 tpar[0]= kRMIN1;
909 tpar[1]= kRMAX1;
910 tpar[2]= 4.0;
911
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");
915
916
917// FIRST PLANE OF STATION 1
918
919// ratios of zpos1m/zpos1p and inverse for first plane
920 Float_t zmp=(zpos1-3.6)/(zpos1+3.6);
921 Float_t zpm=1./zmp;
922
923
924// Definition of prototype for chambers in the first plane
925
926 tpar[0]= 0.;
927 tpar[1]= 0.;
928 tpar[2]= 0.;
929
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
933
934// chamber type A
935 tpar[0] = -1.;
936 tpar[1] = -1.;
937
938 const Float_t kXMC1A=kXMC1MED+(kXMC1MAX-kXMC1MED)/2.;
939 const Float_t kYMC1Am=0.;
940 const Float_t kYMC1Ap=0.;
941
942 tpar[2] = 0.1;
943 gMC->Gsposp("CG1A", 1, "CB1A", 0., 0., 0., 0, "ONLY",tpar,3);
944 tpar[2] = 0.3;
945 gMC->Gsposp("CB1A", 1, "CC1A", 0., 0., 0., 0, "ONLY",tpar,3);
946
947 tpar[2] = 0.4;
948 tpar[0] = (kXMC1MAX-kXMC1MED)/2.;
949 tpar[1] = kYMC1MIN;
950
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);
953
954// chamber type B
955 Float_t tpar1save=tpar[1];
956 Float_t y1msave=kYMC1Am;
957 Float_t y1psave=kYMC1Ap;
958
959 tpar[0] = (kXMC1MAX-kXMC1MIN)/2.;
960 tpar[1] = (kYMC1MAX-kYMC1MIN)/2.;
961
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];
965
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);
970
971// chamber type C (end of type B !!)
972 tpar1save=tpar[1];
973 y1msave=kYMC1Bm;
974 y1psave=kYMC1Bp;
975
976 tpar[0] = kXMC1MAX/2;
977 tpar[1] = kYMC1MAX/2;
978
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];
983
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);
988
989// chamber type D, E and F (same size)
990 tpar1save=tpar[1];
991 y1msave=kYMC1Cm;
992 y1psave=kYMC1Cp;
993
994 tpar[0] = kXMC1MAX/2.;
995 tpar[1] = kYMC1MIN;
996
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];
1000
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);
1005
1006
1007 tpar1save=tpar[1];
1008 y1msave=kYMC1Dm;
1009 y1psave=kYMC1Dp;
1010 const Float_t kYMC1Ep=(y1msave+tpar1save)*zpm+tpar[1];
1011 const Float_t kYMC1Em=(y1psave+tpar1save)*zmp+tpar[1];
1012
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);
1017
1018 tpar1save=tpar[1];
1019 y1msave=kYMC1Em;
1020 y1psave=kYMC1Ep;
1021 const Float_t kYMC1Fp=(y1msave+tpar1save)*zpm+tpar[1];
1022 const Float_t kYMC1Fm=(y1psave+tpar1save)*zmp+tpar[1];
1023
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);
1028
1029// Positioning first plane in ALICE
1030 gMC->Gspos("CM11", 1, "ALIC", 0., 0., zpos1, 0, "ONLY");
1031
1032// End of geometry definition for the first plane of station 1
1033
1034
1035
1036// SECOND PLANE OF STATION 1 : proj ratio = zpos2/zpos1
1037
1038 const Float_t kZ12=zpos2/zpos1;
1039
1040// Definition of prototype for chambers in the second plane of station 1
1041
1042 tpar[0]= 0.;
1043 tpar[1]= 0.;
1044 tpar[2]= 0.;
1045
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
1049
1050// chamber type A
1051 tpar[0] = -1.;
1052 tpar[1] = -1.;
1053
1054 const Float_t kXMC2A=kXMC1A*kZ12;
1055 const Float_t kYMC2Am=0.;
1056 const Float_t kYMC2Ap=0.;
1057
1058 tpar[2] = 0.1;
1059 gMC->Gsposp("CG2A", 1, "CB2A", 0., 0., 0., 0, "ONLY",tpar,3);
1060 tpar[2] = 0.3;
1061 gMC->Gsposp("CB2A", 1, "CC2A", 0., 0., 0., 0, "ONLY",tpar,3);
1062
1063 tpar[2] = 0.4;
1064 tpar[0] = ((kXMC1MAX-kXMC1MED)/2.)*kZ12;
1065 tpar[1] = kYMC1MIN*kZ12;
1066
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);
1069
1070
1071// chamber type B
1072
1073 tpar[0] = ((kXMC1MAX-kXMC1MIN)/2.)*kZ12;
1074 tpar[1] = ((kYMC1MAX-kYMC1MIN)/2.)*kZ12;
1075
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);
1083
1084
1085// chamber type C (end of type B !!)
1086
1087 tpar[0] = (kXMC1MAX/2)*kZ12;
1088 tpar[1] = (kYMC1MAX/2)*kZ12;
1089
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);
1097
1098// chamber type D, E and F (same size)
1099
1100 tpar[0] = (kXMC1MAX/2.)*kZ12;
1101 tpar[1] = kYMC1MIN*kZ12;
1102
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);
1110
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);
1117
1118
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);
1125
1126// Positioning second plane of station 1 in ALICE
1127
1128 gMC->Gspos("CM12", 1, "ALIC", 0., 0., zpos2, 0, "ONLY");
1129
1130// End of geometry definition for the second plane of station 1
1131
1132
1133
1134// TRIGGER STATION 2 - TRIGGER STATION 2 - TRIGGER STATION 2
1135
1136 // 03/00
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
1141 //
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();
1150
1151
1152// Mother volume definition
1153 tpar[0] = iChamber->RInner();
1154 tpar[1] = iChamber->ROuter();
1155 tpar[2] = 4.0;
1156
1157 gMC->Gsvolu("CM21", "TUBE", idAir, tpar, 3);
1158 gMC->Gsvolu("CM22", "TUBE", idAir, tpar, 3);
1159
1160// Definition of the flange between the beam shielding and the RPC
1161// ???? interface shielding
1162
1163 tpar[0]= kRMIN2;
1164 tpar[1]= kRMAX2;
1165 tpar[2]= 4.0;
1166
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");
1170
1171
1172
1173// FIRST PLANE OF STATION 2 : proj ratio = zpos3/zpos1
1174
1175 const Float_t kZ13=zpos3/zpos1;
1176
1177// Definition of prototype for chambers in the first plane of station 2
1178 tpar[0]= 0.;
1179 tpar[1]= 0.;
1180 tpar[2]= 0.;
1181
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
1185
1186
1187// chamber type A
1188 tpar[0] = -1.;
1189 tpar[1] = -1.;
1190
1191 const Float_t kXMC3A=kXMC1A*kZ13;
1192 const Float_t kYMC3Am=0.;
1193 const Float_t kYMC3Ap=0.;
1194
1195 tpar[2] = 0.1;
1196 gMC->Gsposp("CG3A", 1, "CB3A", 0., 0., 0., 0, "ONLY",tpar,3);
1197 tpar[2] = 0.3;
1198 gMC->Gsposp("CB3A", 1, "CC3A", 0., 0., 0., 0, "ONLY",tpar,3);
1199
1200 tpar[2] = 0.4;
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);
1205
1206
1207// chamber type B
1208 tpar[0] = ((kXMC1MAX-kXMC1MIN)/2.)*kZ13;
1209 tpar[1] = ((kYMC1MAX-kYMC1MIN)/2.)*kZ13;
1210
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);
1218
1219
1220// chamber type C (end of type B !!)
1221 tpar[0] = (kXMC1MAX/2)*kZ13;
1222 tpar[1] = (kYMC1MAX/2)*kZ13;
1223
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);
1231
1232
1233// chamber type D, E and F (same size)
1234
1235 tpar[0] = (kXMC1MAX/2.)*kZ13;
1236 tpar[1] = kYMC1MIN*kZ13;
1237
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);
1245
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);
1252
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);
1259
1260
1261// Positioning first plane of station 2 in ALICE
1262
1263 gMC->Gspos("CM21", 1, "ALIC", 0., 0., zpos3, 0, "ONLY");
1264
1265// End of geometry definition for the first plane of station 2
1266
1267
1268
1269
1270// SECOND PLANE OF STATION 2 : proj ratio = zpos4/zpos1
1271
1272 const Float_t kZ14=zpos4/zpos1;
1273
1274// Definition of prototype for chambers in the second plane of station 2
1275
1276 tpar[0]= 0.;
1277 tpar[1]= 0.;
1278 tpar[2]= 0.;
1279
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
1283
1284// chamber type A
1285 tpar[0] = -1.;
1286 tpar[1] = -1.;
1287
1288 const Float_t kXMC4A=kXMC1A*kZ14;
1289 const Float_t kYMC4Am=0.;
1290 const Float_t kYMC4Ap=0.;
1291
1292 tpar[2] = 0.1;
1293 gMC->Gsposp("CG4A", 1, "CB4A", 0., 0., 0., 0, "ONLY",tpar,3);
1294 tpar[2] = 0.3;
1295 gMC->Gsposp("CB4A", 1, "CC4A", 0., 0., 0., 0, "ONLY",tpar,3);
1296
1297 tpar[2] = 0.4;
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);
1302
1303
1304// chamber type B
1305 tpar[0] = ((kXMC1MAX-kXMC1MIN)/2.)*kZ14;
1306 tpar[1] = ((kYMC1MAX-kYMC1MIN)/2.)*kZ14;
1307
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);
1315
1316
1317// chamber type C (end of type B !!)
1318 tpar[0] =(kXMC1MAX/2)*kZ14;
1319 tpar[1] = (kYMC1MAX/2)*kZ14;
1320
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);
1328
1329
1330// chamber type D, E and F (same size)
1331 tpar[0] = (kXMC1MAX/2.)*kZ14;
1332 tpar[1] = kYMC1MIN*kZ14;
1333
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);
1341
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);
1348
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);
1355
1356
1357// Positioning second plane of station 2 in ALICE
1358
1359 gMC->Gspos("CM22", 1, "ALIC", 0., 0., zpos4, 0, "ONLY");
1360
1361// End of geometry definition for the second plane of station 2
1362
1363// End of trigger geometry definition
1364
1365}
1366
1367
1368
1369//___________________________________________
1370void AliMUONv1::CreateMaterials()
1371{
1372 // *** DEFINITION OF AVAILABLE MUON MATERIALS ***
1373 //
1374 // Ar-CO2 gas
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;
1379 //
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;
1385 //
1386 // Ar-CO2 gas
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;
1391 //
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;
1397 //
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;
1403 //
1404 // bakelite
1405
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.};
1409 Float_t dbak = 1.4;
1410
1411 Float_t epsil, stmin, deemax, tmaxfd, stemax;
1412
1413 Int_t iSXFLD = gAlice->Field()->Integ();
1414 Float_t sXMGMX = gAlice->Field()->Max();
1415 //
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);
1426
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
1431 stmin = -.8;
1432 //
1433 // Air
1434 AliMedium(1, "AIR_CH_US ", 15, 1, iSXFLD, sXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
1435 //
1436 // Aluminum
1437
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);
1442 //
1443 // Ar-isoC4H10 gas
1444
1445 AliMedium(6, "AR_CH_US ", 20, 1, iSXFLD, sXMGMX, tmaxfd, fMaxStepGas,
1446 fMaxDestepGas, epsil, stmin);
1447//
1448 // Ar-Isobuthane-Forane-SF6 gas
1449
1450 AliMedium(7, "GAS_CH_TRIGGER ", 21, 1, iSXFLD, sXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
1451
1452 AliMedium(8, "BAKE_CH_TRIGGER ", 19, 0, iSXFLD, sXMGMX, tmaxfd, fMaxStepAlu,
1453 fMaxDestepAlu, epsil, stmin);
1454
1455 AliMedium(9, "ARG_CO2 ", 22, 1, iSXFLD, sXMGMX, tmaxfd, fMaxStepGas,
1456 fMaxDestepAlu, epsil, stmin);
1457}
1458
1459//___________________________________________
1460
1461void AliMUONv1::Init()
1462{
1463 //
1464 // Initialize Tracking Chambers
1465 //
1466
1467 printf("\n\n\n Start Init for version 1 - CPC chamber type\n\n\n");
e17592e9 1468 Int_t i;
f665c1ea 1469 for (i=0; i<AliMUONConstants::NCh(); i++) {
a9e2aefa 1470 ( (AliMUONChamber*) (*fChambers)[i])->Init();
1471 }
1472
1473 //
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"));
1490
1491 printf("\n\n\n Finished Init for version 0 - CPC chamber type\n\n\n");
1492
1493 //cp
1494 printf("\n\n\n Start Init for Trigger Circuits\n\n\n");
f665c1ea 1495 for (i=0; i<AliMUONConstants::NTriggerCircuit(); i++) {
a9e2aefa 1496 ( (AliMUONTriggerCircuit*) (*fTriggerCircuits)[i])->Init(i);
1497 }
1498 printf(" Finished Init for Trigger Circuits\n\n\n");
1499 //cp
1500
1501}
1502
1503//___________________________________________
1504void AliMUONv1::StepManager()
1505{
1506 Int_t copy, id;
1507 static Int_t idvol;
1508 static Int_t vol[2];
1509 Int_t ipart;
1510 TLorentzVector pos;
1511 TLorentzVector mom;
1512 Float_t theta,phi;
1513 Float_t destep, step;
1514
1515 static Float_t eloss, eloss2, xhit, yhit, tof, tlength;
1516 const Float_t kBig=1.e10;
a9e2aefa 1517 // modifs perso
1518 static Float_t hits[15];
1519
1520 TClonesArray &lhits = *fHits;
1521
1522 //
1523 // Set maximum step size for gas
1524 // numed=gMC->GetMedium();
1525 //
1526 // Only charged tracks
1527 if( !(gMC->TrackCharge()) ) return;
1528 //
1529 // Only gas gap inside chamber
1530 // Tag chambers and record hits when track enters
1531 idvol=-1;
1532 id=gMC->CurrentVolID(copy);
1533
f665c1ea 1534 for (Int_t i=1; i<=AliMUONConstants::NCh(); i++) {
a9e2aefa 1535 if(id==((AliMUONChamber*)(*fChambers)[i-1])->GetGid()){
1536 vol[0]=i;
1537 idvol=i-1;
1538 }
1539 }
1540 if (idvol == -1) return;
1541 //
1542 // Get current particle id (ipart), track position (pos) and momentum (mom)
1543 gMC->TrackPosition(pos);
1544 gMC->TrackMomentum(mom);
1545
1546 ipart = gMC->TrackPid();
1547 //Int_t ipart1 = gMC->IdFromPDG(ipart);
1548 //printf("ich, ipart %d %d \n",vol[0],ipart1);
1549
1550 //
1551 // momentum loss and steplength in last step
1552 destep = gMC->Edep();
1553 step = gMC->TrackStep();
1554
1555 //
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])
1566 ->ResponseModel()
1567 ->Pitch()/tz;
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
1578
1579 // modifs perso
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
1584 // fin modifs perso
1585 tof=gMC->TrackTime();
1586 hits[14] = tof; // Time of flight
1587 // phi angle of incidence
1588 tlength = 0;
1589 eloss = 0;
1590 eloss2 = 0;
1591 xhit = pos[0];
1592 yhit = pos[1];
1593 // Only if not trigger chamber
1594 if(idvol<10) {
1595 //
1596 // Initialize hit position (cursor) in the segmentation model
1597 ((AliMUONChamber*) (*fChambers)[idvol])
1598 ->SigGenInit(pos[0], pos[1], pos[2]);
1599 } else {
1600 //geant3->Gpcxyz();
1601 //printf("In the Trigger Chamber #%d\n",idvol-9);
1602 }
1603 }
1604 eloss2+=destep;
1605
1606 //
1607 // Calculate the charge induced on a pad (disintegration) in case
1608 //
1609 // Mip left chamber ...
1610 if( gMC->IsTrackExiting() || gMC->IsTrackStop() || gMC->IsTrackDisappeared()){
1611 gMC->SetMaxStep(kBig);
1612 eloss += destep;
1613 tlength += step;
1614
802a864d 1615 Float_t x0,y0,z0;
1616 Float_t localPos[3];
1617 Float_t globalPos[3] = {pos[0], pos[1], pos[2]};
1618
a9e2aefa 1619
802a864d 1620 gMC->Gmtod(globalPos,localPos,1);
1621
a9e2aefa 1622 if(idvol<10) {
1623// tracking chambers
1624 x0 = 0.5*(xhit+pos[0]);
1625 y0 = 0.5*(yhit+pos[1]);
802a864d 1626 z0 = localPos[2];
a9e2aefa 1627 } else {
1628// trigger chambers
1629 x0=xhit;
1630 y0=yhit;
802a864d 1631 z0=0.;
a9e2aefa 1632 }
1633
1634
802a864d 1635 if (eloss >0) MakePadHits(x0,y0,z0,eloss,tof,idvol);
a9e2aefa 1636
1637
1638 hits[6]=tlength;
1639 hits[7]=eloss2;
1640 if (fNPadHits > (Int_t)hits[8]) {
1641 hits[8]= hits[8]+1;
1642 hits[9]= (Float_t) fNPadHits;
1643 }
1644
1645 new(lhits[fNhits++])
1646 AliMUONHit(fIshunt,gAlice->CurrentTrack(),vol,hits);
1647 eloss = 0;
1648 //
1649 // Check additional signal generation conditions
1650 // defined by the segmentation
1651 // model (boundary crossing conditions)
1652 } else if
1653 (((AliMUONChamber*) (*fChambers)[idvol])
1654 ->SigGenCond(pos[0], pos[1], pos[2]))
1655 {
1656 ((AliMUONChamber*) (*fChambers)[idvol])
1657 ->SigGenInit(pos[0], pos[1], pos[2]);
802a864d 1658
1659 Float_t localPos[3];
1660 Float_t globalPos[3] = {pos[0], pos[1], pos[2]};
1661 gMC->Gmtod(globalPos,localPos,1);
1662
1663
a9e2aefa 1664// printf("\n-> MakePadHits, reason special %d",ipart);
1665 if (eloss > 0 && idvol < 10)
802a864d 1666 MakePadHits(0.5*(xhit+pos[0]),0.5*(yhit+pos[1]),localPos[2],eloss,tof,idvol);
a9e2aefa 1667 xhit = pos[0];
1668 yhit = pos[1];
1669 eloss = destep;
1670 tlength += step ;
1671 //
1672 // nothing special happened, add up energy loss
1673 } else {
1674 eloss += destep;
1675 tlength += step ;
1676 }
1677}
1678
1679