]> git.uio.no Git - u/mrichter/AliRoot.git/blame - MUON/AliMUONResponseV0.cxx
Save pythia default decay table at first initialization. Reload at each
[u/mrichter/AliRoot.git] / MUON / AliMUONResponseV0.cxx
CommitLineData
a9e2aefa 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$Log$
b64652f5 18Revision 1.5 2000/11/21 13:47:55 gosset
19All Mathieson parameters (Sqrt(K3), K2 and K4) set in one function,
20SetSqrtKx3AndDeriveKx2Kx4 or SetSqrtKx3AndDeriveKx2Kx4,
21for each cathode plane
22
d5bfadcc 23Revision 1.4 2000/10/25 10:41:52 morsch
24IntPH(..): Protec Log against random numbers equal to 0.
25
01997fa2 26Revision 1.3 2000/07/03 11:54:57 morsch
27AliMUONSegmentation and AliMUONHitMap have been replaced by AliSegmentation and AliHitMap in STEER
28The methods GetPadIxy and GetPadXxy of AliMUONSegmentation have changed name to GetPadI and GetPadC.
29
a30a000f 30Revision 1.2 2000/06/15 07:58:48 morsch
31Code from MUON-dev joined
32
a9e2aefa 33Revision 1.1.2.1 2000/06/09 21:33:35 morsch
34AliMUONResponse code from AliMUONSegResV0.cxx
35
36*/
37
38#include "AliMUONResponseV0.h"
a30a000f 39#include "AliSegmentation.h"
a9e2aefa 40#include <TMath.h>
41#include <TRandom.h>
42
43
d5bfadcc 44ClassImp(AliMUONResponseV0)
45
46 //__________________________________________________________________________
47void AliMUONResponseV0::SetSqrtKx3AndDeriveKx2Kx4(Float_t SqrtKx3)
48{
49 // Set to "SqrtKx3" the Mathieson parameter K3 ("fSqrtKx3")
50 // in the X direction, perpendicular to the wires,
51 // and derive the Mathieson parameters K2 ("fKx2") and K4 ("fKx4")
52 // in the same direction
53 fSqrtKx3 = SqrtKx3;
54 fKx2 = TMath::Pi() / 2. * (1. - 0.5 * fSqrtKx3);
55 Float_t cx1 = fKx2 * fSqrtKx3 / 4. / TMath::ATan(Double_t(fSqrtKx3));
56 fKx4 = cx1 / fKx2 / fSqrtKx3;
57}
58
59 //__________________________________________________________________________
60void AliMUONResponseV0::SetSqrtKy3AndDeriveKy2Ky4(Float_t SqrtKy3)
61{
62 // Set to "SqrtKy3" the Mathieson parameter K3 ("fSqrtKy3")
63 // in the Y direction, along the wires,
64 // and derive the Mathieson parameters K2 ("fKy2") and K4 ("fKy4")
65 // in the same direction
66 fSqrtKy3 = SqrtKy3;
67 fKy2 = TMath::Pi() / 2. * (1. - 0.5 * fSqrtKy3);
68 Float_t cy1 = fKy2 * fSqrtKy3 / 4. / TMath::ATan(Double_t(fSqrtKy3));
69 fKy4 = cy1 / fKy2 / fSqrtKy3;
70}
71
a9e2aefa 72Float_t AliMUONResponseV0::IntPH(Float_t eloss)
73{
74 // Calculate charge from given ionization energy loss
75 Int_t nel;
76 nel= Int_t(eloss*1.e9/32.);
77 Float_t charge=0;
78 if (nel == 0) nel=1;
79 for (Int_t i=1;i<=nel;i++) {
01997fa2 80 Float_t arg=0.;
81 while(!arg) arg = gRandom->Rndm();
82 charge -= fChargeSlope*TMath::Log(arg);
a9e2aefa 83 }
84 return charge;
85}
86// -------------------------------------------
87
a30a000f 88Float_t AliMUONResponseV0::IntXY(AliSegmentation * segmentation)
a9e2aefa 89{
90// Calculate charge on current pad according to Mathieson distribution
91//
92 const Float_t kInversePitch = 1/fPitch;
93//
94// Integration limits defined by segmentation model
95//
96 Float_t xi1, xi2, yi1, yi2;
97 segmentation->IntegrationLimits(xi1,xi2,yi1,yi2);
98 xi1=xi1*kInversePitch;
99 xi2=xi2*kInversePitch;
100 yi1=yi1*kInversePitch;
101 yi2=yi2*kInversePitch;
102//
103// The Mathieson function
104 Double_t ux1=fSqrtKx3*TMath::TanH(fKx2*xi1);
105 Double_t ux2=fSqrtKx3*TMath::TanH(fKx2*xi2);
106
107 Double_t uy1=fSqrtKy3*TMath::TanH(fKy2*yi1);
108 Double_t uy2=fSqrtKy3*TMath::TanH(fKy2*yi2);
109
110
111 return Float_t(4.*fKx4*(TMath::ATan(ux2)-TMath::ATan(ux1))*
112 fKy4*(TMath::ATan(uy2)-TMath::ATan(uy1)));
113}
114
115Int_t AliMUONResponseV0::DigitResponse(Int_t digit)
116{
117 // add white noise and do zero-suppression and signal truncation
b64652f5 118// Float_t meanNoise = gRandom->Gaus(1, 0.2);
119 // correct noise for slat chambers;
120 // one more field to add to AliMUONResponseV0 to allow different noises ????
121 Float_t meanNoise = gRandom->Gaus(1.5, 0.2);
a9e2aefa 122 Float_t noise = gRandom->Gaus(0, meanNoise);
123 digit+=(Int_t)noise;
124 if ( digit <= ZeroSuppression()) digit = 0;
125 if ( digit > MaxAdc()) digit=MaxAdc();
126 return digit;
127}
128
129
130
131
132
133
134
135
136