]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONFactory.cxx
Remove delete from class destructor (Ch. Finck)
[u/mrichter/AliRoot.git] / MUON / AliMUONFactory.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 ////////////////////////////////////////////////////////////
17 //  Factory for muon chambers, segmentations and response //
18 ////////////////////////////////////////////////////////////
19
20 /* $Id$ */
21
22 #include "AliMUONFactory.h"
23 #include "AliMUON.h"
24 #include "AliMUONChamber.h"
25 #include "AliMUONResponseV0.h"
26 #include "AliMUONResponseTrigger.h"
27 #include "AliMUONSegmentationV01.h"
28 #include "AliMUONSegmentationV02.h"
29 #include "AliMUONSegmentationSlat.h"
30 #include "AliMUONSegmentationSlatN.h"
31 #include "AliMUONSegmentationTriggerX.h"
32 #include "AliMUONSegmentationTriggerY.h"
33 #include "AliLog.h"
34
35 ClassImp(AliMUONFactory)
36
37 //__________________________________________________________________________
38 AliMUONFactory::AliMUONFactory()
39   : TObject(),
40     fMUON(0),
41     fResponse0(0)
42 {
43 //
44 }
45
46 //__________________________________________________________________________
47 AliMUONFactory::AliMUONFactory(const AliMUONFactory& rhs)
48   : TObject(rhs)
49 {
50 // Protected copy constructor
51
52   AliFatal("Not implemented.");
53 }
54
55 //__________________________________________________________________________
56
57 AliMUONFactory::~AliMUONFactory()
58 {
59 //
60 }
61
62 //__________________________________________________________________________
63 AliMUONFactory&  AliMUONFactory::operator=(const AliMUONFactory& rhs)
64 {
65 // Protected assignement operator
66
67   if (this == &rhs) return *this;
68
69   AliFatal("Not implemented.");
70     
71   return *this;  
72 }    
73           
74 //__________________________________________________________________________
75 void AliMUONFactory::BuildCommon() 
76 {
77 //
78 // Construct the default response.
79 //
80
81         // Default response: 5 mm of gas
82         fResponse0 = new AliMUONResponseV0;
83         fResponse0->SetSqrtKx3AndDeriveKx2Kx4(0.7131); // sqrt(0.5085)
84         fResponse0->SetSqrtKy3AndDeriveKy2Ky4(0.7642); // sqrt(0.5840)
85         fResponse0->SetPitch(0.25); // anode-cathode distance
86         fResponse0->SetSigmaIntegration(10.);
87         fResponse0->SetChargeSlope(10);
88         fResponse0->SetChargeSpread(0.18, 0.18);
89         fResponse0->SetMaxAdc(4096);
90         fResponse0->SetSaturation(3000);
91         fResponse0->SetZeroSuppression(6);
92 }       
93         
94 //__________________________________________________________________________
95 void AliMUONFactory::BuildStation1() 
96 {
97 //--------------------------------------------------------
98 // Configuration for Chamber TC1/2  (Station 1) ----------           
99 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
100
101         // Response for 4 mm of gas (station 1)
102         // automatic consistency with width of sensitive medium in CreateGeometry ????
103         AliMUONResponseV0* responseSt1 = new AliMUONResponseV0;
104         // Mathieson parameters from L.Kharmandarian's thesis, page 190
105         responseSt1->SetSqrtKx3AndDeriveKx2Kx4(0.7000); // sqrt(0.4900)
106         responseSt1->SetSqrtKy3AndDeriveKy2Ky4(0.7550); // sqrt(0.5700)
107         responseSt1->SetPitch(0.20); // anode-cathode distance
108         responseSt1->SetSigmaIntegration(10.);
109         // ChargeSlope larger to compensate for the smaller anode-cathode distance
110         // and keep the same most probable ADC channel for mip's
111         responseSt1->SetChargeSlope(62.5); 
112         // assumed proportionality to anode-cathode distance for ChargeSpread
113         responseSt1->SetChargeSpread(0.144, 0.144);
114         responseSt1->SetMaxAdc(4096);
115         responseSt1->SetSaturation(3000);
116         responseSt1->SetZeroSuppression(6);
117         
118         //--------------------------------------------------------
119         // Configuration for Chamber TC1/2  (Station 1) ----------           
120
121         Float_t rseg1[4]={17.5, 55.2, 71.3, 95.5};
122         Int_t   nseg1[4]={4, 4, 2, 1};
123 //
124         Int_t chamber=1;
125 //      ^^^^^^^^^^^^^^^^
126         fMUON->SetNsec(chamber-1,2);
127 //
128         AliMUONSegmentationV01 *seg11=new AliMUONSegmentationV01(4);
129         
130         seg11->SetSegRadii(rseg1);
131         seg11->SetPadSize(2.4, 0.4); // smaller pad size
132         seg11->SetDAnod(0.20); // smaller distance between anode wires
133         seg11->SetPadDivision(nseg1);
134         
135         fMUON->SetSegmentationModel(chamber-1, 1, seg11);
136         
137         AliMUONSegmentationV02 *seg12=new AliMUONSegmentationV02(4);
138         seg12->SetSegRadii(rseg1); 
139         seg12->SetPadSize(0.6, 1.6); // smaller pad size
140         seg12->SetDAnod(0.20); // smaller distance between anode wires
141         seg12->SetPadDivision(nseg1);
142         
143         fMUON->SetSegmentationModel(chamber-1, 2, seg12);
144         
145         fMUON->SetResponseModel(chamber-1, responseSt1); // special response        
146         fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
147         
148         chamber=2;
149 //      ^^^^^^^^^
150 //
151         fMUON->SetNsec(chamber-1,2);
152 //
153         AliMUONSegmentationV01 *seg21=new AliMUONSegmentationV01(4);
154         seg21->SetSegRadii(rseg1);
155         seg21->SetPadSize(2.4, 0.4); // smaller pad size
156         seg21->SetDAnod(0.20); // smaller distance between anode wires
157         seg21->SetPadDivision(nseg1);
158         fMUON->SetSegmentationModel(chamber-1, 1, seg21);
159 //
160         AliMUONSegmentationV02 *seg22=new AliMUONSegmentationV02(4);
161         seg22->SetSegRadii(rseg1); 
162         seg22->SetPadSize(0.6, 1.6); // smaller pad size
163         seg22->SetDAnod(0.20); // smaller distance between anode wires
164         seg22->SetPadDivision(nseg1);
165         fMUON->SetSegmentationModel(chamber-1, 2, seg22);
166         
167         fMUON->SetResponseModel(chamber-1, responseSt1); // special response
168         fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
169         
170 }
171
172 //__________________________________________________________________________
173 void AliMUONFactory::BuildStation2() 
174 {
175 //
176 //--------------------------------------------------------
177 // Configuration for Chamber TC3/4 (Station 2) -----------
178 ///^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
179 // Float_t rseg2[4]={23.5, 87.7, 122.4, 122.5};
180
181         Float_t rseg2[4]={23.5, 53.5, 90.5, 122.5};       
182         Int_t   nseg2[4]={4, 4, 2, 1};
183 //
184         Int_t chamber=3;
185 //      ^^^^^^^^^^^^^^^^
186         fMUON->SetNsec(chamber-1,2);
187 //
188         AliMUONSegmentationV01 *seg31=new AliMUONSegmentationV01(4);
189         seg31->SetSegRadii(rseg2);
190         seg31->SetPadSize(3.0, 0.5);
191         seg31->SetDAnod(3.0/3./4);
192         seg31->SetPadDivision(nseg2);
193         fMUON->SetSegmentationModel(chamber-1, 1, seg31);
194 //
195         AliMUONSegmentationV02 *seg32=new AliMUONSegmentationV02(4);
196         seg32->SetSegRadii(rseg2); 
197         seg32->SetPadSize(0.75, 2.0);
198         seg32->SetPadDivision(nseg2);
199         seg32->SetDAnod(3.0/3./4);
200         
201         fMUON->SetSegmentationModel(chamber-1, 2, seg32);
202         
203         fMUON->SetResponseModel(chamber-1, fResponse0);     
204         fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
205         
206         chamber=4;
207 //      ^^^^^^^^^
208 //
209         fMUON->SetNsec(chamber-1,2);
210 //
211         AliMUONSegmentationV01 *seg41=new AliMUONSegmentationV01(4);
212         seg41->SetSegRadii(rseg2);
213         seg41->SetPadSize(3.0, 0.5);
214         seg41->SetDAnod(3.0/3./4);
215         seg41->SetPadDivision(nseg2);
216         fMUON->SetSegmentationModel(chamber-1, 1, seg41);
217 //
218         AliMUONSegmentationV02 *seg42=new AliMUONSegmentationV02(4);
219         seg42->SetSegRadii(rseg2); 
220         seg42->SetPadSize(0.75, 2.0);
221         seg42->SetPadDivision(nseg2);
222         seg42->SetDAnod(3.0/3./4);
223         
224         fMUON->SetSegmentationModel(chamber-1, 2, seg42);
225         
226         fMUON->SetResponseModel(chamber-1, fResponse0);     
227         fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
228 }       
229         
230         
231 //__________________________________________________________________________
232 void AliMUONFactory::BuildStation3() 
233 {
234 //--------------------------------------------------------
235 // Configuration for Chamber TC5/6  (Station 3) ----------          
236 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
237
238         Int_t   nseg3[4]={4, 4, 2, 1};
239         Int_t   npcb5[36] = {0,0,2,0,
240                              0,0,3,0,
241                              0,1,3,0,
242                              0,2,2,0,
243                              0,2,2,0, 
244                              0,2,2,0, 
245                              0,1,3,0, 
246                              0,0,3,0,
247                              0,0,2,0};
248         
249         Float_t shift = 0.; // no more constant overlap between slats
250
251         Float_t xpos5[9]    = {1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25};
252         Float_t ypos5[9]    = {-146.5, -112.8, -75.5, -37.8, 0.0, 37.8, 75.5, 112.8, 146.5};    
253
254         for (Int_t i = 0; i < 9; i++) ypos5[i] -= 20.; // origin in segmentation at the bottom of the slat !
255
256         Int_t chamber=5;
257         fMUON->SetNsec(chamber-1,2);
258         AliMUONSegmentationSlat *seg51=new AliMUONSegmentationSlat(4);
259         seg51->SetNSlats(9); 
260         seg51->SetShift(shift);  
261         seg51->SetNPCBperSector(npcb5); 
262         seg51->SetSlatXPositions(xpos5);
263         seg51->SetSlatYPositions(ypos5);
264         seg51->SetPadSize(10.,0.5);
265         seg51->SetDAnod(0.25);
266         seg51->SetPadDivision(nseg3);
267         fMUON->SetSegmentationModel(chamber-1, 1, seg51);
268         
269         AliMUONSegmentationSlatN *seg52=new AliMUONSegmentationSlatN(4);
270         seg52->SetNSlats(9); 
271         seg52->SetShift(shift);  
272         seg52->SetNPCBperSector(npcb5); 
273         seg52->SetSlatXPositions(xpos5);
274         seg52->SetSlatYPositions(ypos5);
275         seg52->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
276         seg52->SetDAnod(0.25);
277         seg52->SetPadDivision(nseg3);
278         fMUON->SetSegmentationModel(chamber-1, 2, seg52);
279         fMUON->SetResponseModel(chamber-1, fResponse0);      
280         fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
281         
282         chamber=6;
283         fMUON->SetNsec(chamber-1,2);
284         AliMUONSegmentationSlat *seg61=new AliMUONSegmentationSlat(4);
285         seg61->SetNSlats(9); 
286         seg61->SetShift(shift);  
287         seg61->SetNPCBperSector(npcb5); 
288         seg61->SetSlatXPositions(xpos5);
289         seg61->SetSlatYPositions(ypos5);
290         seg61->SetPadSize(10.,0.5);
291         seg61->SetDAnod(0.25);
292         seg61->SetPadDivision(nseg3);
293         fMUON->SetSegmentationModel(chamber-1, 1, seg61);
294         
295         AliMUONSegmentationSlatN *seg62=new AliMUONSegmentationSlatN(4);
296         seg62->SetNSlats(9); 
297         seg62->SetShift(shift);  
298         seg62->SetNPCBperSector(npcb5); 
299         seg62->SetSlatXPositions(xpos5);
300         seg62->SetSlatYPositions(ypos5);
301         seg62->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
302         seg62->SetDAnod(0.25);
303         seg62->SetPadDivision(nseg3);
304         fMUON->SetSegmentationModel(chamber-1, 2, seg62);
305         fMUON->SetResponseModel(chamber-1, fResponse0);      
306         fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
307 }
308
309         
310 //__________________________________________________________________________
311 void AliMUONFactory::BuildStation4() 
312 {
313 //--------------------------------------------------------
314 // Configuration for Chamber TC7/8  (Station 4) ----------           
315 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
316
317         Int_t   nseg4[4]={4, 4, 2, 1};
318         
319         Int_t chamber=7;
320 //      ^^^^^^^^^^^^^^^^
321         
322         fMUON->SetNsec(chamber-1,2);
323 //
324         AliMUONSegmentationSlat *seg71=new AliMUONSegmentationSlat(4);
325         Float_t shift = 0.;
326
327         Int_t npcb7[52] = {0,0,0,2,
328                            0,0,0,3,
329                            0,0,2,2,
330                            0,0,3,2,
331                            0,2,2,1,
332                            0,2,2,2,
333                            0,1,2,2, 
334                            0,2,2,2, 
335                            0,2,2,1, 
336                            0,0,3,2, 
337                            0,0,2,2, 
338                            0,0,0,3,
339                            0,0,0,2};
340         Float_t xpos7[13]   = {1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 39.45, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25};
341         Float_t ypos7[13]   = {-204.1, -175.5, -138.5, -109.2, -72.6, -38.2, 0.0, 
342                                38.2, 72.6, 109.2, 138.5, 175.5, 204.1};
343         Float_t ypos8[13]   = {-208.6, -180.0, -143.0, -113.6, -76.05, -38.2, 0.0, 
344                                38.2, 76.05, 113.6, 143.0, 180.0, 208.6};
345         for (Int_t i = 0; i < 13; i++) {
346           ypos7[i] -= 20.;
347           ypos8[i] -= 20.;
348         }
349         
350         seg71->SetNSlats(13);  
351         seg71->SetShift(shift);  
352         seg71->SetNPCBperSector(npcb7); 
353         seg71->SetSlatXPositions(xpos7);
354         seg71->SetSlatYPositions(ypos7);
355         
356         seg71->SetPadSize(10.,0.5);
357         seg71->SetDAnod(0.25);
358         seg71->SetPadDivision(nseg4);
359         fMUON->SetSegmentationModel(chamber-1, 1, seg71);
360         
361         AliMUONSegmentationSlatN *seg72=new AliMUONSegmentationSlatN(4);
362         
363         fMUON->SetSegmentationModel(chamber-1, 2, seg72);
364         seg72->SetNSlats(13);  
365         seg72->SetShift(shift);   
366         seg72->SetNPCBperSector(npcb7); 
367         seg72->SetSlatXPositions(xpos7);
368         seg72->SetSlatYPositions(ypos7);
369         seg72->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
370         seg72->SetDAnod(0.25);
371         seg72->SetPadDivision(nseg4);
372         
373         fMUON->SetResponseModel(chamber-1, fResponse0);     
374         fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
375         
376         chamber=8;
377 //      ^^^^^^^^^
378         fMUON->SetNsec(chamber-1,2);
379 //
380         AliMUONSegmentationSlat *seg81=new AliMUONSegmentationSlat(4);
381         
382         seg81->SetNSlats(13);  
383         seg81->SetShift(shift);  
384         seg81->SetNPCBperSector(npcb7); 
385         seg81->SetSlatXPositions(xpos7);
386         seg81->SetSlatYPositions(ypos8);
387         seg81->SetPadSize(10.,0.5);
388         seg81->SetDAnod(0.25);
389         seg81->SetPadDivision(nseg4);
390         fMUON->SetSegmentationModel(chamber-1, 1, seg81);
391         
392         AliMUONSegmentationSlat *seg82=new AliMUONSegmentationSlatN(4);
393         
394         fMUON->SetSegmentationModel(chamber-1, 2, seg82);
395         seg82->SetNSlats(13);  
396         seg82->SetShift(shift);  
397         seg82->SetNPCBperSector(npcb7); 
398         seg82->SetSlatXPositions(xpos7);
399         seg82->SetSlatYPositions(ypos8);
400         seg82->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
401         seg82->SetDAnod(0.25);
402         seg82->SetPadDivision(nseg4);
403         
404         fMUON->SetResponseModel(chamber-1, fResponse0);     
405         fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
406 }
407
408 //__________________________________________________________________________
409 void AliMUONFactory::BuildStation5() 
410 {       
411 //--------------------------------------------------------
412 // Configuration for Chamber TC9/10  (Station 5) ---------           
413 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
414
415         Int_t chamber=9;
416 //      ^^^^^^^^^^^^^^^^
417
418         fMUON->SetNsec(chamber-1,2);
419 //
420         AliMUONSegmentationSlat *seg91=new AliMUONSegmentationSlat(4);
421
422         Int_t   nseg4[4]={4, 4, 2, 1};
423         Float_t shift = 0.;
424
425         Int_t   npcb9[52] = {0,0,0,3,
426                              0,0,0,4,
427                              0,0,2,3,
428                              0,0,3,3,
429                              0,2,2,2,
430                              0,2,2,2,
431                              0,1,2,2, 
432                              0,2,2,2, 
433                              0,2,2,2, 
434                              0,0,3,3, 
435                              0,0,2,3, 
436                              0,0,0,4, 
437                              0,0,0,3};   
438         
439         Float_t xpos9[13]   = {1.25, 1.25, 1.25, 1.25, 1.25, 1.25, 39.45, 1.25, 1.25, 1.25, 1.25, 1.25, 1.25};
440         Float_t ypos9[13]   = {-224.8, -188.05, -151.0, -113.7, -76.1, -38.2, 0.0, 
441                                38.2, 76.1, 113.7, 151.0, 188.05, 224.8};
442
443         for (Int_t i = 0; i < 13; i++)  ypos9[i] -= 20.;
444
445         
446         seg91->SetNSlats(13);  
447         seg91->SetShift(shift);  
448         seg91->SetNPCBperSector(npcb9); 
449         seg91->SetSlatXPositions(xpos9);
450         seg91->SetSlatYPositions(ypos9);
451         seg91->SetPadSize(10.,0.5);
452         seg91->SetDAnod(0.25);
453         seg91->SetPadDivision(nseg4);
454         fMUON->SetSegmentationModel(chamber-1, 1, seg91);
455         
456         AliMUONSegmentationSlatN *seg92=new AliMUONSegmentationSlatN(4);
457         
458         fMUON->SetSegmentationModel(chamber-1, 2, seg92);
459         seg92->SetNSlats(13);  
460         seg92->SetShift(shift);   
461         seg92->SetNPCBperSector(npcb9); 
462         seg92->SetSlatXPositions(xpos9);
463         seg92->SetSlatYPositions(ypos9);
464         seg92->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
465         seg92->SetDAnod(0.25);
466         seg92->SetPadDivision(nseg4);
467         
468         fMUON->SetResponseModel(chamber-1, fResponse0);     
469         fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
470         
471         chamber=10;
472 //      ^^^^^^^^^
473         fMUON->SetNsec(chamber-1,2);
474 //
475         AliMUONSegmentationSlat *seg101=new AliMUONSegmentationSlat(4);
476         
477         seg101->SetNSlats(13);  
478         seg101->SetShift(shift);  
479         seg101->SetNPCBperSector(npcb9); 
480         seg101->SetSlatXPositions(xpos9);
481         seg101->SetSlatYPositions(ypos9);
482         seg101->SetPadSize(10.,0.5);
483         seg101->SetDAnod(0.25);
484         seg101->SetPadDivision(nseg4);
485         fMUON->SetSegmentationModel(chamber-1, 1, seg101);
486         
487         AliMUONSegmentationSlatN *seg102=new AliMUONSegmentationSlatN(4);
488         
489         fMUON->SetSegmentationModel(chamber-1, 2, seg102);
490         seg102->SetNSlats(13);  
491         seg102->SetShift(shift);   
492         seg102->SetNPCBperSector(npcb9); 
493         seg102->SetSlatXPositions(xpos9);
494         seg102->SetSlatYPositions(ypos9);
495         seg102->SetPadSize(1., 10.); // DeltaX(non bending) = 2 * DeltaY(bending)
496         seg102->SetDAnod(0.25);
497         seg102->SetPadDivision(nseg4);
498         
499         fMUON->SetResponseModel(chamber-1, fResponse0);     
500         fMUON->Chamber(chamber-1).SetChargeCorrel(0.11); // 11% charge spread
501 }
502
503 //__________________________________________________________________________
504 void AliMUONFactory::BuildStation6() 
505 {       
506 //--------------------------------------------------------
507 // Configuration for Trigger Stations -------------------- 
508 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
509
510 // Cluster-size off
511         AliMUONResponseTrigger* responseTrigger0 =  new AliMUONResponseTrigger;
512 // Cluster-size on  
513 // AliMUONResponseTriggerV1* responseTrigger0 =  new AliMUONResponseTriggerV1;
514  
515         Int_t chamber=11;
516         fMUON->SetNsec(chamber-1,2);
517         AliMUONSegmentationTriggerX *seg111=new AliMUONSegmentationTriggerX;
518         fMUON->SetSegmentationModel(chamber-1, 1, seg111);
519         AliMUONSegmentationTriggerY *seg112=new AliMUONSegmentationTriggerY;
520         fMUON->SetSegmentationModel(chamber-1, 2, seg112);
521         
522         fMUON->SetResponseModel(chamber-1, responseTrigger0);      
523         fMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
524         
525  
526         chamber=12;
527         fMUON->SetNsec(chamber-1,2);
528         AliMUONSegmentationTriggerX *seg121=new AliMUONSegmentationTriggerX;
529         fMUON->SetSegmentationModel(chamber-1, 1, seg121);
530         AliMUONSegmentationTriggerY *seg122=new AliMUONSegmentationTriggerY;
531         fMUON->SetSegmentationModel(chamber-1, 2, seg122);
532         
533         fMUON->SetResponseModel(chamber-1, responseTrigger0);
534         fMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
535         
536         chamber=13;
537         fMUON->SetNsec(chamber-1,2);
538         AliMUONSegmentationTriggerX *seg131=new AliMUONSegmentationTriggerX;
539         fMUON->SetSegmentationModel(chamber-1, 1, seg131);
540         AliMUONSegmentationTriggerY *seg132=new AliMUONSegmentationTriggerY;
541         fMUON->SetSegmentationModel(chamber-1, 2, seg132);
542         fMUON->SetResponseModel(chamber-1, responseTrigger0);      
543         fMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
544         
545         chamber=14;
546         fMUON->SetNsec(chamber-1,2);
547         AliMUONSegmentationTriggerX *seg141=new AliMUONSegmentationTriggerX;
548         fMUON->SetSegmentationModel(chamber-1, 1, seg141);
549         AliMUONSegmentationTriggerY *seg142=new AliMUONSegmentationTriggerY;
550         fMUON->SetSegmentationModel(chamber-1, 2, seg142);
551         
552         fMUON->SetResponseModel(chamber-1, responseTrigger0); 
553         fMUON->Chamber(chamber-1).SetChargeCorrel(0); // same charge on cathodes
554 }       
555
556 //__________________________________________________________________________
557 void AliMUONFactory::Build(AliMUON* where, const char* what) 
558 {
559 //
560 // Construct MUON from chambers, segmentation and responses
561 //
562
563     fMUON = where;
564     char tmp[20];
565     strcpy(tmp, what);
566
567     if (strcmp(tmp, "default")==0) {
568       // Set default parameters
569       fMUON->SetIshunt(0);
570       fMUON->SetMaxStepGas(0.1);
571       fMUON->SetMaxStepAlu(0.1);
572
573       // Build all stations
574       BuildCommon();
575       BuildStation1();
576       BuildStation2();
577       BuildStation3();
578       BuildStation4();
579       BuildStation5();
580       BuildStation6();
581     } 
582     else
583           AliDebug(0,"Non default version of MUON selected. You have to construct yourself the MUON elements !!");
584 }
585
586 //__________________________________________________________________________
587 void AliMUONFactory::BuildStation(AliMUON* where, Int_t stationNumber) 
588 {
589 //
590 // Construct MUON from chambers, segmentation and responses
591 //
592 // Version 0
593 //
594 // First define the number of planes that are segmented (1 or 2) by a call
595 // to SetNsec.
596 // Then chose for each chamber (chamber plane) the segmentation
597 // and response model.
598 // They should be equal for the two chambers of each station. In a future
599 // version this will be enforced.
600 //
601
602     fMUON = where;
603     if (!fResponse0) BuildCommon(); 
604     
605     switch (stationNumber) {    
606       case 1:  BuildStation1(); break;
607       case 2:  BuildStation2(); break;
608       case 3:  BuildStation3(); break;
609       case 4:  BuildStation4(); break;
610       case 5:  BuildStation5(); break;
611       case 6:  BuildStation6(); break;
612     
613       default: AliFatal("Wrong station number");
614     }  
615 }