]>
Commit | Line | Data |
---|---|---|
fa10255f | 1 | TChain* loadChain(const char* inpData, const char* chName="esdTree"); |
2 | const TObjArray* GetTrackingConditions(const char* recopar="ITS/Calib/RecoParam/Run0_999999999_v0_s0.root"); | |
3 | ||
4 | void runanLoc(const char* inpData="AliESDs.root", const char* outFile="tstPerfAn.root") | |
5 | { | |
6 | // runs analysis task on local data | |
7 | // | |
8 | gROOT->ProcessLine(".x LoadLibs.C(1)"); | |
9 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
10 | if (!mgr) mgr = new AliAnalysisManager("Test reco analysis"); | |
11 | AliAnalysisDataContainer *cinp = (AliAnalysisDataContainer*)mgr->GetCommonInputContainer(); | |
12 | // | |
13 | AliESDInputHandler *esdInputHandler = dynamic_cast<AliESDInputHandler*>(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()); | |
14 | if (!esdInputHandler) esdInputHandler = new AliESDInputHandlerRP(); | |
15 | mgr->SetInputEventHandler(esdInputHandler); | |
16 | // | |
17 | AliMCEventHandler* mcInputHandler = dynamic_cast<AliMCEventHandler*>(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()); | |
18 | if (!mcInputHandler) mcInputHandler = new AliMCEventHandler(); | |
19 | mgr->SetMCtruthEventHandler(mcInputHandler); | |
20 | mcInputHandler->SetPreReadMode(AliMCEventHandler::kLmPreRead); | |
21 | // | |
22 | gROOT->ProcessLine(".L AliTaskITSUPerf.cxx++"); | |
23 | AliTaskITSUPerf* task = new AliTaskITSUPerf("tstAnalysis"); | |
24 | TString outFString = outFile; | |
25 | if (outFString.IsNull()) outFString = "recAnOut.root"; | |
26 | AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("clist", TList::Class(),AliAnalysisManager::kOutputContainer,outFString.Data()); | |
27 | mgr->AddTask(task); | |
28 | mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer()); | |
29 | mgr->ConnectOutput(task,1,coutput1); | |
30 | task->SetUseMC(1); // at the moment not irrelevant | |
31 | // | |
32 | // configure task | |
33 | task->SetEtaMin(-3); | |
34 | task->SetEtaMax(3); | |
35 | task->SetNPtBins(10); | |
891efa00 | 36 | task->SetNResBins(200); |
37 | task->SetPtMax(10); | |
fa10255f | 38 | // |
39 | // optionally set reconstructability condition | |
40 | task->SetTrackingConditions(GetTrackingConditions()); | |
41 | // | |
42 | TChain *chain = loadChain(inpData); | |
43 | if (!chain) return; | |
44 | mgr->InitAnalysis(); | |
45 | mgr->StartAnalysis("local",chain); | |
46 | // | |
47 | } | |
48 | ||
49 | const TObjArray* GetTrackingConditions(const char* recopar) | |
50 | { | |
51 | // load tracking conditions used in reco | |
52 | TString rpfstr = recopar; | |
53 | Bool_t fail = kFALSE; | |
54 | const TObjArray* trCondArr = 0; | |
55 | while(1) { | |
56 | TFile* rpf = 0; | |
57 | if (rpfstr.IsNull() || !(rpf=TFile::Open(rpfstr.Data()))) {fail = kTRUE; break;} | |
58 | AliCDBEntry* cdbe = (AliCDBEntry*)rpf->Get("AliCDBEntry"); | |
59 | if (!cdbe) {fail = kTRUE; break;} | |
60 | TObjArray* recoParArr = (TObjArray*)cdbe->GetObject(); | |
61 | if (!recoParArr) {fail = kTRUE; break;} | |
62 | AliITSURecoParam* recoPar = (AliITSURecoParam*) recoParArr->At(1); | |
63 | if (!recoPar) {fail = kTRUE; break;} | |
64 | trCondArr = recoPar->GetTrackingConditions(); | |
65 | if (!trCondArr) {fail = kTRUE; break;} | |
66 | break; | |
67 | } | |
68 | if (fail) {printf("Tracking conditions must be extracted from valid recoparams, path is %s\n",recopar); exit(1);} | |
69 | // | |
70 | return trCondArr; | |
71 | } | |
72 | ||
73 | //________________________________________________________________________________ | |
74 | TChain* loadChain(const char* inpData, const char* chName) | |
75 | { | |
76 | TChain* chain = new TChain(chName); | |
77 | // | |
78 | TString inpDtStr = inpData; | |
79 | if (inpDtStr.EndsWith(".root")) { | |
80 | if (!inpDtStr.Contains("/")) inpDtStr = Form("%s/%s",gSystem->pwd(),inpDtStr.Data()); | |
81 | printf("Setting %s as an input\n",inpDtStr.Data()); | |
82 | chain->AddFile(inpDtStr.Data()); | |
699d8344 | 83 | if (!gGrid && inpDtStr.Contains("alien")) TGrid::Connect("alien://"); |
fa10255f | 84 | } |
85 | else { | |
86 | // | |
87 | ifstream inpf(inpData); | |
88 | if (!inpf.good()) { | |
89 | printf("Failed on input filename %s\n",inpData); | |
90 | return kFALSE; | |
91 | } | |
92 | // | |
93 | TString flName; | |
94 | flName.ReadLine(inpf); | |
95 | while ( !flName.IsNull() ) { | |
96 | flName = flName.Strip(TString::kBoth,' '); | |
97 | if (flName.BeginsWith("//") || flName.BeginsWith("#")) {flName.ReadLine(inpf); continue;} | |
98 | flName = flName.Strip(TString::kBoth,','); | |
99 | flName = flName.Strip(TString::kBoth,'"'); | |
100 | if (!flName.Contains("/")) flName = Form("%s/%s",gSystem->pwd(),flName); | |
101 | printf("Adding %s\n",flName.Data()); | |
102 | chain->AddFile(flName.Data()); | |
699d8344 | 103 | if (!gGrid && flName.Contains("alien")) TGrid::Connect("alien://"); |
fa10255f | 104 | flName.ReadLine(inpf); |
105 | } | |
106 | } | |
107 | // | |
108 | int n = chain->GetEntries(); | |
109 | if (n<1) { | |
110 | printf("Obtained chain is empty\n"); | |
111 | return 0; | |
112 | } | |
113 | else printf("Opened %s chain with %d entries\n",chName,n); | |
114 | return chain; | |
115 | } |