X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=TOF%2FAliTOFReconstructor.cxx;h=adb9832697302533abeec640bd5448b47cb5a2f0;hb=1d9e38e2e9166632b03667a21cf8ae1b353a49a2;hp=e1a9c7d182f77d23d514a03a0ea32f5068d31ead;hpb=0f49d1bc59ec61cbd485594595197e10982501c3;p=u%2Fmrichter%2FAliRoot.git diff --git a/TOF/AliTOFReconstructor.cxx b/TOF/AliTOFReconstructor.cxx index e1a9c7d182f..adb98326973 100644 --- a/TOF/AliTOFReconstructor.cxx +++ b/TOF/AliTOFReconstructor.cxx @@ -13,7 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* $Id$ */ +/* $Id: AliTOFReconstructor.cxx 59948 2012-12-12 11:05:59Z fnoferin $ */ /////////////////////////////////////////////////////////////////////////////// // // @@ -21,121 +21,357 @@ // // /////////////////////////////////////////////////////////////////////////////// -#include "TFile.h" +#include +#include "TObjArray.h" +#include "TString.h" #include "AliLog.h" +#include "AliESDEvent.h" +#include "AliESDpid.h" #include "AliRawReader.h" -#include "AliRunLoader.h" +#include "AliTOFHeader.h" #include "AliTOFClusterFinder.h" -#include "AliTOFGeometry.h" -#include "AliTOFGeometryV5.h" +#include "AliTOFClusterFinderV1.h" +#include "AliTOFcalib.h" #include "AliTOFtrackerMI.h" #include "AliTOFtracker.h" +#include "AliTOFtrackerV1.h" +#include "AliTOFtrackerV2.h" +#include "AliTOFT0maker.h" #include "AliTOFReconstructor.h" +#include "AliTOFTriggerMask.h" +#include "AliTOFTrigger.h" class TTree; -class AliESD; - -extern TDirectory *gDirectory; -extern TFile *gFile; - ClassImp(AliTOFReconstructor) -//_____________________________________________________________________________ - void AliTOFReconstructor::Reconstruct(AliRunLoader* runLoader) const + //____________________________________________________________________ +AliTOFReconstructor::AliTOFReconstructor() : + AliReconstructor(), + fTOFcalib(0), + /*fTOFT0maker(0),*/ + fNumberOfTofClusters(0), + fNumberOfTofTrgPads(0), + fClusterFinder(0), + fClusterFinderV1(0) { -// reconstruct clusters from digits +// +// ctor +// + + //Retrieving the TOF calibration info + fTOFcalib = new AliTOFcalib(); + fTOFcalib->Init(); + fClusterFinder = new AliTOFClusterFinder(fTOFcalib); + fClusterFinderV1 = new AliTOFClusterFinderV1(fTOFcalib); - AliTOFClusterFinder tofClus(runLoader); - tofClus.Load(); - for (Int_t iEvent = 0; iEvent < runLoader->GetNumberOfEvents(); iEvent++) - { - tofClus.Digits2RecPoints(iEvent); - } - tofClus.UnLoad(); + TString optionString = GetOption(); + if (optionString.Contains("DecoderV0")) { + fClusterFinder->SetDecoderVersion(0); + fClusterFinderV1->SetDecoderVersion(0); + } + else if (optionString.Contains("DecoderV1")) { + fClusterFinder->SetDecoderVersion(1); + fClusterFinderV1->SetDecoderVersion(1); + } + else { + fClusterFinder->SetDecoderVersion(2); + fClusterFinderV1->SetDecoderVersion(2); + } + + + +#if 0 + fTOFcalib->CreateCalObjects(); + + if(!fTOFcalib->ReadParOnlineDelayFromCDB("TOF/Calib",-1)) {AliFatal("Exiting, no CDB object found!!!");exit(0);} + if(!fTOFcalib->ReadParOnlineStatusFromCDB("TOF/Calib",-1)) {AliFatal("Exiting, no CDB object found!!!");exit(0);} + + if(!fTOFcalib->ReadParOfflineFromCDB("TOF/Calib",-1)) {AliFatal("Exiting, no CDB object found!!!");exit(0);} + + + if(!fTOFcalib->ReadDeltaBCOffsetFromCDB("TOF/Calib",-1)) {AliFatal("Exiting, no CDB object found!!!");exit(0);} + if(!fTOFcalib->ReadCTPLatencyFromCDB("TOF/Calib",-1)) {AliFatal("Exiting, no CDB object found!!!");exit(0);} + if(!fTOFcalib->ReadT0FillFromCDB("TOF/Calib",-1)) {AliFatal("Exiting, no CDB object found!!!");exit(0);} + if(!fTOFcalib->ReadRunParamsFromCDB("TOF/Calib",-1)) {AliFatal("Exiting, no CDB object found!!!");exit(0);} +#endif } //_____________________________________________________________________________ -void AliTOFReconstructor::Reconstruct(AliRunLoader* runLoader, - AliRawReader *rawReader) const +AliTOFReconstructor::~AliTOFReconstructor() { -// reconstruct clusters from Raw Data - - AliTOFClusterFinder tofClus(runLoader); - tofClus.LoadClusters(); - Int_t iEvent = 0; - while (rawReader->NextEvent()) { - tofClus.Digits2RecPoints(iEvent,rawReader); - //tofClus.Raw2Digits(iEvent,rawReader); // temporary solution - iEvent++; - } - tofClus.UnLoadClusters(); +// +// dtor +// + + delete fTOFcalib; + //delete fTOFT0maker; + fNumberOfTofClusters = 0; + fNumberOfTofTrgPads = 0; + + delete fClusterFinder; + delete fClusterFinderV1; } //_____________________________________________________________________________ void AliTOFReconstructor::Reconstruct(AliRawReader *rawReader, TTree *clustersTree) const { -// reconstruct clusters from Raw Data + // + // reconstruct clusters from Raw Data + // + + TString optionString = GetOption(); + + // use V1 cluster finder if selected + if (optionString.Contains("ClusterizerV1")) { + /* + AliTOFClusterFinderV1 tofClus(fTOFcalib); + + // decoder version option + if (optionString.Contains("DecoderV0")) { + tofClus.SetDecoderVersion(0); + } + else if (optionString.Contains("DecoderV1")) { + tofClus.SetDecoderVersion(1); + } + else { + tofClus.SetDecoderVersion(2); + } + + tofClus.Digits2RecPoints(rawReader, clustersTree); + */ + + fClusterFinderV1->Digits2RecPoints(rawReader, clustersTree); + } + else { + /* + AliTOFClusterFinder tofClus(fTOFcalib); + + // decoder version option + if (optionString.Contains("DecoderV0")) { + tofClus.SetDecoderVersion(0); + } + else if (optionString.Contains("DecoderV1")) { + tofClus.SetDecoderVersion(1); + } + else { + tofClus.SetDecoderVersion(2); + } - AliTOFClusterFinder tofClus; - tofClus.Digits2RecPoints(rawReader, clustersTree); + tofClus.Digits2RecPoints(rawReader, clustersTree); + */ + + fClusterFinder->Digits2RecPoints(rawReader, clustersTree); + } + AliTOFTrigger::PrepareTOFMapFromRaw(rawReader,13600); // 13600 +/- 400 is the value to select the richt bunch crossing (in future from OCDB) } //_____________________________________________________________________________ -AliTracker* AliTOFReconstructor::CreateTracker(AliRunLoader* runLoader) const +void AliTOFReconstructor::Reconstruct(TTree *digitsTree, + TTree *clustersTree) const { -// create a TOF tracker + // + // reconstruct clusters from digits + // -// AliTOFGeometry* geom = GetTOFGeometry(runLoader); - AliTOFGeometry* geom = new AliTOFGeometryV5(); - if (!geom) return NULL; - // Double_t parPID[] = {130., 5.}; - Double_t parPID[] = {80., 5.}; - TString selectedTracker = GetOption(); - // use MI tracker if selected - if (selectedTracker.Contains("MI")) return new AliTOFtrackerMI(geom,parPID); + AliDebug(2,Form("Global Event loop mode: Creating Recpoints from Digits Tree")); - return new AliTOFtracker(geom, parPID); -} + TString optionString = GetOption(); + // use V1 cluster finder if selected + if (optionString.Contains("ClusterizerV1")) { + /* + AliTOFClusterFinderV1 tofClus(fTOFcalib); + + // decoder version option + if (optionString.Contains("DecoderV0")) { + tofClus.SetDecoderVersion(0); + } + else if (optionString.Contains("DecoderV1")) { + tofClus.SetDecoderVersion(1); + } + else { + tofClus.SetDecoderVersion(2); + } + + tofClus.Digits2RecPoints(digitsTree, clustersTree); + */ + fClusterFinderV1->Digits2RecPoints(digitsTree, clustersTree); + } + else { + /* + AliTOFClusterFinder tofClus(fTOFcalib); + + // decoder version option + if (optionString.Contains("DecoderV0")) { + tofClus.SetDecoderVersion(0); + } + else if (optionString.Contains("DecoderV1")) { + tofClus.SetDecoderVersion(1); + } + else { + tofClus.SetDecoderVersion(2); + } + + tofClus.Digits2RecPoints(digitsTree, clustersTree); + */ + + fClusterFinder->Digits2RecPoints(digitsTree, clustersTree); + AliTOFTrigger::PrepareTOFMapFromDigit(digitsTree); + } + +} //_____________________________________________________________________________ -void AliTOFReconstructor::FillESD(AliRunLoader* /*runLoader*/, - AliESD* /*esd*/) const + void AliTOFReconstructor::ConvertDigits(AliRawReader* reader, TTree* digitsTree) const { -// nothing to be done +// reconstruct clusters from digits + + AliDebug(2,Form("Global Event loop mode: Converting Raw Data to a Digits Tree")); + + TString optionString = GetOption(); + // use V1 cluster finder if selected + if (optionString.Contains("ClusterizerV1")) { + /* + AliTOFClusterFinderV1 tofClus(fTOFcalib); + + // decoder version option + if (optionString.Contains("DecoderV0")) { + tofClus.SetDecoderVersion(0); + } + else if (optionString.Contains("DecoderV1")) { + tofClus.SetDecoderVersion(1); + } + else { + tofClus.SetDecoderVersion(2); + } + + tofClus.Raw2Digits(reader, digitsTree); + */ + + fClusterFinderV1->Digits2RecPoints(reader, digitsTree); + } + else { + /* + AliTOFClusterFinder tofClus(fTOFcalib); + + // decoder version option + if (optionString.Contains("DecoderV0")) { + tofClus.SetDecoderVersion(0); + } + else if (optionString.Contains("DecoderV1")) { + tofClus.SetDecoderVersion(1); + } + else { + tofClus.SetDecoderVersion(2); + } + + tofClus.Raw2Digits(reader, digitsTree); + */ + + fClusterFinder->Digits2RecPoints(reader, digitsTree); + + } } //_____________________________________________________________________________ -AliTOFGeometry* AliTOFReconstructor::GetTOFGeometry(AliRunLoader* runLoader) const +AliTracker* AliTOFReconstructor::CreateTracker() const { -// get the TOF parameters - AliTOFGeometry *tofGeom; + // + // create a TOF tracker using + // TOF Reco Param collected by STEER + // - runLoader->CdGAFile(); - TDirectory *savedir=gDirectory; - TFile *in=(TFile*)gFile; - if (!in->IsOpen()) { - AliWarning("Geometry file is not open default TOF geometry will be used"); - tofGeom = new AliTOFGeometryV5(); + TString selectedTracker = GetOption(); + + AliTracker *tracker; + // use MI tracker if selected + if (selectedTracker.Contains("TrackerMI")) { + tracker = new AliTOFtrackerMI(); + } + // use V1 tracker if selected + else if (selectedTracker.Contains("TrackerV1")) { + tracker = new AliTOFtrackerV1(); + } + else if (selectedTracker.Contains("TrackerV2")) { + tracker = new AliTOFtrackerV2(); } else { - in->cd(); - tofGeom = (AliTOFGeometry*) in->Get("TOFgeometry"); + tracker = new AliTOFtracker(); } + return tracker; + +} + +//_____________________________________________________________________________ +void AliTOFReconstructor::FillEventTimeWithTOF(AliESDEvent *event, AliESDpid *esdPID) +{ + // + // Fill AliESDEvent::fTOFHeader variable + // It contains the event_time estiamted by the TOF combinatorial algorithm + // - savedir->cd(); - if (!tofGeom) { - AliError("no TOF geometry available"); - return NULL; + // Set here F. Noferini + AliTOFTriggerMask *mapTrigger = AliTOFTrigger::GetTOFTriggerMap(); + + + TString optionString = GetOption(); + if (optionString.Contains("ClusterizerV1")) { + fNumberOfTofClusters=fClusterFinderV1->GetNumberOfTOFclusters(); + fNumberOfTofTrgPads=fClusterFinderV1->GetNumberOfTOFtrgPads(); + AliInfo(Form(" Number of TOF cluster readout = %d ",fNumberOfTofClusters)); + AliInfo(Form(" Number of TOF cluster readout in trigger window = %d ",fNumberOfTofTrgPads)); + } else { + fNumberOfTofClusters=fClusterFinder->GetNumberOfTOFclusters(); + fNumberOfTofTrgPads=fClusterFinder->GetNumberOfTOFtrgPads(); + AliInfo(Form(" Number of TOF cluster readout = %d ",fNumberOfTofClusters)); + AliInfo(Form(" Number of TOF cluster readout in trigger window = %d ",fNumberOfTofTrgPads)); } - return tofGeom; + + if (!GetRecoParam()) AliFatal("cannot get TOF RECO params"); + + Float_t tofResolution = GetRecoParam()->GetTimeResolution();// TOF time resolution in ps + AliTOFT0maker *tofT0maker = new AliTOFT0maker(esdPID); + tofT0maker->SetTimeResolution(tofResolution); + tofT0maker->ComputeT0TOF(event); + tofT0maker->WriteInESD(event); + tofT0maker->~AliTOFT0maker(); + delete tofT0maker; + + esdPID->SetTOFResponse(event,(AliESDpid::EStartTimeType_t)GetRecoParam()->GetStartTimeType()); + + + event->GetTOFHeader()->SetNumberOfTOFclusters(fNumberOfTofClusters); + event->GetTOFHeader()->SetNumberOfTOFtrgPads(fNumberOfTofTrgPads); + event->GetTOFHeader()->SetTriggerMask(mapTrigger); + AliInfo(Form(" Number of readout cluster in trigger window = %d ; number of trgPads from Trigger map = %d", + event->GetTOFHeader()->GetNumberOfTOFtrgPads(), + event->GetTOFHeader()->GetNumberOfTOFmaxipad())); + + fClusterFinderV1->ResetDigits(); + fClusterFinderV1->ResetRecpoint(); + fClusterFinder->ResetRecpoint(); + fClusterFinderV1->Clear(); + fClusterFinder->Clear(); + +} + +//_____________________________________________________________________________ +void +AliTOFReconstructor::FillESD(TTree *, TTree *, AliESDEvent * /*esdEvent*/) const +{ + // + // correct Texp + // + // + + // fTOFcalib->CalibrateTExp(esdEvent); }