/* $Id$ */
+//--------------------------------------------------------------------
+// Options for the TPC Reconstruction in rec.C
+//
+// 4 options can be set to change the input for TPC reconstruction
+// which overwrites the usage of fUseHLTClusters of the AliTPCRecoParam
+//
+// 1) useRAW - use RAW, if not present -> do nothing
+// 2) useRAWorHLT - use RAW, if not present -> use HLT clusters
+// 3) useHLT - use HLT clusters, if not present -> do nothing
+// 4) useHLTorRAW - use HLT clusters, if not present -> use RAW
+//
+// -> The current default is useHLTorRAW
+//--------------------------------------------------------------------
+
///////////////////////////////////////////////////////////////////////////////
// //
// class for TPC reconstruction //
#include "AliTPCReconstructor.h"
#include "AliRunLoader.h"
#include "AliRun.h"
+#include "AliRawReader.h"
#include "AliTPCclustererMI.h"
#include "AliTPCtrackerMI.h"
-#include "AliTPCpidESD.h"
-
+//#include "AliTPCpidESD.h"
+#include "AliTPCParam.h"
+#include "AliTPCParamSR.h"
+#include "AliTPCcalibDB.h"
+#include "AliTracker.h"
+#include "AliMagF.h"
ClassImp(AliTPCReconstructor)
-Double_t AliTPCReconstructor::fgCtgRange = 1.05;
+
+Int_t AliTPCReconstructor::fgStreamLevel = 1; // stream (debug) level
+AliTPCAltroEmulator * AliTPCReconstructor::fAltroEmulator=0; // ALTRO emulator
+
+AliTPCReconstructor::AliTPCReconstructor():
+AliReconstructor(),
+fClusterer(NULL)
+{
+ //
+ // default constructor
+ //
+ //
+ //
+ AliTPCcalibDB * calib = AliTPCcalibDB::Instance();
+ const AliMagF * field = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
+ calib->SetExBField(field);
+ AliTPCParam* param = GetTPCParam();
+ if (!param) {
+ AliWarning("Loading default TPC parameters !");
+ param = new AliTPCParamSR;
+ }
+ fClusterer = new AliTPCclustererMI(param);
+}
+
+AliTPCReconstructor::AliTPCReconstructor(const AliTPCReconstructor& /*rec*/):
+AliReconstructor(),
+fClusterer(NULL)
+{
+ //
+ // Dummy copu constructor
+ //
+}
+
+AliTPCReconstructor& AliTPCReconstructor::operator=(const AliTPCReconstructor&){
+ //
+ // dummy operator
+ //
+ return *this;
+}
//_____________________________________________________________________________
-void AliTPCReconstructor::Reconstruct(AliRunLoader* runLoader) const
+AliTPCReconstructor::~AliTPCReconstructor()
{
-// reconstruct clusters
+ if (fClusterer) delete fClusterer;
+}
- AliLoader* loader = runLoader->GetLoader("TPCLoader");
- if (!loader) {
- Error("Reconstruct", "TPC loader not found");
- return;
- }
- loader->LoadRecPoints("recreate");
- loader->LoadDigits("read");
-
- AliTPCParam* param = GetTPCParam(runLoader);
- if (!param) return;
- AliTPCclustererMI clusterer(param);
- Int_t nEvents = runLoader->GetNumberOfEvents();
-
- for (Int_t iEvent = 0; iEvent < nEvents; iEvent++) {
- runLoader->GetEvent(iEvent);
-
- TTree* treeClusters = loader->TreeR();
- if (!treeClusters) {
- loader->MakeTree("R");
- treeClusters = loader->TreeR();
- }
- TTree* treeDigits = loader->TreeD();
- if (!treeDigits) {
- Error("Reconstruct", "Can't get digits tree !");
- return;
- }
-
- clusterer.SetInput(treeDigits);
- clusterer.SetOutput(treeClusters);
- clusterer.Digits2Clusters();
-
- loader->WriteRecPoints("OVERWRITE");
- }
+//_____________________________________________________________________________
+void AliTPCReconstructor::Reconstruct(TTree* digitsTree, TTree* clustersTree) const {
+ // single event local reconstruction
+ // of TPC data
+ fClusterer->SetInput(digitsTree);
+ fClusterer->SetOutput(clustersTree);
+ fClusterer->Digits2Clusters();
+}
- loader->UnloadRecPoints();
- loader->UnloadDigits();
+//_____________________________________________________________________________
+void AliTPCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const {
+ // single event local reconstruction
+ // of TPC data starting from raw data
+
+ fClusterer->SetOutput(clustersTree);
+ fClusterer->Digits2Clusters(rawReader);
}
//_____________________________________________________________________________
-AliTracker* AliTPCReconstructor::CreateTracker(AliRunLoader* runLoader) const
+AliTracker* AliTPCReconstructor::CreateTracker() const
{
// create a TPC tracker
- AliTPCParam* param = GetTPCParam(runLoader);
- if (!param) return NULL;
- return new AliTPCtrackerMI(param);
+ AliTPCParam* param = GetTPCParam();
+ if (!param) {
+ AliWarning("Loading default TPC parameters !");
+ param = new AliTPCParamSR;
+ }
+ param->ReadGeoMatrices();
+
+ AliTPCtrackerMI* tracker = new AliTPCtrackerMI(param);
+
+ ParseOptions(tracker);
+
+ return tracker;
}
//_____________________________________________________________________________
-void AliTPCReconstructor::FillESD(AliRunLoader* /*runLoader*/,
- AliESD* esd) const
+void AliTPCReconstructor::FillESD(TTree */*digitsTree*/, TTree */*clustersTree*/,
+ AliESDEvent* /*esd*/) const
{
// make PID
-
- Double_t parTPC[] = {47., 0.10, 10.};
+/* Now done in AliESDpid
+ Double_t parTPC[] = {50., 0.07, 5.}; // MIP nnormalized to channel 50 -MI
AliTPCpidESD tpcPID(parTPC);
tpcPID.MakePID(esd);
+*/
}
//_____________________________________________________________________________
-AliTPCParam* AliTPCReconstructor::GetTPCParam(AliRunLoader* runLoader) const
+AliTPCParam* AliTPCReconstructor::GetTPCParam() const
{
// get the TPC parameters
- TDirectory* saveDir = gDirectory;
- runLoader->CdGAFile();
-
- AliTPCParam* param = (AliTPCParam*) gDirectory->Get("75x40_100x60_150x60");
- if (!param) Error("GetTPCParam", "no TPC parameters found");
+ AliTPCParam* param = AliTPCcalibDB::Instance()->GetParameters();
- saveDir->cd();
return param;
}
+
+
+//_____________________________________________________________________________
+void AliTPCReconstructor::ParseOptions( AliTPCtrackerMI* tracker ) const
+{
+// parse options from rec.C and set in clusterer and tracker
+
+ TString option = GetOption();
+
+ Int_t useHLTClusters = 3;
+
+ if (option.Contains("use")) {
+
+ AliInfo(Form("Overide TPC RecoParam with option %s",option.Data()));
+
+ if (!option.CompareTo("useRAW"))
+ useHLTClusters = 1;
+ if (!option.CompareTo("useRAWorHLT"))
+ useHLTClusters = 2;
+ if (!option.CompareTo("useHLT"))
+ useHLTClusters = 3;
+ if (!option.CompareTo("useHLTorRAW"))
+ useHLTClusters = 4;
+ }
+ else {
+ const AliTPCRecoParam* param = GetRecoParam();
+ useHLTClusters = param->GetUseHLTClusters();
+ }
+
+ AliInfo(Form("Usage of HLT clusters in TPC reconstruction : %d", useHLTClusters));
+
+ fClusterer->SetUseHLTClusters(useHLTClusters);
+ tracker->SetUseHLTClusters(useHLTClusters);
+
+ return;
+}