]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TRD/AliTRDReconstructor.cxx
Always call fDigitsManager->BuildIndexes in AliTRDclusterizer::MakeClusters, reset...
[u/mrichter/AliRoot.git] / TRD / AliTRDReconstructor.cxx
index dc45ca9366f7ea1cb0c2c98122b2fa2c31dd4901..083e7a8c42db45a8667720a86ae5cbf318d7fd8f 100644 (file)
 #include "AliESDTrdTrigger.h"
 #include "AliTRDtrackletWord.h"
 #include "AliTRDtrackletMCM.h"
+#include "AliTRDonlineTrackMatching.h"
+#include "AliTRDcalibDB.h"
 
 #define SETFLG(n,f) ((n) |= f)
 #define CLRFLG(n,f) ((n) &= ~f)
 
 ClassImp(AliTRDReconstructor)
 
+Int_t    AliTRDReconstructor::fgStreamLevel     = 1;        // stream (debug) level
+
+
 AliESDTrdTrigger AliTRDReconstructor::fgTriggerFlags;
+AliTRDonlineTrackMatching AliTRDReconstructor::fgOnlineTrackMatcher;
 TClonesArray *AliTRDReconstructor::fgClusters = NULL;
 TClonesArray *AliTRDReconstructor::fgTracklets = NULL;
 TClonesArray *AliTRDReconstructor::fgTracks = NULL;
@@ -117,7 +123,9 @@ AliTRDReconstructor::~AliTRDReconstructor()
   //
   // Destructor
   //
-
+  AliTRDcalibDB* calib = AliTRDcalibDB::Instance();
+  if (calib) calib->Invalidate();
+  //
   if(fClusterizer){
     delete fClusterizer;
     fClusterizer = NULL;
@@ -137,7 +145,7 @@ AliTRDReconstructor::~AliTRDReconstructor()
     delete fgTracks;
     fgTracks = NULL;
   }
-  if(fSteerParam&kOwner){
+  if((fSteerParam&kOwner)||  AliTRDReconstructor::GetStreamLevel()>0){
     for(Int_t itask = 0; itask < AliTRDrecoParam::kTRDreconstructionTasks; itask++)
       if(fDebugStream[itask]) delete fDebugStream[itask];
   }
@@ -162,7 +170,7 @@ void AliTRDReconstructor::Init(){
   if(IsDebugStreaming()){
     for(Int_t task = 0; task < AliTRDrecoParam::kTRDreconstructionTasks; task++){
       TDirectory *savedir = gDirectory;
-      fDebugStream[task] = new TTreeSRedirector(Form("TRD.Debug%s.root", fgTaskNames[task]));
+      fDebugStream[task] = new TTreeSRedirector(Form("TRD.Debug%s.root", fgTaskNames[task]),"recreate");
       savedir->cd();
       SETFLG(fSteerParam, kOwner);
     }
@@ -185,8 +193,6 @@ void AliTRDReconstructor::ConvertDigits(AliRawReader *rawReader
   ResetContainers();
 
   AliTRDrawData rawData;
-  rawData.SetTracklets(GetTracklets("AliTRDtrackletMCM")); // link allocated online tracklets
-  rawData.SetTracks(GetTracks());                          // link allocated online tracks
 
   AliTRDdigitsManager *manager = rawData.Raw2Digits(rawReader);
   manager->MakeBranch(digitsTree);
@@ -237,18 +243,18 @@ void AliTRDReconstructor::Reconstruct(TTree *digitsTree
     return;
   }
 
-  if(fgClusters){
-    AliDebug(1, Form("Removing %5d clusters @ %p", fgClusters->GetEntriesFast(), (void*)fgClusters));
-    fgClusters->Clear();
-  }
-  AliTRDclusterizer clusterizer(fgTaskNames[AliTRDrecoParam::kClusterizer], fgTaskNames[AliTRDrecoParam::kClusterizer]);
-  clusterizer.SetReconstructor(this);
-  clusterizer.SetUseLabels(kTRUE);
-  clusterizer.SetStoreRawSignals(kTRUE);
-  clusterizer.OpenOutput(clusterTree);
-  clusterizer.ReadDigits(digitsTree);
-  clusterizer.MakeClusters();
-  fgNTimeBins = clusterizer.GetNTimeBins();
+  ResetContainers();
+  //  AliTRDclusterizer clusterizer(fgTaskNames[AliTRDrecoParam::kClusterizer], fgTaskNames[AliTRDrecoParam::kClusterizer]);
+  fClusterizer->SetReconstructor(this);
+  fClusterizer->SetUseLabels(kTRUE);
+  fClusterizer->SetStoreRawSignals(kTRUE);
+  fClusterizer->OpenOutput(clusterTree);
+  fClusterizer->ResetRecPoints();
+  fClusterizer->ReadDigits(digitsTree);
+  fClusterizer->ReadTracklets();
+  fClusterizer->ReadTracks();
+  fClusterizer->MakeClusters();
+  fgNTimeBins = fClusterizer->GetNTimeBins();
 }
 
 //_____________________________________________________________________________
@@ -284,7 +290,7 @@ void AliTRDReconstructor::FillESD(TTree* /*digitsTree*/
   while (AliTRDtrackletBase* tracklet = (AliTRDtrackletBase*) trackletIter()) {
     Int_t label = -2; // mark raw tracklets with label -2
     if (AliTRDtrackletMCM *trklMCM = dynamic_cast<AliTRDtrackletMCM*> (tracklet)) label = trklMCM->GetLabel();
-    esd->AddTrdTracklet(new AliESDTrdTracklet(tracklet->GetTrackletWord(), tracklet->GetHCId(), label));
+    esd->AddTrdTracklet(tracklet->GetTrackletWord(), tracklet->GetHCId(), label);
   }
 
   // ----- filling GTU tracks -----
@@ -315,6 +321,11 @@ void AliTRDReconstructor::FillESD(TTree* /*digitsTree*/
     }
   }
   esd->SetTrdTrigger(&fgTriggerFlags);
+
+  // ----- matching GTU tracks to global tracks -----
+  AliDebug(1, Form("TRD track matching with %i ESD, %i TRD tracks",
+                  esd->GetNumberOfTracks(), esd->GetNumberOfTrdTracks()));
+  fgOnlineTrackMatcher.ProcessEvent(esd);
 }
 
 //_____________________________________________________________________________
@@ -389,7 +400,7 @@ TClonesArray* AliTRDReconstructor::GetTracklets(const char *trkltype)
 {
 // Build/ Retrieve online tracklets array
 
-  if (trkltype != 0) {
+  if (trkltype && strlen(trkltype) > 0) {
     if(fgTracklets && (TClass::GetClass(trkltype) != fgTracklets->GetClass())){
       fgTracklets->Delete();
       delete fgTracklets;
@@ -432,4 +443,6 @@ void AliTRDReconstructor::ResetContainers() const
     AliDebug(1, Form("Removing %3d online tracks @ %p", fgTracks->GetEntriesFast(), (void*)fgTracks));
     fgTracks->Clear();
   }
+  for (Int_t iSector = 0; iSector < 18; iSector++)
+    fgTriggerFlags.SetFlags(iSector, 0);
 }