1 // Steer TRD QA train for Reconstruction (Clusterizer, Tracking and PID).
4 // run.C(tasks, files, entries)
5 // tasks : "ALL" or one/more of the following:
6 // "EFF" : TRD Tracking Efficiency
7 // "EFFC" : TRD Tracking Efficiency Combined (barrel + stand alone) - only in case of simulations
8 // "RES" : TRD tracking Resolution
9 // "CAL" : TRD calibration
10 // "PID" : TRD PID - pion efficiency
11 // "PIDR" : TRD PID - reference data
12 // "NOMC" : Data set does not have Monte Carlo Informations (real data), so all tasks which rely
13 // on MC information are switched off
16 // Alex Bercuci (A.Bercuci@gsi.de)
17 // Markus Fasel (m.Fasel@gsi.de)
19 #define BIT(n) (1 << (n))
20 #define SETBIT(n,i) ((n) |= BIT(i))
21 #define TESTBIT(n,i) ((Bool_t)(((n) & BIT(i)) != 0))
22 #define CLEARBIT(n,i) ((n) &= ~BIT(i))
24 const Int_t fknTasks = 4;
25 Char_t *fTaskName[fknTasks] = {"Barrel Tracking Effiency", "Combined Tracking Efficiency", "Tracking Resolution", "Calibration"};
27 kTrackingEfficiency = 0
28 ,kTrackingCombinedEfficiency = 1
29 ,kTrackingResolution = 2
32 void run(const Char_t *files=0x0, Char_t *tasks="ALL", Int_t nmax=-1)
39 gSystem->Load("libANALYSIS.so");
40 gSystem->Load("libTRDqaRec.so");
43 Bool_t fHasMCdata = kTRUE;
44 TObjArray *task = TString(tasks).Tokenize(" ");
45 for(Int_t isel = 0; isel < task->GetEntriesFast(); isel++){
46 TString s = (dynamic_cast<TObjString *>(task->UncheckedAt(isel)))->String();
47 if(s.CompareTo("ALL") == 0){
48 for(Int_t itask = 0; itask < fknTasks; itask++) SETBIT(fSteerTask, itask);
50 } else if(s.CompareTo("EFF") == 0){
51 SETBIT(fSteerTask, kTrackingEfficiency);
53 } else if(s.CompareTo("EFFC") == 0){
54 SETBIT(fSteerTask, kTrackingCombinedEfficiency);
56 } else if(s.CompareTo("RES") == 0){
57 SETBIT(fSteerTask, kTrackingResolution);
59 } else if(s.CompareTo("CAL" ) == 0){
60 SETBIT(fSteerTask, kCalibration);
62 } else if(s.CompareTo("NOMC") == 0){
63 CLEARBIT(fSteerTask, kTrackingEfficiency);
64 CLEARBIT(fSteerTask, kTrackingCombinedEfficiency);
67 Info("run.C", Form("Task %s not implemented (yet).", s.Data()));
71 printf("\n\tRUNNING TRAIN FOR TASKS:\n");
72 for(itask = 0; itask < fknTasks; itask++){
73 if(TESTBIT(fSteerTask, itask)) printf("\t%s\n", fTaskName[itask]);
76 //____________________________________________//
77 gROOT->LoadMacro(Form("%s/TRD/qaRec/CreateESDChain.C", gSystem->ExpandPathName("$ALICE_ROOT")));
78 TChain *chain = CreateESDChain(files, nmax);
79 //chain->SetBranchStatus("*", 0);
80 chain->SetBranchStatus("*FMD*",0);
81 chain->SetBranchStatus("*Calo*",0);
82 chain->SetBranchStatus("Tracks", 1);
83 chain->SetBranchStatus("ESDfriend*",1);
85 chain->GetListOfFiles()->Print();
86 printf("\n ----> CHAIN HAS %d ENTRIES <----\n\n", (Int_t)chain->GetEntries());
88 AliLog::SetGlobalLogLevel(AliLog::kError);
90 //____________________________________________
91 // Make the analysis manager
92 AliAnalysisManager *mgr = new AliAnalysisManager("TRD Track Info Manager");
93 //mgr->SetSpecialOutputLocation(source); // To Be Changed
94 AliVEventHandler* esdH = new AliESDInputHandler;
95 mgr->SetInputEventHandler(esdH);
96 if(fHasMCdata) mgr->SetMCtruthEventHandler(new AliMCEventHandler());
97 //mgr->SetDebugLevel(10);
99 //____________________________________________
100 // TRD track summary generator
101 AliTRDtrackInfoGen *task1 = new AliTRDtrackInfoGen();
102 task1->SetDebugLevel(1);
103 task1->SetMCdata(fHasMCdata);
105 // Create containers for input/output
106 AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("data", TChain::Class(), AliAnalysisManager::kInputContainer);
107 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("TrackInfoList", TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
108 mgr->ConnectInput( task1, 0, cinput1);
109 mgr->ConnectOutput(task1, 0, coutput1);
111 //____________________________________________
112 // TRD barrel tracking efficiency
113 if(TESTBIT(fSteerTask, kTrackingEfficiency)){
114 AliTRDtrackingEfficiency *task2 = new AliTRDtrackingEfficiency();
115 task2->SetDebugLevel(1);
117 //Create containers for input/output
118 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer("Efficiency", TList::Class(), AliAnalysisManager::kOutputContainer, "TRD.TrackingEfficiency.root");
119 mgr->ConnectInput( task2, 0, coutput1);
120 mgr->ConnectOutput(task2, 0, coutput2);
123 //____________________________________________
124 // TRD combined tracking efficiency
125 if(TESTBIT(fSteerTask, kTrackingCombinedEfficiency)){
126 AliTRDtrackingEfficiencyCombined *task3 = new AliTRDtrackingEfficiencyCombined();
127 task3->SetDebugLevel(0);
129 // Create containers for input/output
130 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer("Efficiency2", TObjArray::Class(), AliAnalysisManager::kOutputContainer, "TRD.TrackingEfficiencyCombined.root");
131 mgr->ConnectInput( task3, 0, coutput1);
132 mgr->ConnectOutput(task3, 0, coutput3);
135 //____________________________________________
136 // TRD tracking resolution
137 if(TESTBIT(fSteerTask, kTrackingResolution)){
138 AliTRDtrackingResolution *task4 = new AliTRDtrackingResolution();
139 task4->SetMCdata(fHasMCdata);
140 task4->SetDebugLevel(1);
142 // Create containers for input/output
143 AliAnalysisDataContainer *coutput4 = mgr->CreateContainer("Resolution", TList::Class(), AliAnalysisManager::kOutputContainer, "TRD.TrackingResolution.root");
144 mgr->ConnectInput( task4, 0, coutput1);
145 mgr->ConnectOutput(task4, 0, coutput4);
148 //____________________________________________
150 if(TESTBIT(fSteerTask, kCalibration)){
151 AliTRDcalib *task5 = new AliTRDcalib();
154 task5->SetDebugLevel(0);
155 task5->SetFillZero(kFALSE);
157 // Create containers for input/output
158 AliAnalysisDataContainer *coutput5 = mgr->CreateContainer("Calibration", TList::Class(), AliAnalysisManager::kOutputContainer, "TRD.Calibration.root");
159 mgr->ConnectInput(task5,0,cinput1);
160 mgr->ConnectOutput(task5,0,coutput5);
163 if (!mgr->InitAnalysis()) return;
166 // initialize TRD settings
167 AliTRDtrackerV1::SetNTimeBins(24);
168 mgr->StartAnalysis("local",chain);