X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TRD%2FAliTRDReconstructor.cxx;h=be74c987d9fba057a51a84b2f2e099e42d1770c2;hb=1f2bb57ebf57a62b46c78d2ec07b163e78df5a86;hp=a57f0a2648835b9ec629e07cd8a12399d2d56169;hpb=3fe61b77b0725fc463861c23806489b33518cb76;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/AliTRDReconstructor.cxx b/TRD/AliTRDReconstructor.cxx index a57f0a26488..be74c987d9f 100644 --- a/TRD/AliTRDReconstructor.cxx +++ b/TRD/AliTRDReconstructor.cxx @@ -1,17 +1,17 @@ /************************************************************************** - * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * - * * - * Author: The ALICE Off-line Project. * - * Contributors are mentioned in the code where appropriate. * - * * - * Permission to use, copy, modify and distribute this software and its * - * documentation strictly for non-commercial purposes is hereby granted * - * without fee, provided that the above copyright notice appears in all * - * copies and that both the copyright notice and this permission notice * - * appear in the supporting documentation. The authors make no claims * - * about the suitability of this software for any purpose. It is * - * provided "as is" without express or implied warranty. * - **************************************************************************/ +* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * +* * +* Author: The ALICE Off-line Project. * +* Contributors are mentioned in the code where appropriate. * +* * +* Permission to use, copy, modify and distribute this software and its * +* documentation strictly for non-commercial purposes is hereby granted * +* without fee, provided that the above copyright notice appears in all * +* copies and that both the copyright notice and this permission notice * +* appear in the supporting documentation. The authors make no claims * +* about the suitability of this software for any purpose. It is * +* provided "as is" without express or implied warranty. * +**************************************************************************/ /* $Id$ */ @@ -21,80 +21,177 @@ // // /////////////////////////////////////////////////////////////////////////////// -#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 "AliTRDgtuTrack.h" #include "AliTRDrawData.h" #include "AliTRDdigitsManager.h" +#include "AliTRDtrackerV1.h" + +#define SETFLG(n,f) ((n) |= f) +#define CLRFLG(n,f) ((n) &= ~f) ClassImp(AliTRDReconstructor) -Bool_t AliTRDReconstructor::fgkSeedingOn = kFALSE; -Int_t AliTRDReconstructor::fgStreamLevel = 0; // Stream (debug) level +TClonesArray *AliTRDReconstructor::fgClusters = 0x0; +TClonesArray *AliTRDReconstructor::fgTracklets = 0x0; +Char_t* 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 " + ,"Process Online Tracklets" +}; +Char_t* 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] +}; +Char_t* AliTRDReconstructor::fgTaskNames[kNtasks] = { + "RawReader" + ,"Clusterizer" + ,"Tracker" + ,"PID" +}; +Char_t* AliTRDReconstructor::fgTaskFlags[kNtasks] = { + "rr" + ,"cl" + ,"tr" + ,"pd" +}; //_____________________________________________________________________________ -void AliTRDReconstructor::ConvertDigits(AliRawReader *rawReader - , TTree *digitsTree) const +AliTRDReconstructor::AliTRDReconstructor() + :AliReconstructor() + ,fSteerParam(0) +{ + // setting default "ON" steering parameters + // owner of debug streamers + SETFLG(fSteerParam, kOwner); + // write clusters [cw] + 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) { // - // Convert raw data digits into digit objects in a root tree + // Copy constructor // - AliInfo("Convert raw data digits into digit objects [RawReader -> Digit TTree]"); - - AliTRDrawData rawData; - rawReader->Reset(); - rawReader->Select("TRD"); - AliTRDdigitsManager *manager = rawData.Raw2Digits(rawReader); - manager->MakeBranch(digitsTree); - manager->WriteDigits(); - delete manager; - + 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); } //_____________________________________________________________________________ -void AliTRDReconstructor::Reconstruct(AliRunLoader *runLoader - , AliRawReader *rawReader) const +AliTRDReconstructor::~AliTRDReconstructor() { // - // Reconstruct clusters + // Destructor // - AliInfo("Reconstruct TRD clusters from RAW data [RunLoader, RawReader]"); - - AliLoader *loader = runLoader->GetLoader("TRDLoader"); - loader->LoadRecPoints("recreate"); - - runLoader->CdGAFile(); - Int_t nEvents = runLoader->GetNumberOfEvents(); - - rawReader->Reset(); - rawReader->Select("TRD"); - - for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) { + 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]; + } +} - if (!rawReader->NextEvent()) break; - // New (fast) cluster finder - AliTRDclusterizer clusterer("clusterer","TRD clusterizer"); - clusterer.Open(runLoader->GetFileName(),iEvent); - clusterer.Raw2ClustersChamber(rawReader); +//_____________________________________________________________________________ +void AliTRDReconstructor::Init(){ + // + // Init Options + // + SetOption(GetOption()); + Options(fSteerParam, fStreamLevel); +} - clusterer.WriteClusters(-1); +//_____________________________________________________________________________ +void AliTRDReconstructor::ConvertDigits(AliRawReader *rawReader + , TTree *digitsTree) const +{ + // + // Convert raw data digits into digit objects in a root tree + // - } + //AliInfo("Convert raw data digits into digit objects [RawReader -> Digit TTree]"); - loader->UnloadRecPoints(); + AliTRDrawData rawData; + rawReader->Reset(); + rawReader->Select("TRD"); + rawData.OpenOutput(); + AliTRDdigitsManager *manager = rawData.Raw2Digits(rawReader); + manager->MakeBranch(digitsTree); + manager->WriteDigits(); + delete manager; } @@ -106,17 +203,29 @@ void AliTRDReconstructor::Reconstruct(AliRawReader *rawReader // Reconstruct clusters // - AliInfo("Reconstruct TRD clusters from RAW data [RawReader -> Cluster TTree]"); + //AliInfo("Reconstruct TRD clusters from RAW data [RawReader -> Cluster TTree]"); + rawReader->Reset(); rawReader->Select("TRD"); // New (fast) cluster finder - AliTRDclusterizer clusterer("clusterer","TRD clusterizer"); + AliTRDclusterizer clusterer(fgTaskNames[kClusterizer], fgTaskNames[kClusterizer]); + clusterer.SetReconstructor(this); clusterer.OpenOutput(clusterTree); - clusterer.SetAddLabels(kFALSE); + clusterer.OpenTrackletOutput(); + clusterer.SetUseLabels(kFALSE); clusterer.Raw2ClustersChamber(rawReader); + + if(IsWritingClusters()) return; + + // take over ownership of clusters + fgClusters = clusterer.RecPoints(); + clusterer.SetClustersOwner(kFALSE); + // take over ownership of online tracklets + fgTracklets = clusterer.TrackletsArray(); + clusterer.SetTrackletsOwner(kFALSE); } //_____________________________________________________________________________ @@ -126,58 +235,44 @@ void AliTRDReconstructor::Reconstruct(TTree *digitsTree // // Reconstruct clusters // - AliInfo("Reconstruct TRD clusters from Digits [Digit TTree -> Cluster TTree]"); - AliTRDclusterizer clusterer("clusterer","TRD clusterizer"); + //AliInfo("Reconstruct TRD clusters from Digits [Digit TTree -> Cluster TTree]"); + + AliTRDclusterizer clusterer(fgTaskNames[kClusterizer], fgTaskNames[kClusterizer]); + clusterer.SetReconstructor(this); clusterer.OpenOutput(clusterTree); clusterer.ReadDigits(digitsTree); clusterer.MakeClusters(); -} - -//_____________________________________________________________________________ -void AliTRDReconstructor::Reconstruct(AliRunLoader *runLoader) const -{ - // - // Reconstruct clusters - // - - AliInfo("Reconstruct TRD clusters [AliRunLoader]"); - AliLoader *loader = runLoader->GetLoader("TRDLoader"); - loader->LoadRecPoints("recreate"); - - runLoader->CdGAFile(); - Int_t nEvents = runLoader->GetNumberOfEvents(); - - for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) { - AliTRDclusterizer clusterer("clusterer","TRD clusterizer"); - clusterer.Open(runLoader->GetFileName(),iEvent); - clusterer.ReadDigits(); - clusterer.MakeClusters(); - clusterer.WriteClusters(-1); - } + if(IsWritingClusters()) return; - loader->UnloadRecPoints(); + // take over ownership of clusters + fgClusters = clusterer.RecPoints(); + clusterer.SetClustersOwner(kFALSE); + // take over ownership of online tracklets + fgTracklets = clusterer.TrackletsArray(); + clusterer.SetTrackletsOwner(kFALSE); } //_____________________________________________________________________________ -AliTracker *AliTRDReconstructor::CreateTracker(AliRunLoader *runLoader) const +AliTracker *AliTRDReconstructor::CreateTracker() const { // // Create a TRD tracker // - runLoader->CdGAFile(); - - return new AliTRDtracker(gFile); + //return new AliTRDtracker(NULL); + AliTRDtrackerV1 *tracker = new AliTRDtrackerV1(); + tracker->SetReconstructor(this); + return tracker; } //_____________________________________________________________________________ -void AliTRDReconstructor::FillESD(AliRunLoader* /*runLoader*/ - , AliRawReader* /*rawReader*/ - , AliESDEvent* /*esd*/) const +void AliTRDReconstructor::FillESD(TTree* /*digitsTree*/ + , TTree* /*clusterTree*/ + , AliESDEvent* /*esd*/) const { // // Fill ESD @@ -185,34 +280,85 @@ void AliTRDReconstructor::FillESD(AliRunLoader* /*runLoader*/ } + //_____________________________________________________________________________ -void AliTRDReconstructor::FillESD(AliRawReader* /*rawReader*/ - , TTree* /*clusterTree*/ - , AliESDEvent* /*esd*/) const +void AliTRDReconstructor::SetOption(Option_t *opt) { // - // Fill ESD + // 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; + 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::FillESD(AliRunLoader* /*runLoader*/ - , AliESDEvent* /*esd*/) const +void AliTRDReconstructor::Options(UInt_t steer, UChar_t *stream) { // - // Fill ESD + // Print the options // + for(Int_t iopt=0; iopt>iopt)&1)?" : ON":" : OFF"):"")); + } + AliDebugGeneral("AliTRDReconstructor", 1, " Debug Streaming"); + for(Int_t it=0; it