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