X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONChamber.cxx;h=c55631ef1b56efd9bda5f49c9b023f00e8096e17;hb=b1fea14f4c91213151537f91ffdd7189de82447b;hp=710005f0166fdb34b6c739eab09ceb515d07862c;hpb=30178c30974cdd6a3b59f09e4d479925642e175b;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONChamber.cxx b/MUON/AliMUONChamber.cxx index 710005f0166..c55631ef1b5 100644 --- a/MUON/AliMUONChamber.cxx +++ b/MUON/AliMUONChamber.cxx @@ -15,226 +15,87 @@ /* $Id$ */ +//----------------------------------------------------------------------------- +// Class AliMUONChamber +// ----------------------- +// MUON tracking chamber class +// now only providing DisIntegration function +//----------------------------------------------------------------------------- + // --- ROOT includes --- #include #include +#include "AliRun.h" + // --- MUON includes --- +#include "AliMUON.h" #include "AliMUONChamber.h" -#include "AliMUONChamberGeometry.h" +#include "AliMUONHit.h" +#include "AliLog.h" +/// \cond CLASSIMP ClassImp(AliMUONChamber) +/// \endcond +//_______________________________________________________ AliMUONChamber::AliMUONChamber() : TObject(), fId(0), - fdGas(0.), - fdAlu(0.), - fZ(0.), - fnsec(1), - frMin(0.), - frMax(0.), fCurrentCorrel(1), // to avoid mistakes if ChargeCorrelInit is not called - fSegmentation(0), - fReconstruction(0), fResponse(0), - fGeometry(0) + fMUON(0) { -// Default constructor +/// Default constructor + + AliDebug(1, Form("default (empty) ctor this = %p", this)); } +//_______________________________________________________ AliMUONChamber::AliMUONChamber(Int_t id) : TObject(), fId(id), - fdGas(0.), - fdAlu(0.), - fZ(0.), - fnsec(1), - frMin(0.), - frMax(0.), fCurrentCorrel(1), // to avoid mistakes if ChargeCorrelInit is not called - fSegmentation(0), - fReconstruction(0), fResponse(0), - fGeometry(0) + fMUON(0) { -// Construtor with chamber id - fSegmentation = new TObjArray(2); - fSegmentation->AddAt(0,0); - fSegmentation->AddAt(0,1); +/// Standard constructor - fGeometry = new AliMUONChamberGeometry(fId); -} + // muon + fMUON = (AliMUON*)gAlice->GetModule("MUON"); + if (!fMUON) { + AliFatal("MUON detector not defined."); + return; + } -AliMUONChamber::AliMUONChamber(const AliMUONChamber& rChamber) - : TObject(rChamber) -{ -// Protected copy constructor - - Fatal("AliMUONMergerModule", "Not implemented."); - // Dummy copy constructor + AliDebug(1, Form("ctor this = %p", this) ); } +//_______________________________________________________ AliMUONChamber::~AliMUONChamber() { -// Destructor - if (fSegmentation) { - fSegmentation->Delete(); - delete fSegmentation; - } - delete fGeometry; -} - -AliMUONChamber & AliMUONChamber::operator =(const AliMUONChamber& rhs) -{ -// Protected assignement operator +/// Destructor - if (this == &rhs) return *this; - - Fatal("operator=", "Not implemented."); - - return *this; + AliDebug(1, Form("dtor this = %p", this)); + delete fResponse; } -Bool_t AliMUONChamber::IsSensId(Int_t volId) const +//_____________________________________________________ +void AliMUONChamber::ChargeCorrelationInit() { -// Returns true if the volume specified by volId is in the list -// of sesitive volumes for this chamber - - return fGeometry->IsSensitiveVolume(volId); -} - -void AliMUONChamber::Init() -{ -// Initalisation .. -// -// ... for chamber segmentation - //PH if ((*fSegmentation)[0]) - //PH ((AliSegmentation *) (*fSegmentation)[0])->Init(fId); - if (fSegmentation->At(0)) - ((AliSegmentation *) fSegmentation->At(0))->Init(fId); - - if (fnsec==2) { - //PH if ((*fSegmentation)[1]) - //PH ((AliSegmentation *) (*fSegmentation)[1])->Init(fId); - if (fSegmentation->At(1)) - ((AliSegmentation *) fSegmentation->At(1))->Init(fId); - } -} +/// Initialisation of charge correlation for current hit +/// the value is stored, and then used by Disintegration -Int_t AliMUONChamber::SigGenCond(Float_t x, Float_t y, Float_t z) -{ -// Ask segmentation if signal should be generated - if (fnsec==1) { - //PH return ((AliSegmentation*) (*fSegmentation)[0]) - return ((AliSegmentation*) fSegmentation->At(0)) - ->SigGenCond(x, y, z) ; - } else { - //PH return (((AliSegmentation*) (*fSegmentation)[0]) - return (((AliSegmentation*) fSegmentation->At(0)) - ->SigGenCond(x, y, z)) || - //PH (((AliSegmentation*) (*fSegmentation)[1]) - (((AliSegmentation*) fSegmentation->At(1)) - ->SigGenCond(x, y, z)) ; - } -} - - -void AliMUONChamber::SigGenInit(Float_t x, Float_t y, Float_t z) -{ -// -// Initialisation of segmentation for hit -// - if (fnsec==1) { - //PH ((AliSegmentation*) (*fSegmentation)[0])->SigGenInit(x, y, z) ; - ((AliSegmentation*) fSegmentation->At(0))->SigGenInit(x, y, z) ; - } else { - //PH ((AliSegmentation*) (*fSegmentation)[0])->SigGenInit(x, y, z) ; - //PH ((AliSegmentation*) (*fSegmentation)[1])->SigGenInit(x, y, z) ; - ((AliSegmentation*) fSegmentation->At(0))->SigGenInit(x, y, z) ; - ((AliSegmentation*) fSegmentation->At(1))->SigGenInit(x, y, z) ; - } -} - -void AliMUONChamber::ChargeCorrelationInit() { -// Initialisation of charge correlation for current hit -// the value is stored, and then used by Disintegration -if (fnsec==1) - fCurrentCorrel =1; -else - // exponential is here to avoid eventual problems in 0 - // factor 2 because chargecorrel is q1/q2 and not q1/qtrue + // exponential is here to avoid eventual problems in 0 + // factor 2 because chargecorrel is q1/q2 and not q1/qtrue fCurrentCorrel = TMath::Exp(gRandom->Gaus(0,fResponse->ChargeCorrel()/2)); } -void AliMUONChamber::DisIntegration(Float_t eloss, Float_t /*tof*/, - Float_t xhit, Float_t yhit, Float_t zhit, - Int_t& nnew,Float_t newclust[6][500]) +//_____________________________________________________________________________ +void +AliMUONChamber::SetResponseModel(const AliMUONResponse& thisResponse) { -// -// Generates pad hits (simulated cluster) -// using the segmentation and the response model - Float_t dx, dy; - // - // Width of the integration area - // - dx=fResponse->SigmaIntegration()*fResponse->ChargeSpreadX(); - dy=fResponse->SigmaIntegration()*fResponse->ChargeSpreadY(); - // - // Get pulse height from energy loss - Float_t qtot = fResponse->IntPH(eloss); - // - // Loop Over Pads - - Float_t qp; - nnew=0; - - // Cathode plane loop - for (Int_t i=1; i<=fnsec; i++) { - Float_t qcath = qtot * (i==1? fCurrentCorrel : 1/fCurrentCorrel); - AliSegmentation * segmentation= - //PH (AliSegmentation *) (*fSegmentation)[i-1]; - (AliSegmentation *) fSegmentation->At(i-1); - for (segmentation->FirstPad(xhit, yhit, zhit, dx, dy); - segmentation->MorePads(); - segmentation->NextPad()) - { - qp=fResponse->IntXY(segmentation); - qp=TMath::Abs(qp); -// -// - if (qp > 1.e-4) - { - if (nnew >= 500) // Perform a bounds check on nnew since it is assumed - // newclust only contains 500 elements. - { - Error("DisIntegration", "Limit of 500 pad responses reached."); - return; - }; - // - // --- store signal information - newclust[0][nnew]=qcath; // total charge - newclust[1][nnew]=segmentation->Ix(); // ix-position of pad - newclust[2][nnew]=segmentation->Iy(); // iy-position of pad - newclust[3][nnew]=qp * qcath; // charge on pad - newclust[4][nnew]=segmentation->ISector(); // sector id - newclust[5][nnew]=(Float_t) i; // counter - nnew++; - - } - } // Pad loop - - } // Cathode plane loop + delete fResponse; + fResponse = static_cast(thisResponse.Clone()); } - - -void AliMUONChamber::InitGeo(Float_t /*zpos*/) -{ -// sensitive gas gap - fdGas= 0.5; -// 3% radiation length of aluminum (X0=8.9 cm) - fdAlu= 3.0/100*8.9; -} - -