]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONFactoryV2.cxx
Removing old segmentation, obsolete classes and removing old new conditions (Christian)
[u/mrichter/AliRoot.git] / MUON / AliMUONFactoryV2.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 "AliMUONFactoryV2.h"
23 #include "AliRun.h"
24 #include "AliLog.h"
25
26 #include "AliMUON.h"
27 #include "AliMUONConstants.h"
28 #include "AliMUONTriggerConstants.h"
29 #include "AliMUONChamber.h"
30 #include "AliMUONResponseV0.h"
31 #include "AliMUONGeometryModule.h"
32 #include "AliMUONGeometryStore.h"
33 #include "AliMUONGeometrySegmentation.h"
34 #include "AliMUONVGeometryDEIndexing.h"
35 #include "AliMUONSt12QuadrantSegmentation.h"
36 #include "AliMUONSt345SlatSegmentation.h"
37 #include "AliMUONTriggerSegmentation.h"
38 #include "AliMUONResponseTrigger.h"
39
40 ClassImp(AliMUONFactoryV2)
41
42 //__________________________________________________________________________
43   AliMUONFactoryV2::AliMUONFactoryV2(const char* name)
44     : TNamed(name, ""),
45       fMUON(0),
46       fResponse0(0),
47       fDESegmentations(0)
48 {
49   // FactoryV2 inherite from Factory for switching in AliMUONv1::Init()
50   // to be changed when old segmentation will be removed.
51
52   fDESegmentations = new TObjArray();
53   fDESegmentations->SetOwner(kTRUE);
54 }
55
56 //__________________________________________________________________________
57   AliMUONFactoryV2::AliMUONFactoryV2()
58     : TNamed(),
59       fMUON(0),
60       fResponse0(0),
61       fDESegmentations(0)
62 {
63 // Default constructor
64 }
65
66 //__________________________________________________________________________
67 AliMUONFactoryV2::AliMUONFactoryV2(const AliMUONFactoryV2& rhs)
68  : TNamed(rhs)
69 {
70   // Protected copy constructor
71
72   AliFatal("Not implemented.");
73 }
74
75 //__________________________________________________________________________
76
77 AliMUONFactoryV2::~AliMUONFactoryV2()
78 {
79 // Destructor
80
81   delete fDESegmentations;
82 }
83
84 //__________________________________________________________________________
85 AliMUONFactoryV2&  AliMUONFactoryV2::operator=(const AliMUONFactoryV2& rhs)
86 {
87   // Protected assignement operator
88
89   if (this == &rhs) return *this;
90
91   AliFatal("Not implemented.");
92     
93   return *this;  
94 }    
95           
96 //__________________________________________________________________________
97 Bool_t AliMUONFactoryV2::IsGeometryDefined(Int_t ichamber)
98 {
99 // Return true, if det elements for the chamber with the given ichamber Id
100 // are defined in geometry (the geometry builder for this chamber was activated)
101
102   if ( ! fMUON ||
103        ! fMUON->Chamber(ichamber).GetGeometry() ||
104        ! fMUON->Chamber(ichamber).GetGeometry()->GetDEIndexing() ||
105        ! fMUON->Chamber(ichamber).GetGeometry()->GetDEIndexing()->GetNofDetElements() )
106        
107     return kFALSE;
108   
109   return kTRUE;
110 }  
111
112 //__________________________________________________________________________
113 void AliMUONFactoryV2::BuildCommon() 
114 {
115   //
116   // Construct the default response.
117   //
118
119   // Default response: 5 mm of gas
120   fResponse0 = new AliMUONResponseV0;
121   fResponse0->SetSqrtKx3AndDeriveKx2Kx4(0.7131); // sqrt(0.5085)
122   fResponse0->SetSqrtKy3AndDeriveKy2Ky4(0.7642); // sqrt(0.5840)
123   fResponse0->SetPitch(AliMUONConstants::Pitch()); // anode-cathode distance
124   fResponse0->SetSigmaIntegration(10.);
125   fResponse0->SetChargeSlope(10);
126   fResponse0->SetChargeSpread(0.18, 0.18);
127   fResponse0->SetMaxAdc(4096);
128   fResponse0->SetSaturation(3000);
129   fResponse0->SetZeroSuppression(6);
130 }       
131         
132 //__________________________________________________________________________
133 void AliMUONFactoryV2::BuildStation1() 
134 {
135   //--------------------------------------------------------
136   // Configuration for Chamber TC1/2  (Station 1) ----------           
137   //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
138
139
140   // Response for 4 mm of gas (station 1)
141   // automatic consistency with width of sensitive medium in CreateGeometry ????
142   AliMUONResponseV0* responseSt1 = new AliMUONResponseV0;
143   // Mathieson parameters from L.Kharmandarian's thesis, page 190
144   responseSt1->SetSqrtKx3AndDeriveKx2Kx4(0.7000); // sqrt(0.4900)
145   responseSt1->SetSqrtKy3AndDeriveKy2Ky4(0.7550); // sqrt(0.5700)
146   responseSt1->SetPitch(AliMUONConstants::PitchSt1()); // anode-cathode distance
147   responseSt1->SetSigmaIntegration(10.);
148   // ChargeSlope larger to compensate for the smaller anode-cathode distance
149   // and keep the same most probable ADC channel for mip's
150   responseSt1->SetChargeSlope(62.5); 
151   // assumed proportionality to anode-cathode distance for ChargeSpread
152   responseSt1->SetChargeSpread(0.144, 0.144);
153   responseSt1->SetMaxAdc(4096);
154   responseSt1->SetSaturation(3000);
155   responseSt1->SetZeroSuppression(6);
156
157   // Quadrant segmentations:
158   AliMUONSt12QuadrantSegmentation* bendSt1
159     = new AliMUONSt12QuadrantSegmentation(kStation1, kBendingPlane);
160   AliMUONSt12QuadrantSegmentation* nonbendSt1
161     = new AliMUONSt12QuadrantSegmentation(kStation1, kNonBendingPlane);
162   
163   // Add in the array (for safe deleting)  
164   fDESegmentations->Add(bendSt1);  
165   fDESegmentations->Add(nonbendSt1);  
166
167   AliMUONGeometrySegmentation* segmentation[2];
168
169   for (Int_t chamber = 0; chamber < 2; chamber++) {
170
171     segmentation[0] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
172     segmentation[1] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
173         
174     // id detection elt for chamber 1
175     Int_t id0 = (chamber+1)*100;
176
177     //--------------------------------------------------------
178     // Configuration for Chamber TC1/2  (Station 1) ----------           
179
180
181     fMUON->SetNsec(chamber,2);
182
183     // cathode 0
184     segmentation[0]->Add(id0,      bendSt1);
185     segmentation[0]->Add(id0 +  1, nonbendSt1);
186     segmentation[0]->Add(id0 + 50, bendSt1);
187     segmentation[0]->Add(id0 + 51, nonbendSt1); 
188     fMUON->SetSegmentationModel(chamber, 1, segmentation[0]);   
189
190     // cathode 1
191     segmentation[1]->Add(id0,      nonbendSt1);
192     segmentation[1]->Add(id0 +  1, bendSt1);
193     segmentation[1]->Add(id0 + 50, nonbendSt1);
194     segmentation[1]->Add(id0 + 51, bendSt1);
195     fMUON->SetSegmentationModel(chamber, 2, segmentation[1]);
196         
197     fMUON->SetResponseModel(chamber, responseSt1); // special response      
198     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
199         
200   }
201 }
202
203 //__________________________________________________________________________
204 void AliMUONFactoryV2::BuildStation2() 
205 {
206   //
207   //--------------------------------------------------------
208   // Configuration for Chamber TC3/4 (Station 2) -----------
209   ///^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
210
211
212   // Quadrant segmentations:
213   AliMUONSt12QuadrantSegmentation* bendSt2
214     = new AliMUONSt12QuadrantSegmentation(kStation2, kBendingPlane);
215   AliMUONSt12QuadrantSegmentation* nonbendSt2
216     = new AliMUONSt12QuadrantSegmentation(kStation2, kNonBendingPlane);
217
218   // Add in the array (for safe deleting)  
219   fDESegmentations->Add(bendSt2);  
220   fDESegmentations->Add(nonbendSt2);  
221
222   AliMUONGeometrySegmentation* segmentation[2];
223
224   for (Int_t chamber = 2; chamber < 4; chamber++) {
225
226     segmentation[0] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
227     segmentation[1] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
228         
229     // id detection elt for chamber 1
230     Int_t id0 = (chamber+1)*100;
231
232     //--------------------------------------------------------
233     // Configuration for Chamber TC3/4  (Station 2) ----------           
234
235
236     fMUON->SetNsec(chamber,2);
237
238     // cathode 0
239     segmentation[0]->Add(id0,      bendSt2);
240     segmentation[0]->Add(id0 +  1, nonbendSt2);
241     segmentation[0]->Add(id0 + 50, bendSt2);
242     segmentation[0]->Add(id0 + 51, nonbendSt2); 
243     fMUON->SetSegmentationModel(chamber, 1, segmentation[0]);   
244
245     // cathode 1
246     segmentation[1]->Add(id0,      nonbendSt2);
247     segmentation[1]->Add(id0 +  1, bendSt2);
248     segmentation[1]->Add(id0 + 50, nonbendSt2);
249     segmentation[1]->Add(id0 + 51, bendSt2);
250     fMUON->SetSegmentationModel(chamber, 2, segmentation[1]);
251         
252     fMUON->SetResponseModel(chamber, fResponse0); // normal response        
253     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
254         
255   }
256 }       
257         
258         
259 //__________________________________________________________________________
260 void AliMUONFactoryV2::BuildStation3() 
261 {
262   //--------------------------------------------------------
263   // Configuration for Chamber TC5/6  (Station 3) ----------          
264   //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
265
266   AliMUONGeometrySegmentation* segmentation[2];
267
268   //Slats Segmentations
269   AliMUONSt345SlatSegmentation *slatsegB[4]; // Types of segmentation for St3
270   AliMUONSt345SlatSegmentation *slatsegNB[4]; 
271   // Bending
272
273   Int_t ndiv[4] ={ 4, 4, 2, 1};  // densities zones 
274   for(Int_t i=0; i<4; i++) {
275     slatsegB[i] = new AliMUONSt345SlatSegmentation(1);
276     fDESegmentations->Add(slatsegB[i]);  
277     slatsegB[i]->SetPadSize(10.,0.5);
278     slatsegB[i]->SetPadDivision(ndiv);
279     slatsegB[i]->SetId(1); // Id elt ????
280     slatsegB[i]->SetDAnod(AliMUONConstants::Pitch());
281     slatsegNB[i] = new AliMUONSt345SlatSegmentation(0);
282     fDESegmentations->Add(slatsegNB[i]);  
283     slatsegNB[i]->SetPadSize(1./1.4,10.); // Nbending
284     slatsegNB[i]->SetPadDivision(ndiv);
285     slatsegNB[i]->SetId(1);
286     slatsegNB[i]->SetDAnod(AliMUONConstants::Pitch());
287   }
288
289   // Type 112200 for 500, 501, 508, 509, 510, 517 
290   // in Ch5 (similar for Ch6) for the futur official numbering
291   // Type 112200 for 503, 504, 505, 555, 554, 553 
292   // in Ch5 (similar for Ch6) actual numbering in the code to be changed in jan05
293   Int_t n0[4] = { 0, 2, 2, 0 };
294   slatsegB[0]->SetPcbBoards(n0);
295   slatsegB[0]->Init(0);
296   slatsegNB[0]->SetPcbBoards(n0);
297   slatsegNB[0]->Init(0);
298     
299   // Type 122200 for 502, 507, 511, 516 (similar in Ch6) 
300   // for future official numbering of ALICE
301   // Type 122200 for 502, 506, 556, 552 (similiarin Ch6) 
302   // for actual numbering in muon code to be changed in jan05
303   Int_t n1[4] = { 0, 1, 3, 0 }; 
304   slatsegB[1]->SetPcbBoards(n1);
305   slatsegB[1]->Init(0); 
306   slatsegNB[1]->SetPcbBoards(n1);
307   slatsegNB[1]->Init(0); 
308     
309   // Type 222000 for 503, 506, 512, 515 (similar in Ch6) 
310   // for future official numbering of ALICE
311   // Type 222000 for 501, 507, 557, 551 (similiarin Ch6) 
312   // for actual numbering in muon code to be changed in jan05
313   Int_t n2[4] = { 0, 0, 3, 0 };
314   slatsegB[2]->SetPcbBoards(n2);
315   slatsegB[2]->Init(0);
316   slatsegNB[2]->SetPcbBoards(n2);
317   slatsegNB[2]->Init(0);
318     
319   // Type 220000 for 504, 505, 513, 514 (similar in Ch6) 
320   // for future official numbering of ALICE
321   // Type 220000 for 500, 508, 558, 550 (similiarin Ch6) 
322   // for actual numbering in muon code to be changed in jan05
323   Int_t n3[4] = { 0, 0, 2, 0 };
324   slatsegB[3]->SetPcbBoards(n3);
325   slatsegB[3]->Init(0); 
326   slatsegNB[3]->SetPcbBoards(n3);
327   slatsegNB[3]->Init(0); 
328
329   for (Int_t chamber = 4; chamber < 6; chamber++) {
330
331     segmentation[0] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
332     segmentation[1] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
333         
334     // id detection elt for chamber 1
335     Int_t id0 = (chamber+1)*100;
336
337     //--------------------------------------------------------
338     // Configuration for Chamber TC3/4  (Station 2) ----------           
339
340
341     fMUON->SetNsec(chamber,2);
342
343     // cathode 0
344     // type 220000
345     segmentation[0]->Add(id0, slatsegB[3]);
346     segmentation[0]->Add(id0+ 8, slatsegB[3]);  
347     segmentation[0]->Add(id0+50, slatsegB[3]);  
348     segmentation[0]->Add(id0+58, slatsegB[3]);
349     // type 222000
350     segmentation[0]->Add(id0+ 1, slatsegB[2]);
351     segmentation[0]->Add(id0+ 7, slatsegB[2]);  
352     segmentation[0]->Add(id0+51, slatsegB[2]);  
353     segmentation[0]->Add(id0+57, slatsegB[2]);
354     // type 122200
355     segmentation[0]->Add(id0+ 2, slatsegB[1]);
356     segmentation[0]->Add(id0+ 6, slatsegB[1]);  
357     segmentation[0]->Add(id0+52, slatsegB[1]);  
358     segmentation[0]->Add(id0+56, slatsegB[1]);
359     // type 112200
360     segmentation[0]->Add(id0+ 3, slatsegB[0]);
361     segmentation[0]->Add(id0+ 4, slatsegB[0]);  
362     segmentation[0]->Add(id0+ 5, slatsegB[0]);  
363     segmentation[0]->Add(id0+53, slatsegB[0]);
364     segmentation[0]->Add(id0+54, slatsegB[0]);     
365     segmentation[0]->Add(id0+55, slatsegB[0]);
366     fMUON->SetSegmentationModel(chamber, 1, segmentation[0]);   
367
368     // cathode 1
369     // type 220000
370     segmentation[1]->Add(id0, slatsegNB[3]);
371     segmentation[1]->Add(id0+ 8, slatsegNB[3]);  
372     segmentation[1]->Add(id0+50, slatsegNB[3]);  
373     segmentation[1]->Add(id0+58, slatsegNB[3]);
374     // type 222000
375     segmentation[1]->Add(id0+ 1, slatsegNB[2]);
376     segmentation[1]->Add(id0+ 7, slatsegNB[2]);  
377     segmentation[1]->Add(id0+51, slatsegNB[2]);  
378     segmentation[1]->Add(id0+57, slatsegNB[2]);
379     // type 122200
380     segmentation[1]->Add(id0+ 2, slatsegNB[1]);
381     segmentation[1]->Add(id0+ 6, slatsegNB[1]);  
382     segmentation[1]->Add(id0+52, slatsegNB[1]);  
383     segmentation[1]->Add(id0+56, slatsegNB[1]);
384     // type 112200
385     segmentation[1]->Add(id0+ 3, slatsegNB[0]);
386     segmentation[1]->Add(id0+ 4, slatsegNB[0]);  
387     segmentation[1]->Add(id0+ 5, slatsegNB[0]);  
388     segmentation[1]->Add(id0+53, slatsegNB[0]);
389     segmentation[1]->Add(id0+54, slatsegNB[0]);     
390     segmentation[1]->Add(id0+55, slatsegNB[0]);
391     fMUON->SetSegmentationModel(chamber, 2, segmentation[1]);
392
393     fMUON->SetResponseModel(chamber, fResponse0);      
394     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
395   }
396 }
397
398         
399 //__________________________________________________________________________
400 void AliMUONFactoryV2::BuildStation4() 
401 {
402   //--------------------------------------------------------
403   // Configuration for Chamber TC7/8  (Station 4) ----------           
404   //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
405
406
407   AliMUONGeometrySegmentation* segmentation[2];
408
409   //Slats Segmentations
410   AliMUONSt345SlatSegmentation *slatsegB[7]; // Types of segmentation for St4
411   AliMUONSt345SlatSegmentation *slatsegNB[7]; 
412   // Bending
413
414   Int_t ndiv[4] ={ 4, 4, 2, 1};  // densities zones 
415   for(Int_t i = 0; i < 7; i++) {
416     slatsegB[i] = new AliMUONSt345SlatSegmentation(1);
417     fDESegmentations->Add(slatsegB[i]);  
418     slatsegB[i]->SetPadSize(10.,0.5);
419     slatsegB[i]->SetPadDivision(ndiv);
420     slatsegB[i]->SetId(1);
421     slatsegB[i]->SetDAnod(AliMUONConstants::Pitch());
422     slatsegNB[i] = new AliMUONSt345SlatSegmentation(0);
423     fDESegmentations->Add(slatsegNB[i]);  
424     slatsegNB[i]->SetPadSize(1./1.4,10.); 
425     slatsegNB[i]->SetPadDivision(ndiv);
426     slatsegNB[i]->SetId(1);
427     slatsegNB[i]->SetDAnod(AliMUONConstants::Pitch());
428   }
429
430   Int_t n4[4] = { 0, 1, 2, 2 };
431   slatsegB[0]->SetPcbBoards(n4);
432   slatsegB[0]->Init(0); // 0 detection element id
433   slatsegNB[0]->SetPcbBoards(n4);
434   slatsegNB[0]->Init(0); // 0 detection element id
435     
436   // Type 112233 for 701, 712, 714, 725 in Ch7 (similar for Ch8) 
437   // for the futur official numbering
438   // Type 112233 for 705, 707, 755, 757 in Ch7 (similar for Ch8) 
439   // actual numbering in the code to be changed in jan05
440   // Type 112233 for 901, 902, 911, 912, 914, 915, 924, 925 in Ch9 
441   // (similar for Ch10) for the futur official numbering
442   // Type 112233 for 904, 905, 907, 908, 954, 955, 957, 958 in Ch9 
443   // (similar for Ch10) actual numbering in the code to be changed in jan05
444   Int_t n5[4] = { 0, 2, 2, 2 };
445   slatsegB[1]->SetPcbBoards(n5);
446   slatsegB[1]->Init(0); // 0 detection element id
447   slatsegNB[1]->SetPcbBoards(n5);
448   slatsegNB[1]->Init(0); // 0 detection element id
449     
450   // Type 112230 for 702, 711, 715, 724 in Ch7 (similar for Ch8) 
451   // for the futur official numbering
452   // Type 112230 for 704, 708, 754, 758 in Ch7 (similar for Ch8) 
453   // actual numbering in the code to be changed in jan05
454   Int_t n6[4] = { 0, 2, 2, 1 };
455   slatsegB[2]->SetPcbBoards(n6);
456   slatsegB[2]->Init(0); // 0 detection element id
457   slatsegNB[2]->SetPcbBoards(n6);
458   slatsegNB[2]->Init(0); // 0 detection element id
459     
460   // Type 222330 for 703, 710, 716, 723 in Ch7 (similar for Ch8) 
461   // for the futur official numbering
462   // Type 222330 for 703, 709, 753, 759 in Ch7 (similar for Ch8) 
463   // actual numbering in the code to be changed in jan05
464   Int_t n7[4] = { 0, 0, 3, 2 };
465   slatsegB[3]->SetPcbBoards(n7);
466   slatsegB[3]->Init(0); // 0 detection element id
467   slatsegNB[3]->SetPcbBoards(n7);
468   slatsegNB[3]->Init(0); // 0 detection element id
469     
470   // Type 223300 for 704, 709, 717, 722 in Ch7 (similar for Ch8) 
471   // for the futur official numbering
472   // Type 223300 for 702, 710, 752, 760 in Ch7 (similar for Ch8) 
473   // actual numbering in the code to be changed in jan05
474   Int_t n8[4] = { 0, 0, 2, 2 };
475   slatsegB[4]->SetPcbBoards(n8);
476   slatsegB[4]->Init(0); // 0 detection element id
477   slatsegNB[4]->SetPcbBoards(n8);
478   slatsegNB[4]->Init(0); // 0 detection element id
479     
480   // Type 333000 for 705, 708, 718, 721 in Ch7 (similar for Ch8) 
481   // for the futur official numbering
482   // Type 333000 for 701, 711, 751, 761 in Ch7 (similar for Ch8) 
483   // actual numbering in the code to be changed in jan05
484   // Type 333000 for 906, 907, 919, 920 in Ch9 (similar for Ch10) 
485   // for the futur official numbering
486   // Type 333000 for 900, 912, 950, 962 in Ch9 (similar for Ch10) 
487   // actual numbering in the code to be changed in jan05
488   Int_t n9[4] = { 0, 0, 0, 3 };
489   slatsegB[5]->SetPcbBoards(n9);
490   slatsegB[5]->Init(0); // 0 detection element id
491   slatsegNB[5]->SetPcbBoards(n9);
492   slatsegNB[5]->Init(0); // 0 detection element id
493     
494   // Type 330000 for 706, 707, 719, 720 in Ch7 (similar for Ch8) 
495   // for the futur official numbering
496   // Type 330000 for 700, 712, 750, 762 in Ch7 (similar for Ch8) 
497   // actual numbering in the code to be changed in jan05
498   Int_t n10[4] = { 0, 0, 0, 2 };
499   slatsegB[6]->SetPcbBoards(n10);
500   slatsegB[6]->Init(0); // 0 detection element id
501   slatsegNB[6]->SetPcbBoards(n10);
502   slatsegNB[6]->Init(0); // 0 detection element id
503
504
505   for (Int_t chamber = 6; chamber < 8; chamber++) {
506
507     segmentation[0] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
508     segmentation[1] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
509         
510     // id detection elt for chamber 1
511     Int_t id0 = (chamber+1)*100;
512
513     //--------------------------------------------------------
514     // Configuration for Chamber TC6/7  (Station 4) ----------           
515
516
517     fMUON->SetNsec(chamber,2);
518
519     // cathode 0
520     // type 122330
521     segmentation[0]->Add(id0+ 6, slatsegB[0]);
522     segmentation[0]->Add(id0+56, slatsegB[0]);
523   
524     // type 112233
525     segmentation[0]->Add(id0+ 5, slatsegB[1]);
526     segmentation[0]->Add(id0+ 7, slatsegB[1]);  
527     segmentation[0]->Add(id0+55, slatsegB[1]);  
528     segmentation[0]->Add(id0+57, slatsegB[1]);
529    
530     // type 112230
531     segmentation[0]->Add(id0+ 4, slatsegB[2]);
532     segmentation[0]->Add(id0+ 8, slatsegB[2]);  
533     segmentation[0]->Add(id0+54, slatsegB[2]);  
534     segmentation[0]->Add(id0+58, slatsegB[2]);
535
536     // type 222330 
537     segmentation[0]->Add(id0+ 3, slatsegB[3]);
538     segmentation[0]->Add(id0+ 9, slatsegB[3]);  
539     segmentation[0]->Add(id0+53, slatsegB[3]);
540     segmentation[0]->Add(id0+59, slatsegB[3]);
541
542     // type 223300 
543     segmentation[0]->Add(id0+ 2, slatsegB[4]);
544     segmentation[0]->Add(id0+10, slatsegB[4]);  
545     segmentation[0]->Add(id0+52, slatsegB[4]);
546     segmentation[0]->Add(id0+60, slatsegB[4]);
547
548     // type 333000 
549     segmentation[0]->Add(id0+ 1, slatsegB[5]);
550     segmentation[0]->Add(id0+11, slatsegB[5]);  
551     segmentation[0]->Add(id0+51, slatsegB[5]);
552     segmentation[0]->Add(id0+61, slatsegB[5]);
553
554     // type 330000 
555     segmentation[0]->Add(id0   , slatsegB[6]);
556     segmentation[0]->Add(id0+12, slatsegB[6]);  
557     segmentation[0]->Add(id0+50, slatsegB[6]);
558     segmentation[0]->Add(id0+62, slatsegB[6]);
559     fMUON->SetSegmentationModel(chamber, 1, segmentation[0]);   
560
561     // cathode 1
562     // type 122330
563     segmentation[1]->Add(id0+ 6, slatsegNB[0]);
564     segmentation[1]->Add(id0+56, slatsegNB[0]);
565
566     // type 112233
567     segmentation[1]->Add(id0+ 5, slatsegNB[1]);
568     segmentation[1]->Add(id0+ 7, slatsegNB[1]);  
569     segmentation[1]->Add(id0+55, slatsegNB[1]);  
570     segmentation[1]->Add(id0+57, slatsegNB[1]);
571   
572     // type 112230
573     segmentation[1]->Add(id0+ 4, slatsegNB[2]);
574     segmentation[1]->Add(id0+ 8, slatsegNB[2]);  
575     segmentation[1]->Add(id0+54, slatsegNB[2]);  
576     segmentation[1]->Add(id0+58, slatsegNB[2]);
577
578     // type 222330 
579     segmentation[1]->Add(id0+ 3, slatsegNB[3]);
580     segmentation[1]->Add(id0+ 9, slatsegNB[3]);  
581     segmentation[1]->Add(id0+53, slatsegNB[3]);
582     segmentation[1]->Add(id0+59, slatsegNB[3]);
583
584     // type 223300 
585     segmentation[1]->Add(id0+ 2, slatsegNB[4]);
586     segmentation[1]->Add(id0+10, slatsegNB[4]);  
587     segmentation[1]->Add(id0+52, slatsegNB[4]);
588     segmentation[1]->Add(id0+60, slatsegNB[4]);
589
590     // type 333000 
591     segmentation[1]->Add(id0+ 1, slatsegNB[5]);
592     segmentation[1]->Add(id0+11, slatsegNB[5]);  
593     segmentation[1]->Add(id0+51, slatsegNB[5]);
594     segmentation[1]->Add(id0+61, slatsegNB[5]);
595
596     // type 330000 
597     segmentation[1]->Add(id0   , slatsegNB[6]);
598     segmentation[1]->Add(id0+12, slatsegNB[6]);  
599     segmentation[1]->Add(id0+50, slatsegNB[6]);
600     segmentation[1]->Add(id0+62, slatsegNB[6]);
601     fMUON->SetSegmentationModel(chamber, 2, segmentation[1]);
602
603     fMUON->SetResponseModel(chamber, fResponse0);      
604     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
605   }
606 }
607
608 //__________________________________________________________________________
609 void AliMUONFactoryV2::BuildStation5() 
610 {       
611   //--------------------------------------------------------
612   // Configuration for Chamber TC9/10  (Station 5) ---------           
613   //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
614
615   AliMUONGeometrySegmentation* segmentation[2];
616
617   //Slats Segmentations
618   AliMUONSt345SlatSegmentation *slatsegB[6]; // Types of segmentation for St5
619   AliMUONSt345SlatSegmentation *slatsegNB[6]; 
620   // Bending
621
622   Int_t ndiv[4] ={ 4, 4, 2, 1};  // densities zones 
623   for(Int_t i = 0; i < 6; i++) {
624     slatsegB[i] = new AliMUONSt345SlatSegmentation(1);
625     fDESegmentations->Add(slatsegB[i]);  
626     slatsegB[i]->SetPadSize(10.,0.5);
627     slatsegB[i]->SetPadDivision(ndiv);
628     slatsegB[i]->SetId(1);
629     slatsegB[i]->SetDAnod(AliMUONConstants::Pitch());
630     slatsegNB[i] = new AliMUONSt345SlatSegmentation(0);
631     fDESegmentations->Add(slatsegNB[i]);  
632     slatsegNB[i]->SetPadSize(1./1.4,10.); 
633     slatsegNB[i]->SetPadDivision(ndiv);
634     slatsegNB[i]->SetId(1);
635     slatsegNB[i]->SetDAnod(AliMUONConstants::Pitch());
636   }
637
638   // Type 122330 for 900, 913 in Ch9 (similar for Ch10) 
639   // for the futur official numbering
640   // Type 122330 for 906, 956 in Ch9 (similar for Ch10) 
641   // actual numbering in the code to be changed in jan05
642   Int_t n4[4] = { 0, 1, 2, 2 };
643   slatsegB[0]->SetPcbBoards(n4);
644   slatsegB[0]->Init(0); // 0 detection element id
645   slatsegNB[0]->SetPcbBoards(n4);
646   slatsegNB[0]->Init(0); // 0 detection element id
647     
648   // Type 112233 for 901, 902, 911, 912, 914, 915, 924, 925 in Ch9 
649   // (similar for Ch10) for the futur official numbering
650   // Type 112233 for 904, 905, 907, 908, 954, 955, 957, 958 in Ch9 
651   // (similar for Ch10) actual numbering in the code to be changed in jan05
652   Int_t n5[4] = { 0, 2, 2, 2 };
653   slatsegB[1]->SetPcbBoards(n5);
654   slatsegB[1]->Init(0); // 0 detection element id
655   slatsegNB[1]->SetPcbBoards(n5);
656   slatsegNB[1]->Init(0); // 0 detection element id
657
658   // Type 333000 for 906, 907, 919, 920 in Ch9 (similar for Ch10) 
659   // for the futur official numbering
660   // Type 333000 for 900, 912, 950, 962 in Ch9 (similar for Ch10) 
661   // actual numbering in the code to be changed in jan05
662   Int_t n9[4] = { 0, 0, 0, 3 };
663   slatsegB[2]->SetPcbBoards(n9);
664   slatsegB[2]->Init(0); // 0 detection element id
665   slatsegNB[2]->SetPcbBoards(n9);
666   slatsegNB[2]->Init(0); // 0 detection element id
667
668   // Type 222333 for 903, 910, 916, 923 in Ch9 (similar for Ch10) 
669   // for the futur official numbering
670   // Type 222333 for 903, 909, 953, 959 in Ch9 (similar for Ch10) 
671   // actual numbering in the code to be changed in jan05
672   Int_t n11[4] = { 0, 0, 3, 3 };
673   slatsegB[3]->SetPcbBoards(n11);
674   slatsegB[3]->Init(0); // 0 detection element id
675   slatsegNB[3]->SetPcbBoards(n11);
676   slatsegNB[3]->Init(0); // 0 detection element id
677   
678   // Type 223330 for 904, 909, 917, 922 in Ch9 (similar for Ch10) 
679   // for the futur official numbering
680   // Type 223330 for 902, 910, 952, 960 in Ch9 (similar for Ch10) 
681   // actual numbering in the code to be changed in jan05
682   Int_t n12[4] = { 0, 0, 2, 3 };
683   slatsegB[4]->SetPcbBoards(n12);
684   slatsegB[4]->Init(0); // 0 detection element id
685   slatsegNB[4]->SetPcbBoards(n12);
686   slatsegNB[4]->Init(0); // 0 detection element id
687     
688   // Type 333300 for 905, 908, 918, 921 in Ch9 (similar for Ch10) 
689   // for the futur official numbering
690   // Type 333300 for 901, 911, 951, 961 in Ch9 (similar for Ch10) 
691   // actual numbering in the code to be changed in jan05
692   Int_t n13[4] = { 0, 0, 0, 4 };
693   slatsegB[5]->SetPcbBoards(n13);
694   slatsegB[5]->Init(0); // 0 detection element id
695   slatsegNB[5]->SetPcbBoards(n13);
696   slatsegNB[5]->Init(0); // 0 detection element id
697
698   for (Int_t chamber = 8; chamber < 10; chamber++) {
699
700     segmentation[0] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
701     segmentation[1] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
702
703     // id detection elt for chamber 1
704     Int_t id0 = (chamber+1)*100;
705
706     //--------------------------------------------------------
707     // Configuration for Chamber TC8/9  (Station 5) ----------           
708
709
710     fMUON->SetNsec(chamber,2);
711
712     // cathode 0
713     // type 122330
714     segmentation[0]->Add(id0+ 6, slatsegB[0]);
715     segmentation[0]->Add(id0+56, slatsegB[0]);
716   
717     // type 112233
718     segmentation[0]->Add(id0+ 4, slatsegB[1]);
719     segmentation[0]->Add(id0+ 5, slatsegB[1]);
720     segmentation[0]->Add(id0+ 7, slatsegB[1]);  
721     segmentation[0]->Add(id0+ 8, slatsegB[1]);  
722     segmentation[0]->Add(id0+54, slatsegB[1]);  
723     segmentation[0]->Add(id0+55, slatsegB[1]);  
724     segmentation[0]->Add(id0+57, slatsegB[1]);
725     segmentation[0]->Add(id0+58, slatsegB[1]);
726
727     // type 333000 
728     segmentation[0]->Add(id0   , slatsegB[2]);
729     segmentation[0]->Add(id0+12, slatsegB[2]);  
730     segmentation[0]->Add(id0+50, slatsegB[2]);
731     segmentation[0]->Add(id0+62, slatsegB[2]);
732  
733     // type 222333 
734     segmentation[0]->Add(id0+ 3, slatsegB[3]);
735     segmentation[0]->Add(id0+ 9, slatsegB[3]);  
736     segmentation[0]->Add(id0+53, slatsegB[3]);
737     segmentation[0]->Add(id0+59, slatsegB[3]);
738  
739     // type 223330 
740     segmentation[0]->Add(id0+ 2, slatsegB[4]);
741     segmentation[0]->Add(id0+10, slatsegB[4]);  
742     segmentation[0]->Add(id0+52, slatsegB[4]);
743     segmentation[0]->Add(id0+60, slatsegB[4]);
744   
745     // type 333300 
746     segmentation[0]->Add(id0+ 1, slatsegB[5]);
747     segmentation[0]->Add(id0+11, slatsegB[5]);  
748     segmentation[0]->Add(id0+51, slatsegB[5]);
749     segmentation[0]->Add(id0+61, slatsegB[5]);
750     fMUON->SetSegmentationModel(chamber, 1, segmentation[0]);
751
752     // cathode 1
753     // type 122330
754     segmentation[1]->Add(id0+ 6, slatsegNB[0]);
755     segmentation[1]->Add(id0+56, slatsegNB[0]);
756   
757     // type 112233
758     segmentation[1]->Add(id0+ 4, slatsegNB[1]);
759     segmentation[1]->Add(id0+ 5, slatsegNB[1]);
760     segmentation[1]->Add(id0+ 7, slatsegNB[1]);  
761     segmentation[1]->Add(id0+ 8, slatsegNB[1]);  
762     segmentation[1]->Add(id0+54, slatsegNB[1]);  
763     segmentation[1]->Add(id0+55, slatsegNB[1]);  
764     segmentation[1]->Add(id0+57, slatsegNB[1]);
765     segmentation[1]->Add(id0+58, slatsegNB[1]);
766
767     // type 333000 
768     segmentation[1]->Add(id0   , slatsegNB[2]);
769     segmentation[1]->Add(id0+12, slatsegNB[2]);  
770     segmentation[1]->Add(id0+50, slatsegNB[2]);
771     segmentation[1]->Add(id0+62, slatsegNB[2]);
772  
773     // type 222333 
774     segmentation[1]->Add(id0+ 3, slatsegNB[3]);
775     segmentation[1]->Add(id0+ 9, slatsegNB[3]);  
776     segmentation[1]->Add(id0+53, slatsegNB[3]);
777     segmentation[1]->Add(id0+59, slatsegNB[3]);
778  
779     // type 223330 
780     segmentation[1]->Add(id0+ 2, slatsegNB[4]);
781     segmentation[1]->Add(id0+10, slatsegNB[4]);  
782     segmentation[1]->Add(id0+52, slatsegNB[4]);
783     segmentation[1]->Add(id0+60, slatsegNB[4]);
784   
785     // type 333300 
786     segmentation[1]->Add(id0+ 1, slatsegNB[5]);
787     segmentation[1]->Add(id0+11, slatsegNB[5]);  
788     segmentation[1]->Add(id0+51, slatsegNB[5]);
789     segmentation[1]->Add(id0+61, slatsegNB[5]);
790     fMUON->SetSegmentationModel(chamber, 2, segmentation[1]);
791         
792     fMUON->SetResponseModel(chamber, fResponse0);           
793     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
794   }
795 }
796
797 //__________________________________________________________________________
798 void AliMUONFactoryV2::BuildStation6() 
799 {       
800  // Create Trigger geometry segmentation for given chamber and cathod
801
802  
803     AliMUONGeometrySegmentation *chamberSeg[2];
804 // Cluster-size off
805         AliMUONResponseTrigger* responseTrigger0 =  new AliMUONResponseTrigger;
806 // Cluster-size on  
807 //  AliMUONResponseTriggerV1* responseTrigger0 =  new AliMUONResponseTriggerV1;
808
809     for (Int_t chamber = 10; chamber < 14; chamber++) {
810
811       //Trigger Segmentation
812       AliMUONTriggerSegmentation *trigSegX[9]; 
813       AliMUONTriggerSegmentation *trigSegY[9]; 
814       for(Int_t i=0; i<9; i++) {
815         trigSegX[i] = new AliMUONTriggerSegmentation(1);
816         trigSegY[i] = new AliMUONTriggerSegmentation(0);
817         fDESegmentations->Add(trigSegX[i]);  
818         fDESegmentations->Add(trigSegY[i]);  
819         trigSegX[i]->SetLineNumber(9-i);    
820         trigSegY[i]->SetLineNumber(9-i);    
821       }
822
823       AliMUONChamber *iChamber, *iChamber1;
824       iChamber1 = &fMUON->Chamber(10);
825       iChamber  = &fMUON->Chamber(chamber);
826       Float_t zpos1= - iChamber1->Z();  
827       Float_t zpos = - iChamber->Z();        
828       Float_t zRatio = zpos / zpos1;
829
830       // init
831       Float_t stripWidth[3]={0.,0.,0.};     // 1.0625 2.125 4.25
832       Float_t stripLength[4]={0.,0.,0.,0.}; // 17. 34. 51. 68.
833       for (Int_t i=0; i<3; i++) 
834         stripWidth[i]=AliMUONTriggerConstants::StripWidth(i)*zRatio;
835       for (Int_t i=0; i<4; i++) 
836         stripLength[i]=AliMUONTriggerConstants::StripLength(i)*zRatio;
837       Int_t nStrip[7]={0,0,0,0,0,0,0};    
838       Float_t stripYsize[7]={0.,0.,0.,0.,0.,0.,0.};
839       Float_t stripXsize[7]={0.,0.,0.,0.,0.,0.,0.};
840
841       // chamber 8 0 cathode 0
842       for (Int_t i=0; i<7; i++) nStrip[i]=16;
843       for (Int_t i=0; i<7; i++) stripYsize[i]=stripWidth[2];
844       for (Int_t i=0; i<6; i++) stripXsize[i]=stripLength[1];
845       stripXsize[6]=stripLength[2];
846       trigSegX[8]->Init(0,nStrip,stripYsize,stripXsize,0.); 
847       trigSegX[0]->Init(0,nStrip,stripYsize,stripXsize,0.); 
848
849       // chamber 8 7 1 0 cathode 1
850       for (Int_t i=0; i<6; i++) nStrip[i]=8;
851       nStrip[6]=16;
852       for (Int_t i=0; i<7; i++) stripYsize[i]=stripLength[3];  
853       for (Int_t i=0; i<7; i++) stripXsize[i]=stripWidth[2];
854       trigSegY[8]->Init(0,nStrip,stripYsize,stripXsize,0.);  
855       trigSegY[7]->Init(0,nStrip,stripYsize,stripXsize,0.);
856       trigSegY[1]->Init(0,nStrip,stripYsize,stripXsize,0.);
857       trigSegY[0]->Init(0,nStrip,stripYsize,stripXsize,0.);
858  
859       // chamber 7 6 2 1 cathode 0
860       for (Int_t i=0; i<6; i++) nStrip[i]=32;
861       nStrip[6]=16;  
862       for (Int_t i=0; i<6; i++) stripYsize[i]=stripWidth[1];
863       stripYsize[6]=stripWidth[2];
864       for (Int_t i=0; i<6; i++) stripXsize[i]=stripLength[1];
865       stripXsize[6]=stripLength[2];
866       trigSegX[7]->Init(0,nStrip,stripYsize,stripXsize,0.);  
867       trigSegX[6]->Init(0,nStrip,stripYsize,stripXsize,0.);
868       trigSegX[2]->Init(0,nStrip,stripYsize,stripXsize,0.);  
869       trigSegX[1]->Init(0,nStrip,stripYsize,stripXsize,0.);
870
871       // chamber 6 2 cathode 1
872       for (Int_t i=0; i<5; i++) nStrip[i]=16;
873       for (Int_t i=5; i<6; i++) nStrip[i]=8;
874       nStrip[6]=16;
875       for (Int_t i=0; i<7; i++) stripYsize[i]=stripLength[3];
876       for (Int_t i=0; i<5; i++) stripXsize[i]=stripWidth[1];
877       for (Int_t i=5; i<7; i++) stripXsize[i]=stripWidth[2];
878       trigSegY[6]->Init(0,nStrip,stripYsize,stripXsize,0.);  
879       trigSegY[2]->Init(0,nStrip,stripYsize,stripXsize,0.);  
880
881       // chamber 5 3 cathode 0
882       nStrip[0]=48;
883       for (Int_t i=1; i<3; i++) nStrip[i]=64;
884       for (Int_t i=3; i<6; i++) nStrip[i]=32;
885       nStrip[6]=16;  
886       for (Int_t i=0; i<3; i++) stripYsize[i]=stripWidth[0];
887       for (Int_t i=3; i<6; i++) stripYsize[i]=stripWidth[1];
888       stripYsize[6]=stripWidth[2];
889       for (Int_t i=0; i<6; i++) stripXsize[i]=stripLength[1];
890       stripXsize[6]=stripLength[2];
891       trigSegX[5]->Init(0,nStrip,stripYsize,stripXsize,stripLength[0]);  
892       trigSegX[3]->Init(0,nStrip,stripYsize,stripXsize,0.);
893
894       // chamber 5 3 cathode 1
895       for (Int_t i=0; i<5; i++) nStrip[i]=16;
896       for (Int_t i=5; i<6; i++) nStrip[5]=8;  
897       nStrip[6]=16;  
898       stripYsize[0]=stripLength[2];
899       for (Int_t i=1; i<7; i++) stripYsize[i]=stripLength[3];
900       for (Int_t i=0; i<5; i++) stripXsize[i]=stripWidth[1];
901       for (Int_t i=5; i<7; i++) stripXsize[i]=stripWidth[2];
902       trigSegY[5]->Init(0,nStrip,stripYsize,stripXsize,stripLength[0]);  
903       trigSegY[3]->Init(0,nStrip,stripYsize,stripXsize,0.);
904
905       // chamber 4 cathode 0
906       nStrip[0]=0;
907       for (Int_t i=1; i<3; i++) nStrip[i]=64;  
908       for (Int_t i=3; i<6; i++) nStrip[i]=32;  
909       nStrip[6]=16;
910       stripYsize[0]=0.;
911       for (Int_t i=1; i<3; i++) stripYsize[i]=stripWidth[0];
912       for (Int_t i=3; i<6; i++) stripYsize[i]=stripWidth[1];
913       stripYsize[6]=stripWidth[2];
914       stripXsize[0]=0;  
915       stripXsize[1]=stripLength[0];  
916       for (Int_t i=2; i<6; i++) stripXsize[i]=stripLength[1];
917       stripXsize[6]=stripLength[2];
918       trigSegX[4]->Init(0,nStrip,stripYsize,stripXsize,0.);  
919
920       // chamber 4 cathode 1
921       nStrip[0]=0;  
922       nStrip[1]=8;  
923       for (Int_t i=2; i<5; i++) nStrip[i]=16;
924       for (Int_t i=5; i<6; i++) nStrip[i]=8;
925       nStrip[6]=16;
926       stripYsize[0]=0.;  
927       for (Int_t i=1; i<7; i++) stripYsize[i]=stripLength[3];
928       stripXsize[0]=0.;
929       for (Int_t i=1; i<5; i++) stripXsize[i]=stripWidth[1];
930       for (Int_t i=5; i<7; i++) stripXsize[i]=stripWidth[2];
931       trigSegY[4]->Init(0,nStrip,stripYsize,stripXsize,0.);
932
933       chamberSeg[0] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
934       chamberSeg[1] = new AliMUONGeometrySegmentation(fMUON->Chamber(chamber).GetGeometry());
935
936       fMUON->SetNsec(chamber,2);
937       Int_t icount=chamber-10;  // chamber counter (0 1 2 3)
938       Int_t id0=(10+icount+1)*100;
939
940
941       //  printf("in CreateTriggerSegmentation here 0 id0=%i \n",id0);  
942
943       for (Int_t i = 0; i < 9; i++) {       
944
945         // cathode 0
946         chamberSeg[0]->Add(id0+i,     trigSegX[i]);
947         chamberSeg[0]->Add(id0+50+i,  trigSegX[i]);
948         fMUON->SetSegmentationModel(chamber, 1, chamberSeg[0]);
949
950         // cathode 1
951         chamberSeg[1]->Add(id0+i,     trigSegY[i]);
952         chamberSeg[1]->Add(id0+50+i,  trigSegY[i]);
953         fMUON->SetSegmentationModel(chamber, 2, chamberSeg[1]);
954
955       }
956
957       fMUON->SetResponseModel(chamber, responseTrigger0);      
958       fMUON->Chamber(chamber).SetChargeCorrel(0); // same charge on cathodes
959
960   
961       //  printf("in CreateTriggerSegmentation here 1\n");  
962
963       if (!id0) {
964         AliWarning(Form("Segmentation for chamber %d is not yet defined",chamber));
965         return ;      
966       }
967     }
968 }       
969 //__________________________________________________________________________
970 void AliMUONFactoryV2::Build(AliMUON* where, const char* what) 
971 {
972   //
973   // Construct MUON from chambers, segmentation and responses
974   //
975
976   fMUON = where;
977   char tmp[20];
978   strcpy(tmp, what);
979
980   if (strcmp(tmp, "default")==0) {
981     // Set default parameters
982     fMUON->SetIshunt(0);
983     fMUON->SetMaxStepGas(0.1);
984     fMUON->SetMaxStepAlu(0.1);
985
986     // Build stations
987     BuildCommon();
988     if (IsGeometryDefined(0))  BuildStation1();
989     if (IsGeometryDefined(2))  BuildStation2();
990     if (IsGeometryDefined(4))  BuildStation3();
991     if (IsGeometryDefined(6))  BuildStation4();
992     if (IsGeometryDefined(8))  BuildStation5();
993     if (IsGeometryDefined(10)) BuildStation6();
994   } 
995   else
996     AliDebug(0,"Non default version of MUON selected. You have to construct yourself the MUON elements !!");
997 }
998
999 //__________________________________________________________________________
1000 void AliMUONFactoryV2::BuildStation(AliMUON* where, Int_t stationNumber) 
1001 {
1002   //
1003   // Construct MUON from chambers, segmentation and responses
1004   //
1005   // Version 0
1006   //
1007   // First define the number of planes that are segmented (1 or 2) by a call
1008   // to SetNsec.
1009   // Then chose for each chamber (chamber plane) the segmentation
1010   // and response model.
1011   // They should be equal for the two chambers of each station. In a future
1012   // version this will be enforced.
1013   //
1014
1015   fMUON = where;
1016   if (!fResponse0) BuildCommon(); 
1017     
1018   switch (stationNumber) {    
1019   case 1:  BuildStation1(); break;
1020   case 2:  BuildStation2(); break;
1021   case 3:  BuildStation3(); break;
1022   case 4:  BuildStation4(); break;
1023   case 5:  BuildStation5(); break;
1024   case 6:  BuildStation6(); break;
1025     
1026   default: AliFatal("Wrong station number");
1027   }  
1028 }