]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/UPGRADE/testITSU/runanLoc.C
Integrating the Cooked Matrix tracker into the commom reconstruction framework
[u/mrichter/AliRoot.git] / ITS / UPGRADE / testITSU / runanLoc.C
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);
36   task->SetNResBins(200);
37   task->SetPtMax(10);
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());
83     if (!gGrid && inpDtStr.Contains("alien")) TGrid::Connect("alien://");
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());
103       if (!gGrid && flName.Contains("alien")) TGrid::Connect("alien://");
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 }