]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONResponseV0.cxx
- In constructor: pass directly maxnpx, maxnpy instead of AliMpPlaneType
[u/mrichter/AliRoot.git] / MUON / AliMUONResponseV0.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 #include <TMath.h>
19 #include <TRandom.h>
20
21 #include "AliMUONResponseV0.h"
22 #include "AliMUONGeometrySegmentation.h"
23 #include "AliLog.h"
24
25 ClassImp(AliMUONResponseV0)
26         
27 //__________________________________________________________________________
28 AliMUONResponseV0::AliMUONResponseV0()
29   : AliMUONResponse()
30 {
31 // Default constructor
32
33   fMathieson = new AliMUONMathieson();
34   fChargeCorrel = 0;
35 }
36
37    //_________________________________________________________________________
38 AliMUONResponseV0::AliMUONResponseV0(const AliMUONResponseV0& rhs)
39  : AliMUONResponse(rhs)
40 {
41 // Protected copy constructor
42
43   AliFatal("Not implemented.");
44 }
45
46    //__________________________________________________________________________
47 AliMUONResponseV0::~AliMUONResponseV0()
48 {
49   delete fMathieson;
50 }
51
52    //________________________________________________________________________
53 AliMUONResponseV0& AliMUONResponseV0::operator = (const AliMUONResponseV0& rhs)
54 {
55 // Protected assignement operator
56
57   if (this == &rhs) return *this;
58
59   AliFatal("Not implemented.");
60     
61   return *this;  
62 }
63
64   //__________________________________________________________________________
65 void AliMUONResponseV0::SetSqrtKx3AndDeriveKx2Kx4(Float_t SqrtKx3)
66 {
67   // Set to "SqrtKx3" the Mathieson parameter K3 ("fSqrtKx3")
68   // in the X direction, perpendicular to the wires,
69   // and derive the Mathieson parameters K2 ("fKx2") and K4 ("fKx4")
70   // in the same direction
71   fMathieson->SetSqrtKx3AndDeriveKx2Kx4(SqrtKx3);
72 }
73         
74   //__________________________________________________________________________
75 void AliMUONResponseV0::SetSqrtKy3AndDeriveKy2Ky4(Float_t SqrtKy3)
76 {
77   // Set to "SqrtKy3" the Mathieson parameter K3 ("fSqrtKy3")
78   // in the Y direction, along the wires,
79   // and derive the Mathieson parameters K2 ("fKy2") and K4 ("fKy4")
80   // in the same direction
81   fMathieson->SetSqrtKy3AndDeriveKy2Ky4(SqrtKy3);
82 }
83   //__________________________________________________________________________
84 Float_t AliMUONResponseV0::IntPH(Float_t eloss)
85 {
86   // Calculate charge from given ionization energy loss
87   Int_t nel;
88   nel= Int_t(eloss*1.e9/27.4);
89   Float_t charge=0;
90   if (nel == 0) nel=1;
91   for (Int_t i=1;i<=nel;i++) {
92       Float_t arg=0.;
93       while(!arg) arg = gRandom->Rndm();
94       charge -= fChargeSlope*TMath::Log(arg);    
95   }
96   return charge;
97 }
98
99   //-------------------------------------------
100 Float_t AliMUONResponseV0::IntXY(Int_t idDE, AliMUONGeometrySegmentation* segmentation)
101 {
102  // Calculate charge on current pad according to Mathieson distribution
103
104   return fMathieson->IntXY(idDE, segmentation);
105 }
106   //-------------------------------------------
107 Int_t  AliMUONResponseV0::DigitResponse(Int_t digit, AliMUONTransientDigit* /*where*/)
108 {
109     // add white noise and do zero-suppression and signal truncation
110 //     Float_t meanNoise = gRandom->Gaus(1, 0.2);
111     // correct noise for slat chambers;
112     // one more field to add to AliMUONResponseV0 to allow different noises ????
113     Float_t meanNoise = gRandom->Gaus(1., 0.2);
114     Float_t noise     = gRandom->Gaus(0., meanNoise);
115     digit += TMath::Nint(noise); 
116     if ( digit <= ZeroSuppression()) digit = 0;
117     // if ( digit >  MaxAdc())          digit=MaxAdc();
118     if ( digit >  Saturation())          digit=Saturation();
119
120     return digit;
121 }
122
123
124
125
126
127
128
129
130