RKUTA choice doc in README. RKUTA as default in Config_MUON_test.C
[u/mrichter/AliRoot.git] / MUON / AliMUONResponseV0.cxx
index a4d8bc4..496f706 100644 (file)
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/*
-$Log$
-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
-
-*/
+/* $Id$ */
 
 #include "AliMUONResponseV0.h"
 #include "AliSegmentation.h"
@@ -29,7 +21,34 @@ AliMUONResponse code  from  AliMUONSegResV0.cxx
 #include <TRandom.h>
 
 
-ClassImp(AliMUONResponseV0)    
+ClassImp(AliMUONResponseV0)
+       
+  //__________________________________________________________________________
+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
+  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;
+}
+       
+  //__________________________________________________________________________
+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
+  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;
+}
+
 Float_t AliMUONResponseV0::IntPH(Float_t eloss)
 {
   // Calculate charge from given ionization energy loss
@@ -38,7 +57,9 @@ Float_t AliMUONResponseV0::IntPH(Float_t eloss)
   Float_t charge=0;
   if (nel == 0) nel=1;
   for (Int_t i=1;i<=nel;i++) {
-    charge -= fChargeSlope*TMath::Log(gRandom->Rndm());    
+      Float_t arg=0.;
+      while(!arg) arg = gRandom->Rndm();
+      charge -= fChargeSlope*TMath::Log(arg);    
   }
   return charge;
 }
@@ -71,10 +92,13 @@ Float_t AliMUONResponseV0::IntXY(AliSegmentation * segmentation)
                      fKy4*(TMath::ATan(uy2)-TMath::ATan(uy1)));
 }
 
-Int_t  AliMUONResponseV0::DigitResponse(Int_t digit)
+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 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; 
     if ( digit <= ZeroSuppression()) digit = 0;