X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=MUON%2FAliMUONRecoCheck.cxx;h=281701f008e804d5f31c9eace5d31367854cda58;hb=110b30cc3fc6073127e101f49be49d163275527e;hp=64394965c0b010a234139d3a0717a1adb458a4b2;hpb=b1fea02e530a9bb2a0617e8ba8555154193cb52a;p=u%2Fmrichter%2FAliRoot.git diff --git a/MUON/AliMUONRecoCheck.cxx b/MUON/AliMUONRecoCheck.cxx index 64394965c0b..281701f008e 100644 --- a/MUON/AliMUONRecoCheck.cxx +++ b/MUON/AliMUONRecoCheck.cxx @@ -31,6 +31,7 @@ // 25 Jan 2008: // Use the new ESDInterface to create MUON objects from ESD data // - Philippe Pillot +// #include "AliMUONRecoCheck.h" #include "AliMUONTrack.h" @@ -39,7 +40,6 @@ #include "AliMUONVClusterStore.h" #include "AliMUONConstants.h" #include "AliMUONESDInterface.h" - #include "AliMCEventHandler.h" #include "AliMCEvent.h" #include "AliStack.h" @@ -59,7 +59,7 @@ ClassImp(AliMUONRecoCheck) /// \endcond //_____________________________________________________________________________ -AliMUONRecoCheck::AliMUONRecoCheck(Char_t *esdFileName, Char_t *pathSim) +AliMUONRecoCheck::AliMUONRecoCheck(const Char_t *esdFileName, const Char_t *pathSim) : TObject(), fMCEventHandler(new AliMCEventHandler()), fESDEvent(new AliESDEvent()), @@ -68,7 +68,8 @@ fESDFile (0x0), fCurrentEvent(0), fTrackRefStore(0x0), fRecoTrackRefStore(0x0), -fRecoTrackStore(0x0) +fRecoTrackStore(0x0), +fESDEventOwner(kTRUE) { /// Normal ctor @@ -93,13 +94,38 @@ fRecoTrackStore(0x0) fESDEvent->ReadFromTree(fESDTree); // link fESDEvent to the tree } +//_____________________________________________________________________________ +AliMUONRecoCheck::AliMUONRecoCheck(AliESDEvent *esdEvent, AliMCEventHandler *mcEventHandler) +: TObject(), +fMCEventHandler(0), +fESDEvent(0), +fESDTree (0x0), +fESDFile (0x0), +fCurrentEvent(0), +fTrackRefStore(0x0), +fRecoTrackRefStore(0x0), +fRecoTrackStore(0x0), +fESDEventOwner(kFALSE) +{ + /// Normal ctor + + // TrackRefs and Particules + fMCEventHandler = mcEventHandler; + + // ESD MUON Tracks + fESDEvent = esdEvent; + +} + //_____________________________________________________________________________ AliMUONRecoCheck::~AliMUONRecoCheck() { /// Destructor - delete fMCEventHandler; - delete fESDEvent; - if (fESDFile) fESDFile->Close(); + if (fESDEventOwner) { + delete fMCEventHandler; + delete fESDEvent; + if (fESDFile) fESDFile->Close(); + } ResetStores(); } @@ -116,7 +142,7 @@ void AliMUONRecoCheck::ResetStores() Int_t AliMUONRecoCheck::NumberOfEvents() const { /// Return the number of events - if (fESDTree) return fESDTree->GetEntries(); + if (fESDEventOwner && fESDTree) return fESDTree->GetEntries(); return 0; } @@ -125,6 +151,12 @@ AliMUONVTrackStore* AliMUONRecoCheck::ReconstructedTracks(Int_t event) { /// Return a track store containing the reconstructed tracks (converted into /// MUONTrack objects) for a given event + + if (!fESDEventOwner) { + MakeReconstructedTracks(); + return fRecoTrackStore; + } + if (event != fCurrentEvent) { ResetStores(); fCurrentEvent = event; @@ -147,6 +179,12 @@ AliMUONVTrackStore* AliMUONRecoCheck::TrackRefs(Int_t event) { /// Return a track store containing the track references (converted into /// MUONTrack objects) for a given event + + if (!fESDEventOwner) { + MakeTrackRefs(); + return fTrackRefStore; + } + if (event != fCurrentEvent) { ResetStores(); fCurrentEvent = event; @@ -167,6 +205,13 @@ AliMUONVTrackStore* AliMUONRecoCheck::TrackRefs(Int_t event) AliMUONVTrackStore* AliMUONRecoCheck::ReconstructibleTracks(Int_t event) { /// Return a track store containing the reconstructible tracks for a given event + + if (!fESDEventOwner) { + if (TrackRefs(event) == 0x0) return 0x0; + MakeReconstructibleTracks(); + return fRecoTrackRefStore; + } + if (event != fCurrentEvent) { ResetStores(); fCurrentEvent = event; @@ -219,7 +264,7 @@ void AliMUONRecoCheck::MakeTrackRefs() // get the particle charge for further calculation TParticlePDG* ppdg = particle->GetPDG(); - Int_t charge = (Int_t)(ppdg->Charge()/3.0); + Int_t charge = ppdg != NULL ? (Int_t)(ppdg->Charge()/3.0) : 0; AliMUONTrack track; @@ -239,11 +284,12 @@ void AliMUONRecoCheck::MakeTrackRefs() pZ = trackReference->Pz(); // check chamberId of current trackReference - Int_t chamberId = AliMUONConstants::ChamberNumber(z); + Int_t detElemId = trackReference->UserId(); + Int_t chamberId = detElemId / 100 - 1; if (chamberId < 0 || chamberId >= AliMUONConstants::NTrackingCh()) continue; // set hit parameters - hit->SetUniqueID(AliMUONVCluster::BuildUniqueID(chamberId, 0, 0)); + hit->SetUniqueID(AliMUONVCluster::BuildUniqueID(chamberId, detElemId, iHit)); hit->SetXYZ(x,y,z); hit->SetErrXY(0.,0.); @@ -406,7 +452,7 @@ void AliMUONRecoCheck::CleanMuonTrackRef(const AliMUONVTrackStore *tmpTrackRefSt inverseBendingMomentum *= trackParam1->GetCharge(); // set hit parameters - hit->SetUniqueID(AliMUONVCluster::BuildUniqueID(trackParam1->GetClusterPtr()->GetChamberId(), 0, 0)); + hit->SetUniqueID(trackParam1->GetClusterPtr()->GetUniqueID()); hit->SetXYZ(x,y,z); hit->SetErrXY(0.,0.);