From 276c44b7df8039fe9eea0bd77291e6227ebf3bb2 Mon Sep 17 00:00:00 2001 From: pcrochet Date: Mon, 26 Jan 2004 17:53:28 +0000 Subject: [PATCH] Modifs to account for trigger track reconstruction (Thanks to Christian) --- MUON/AliMUONData.cxx | 132 +++++++++++++++++++++++++++-- MUON/AliMUONData.h | 15 +++- MUON/AliMUONEventReconstructor.cxx | 122 ++++++++++++++++++++++++++ MUON/AliMUONEventReconstructor.h | 13 +++ MUON/MUONTracker.C | 56 +++++++----- 5 files changed, 308 insertions(+), 30 deletions(-) diff --git a/MUON/AliMUONData.cxx b/MUON/AliMUONData.cxx index 7bc2dd806dd..a2faef0a700 100644 --- a/MUON/AliMUONData.cxx +++ b/MUON/AliMUONData.cxx @@ -20,7 +20,6 @@ // Gines Martinez, Subatech, September 2003 // - //Root includes #include "TNamed.h" //AliRoot include @@ -33,7 +32,7 @@ #include "AliMUONGlobalTrigger.h" #include "AliMUONRawCluster.h" #include "AliMUONTrack.h" - +#include "AliMUONTriggerTrack.h" ClassImp(AliMUONData) //_____________________________________________________________________________ @@ -48,6 +47,7 @@ AliMUONData::AliMUONData():TNamed() fGlobalTrigger = 0x0; //! List of Global Trigger 1st event in TreeR/GlobalTriggerBranch fLocalTrigger = 0x0; //! List of Local Trigger, 1st event in TreeR/LocalTriggerBranch fRecTracks = 0x0; + fRecTriggerTracks = 0x0; fSplitLevel = 0; //default constructor } @@ -64,10 +64,12 @@ AliMUONData::AliMUONData(AliLoader * loader, const char* name, const char* title fGlobalTrigger = 0x0; //! List of Global Trigger 1st event in TreeR/GlobalTriggerBranch fLocalTrigger = 0x0; //! List of Local Trigger, 1st event in TreeR/LocalTriggerBranch fRecTracks = 0x0; + fRecTriggerTracks = 0x0; fNhits = 0; fNglobaltrigger =0; fNlocaltrigger = 0; fNrectracks = 0; + fNrectriggertracks = 0; fSplitLevel = 0; // fHits = new TClonesArray("AliMUONHit",1000); // fNhits = 0; @@ -127,6 +129,10 @@ AliMUONData::~AliMUONData() fRecTracks->Delete(); delete fRecTracks; } + if (fRecTriggerTracks){ + fRecTriggerTracks->Delete(); + delete fRecTriggerTracks; + } //detructor } //_____________________________________________________________________________ @@ -231,6 +237,17 @@ void AliMUONData::AddRecTrack(const AliMUONTrack& track) new(lrectracks[fNrectracks++]) AliMUONTrack(track); // printf("TTTTTT %d ,\n",((AliMUONTrack*)fRecTracks->At(fNrectracks-1))->GetNTrackHits()); } +//_____________________________________________________________________________ +void AliMUONData::AddRecTriggerTrack(const AliMUONTriggerTrack& triggertrack) +{ + // + // Add a MUON triggerrectrack + // + TClonesArray &lrectriggertracks = *fRecTriggerTracks; + new(lrectriggertracks[fNrectriggertracks++]) AliMUONTriggerTrack(triggertrack); + // printf("TTTTTT %d ,\n",((AliMUONTrack*)fRecTracks->At(fNrectracks-1))->GetNTrackHits()); +} + //____________________________________________________________________________ TClonesArray* AliMUONData::Digits(Int_t DetectionPlane) { @@ -275,6 +292,40 @@ Bool_t AliMUONData::IsTriggerBranchesInTree() } } //____________________________________________________________________________ +Bool_t AliMUONData::IsTrackBranchesInTree() +{ + // Checking if there are Track Branches In TreeT + if (TreeT()==0x0) { + Error("TreeT","No treeT in memory"); + return kFALSE; + } + else { + char branchname[30]; + sprintf(branchname,"%sTrack",GetName()); + TBranch * branch = 0x0; + branch = TreeT()->GetBranch(branchname); + if (branch) return kTRUE; + else return kFALSE; + } +} +//____________________________________________________________________________ +Bool_t AliMUONData::IsTriggerTrackBranchesInTree() +{ + // Checking if there are TriggerTrack Branches In TreeT + if (TreeT()==0x0) { + Error("TreeT","No treeT in memory"); + return kFALSE; + } + else { + char branchname[30]; + sprintf(branchname,"%sTriggerTrack",GetName()); + TBranch * branch = 0x0; + branch = TreeT()->GetBranch(branchname); + if (branch) return kTRUE; + else return kFALSE; + } +} +//____________________________________________________________________________ void AliMUONData::Fill(Option_t* option) { // Method to fill the trees @@ -283,6 +334,7 @@ void AliMUONData::Fill(Option_t* option) const char *cRC = strstr(option,"RC"); // RawCluster branches in TreeR const char *cGLT = strstr(option,"GLT"); // Global and Local Trigger branches in TreeR const char *cRT = strstr(option,"RT"); // Reconstructed Track in TreeT + const char *cRL = strstr(option,"RL"); // Reconstructed Trigger Track in TreeT //const char *cRP = strstr(option,"RP"); // Reconstructed Particle in TreeP @@ -331,10 +383,23 @@ void AliMUONData::Fill(Option_t* option) // // filling tracks if ( TreeT() && cRT ) { - sprintf(branchname,"%sTrack",GetName()); - TreeT()->Fill(); + if (IsTriggerTrackBranchesInTree()) { + sprintf(branchname,"%sTrack",GetName()); + branch = TreeT()->GetBranch(branchname); + branch->Fill(); + } + else TreeT()->Fill(); + } + // filling trigger tracks + if ( TreeT() && cRL ) { + if (IsTrackBranchesInTree()) { + sprintf(branchname,"%sTriggerTrack",GetName()); + branch = TreeT()->GetBranch(branchname); + branch->Fill(); + } + else TreeT()->Fill(); } -// if ( TreeT() && cRTT ) { +// if ( TreeT() && cRL ) { // sprintf(branchname,"%sTrackTrig",GetName()); // TreeT()->Fill(); // } @@ -348,13 +413,15 @@ void AliMUONData::MakeBranch(Option_t* option) const Int_t kBufferSize = 4000; char branchname[30]; + const char *cH = strstr(option,"H"); const char *cD = strstr(option,"D"); // Digits branches in TreeD const char *cRC = strstr(option,"RC"); // RawCluster branches in TreeR const char *cGLT = strstr(option,"GLT"); // Global and Local Trigger branches in TreeR const char *cRT = strstr(option,"RT"); // Reconstructed Track in TreeT + const char *cRL = strstr(option,"RL"); // Reconstructed Trigger Track in TreeT //const char *cRP = strstr(option,"RP"); // Reconstructed Particle in TreeP - + TBranch * branch = 0x0; // Creating Branches for Hits @@ -481,6 +548,19 @@ void AliMUONData::MakeBranch(Option_t* option) branch = TreeT()->Branch(branchname,&fRecTracks,kBufferSize); Info("MakeBranch","Making Branch %s for tracks \n",branchname); } +// trigger tracks + if (TreeT() && cRL ) { + if (fRecTriggerTracks == 0x0) fRecTriggerTracks = new TClonesArray("AliMUONTriggerTrack",100); + fNrectriggertracks = 0; + sprintf(branchname,"%sTriggerTrack",GetName()); + branch = TreeT()->GetBranch(branchname); + if (branch) { + Info("MakeBranch","Branch %s is already in tree.",GetName()); + return ; + } + branch = TreeT()->Branch(branchname,&fRecTriggerTracks,kBufferSize); + Info("MakeBranch","Making Branch %s for trigger tracks \n",branchname); + } } //____________________________________________________________________________ TClonesArray* AliMUONData::RawClusters(Int_t DetectionPlane) @@ -492,6 +572,24 @@ TClonesArray* AliMUONData::RawClusters(Int_t DetectionPlane) return NULL; } //____________________________________________________________________________ +TClonesArray* AliMUONData::LocalTrigger() +{ + // Getting Local Trigger + if (fLocalTrigger) + return ( (TClonesArray*) fLocalTrigger ); + else + return NULL; +} +//____________________________________________________________________________ +TClonesArray* AliMUONData::GlobalTrigger() +{ + // Getting Global Trigger + if (fGlobalTrigger) + return ( (TClonesArray*) fGlobalTrigger ); + else + return NULL; +} +//____________________________________________________________________________ void AliMUONData::ResetDigits() { // @@ -536,6 +634,13 @@ void AliMUONData::ResetRecTracks() fNrectracks = 0; if (fRecTracks) fRecTracks->Clear(); } +//____________________________________________________________________________ +void AliMUONData::ResetRecTriggerTracks() +{ + // Reset tracks information + fNrectriggertracks = 0; + if (fRecTriggerTracks) fRecTriggerTracks->Clear(); +} //_____________________________________________________________________________ void AliMUONData::SetTreeAddress(Option_t* option) { @@ -545,6 +650,7 @@ void AliMUONData::SetTreeAddress(Option_t* option) const char *cRC = strstr(option,"RC"); // RawCluster branches in TreeR const char *cGLT = strstr(option,"GLT"); // Global and Local Trigger branches in TreeR const char *cRT = strstr(option,"RT"); // Reconstructed Track in TreeT + const char *cRL = strstr(option,"RL"); // Reconstructed Trigger Track in TreeT //const char *cRP = strstr(option,"RP"); // Reconstructed Particle in TreeP // Set branch address for the Hits, Digits, RawClusters, GlobalTrigger and LocalTrigger Tree. @@ -648,6 +754,20 @@ void AliMUONData::SetTreeAddress(Option_t* option) if (branch) branch->SetAddress(&fRecTracks); else Warning("SetTreeAddress","(%s) Failed for Tracks. Can not find branch in tree.",GetName()); } +// trigger tracks + if ( TreeT() ) { + if (fRecTriggerTracks == 0x0 && cRL) { + fRecTriggerTracks = new TClonesArray("AliMUONTriggerTrack",100); + } + + } + if ( TreeT() && fRecTriggerTracks && cRL ) { + sprintf(branchname,"%sTriggerTrack",GetName()); + branch = TreeT()->GetBranch(branchname); + if (branch) branch->SetAddress(&fRecTriggerTracks); + else Warning("SetTreeAddress","(%s) Failed for Trigger Tracks. Can not find branch in tree.",GetName()); + } + } //_____________________________________________________________________________ diff --git a/MUON/AliMUONData.h b/MUON/AliMUONData.h index b41863cd6eb..f9be2a6d802 100644 --- a/MUON/AliMUONData.h +++ b/MUON/AliMUONData.h @@ -22,6 +22,7 @@ class TTree; class AliMUONConstants; class AliMUONRawCluster; class AliMUONTrack; +class AliMUONTriggerTrack; class AliMUONDigit; class AliMUONHit; class AliMUONLocalTrigger; @@ -64,13 +65,17 @@ class AliMUONData : public TNamed { virtual void AddRawCluster(Int_t id, const AliMUONRawCluster& clust); virtual void AddRecTrack(const AliMUONTrack& track); + virtual void AddRecTriggerTrack(const AliMUONTriggerTrack& triggertrack); TClonesArray* Hits() {return fHits;} TClonesArray* Digits(Int_t DetectionPlane); - TClonesArray* LocalTrigger() {return fLocalTrigger;} - TClonesArray* GlobalTrigger() {return fGlobalTrigger;} +// TClonesArray* LocalTrigger() {return fLocalTrigger;} +// TClonesArray* GlobalTrigger() {return fGlobalTrigger;} + TClonesArray* LocalTrigger(); + TClonesArray* GlobalTrigger(); TClonesArray* RawClusters(Int_t DetectionPlane); TClonesArray* RecTracks() {return fRecTracks;} + TClonesArray* RecTriggerTracks() {return fRecTriggerTracks;} void GetTrack(Int_t it) {fLoader->TreeH()->GetEvent(it);} Int_t GetNtracks() {return (Int_t) fLoader->TreeH()->GetEntries();} @@ -79,9 +84,12 @@ class AliMUONData : public TNamed { void GetTrigger() {fLoader->TreeR()->GetEvent(0);} Int_t GetSplitLevel() {return fSplitLevel;} void GetRecTracks() {fLoader->TreeT()->GetEvent(0);} + void GetRecTriggerTracks() {fLoader->TreeT()->GetEvent(0);} Bool_t IsRawClusterBranchesInTree(); Bool_t IsTriggerBranchesInTree(); + Bool_t IsTrackBranchesInTree(); + Bool_t IsTriggerTrackBranchesInTree(); virtual AliLoader* GetLoader() {return fLoader;} virtual void SetLoader(AliLoader * loader) {fLoader=loader;} @@ -98,6 +106,7 @@ class AliMUONData : public TNamed { virtual void ResetTrigger(); virtual void ResetRawClusters(); virtual void ResetRecTracks(); + virtual void ResetRecTriggerTracks(); TTree* TreeH() {return fLoader->TreeH(); } TTree* TreeD() {return fLoader->TreeD(); } @@ -118,6 +127,7 @@ class AliMUONData : public TNamed { TClonesArray* fGlobalTrigger; // List of Global Trigger One event in TreeR/GlobalTriggerBranch TClonesArray* fLocalTrigger; // List of Local Trigger, One event in TreeR/LocalTriggerBranch TClonesArray* fRecTracks; // pointer to array of reconstructed tracks + TClonesArray* fRecTriggerTracks; // pointer to array of reconstructed trigger tracks Int_t fNhits; //! Number of Hits Int_t* fNdigits;//! Number of Digits @@ -125,6 +135,7 @@ class AliMUONData : public TNamed { Int_t fNglobaltrigger;//! Number of Global trigger Int_t fNlocaltrigger;//! Number of Local trigger Int_t fNrectracks; //! Number of reconstructed tracks + Int_t fNrectriggertracks; //! Number of reconstructed tracks Int_t fSplitLevel; // Splitting of branches 0 no spitting (root files are smaller) 1 splitting (larger output files) ClassDef(AliMUONData,1) diff --git a/MUON/AliMUONEventReconstructor.cxx b/MUON/AliMUONEventReconstructor.cxx index 8b2d47a9707..b09d59f7614 100644 --- a/MUON/AliMUONEventReconstructor.cxx +++ b/MUON/AliMUONEventReconstructor.cxx @@ -41,7 +41,11 @@ #include "AliMUONChamber.h" #include "AliMUONEventReconstructor.h" #include "AliMUONHitForRec.h" +#include "AliMUONTriggerTrack.h" +//#include "AliMUONTriggerConstants.h" +#include "AliMUONTriggerCircuit.h" #include "AliMUONRawCluster.h" +#include "AliMUONLocalTrigger.h" #include "AliMUONRecoEvent.h" #include "AliMUONSegment.h" #include "AliMUONTrack.h" @@ -99,6 +103,9 @@ AliMUONEventReconstructor::AliMUONEventReconstructor(void) // Is 10 the right size ???? fRecTracksPtr = new TClonesArray("AliMUONTrack", 10); fNRecTracks = 0; // really needed or GetEntriesFast sufficient ???? +// trigger tracks + fRecTriggerTracksPtr = new TClonesArray("AliMUONTriggerTrack", 10); + fNRecTriggerTracks = 0; // really needed or GetEntriesFast sufficient ???? // Memory allocation for the TClonesArray of hits on reconstructed tracks // Is 100 the right size ???? fRecTrackHitsPtr = new TClonesArray("AliMUONTrack", 100); @@ -355,6 +362,15 @@ void AliMUONEventReconstructor::EventReconstruct(void) return; } +//__________________________________________________________________________ +void AliMUONEventReconstructor::EventReconstructTrigger(void) +{ + // To reconstruct one event + if (fPrintLevel >= 1) cout << "enter EventReconstructTrigger" << endl; + MakeTriggerTracks(); + return; +} + //__________________________________________________________________________ void AliMUONEventReconstructor::ResetHitsForRec(void) { @@ -391,6 +407,17 @@ void AliMUONEventReconstructor::ResetTracks(void) return; } + //__________________________________________________________________________ +void AliMUONEventReconstructor::ResetTriggerTracks(void) +{ + // To reset the TClonesArray of reconstructed trigger tracks + if (fRecTriggerTracksPtr) fRecTriggerTracksPtr->Delete(); + // Delete in order that the Track destructors are called, + // hence the space for the TClonesArray of pointers to TrackHit's is freed + fNRecTriggerTracks = 0; + return; +} + //__________________________________________________________________________ void AliMUONEventReconstructor::ResetTrackHits(void) { @@ -936,6 +963,76 @@ void AliMUONEventReconstructor::MakeTracks(void) return; } + //__________________________________________________________________________ +void AliMUONEventReconstructor::MakeTriggerTracks(void) +{ + // To make the trigger tracks from Local Trigger + if (fPrintLevel >= 1) cout << "enter MakeTriggerTracks" << endl; + ResetTriggerTracks(); + + Int_t nTRentries; + TClonesArray *localTrigger; + AliMUONLocalTrigger *locTrg; + AliMUONTriggerCircuit *circuit; + AliMUONTriggerTrack *recTriggerTrack; + + TString evfoldname = AliConfig::fgkDefaultEventFolderName;//to be interfaced properly + AliRunLoader* rl = AliRunLoader::GetRunLoader(evfoldname); + if (rl == 0x0) + { + Error("MakeTriggerTracks", + "Can not find Run Loader in Event Folder named %s.", + evfoldname.Data()); + return; + } + AliLoader* gime = rl->GetLoader("MUONLoader"); + if (gime == 0x0) + { + Error("MakeTriggerTracks","Can not get MUON Loader from Run Loader."); + return; + } + TTree* TR = gime->TreeR(); + + // Loading AliRun master + rl->LoadgAlice(); + gAlice = rl->GetAliRun(); + + // Loading MUON subsystem + AliMUON * pMUON = (AliMUON *) gAlice->GetDetector("MUON"); + + nTRentries = Int_t(TR->GetEntries()); + if (nTRentries != 1) { + cout << "Error in AliMUONEventReconstructor::MakeTriggerTracks" + << endl; + cout << "nTRentries = " << nTRentries << " not equal to 1" << endl; + exit(0); + } + gime->TreeR()->GetEvent(0); // only one entry + + pMUON->GetMUONData()->SetTreeAddress("GLT"); + pMUON->GetMUONData()->GetTrigger(); + + localTrigger = pMUON->GetMUONData()->LocalTrigger(); + Int_t nlocals = (Int_t) (localTrigger->GetEntries()); + Float_t z11 = ( &(pMUON->Chamber(10)) )->Z(); + Float_t z21 = ( &(pMUON->Chamber(12)) )->Z(); + + for (Int_t i=0; iUncheckedAt(i); + circuit = &(pMUON->TriggerCircuit(locTrg->LoCircuit())); + Float_t y11 = circuit->GetY11Pos(locTrg->LoStripX()); + Float_t y21 = circuit->GetY21Pos(locTrg->LoStripX()); + Float_t x11 = circuit->GetX11Pos(locTrg->LoStripY()); + Float_t thetax = TMath::ATan2( x11 , z11 ); + Float_t thetay = TMath::ATan2( (y21-y11) , (z21-z11) ); + + recTriggerTrack = new ((*fRecTriggerTracksPtr)[fNRecTriggerTracks]) + AliMUONTriggerTrack(x11,y11,thetax,thetay,this); + fNRecTriggerTracks++; + } // end of loop on Local Trigger + return; +} + //__________________________________________________________________________ Int_t AliMUONEventReconstructor::MakeTrackCandidatesWithTwoSegments(AliMUONSegment *BegSegment) { @@ -1470,6 +1567,31 @@ void AliMUONEventReconstructor::EventDump(void) return; } + +//__________________________________________________________________________ +void AliMUONEventReconstructor::EventDumpTrigger(void) +{ + // Dump reconstructed trigger event + // and the particle parameters + + AliMUONTriggerTrack *triggertrack; + Int_t trackIndex; + + if (fPrintLevel >= 1) cout << "****** enter EventDumpTrigger ******" << endl; + if (fPrintLevel >= 1) { + cout << " Number of Reconstructed tracks :" << fNRecTriggerTracks << endl; + } + // Loop over reconstructed tracks + for (trackIndex = 0; trackIndex < fNRecTriggerTracks; trackIndex++) { + triggertrack = (AliMUONTriggerTrack*) ((*fRecTriggerTracksPtr)[trackIndex]); + printf(" trigger track number %i x11=%f y11=%f thetax=%f thetay=%f \n", + trackIndex, + triggertrack->GetX11(),triggertrack->GetY11(), + triggertrack->GetThetax(),triggertrack->GetThetay()); + } +} + +//__________________________________________________________________________ void AliMUONEventReconstructor::FillEvent() { // Create a new AliMUONRecoEvent, fill its track list, then add it as a diff --git a/MUON/AliMUONEventReconstructor.h b/MUON/AliMUONEventReconstructor.h index edca1e41e52..9a3aeec5fb9 100644 --- a/MUON/AliMUONEventReconstructor.h +++ b/MUON/AliMUONEventReconstructor.h @@ -74,6 +74,11 @@ class AliMUONEventReconstructor : public TObject { void SetNRecTracks(Int_t NRecTracks) {fNRecTracks = NRecTracks;} TClonesArray* GetRecTracksPtr(void) const {return fRecTracksPtr;} // Array + // Reconstructed trigger tracks + Int_t GetNRecTriggerTracks() const {return fNRecTriggerTracks;} // Number + void SetNRecTriggerTracks(Int_t NRecTriggerTracks) {fNRecTriggerTracks = NRecTriggerTracks;} + TClonesArray* GetRecTriggerTracksPtr(void) const {return fRecTriggerTracksPtr;} // Array + // Hits on reconstructed tracks Int_t GetNRecTrackHits() const {return fNRecTrackHits;} // Number void SetNRecTrackHits(Int_t NRecTrackHits) {fNRecTrackHits = NRecTrackHits;} @@ -83,7 +88,9 @@ class AliMUONEventReconstructor : public TObject { Double_t GetImpactParamFromBendingMomentum(Double_t BendingMomentum) const; Double_t GetBendingMomentumFromImpactParam(Double_t ImpactParam) const; void EventReconstruct(void); + void EventReconstructTrigger(void); void EventDump(void); // dump reconstructed event + void EventDumpTrigger(void); // dump reconstructed trigger event void FillEvent(); // fill and write tree of reconstructed events void SetTrackMethod(Int_t TrackMethod) {fTrackMethod = TrackMethod;} //AZ Int_t GetTrackMethod(void) const {return fTrackMethod;} //AZ @@ -139,6 +146,10 @@ class AliMUONEventReconstructor : public TObject { TClonesArray *fRecTracksPtr; // pointer to array of reconstructed tracks Int_t fNRecTracks; // number of reconstructed tracks + // Reconstructed trigger tracks + TClonesArray *fRecTriggerTracksPtr; // pointer to array of reconstructed trigger tracks + Int_t fNRecTriggerTracks; // number of reconstructed trigger tracks + // Track hits on reconstructed tracks TClonesArray *fRecTrackHitsPtr; // pointer to array of hits on reconstructed tracks Int_t fNRecTrackHits; // number of hits on reconstructed tracks @@ -161,8 +172,10 @@ class AliMUONEventReconstructor : public TObject { void ResetSegments(void); void MakeSegmentsPerStation(Int_t Station); void MakeTracks(void); + void MakeTriggerTracks(void); void ResetTrackHits(void); void ResetTracks(void); + void ResetTriggerTracks(void); Int_t MakeTrackCandidatesWithTwoSegments(AliMUONSegment *BegSegment); Int_t MakeTrackCandidatesWithOneSegmentAndOnePoint(AliMUONSegment *BegSegment); void MakeTrackCandidates(void); diff --git a/MUON/MUONTracker.C b/MUON/MUONTracker.C index d2240a55c01..ef59599e4af 100644 --- a/MUON/MUONTracker.C +++ b/MUON/MUONTracker.C @@ -57,10 +57,11 @@ void MUONTracker (Text_t *FileName = "galice.root", Int_t FirstEvent = 0, Int_t AliLoader * MUONLoader = RunLoader->GetLoader("MUONLoader"); // MUONLoader->LoadHits("READ"); MUONLoader->LoadRecPoints("READ"); + MUONLoader->LoadTracks("UPDATE"); AliMUONData * muondata = MUON->GetMUONData(); muondata->SetLoader(MUONLoader); - Int_t ievent, nevents; + Int_t nevents; nevents = RunLoader->GetNumberOfEvents(); AliMUONEventReconstructor *Reco = new AliMUONEventReconstructor(); @@ -69,39 +70,50 @@ void MUONTracker (Text_t *FileName = "galice.root", Int_t FirstEvent = 0, Int_t // with respect to the default ones // Reco->SetMaxSigma2Distance(100.0); // Reco->SetPrintLevel(20); - Reco->SetPrintLevel(1); + Reco->SetPrintLevel(0); // Reco->SetBendingResolution(0.0); // Reco->SetNonBendingResolution(0.0); cout << "AliMUONEventReconstructor: actual parameters" << endl; - Reco->Dump(); +// Reco->Dump(); // gObjectTable->Print(); + MUONLoader->LoadRecPoints("READ"); + if (LastEvent>nevents) LastEvent=nevents; // Loop over events for (Int_t event = FirstEvent; event < LastEvent; event++) { - //MUONLoader->LoadHits("READ"); - MUONLoader->LoadRecPoints("READ"); - cout << "Event: " << event << endl; - RunLoader->GetEvent(event); - muondata->SetTreeAddress("RC"); - if (MUONLoader->TreeT() == 0x0) MUONLoader->MakeTree("T"); - muondata->MakeBranch("RT"); - muondata->SetTreeAddress("RT"); - Reco->EventReconstruct(); - // Dump current event - Reco->EventDump(); + //MUONLoader->LoadHits("READ"); + cout << "Event: " << event << endl; + RunLoader->GetEvent(event); +// Test if trigger track has already been done before + if (MUONLoader->TreeT() == 0x0) { + MUONLoader->MakeTracksContainer(); + } else { + if (muondata->IsTrackBranchesInTree()){ // Test if track has already been done before + if (event==FirstEvent) MUONLoader->UnloadTracks(); + MUONLoader->MakeTracksContainer(); // Redoing Tracking + Info("TrackContainer","Recreating TrackContainer and deleting previous ones"); + } + } - // Duplicating rectrack data in muondata for output - for(Int_t i=0; iGetNRecTracks(); i++) { - AliMUONTrack * track = (AliMUONTrack*) Reco->GetRecTracksPtr()->At(i); - muondata->AddRecTrack(*track); - //printf(">>> TEST TEST event %d Number of hits in the track %d is %d \n",event,i,track->GetNTrackHits()); - } + muondata->MakeBranch("RT"); + muondata->SetTreeAddress("D,RT"); + Reco->EventReconstruct(); + // Dump current event + // Reco->EventDump(); + + // Duplicating rectrack data in muondata for output + for(Int_t i=0; iGetNRecTracks(); i++) { + AliMUONTrack * track = (AliMUONTrack*) Reco->GetRecTracksPtr()->At(i); + muondata->AddRecTrack(*track); + //printf(">>> TEST TEST event %d Number of hits in the track %d is %d \n",event,i,track->GetNTrackHits()); + } muondata->Fill("RT"); MUONLoader->WriteTracks("OVERWRITE"); muondata->ResetRecTracks(); - //MUONLoader->UnloadHits(); - MUONLoader->UnloadRecPoints(); + muondata->ResetRawClusters(); } // Event loop + MUONLoader->UnloadRecPoints(); + MUONLoader->UnloadTracks(); } -- 2.43.0