/*
$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
+
+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 "AliMUONSegmentation.h"
+#include "AliSegmentation.h"
#include <TMath.h>
#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
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;
}
// -------------------------------------------
-Float_t AliMUONResponseV0::IntXY(AliMUONSegmentation * segmentation)
+Float_t AliMUONResponseV0::IntXY(AliSegmentation * segmentation)
{
// Calculate charge on current pad according to Mathieson distribution
//
Int_t AliMUONResponseV0::DigitResponse(Int_t digit)
{
// 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;