]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/TRD/runQAesds.C
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGPP / TRD / runQAesds.C
1 Int_t ExtractRunNumber(TString filename);
2 void Plot(Int_t run);
3 void runQAesds(const char *esdlist)
4 {
5   ifstream input(esdlist);
6   string str;
7   getline(input, str);
8   TString tstr(str.c_str());
9   if(tstr.Contains("alien://")){
10     printf("Data from alien\n");
11     gSystem->Load("libRAliEn");
12     TGrid::Connect("alien://");
13   }
14
15   Int_t runnr = ExtractRunNumber(tstr);
16   printf("runnr %d\n", runnr);
17
18   gSystem->Load("libANALYSIS");
19   gSystem->Load("libANALYSISalice");
20   gSystem->Load("libTENDER");
21   gSystem->Load("libPWGPP");
22   AliLog::SetGlobalLogLevel(AliLog::kError);
23   gROOT->LoadMacro(Form("%s/PWG0/CreateESDChain.C", gSystem->ExpandPathName("$ALICE_ROOT")));
24   TChain *chain = CreateESDChain(esdlist, -1);
25   chain->SetBranchStatus("*FMD*",0);
26   chain->SetBranchStatus("*Calo*",0);
27   chain->SetBranchStatus("Tracks", 1);
28   chain->SetBranchStatus("ESDfriend*",1);
29   chain->Lookup();
30   chain->GetListOfFiles()->Print();
31   printf("\n ----> CHAIN HAS %d ENTRIES <----\n\n", (Int_t)chain->GetEntries());
32     
33   AliAnalysisManager *TRDqa = new AliAnalysisManager("TRD Cosmics QA");
34   TRDqa->SetInputEventHandler(new AliESDInputHandler);
35   AliTRDinfoGen *info = new AliTRDinfoGen();
36   AliTRDcheckDET *detector = new AliTRDcheckDET();
37   detector->SetDebugLevel(10);
38   detector->SetMCdata(kFALSE);
39   detector->UseClustersOutsideChamber();
40   TRDqa->AddTask(info);
41   TRDqa->AddTask(detector);
42   
43   AliAnalysisDataContainer *co[3];
44   TRDqa->ConnectInput( info, 0, TRDqa->GetCommonInputContainer());
45   co[0] = TRDqa->CreateContainer("trackInfo", TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
46   co[1] = TRDqa->CreateContainer("eventInfo", AliTRDeventInfo::Class(), AliAnalysisManager::kExchangeContainer);
47   co[2] = TRDqa->CreateContainer("v0Info", TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
48   TRDqa->ConnectOutput(info, 0, co[0]);
49   TRDqa->ConnectOutput(info, 1, co[1]);
50   TRDqa->ConnectOutput(info, 2, co[2]);
51   TRDqa->ConnectInput(detector, 0, co[0]);
52   TRDqa->ConnectInput(detector, 1, co[1]);
53   TRDqa->ConnectOutput(detector, 0, TRDqa->CreateContainer(detector->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Perf%d.root", runnr)));
54   
55   if(TRDqa->InitAnalysis()){
56           TRDqa->Print();
57           TRDqa->StartAnalysis("local", chain);
58   }
59   gSystem->Exec(Form("mv TRD.DebugPerformance.root TRD.DbgPerf%d.root", runnr));
60   Plot(runnr);
61 }
62
63 void Plot(Int_t run){
64   TFile *f=new TFile(Form("TRD.Perf%d.root",run));
65   TH1F *hNtrSec = (TH1F*)checkDET->FindObject("hNtrksSector");
66   TH1F *hNtrks = (TH1F*)checkDET->FindObject("hNtrks"); // tracks/event
67   TH1F *hNtlsSTA = (TH1F*)checkDET->FindObject("hNtlsSTA");
68   TH1F *hNtlsBAR = (TH1F*)checkDET->FindObject("hNtlsBAR");
69   TH1F *hNclTrk = (TH1F*)checkDET->FindObject("hNclTls");
70   TProfile *hPHp = (TProfile*) checkDET->FindObject("<PH>")->FindObject("hPHt");
71   f->Close();
72
73   TH2F *hPH = new TH2F("hPH", "PH", 30, 0, 30, 100, 0, 1000);
74   TString filename = Form("TRD.DbgPerf%d.root",run);
75   TChain *debchain = new TChain("PHt");
76   if(filename.EndsWith(".root")) {  
77     debchain->AddFile(filename.Data());
78     debchain->Draw("Charge:Timebin>>hPH", "","colz");
79   } else{
80     cout << "No such file... " << filename <<endl;
81   }
82
83   const Float_t Ls1=0.04;
84   TCanvas *tc = new TCanvas ("Monitor", "Monitor",50,50,600,900);
85   tc->Divide(2,3);
86
87   tc->cd(1); 
88   pad = tc->cd(1); pad->SetLogy();
89   hNtrks->GetXaxis()->SetTitle("Tracks per event");
90   hNtrks->GetXaxis()->SetTitleOffset(.9);
91   hNtrks->GetXaxis()->SetTitleSize(0.05);
92   hNtrks->GetYaxis()->SetTitle("");
93   //hNtrks->SetTitle(Form("%d",run));
94   hNtrks->SetLineWidth(2);
95   hNtrks->SetLabelSize(Ls1,"xy");
96   hNtrks->GetXaxis()->SetRangeUser(0,20);    
97   hNtrks->Draw();
98   int Ntracks=hNtrks->Integral();
99   TLatex *text=new TLatex(8,10,Form("%d tracks",Ntracks));
100   text->SetTextSize(0.045); text->SetTextFont(42);
101   text->Draw("same");
102
103   tc->cd(2);
104   hNtrSec->GetXaxis()->SetTitle("Sector");
105   hNtrSec->GetXaxis()->SetTitleOffset(.9);
106   hNtrSec->GetXaxis()->SetTitleSize(0.05);
107   hNtrSec->GetYaxis()->SetTitle("Tracks");
108   //hNtrSec->GetYaxis()->SetTitleSize(0.05);
109   hNtrSec->GetYaxis()->SetTitleOffset(1.2);
110   hNtrSec->SetLineWidth(2);
111   hNtrSec->SetLabelSize(Ls1,"xy");
112   hNtrSec->Draw();
113
114   tc->cd(3);
115   hNtlsBAR->GetXaxis()->SetTitle("Tracklets per track");
116   hNtlsBAR->GetXaxis()->SetTitleOffset(.9);
117   hNtlsBAR->GetXaxis()->SetTitleSize(0.05);
118   hNtlsBAR->GetYaxis()->SetTitle("");
119   //hNtlsBAR->SetStats(1111);
120   hNtlsBAR->SetLabelSize(Ls1,"xy");
121   hNtlsBAR->SetLineWidth(2);
122   //hNtlsBAR->GetYaxis()->SetRangeUser(0,500);    
123   hNtlsSTA->GetXaxis()->SetTitle("Tracklets per track");
124   hNtlsSTA->GetYaxis()->SetTitle("");
125   hNtlsBAR->SetLineColor(2); hNtlsBAR->Draw("");
126   hNtlsSTA->SetLineColor(4); hNtlsSTA->Draw("same");
127   leg = new TLegend(0.14,0.35,0.65,0.5);
128   leg->AddEntry(hNtlsBAR,"Barrel","l");
129   leg->AddEntry(hNtlsSTA,"Standalone","l");
130   leg->SetBorderSize(0);
131   leg->SetFillStyle(0);
132   leg->SetMargin(0.15); //separation symbol-text
133   leg->SetEntrySeparation(0.1); //this seems not to do much...
134   leg->Draw();
135
136   tc->cd(4);
137   hNclTrk->GetXaxis()->SetTitle("Clusters per tracklet");
138   hNclTrk->GetXaxis()->SetTitleOffset(.9);
139   hNclTrk->GetXaxis()->SetTitleSize(0.05);
140   hNclTrk->GetYaxis()->SetTitle("");
141   hNclTrk->SetLabelSize(Ls1,"xy");
142   hNclTrk->SetLineWidth(2);
143   hNclTrk->Draw();
144
145   tc->cd(5);
146   hPHp->GetXaxis()->SetTitle("Time bin (100 ns)");
147   hPHp->GetXaxis()->SetTitleOffset(.9);
148   hPHp->GetXaxis()->SetTitleSize(0.05);
149   hPHp->GetYaxis()->SetTitle("<PH> (ADC ch.)");
150   hPHp->GetYaxis()->SetTitleOffset(1.3);
151   hPHp->SetLabelSize(Ls1,"xy");
152   hPHp->SetLineWidth(2);
153   hPHp->Draw();
154
155   tc->cd(6);
156   hPH->GetXaxis()->SetTitle("Time bin (100 ns)");
157   hPH->GetXaxis()->SetTitleOffset(.9);
158   hPH->GetXaxis()->SetTitleSize(0.05);
159   hPH->GetYaxis()->SetTitle("Pulse Height (ADC ch.)");
160   hPH->GetYaxis()->SetTitleOffset(1.3);
161   hPH->SetLabelSize(Ls1,"xy");
162   hPH->SetLineWidth(2);
163   hPH->Draw("colz");
164
165   //tc->SaveAs(Form("Mon_run%dp%d.eps",run,pass));
166   tc->SaveAs(Form("Mon_run%d.gif",run));
167 }
168
169 Int_t ExtractRunNumber(TString filename){
170   TObjArray *toks = filename.Tokenize("/");
171   TObjString *file = dynamic_cast<TObjString *>(toks->At(toks->GetEntries() - 2));
172   TString &filestr = file->String();
173   TString runstr = filestr(2,9);
174   return runstr.Atoi();
175 }