]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONResponseV0.cxx
BuildStation6 made consistent with AliMUONFactoryV2
[u/mrichter/AliRoot.git] / MUON / AliMUONResponseV0.cxx
index 3a5ac7476ff54b3cff89a2a0170cb0b0236c0d4a..95d452cdfe0eefad6e383b175fa1b70c5d4b7ece 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-Revision 1.5  2000/11/21 13:47:55  gosset
-All Mathieson parameters (Sqrt(K3), K2 and K4) set in one function,
-SetSqrtKx3AndDeriveKx2Kx4 or SetSqrtKx3AndDeriveKx2Kx4,
-for each cathode plane
+/* $Id$ */
 
-Revision 1.4  2000/10/25 10:41:52  morsch
-IntPH(..): Protec Log against random numbers equal to 0.
-
-Revision 1.3  2000/07/03 11:54:57  morsch
-AliMUONSegmentation and AliMUONHitMap have been replaced by AliSegmentation and AliHitMap in STEER
-The methods GetPadIxy and GetPadXxy of AliMUONSegmentation have changed name to GetPadI and GetPadC.
-
-Revision 1.2  2000/06/15 07:58:48  morsch
-Code from MUON-dev joined
-
-Revision 1.1.2.1  2000/06/09 21:33:35  morsch
-AliMUONResponse code  from  AliMUONSegResV0.cxx
-
-*/
-
-#include "AliMUONResponseV0.h"
-#include "AliSegmentation.h"
 #include <TMath.h>
 #include <TRandom.h>
 
+#include "AliMUONResponseV0.h"
+#include "AliMUONGeometrySegmentation.h"
 
 ClassImp(AliMUONResponseV0)
        
+//__________________________________________________________________________
+AliMUONResponseV0::AliMUONResponseV0()
+  : AliMUONResponse()
+{
+// Default constructor
+
+  fMathieson = new AliMUONMathieson();
+  fChargeCorrel = 0;
+}
+   //__________________________________________________________________________
+AliMUONResponseV0::~AliMUONResponseV0()
+{
+  delete fMathieson;
+}
   //__________________________________________________________________________
 void AliMUONResponseV0::SetSqrtKx3AndDeriveKx2Kx4(Float_t SqrtKx3)
 {
@@ -50,10 +44,7 @@ void AliMUONResponseV0::SetSqrtKx3AndDeriveKx2Kx4(Float_t SqrtKx3)
   // in the X direction, perpendicular to the wires,
   // and derive the Mathieson parameters K2 ("fKx2") and K4 ("fKx4")
   // in the same direction
-  fSqrtKx3 = SqrtKx3;
-  fKx2 = TMath::Pi() / 2. * (1. - 0.5 * fSqrtKx3);
-  Float_t cx1 = fKx2 * fSqrtKx3 / 4. / TMath::ATan(Double_t(fSqrtKx3));
-  fKx4 = cx1 / fKx2 / fSqrtKx3;
+  fMathieson->SetSqrtKx3AndDeriveKx2Kx4(SqrtKx3);
 }
        
   //__________________________________________________________________________
@@ -63,17 +54,14 @@ void AliMUONResponseV0::SetSqrtKy3AndDeriveKy2Ky4(Float_t SqrtKy3)
   // in the Y direction, along the wires,
   // and derive the Mathieson parameters K2 ("fKy2") and K4 ("fKy4")
   // in the same direction
-  fSqrtKy3 = SqrtKy3;
-  fKy2 = TMath::Pi() / 2. * (1. - 0.5 * fSqrtKy3);
-  Float_t cy1 = fKy2 * fSqrtKy3 / 4. / TMath::ATan(Double_t(fSqrtKy3));
-  fKy4 = cy1 / fKy2 / fSqrtKy3;
+  fMathieson->SetSqrtKy3AndDeriveKy2Ky4(SqrtKy3);
 }
-
+  //__________________________________________________________________________
 Float_t AliMUONResponseV0::IntPH(Float_t eloss)
 {
   // Calculate charge from given ionization energy loss
   Int_t nel;
-  nel= Int_t(eloss*1.e9/32.);
+  nel= Int_t(eloss*1.e9/27.4);
   Float_t charge=0;
   if (nel == 0) nel=1;
   for (Int_t i=1;i<=nel;i++) {
@@ -83,46 +71,28 @@ Float_t AliMUONResponseV0::IntPH(Float_t eloss)
   }
   return charge;
 }
-// -------------------------------------------
 
-Float_t AliMUONResponseV0::IntXY(AliSegmentation * segmentation)
+  //-------------------------------------------
+Float_t AliMUONResponseV0::IntXY(Int_t idDE, AliMUONGeometrySegmentation* segmentation)
 {
-// Calculate charge on current pad according to Mathieson distribution
-// 
-    const Float_t kInversePitch = 1/fPitch;
-//
-//  Integration limits defined by segmentation model
-//  
-    Float_t xi1, xi2, yi1, yi2;
-    segmentation->IntegrationLimits(xi1,xi2,yi1,yi2);
-    xi1=xi1*kInversePitch;
-    xi2=xi2*kInversePitch;
-    yi1=yi1*kInversePitch;
-    yi2=yi2*kInversePitch;
-//
-// The Mathieson function 
-    Double_t ux1=fSqrtKx3*TMath::TanH(fKx2*xi1);
-    Double_t ux2=fSqrtKx3*TMath::TanH(fKx2*xi2);
-
-    Double_t uy1=fSqrtKy3*TMath::TanH(fKy2*yi1);
-    Double_t uy2=fSqrtKy3*TMath::TanH(fKy2*yi2);
-
-    
-    return Float_t(4.*fKx4*(TMath::ATan(ux2)-TMath::ATan(ux1))*
-                     fKy4*(TMath::ATan(uy2)-TMath::ATan(uy1)));
-}
+ // Calculate charge on current pad according to Mathieson distribution
 
-Int_t  AliMUONResponseV0::DigitResponse(Int_t digit)
+  return fMathieson->IntXY(idDE, segmentation);
+}
+  //-------------------------------------------
+Int_t  AliMUONResponseV0::DigitResponse(Int_t digit, AliMUONTransientDigit* /*where*/)
 {
     // add white noise and do zero-suppression and signal truncation
 //     Float_t meanNoise = gRandom->Gaus(1, 0.2);
     // correct noise for slat chambers;
     // one more field to add to AliMUONResponseV0 to allow different noises ????
-    Float_t meanNoise = gRandom->Gaus(1.5, 0.2);
-    Float_t noise     = gRandom->Gaus(0, meanNoise);
-    digit+=(Int_t)noise
+    Float_t meanNoise = gRandom->Gaus(1., 0.2);
+    Float_t noise     = gRandom->Gaus(0., meanNoise);
+    digit += TMath::Nint(noise)
     if ( digit <= ZeroSuppression()) digit = 0;
-    if ( digit >  MaxAdc())          digit=MaxAdc();
+    // if ( digit >  MaxAdc())          digit=MaxAdc();
+    if ( digit >  Saturation())          digit=Saturation();
+
     return digit;
 }