#include "TSystem.h"
#include "TROOT.h"
#include "TFile.h"
+#include "TBranch.h"
+#include "TIterator.h"
#include "TTree.h"
#include "TH1.h"
#include "TF1.h"
// Make trending of variable list "tl" from trending file list "fl"
// The trending value list should be formated "var1:var2:var3"
// The trending file from the list should be found on a path formated "your path"/runId/TRD.PerformanceTrend.root
- gSystem->Load("libANALYSIS.so");
- gSystem->Load("libANALYSISalice.so");
- gSystem->Load("libTENDER.so");
- gSystem->Load("libCORRFW.so");
- gSystem->Load("libPWGPP.so");
- gSystem->Load("libPWGmuon.so");
+ gSystem->Load("libANALYSIS");
+ gSystem->Load("libANALYSISalice");
+ gSystem->Load("libTender");
+ gSystem->Load("libCORRFW");
+ gSystem->Load("libPWGPP");
+ gSystem->Load("libPWGmuon");
- const Int_t nt(316);
+ const Int_t nt(322);
const Char_t *tvn[nt][2] = {
{"TRDcheckDET_NTracksEvent", "<N_{track}/Event>"},
{"TRDcheckDET_NTracksEventRMS", "RMS(N_{track}/Event)"},
{"TRDresolution_TrkInQ2", "TrkIn :: MPV(dQdl)^{Kp} [a.u.]"},
{"TRDresolution_TrkInQS2", "TrkIn :: <dQdl>^{Kp} [a.u.]"},
{"TRDresolution_TrkInRCZ", "TrkIn :: <#Deltaz> [cm]"},
- {"TRDresolution_TrkInRCZS", "TrkIn :: #sigma(#Deltaz) [cm]"}
+ {"TRDresolution_TrkInRCZS", "TrkIn :: #sigma(#Deltaz) [cm]"},
+ {"TRDresolution_TrkInPtn0", "TrkIn :: <p_{t}>^{e-} [GeV/c]"},
+ {"TRDresolution_TrkInPtp0", "TrkIn :: <p_{t}>^{e+} [GeV/c]"},
+ {"TRDresolution_TrkInPtn1", "TrkIn :: <p_{t}>^{#mu#pi-} [GeV/c]"},
+ {"TRDresolution_TrkInPtp1", "TrkIn :: <p_{t}>^{#mu#pi+} [GeV/c]"},
+ {"TRDresolution_TrkInPtn2", "TrkIn :: <p_{t}>^{Kp-} [GeV/c]"},
+ {"TRDresolution_TrkInPtp2", "TrkIn :: <p_{t}>^{Kp+} [GeV/c]"}
};
const char *resName[] = {"Markus Fasel", "Alexandru Bercuci"},
*resMail[] = {"M.Fasel@gsi.de", "A.Bercuci@gsi.de"};
const char *notName[] = {"Julian Book", "Hans Beck", "Ionut Arsene", "Raphaelle Bailache", "Christoph Blume"},
*notMail[] = {"jbook@ikf.uni-frankfurt.de", "hbeck@ikf.uni-frankfurt.de", "I.C.Arsene@gsi.de", "R.Bailhache@gsi.de", "blume@ikf.uni-frankfurt.de"};
- for(Int_t jnt(0); jnt<nt; jnt++) printf("%3d %s %s\n", jnt, tvn[jnt][0], tvn[jnt][1]);
+ Int_t nDet(0), nEff(0), nRes(0);
+ for(Int_t jnt(0); jnt<nt; jnt++){
+ //printf("%3d %s %s\n", jnt, tvn[jnt][0], tvn[jnt][1]);
+ if(strstr(tvn[jnt][0], "TRDcheckDET")) nDet++;
+ else if(strstr(tvn[jnt][0], "TRDefficiency")) nEff++;
+ else if(strstr(tvn[jnt][0], "TRDresolution")) nRes++;
+ else {
+ Error("makeTrendingDB", "Entry \"%s\" not registered as trending task.", tvn[jnt][0]);
+ return;
+ }
+ }
+ Info("makeTrendingDB", "Trends :: %3d = %3d[DET] %3d[EFF] %3d[RES]", nt, nDet, nEff, nRes);
TFile *fDB = TFile::Open("TRD.TrendDB.root", "RECREATE");
TTree *tDB = new TTree("trend", "Reference Trend Values");
- Double_t val[nt];
- for(Int_t it(0); it<nt; it++) tDB->Branch(tvn[it][0], &val[it], Form("%s/D", tvn[it][0]));
+ Double_t val[nt+1000]; Int_t jt(0);
+ TBranch *b(NULL);
+ for(Int_t it(0); it<nt; it++){ // ALL
+ b = tDB->Branch(tvn[it][0], &val[jt++], Form("%s/D", tvn[it][0]));
+ b->SetTitle(tvn[it][1]);
+ }
+ for(Int_t it(nDet); it<nDet+nEff; it++){ // extra EFF (MC)
+ TString stn("TRDefficiency_MC"); stn+=&tvn[it][0][14];
+ b = tDB->Branch(stn.Data(), &val[jt++], Form("%s/D", stn.Data()));
+ b->SetTitle(Form("[MC] %s", tvn[it][1]));
+ }
+ for(Int_t it(nDet+nEff); it<nDet+nEff+nRes; it++){ // extra RES (MC)
+ TString stn("TRDresolution_MC"); stn+=&tvn[it][0][14];
+ b= tDB->Branch(stn.Data(), &val[jt++], Form("%s/D", stn.Data()));
+ b->SetTitle(Form("[MC] %s", tvn[it][1]));
+ }
+ for(Int_t it(nDet+nEff); it<nDet+nEff+nRes; it++){ // extra RES (V0)
+ TString stn("TRDresolution_V0"); stn+=&tvn[it][0][14];
+ b = tDB->Branch(stn.Data(), &val[jt++], Form("%s/D", stn.Data()));
+ b->SetTitle(Form("[V0] %s", tvn[it][1]));
+ }
gROOT->cd();
-
+ Info("makeTrendingDB", "Trends :: Combined [%3d]", tDB->GetNbranches());
+ TIterator *ib = tDB->GetListOfBranches()->MakeIterator();
+
AliTRDtrendValue *tv(NULL);
FILE *fp = fopen(fl, "rt");
TString sfp;
while(sfp.Gets(fp)){
if(!TFile::Open(sfp.Data())) continue;
- Int_t nmiss(0), nbads(0);
- for(Int_t it(0); it<nt; it++){
- val[it] = -999;
- if(!(tv = (AliTRDtrendValue*)gFile->Get(tvn[it][0]))) {
- //Warning("makeTrendingDB()", "Missing %s from %s", tvn[it][0], sfp.Data());
+ Int_t nmiss(0), nbads(0), it(-1); ib->Reset();
+ while((b=(TBranch*)ib->Next())){
+ val[++it] = -999;
+ if(!(tv = (AliTRDtrendValue*)gFile->Get(b->GetName()))) {
+ //Warning("makeTrendingDB()", "Missing %s from %s", b->GetName(), sfp.Data());
nmiss++;
continue;
}
- if((strstr(tvn[it][0], "TRDcheckDET") || strstr(tvn[it][0], "QS") || strstr(tvn[it][0], "YS")) && TMath::Abs(tv->GetVal()) < 1.e-5){
- //Info("makeTrendingDB()", "Found bad value for %s[%f] in %s", tvn[it][0], tv->GetVal(), sfp.Data());
+ if((strstr(b->GetName(), "TRDcheckDET") ||
+ strstr(b->GetName(), "QS") ||
+ strstr(b->GetName(), "YS")) && TMath::Abs(tv->GetVal()) < 1.e-5){
+ //Info("makeTrendingDB()", "Found bad value for %s[%f] in %s", b->GetName(), tv->GetVal(), sfp.Data());
nbads++;
continue;
}
tDB->Fill();
}
-
// TFile *fDB = TFile::Open("TRD.TrendDB.root");
// TTree *tDB = (TTree*)gFile->Get("trend");
// Double_t val[nt];
AliTRDtrendingManager *tm = AliTRDtrendingManager::Instance();
TCanvas *c = new TCanvas("c", "Trend Distrib.", 10, 10, 500, 500);
Int_t ntr=tDB->GetEntries();
- for(Int_t it(0); it<nt; it++){
- tDB->Draw(tvn[it][0], "", "goff");
+ Int_t it(-1); ib->Reset();
+ while((b=(TBranch*)ib->Next())){
+ tDB->Draw(b->GetName(), "", "goff"); it++;
Double_t *v = tDB->GetV1(), xmin(100.), xmax(-100);
Int_t ntr0(0);
for(Int_t ir=0; ir<ntr; ir++){
if(v[ir]<xmin) xmin = v[ir];
if(v[ir]>xmax) xmax = v[ir];
}
+ Double_t m(0.), s(0.);
if(ntr0<10){
- Warning("makeTrendingDB", "Couldn't create entry %s. Too few values %d", tvn[it][0], ntr0);
- continue;
- }
- if((h =(TH1F*)gROOT->FindObject("hp"))){delete h; h = NULL;}
- h = new TH1F("hp", Form(";%s;entries", tvn[it][0]), 25, 0.5*(3*xmin-xmax), 0.5*(3*xmax - xmin));
- tDB->Draw(Form("%s>>hp", tvn[it][0]), Form("%s>-100", tvn[it][0]));
- if(h->Integral() < 1) continue;
- f.SetParameter(0, h->Integral());
- f.SetParameter(1, h->GetMean());
- f.SetParameter(2, h->GetRMS());
- h->Fit(&f, "WQ");
- c->Modified(); c->Update(); c->SaveAs(Form("Fit_%s.gif", tvn[it][0]));
+ Warning("makeTrendingDB", "%s :: Couldn't create reference value out of %d entries.", b->GetName(), ntr0);
+ } else {
+ if((h =(TH1F*)gROOT->FindObject("hp"))){delete h; h = NULL;}
+ h = new TH1F("hp", Form("%s;%s;entries", b->GetTitle(), b->GetName()), 25, 0.5*(3*xmin-xmax), 0.5*(3*xmax - xmin));
+ tDB->Draw(Form("%s>>hp", b->GetName()), Form("%s>-100", b->GetName()));
+ if(h->Integral() < 1) continue;
+ f.SetParameter(0, h->Integral());
+ f.SetParameter(1, h->GetMean());
+ f.SetParameter(2, h->GetRMS());
+ h->Fit(&f, "WQ");
+ c->Modified(); c->Update(); c->SaveAs(Form("Fit_%s.gif", b->GetName()));
- // write trending value to manager
- Info("makeTrendingDB", "%s [%f - %f] %f[%f]", tvn[it][0], xmin, xmax, f.GetParameter(1), f.GetParameter(2));
- Double_t m(0.), s(0.);
-/* if(strstr(tvn[it][0], "TrkInYS")) {
- m=0.4; s=0.06;
- } else if(strstr(tvn[it][0], "TrkInY")) {
- m=0.; s=0.1;*/
-/* } else if(strstr(tvn[it][0], "TrkInPh")) {
- m=0.; s=0.35;*/
-/* } else if(strstr(tvn[it][0], "TrkInQ") || strstr(tvn[it][0], "TrkInQS")) {
- m=-2.; s=0.2;*/
-// } else {
- m=f.GetParameter(1); s=h->GetRMS()/*f.GetParameter(2)*/;
-// }
- tm->AddValue(tvn[it][0], m, s, tvn[it][1], res[it>13], notifiable);
+ // write trending value to manager
+ Info("makeTrendingDB", "%s :: %f+-%f [%f - %f]", b->GetName(), f.GetParameter(1), f.GetParameter(2), xmin, xmax);
+ /* if(strstr(tvn[it][0], "TrkInYS")) {
+ m=0.4; s=0.06;
+ } else if(strstr(tvn[it][0], "TrkInY")) {
+ m=0.; s=0.1;*/
+ /* } else if(strstr(tvn[it][0], "TrkInPh")) {
+ m=0.; s=0.35;*/
+ /* } else if(strstr(tvn[it][0], "TrkInQ") || strstr(tvn[it][0], "TrkInQS")) {
+ m=-2.; s=0.2;*/
+ // } else {
+ m=f.GetParameter(1); s=h->GetRMS()/*f.GetParameter(2)*/;
+ // }
+ }
+ tm->AddValue(b->GetName(), m, s, b->GetTitle(), res[it>13], notifiable);
}
tm->Terminate();