X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDReconstructor.cxx;h=8638476688165261dbf228a7d0808e7f00daa6ac;hb=7fdb2519b5c46634a48500f3702063714f9277d9;hp=d54a2fa01adfbaa9fec95bb0a2bac479762a95c3;hpb=ad5dd6ec225393bb610318f3c81f205bc0657b4b;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDReconstructor.cxx b/TRD/AliTRDReconstructor.cxx index d54a2fa01ad..86384766881 100644 --- a/TRD/AliTRDReconstructor.cxx +++ b/TRD/AliTRDReconstructor.cxx @@ -21,88 +21,62 @@ // // /////////////////////////////////////////////////////////////////////////////// -#include #include #include -#include +#include +#include -#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 "AliTRDrawStreamBase.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] = { +TClonesArray *AliTRDReconstructor::fgClusters = NULL; +TClonesArray *AliTRDReconstructor::fgTracklets = NULL; +Char_t const * AliTRDReconstructor::fgSteerNames[kNsteer] = { "DigitsConversion " - ,"Tail Cancellation " - ,"Clusters LUT " - ,"Clusters GAUSS " - ,"Clusters Sharing " - ,"NN PID " - ,"8 dEdx slices in ESD " ,"Write Clusters " ,"Write Online Tracklets " - ,"Drift Gas Argon " ,"Stand Alone Tracking " - ,"Vertex Constrain " - ,"Tracklet Improve " - ,"HLT Mode " - ,"Cosmic Reconstruction " + ,"HLT Mode " ,"Process Online Tracklets" + ,"Debug Streaming " }; -Char_t* AliTRDReconstructor::fgSteerFlags[kNsteer] = { +Char_t const * AliTRDReconstructor::fgSteerFlags[kNsteer] = { "dc"// digits conversion [false] - ,"tc"// apply tail cancellation [true] - ,"lut"// look-up-table for cluster shape in the r-phi direction - ,"gs"// gauss cluster shape in the r-phi direction - ,"sh"// cluster sharing between tracks - ,"nn"// PID method in reconstruction (NN) [true] - ,"8s"// 8 dEdx slices in ESD [true] ,"cw"// write clusters [true] ,"tw"// write online tracklets [false] - ,"ar"// drift gas [false] - do not update the number of exponentials in the TC ! ,"sa"// track seeding (stand alone tracking) [true] - ,"vc"// vertex constrain on stand alone track finder [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] + ,"deb"// Write debug stream [false] }; -Char_t* AliTRDReconstructor::fgTaskNames[kNtasks] = { - "RawReader" - ,"Clusterizer" +Char_t const * AliTRDReconstructor::fgTaskNames[AliTRDrecoParam::kTRDreconstructionTasks] = { + "Clusterizer" ,"Tracker" ,"PID" }; -Char_t* AliTRDReconstructor::fgTaskFlags[kNtasks] = { - "rr" - ,"cl" +Char_t const * AliTRDReconstructor::fgTaskFlags[AliTRDrecoParam::kTRDreconstructionTasks] = { + "cl" ,"tr" ,"pd" }; +Int_t AliTRDReconstructor::fgNTimeBins = -1; //_____________________________________________________________________________ AliTRDReconstructor::AliTRDReconstructor() :AliReconstructor() ,fSteerParam(0) + ,fClusterizer(NULL) { // setting default "ON" steering parameters // owner of debug streamers @@ -111,58 +85,35 @@ AliTRDReconstructor::AliTRDReconstructor() SETFLG(fSteerParam, kWriteClusters); // track seeding (stand alone tracking) [sa] SETFLG(fSteerParam, kSeeding); - // PID method in reconstruction (NN) [nn] - SETFLG(fSteerParam, kSteerPID); - // number of dEdx slices in the ESD track [8s] - SETFLG(fSteerParam, kEightSlices); - // vertex constrain for stand alone track finder - SETFLG(fSteerParam, kVertexConstrained); - // improve tracklets for stand alone track finder - SETFLG(fSteerParam, kImproveTracklet); - // use look up table for cluster r-phi position - SETFLG(fSteerParam, kLUT); - // use tail cancellation - SETFLG(fSteerParam, kTC); - - memset(fStreamLevel, 0, kNtasks*sizeof(UChar_t)); - memset(fDebugStream, 0, sizeof(TTreeSRedirector *) * kNtasks); - // Xe tail cancellation parameters - fTCParams[0] = 1.156; // r1 - fTCParams[1] = 0.130; // r2 - fTCParams[2] = 0.114; // c1 - fTCParams[3] = 0.624; // c2 - // Ar tail cancellation parameters - fTCParams[4] = 6.; // r1 - fTCParams[5] = 0.62; // r2 - fTCParams[6] = 0.0087;// c1 - fTCParams[7] = 0.07; // c2 -} -//_____________________________________________________________________________ -AliTRDReconstructor::AliTRDReconstructor(const AliTRDReconstructor &r) - :AliReconstructor(r) - ,fSteerParam(r.fSteerParam) -{ - memcpy(fStreamLevel, r.fStreamLevel, kNtasks*sizeof(UChar_t)); - memcpy(fTCParams, r.fTCParams, 8*sizeof(Double_t)); - memcpy(fDebugStream, r.fDebugStream, sizeof(TTreeSRedirector *) *kNtasks); - // ownership of debug streamers is not taken - CLRFLG(fSteerParam, kOwner); + memset(fDebugStream, 0, sizeof(TTreeSRedirector *) * AliTRDrecoParam::kTRDreconstructionTasks); } //_____________________________________________________________________________ AliTRDReconstructor::~AliTRDReconstructor() { + // + // Destructor + // + if(fgClusters) { - fgClusters->Delete(); delete fgClusters; + fgClusters->Delete(); + delete fgClusters; + fgClusters = NULL; } if(fgTracklets) { - fgTracklets->Delete(); delete fgTracklets; + fgTracklets->Delete(); + delete fgTracklets; + fgTracklets = NULL; } if(fSteerParam&kOwner){ - for(Int_t itask = 0; itask < kNtasks; itask++) + for(Int_t itask = 0; itask < AliTRDrecoParam::kTRDreconstructionTasks; itask++) if(fDebugStream[itask]) delete fDebugStream[itask]; } + if(fClusterizer){ + delete fClusterizer; + fClusterizer = NULL; + } } @@ -172,7 +123,22 @@ void AliTRDReconstructor::Init(){ // Init Options // SetOption(GetOption()); - Options(fSteerParam, fStreamLevel); + Options(fSteerParam); + + if(!fClusterizer){ + fClusterizer = new AliTRDclusterizer(fgTaskNames[AliTRDrecoParam::kClusterizer], fgTaskNames[AliTRDrecoParam::kClusterizer]); + fClusterizer->SetReconstructor(this); + } + + // Make Debug Streams when Debug Streaming + 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])); + savedir->cd(); + SETFLG(fSteerParam, kOwner); + } + } } //_____________________________________________________________________________ @@ -188,6 +154,8 @@ void AliTRDReconstructor::ConvertDigits(AliRawReader *rawReader AliTRDrawData rawData; rawReader->Reset(); rawReader->Select("TRD"); + rawData.OpenOutput(); + AliTRDrawStreamBase::SetRawStreamVersion(GetRecoParam()->GetRawStreamVersion()->Data()); AliTRDdigitsManager *manager = rawData.Raw2Digits(rawReader); manager->MakeBranch(digitsTree); manager->WriteDigits(); @@ -208,23 +176,31 @@ void AliTRDReconstructor::Reconstruct(AliRawReader *rawReader rawReader->Reset(); rawReader->Select("TRD"); + AliTRDrawStreamBase::SetRawStreamVersion(GetRecoParam()->GetRawStreamVersion()->Data()); + + if(!fClusterizer){ + AliFatal("Clusterizer not available!"); + return; + } + + fClusterizer->ResetRecPoints(); - // New (fast) cluster finder - AliTRDclusterizer clusterer(fgTaskNames[kClusterizer], fgTaskNames[kClusterizer]); - clusterer.SetReconstructor(this); - clusterer.OpenOutput(clusterTree); - clusterer.SetUseLabels(kFALSE); - clusterer.Raw2ClustersChamber(rawReader); + fClusterizer->OpenOutput(clusterTree); + fClusterizer->OpenTrackletOutput(); + fClusterizer->SetUseLabels(kFALSE); + fClusterizer->Raw2ClustersChamber(rawReader); if(IsWritingClusters()) return; // take over ownership of clusters - fgClusters = clusterer.RecPoints(); - clusterer.SetClustersOwner(kFALSE); + fgClusters = fClusterizer->RecPoints(); + fClusterizer->SetClustersOwner(kFALSE); // take over ownership of online tracklets - fgTracklets = clusterer.TrackletsArray(); - clusterer.SetTrackletsOwner(kFALSE); + fgTracklets = fClusterizer->TrackletsArray(); + fClusterizer->SetTrackletsOwner(kFALSE); + + fgNTimeBins = fClusterizer->GetNTimeBins(); } //_____________________________________________________________________________ @@ -236,22 +212,29 @@ void AliTRDReconstructor::Reconstruct(TTree *digitsTree // //AliInfo("Reconstruct TRD clusters from Digits [Digit TTree -> Cluster TTree]"); + + if(!fClusterizer){ + AliFatal("Clusterizer not available!"); + return; + } + + fClusterizer->ResetRecPoints(); - AliTRDclusterizer clusterer(fgTaskNames[kClusterizer], fgTaskNames[kClusterizer]); - clusterer.SetReconstructor(this); - clusterer.OpenOutput(clusterTree); - clusterer.ReadDigits(digitsTree); - clusterer.MakeClusters(); + fClusterizer->OpenOutput(clusterTree); + fClusterizer->ReadDigits(digitsTree); + fClusterizer->MakeClusters(); if(IsWritingClusters()) return; // take over ownership of clusters - fgClusters = clusterer.RecPoints(); - clusterer.SetClustersOwner(kFALSE); + fgClusters = fClusterizer->RecPoints(); + fClusterizer->SetClustersOwner(kFALSE); // take over ownership of online tracklets - fgTracklets = clusterer.TrackletsArray(); - clusterer.SetTrackletsOwner(kFALSE); + fgTracklets = fClusterizer->TrackletsArray(); + fClusterizer->SetTrackletsOwner(kFALSE); + + fgNTimeBins = fClusterizer->GetNTimeBins(); } //_____________________________________________________________________________ @@ -279,80 +262,42 @@ void AliTRDReconstructor::FillESD(TTree* /*digitsTree*/ } - //_____________________________________________________________________________ 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; iparGetEntriesFast(); ipar++){ - Bool_t PROCESSED = kFALSE; + Bool_t processed = kFALSE; TString sopt(((TObjString*)(*opar)[ipar])->String()); for(Int_t iopt=0; ioptGetEntriesFast() < 3) continue; - TString taskstr(((TObjString*)(*stl)[1])->String()); - TString levelstring(((TObjString*)(*stl)[2])->String()); - Int_t level = levelstring.Atoi(); - - // Set the stream Level - PROCESSED = kFALSE; - for(Int_t it=0; it= minLevel[task] && !fDebugStream[task]){ - TDirectory *savedir = gDirectory; - fDebugStream[task] = new TTreeSRedirector(Form("TRD.Debug%s.root", fgTaskNames[task])); - savedir->cd(); - SETFLG(fSteerParam, kOwner); - } -} -//_____________________________________________________________________________ -void AliTRDReconstructor::Options(UInt_t steer, UChar_t *stream) -{ for(Int_t iopt=0; iopt>iopt)&1)?" : ON":" : OFF"):"")); } - AliDebugGeneral("AliTRDReconstructor", 1, " Debug Streaming"); - for(Int_t it=0; it