Fixes for #86059: Install data when ALICE_ROOT does not point to source (Christian)
[u/mrichter/AliRoot.git] / MUON / AliMUONResponseFactory.cxx
CommitLineData
61b8353b 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
3d1463c8 16/* $Id$ */
17
18//-----------------------------------------------------------------------------
d19b6003 19// Class AliMUONResponseFactory
20// -----------------------------
21// Factory for muon response
22// Class separated from AliMUONFactoryV4
3d1463c8 23//-----------------------------------------------------------------------------
61b8353b 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"
61b8353b 33#include "AliMUONChamber.h"
34#include "AliMUONResponseV0.h"
35#include "AliMUONResponseTrigger.h"
44b96781 36#include "AliMUONResponseTriggerV1.h"
61b8353b 37
71a2d3aa 38/// \cond CLASSIMP
61b8353b 39ClassImp(AliMUONResponseFactory)
71a2d3aa 40/// \endcond
61b8353b 41
42//__________________________________________________________________________
c103f454 43 AliMUONResponseFactory::AliMUONResponseFactory(const char* name,
44 Bool_t isTailEffect)
61b8353b 45 : TNamed(name, ""),
46 fMUON(0),
c103f454 47 fResponse0(0),
48 fIsTailEffect(isTailEffect)
d19b6003 49{
50/// Standard constructor
51
61b8353b 52 AliDebug(1,Form("ctor this=%p",this));
53}
54
55//__________________________________________________________________________
56 AliMUONResponseFactory::AliMUONResponseFactory()
57 : TNamed(),
58 fMUON(0),
c103f454 59 fResponse0(0),
60 fIsTailEffect(kTRUE)
61b8353b 61{
d19b6003 62/// Default constructor
63
61b8353b 64 AliDebug(1,Form("default (empty) ctor this=%p",this));
61b8353b 65}
66
67//__________________________________________________________________________
61b8353b 68
69AliMUONResponseFactory::~AliMUONResponseFactory()
70{
d19b6003 71/// Destructor
61b8353b 72 AliDebug(1,Form("dtor this=%p",this));
2a7d64a9 73 delete fResponse0;
61b8353b 74}
61b8353b 75
76//__________________________________________________________________________
77void AliMUONResponseFactory::BuildCommon()
78{
d19b6003 79/// Construct the default response.
61b8353b 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);
c103f454 92 fResponse0->SetTailEffect(fIsTailEffect);
61b8353b 93}
94
95//__________________________________________________________________________
96void 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 ????
2a7d64a9 102 AliMUONResponseV0 responseSt1;
61b8353b 103 // Mathieson parameters from L.Kharmandarian's thesis, page 190
2a7d64a9 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.);
61b8353b 108 // ChargeSlope larger to compensate for the smaller anode-cathode distance
109 // and keep the same most probable ADC channel for mip's
4926727f 110 responseSt1.SetChargeSlope(25); // SP & JC ajusted to match 2010 real data was 62.5
61b8353b 111 // assumed proportionality to anode-cathode distance for ChargeSpread
2a7d64a9 112 responseSt1.SetChargeSpread(0.144, 0.144);
113 responseSt1.SetMaxAdc(4096);
114 responseSt1.SetSaturation(3000);
115 responseSt1.SetZeroSuppression(6);
5fe36481 116 responseSt1.SetTailEffect(fIsTailEffect);
61b8353b 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//__________________________________________________________________________
125void AliMUONResponseFactory::BuildStation2()
126{
127/// Configuration for Chamber TC3/4 (Station 2) -----------
128
129 for (Int_t chamber = 2; chamber < 4; chamber++) {
2a7d64a9 130 fMUON->SetResponseModel(chamber, *fResponse0); // normal response
61b8353b 131 fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
132 }
133}
134
135//__________________________________________________________________________
136void AliMUONResponseFactory::BuildStation3()
137{
138/// Configuration for Chamber TC5/6 (Station 3) ----------
139
140 for (Int_t chamber = 4; chamber < 6; chamber++) {
2a7d64a9 141 fMUON->SetResponseModel(chamber, *fResponse0); // normal response
61b8353b 142 fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
143 }
144}
145
146//__________________________________________________________________________
147void AliMUONResponseFactory::BuildStation4()
148{
149/// Configuration for Chamber TC7/8 (Station 4) ----------
150
151 for (Int_t chamber = 6; chamber < 8; chamber++) {
2a7d64a9 152 fMUON->SetResponseModel(chamber, *fResponse0); // normal response
61b8353b 153 fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
154 }
155}
156
157//__________________________________________________________________________
158void AliMUONResponseFactory::BuildStation5()
159{
160/// Configuration for Chamber TC9/10 (Station 5) ---------
161
162 for (Int_t chamber = 8; chamber < 10; chamber++) {
2a7d64a9 163 fMUON->SetResponseModel(chamber, *fResponse0); // normal response
61b8353b 164 fMUON->Chamber(chamber).SetChargeCorrel(0.11); // 11% charge spread
165 }
166}
167
168//__________________________________________________________________________
169void AliMUONResponseFactory::BuildStation6()
170{
171/// Configuration for Trigger Chambers (Station 6,7) ---------
172
44b96781 173 Bool_t resTrigV1 = fMUON->GetTriggerResponseV1();
174
2a7d64a9 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 }
61b8353b 190}
191
192//__________________________________________________________________________
193void AliMUONResponseFactory::Build(AliMUON* where)
194{
d19b6003 195/// Construct MUON responses
61b8353b 196
c103f454 197 AliDebugStream(1) << "Tail effect: " << fIsTailEffect << endl;
198
61b8353b 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//__________________________________________________________________________
217void AliMUONResponseFactory::BuildStation(AliMUON* where, Int_t stationNumber)
218{
d19b6003 219/// Construct MUON responses for given station
61b8353b 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}