// //
///////////////////////////////////////////////////////////////////////////////
-#include <TFile.h>
#include <TObjString.h>
#include <TObjArray.h>
-#include <TClonesArray.h>
+#include <TTreeStream.h>
+#include <TDirectory.h>
-#include "AliRunLoader.h"
#include "AliRawReader.h"
-#include "AliLog.h"
-#include "AliESDTrdTrack.h"
-#include "AliESDEvent.h"
#include "AliTRDReconstructor.h"
#include "AliTRDclusterizer.h"
-#include "AliTRDtracker.h"
-#include "AliTRDpidESD.h"
#include "AliTRDrawData.h"
#include "AliTRDdigitsManager.h"
#include "AliTRDtrackerV1.h"
-#include "AliTRDrecoParam.h"
-
-#include "TTreeStream.h"
#define SETFLG(n,f) ((n) |= f)
#define CLRFLG(n,f) ((n) &= ~f)
ClassImp(AliTRDReconstructor)
TClonesArray *AliTRDReconstructor::fgClusters = 0x0;
+TClonesArray *AliTRDReconstructor::fgTracklets = 0x0;
Char_t* AliTRDReconstructor::fgSteerNames[kNsteer] = {
"DigitsConversion "
,"Tail Cancellation "
,"Tracklet Improve "
,"HLT Mode "
,"Cosmic Reconstruction "
+ ,"Process Online Tracklets"
};
Char_t* AliTRDReconstructor::fgSteerFlags[kNsteer] = {
"dc"// digits conversion [false]
,"ti"// improve tracklets in stand alone track finder [true]
,"hlt"// HLT reconstruction [false]
,"cos"// Cosmic Reconstruction [false]
+ ,"tp"// also use online tracklets for reconstruction [false]
};
Char_t* AliTRDReconstructor::fgTaskNames[kNtasks] = {
"RawReader"
:AliReconstructor(r)
,fSteerParam(r.fSteerParam)
{
+ //
+ // Copy constructor
+ //
+
memcpy(fStreamLevel, r.fStreamLevel, kNtasks*sizeof(UChar_t));
memcpy(fTCParams, r.fTCParams, 8*sizeof(Double_t));
memcpy(fDebugStream, r.fDebugStream, sizeof(TTreeSRedirector *) *kNtasks);
//_____________________________________________________________________________
AliTRDReconstructor::~AliTRDReconstructor()
{
+ //
+ // Destructor
+ //
+
if(fgClusters) {
fgClusters->Delete(); delete fgClusters;
}
+ if(fgTracklets) {
+ fgTracklets->Delete(); delete fgTracklets;
+ }
if(fSteerParam&kOwner){
for(Int_t itask = 0; itask < kNtasks; itask++)
if(fDebugStream[itask]) delete fDebugStream[itask];
//
// Convert raw data digits into digit objects in a root tree
//
- AliInfo("Feature not available for the moment."); return;
- AliInfo("Convert raw data digits into digit objects [RawReader -> Digit TTree]");
+ //AliInfo("Convert raw data digits into digit objects [RawReader -> Digit TTree]");
AliTRDrawData rawData;
rawReader->Reset();
rawReader->Select("TRD");
+ rawData.OpenOutput();
AliTRDdigitsManager *manager = rawData.Raw2Digits(rawReader);
manager->MakeBranch(digitsTree);
manager->WriteDigits();
AliTRDclusterizer clusterer(fgTaskNames[kClusterizer], fgTaskNames[kClusterizer]);
clusterer.SetReconstructor(this);
clusterer.OpenOutput(clusterTree);
+ clusterer.OpenTrackletOutput();
clusterer.SetUseLabels(kFALSE);
clusterer.Raw2ClustersChamber(rawReader);
// take over ownership of clusters
fgClusters = clusterer.RecPoints();
clusterer.SetClustersOwner(kFALSE);
+
+ // take over ownership of online tracklets
+ fgTracklets = clusterer.TrackletsArray();
+ clusterer.SetTrackletsOwner(kFALSE);
}
//_____________________________________________________________________________
// take over ownership of clusters
fgClusters = clusterer.RecPoints();
clusterer.SetClustersOwner(kFALSE);
+
+ // take over ownership of online tracklets
+ fgTracklets = clusterer.TrackletsArray();
+ clusterer.SetTrackletsOwner(kFALSE);
}
//_____________________________________________________________________________
//_____________________________________________________________________________
void AliTRDReconstructor::SetOption(Option_t *opt)
{
-// Read option string into the steer param.
-//
+ //
+ // Read option string into the steer param.
+ //
AliReconstructor::SetOption(opt);
TString s(opt);
TObjArray *opar = s.Tokenize(",");
for(Int_t ipar=0; ipar<opar->GetEntriesFast(); ipar++){
- Bool_t PROCESSED = kFALSE;
+ Bool_t processed = kFALSE;
TString sopt(((TObjString*)(*opar)[ipar])->String());
for(Int_t iopt=0; iopt<kNsteer; iopt++){
if(!sopt.Contains(fgSteerFlags[iopt])) continue;
SETFLG(fSteerParam, BIT(iopt));
if(sopt.Contains("!")) CLRFLG(fSteerParam, BIT(iopt));
- PROCESSED = kTRUE;
+ processed = kTRUE;
break;
}
// extra rules
if(sopt.Contains("gs") && !sopt.Contains("!")){
- CLRFLG(fSteerParam, kLUT); PROCESSED = kTRUE;
+ CLRFLG(fSteerParam, kLUT); processed = kTRUE;
}
- if(PROCESSED) continue;
+ if(processed) continue;
if(sopt.Contains("sl")){
TObjArray *stl = sopt.Tokenize("_");
Int_t level = levelstring.Atoi();
// Set the stream Level
- PROCESSED = kFALSE;
+ processed = kFALSE;
for(Int_t it=0; it<kNtasks; it++){
if(taskstr.CompareTo(fgTaskFlags[it]) != 0) continue;
SetStreamLevel(level, ETRDReconstructorTask(it));
- PROCESSED = kTRUE;
+ processed = kTRUE;
}
}
- if(PROCESSED) continue;
+ if(processed) continue;
AliWarning(Form("Unknown option flag %s.", sopt.Data()));
}
//_____________________________________________________________________________
void AliTRDReconstructor::Options(UInt_t steer, UChar_t *stream)
{
+ //
+ // Print the options
+ //
+
for(Int_t iopt=0; iopt<kNsteer; iopt++){
AliDebugGeneral("AliTRDReconstructor", 1, Form(" %s[%s]%s", fgSteerNames[iopt], fgSteerFlags[iopt], steer ?(((steer>>iopt)&1)?" : ON":" : OFF"):""));
}