]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONFactory.cxx
Check if the provided path is a rootfile or a directory by using the
[u/mrichter/AliRoot.git] / MUON / AliMUONFactory.cxx
CommitLineData
be3bb6c1 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// Factory for muon chambers, segmentations and response //
18////////////////////////////////////////////////////////////
19
20/*
21$Log$
9af8b94b 22Revision 1.2 2001/05/16 14:57:17 alibrary
23New files for folders and Stack
24
9e1a0ddb 25Revision 1.1 2001/04/06 11:24:43 morsch
26Dependency on implementations of AliSegmentation and AliMUONResponse moved to AliMUONFactory class.
27Static method Build() builds the MUON system out of chambers, segmentation and response.
28
be3bb6c1 29*/
30#include "AliMUONFactory.h"
31#include "AliMUON.h"
32#include "AliMUONChamber.h"
33#include "AliMUONResponseV0.h"
34#include "AliMUONResponseTrigger.h"
35#include "AliMUONSegmentationV0.h"
36#include "AliMUONSegmentationV01.h"
37#include "AliMUONSegmentationV02.h"
38#include "AliMUONSegmentationV04.h"
39#include "AliMUONSegmentationV05.h"
40#include "AliMUONSegmentationSlat.h"
41#include "AliMUONSegmentationSlatN.h"
42#include "AliMUONSegmentationTrigger.h"
43#include "AliMUONSegmentationTriggerX.h"
44#include "AliMUONSegmentationTriggerY.h"
45
46ClassImp(AliMUONFactory)
47
48
49void AliMUONFactory::Build(AliMUON* where, const char* what)
50{
51//
52// Construct MUON from chambers, segmentation and responses
53//
54 char tmp[20];
55 AliMUON* pMUON = where;
56 strcpy(tmp, what);
57
58 if (strcmp(tmp, "default")==0) {
9e1a0ddb 59 if(pMUON->GetDebug()) {
60
61 printf("\nAliMUONFactory: --------AliMUONFactory------------------------------");
62 printf("\nAliMUONFactory: Non default version of MUON selected ");
63 printf("\nAliMUONFactory: You have to construct yourself the MUON elements !!");
64 printf("\nAliMUONFactory: ----------------------------------------------------");
65 }
be3bb6c1 66 pMUON->SetIshunt(0);
67 pMUON->SetMaxStepGas(0.1);
68 pMUON->SetMaxStepAlu(0.1);
69//
70// Version 0
71//
72// First define the number of planes that are segmented (1 or 2) by a call
73// to SetNsec.
74// Then chose for each chamber (chamber plane) the segmentation
75// and response model.
76// They should be equal for the two chambers of each station. In a future
77// version this will be enforced.
78//
79//
80 Int_t chamber;
81 // Default response: 5 mm of gas
82 AliMUONResponseV0* response0 = new AliMUONResponseV0;
83 response0->SetSqrtKx3AndDeriveKx2Kx4(0.7131); // sqrt(0.5085)
84 response0->SetSqrtKy3AndDeriveKy2Ky4(0.7642); // sqrt(0.5840)
85 response0->SetPitch(0.25); // anode-cathode distance
86 response0->SetSigmaIntegration(10.);
87 response0->SetChargeSlope(50);
88 response0->SetChargeSpread(0.18, 0.18);
89 response0->SetMaxAdc(4096);
90 response0->SetZeroSuppression(6);
91
92 // Response for 4 mm of gas (station 1)
93 // automatic consistency with width of sensitive medium in CreateGeometry ????
94 AliMUONResponseV0* responseSt1 = new AliMUONResponseV0;
95 // Mathieson parameters from L.Kharmandarian's thesis, page 190
96 responseSt1->SetSqrtKx3AndDeriveKx2Kx4(0.7000); // sqrt(0.4900)
97 responseSt1->SetSqrtKy3AndDeriveKy2Ky4(0.7550); // sqrt(0.5700)
98 responseSt1->SetPitch(0.20); // anode-cathode distance
99 responseSt1->SetSigmaIntegration(10.);
100 // ChargeSlope larger to compensate for the smaller anode-cathode distance
101 // and keep the same most probable ADC channel for mip's
102 responseSt1->SetChargeSlope(62.5);
103 // assumed proportionality to anode-cathode distance for ChargeSpread
104 responseSt1->SetChargeSpread(0.144, 0.144);
105 responseSt1->SetMaxAdc(4096);
106 responseSt1->SetZeroSuppression(6);
107
108//--------------------------------------------------------
109// Configuration for Chamber TC1/2 (Station 1) ----------
110//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
111 Float_t rseg1[4]={17.5, 55.2, 71.3, 95.5};
112 Int_t nseg1[4]={4, 4, 2, 1};
113//
114 chamber=1;
115// ^^^^^^^^^
116 pMUON->SetNsec(chamber-1,2);
117//
118 AliMUONSegmentationV01 *seg11=new AliMUONSegmentationV01(4);
119
120 seg11->SetSegRadii(rseg1);
121 seg11->SetPadSize(2.4, 0.4); // smaller pad size
122 seg11->SetDAnod(0.20); // smaller distance between anode wires
123 seg11->SetPadDivision(nseg1);
124
125 pMUON->SetSegmentationModel(chamber-1, 1, seg11);
126
127 AliMUONSegmentationV02 *seg12=new AliMUONSegmentationV02(4);
128 seg12->SetSegRadii(rseg1);
129 seg12->SetPadSize(0.6, 1.6); // smaller pad size
130 seg12->SetDAnod(0.20); // smaller distance between anode wires
131 seg12->SetPadDivision(nseg1);
132
133 pMUON->SetSegmentationModel(chamber-1, 2, seg12);
134
135 pMUON->SetResponseModel(chamber-1, responseSt1); // special response
136 pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
137
138 chamber=2;
139// ^^^^^^^^^
140//
141 pMUON->SetNsec(chamber-1,2);
142//
143 AliMUONSegmentationV01 *seg21=new AliMUONSegmentationV01(4);
144 seg21->SetSegRadii(rseg1);
145 seg21->SetPadSize(2.4, 0.4); // smaller pad size
146 seg21->SetDAnod(0.20); // smaller distance between anode wires
147 seg21->SetPadDivision(nseg1);
148 pMUON->SetSegmentationModel(chamber-1, 1, seg21);
149//
150 AliMUONSegmentationV02 *seg22=new AliMUONSegmentationV02(4);
151 seg22->SetSegRadii(rseg1);
152 seg22->SetPadSize(0.6, 1.6); // smaller pad size
153 seg22->SetDAnod(0.20); // smaller distance between anode wires
154 seg22->SetPadDivision(nseg1);
155 pMUON->SetSegmentationModel(chamber-1, 2, seg22);
156
157 pMUON->SetResponseModel(chamber-1, responseSt1); // special response
158 pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
159
160//
161//--------------------------------------------------------
162// Configuration for Chamber TC3/4 (Station 2) -----------
163///^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
164// Float_t rseg2[4]={23.5, 87.7, 122.4, 122.5};
9af8b94b 165 Float_t rseg2[4]={23.5, 53.5, 90.5, 122.5};
be3bb6c1 166 Int_t nseg2[4]={4, 4, 2, 1};
167//
168 chamber=3;
169// ^^^^^^^^^
170 pMUON->SetNsec(chamber-1,2);
171//
172 AliMUONSegmentationV01 *seg31=new AliMUONSegmentationV01(4);
173 seg31->SetSegRadii(rseg2);
174 seg31->SetPadSize(3.0, 0.5);
175 seg31->SetDAnod(3.0/3./4);
176 seg31->SetPadDivision(nseg2);
177 pMUON->SetSegmentationModel(chamber-1, 1, seg31);
178//
179 AliMUONSegmentationV02 *seg32=new AliMUONSegmentationV02(4);
180 seg32->SetSegRadii(rseg2);
181 seg32->SetPadSize(0.75, 2.0);
182 seg32->SetPadDivision(nseg2);
183 seg32->SetDAnod(3.0/3./4);
184
185 pMUON->SetSegmentationModel(chamber-1, 2, seg32);
186
187 pMUON->SetResponseModel(chamber-1, response0);
188 pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
189
190 chamber=4;
191// ^^^^^^^^^
192//
193 pMUON->SetNsec(chamber-1,2);
194//
195 AliMUONSegmentationV01 *seg41=new AliMUONSegmentationV01(4);
196 seg41->SetSegRadii(rseg2);
197 seg41->SetPadSize(3.0, 0.5);
198 seg41->SetDAnod(3.0/3./4);
199 seg41->SetPadDivision(nseg2);
200 pMUON->SetSegmentationModel(chamber-1, 1, seg41);
201//
202 AliMUONSegmentationV02 *seg42=new AliMUONSegmentationV02(4);
203 seg42->SetSegRadii(rseg2);
204 seg42->SetPadSize(0.75, 2.0);
205 seg42->SetPadDivision(nseg2);
206 seg42->SetDAnod(3.0/3./4);
207
208 pMUON->SetSegmentationModel(chamber-1, 2, seg42);
209
210 pMUON->SetResponseModel(chamber-1, response0);
211 pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
212
213
214//--------------------------------------------------------
215// Configuration for Chamber TC5/6 (Station 3) ----------
216//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
217 Int_t nseg3[4]={4, 4, 2, 1};
218 Int_t npcb5[36] = {0,0,2,0,
219 0,0,3,0,
220 0,1,3,0,
221 0,2,2,0,
222 0,1,2,0,
223 0,2,2,0,
224 0,1,3,0,
225 0,0,3,0,
226 0,0,2,0};
227
228 Float_t shift = 1.5/2.;
229 Float_t xpos5[9] = {2., 2., 2., 2.,33., 2., 2., 2., 2.};
230 Float_t ypos5 = -(20.+4.*(40.-2.*shift));
231
232 chamber=5;
233 pMUON->SetNsec(chamber-1,2);
234 AliMUONSegmentationSlat *seg51=new AliMUONSegmentationSlat(4);
235 seg51->SetNSlats(9);
236 seg51->SetShift(shift);
237 seg51->SetNPCBperSector(npcb5);
238 seg51->SetSlatXPositions(xpos5);
239 seg51->SetSlatYPosition(ypos5);
240 seg51->SetPadSize(10.,0.5);
241 seg51->SetDAnod(0.25);
242 seg51->SetPadDivision(nseg3);
243 pMUON->SetSegmentationModel(chamber-1, 1, seg51);
244
245 AliMUONSegmentationSlatN *seg52=new AliMUONSegmentationSlatN(4);
246 seg52->SetNSlats(9);
247 seg52->SetShift(shift);
248 seg52->SetNPCBperSector(npcb5);
249 seg52->SetSlatXPositions(xpos5);
250 seg52->SetSlatYPosition(ypos5);
251 seg52->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
252 seg52->SetDAnod(0.25);
253 seg52->SetPadDivision(nseg3);
254 pMUON->SetSegmentationModel(chamber-1, 2, seg52);
255 pMUON->SetResponseModel(chamber-1, response0);
256 pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
257
258 chamber=6;
259 pMUON->SetNsec(chamber-1,2);
260 AliMUONSegmentationSlat *seg61=new AliMUONSegmentationSlat(4);
261 seg61->SetNSlats(9);
262 seg61->SetShift(shift);
263 seg61->SetNPCBperSector(npcb5);
264 seg61->SetSlatXPositions(xpos5);
265 seg61->SetSlatYPosition(ypos5);
266 seg61->SetPadSize(10.,0.5);
267 seg61->SetDAnod(0.25);
268 seg61->SetPadDivision(nseg3);
269 pMUON->SetSegmentationModel(chamber-1, 1, seg61);
270
271 AliMUONSegmentationSlatN *seg62=new AliMUONSegmentationSlatN(4);
272 seg62->SetNSlats(9);
273 seg62->SetShift(shift);
274 seg62->SetNPCBperSector(npcb5);
275 seg62->SetSlatXPositions(xpos5);
276 seg62->SetSlatYPosition(ypos5);
277 seg62->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
278 seg62->SetDAnod(0.25);
279 seg62->SetPadDivision(nseg3);
280 pMUON->SetSegmentationModel(chamber-1, 2, seg62);
281 pMUON->SetResponseModel(chamber-1, response0);
282 pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
283
284//--------------------------------------------------------
285// Configuration for Chamber TC7/8 (Station 4) ----------
286//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
287
288 Int_t nseg4[4]={4, 4, 2, 1};
289
290 chamber=7;
291// ^^^^^^^^^
292
293 pMUON->SetNsec(chamber-1,2);
294//
295 AliMUONSegmentationSlat *seg71=new AliMUONSegmentationSlat(4);
296 Int_t npcb7[44] = {0,0,0,3,
297 0,0,2,2,
298 0,0,3,2,
299 0,2,2,1,
300 0,2,2,1,
301 0,1,2,1,
302 0,2,2,1,
303 0,2,2,1,
304 0,0,3,2,
305 0,0,2,2,
306 0,0,0,3};
307 Float_t xpos7[11] = {2., 2., 2., 2., 2., 40.5, 2., 2., 2., 2., 2.};
308 Float_t ypos7 = -(20.+5.*(40.-2.*shift));
309
310 seg71->SetNSlats(11);
311 seg71->SetShift(shift);
312 seg71->SetNPCBperSector(npcb7);
313 seg71->SetSlatXPositions(xpos7);
314 seg71->SetSlatYPosition(ypos7);
315
316 seg71->SetPadSize(10.,0.5);
317 seg71->SetDAnod(0.25);
318 seg71->SetPadDivision(nseg4);
319 pMUON->SetSegmentationModel(chamber-1, 1, seg71);
320
321 AliMUONSegmentationSlatN *seg72=new AliMUONSegmentationSlatN(4);
322
323 pMUON->SetSegmentationModel(chamber-1, 2, seg72);
324 seg72->SetNSlats(11);
325 seg72->SetShift(shift);
326 seg72->SetNPCBperSector(npcb7);
327 seg72->SetSlatXPositions(xpos7);
328 seg72->SetSlatYPosition(ypos7);
329 seg72->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
330 seg72->SetDAnod(0.25);
331 seg72->SetPadDivision(nseg4);
332
333 pMUON->SetResponseModel(chamber-1, response0);
334 pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
335
336 chamber=8;
337// ^^^^^^^^^
338 pMUON->SetNsec(chamber-1,2);
339//
340 AliMUONSegmentationSlat *seg81=new AliMUONSegmentationSlat(4);
341
342 seg81->SetNSlats(11);
343 seg81->SetShift(shift);
344 seg81->SetNPCBperSector(npcb7);
345 seg81->SetSlatXPositions(xpos7);
346 seg81->SetSlatYPosition(ypos7);
347 seg81->SetPadSize(10.,0.5);
348 seg81->SetDAnod(0.25);
349 seg81->SetPadDivision(nseg4);
350 pMUON->SetSegmentationModel(chamber-1, 1, seg81);
351
352 AliMUONSegmentationSlat *seg82=new AliMUONSegmentationSlatN(4);
353
354 pMUON->SetSegmentationModel(chamber-1, 2, seg82);
355 seg82->SetNSlats(11);
356 seg82->SetShift(shift);
357 seg82->SetNPCBperSector(npcb7);
358 seg82->SetSlatXPositions(xpos7);
359 seg82->SetSlatYPosition(ypos7);
360 seg82->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
361 seg82->SetDAnod(0.25);
362 seg82->SetPadDivision(nseg4);
363
364 pMUON->SetResponseModel(chamber-1, response0);
365 pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
366
367
368//--------------------------------------------------------
369// Configuration for Chamber TC9/10 (Station 5) ---------
370//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
371 chamber=9;
372// ^^^^^^^^^
373
374 pMUON->SetNsec(chamber-1,2);
375//
376 AliMUONSegmentationSlat *seg91=new AliMUONSegmentationSlat(4);
377 Int_t npcb9[52] = {0,0,0,3,
378 0,0,0,4,
379 0,0,2,3,
380 0,0,3,3,
381 0,2,2,2,
382 0,2,2,2,
383 0,1,2,2,
384 0,2,2,2,
385 0,2,2,2,
386 0,0,3,3,
387 0,0,2,3,
388 0,0,0,4,
389 0,0,0,3};
390
391 Float_t xpos9[13] = {2., 2., 2., 2., 2., 2., 40.5, 2., 2., 2., 2., 2., 2.};
392 Float_t ypos9 = -(20.+6.*(40.-2.*shift));
393
394 seg91->SetNSlats(13);
395 seg91->SetShift(shift);
396 seg91->SetNPCBperSector(npcb9);
397 seg91->SetSlatXPositions(xpos9);
398 seg91->SetSlatYPosition(ypos9);
399 seg91->SetPadSize(10.,0.5);
400 seg91->SetDAnod(0.25);
401 seg91->SetPadDivision(nseg4);
402 pMUON->SetSegmentationModel(chamber-1, 1, seg91);
403
404 AliMUONSegmentationSlatN *seg92=new AliMUONSegmentationSlatN(4);
405
406 pMUON->SetSegmentationModel(chamber-1, 2, seg92);
407 seg92->SetNSlats(13);
408 seg92->SetShift(shift);
409 seg92->SetNPCBperSector(npcb9);
410 seg92->SetSlatXPositions(xpos9);
411 seg92->SetSlatYPosition(ypos9);
412 seg92->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
413 seg92->SetDAnod(0.25);
414 seg92->SetPadDivision(nseg4);
415
416 pMUON->SetResponseModel(chamber-1, response0);
417 pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
418
419 chamber=10;
420// ^^^^^^^^^
421 pMUON->SetNsec(chamber-1,2);
422//
423 AliMUONSegmentationSlat *seg101=new AliMUONSegmentationSlat(4);
424
425 seg101->SetNSlats(13);
426 seg101->SetShift(shift);
427 seg101->SetNPCBperSector(npcb9);
428 seg101->SetSlatXPositions(xpos9);
429 seg101->SetSlatYPosition(ypos9);
430 seg101->SetPadSize(10.,0.5);
431 seg101->SetDAnod(0.25);
432 seg101->SetPadDivision(nseg4);
433 pMUON->SetSegmentationModel(chamber-1, 1, seg101);
434
435 AliMUONSegmentationSlatN *seg102=new AliMUONSegmentationSlatN(4);
436
437 pMUON->SetSegmentationModel(chamber-1, 2, seg102);
438 seg102->SetNSlats(13);
439 seg102->SetShift(shift);
440 seg102->SetNPCBperSector(npcb9);
441 seg102->SetSlatXPositions(xpos9);
442 seg102->SetSlatYPosition(ypos9);
443 seg102->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
444 seg102->SetDAnod(0.25);
445 seg102->SetPadDivision(nseg4);
446
447 pMUON->SetResponseModel(chamber-1, response0);
448 pMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
449
450//--------------------------------------------------------
451// Configuration for Trigger Stations --------------------
452//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
453// Cluster-size off
454 AliMUONResponseTrigger* responseTrigger0 = new AliMUONResponseTrigger;
455// Cluster-size on
456// AliMUONResponseTriggerV1* responseTrigger0 = new AliMUONResponseTriggerV1;
457
458 chamber=11;
459 pMUON->SetNsec(chamber-1,2);
460 AliMUONSegmentationTriggerX *seg111=new AliMUONSegmentationTriggerX;
461 pMUON->SetSegmentationModel(chamber-1, 1, seg111);
462 AliMUONSegmentationTriggerY *seg112=new AliMUONSegmentationTriggerY;
463 pMUON->SetSegmentationModel(chamber-1, 2, seg112);
464
465 pMUON->SetResponseModel(chamber-1, responseTrigger0);
466 pMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
467
468
469 chamber=12;
470 pMUON->SetNsec(chamber-1,2);
471 AliMUONSegmentationTriggerX *seg121=new AliMUONSegmentationTriggerX;
472 pMUON->SetSegmentationModel(chamber-1, 1, seg121);
473 AliMUONSegmentationTriggerY *seg122=new AliMUONSegmentationTriggerY;
474 pMUON->SetSegmentationModel(chamber-1, 2, seg122);
475
476 pMUON->SetResponseModel(chamber-1, responseTrigger0);
477 pMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
478
479 chamber=13;
480 pMUON->SetNsec(chamber-1,2);
481 AliMUONSegmentationTriggerX *seg131=new AliMUONSegmentationTriggerX;
482 pMUON->SetSegmentationModel(chamber-1, 1, seg131);
483 AliMUONSegmentationTriggerY *seg132=new AliMUONSegmentationTriggerY;
484 pMUON->SetSegmentationModel(chamber-1, 2, seg132);
485 pMUON->SetResponseModel(chamber-1, responseTrigger0);
486 pMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
487
488 chamber=14;
489 pMUON->SetNsec(chamber-1,2);
490 AliMUONSegmentationTriggerX *seg141=new AliMUONSegmentationTriggerX;
491 pMUON->SetSegmentationModel(chamber-1, 1, seg141);
492 AliMUONSegmentationTriggerY *seg142=new AliMUONSegmentationTriggerY;
493 pMUON->SetSegmentationModel(chamber-1, 2, seg142);
494
495 pMUON->SetResponseModel(chamber-1, responseTrigger0);
496 pMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
497 } else {
9e1a0ddb 498 if(pMUON->GetDebug()) {
499 printf("\nAliMUONFactory: --------AliMUONFactory------------------------------");
500 printf("\nAliMUONFactory: Non default version of MUON selected ");
501 printf("\nAliMUONFactory: You have to construct yourself the MUON elements !!");
502 printf("\nAliMUONFactory: ----------------------------------------------------");
503 }
be3bb6c1 504 }
505}
506