#include "AliRun.h"
#include "AliRunLoader.h"
#include "AliStack.h"
+#include "AliTrackReference.h"
AliRun *gAlice;
fRandom(0),
fMCQA(0),
fTransParName("\0"),
- fRunLoader(0x0)
+ fRunLoader(0x0),
+ fTrackReferences(0)
{
//
// Default constructor for AliRun
fConfigFunction("\0"),
fRandom(0),
fMCQA(0),
- fTransParName("\0"),
+ fTransParName("\0"),
+ fTrackReferences(new TClonesArray("AliTrackReference", 100)),
fRunLoader(0x0)
{
//
delete fHitLists;
delete fPDGDB;
delete fMCQA;
+ // Delete track references
+ if (fTrackReferences) {
+ fTrackReferences->Delete();
+ delete fTrackReferences;
+ fTrackReferences = 0;
+ }
+
}
//_______________________________________________________________________
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);
+ }
+ //
}
//_______________________________________________________________________
}
//_______________________________________________________________________
+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<AliModule*>(next()))) {
detector->ResetTrackReferences();
}
}
+
+void AliRun::RemapTrackReferencesIDs(Int_t *map)
+{
+ //
+ // Remapping track reference
+ // Called at finish primary
+ //
+ if (!fTrackReferences) return;
+ for (Int_t i=0;i<fTrackReferences->GetEntries();i++){
+ AliTrackReference * ref = dynamic_cast<AliTrackReference*>(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()
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<AliModule*>(fModules->At(id));
if(det && det->StepManagerIsEnabled()) {
class AliMagF;
class AliModule;
class AliStack;
+class AliTrackReference;
enum {kKeepBit=1, kDaughtersBit=2, kDoneBit=4};
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");
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;