]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONResponseV0.cxx
New segmentation with switch between old and new (Ch. Finck)
[u/mrichter/AliRoot.git] / MUON / AliMUONResponseV0.cxx
index 970c5ebc01c779fef4f2474b183c0a5466093adf..438f4d6d5a7a9fd384a4f563c68640942beae2c5 100644 (file)
 
 #include "AliMUONResponseV0.h"
 #include "AliSegmentation.h"
+#include "AliMUONGeometrySegmentation.h"
 
 ClassImp(AliMUONResponseV0)
        
 //__________________________________________________________________________
 AliMUONResponseV0::AliMUONResponseV0()
-  : AliMUONResponse() 
+  : AliMUONResponse()
 {
 // Default constructor
 
+  fMathieson = new AliMUONMathieson();
   fChargeCorrel = 0;
 }
-
+   //__________________________________________________________________________
+AliMUONResponseV0::~AliMUONResponseV0()
+{
+  delete fMathieson;
+}
   //__________________________________________________________________________
 void AliMUONResponseV0::SetSqrtKx3AndDeriveKx2Kx4(Float_t SqrtKx3)
 {
@@ -39,10 +45,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);
 }
        
   //__________________________________________________________________________
@@ -52,12 +55,9 @@ 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
@@ -72,35 +72,22 @@ Float_t AliMUONResponseV0::IntPH(Float_t eloss)
   }
   return charge;
 }
-// -------------------------------------------
-
+  //-------------------------------------------
 Float_t AliMUONResponseV0::IntXY(AliSegmentation * 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
+
+  return fMathieson->IntXY(segmentation);
+
 }
+  //-------------------------------------------
+Float_t AliMUONResponseV0::IntXY(Int_t idDE, AliMUONGeometrySegmentation* segmentation)
+{
+ // Calculate charge on current pad according to Mathieson distribution
 
+  return fMathieson->IntXY(idDE, segmentation);
+}
+  //-------------------------------------------
 Int_t  AliMUONResponseV0::DigitResponse(Int_t digit, AliMUONTransientDigit* /*where*/)
 {
     // add white noise and do zero-suppression and signal truncation