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