* provided "as is" without express or implied warranty. *
**************************************************************************/
-/*
-$Log$
-Revision 1.2 2000/06/15 07:58:48 morsch
-Code from MUON-dev joined
+/* $Id$ */
-Revision 1.1.2.1 2000/06/09 21:33:35 morsch
-AliMUONResponse code from AliMUONSegResV0.cxx
-
-*/
+#include <TMath.h>
+#include <TRandom.h>
#include "AliMUONResponseV0.h"
#include "AliSegmentation.h"
-#include <TMath.h>
-#include <TRandom.h>
-ClassImp(AliMUONResponseV0)
+ClassImp(AliMUONResponseV0)
+
+//__________________________________________________________________________
+AliMUONResponseV0::AliMUONResponseV0()
+ : AliMUONResponse()
+{
+// Default constructor
+
+ fChargeCorrel = 0;
+}
+
+ //__________________________________________________________________________
+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
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++) {
- charge -= fChargeSlope*TMath::Log(gRandom->Rndm());
+ Float_t arg=0.;
+ while(!arg) arg = gRandom->Rndm();
+ charge -= fChargeSlope*TMath::Log(arg);
}
return charge;
}
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 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;
}