AliMUONSegmentation and AliMUONHitMap have been replaced by AliSegmentation and AliHi...
[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 /*
17 $Log$
18 Revision 1.2  2000/06/15 07:58:48  morsch
19 Code from MUON-dev joined
20
21 Revision 1.1.2.1  2000/06/09 21:33:35  morsch
22 AliMUONResponse code  from  AliMUONSegResV0.cxx
23
24 */
25
26 #include "AliMUONResponseV0.h"
27 #include "AliSegmentation.h"
28 #include <TMath.h>
29 #include <TRandom.h>
30
31
32 ClassImp(AliMUONResponseV0)     
33 Float_t AliMUONResponseV0::IntPH(Float_t eloss)
34 {
35   // Calculate charge from given ionization energy loss
36   Int_t nel;
37   nel= Int_t(eloss*1.e9/32.);
38   Float_t charge=0;
39   if (nel == 0) nel=1;
40   for (Int_t i=1;i<=nel;i++) {
41     charge -= fChargeSlope*TMath::Log(gRandom->Rndm());    
42   }
43   return charge;
44 }
45 // -------------------------------------------
46
47 Float_t AliMUONResponseV0::IntXY(AliSegmentation * segmentation)
48 {
49 // Calculate charge on current pad according to Mathieson distribution
50 // 
51     const Float_t kInversePitch = 1/fPitch;
52 //
53 //  Integration limits defined by segmentation model
54 //  
55     Float_t xi1, xi2, yi1, yi2;
56     segmentation->IntegrationLimits(xi1,xi2,yi1,yi2);
57     xi1=xi1*kInversePitch;
58     xi2=xi2*kInversePitch;
59     yi1=yi1*kInversePitch;
60     yi2=yi2*kInversePitch;
61 //
62 // The Mathieson function 
63     Double_t ux1=fSqrtKx3*TMath::TanH(fKx2*xi1);
64     Double_t ux2=fSqrtKx3*TMath::TanH(fKx2*xi2);
65
66     Double_t uy1=fSqrtKy3*TMath::TanH(fKy2*yi1);
67     Double_t uy2=fSqrtKy3*TMath::TanH(fKy2*yi2);
68
69     
70     return Float_t(4.*fKx4*(TMath::ATan(ux2)-TMath::ATan(ux1))*
71                       fKy4*(TMath::ATan(uy2)-TMath::ATan(uy1)));
72 }
73
74 Int_t  AliMUONResponseV0::DigitResponse(Int_t digit)
75 {
76     // add white noise and do zero-suppression and signal truncation
77     Float_t meanNoise = gRandom->Gaus(1, 0.2);
78     Float_t noise     = gRandom->Gaus(0, meanNoise);
79     digit+=(Int_t)noise; 
80     if ( digit <= ZeroSuppression()) digit = 0;
81     if ( digit >  MaxAdc())          digit=MaxAdc();
82     return digit;
83 }
84
85
86
87
88
89
90
91
92