/* $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 "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)
-AliTPCRecoParam * AliTPCReconstructor::fgkRecoParam =0; // reconstruction parameters
-Int_t AliTPCReconstructor::fgStreamLevel = 0; // stream (debug) level
-
+Int_t AliTPCReconstructor::fgStreamLevel = 1; // stream (debug) level
+AliTPCAltroEmulator * AliTPCReconstructor::fAltroEmulator=0; // ALTRO emulator
AliTPCReconstructor::AliTPCReconstructor():
AliReconstructor(),
//
// default constructor
//
- if (!fgkRecoParam) {
- AliError("The Reconstruction parameters nonitialized - Used default one");
- fgkRecoParam = AliTPCRecoParam::GetHighFluxParam();
- }
-
+ //
+ //
+ AliTPCcalibDB * calib = AliTPCcalibDB::Instance();
+ const AliMagF * field = (AliMagF*)TGeoGlobalMagField::Instance()->GetField();
+ calib->SetExBField(field);
AliTPCParam* param = GetTPCParam();
if (!param) {
AliWarning("Loading default TPC parameters !");
fClusterer = new AliTPCclustererMI(param);
}
-//_____________________________________________________________________________
-AliTPCReconstructor::~AliTPCReconstructor()
+AliTPCReconstructor::AliTPCReconstructor(const AliTPCReconstructor& /*rec*/):
+AliReconstructor(),
+fClusterer(NULL)
{
- if (fgkRecoParam) delete fgkRecoParam;
- if (fClusterer) delete fClusterer;
+ //
+ // Dummy copu constructor
+ //
+}
+
+AliTPCReconstructor& AliTPCReconstructor::operator=(const AliTPCReconstructor&){
+ //
+ // dummy operator
+ //
+ return *this;
}
//_____________________________________________________________________________
-void AliTPCReconstructor::Reconstruct(AliRunLoader* runLoader) const
+AliTPCReconstructor::~AliTPCReconstructor()
{
-// reconstruct clusters
-
- AliLoader* loader = runLoader->GetLoader("TPCLoader");
- if (!loader) {
- Error("Reconstruct", "TPC loader not found");
- return;
- }
- loader->LoadRecPoints("recreate");
- loader->LoadDigits("read");
-
- 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;
- }
-
- fClusterer->SetInput(treeDigits);
- fClusterer->SetOutput(treeClusters);
- fClusterer->Digits2Clusters();
-
- loader->WriteRecPoints("OVERWRITE");
- }
-
- loader->UnloadRecPoints();
- loader->UnloadDigits();
+ if (fClusterer) delete fClusterer;
}
//_____________________________________________________________________________
fClusterer->Digits2Clusters();
}
-//_____________________________________________________________________________
-void AliTPCReconstructor::Reconstruct(AliRunLoader* runLoader,
- AliRawReader* rawReader) const
-{
-// reconstruct clusters from raw data
-
- AliLoader* loader = runLoader->GetLoader("TPCLoader");
- if (!loader) {
- Error("Reconstruct", "TPC loader not found");
- return;
- }
- loader->LoadRecPoints("recreate");
-
- TString option = GetOption();
- if (option.Contains("OldRCUFormat"))
- fClusterer->SetOldRCUFormat(kTRUE);
-
- Int_t iEvent = 0;
- while (rawReader->NextEvent()) {
- runLoader->GetEvent(iEvent++);
-
- TTree* treeClusters = loader->TreeR();
- if (!treeClusters) {
- loader->MakeTree("R");
- treeClusters = loader->TreeR();
- }
-
- fClusterer->SetOutput(treeClusters);
- fClusterer->Digits2Clusters(rawReader);
-
- loader->WriteRecPoints("OVERWRITE");
- }
-
- loader->UnloadRecPoints();
-}
-
//_____________________________________________________________________________
void AliTPCReconstructor::Reconstruct(AliRawReader* rawReader, TTree* clustersTree) const {
// single event local reconstruction
// of TPC data starting from raw data
- TString option = GetOption();
- if (option.Contains("OldRCUFormat"))
- fClusterer->SetOldRCUFormat(kTRUE);
fClusterer->SetOutput(clustersTree);
fClusterer->Digits2Clusters(rawReader);
}
//_____________________________________________________________________________
-AliTracker* AliTPCReconstructor::CreateTracker(AliRunLoader* /* runLoader */) const
+AliTracker* AliTPCReconstructor::CreateTracker() const
{
// create a TPC tracker
param = new AliTPCParamSR;
}
param->ReadGeoMatrices();
- return new AliTPCtrackerMI(param);
+
+ 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);
+*/
}
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;
+}