// $Id$
/*
* Example macro to run the HLT tracker embedded into AliRoot reconstruction.
* The reconstruction is done from the TPC raw data. The calibration components
* have been added to the standard HLT TPC reconstruction.
*
* They take input from TPC-clusters, TPC-globalmerger and GLOBAL-esd-converter.
*
* Usage:
*
*
* Usage: aliroot -b -q -l testTPCCalibration.C'("file", "cdb", minEvent, maxEvent, option)'
*
* Examples:
* testTPCCalibration.C'("raw://run12345", minEvent, MaxEvent,"calibtime")'
* testTPCCalibration.C'("raw.root", "local://$PWD", minEvent, MaxEvent, "calibtime")'
*
* Defaults
* cdb="raw://" -> takes OCDB from GRID
* minEvent=-1 -> no lower event selection
* maxEvent=-1 -> no upper event selection
* option="task" -> loads the analysis task that calls both the drift velocity and the gain calibration
*
*
*
* To see usage examples run:
*
* aliroot -q testTPCCalibration.C
*
* The argument option should be 'calibtime' for now, as the rest of the options
* call components that are not working yet.
*
* The reconstruction is steered by the AliReconstruction object in the
* usual way.
*
* @ingroup alihlt_tpc
* @author Kalliopi.Kanaki@ift.uib.no
*/
// void testTPCCalibration(const char* filename, const char *cdbURI, int minEvent=-1, int maxEvent=-1, const char* option="task"){
//
// gSystem->Load("libANALYSIS");
// gSystem->Load("libTPCcalib");
//
// if(!gSystem->AccessPathName("galice.root")){
// cerr << "Please delete file galice.root or run at a different place." << endl;
// return;
// }
//
// if (!filename) {
// cerr << "Please specify input file name." << endl;
// return;
// }
//
// /////////////////////////////////////////////////////////////////////////
// //
// // init the HLT system in order to define the analysis chain below
// //
//
// AliHLTSystem *gHLT = AliHLTPluginBase::GetInstance();
//
// TString calibInput;
// if(calibInput.Length()>0) calibInput+=" ";
// calibInput+="GLOBAL-esd-converter TPC-clusters TPC-globalmerger";
//
// TString calibOption = option;
// if (calibOption.CompareTo("task")==0) AliHLTConfiguration calibtimeconf("TPCcalib", "TPCCalibration", calibInput.Data(), "");
// else if(calibOption.CompareTo("calibtime")==0) AliHLTConfiguration calibtimeconf("calibTime", "TPCCalibTime", calibInput.Data(), "");
// else if(calibOption.CompareTo("calibtimegain")==0) AliHLTConfiguration calibtimeconf("calibTimeGain", "TPCCalibTimeGain", calibInput.Data(), "");
// else
// {
// cerr << "\nPlease specify an option for the calibration component you want to run, e.g. aliroot -b -q testTPCCalibration.C'(\"raw.root\",\"calibtime\")' \n"<< endl;
// return;
// }
//
//
// /////////////////////////////////////////////////////////////////////////
// //
// // Init and run the reconstruction
// // All but HLT reconstruction is switched off
//
// // connect to the GRID if we use a file or OCDB from the GRID
// TString struri = cdbURI;
// TString strfile = filename;
// if(struri.BeginsWith("raw://") || strfile.Contains("://") && !strfile.Contains("local://")){
// TGrid::Connect("alien");
// }
//
// // Set the CDB storage location
// AliCDBManager *man = AliCDBManager::Instance();
// man->SetDefaultStorage(cdbURI);
//
// AliReconstruction rec;
// rec.SetInput(filename);
// rec.SetRunVertexFinder(kFALSE);
// //rec.SetWriteESDfriend(kTRUE);
//
// if(minEvent>=0 || maxEvent>minEvent){
// if(minEvent<0) minEvent=0;
// if(maxEventpwd()));
//
// // rec.SetRunLocalReconstruction("HLT");
// // rec.SetRunTracking("");
// // rec.SetFillESD("");
//
// rec.SetRunQA(":");
//
// AliLog::Flush();
// rec.Run();
// }
//
// void testTPCCalibration(const char *filename, int minEvent=-1, int maxEvent=-1, const char* option="task"){
//
// testTPCCalibration(filename, "raw://", minEvent, maxEvent, option);
// }
//
// void testTPCCalibration(){
//
// cout << "testTPCCalibration: Run AliRoot reconstruction and TPC drift velocity calibration locally" << endl;
// cout << " Usage: aliroot -b -q -l testTPCCalibration.C'(\"file\", \"cdb\", minEvent, maxEvent, option)'" << endl;
// cout << "" << endl;
// cout << " Examples:" << endl;
// cout << " testTPCCalibration.C'(\"raw://run12345\", minEvent, MaxEvent,\"calibtime\")'" << endl;
// cout << " testTPCCalibration.C'(\"raw.root\", \"local://$PWD\", minEvent, MaxEvent, \"calibtime\")'" << endl;
// cout << "" << endl;
// cout << " Defaults" << endl;
// cout << " cdb=\"raw://\" -> takes OCDB from GRID" << endl;
// cout << " minEvent=-1 -> no lower event selection" << endl;
// cout << " maxEvent=-1 -> no upper event selection" << endl;
// cout << " option=\"task\" -> loads the analysis task that calls both the drift velocity and the gain calibration" << endl;
// }
void testTPCCalibration(const char* input="./", const char* option="task"){
gSystem->Load("libANALYSIS");
gSystem->Load("libTPCcalib");
if(!gSystem->AccessPathName("galice.root")){
cerr << "Please delete file galice.root or run at a different place." << endl;
return;
}
if (!input) {
cerr << "Please specify input or run without arguments." << endl;
return;
}
/////////////////////////////////////////////////////////////////////////
//
// init the HLT system in order to define the analysis chain below
//
AliHLTSystem *gHLT=AliHLTPluginBase::GetInstance();
TString calibInput;
if(calibInput.Length()>0) calibInput+=" ";
calibInput+="GLOBAL-esd-converter TPC-globalmerger TPC-clusters";
TString calibOption = option;
if (calibOption.CompareTo("task")==0) AliHLTConfiguration calibtimeconf("TPCcalib", "TPCCalibration", calibInput.Data(), "");
else if(calibOption.CompareTo("calibtime")==0) AliHLTConfiguration calibtimeconf("calibTime", "TPCCalibTime", calibInput.Data(), "");
else if(calibOption.CompareTo("calibtimegain")==0) AliHLTConfiguration calibtimeconf("calibTimeGain", "TPCCalibTimeGain", calibInput.Data(), "");
else
{
cerr << "\nPlease specify an option for the calibration component you want to run, e.g. aliroot -b -q testTPCCalibration.C'(\"raw.root\",\"calibtime\")' \n"<< endl;
return;
}
/////////////////////////////////////////////////////////////////////////
//
// Init and run the reconstruction
// All but HLT reconstruction is switched off
//
AliReconstruction rec;
rec.SetInput(input);
rec.SetRunVertexFinder(kFALSE);
rec.SetRunLocalReconstruction("HLT");
rec.SetRunTracking("");
rec.SetLoadAlignFromCDB(0);
rec.SetRunQA(":");
rec.SetDefaultStorage("local://$ALICE_ROOT/OCDB");
rec.SetSpecificStorage("GRP/GRP/Data", Form("local://%s",gSystem->pwd()));
// NOTE: FillESD is a step in the AliReconstruction sequence and has
// nothing to do with the fact that this macro writes ESD output
// HLT processes the HLTOUT during FillESD and extracts data which
// has already been prepared. This step is currently not necessary for
// this macro
rec.SetFillESD("");
if (calibOption.CompareTo("task")==0) rec.SetOption("HLT", "libAliHLTUtil.so libAliHLTTPC.so libAliHLTGlobal.so libAliHLTTPCCalibration.so loglevel=0x7c chains=TPCcalib");
if (calibOption.CompareTo("calibtime")==0) rec.SetOption("HLT", "libAliHLTUtil.so libAliHLTTPC.so libAliHLTGlobal.so libAliHLTTPCCalibration.so loglevel=0x7c chains=calibTime");
else if(calibOption.CompareTo("calibtimegain")==0) rec.SetOption("HLT", "libAliHLTUtil.so libAliHLTTPC.so libAliHLTGlobal.so libAliHLTTPCCalibration.so loglevel=0x7c chains=calibTimeGain");
rec.Run();
}