#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;
//
// Destructor
//
-
+ AliTRDcalibDB* calib = AliTRDcalibDB::Instance();
+ if (calib) calib->Invalidate();
+ //
if(fClusterizer){
delete fClusterizer;
fClusterizer = NULL;
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];
}
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);
}
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);
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();
}
//_____________________________________________________________________________
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 -----
}
}
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);
}
//_____________________________________________________________________________
{
// Build/ Retrieve online tracklets array
- if (trkltype != 0) {
+ if (trkltype && strlen(trkltype) > 0) {
if(fgTracklets && (TClass::GetClass(trkltype) != fgTracklets->GetClass())){
fgTracklets->Delete();
delete fgTracklets;
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);
}