Write only detector coefficients from HLT (Raphaelle)
[u/mrichter/AliRoot.git] / MUON / AliMUONResponseFactory.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 /* $Id$ */
17
18 //-----------------------------------------------------------------------------
19 // Class AliMUONResponseFactory
20 // -----------------------------
21 // Factory for muon response
22 // Class separated from AliMUONFactoryV4
23 //-----------------------------------------------------------------------------
24
25 #include "AliMUONResponseFactory.h"
26 #include "AliRun.h"
27 #include "AliLog.h"
28
29 #include "AliMpPlaneType.h"
30
31 #include "AliMUON.h"
32 #include "AliMUONConstants.h"
33 #include "AliMUONChamber.h"
34 #include "AliMUONResponseV0.h"
35 #include "AliMUONResponseTrigger.h"
36 #include "AliMUONResponseTriggerV1.h"
37
38 /// \cond CLASSIMP
39 ClassImp(AliMUONResponseFactory)
40 /// \endcond
41
42 //__________________________________________________________________________
43   AliMUONResponseFactory::AliMUONResponseFactory(const char* name,
44                                                  Bool_t isTailEffect)
45     : TNamed(name, ""),
46       fMUON(0),
47       fResponse0(0),
48       fIsTailEffect(isTailEffect)
49 {
50 /// Standard constructor
51   
52   AliDebug(1,Form("ctor this=%p",this));
53 }
54
55 //__________________________________________________________________________
56   AliMUONResponseFactory::AliMUONResponseFactory()
57     : TNamed(),
58       fMUON(0),
59       fResponse0(0),
60       fIsTailEffect(kTRUE)
61 {
62 /// Default constructor
63
64   AliDebug(1,Form("default (empty) ctor this=%p",this));
65 }
66
67 //__________________________________________________________________________
68
69 AliMUONResponseFactory::~AliMUONResponseFactory()
70 {
71 /// Destructor
72         AliDebug(1,Form("dtor this=%p",this));
73   delete fResponse0;
74 }
75           
76 //__________________________________________________________________________
77 void AliMUONResponseFactory::BuildCommon() 
78 {
79 /// Construct the default response.
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(AliMUONConstants::Pitch()); // 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   fResponse0->SetTailEffect(fIsTailEffect);
93 }       
94         
95 //__________________________________________________________________________
96 void AliMUONResponseFactory::BuildStation1() 
97 {
98 /// Configuration for Chamber TC1/2  (Station 1) ----------           
99
100   // Response for 4 mm of gas (station 1)
101   // automatic consistency with width of sensitive medium in CreateGeometry ????
102   AliMUONResponseV0 responseSt1;
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(AliMUONConstants::PitchSt1()); // 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   responseSt1.SetTailEffect(fIsTailEffect);
117
118    for (Int_t chamber = 0; chamber < 2; chamber++) {
119     fMUON->SetResponseModel(chamber, responseSt1); // special response      
120     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
121   }
122 }
123
124 //__________________________________________________________________________
125 void AliMUONResponseFactory::BuildStation2() 
126 {
127 /// Configuration for Chamber TC3/4 (Station 2) -----------
128
129   for (Int_t chamber = 2; chamber < 4; chamber++) {
130     fMUON->SetResponseModel(chamber, *fResponse0); // normal response        
131     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
132   }
133 }       
134         
135 //__________________________________________________________________________
136 void AliMUONResponseFactory::BuildStation3() 
137 {
138 /// Configuration for Chamber TC5/6  (Station 3) ----------          
139
140   for (Int_t chamber = 4; chamber < 6; chamber++) {
141     fMUON->SetResponseModel(chamber, *fResponse0); // normal response        
142     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
143   }
144 }       
145         
146 //__________________________________________________________________________
147 void AliMUONResponseFactory::BuildStation4() 
148 {
149 /// Configuration for Chamber TC7/8  (Station 4) ----------          
150
151   for (Int_t chamber = 6; chamber < 8; chamber++) {
152     fMUON->SetResponseModel(chamber, *fResponse0); // normal response        
153     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
154   }
155 }       
156         
157 //__________________________________________________________________________
158 void AliMUONResponseFactory::BuildStation5() 
159 {
160 /// Configuration for Chamber TC9/10  (Station 5) ---------           
161
162   for (Int_t chamber = 8; chamber < 10; chamber++) {
163     fMUON->SetResponseModel(chamber, *fResponse0); // normal response        
164     fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
165   }
166 }       
167         
168 //__________________________________________________________________________
169 void AliMUONResponseFactory::BuildStation6() 
170 {
171 /// Configuration for Trigger Chambers   (Station 6,7) ---------           
172
173     Bool_t resTrigV1 = fMUON->GetTriggerResponseV1();    
174
175     for (Int_t chamber = 10; chamber < 14; chamber++) 
176     {
177       AliMUONResponse* response;
178       if (!resTrigV1) 
179       {
180         response = new AliMUONResponseTrigger;
181       }
182       else
183       {
184         response = new AliMUONResponseTriggerV1;
185       }
186             fMUON->SetResponseModel(chamber,*response); 
187       fMUON->Chamber(chamber).SetChargeCorrel(0); // same charge on both cathodes
188       delete response;
189     }
190 }       
191
192 //__________________________________________________________________________
193 void AliMUONResponseFactory::Build(AliMUON* where) 
194 {
195 /// Construct MUON responses
196
197   AliDebugStream(1) << "Tail effect: " << fIsTailEffect << endl;
198
199   fMUON = where;
200
201   // Set default parameters
202   fMUON->SetIshunt(0);
203   fMUON->SetMaxStepGas(0.1);
204   fMUON->SetMaxStepAlu(0.1);
205
206   // Build stations
207   BuildCommon();
208   BuildStation1();
209   BuildStation2();
210   BuildStation3();
211   BuildStation4();
212   BuildStation5();
213   BuildStation6();
214 }
215
216 //__________________________________________________________________________
217 void AliMUONResponseFactory::BuildStation(AliMUON* where, Int_t stationNumber) 
218 {
219 /// Construct MUON responses for given station
220
221   fMUON = where;
222   if (!fResponse0) BuildCommon(); 
223     
224   switch (stationNumber) {    
225     case 1:  BuildStation1(); break;
226     case 2:  BuildStation2(); break;
227     case 3:  BuildStation3(); break;
228     case 4:  BuildStation4(); break;
229     case 5:  BuildStation5(); break;
230     case 6:  BuildStation6(); break;
231     
232     default: AliFatal("Wrong station number");
233   }  
234 }