X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONResponseV0.cxx;h=95d452cdfe0eefad6e383b175fa1b70c5d4b7ece;hb=11889dc3c0d1ad04a65130758d1b6476573bebdc;hp=244901f688c955ae181a9de9d839f9c6e5f87f48;hpb=01997fa20c96aea70f579ac57b351373fd788123;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONResponseV0.cxx b/MUON/AliMUONResponseV0.cxx index 244901f688c..95d452cdfe0 100644 --- a/MUON/AliMUONResponseV0.cxx +++ b/MUON/AliMUONResponseV0.cxx @@ -13,32 +13,55 @@ * 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 #include +#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; }