From 2b22f27207463d29062ada649a2562d6133a1fb8 Mon Sep 17 00:00:00 2001 From: hristov Date: Mon, 6 Oct 2003 09:05:15 +0000 Subject: [PATCH] Adding track references at decay points (M.Ivanov) --- STEER/AliModule.cxx | 9 ++++-- STEER/AliRun.cxx | 74 ++++++++++++++++++++++++++++++++++++++++++--- STEER/AliRun.h | 11 +++++-- STEER/AliStack.cxx | 6 ++-- 4 files changed, 90 insertions(+), 10 deletions(-) diff --git a/STEER/AliModule.cxx b/STEER/AliModule.cxx index fac5840302c..3e90897ad73 100644 --- a/STEER/AliModule.cxx +++ b/STEER/AliModule.cxx @@ -673,10 +673,15 @@ void AliModule::RemapTrackReferencesIDs(Int_t *map) if (ref) { Int_t newID = map[ref->GetTrack()]; if (newID>=0) ref->SetTrack(newID); - else ref->SetTrack(-1); - + else { + //ref->SetTrack(-1); + ref->SetBit(kNotDeleted,kFALSE); + fTrackReferences->RemoveAt(i); + } } } + fTrackReferences->Compress(); + } diff --git a/STEER/AliRun.cxx b/STEER/AliRun.cxx index 9f39bb9aef9..129cb03ce26 100644 --- a/STEER/AliRun.cxx +++ b/STEER/AliRun.cxx @@ -80,6 +80,7 @@ #include "AliRun.h" #include "AliRunLoader.h" #include "AliStack.h" +#include "AliTrackReference.h" AliRun *gAlice; @@ -114,7 +115,8 @@ AliRun::AliRun(): fRandom(0), fMCQA(0), fTransParName("\0"), - fRunLoader(0x0) + fRunLoader(0x0), + fTrackReferences(0) { // // Default constructor for AliRun @@ -152,7 +154,8 @@ AliRun::AliRun(const AliRun& arun): fConfigFunction("\0"), fRandom(0), fMCQA(0), - fTransParName("\0"), + fTransParName("\0"), + fTrackReferences(new TClonesArray("AliTrackReference", 100)), fRunLoader(0x0) { // @@ -264,6 +267,13 @@ AliRun::~AliRun() delete fHitLists; delete fPDGDB; delete fMCQA; + // Delete track references + if (fTrackReferences) { + fTrackReferences->Delete(); + delete fTrackReferences; + fTrackReferences = 0; + } + } //_______________________________________________________________________ @@ -956,6 +966,16 @@ void AliRun::BeginEvent() if (GetDebug()) Info("BeginEvent"," %s->SetTreeAddress()",detector->GetName()); detector->SetTreeAddress(); } + // make branch for AliRun track References + TTree * treeTR = fRunLoader->TreeTR(); + if (treeTR){ + // make branch for central track references + if (!fTrackReferences) fTrackReferences = new TClonesArray("AliTrackReference",0); + TBranch *branch; + branch = treeTR->Branch("AliRun",&fTrackReferences); + branch->SetAddress(&fTrackReferences); + } + // } //_______________________________________________________________________ @@ -1007,17 +1027,58 @@ void AliRun::ResetHits() } //_______________________________________________________________________ +void AliRun::AddTrackReference(Int_t label){ + // + // add a trackrefernce to the list + if (!fTrackReferences) { + cerr<<"Container trackrefernce not active\n"; + return; + } + Int_t nref = fTrackReferences->GetEntriesFast(); + TClonesArray &lref = *fTrackReferences; + new(lref[nref]) AliTrackReference(label); +} + + + void AliRun::ResetTrackReferences() { // - // Reset all Detectors hits + // Reset all references // + if (fTrackReferences) fTrackReferences->Clear(); + TIter next(fModules); AliModule *detector; while((detector = dynamic_cast(next()))) { detector->ResetTrackReferences(); } } + +void AliRun::RemapTrackReferencesIDs(Int_t *map) +{ + // + // Remapping track reference + // Called at finish primary + // + if (!fTrackReferences) return; + for (Int_t i=0;iGetEntries();i++){ + AliTrackReference * ref = dynamic_cast(fTrackReferences->UncheckedAt(i)); + if (ref) { + Int_t newID = map[ref->GetTrack()]; + if (newID>=0) ref->SetTrack(newID); + else { + //ref->SetTrack(-1); + ref->SetBit(kNotDeleted,kFALSE); + fTrackReferences->RemoveAt(i); + } + } + } + fTrackReferences->Compress(); +} + + + //_______________________________________________________________________ void AliRun::ResetPoints() @@ -1487,7 +1548,12 @@ void AliRun::Stepping() Int_t copy; //Update energy deposition tables AddEnergyDeposit(gMC->CurrentVolID(copy),gMC->Edep()); - + // + // write tracke reference for track which is dissapearing - MI + if (gMC->IsTrackDisappeared()) { + if (gMC->Etot()>0.05) AddTrackReference(GetCurrentTrackNumber()); + } + //Call the appropriate stepping routine; AliModule *det = dynamic_cast(fModules->At(id)); if(det && det->StepManagerIsEnabled()) { diff --git a/STEER/AliRun.h b/STEER/AliRun.h index 0c21bdf0206..0e9a68c1823 100644 --- a/STEER/AliRun.h +++ b/STEER/AliRun.h @@ -37,6 +37,7 @@ class AliMCQA; class AliMagF; class AliModule; class AliStack; +class AliTrackReference; enum {kKeepBit=1, kDaughtersBit=2, kDoneBit=4}; @@ -109,7 +110,12 @@ public: virtual void ResetDigits(); virtual void ResetSDigits(); virtual void ResetHits(); - virtual void ResetTrackReferences(); +// Track reference related + virtual void AddTrackReference(Int_t label); + TClonesArray *TrackReferences() const {return fTrackReferences;} + virtual void RemapTrackReferencesIDs(Int_t *map); //remaping track references MI + virtual void ResetTrackReferences(); + virtual void ResetPoints(); virtual void SetTransPar(const char *filename="$(ALICE_ROOT)/data/galice.cuts"); virtual void SetBaseFile(const char *filename="galice.root"); @@ -221,7 +227,8 @@ protected: AliMCQA *fMCQA; // Pointer to MC Quality assurance class TString fTransParName; // Name of the transport parameters file TString fBaseFileName; // Name of the base root file - + + TClonesArray *fTrackReferences; //!list of track references - for one primary track only -MI AliRunLoader *fRunLoader; //!run getter - written as a separate object private: void Copy(AliRun &arun) const; diff --git a/STEER/AliStack.cxx b/STEER/AliStack.cxx index 3f9e663ab0e..373e869c76b 100644 --- a/STEER/AliStack.cxx +++ b/STEER/AliStack.cxx @@ -374,7 +374,7 @@ void AliStack::PurifyKine() // This for detectors which have a special mapping mechanism // for hits, such as TPC and TRD // - + TObjArray* modules = gAlice->Modules(); TIter nextmod(modules); AliModule *detector; @@ -382,7 +382,9 @@ void AliStack::PurifyKine() detector->RemapTrackHitIDs(map.GetArray()); detector->RemapTrackReferencesIDs(map.GetArray()); } - + // + gAlice->RemapTrackReferencesIDs(map.GetArray()); + // Now the output bit, from fHgwmk to nkeep we write everything and we erase if(nkeep>fParticleFileMap.GetSize()) fParticleFileMap.Set(Int_t (nkeep*1.5)); -- 2.39.3