]> 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 244901f688c955ae181a9de9d839f9c6e5f87f48..95d452cdfe0eefad6e383b175fa1b70c5d4b7ece 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-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.
+/* $Id$ */
 
-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)    
+ClassImp(AliMUONResponseV0)
+       
+//__________________________________________________________________________
+AliMUONResponseV0::AliMUONResponseV0()
+  : AliMUONResponse()
+{
+// Default constructor
+
+  fMathieson = new AliMUONMathieson();
+  fChargeCorrel = 0;
+}
+   //__________________________________________________________________________
+AliMUONResponseV0::~AliMUONResponseV0()
+{
+  delete fMathieson;
+}
+  //__________________________________________________________________________
+void AliMUONResponseV0::SetSqrtKx3AndDeriveKx2Kx4(Float_t SqrtKx3)
+{
+  // Set to "SqrtKx3" the Mathieson parameter K3 ("fSqrtKx3")
+  // in the X direction, perpendicular to the wires,
+  // and derive the Mathieson parameters K2 ("fKx2") and K4 ("fKx4")
+  // in the same direction
+  fMathieson->SetSqrtKx3AndDeriveKx2Kx4(SqrtKx3);
+}
+       
+  //__________________________________________________________________________
+void AliMUONResponseV0::SetSqrtKy3AndDeriveKy2Ky4(Float_t SqrtKy3)
+{
+  // Set to "SqrtKy3" the Mathieson parameter K3 ("fSqrtKy3")
+  // in the Y direction, along the wires,
+  // and derive the Mathieson parameters K2 ("fKy2") and K4 ("fKy4")
+  // in the same direction
+  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++) {
@@ -48,43 +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);
-    Float_t noise     = gRandom->Gaus(0, meanNoise);
-    digit+=(Int_t)noise; 
+//     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., 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;
 }