]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TOF/AliTOFReconstructor.cxx
some coverity fixes
[u/mrichter/AliRoot.git] / TOF / AliTOFReconstructor.cxx
index 1afe6a934fe86529cbee43880d783e6e02e13fcb..adb9832697302533abeec640bd5448b47cb5a2f0 100644 (file)
@@ -13,7 +13,7 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/* $Id$ */
+/* $Id: AliTOFReconstructor.cxx 59948 2012-12-12 11:05:59Z fnoferin $ */
 
 ///////////////////////////////////////////////////////////////////////////////
 //                                                                           //
 ///////////////////////////////////////////////////////////////////////////////
 
 #include <cstdlib>
-//#include "TFile.h"
 #include "TObjArray.h"
 #include "TString.h"
 
 #include "AliLog.h"
+#include "AliESDEvent.h"
+#include "AliESDpid.h"
 #include "AliRawReader.h"
+#include "AliTOFHeader.h"
 
 #include "AliTOFClusterFinder.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 TFile;
-//class TDirectory;
-
-class AliESDEvent;
-
-//extern TDirectory *gDirectory;
-//extern TFile *gFile;
 
 ClassImp(AliTOFReconstructor)
 
  //____________________________________________________________________
-AliTOFReconstructor::AliTOFReconstructor() 
-  : AliReconstructor(),
-    fTOFcalib(0)
+AliTOFReconstructor::AliTOFReconstructor() :
+  AliReconstructor(),
+  fTOFcalib(0),
+  /*fTOFT0maker(0),*/
+  fNumberOfTofClusters(0),
+  fNumberOfTofTrgPads(0),
+  fClusterFinder(0),
+  fClusterFinderV1(0)
 {
 //
 // ctor
 //
   
   //Retrieving the TOF calibration info  
-  fTOFcalib    = new AliTOFcalib();
-  fTOFcalib->CreateCalArrays();
+  fTOFcalib = new AliTOFcalib();
+  fTOFcalib->Init();
+  fClusterFinder = new AliTOFClusterFinder(fTOFcalib);
+  fClusterFinderV1 = new AliTOFClusterFinderV1(fTOFcalib);
+
+  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);}  
-}
 
-//------------------------------------------------------------------------
-AliTOFReconstructor::AliTOFReconstructor(const AliTOFReconstructor &source)
-  : AliReconstructor(),
-    fTOFcalib(0)
-{
-//
-// copy ctor
-//
-  this->fTOFcalib=source.fTOFcalib;
-}
 
-//------------------------------------------------------------------------
-AliTOFReconstructor & AliTOFReconstructor::operator=(const AliTOFReconstructor &source)
-{
-//
-// assignment op.
-//
-  this->fTOFcalib=source.fTOFcalib;
-  return *this;
+  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
+
 }
+
 //_____________________________________________________________________________
 AliTOFReconstructor::~AliTOFReconstructor() 
 {
 //
 // 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);
+    }
 
-  static AliTOFClusterFinder tofClus(fTOFcalib);
-  tofClus.Digits2RecPoints(rawReader, clustersTree);
+    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);
+    }
+
+    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)
 }
 
 //_____________________________________________________________________________
 void AliTOFReconstructor::Reconstruct(TTree *digitsTree,
                                       TTree *clustersTree) const
 {
-// reconstruct clusters from Raw Data
+  //
+  // reconstruct clusters from digits
+  //
 
   AliDebug(2,Form("Global Event loop mode: Creating Recpoints from Digits Tree")); 
-  static AliTOFClusterFinder tofClus(fTOFcalib);
-  tofClus.Digits2RecPoints(digitsTree, clustersTree);
+
+  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);
+
+  }
 
 }
 //_____________________________________________________________________________
@@ -123,20 +233,145 @@ void AliTOFReconstructor::Reconstruct(TTree *digitsTree,
 // reconstruct clusters from digits
 
   AliDebug(2,Form("Global Event loop mode: Converting Raw Data to a Digits Tree")); 
-  AliTOFClusterFinder tofClus(fTOFcalib);
-  tofClus.Raw2Digits(reader, digitsTree);
+
+  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);
+
+  }
 
 }
 
 //_____________________________________________________________________________
 AliTracker* AliTOFReconstructor::CreateTracker() const
 {
-// create a TOF tracker
+
+  // 
+  // create a TOF tracker using 
+  // TOF Reco Param collected by STEER
+  //
 
   TString selectedTracker = GetOption();
+  AliTracker *tracker;
   // use MI tracker if selected
-  if (selectedTracker.Contains("MI")) return new AliTOFtrackerMI();
-  if (selectedTracker.Contains("V1")) return new AliTOFtrackerV1();
-  return new AliTOFtracker();
+  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 {
+    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
+  //
+
+
+  // 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));
+  }
+
+  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);
+}