]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MUON/AliMUONResponseV0.cxx
From Laurent
[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
24 ClassImp(AliMUONResponseV0)
25         
26 //__________________________________________________________________________
27 AliMUONResponseV0::AliMUONResponseV0()
28   : AliMUONResponse()
29 {
30 // Default constructor
31
32   fMathieson = new AliMUONMathieson();
33   fChargeCorrel = 0;
34 }
35    //__________________________________________________________________________
36 AliMUONResponseV0::~AliMUONResponseV0()
37 {
38   delete fMathieson;
39 }
40   //__________________________________________________________________________
41 void AliMUONResponseV0::SetSqrtKx3AndDeriveKx2Kx4(Float_t SqrtKx3)
42 {
43   // Set to "SqrtKx3" the Mathieson parameter K3 ("fSqrtKx3")
44   // in the X direction, perpendicular to the wires,
45   // and derive the Mathieson parameters K2 ("fKx2") and K4 ("fKx4")
46   // in the same direction
47   fMathieson->SetSqrtKx3AndDeriveKx2Kx4(SqrtKx3);
48 }
49         
50   //__________________________________________________________________________
51 void AliMUONResponseV0::SetSqrtKy3AndDeriveKy2Ky4(Float_t SqrtKy3)
52 {
53   // Set to "SqrtKy3" the Mathieson parameter K3 ("fSqrtKy3")
54   // in the Y direction, along the wires,
55   // and derive the Mathieson parameters K2 ("fKy2") and K4 ("fKy4")
56   // in the same direction
57   fMathieson->SetSqrtKy3AndDeriveKy2Ky4(SqrtKy3);
58 }
59   //__________________________________________________________________________
60 Float_t AliMUONResponseV0::IntPH(Float_t eloss)
61 {
62   // Calculate charge from given ionization energy loss
63   Int_t nel;
64   nel= Int_t(eloss*1.e9/27.4);
65   Float_t charge=0;
66   if (nel == 0) nel=1;
67   for (Int_t i=1;i<=nel;i++) {
68       Float_t arg=0.;
69       while(!arg) arg = gRandom->Rndm();
70       charge -= fChargeSlope*TMath::Log(arg);    
71   }
72   return charge;
73 }
74
75   //-------------------------------------------
76 Float_t AliMUONResponseV0::IntXY(Int_t idDE, AliMUONGeometrySegmentation* segmentation)
77 {
78  // Calculate charge on current pad according to Mathieson distribution
79
80   return fMathieson->IntXY(idDE, segmentation);
81 }
82   //-------------------------------------------
83 Int_t  AliMUONResponseV0::DigitResponse(Int_t digit, AliMUONTransientDigit* /*where*/)
84 {
85     // add white noise and do zero-suppression and signal truncation
86 //     Float_t meanNoise = gRandom->Gaus(1, 0.2);
87     // correct noise for slat chambers;
88     // one more field to add to AliMUONResponseV0 to allow different noises ????
89     Float_t meanNoise = gRandom->Gaus(1., 0.2);
90     Float_t noise     = gRandom->Gaus(0., meanNoise);
91     digit += TMath::Nint(noise); 
92     if ( digit <= ZeroSuppression()) digit = 0;
93     // if ( digit >  MaxAdc())          digit=MaxAdc();
94     if ( digit >  Saturation())          digit=Saturation();
95
96     return digit;
97 }
98
99
100
101
102
103
104
105
106