X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=TRD%2FqaRec%2Frun.C;h=b54df6c3ebe7193f28892b160f15b2942e435a8b;hb=4e6e97a5f0f23af5da3cd641851207046c68cd9e;hp=bc1736dce95dc26159903f214f9e5123b1c98726;hpb=10557e3917834861b7382f8dbd05f6b09b337c32;p=u%2Fmrichter%2FAliRoot.git diff --git a/TRD/qaRec/run.C b/TRD/qaRec/run.C index bc1736dce95..b54df6c3ebe 100644 --- a/TRD/qaRec/run.C +++ b/TRD/qaRec/run.C @@ -1,12 +1,15 @@ // Steer TRD QA train for Reconstruction (Clusterizer, Tracking and PID). // // Usage: -// run.C(tasks, files, entries) +// run.C(tasks, files) // tasks : "ALL" or one/more of the following: // "EFF" : TRD Tracking Efficiency // "EFFC" : TRD Tracking Efficiency Combined (barrel + stand alone) - only in case of simulations +// "MULT" : TRD single track selection // "RES" : TRD tracking Resolution +// "CLRES": clusters Resolution // "CAL" : TRD calibration +// "ALGN" : TRD alignment // "PID" : TRD PID - pion efficiency // "PIDR" : TRD PID - reference data // "DET" : Basic TRD Detector checks @@ -16,16 +19,21 @@ // // In compiled mode : // Don't forget to load first the libraries -// gSystem->Load("libMemStat.so") -// gSystem->Load("libMemStatGui.so") -// gSystem->Load("libANALYSIS.so") -// gSystem->Load("libTRDqaRec.so") +gSystem->Load("libMemStat.so") +gSystem->Load("libMemStatGui.so") +gSystem->Load("libANALYSIS.so") +gSystem->Load("libANALYSISalice.so") +gSystem->Load("libTRDqaRec.so") +gSystem->Load("libPWG1.so"); +// gSystem->Load("libNetx.so") ; +// gSystem->Load("libRAliEn.so"); // // Authors: // Alex Bercuci (A.Bercuci@gsi.de) // Markus Fasel (m.Fasel@gsi.de) -#ifndef __CINT__ +#if ! defined (__CINT__) || defined (__MAKECINT__) +//#ifndef __CINT__ #include #include "TStopwatch.h" @@ -33,14 +41,22 @@ #include "TMemStatViewerGUI.h" #include "TROOT.h" +#include "TClass.h" #include "TSystem.h" #include "TError.h" #include "TChain.h" +#include "TGrid.h" +#include "TAlienCollection.h" +#include "TGridCollection.h" +#include "TGridResult.h" +#include "TGeoGlobalMagField.h" -#include "AliMagFMaps.h" +#include "AliMagF.h" #include "AliTracker.h" #include "AliLog.h" #include "AliCDBManager.h" +#include "AliGRPManager.h" +#include "AliGeomManager.h" #include "AliAnalysisManager.h" #include "AliAnalysisDataContainer.h" #include "AliMCEventHandler.h" @@ -48,23 +64,27 @@ #include "TRD/AliTRDtrackerV1.h" #include "TRD/AliTRDcalibDB.h" -#include "TRD/qaRec/AliTRDtrackInfo/AliTRDeventInfo.h" -#include "TRD/qaRec/AliTRDtrackInfoGen.h" -#include "TRD/qaRec/AliTRDtrackingEfficiency.h" -#include "TRD/qaRec/AliTRDtrackingEfficiencyCombined.h" -#include "TRD/qaRec/AliTRDtrackingResolution.h" -#include "TRD/qaRec/AliTRDcalibration.h" -#include "TRD/qaRec/AliTRDpidChecker.h" -#include "TRD/qaRec/AliTRDpidRefMaker.h" -#include "TRD/qaRec/AliTRDcheckDetector.h" + +#include "TRD/qaRec/macros/AliTRDperformanceTrain.h" +#include "TRD/qaRec/macros/AddTRDcheckESD.C" +#include "TRD/qaRec/macros/AddTRDinfoGen.C" +#include "TRD/qaRec/macros/AddTRDcheckDET.C" +#include "TRD/qaRec/macros/AddTRDefficiency.C" +#include "TRD/qaRec/macros/AddTRDresolution.C" +#include "TRD/qaRec/macros/AddTRDcheckPID.C" + +#include "PWG1/macros/AddPerformanceTask.C" #endif -#include "run.h" +#include "../../TRD/qaRec/macros/AliTRDperformanceTrain.h" +#include "../../PWG1/macros/AddPerformanceTask.h" + Bool_t MEM = kFALSE; -TChain* CreateESDChain(const char* filename = 0x0, Int_t nfiles=-1 ); -void run(Char_t *tasks="ALL", const Char_t *files=0x0, Int_t nmax=-1) +TChain* MakeChainLST(const char* filename = 0x0); +TChain* MakeChainXML(const char* filename = 0x0); +void run(Char_t *trd="ALL", Char_t *tpc="ALL", const Char_t *files=0x0, Long64_t nev=1234567890, Long64_t first = 0) { TMemStat *mem = 0x0; if(MEM){ @@ -73,46 +93,44 @@ void run(Char_t *tasks="ALL", const Char_t *files=0x0, Int_t nmax=-1) mem = new TMemStat("new, gnubuildin"); mem->AddStamp("Start"); } - TStopwatch timer; timer.Start(); + + + // VERY GENERAL SETTINGS + AliLog::SetGlobalLogLevel(AliLog::kError); if(gSystem->Load("libANALYSIS.so")<0) return; - if(gSystem->Load("libTRDqaRec.so")<0) return; + if(gSystem->Load("libANALYSISalice.so")<0) return; + + Bool_t fHasMCdata = 1;//HasReadMCData(trd); + //Bool_t fHasFriends = HasReadFriendData(trd); - Bool_t fHasMCdata = kTRUE; - Bool_t fHasFriends = kTRUE; - TObjArray *tasksArray = TString(tasks).Tokenize(" "); - - Int_t fSteerTask = 0; SETBIT(fSteerTask, kInfoGen); - for(Int_t isel = 0; isel < tasksArray->GetEntriesFast(); isel++){ - TString s = (dynamic_cast(tasksArray->UncheckedAt(isel)))->String(); - if(s.CompareTo("ALL") == 0){ - for(Int_t itask = 1; itask < NTRDTASKS; itask++) SETBIT(fSteerTask, itask); - continue; - } else if(s.CompareTo("NOFR") == 0){ - fHasFriends = kFALSE; - } else if(s.CompareTo("NOMC") == 0){ - fHasMCdata = kFALSE; - } else { - Bool_t foundOpt = kFALSE; - for(Int_t itask = 1; itask < NTRDTASKS; itask++){ - if(s.CompareTo(fgkTRDtaskOpt[itask]) != 0) continue; - SETBIT(fSteerTask, itask); - foundOpt = kTRUE; - break; - } - if(!foundOpt) Info("run.C", Form("Task %s not implemented (yet).", s.Data())); - } + // INITIALIZATION OF RUNNING ENVIRONMENT + //TODO We should use the GRP if available similar to AliReconstruction::InitGRP()! + // initialize OCDB manager + AliCDBManager *cdbManager = AliCDBManager::Instance(); + cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB"); + cdbManager->SetSpecificStorage("GRP/GRP/Data", Form("local://%s",gSystem->pwd())); + cdbManager->SetRun(0); + cdbManager->SetCacheFlag(kFALSE); + // initialize magnetic field from the GRP manager. + AliGRPManager grpMan; + grpMan.ReadGRPEntry(); + grpMan.SetMagField(); + //AliRunInfo *runInfo = grpMan.GetRunInfo(); + AliGeomManager::LoadGeometry(); + + + // DEFINE DATA CHAIN + TChain *chain = 0x0; + if(!files) chain = MakeChainLST(); + else{ + TString fn(files); + if(fn.EndsWith("xml")) chain = MakeChainXML(files); + else chain = MakeChainLST(files); } - // define task list pointers; - AliTRDrecoTask *taskPtr[NTRDTASKS], *task = 0x0; - memset(taskPtr, 0, NTRDTASKS*sizeof(AliAnalysisTask*)); - - //____________________________________________// - //gROOT->LoadMacro(Form("%s/TRD/qaRec/CreateESDChain.C", gSystem->ExpandPathName("$ALICE_ROOT"))); - TChain *chain = CreateESDChain(files, nmax); - //chain->SetBranchStatus("*", 0); + if(!chain) return; chain->SetBranchStatus("*FMD*",0); chain->SetBranchStatus("*Calo*",0); chain->SetBranchStatus("Tracks", 1); @@ -120,160 +138,90 @@ void run(Char_t *tasks="ALL", const Char_t *files=0x0, Int_t nmax=-1) chain->Lookup(); chain->GetListOfFiles()->Print(); printf("\n ----> CHAIN HAS %d ENTRIES <----\n\n", (Int_t)chain->GetEntries()); - - AliLog::SetGlobalLogLevel(AliLog::kError); - //____________________________________________ - // Make the analysis manager - AliAnalysisManager *mgr = new AliAnalysisManager("TRD QA Reconstruction Manager"); - //mgr->SetSpecialOutputLocation(source); // To Be Changed + + // BUILD ANALYSIS MANAGER + AliAnalysisManager *mgr = new AliAnalysisManager("Post Reconstruction Calibration/QA"); AliVEventHandler *esdH = 0x0, *mcH = 0x0; mgr->SetInputEventHandler(esdH = new AliESDInputHandler); if(fHasMCdata) mgr->SetMCtruthEventHandler(mcH = new AliMCEventHandler()); //mgr->SetDebugLevel(10); - //____________________________________________ - // TRD track summary generator - mgr->AddTask(task = new AliTRDtrackInfoGen()); - taskPtr[(Int_t)kInfoGen] = task; - task->SetDebugLevel(1); - task->SetMCdata(fHasMCdata); - // Create containers for input/output - AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("data", TChain::Class(), AliAnalysisManager::kInputContainer); - AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("trackInfo", TObjArray::Class(), AliAnalysisManager::kExchangeContainer); - AliAnalysisDataContainer *coutput1a = mgr->CreateContainer("eventInfo", AliTRDeventInfo::Class(), AliAnalysisManager::kExchangeContainer); - mgr->ConnectInput( task, 0, cinput1); - mgr->ConnectOutput(task, 0, coutput1); - mgr->ConnectOutput(task, 1, coutput1a); - - //____________________________________________ - // TRD detector checker - if(TSTBIT(fSteerTask, kCheckDetector)){ - mgr->AddTask(task = new AliTRDcheckDetector()); - taskPtr[(Int_t)kCheckDetector] = task; - task->SetDebugLevel(4); - task->SetMCdata(fHasMCdata); - - // Create containers for input/output - mgr->ConnectInput( task, 0, coutput1); - mgr->ConnectInput( task, 1, coutput1a); - mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName()))); - } - //____________________________________________ - // TRD barrel tracking efficiency - if(fHasMCdata && TSTBIT(fSteerTask, kTrackingEfficiency)){ - mgr->AddTask(task = new AliTRDtrackingEfficiency()); - taskPtr[(Int_t)kTrackingEfficiency] = task; - task->SetDebugLevel(0); - //Create containers for input/output - mgr->ConnectInput( task, 0, coutput1); - mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName()))); - } - - //____________________________________________ - // TRD combined tracking efficiency - if(fHasMCdata && TSTBIT(fSteerTask, kTrackingCombinedEfficiency)){ - mgr->AddTask(task = new AliTRDtrackingEfficiencyCombined()); - taskPtr[(Int_t)kTrackingCombinedEfficiency] = task; - task->SetDebugLevel(0); +/////////////////////////////////////////////////////////// +/////////////// TRD /////////// +/////////////////////////////////////////////////////////// + // TRD specific library + if(gSystem->Load("libTRDqaRec.so")<0) return; + // TRD data containers + AliAnalysisDataContainer *ci[] = {0x0, 0x0, 0x0}; - // Create containers for input/output - mgr->ConnectInput( task, 0, coutput1); - mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName()))); - } - //____________________________________________ - // TRD tracking resolution - if(TSTBIT(fSteerTask, kTrackingResolution)){ - mgr->AddTask(task = new AliTRDtrackingResolution()); - taskPtr[(Int_t)kTrackingResolution] = task; - task->SetMCdata(fHasMCdata); - task->SetPostProcess(kFALSE); - task->SetDebugLevel(1); - - // Create containers for input/output - mgr->ConnectInput( task, 0, coutput1); - mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName()))); - } + // initialize TRD settings + AliTRDcalibDB *cal = AliTRDcalibDB::Instance(); + AliTRDtrackerV1::SetNTimeBins(cal->GetNumberOfTimeBins()); - //____________________________________________ - // TRD calibration - if(TSTBIT(fSteerTask, kCalibration)){ - mgr->AddTask(task = new AliTRDcalibration()); - taskPtr[(Int_t)kCalibration] = task; - ((AliTRDcalibration*)task)->SetLow(0); - ((AliTRDcalibration*)task)->SetHigh(30); - ((AliTRDcalibration*)task)->SetFillZero(kFALSE); - task->SetDebugLevel(0); - - // Create containers for input/output - mgr->ConnectInput(task, 0, coutput1); - mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName()))); - } + // plug (set of) TRD wagons in the train + if(trd){ + for(Int_t it=0; itLoadMacro(Form("$ALICE_ROOT/TRD/qaRec/macros/Add%s.C+", TString(fgkTRDtaskClassName[it])(3,20).Data()))) { + Error("run.C", Form("Error loading %s task.", fgkTRDtaskClassName[it])); + return; + } - //____________________________________________ - // TRD pid checker - if(TSTBIT(fSteerTask, kPIDChecker)){ - mgr->AddTask(task = new AliTRDpidChecker()); - taskPtr[(Int_t)kPIDChecker] = task; - task->SetDebugLevel(0); - task->SetMCdata(fHasMCdata); - - // Create containers for input/output - mgr->ConnectInput( task, 0, coutput1); - mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName()))); + switch(it){ + case kCheckESD: + AddTRDcheckESD(mgr); break; + case kInfoGen: + AddTRDinfoGen(mgr, trd, 0x0, ci); break; + case kCheckDET: + AddTRDcheckDET(mgr, trd, ci); break; + case kEfficiency: + AddTRDefficiency(mgr, trd, ci); break; + case kResolution: + AddTRDresolution(mgr, trd, ci); break; + case kCheckPID: + AddTRDcheckPID(mgr, trd, ci); break; + default: + Warning("run.C", Form("No performance task registered at slot %d.", it)); + } + } } - - //____________________________________________ - // TRD pid reference - if(TSTBIT(fSteerTask, kPIDRefMaker)){ - mgr->AddTask(task = new AliTRDpidRefMaker()); - taskPtr[(Int_t)kPIDRefMaker] = task; - task->SetDebugLevel(0); - task->SetMCdata(fHasMCdata); - - // Create containers for input/output - mgr->ConnectInput( task, 0, coutput1); - mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName()))); - mgr->ConnectOutput(task, 1, mgr->CreateContainer(Form("%sNN", task->GetName()), TTree::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%sNN.root", task->GetName()))); - mgr->ConnectOutput(task, 2, mgr->CreateContainer(Form("%sLQ", task->GetName()), TTree::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%sLQ.root", task->GetName()))); +/////////////////////////////////////////////////////////// +/////////////// TPC /////////// +/////////////////////////////////////////////////////////// + if(gSystem->Load("libPWG1.so")<0) return; + + // BUILD STEERING TASK FOR TPC + if(tpc){ + if(gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddPerformanceTask.C+")) { + Error("run.C", "Error loading AliPerformanceTask task."); + return; + } + AddPerformanceTask(mgr, tpc); } - if (!mgr->InitAnalysis()) return; + // verbosity printf("\n\tRUNNING TRAIN FOR TASKS:\n"); - for(Int_t itask = 1; itask < NTRDTASKS; itask++){ - if(TSTBIT(fSteerTask, itask)) printf("\t %s [%s]\n", taskPtr[itask]->GetTitle(), taskPtr[itask]->GetName()); - } - printf("\n\n"); + mgr->GetTasks()->ls(); //mgr->PrintStatus(); - - AliCDBManager *cdbManager = AliCDBManager::Instance(); - cdbManager->SetDefaultStorage("local://$ALICE_ROOT"); - //cdbManager->SetSpecificStorage("TRD/Calib/FEE","local:///u/bailhach/aliroot/database30head/database"); - cdbManager->SetRun(0); - cdbManager->SetCacheFlag(kFALSE); - - // initialize TRD settings - AliMagFMaps *field = new AliMagFMaps("Maps","Maps", 2, 1., 10., AliMagFMaps::k5kG); - AliTracker::SetFieldMap(field, kTRUE); - AliTRDcalibDB *cal = AliTRDcalibDB::Instance(); - AliTRDtrackerV1::SetNTimeBins(cal->GetNumberOfTimeBins()); - - - mgr->StartAnalysis("local",chain); + mgr->StartAnalysis("local", chain, nev, first); timer.Stop(); timer.Print(); cal->Terminate(); - delete field; + TGeoGlobalMagField::Instance()->SetField(NULL); delete cdbManager; - for(Int_t it=NTRDTASKS-1; it>=0; it--) if(taskPtr[it]) delete taskPtr[it]; + + // verbosity + printf("\n\tCLEANING UP TRAIN:\n"); + mgr->GetTasks()->Delete(); + if(mcH) delete mcH; delete esdH; delete mgr; @@ -282,8 +230,8 @@ void run(Char_t *tasks="ALL", const Char_t *files=0x0, Int_t nmax=-1) if(MEM) TMemStatViewerGUI::ShowGUI(); } - -TChain* CreateESDChain(const char* filename, Int_t nfiles) +//____________________________________________ +TChain* MakeChainLST(const char* filename) { // Create the chain TChain* chain = new TChain("esdTree"); @@ -298,7 +246,7 @@ TChain* CreateESDChain(const char* filename, Int_t nfiles) ifstream in; in.open(filename); TString esdfile; - while(in.good() && (nfiles--) ) { + while(in.good()) { in >> esdfile; if (!esdfile.Contains("root")) continue; // protection chain->Add(esdfile.Data()); @@ -308,3 +256,35 @@ TChain* CreateESDChain(const char* filename, Int_t nfiles) return chain; } + +//____________________________________________ +TChain* MakeChainXML(const char* xmlfile) +{ + if (!TFile::Open(xmlfile)) { + Error("MakeChainXML", Form("No file %s was found", xmlfile)); + return 0x0; + } + + if(gSystem->Load("libNetx.so")<0) return 0x0; + if(gSystem->Load("libRAliEn.so")<0) return 0x0; + TGrid::Connect("alien://") ; + + TGridCollection *collection = (TGridCollection*) TAlienCollection::Open(xmlfile); + if (!collection) { + Error("MakeChainXML", Form("No collection found in %s", xmlfile)) ; + return 0x0; + } + //collection->CheckIfOnline(); + + TGridResult* result = collection->GetGridResult("",0 ,0); + if(!result->GetEntries()){ + Error("MakeChainXML", Form("No entries found in %s", xmlfile)) ; + return 0x0; + } + // Makes the ESD chain + TChain* chain = new TChain("esdTree"); + for (Int_t idx = 0; idx < result->GetEntries(); idx++) { + chain->Add(result->GetKey(idx, "turl")); + } + return chain; +}