+#ifndef __CINT__
#include "TFile.h"
#include "TTree.h"
#include "TH1D.h"
#include "TCanvas.h"
#include "TStyle.h"
+#include "AliDAQ.h"
+#endif
#include "map"
using namespace std;
// TODO read number of bits from AliVEvent?
#define NBITS 29
+#define NMAXCLASSES 100
+
TString bitNames[NBITS] = {
"kMB",
"kINT7",
"kEMC7",
"kMUS7",
"kPHI1",
-"kPHI7/kPHI8",
+"kPHI78",
"kEMCEJE",
"kEMCEGA",
"kCentral",
"kSemiCentral",
"kDG5",
"kZED",
-"kSPI7/kSPI8",
+"kSPI78",
"kINT8",
"kMuonSingleLowPt8",
"kMuonSingleHighPt8",
};
void SetHisto(TH1D* h);
+void SetHisto(TH2D* h);
void AddFillSeparationLines(TH1D* h, map<Int_t,Int_t> &fills);
+//void periodLevelQA(TString inputFileName ="/afs/cern.ch/work/a/aliqaevs/www/data/2012/LHC12h/pass1/trending.root"){
void periodLevelQA(TString inputFileName ="trending.root"){
+ gStyle->SetOptStat(0);
+ gStyle->SetLineScalePS(1.5);
+ gStyle->SetPadGridX(0);
+ gStyle->SetPadGridY(1);
+
TFile* f = new TFile(inputFileName.Data());
TTree* t = (TTree*) f->Get("trending");
- Int_t run;
- Int_t fill = 0;
- Int_t nBCsPerOrbit = 0;
- Double_t duration = 0;
- Double_t mu = 0;
- Double_t lumi_seen = 0;
- UInt_t l0b = 0;
- Int_t all[NBITS];
- Int_t accepted[NBITS];
+ TObjArray* classes = new TObjArray();
+ TObjString* activeDetectors = new TObjString();
+ Int_t run = 0;
+ Int_t fill = 0;
+ Double_t run_duration = 0;
+ Int_t nBCsPerOrbit = 0;
+ Double_t refl0b = 0;
+ Double_t mu = 0;
+ Double_t lumi_seen = 0;
+ Double_t interactionRate = 0;
+ ULong64_t class_l0b[NMAXCLASSES] = {0};
+ ULong64_t class_l0a[NMAXCLASSES] = {0};
+ ULong64_t class_l1b[NMAXCLASSES] = {0};
+ ULong64_t class_l1a[NMAXCLASSES] = {0};
+ ULong64_t class_l2b[NMAXCLASSES] = {0};
+ ULong64_t class_l2a[NMAXCLASSES] = {0};
+ Double_t class_lifetime[NMAXCLASSES] = {0};
+ Double_t class_lumi[NMAXCLASSES] = {0};
+ ULong64_t alias_recorded[NBITS] = {0};
+ ULong64_t alias_reconstructed[NBITS] = {0};
+ ULong64_t alias_accepted[NBITS] = {0};
+ Double_t alias_l0b_rate[NBITS] = {0};
+ Double_t alias_lifetime[NBITS] = {0};
+ Double_t alias_lumi_recorded[NBITS] = {0};
+ Double_t alias_lumi_reconstructed[NBITS] = {0};
+ Double_t alias_lumi_accepted[NBITS] = {0};
t->SetBranchAddress("run",&run);
t->SetBranchAddress("fill",&fill);
t->SetBranchAddress("bcs",&nBCsPerOrbit);
- t->SetBranchAddress("duration",&duration);
+ t->SetBranchAddress("run_duration",&run_duration);
t->SetBranchAddress("mu",&mu);
- t->SetBranchAddress("l0b",&l0b);
- t->SetBranchAddress("all",&all);
- t->SetBranchAddress("accepted",&accepted);
+ t->SetBranchAddress("interactionRate",&interactionRate);
+ t->SetBranchAddress("refl0b",&refl0b);
t->SetBranchAddress("lumi_seen",&lumi_seen);
+ t->SetBranchAddress("classes",&classes);
+ t->SetBranchAddress("class_l0b",&class_l0b);
+ t->SetBranchAddress("class_l0a",&class_l0a);
+ t->SetBranchAddress("class_l1b",&class_l1b);
+ t->SetBranchAddress("class_l1a",&class_l1a);
+ t->SetBranchAddress("class_l2b",&class_l2b);
+ t->SetBranchAddress("class_l2a",&class_l2a);
+ t->SetBranchAddress("class_lifetime",&class_lifetime);
+ t->SetBranchAddress("class_lumi",&class_lumi);
+ t->SetBranchAddress("alias_recorded",&alias_recorded);
+ t->SetBranchAddress("alias_reconstructed",&alias_reconstructed);
+ t->SetBranchAddress("alias_accepted",&alias_accepted);
+ t->SetBranchAddress("alias_l0b_rate",&alias_lifetime);
+ t->SetBranchAddress("alias_lifetime",&alias_lifetime);
+ t->SetBranchAddress("alias_lumi_recorded",&alias_lumi_recorded);
+ t->SetBranchAddress("alias_lumi_reconstructed",&alias_lumi_reconstructed);
+ t->SetBranchAddress("alias_lumi_accepted",&alias_lumi_accepted);
+ t->SetBranchAddress("activeDetectors",&activeDetectors);
+
Int_t nRuns = t->GetEntries();
- map<Int_t,Int_t> fills;
- TH1D* hAll[NBITS];
- TH1D* hAccepted[NBITS] = {0x0};
- TH1D* hRejected[NBITS] = {0x0};
- TH1D* hAcceptedFraction[NBITS] = {0x0};
- TH1D* hRejectedFraction[NBITS] = {0x0};
+ TH2D* hClassL0BvsRun = new TH2D("hClassL0BVsRun","Class L0B vs run",nRuns,0,nRuns,1,0,1);
+ TH2D* hClassL2AvsRun = new TH2D("hClassL2AVsRun","Class L2A vs run",nRuns,0,nRuns,1,0,1);
+ TH2D* hClassLifetimeVsRun = new TH2D("hClassLifetimeVsRun","Lifetime class-by-class vs run",nRuns,0,nRuns,1,0,1);
+ TH2D* hClassLumiVsRun = new TH2D("hClassLumiVsRun","Luminosity class-by-class vs run",nRuns,0,nRuns,1,0,1);
+ hClassL0BvsRun->SetBit(TH1::kCanRebin);
+ hClassL2AvsRun->SetBit(TH1::kCanRebin);
+ hClassLifetimeVsRun->SetBit(TH1::kCanRebin);
+ hClassLumiVsRun->SetBit(TH1::kCanRebin);
+ for (Int_t r=0;r<nRuns;r++){
+ t->GetEntry(r);
+ printf("run=%i\n",run);
+ hClassL0BvsRun->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ hClassL2AvsRun->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ hClassLifetimeVsRun->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ hClassLumiVsRun->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ for (Int_t i=0;i<classes->GetEntriesFast();i++){
+ TString className = classes->At(i)->GetName();
+ if (className.Contains("-A-")) continue;
+ else if (className.Contains("-C-")) continue;
+ else if (className.Contains("-E-")) continue;
+ else if (className.Contains("-AC-")) continue;
+ else if (className.Contains("-ACE-")) continue;
+ else if (className.Contains("-GA-")) continue;
+ else if (className.Contains("-GC-")) continue;
+ else if (className.Contains("1A-ABCE-")) continue;
+ else if (className.Contains("1C-ABCE-")) continue;
+ else if (className.Contains("C0LSR-ABCE-")) continue;
+// printf("%30s %12lli %10lli %10lli %10lli %10lli %10lli\n",className.Data(),L0B[i],L0A[i],L1B[i],L1A[i],L2B[i],L2A[i]);
+ hClassL0BvsRun->Fill(Form("%i",run),className.Data(),Double_t(class_l0b[i]));
+ hClassL2AvsRun->Fill(Form("%i",run),className.Data(),Double_t(class_l2a[i]));
+ hClassLifetimeVsRun->Fill(Form("%i",run),className.Data(),class_lifetime[i]);
+ hClassLumiVsRun ->Fill(Form("%i",run),className.Data(),class_lumi[i]);
+ }
+ }
- gStyle->SetOptStat(0);
- gStyle->SetLineScalePS(1.5);
- gStyle->SetPadGridX(0);
- gStyle->SetPadGridY(1);
- TCanvas* dummy = new TCanvas("dummy","dummy",1800,500);
- gPad->SetMargin(0.05,0.01,0.18,0.06);
- gPad->Print("global_properties.pdf[");
- gPad->Print("accepted_event_statistics.pdf[");
- gPad->Print("accepted_fraction.pdf[");
- gPad->Print("rejected_fraction.pdf[");
+ hClassL0BvsRun->LabelsDeflate("Y");
+ hClassL2AvsRun->LabelsDeflate("Y");
+ hClassLifetimeVsRun->LabelsDeflate("Y");
+ hClassLumiVsRun->LabelsDeflate("Y");
+ map<Int_t,Int_t> fills;
+ TH1D* hRecorded[NBITS] = {0x0};
+ TH1D* hReconstructed[NBITS] = {0x0};
+ TH1D* hAccepted[NBITS] = {0x0};
+ TH1D* hRejected[NBITS] = {0x0};
+ TH1D* hAcceptedFraction[NBITS] = {0x0};
+ TH1D* hRejectedFraction[NBITS] = {0x0};
+ TH1D* hLumiRecorded[NBITS] = {0x0};
+ TH1D* hLumiReconstructed[NBITS] = {0x0};
+ TH1D* hLumiAccepted[NBITS] = {0x0};
+
+ TH2D* hActiveDetectors = new TH2D("hActiveDetectors","Active detectors",nRuns,0,nRuns,AliDAQ::kNDetectors,0,AliDAQ::kNDetectors);
+ TH1D* hInteractionRate = new TH1D("hInteractionRate","Minimum bias interaction rate [Hz]",nRuns,0,nRuns);
TH1D* hMu = new TH1D("hMu","Average number of minimum bias collisions per BC",nRuns,0,nRuns);
TH1D* hBCs = new TH1D("hBCs","Number of colliding bunches",nRuns,0,nRuns);
TH1D* hDuration = new TH1D("hDuration","Duration, s",nRuns,0,nRuns);
TH1D* hLumiSeen = new TH1D("hLumiSeen","Luminosity seen, nb-1",nRuns,0,nRuns);
+ for (Int_t iDet=0;iDet<AliDAQ::kNDetectors;iDet++) {
+// if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("HLT")) continue;
+// else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("TRG")) continue;
+// else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("MFT")) continue;
+// else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("FIT")) continue;
+// else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("CPV")) continue;
+// else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("DAQ_TEST")) continue;
+ hActiveDetectors->GetYaxis()->SetBinLabel(iDet+1,AliDAQ::DetectorName(iDet));
+ }
+
for (Int_t r=0;r<nRuns;r++){
t->GetEntry(r);
+ hActiveDetectors->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ hInteractionRate->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
hMu->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
hBCs->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
hDuration->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
hLumiSeen->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ for (Int_t iDet=0;iDet<AliDAQ::kNDetectors;iDet++) {
+// if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("HLT")) continue;
+// else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("TRG")) continue;
+// else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("MFT")) continue;
+// else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("FIT")) continue;
+// else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("CPV")) continue;
+// else if (!TString(AliDAQ::DetectorName(iDet)).CompareTo("DAQ_TEST")) continue;
+ hActiveDetectors->Fill(Form("%i",run),AliDAQ::DetectorName(iDet),activeDetectors->String().Contains(AliDAQ::DetectorName(iDet)));
+ }
+ hInteractionRate->SetBinContent(r+1,interactionRate);
hMu->SetBinContent(r+1,mu);
hBCs->SetBinContent(r+1,nBCsPerOrbit);
- hDuration->SetBinContent(r+1,duration);
- hLumiSeen->SetBinContent(r+1,lumi_seen/1000.);
+ hDuration->SetBinContent(r+1,run_duration);
+ hLumiSeen->SetBinContent(r+1,lumi_seen);
fills[run]=fill;
}
+
+ TFile* fclassL0B = new TFile("class_L0B_counts.root","recreate");
+ TCanvas* cClassL0B = new TCanvas("cClassL0B","Class L0B vs run",1800,900);
+ gPad->SetMargin(0.15,0.01,0.08,0.06);
+ SetHisto(hClassL0BvsRun);
+ hClassL0BvsRun->Draw("col");
+ gPad->Print("class_L0B_counts.pdf(");
+ hClassL0BvsRun->Write();
+ TCanvas* cL0B = new TCanvas("cL0B","L0B vs run",1800,500);
+ cL0B->SetMargin(0.05,0.01,0.18,0.06);
+ for (Int_t i=1;i<=hClassL0BvsRun->GetNbinsY();i++){
+ TH1D* h = (TH1D*) hClassL0BvsRun->ProjectionX(Form("hClassL0BvsRun_%02i",i),i,i);
+ h->SetTitle(Form("%s L0B counts: %.0f",hClassL0BvsRun->GetYaxis()->GetBinLabel(i),h->Integral()));
+ SetHisto(h);
+ h->Draw();
+ AddFillSeparationLines(h,fills);
+ gPad->Print("class_L0B_counts.pdf");
+ h->Write();
+ }
+ gPad->Print("class_L0B_counts.pdf]");
+ fclassL0B->Close();
+
+ TFile* fclassL2A = new TFile("class_L2A_counts.root","recreate");
+ TCanvas* cClassL2A = new TCanvas("cClassL2A","Class L2A vs run",1800,900);
+ gPad->SetMargin(0.15,0.01,0.08,0.06);
+ SetHisto(hClassL2AvsRun);
+ hClassL2AvsRun->Draw("col");
+ gPad->Print("class_L2A_counts.pdf(");
+ hClassL2AvsRun->Write();
+ TCanvas* cL2A = new TCanvas("cL2A","L2A vs run",1800,500);
+ cL2A->SetMargin(0.05,0.01,0.18,0.06);
+ for (Int_t i=1;i<=hClassL2AvsRun->GetNbinsY();i++){
+ TH1D* h = (TH1D*) hClassL2AvsRun->ProjectionX(Form("hClassL2AvsRun_%02i",i),i,i);
+ h->SetTitle(Form("%s L2A counts: %.0f",hClassL2AvsRun->GetYaxis()->GetBinLabel(i),h->Integral()));
+ SetHisto(h);
+ h->Draw();
+ AddFillSeparationLines(h,fills);
+ gPad->Print("class_L2A_counts.pdf");
+ h->Write();
+ }
+ gPad->Print("class_L2A_counts.pdf]");
+ fclassL2A->Close();
+
+ TFile* fclassLifetime = new TFile("class_lifetime.root","recreate");
+ TCanvas* cClassLifetime = new TCanvas("cClassLifetime","Lifetime class-by-class vs run",1800,900);
+ gPad->SetMargin(0.15,0.01,0.08,0.06);
+ SetHisto(hClassLifetimeVsRun);
+ hClassLifetimeVsRun->Draw("col");
+ gPad->Print("class_lifetime.pdf(");
+ hClassLifetimeVsRun->Write();
+ TCanvas* cL2A = new TCanvas("cLifetime","Lifetime vs run",1800,500);
+ cL2A->SetMargin(0.05,0.01,0.18,0.06);
+ for (Int_t i=1;i<=hClassLifetimeVsRun->GetNbinsY();i++){
+ TH1D* h = (TH1D*) hClassLifetimeVsRun->ProjectionX(Form("hClassLifetimeVsRun_%02i",i),i,i);
+ h->SetTitle(Form("%s lifetime",hClassLifetimeVsRun->GetYaxis()->GetBinLabel(i)));
+ SetHisto(h);
+ h->SetFillColor(0);
+ h->Draw("");
+ AddFillSeparationLines(h,fills);
+ gPad->Print("class_lifetime.pdf");
+ h->Write();
+ }
+ gPad->Print("class_lifetime.pdf]");
+ fclassLifetime->Close();
+
+ TFile* fclassLumi = new TFile("class_lumi.root","recreate");
+ TCanvas* cClassLumi = new TCanvas("cClassLumi","Luminosity class-by-class vs run",1800,900);
+ gPad->SetMargin(0.15,0.01,0.08,0.06);
+ SetHisto(hClassLumiVsRun);
+ hClassLumiVsRun->Draw("col");
+ gPad->Print("class_lumi.pdf(");
+ TCanvas* clumi = new TCanvas("clumi","lumi vs run",1800,500);
+ clumi->SetMargin(0.05,0.01,0.18,0.06);
+
+ for (Int_t i=1;i<=hClassLumiVsRun->GetNbinsY();i++){
+ TH1D* h = (TH1D*) hClassLumiVsRun->ProjectionX(Form("hClassLumiVsRun_%02i",i),i,i);
+ h->SetTitle(Form("%s luminosity [ub-1]: %.0g",hClassLumiVsRun->GetYaxis()->GetBinLabel(i),h->Integral()));
+ SetHisto(h);
+ h->Draw();
+ AddFillSeparationLines(h,fills);
+ gPad->Print("class_lumi.pdf");
+ }
+ gPad->Print("class_lumi.pdf]");
+ fclassLumi->Close();
+
+ SetHisto(hActiveDetectors);
+ SetHisto(hInteractionRate);
SetHisto(hMu);
SetHisto(hBCs);
SetHisto(hDuration);
SetHisto(hLumiSeen);
+
+ TCanvas* cActiveDetectors = new TCanvas("active_detectors","Active Detectors",1800,500);
+ cActiveDetectors->SetMargin(0.05,0.01,0.18,0.06);
+ hActiveDetectors->GetYaxis()->SetLabelOffset(0.001);
+ hActiveDetectors->SetMaximum(2);
+ hActiveDetectors->Draw("col");
+ AddFillSeparationLines(hMu,fills);
+ gPad->Print("global_properties.pdf(");
+
+ TCanvas* cInteractionRate = new TCanvas("cInteractionRate","Interaction Rate",1800,500);
+ cInteractionRate->SetMargin(0.05,0.01,0.18,0.06);
+ hInteractionRate->SetFillColor(0);
+ hInteractionRate->Draw();
+ AddFillSeparationLines(hMu,fills);
+ gPad->Print("global_properties.pdf");
+
TCanvas* cMu = new TCanvas("mu","mu",1800,500);
cMu->SetMargin(0.05,0.01,0.18,0.06);
+ hMu->SetFillColor(0);
hMu->Draw("h");
AddFillSeparationLines(hMu,fills);
gPad->Print("global_properties.pdf");
TCanvas* cBCs = new TCanvas("bcs","bcs",1800,500);
cBCs->SetMargin(0.05,0.01,0.18,0.06);
+ hBCs->SetFillColor(0);
hBCs->Draw("h");
AddFillSeparationLines(hBCs,fills);
gPad->Print("global_properties.pdf");
TCanvas* cLumiSeen = new TCanvas("lumiseen","lumi seen",1800,500);
cLumiSeen->SetMargin(0.05,0.01,0.18,0.06);
- hLumiSeen->SetTitle(Form("Luminosity seen [1/ub]: total= %.0f",hLumiSeen->Integral()));
+ hLumiSeen->SetTitle(Form("Luminosity seen [1/ub]: total= %.0g",hLumiSeen->Integral()));
hLumiSeen->Draw("h");
AddFillSeparationLines(hLumiSeen,fills);
- gPad->Print("global_properties.pdf");
+ gPad->Print("global_properties.pdf)");
+ TCanvas* dummy = new TCanvas("dummy","dummy",1800,500);
+ gPad->SetMargin(0.05,0.01,0.18,0.06);
+ gPad->Print("alias_event_statistics.pdf[");
+ gPad->Print("alias_lumi_statistics.pdf[");
+ gPad->Print("accepted_fraction.pdf[");
+ gPad->Print("rejected_fraction.pdf[");
- dummy->Print("global_properties.pdf]");
+ TCanvas* cCounts = new TCanvas("c_alias_counts" ,"c_alias_counts" ,1800,500);
+ TCanvas* cLumi = new TCanvas("c_lumi" ,"c_lumi" ,1800,500);
+ TCanvas* cAcceptedFraction = new TCanvas("accepted_fraction","accepted fraction",1800,500);
+ TCanvas* cRejectedFraction = new TCanvas("rejected_fraction","rejected fraction",1800,500);
+ cCounts ->SetMargin(0.05,0.01,0.18,0.06);
+ cLumi ->SetMargin(0.05,0.01,0.18,0.06);
+ cAcceptedFraction->SetMargin(0.05,0.01,0.18,0.06);
+ cRejectedFraction->SetMargin(0.05,0.01,0.18,0.06);
+ cRejectedFraction->SetLogy();
for (Int_t ibit=0;ibit<NBITS;ibit++) {
- printf("bit=%i\n",ibit);
const char* bitName = bitNames[ibit];
- hAll[ibit] = new TH1D(Form("hAll%02i" ,ibit),Form("All: %s" ,bitName),nRuns,0,nRuns);
- hAccepted[ibit] = new TH1D(Form("hAccepted%02i",ibit),Form("Accepted: %s",bitName),nRuns,0,nRuns);
- hRejected[ibit] = new TH1D(Form("hRejected%02i",ibit),Form("Rejected: %s",bitName),nRuns,0,nRuns);
+
+ hRecorded[ibit] = new TH1D(Form("hRecorded%02i" ,ibit),Form("Recorded: %s" ,bitName),nRuns,0,nRuns);
+ hReconstructed[ibit] = new TH1D(Form("hReconstructed%02i" ,ibit),Form("Reconstructed: %s" ,bitName),nRuns,0,nRuns);
+ hAccepted[ibit] = new TH1D(Form("hAccepted%02i" ,ibit),Form("Accepted: %s" ,bitName),nRuns,0,nRuns);
+ hRejected[ibit] = new TH1D(Form("hRejected%02i" ,ibit),Form("Rejected: %s" ,bitName),nRuns,0,nRuns);
+ hLumiRecorded[ibit] = new TH1D(Form("hLumiRecorded%02i" ,ibit),Form("Lumi recorded: %s" ,bitName),nRuns,0,nRuns);
+ hLumiReconstructed[ibit] = new TH1D(Form("hLumiReconstructed%02i",ibit),Form("Lumi reconstructed: %s",bitName),nRuns,0,nRuns);
+ hLumiAccepted[ibit] = new TH1D(Form("hLumiAccepted%02i" ,ibit),Form("Lumi accepted: %s" ,bitName),nRuns,0,nRuns);
+
for (Int_t r=0;r<nRuns;r++){
t->GetEntry(r);
- hAll[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
- hAccepted[ibit]->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
- hRejected[ibit]->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
- hAll[ibit]->SetBinContent(r+1,all[ibit]);
- if (all[ibit]) hAccepted[ibit]->SetBinContent(r+1,accepted[ibit]);
- if (all[ibit]) hRejected[ibit]->SetBinContent(r+1,all[ibit]-accepted[ibit]);
+ hRecorded[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ hReconstructed[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ hAccepted[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ hRejected[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ hLumiRecorded[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ hLumiReconstructed[ibit]->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+ hLumiAccepted[ibit] ->GetXaxis()->SetBinLabel(r+1,Form("%i",run));
+// printf("recorded = %i",alias_recorded[ibit]);
+// printf("reconstructed = %i",alias_reconstructed[ibit]);
+ hRecorded[ibit] ->SetBinContent(r+1,alias_recorded[ibit]);
+ hReconstructed[ibit] ->SetBinContent(r+1,alias_reconstructed[ibit]);
+ hAccepted[ibit] ->SetBinContent(r+1,alias_accepted[ibit]);
+ hRejected[ibit] ->SetBinContent(r+1,alias_reconstructed[ibit]-alias_accepted[ibit]);
+ hLumiRecorded[ibit] ->SetBinContent(r+1,alias_lumi_recorded[ibit]);
+ hLumiReconstructed[ibit]->SetBinContent(r+1,alias_lumi_reconstructed[ibit]);
+ hLumiAccepted[ibit] ->SetBinContent(r+1,alias_lumi_accepted[ibit]);
}
- if (hAll[ibit]->Integral()<1) continue;
- SetHisto(hAll[ibit]);
+ if (hRecorded[ibit]->Integral()<1) continue;
+ printf("bit=%i %s\n",ibit,bitName);
+
+ SetHisto(hRecorded[ibit]);
+ SetHisto(hReconstructed[ibit]);
SetHisto(hAccepted[ibit]);
SetHisto(hRejected[ibit]);
- hAll[ibit]->Sumw2();
+ SetHisto(hLumiRecorded[ibit]);
+ SetHisto(hLumiReconstructed[ibit]);
+ SetHisto(hLumiAccepted[ibit]);
+ hRecorded[ibit]->Sumw2();
+ hReconstructed[ibit]->Sumw2();
hAccepted[ibit]->Sumw2();
hRejected[ibit]->Sumw2();
- hAll[ibit]->SetLineColor(kBlue);
- hAll[ibit]->SetFillColor(kBlue);
+ hRecorded[ibit]->SetLineColor(kRed+2);
+ hRecorded[ibit]->SetFillColor(kRed+2);
+ hReconstructed[ibit]->SetLineColor(kBlue);
+ hReconstructed[ibit]->SetFillColor(kBlue);
hAccepted[ibit]->SetLineColor(kGreen+2);
hAccepted[ibit]->SetFillColor(kGreen+2);
- hAcceptedFraction[ibit] = (TH1D*) hAll[ibit]->Clone(Form("hAcceptedFraction%02i",ibit));
+ hLumiRecorded[ibit]->SetLineColor(kRed+2);
+ hLumiRecorded[ibit]->SetFillColor(kRed+2);
+ hLumiReconstructed[ibit]->SetLineColor(kBlue);
+ hLumiReconstructed[ibit]->SetFillColor(kBlue);
+ hLumiAccepted[ibit]->SetLineColor(kGreen+2);
+ hLumiAccepted[ibit]->SetFillColor(kGreen+2);
+
+ cCounts->cd();
+ hRecorded[ibit]->SetTitle(Form("%s trigger counts: recorded=%0.f, total=%.0f, accepted=%.0f",bitName,hRecorded[ibit]->Integral(),hReconstructed[ibit]->Integral(),hAccepted[ibit]->Integral()));
+ hRecorded[ibit]->Draw("h");
+ hReconstructed[ibit]->Draw("h same");
+ hAccepted[ibit]->Draw("h same");
+ AddFillSeparationLines(hAccepted[ibit],fills);
+ gPad->RedrawAxis();
+ gPad->Print("alias_event_statistics.pdf");
+
+ cLumi->cd();
+ hLumiRecorded[ibit]->SetTitle(Form("%s luminosity [ub-1]: recorded=%.0g, total=%.0g, accepted=%.0g",bitName,hLumiRecorded[ibit]->Integral(),hLumiReconstructed[ibit]->Integral(),hLumiAccepted[ibit]->Integral()));
+ hLumiRecorded[ibit]->Draw("h");
+ hLumiReconstructed[ibit]->Draw("h same");
+ hLumiAccepted[ibit]->Draw("h same");
+ AddFillSeparationLines(hLumiAccepted[ibit],fills);
+ gPad->RedrawAxis();
+ gPad->Print("alias_lumi_statistics.pdf");
+
+ if (hReconstructed[ibit]->Integral()<1) continue;
+ hAcceptedFraction[ibit] = (TH1D*) hReconstructed[ibit]->Clone(Form("hAcceptedFraction%02i",ibit));
hAcceptedFraction[ibit]->SetTitle(Form("Accepted fraction: %s",bitName));
- hAcceptedFraction[ibit]->Divide(hAccepted[ibit],hAll[ibit],1,1,"B");
+ hAcceptedFraction[ibit]->Divide(hAccepted[ibit],hReconstructed[ibit],1,1,"B");
hAcceptedFraction[ibit]->SetFillColor(0);
hAcceptedFraction[ibit]->SetLineWidth(2);
- hRejectedFraction[ibit] = (TH1D*) hAll[ibit]->Clone(Form("hRejectedFraction%02i",ibit));
+ hRejectedFraction[ibit] = (TH1D*) hReconstructed[ibit]->Clone(Form("hRejectedFraction%02i",ibit));
hRejectedFraction[ibit]->SetTitle(Form("Rejected fraction: %s",bitName));
- hRejectedFraction[ibit]->Divide(hRejected[ibit],hAll[ibit],1,1,"B");
+ hRejectedFraction[ibit]->Divide(hRejected[ibit],hReconstructed[ibit],1,1,"B");
hRejectedFraction[ibit]->SetFillColor(0);
hRejectedFraction[ibit]->SetLineWidth(2);
-
- TCanvas* cAll = new TCanvas(Form("all_%s",bitName),Form("All: %s",bitName),1800,500);
- cAll->SetMargin(0.05,0.01,0.18,0.06);
- hAll[ibit]->SetTitle(Form("%s: total=%.0f accepted=%.0f",bitName,hAll[ibit]->Integral(),hAccepted[ibit]->Integral()));
- hAll[ibit]->Draw("h");
- hAccepted[ibit]->Draw("h same");
- AddFillSeparationLines(hAccepted[ibit],fills);
- gPad->RedrawAxis();
- gPad->Print("accepted_event_statistics.pdf");
-
- TCanvas* cAcceptedFraction = new TCanvas(Form("accepted_fraction_%s",bitName),Form("Accepted Fraction: %s",bitName),1800,500);
- cAcceptedFraction->SetMargin(0.05,0.01,0.18,0.06);
- hAcceptedFraction[ibit]->SetTitle(Form("%s: average accepted fraction = %.3f",bitName,hAccepted[ibit]->Integral()/hAll[ibit]->Integral()));
+
+ cAcceptedFraction->cd();
+ hAcceptedFraction[ibit]->SetTitle(Form("%s: average accepted fraction = %.3f",bitName,hAccepted[ibit]->Integral()/hReconstructed[ibit]->Integral()));
hAcceptedFraction[ibit]->Draw();
AddFillSeparationLines(hAcceptedFraction[ibit],fills);
gPad->Print("accepted_fraction.pdf");
- TCanvas* cRejectedFraction = new TCanvas(Form("rejected_fraction_%s",bitName),Form("Rejected Fraction: %s",bitName),1800,500);
- cRejectedFraction->SetMargin(0.05,0.01,0.18,0.06);
- hRejectedFraction[ibit]->SetTitle(Form("%s: average rejected fraction = %.3f",bitName,hRejected[ibit]->Integral()/hAll[ibit]->Integral()));
+ cRejectedFraction->cd();
+ hRejectedFraction[ibit]->SetMaximum(1);
+ hRejectedFraction[ibit]->SetTitle(Form("%s: average rejected fraction = %.3f",bitName,hRejected[ibit]->Integral()/hReconstructed[ibit]->Integral()));
hRejectedFraction[ibit]->Draw();
AddFillSeparationLines(hRejectedFraction[ibit],fills);
gPad->Print("rejected_fraction.pdf");
}
- dummy->Print("accepted_event_statistics.pdf]");
+ dummy->Print("alias_event_statistics.pdf]");
+ dummy->Print("alias_lumi_statistics.pdf]");
dummy->Print("accepted_fraction.pdf]");
dummy->Print("rejected_fraction.pdf]");
TFile* fstat = new TFile("accepted_event_statistics.root","recreate");
for (Int_t ibit=0;ibit<NBITS;ibit++) {
- if (hAll[ibit]) hAll[ibit]->Write();
- if (hAccepted[ibit]) hAccepted[ibit]->Write();
+ if (hRecorded[ibit]) hRecorded[ibit]->Write();
+ if (hReconstructed[ibit]) hReconstructed[ibit]->Write();
+ if (hAccepted[ibit]) hAccepted[ibit]->Write();
}
fstat->Close();
TFile* faccepted = new TFile("accepted_fraction.root","recreate");
for (Int_t ibit=0;ibit<NBITS;ibit++) {
- if (hRejectedFraction[ibit]) hRejectedFraction[ibit]->Write();
+ if (hAcceptedFraction[ibit]) hAcceptedFraction[ibit]->Write();
}
faccepted->Close();
h->GetYaxis()->SetTickLength(0.01);
h->GetYaxis()->SetTitleOffset(0.6);
h->GetYaxis()->SetDecimals(1);
+ h->SetLineColor(kBlue);
+ h->SetFillColor(kBlue);
h->LabelsOption("av");
h->SetLineWidth(2);
+ h->SetMinimum(0);
+}
+
+void SetHisto(TH2D* h){
+ h->SetTitleFont(43);
+ h->SetTitleSize(15);
+ h->GetYaxis()->SetTitleFont(43);
+ h->GetXaxis()->SetLabelFont(43);
+ h->GetYaxis()->SetLabelFont(43);
+ h->GetZaxis()->SetLabelFont(43);
+ h->GetYaxis()->SetTitleSize(25);
+ h->GetXaxis()->SetLabelSize(15);
+ h->GetYaxis()->SetLabelSize(15);
+ h->GetZaxis()->SetLabelSize(15);
+ h->GetYaxis()->SetTickLength(0.01);
+ h->GetYaxis()->SetDecimals(1);
+ h->GetXaxis()->LabelsOption("av");
+ h->GetYaxis()->LabelsOption("a");
+ h->SetLineWidth(2);
h->SetLineColor(kBlue);
h->SetMinimum(0);
}
// TODO read number of bits from AliVEvent?
#define NBITS 29
+#define NMAXCLASSES 100
TString bitNames[NBITS] = {
"kMB",
"kINT7",
"kEMC7",
"kMUS7",
"kPHI1",
-"kPHI7/kPHI8",
+"kPHI78",
"kEMCEJE",
"kEMCEGA",
"kCentral",
"kSemiCentral",
"kDG5",
"kZED",
-"kSPI7/kSPI8",
+"kSPI78",
"kINT8",
"kMuonSingleLowPt8",
"kMuonSingleHighPt8",
};
-Int_t runLevelEventStatQA(TString qafilename="/data/alice/2010/LHC10b/000114783/pass4/QA_merge_archive.zip#event_stat.root", Int_t run=114783, TString ocdbStorage = "raw://"){
+//Int_t runLevelEventStatQA(TString qafilename="/data/alice/2013/LHC13f/000197348/pass2/QA_merge_archive.zip#event_stat.root", Int_t run=197348, TString ocdbStorage = "local:///data/alice/OCDB"){
+//Int_t runLevelEventStatQA(TString qafilename="/data/alice/2011/LHC11a/000146805/pass4_with_SDD/QA_merge_archive.zip#event_stat.root", Int_t run=146805, TString ocdbStorage = "local:///data/alice/OCDB"){
+//Int_t runLevelEventStatQA(TString qafilename="/data/alice/2013/LHC13g/000197584/pass1/QA_merge_archive.zip#event_stat.root", Int_t run=114783, TString ocdbStorage = "raw://"){
+//Int_t runLevelEventStatQA(TString qafilename="/data/alice/2012/LHC12b/000177789/pass1/QA_merge_archive.zip#event_stat.root", Int_t run=177789, TString ocdbStorage = "local:///data/alice/OCDB"){
+//Int_t runLevelEventStatQA(TString qafilename="/data/alice/2010/LHC10b/000114751/pass4/QA_merge_archive.zip#event_stat.root", Int_t run=114751, TString ocdbStorage = "local:///data/alice/OCDB"){
+//Int_t runLevelEventStatQA(TString qafilename="/data/alice/2012/LHC12d/000184719/pass1/QA_merge_archive.zip#event_stat.root", Int_t run=184719, TString ocdbStorage = "local:///data/alice/OCDB"){
+//Int_t runLevelEventStatQA(TString qafilename="/data/alice/2012/LHC12h/000189694/pass1/QA_merge_archive.zip#event_stat.root", Int_t run=189694, TString ocdbStorage = "local:///data/alice/OCDB"){
+//Int_t runLevelEventStatQA(TString qafilename="/data/alice/sim/2014/LHC14j5/138192/QA_merge_archive.zip#event_stat.root", Int_t run=138192, TString ocdbStorage = "local:///data/alice/OCDB"){
+// Int_t runLevelEventStatQA(TString qafilename="/alice/data/2010/LHC10d/000124360/pass4/QA_merge_archive.zip#event_stat.root", Int_t run=124360, TString ocdbStorage = "local:///alice/data/OCDB"){
+ Int_t runLevelEventStatQA(TString qafilename="/alice/data/2010/LHC10f/000133007/pass4/QA_merge_archive.zip#event_stat.root", Int_t run=133007, TString ocdbStorage = "local:///alice/data/OCDB"){
printf("runLevelEventStatQA %s %i\n",qafilename.Data(),run);
gStyle->SetOptStat(0);
gStyle->SetLineScalePS(1.5);
gStyle->SetPadLeftMargin(0.07);
TFile* fin = new TFile(qafilename);
- fin->ls();
- fin->cd("trigger_histograms_+CINT1B-ABCE-NOPF-ALL,CINT1-B-NOPF-ALLNOTRD &1 *0");
- fin->ls();
-// TH1F* fHistV0A = (TH1F*) gDirectory->Get("fHistV0A");
-// fHistV0A->Draw();
-// return 0;
TH2D* h = (TH2D*) fin->Get("fHistStatistics");
if (!h) { printf("fHistStatistics not found\n"); return 1; }
// tree variables
- Int_t all[NBITS] = {0};
- Int_t accepted[NBITS] = {0};
- Int_t fill=0;
- Double_t duration=0;
- UInt_t l0b=0;
- Int_t nBCsPerOrbit=0;
- Double_t mu=0;
- Double_t lumi_seen=0;
+ TObjArray classes = TObjArray();
+ TObjString activeDetectors = TObjString();
+ Int_t fill = 0;
+ Double_t run_duration = 0;
+ Int_t nBCsPerOrbit = 0;
+ Double_t refl0b = 0;
+ Double_t mu = 0;
+ Double_t lumi_seen = 0;
+ Double_t interactionRate = 0;
+ ULong64_t class_l0b[NMAXCLASSES] = {0};
+ ULong64_t class_l0a[NMAXCLASSES] = {0};
+ ULong64_t class_l1b[NMAXCLASSES] = {0};
+ ULong64_t class_l1a[NMAXCLASSES] = {0};
+ ULong64_t class_l2b[NMAXCLASSES] = {0};
+ ULong64_t class_l2a[NMAXCLASSES] = {0};
+ Double_t class_lifetime[NMAXCLASSES] = {0};
+ Double_t class_lumi[NMAXCLASSES] = {0};
+ ULong64_t alias_recorded[NBITS] = {0};
+ ULong64_t alias_reconstructed[NBITS] = {0};
+ ULong64_t alias_accepted[NBITS] = {0};
+ Double_t alias_l0b_rate[NBITS] = {0};
+ Double_t alias_lifetime[NBITS] = {0};
+ Double_t alias_lumi_recorded[NBITS] = {0};
+ Double_t alias_lumi_reconstructed[NBITS] = {0};
+ Double_t alias_lumi_accepted[NBITS] = {0};
TString refClass="";
Double_t refSigma=-1;
- if ( run<=118501) { refSigma= 62.; refClass = "CINT1B-ABCE-NOPF-ALL"; } // pp_7.00: 62mb=54.3mb*1.15=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
- else if (run>=118502 && run<=121040) { refSigma= 47.; refClass = "CINT1B-ABCE-NOPF-ALL"; } // pp_0.90: 47mb=52 mb *0.91=sigma(INEL)*R(INT1/INEL) (arxiv: 1208.4968, fig.10 + table 3)
- else if (run>=121041 && run<=126437) { refSigma= 62.; refClass = "CINT1B-ABCE-NOPF-ALL"; } // pp_7.00: 62mb=54.3mb*1.15=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
- else if (run>=126438 && run<=127718) { refSigma= 62.; refClass = "CINT1-B-NOPF-ALLNOTRD"; } // pp_7.00: 62mb=54.3mb*1.15=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
- else if (run>=127719 && run<=127730) { refSigma= 62.; refClass = "CINT1B-ABCE-NOPF-ALL"; } // pp_7.00: 62mb=54.3mb*1.15=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
- else if (run>=127731 && run<=136848) { refSigma= 62.; refClass = "CINT1-B-NOPF-ALLNOTRD"; } // pp_7.00: 62mb=54.3mb*1.15=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
- else if (run>=136849 && run<=139316) { refSigma=5970.; refClass = "C0SMH-B-NOPF-ALL"; } // PbPb_2.76: (Oyama,2011-05-20,RunCond)
- else if (run>=139328 && run<=139517) { refSigma=5970.; refClass = "C0SMH-B-NOPF-ALLNOTRD"; } // PbPb_2.76: (Oyama,2011-05-20,RunCond)
- else if (run>=145289 && run<=146860) { refSigma= 57.; refClass = "CINT1-B-NOPF-ALLNOTRD"; } // pp_2.76: 57mb=47.7mb*1.20=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
- else if (run>=146808 && run<=146814) { refSigma= 57.; refClass = "CINT1-B-NOPF-ALL"; } // pp_2.76: 57mb=47.7mb*1.20=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
- else if (run>=145815 && run<=146856) { refSigma= 57.; refClass = "CINT1-B-NOPF-ALLNOTRD"; } // pp_2.76: 57mb=47.7mb*1.20=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
- else if (run>=146857 && run<=146857) { refSigma= 57.; refClass = "CINT1-B-NOPF-ALL"; } // pp_2.76: 57mb=47.7mb*1.20=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
- else if (run>=146858 && run<=146860) { refSigma= 57.; refClass = "CINT1-B-NOPF-ALLNOTRD"; } // pp_2.76: 57mb=47.7mb*1.20=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
- else if (run>=148370 && run<=157078) { refSigma= 54.; refClass = "CVBAND-B-NOPF-ALLNOTRD"; } // pp_7.00: 54.3mb (Martino,2012-03-12,RunCond)
- else if (run>=157079 && run<=165746) { refSigma= 24.; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_7.00: 24mb=54.3mb*0.44=sigma(VBAND)*R(0TVX/VBAND) (Martino,2012-03-12,RunCond)
- else if (run>=166477 && run<=170593) { refSigma=4100.; refClass = "CVLN-B-NOPF-ALLNOTRD"; } // PbPb_2.76: (Martino,2013-03-15,RunCond)
- else if (run>=176658 && run<=177143) { refSigma= 25.; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
- else if (run>=177146 && run<=177147) { refSigma= 25.; refClass = "C0TVX-B-NOPF-CENTNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
- else if (run>=177148 && run<=177149) { refSigma= 25.; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
- else if (run>=177150 && run<=177506) { refSigma= 25.; refClass = "C0TVX-B-NOPF-CENTNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
- else if (run>=177580 && run<=178220) { refSigma= 25.; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
- else if (run>=179444 && run<=193692) { refSigma= 25.; refClass = "C0TVX-S-NOPF-ALLNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
- else if (run>=193693 && run<=193766) { refSigma= 25.; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
- else if (run>=195344 && run<=197388) { refSigma=1590.; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pPb_5.02: arxiv:1405.1849
- else if (run>=197470 && run<=197692) { refSigma= 18.; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_2.76: 18mb=47.7mb*0.39=sigma(VBAND)*R(0TVX/VBAND) (Martino,2012-03-12,RunCond)
+ Double_t refEff = 1.;
+ if ( run<=118501) { refSigma= 62.; refEff = 1.00; refClass = "CINT1B-ABCE-NOPF-ALL"; } // pp_7.00: 62mb=54.3mb*1.15=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=118502 && run<=118561) { refSigma= 47.; refEff = 1.00; refClass = "CINT1B-ABCE-NOPF-ALL"; } // pp_0.90: 47mb=52 mb *0.91=sigma(INEL)*R(INT1/INEL) (arxiv: 1208.4968, fig.10 + table 3)
+ else if (run>=118903 && run<=120829) { refSigma= 62.; refEff = 1.00; refClass = "CINT1B-ABCE-NOPF-ALL"; } // pp_7.00: 62mb=54.3mb*1.15=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=121039 && run<=121040) { refSigma= 47.; refEff = 1.00; refClass = "CINT1B-ABCE-NOPF-ALL"; } // pp_0.90: 47mb=52 mb *0.91=sigma(INEL)*R(INT1/INEL) (arxiv: 1208.4968, fig.10 + table 3)
+ else if (run>=121041 && run<=126437) { refSigma= 62.; refEff = 1.00; refClass = "CINT1B-ABCE-NOPF-ALL"; } // pp_7.00: 62mb=54.3mb*1.15=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=126438 && run<=127718) { refSigma= 62.; refEff = 1.00; refClass = "CINT1-B-NOPF-ALLNOTRD"; } // pp_7.00: 62mb=54.3mb*1.15=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=127719 && run<=127730) { refSigma= 62.; refEff = 1.00; refClass = "CINT1B-ABCE-NOPF-ALL"; } // pp_7.00: 62mb=54.3mb*1.15=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=127731 && run<=136848) { refSigma= 62.; refEff = 1.00; refClass = "CINT1-B-NOPF-ALLNOTRD"; } // pp_7.00: 62mb=54.3mb*1.15=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=136849 && run<=139316) { refSigma=5970.; refEff = 0.78; refClass = "C0SMH-B-NOPF-ALL"; } // PbPb_2.76: (Oyama,2011-05-20,RunCond), sigma_hardronic = 7.64 b
+ else if (run>=139328 && run<=139517) { refSigma=5970.; refEff = 0.78; refClass = "C0SMH-B-NOPF-ALLNOTRD"; } // PbPb_2.76: (Oyama,2011-05-20,RunCond), sigma_hardronic = 7.64 b
+ else if (run>=145289 && run<=146860) { refSigma= 57.; refEff = 1.00; refClass = "CINT1-B-NOPF-ALLNOTRD"; } // pp_2.76: 57mb=47.7mb*1.20=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=146808 && run<=146814) { refSigma= 57.; refEff = 1.00; refClass = "CINT1-B-NOPF-ALL"; } // pp_2.76: 57mb=47.7mb*1.20=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=145815 && run<=146856) { refSigma= 57.; refEff = 1.00; refClass = "CINT1-B-NOPF-ALLNOTRD"; } // pp_2.76: 57mb=47.7mb*1.20=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=146857 && run<=146857) { refSigma= 57.; refEff = 1.00; refClass = "CINT1-B-NOPF-ALL"; } // pp_2.76: 57mb=47.7mb*1.20=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=146858 && run<=146860) { refSigma= 57.; refEff = 1.00; refClass = "CINT1-B-NOPF-ALLNOTRD"; } // pp_2.76: 57mb=47.7mb*1.20=sigma(VBAND)*R(INT1/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=148370 && run<=157078) { refSigma= 54.; refEff = 1.00; refClass = "CVBAND-B-NOPF-ALLNOTRD"; } // pp_7.00: 54.3mb (Martino,2012-03-12,RunCond)
+ else if (run>=157079 && run<=165746) { refSigma= 24.; refEff = 0.44; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_7.00: 24mb=54.3mb*0.44=sigma(VBAND)*R(0TVX/VBAND) (Martino,2012-03-12,RunCond)
+ else if (run>=166477 && run<=170593) { refSigma=4100.; refEff = 0.54; refClass = "CVLN-B-NOPF-ALLNOTRD"; } // PbPb_2.76: (Martino,2013-03-15,RunCond)
+ else if (run>=176658 && run<=177143) { refSigma= 25.; refEff = 0.45; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
+ else if (run>=177146 && run<=177147) { refSigma= 25.; refEff = 0.45; refClass = "C0TVX-B-NOPF-CENTNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
+ else if (run>=177148 && run<=177149) { refSigma= 25.; refEff = 0.45; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
+ else if (run>=177150 && run<=177506) { refSigma= 25.; refEff = 0.45; refClass = "C0TVX-B-NOPF-CENTNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
+ else if (run>=177580 && run<=178220) { refSigma= 25.; refEff = 0.45; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
+ else if (run>=179444 && run<=188229) { refSigma= 25.; refEff = 0.45; refClass = "C0TVX-S-NOPF-ALLNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
+ else if (run>=188230 && run<=188366) { refSigma=1590.; refEff = 0.76; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pPb_5.02: pilot. arxiv:1405.1849
+ else if (run>=188367 && run<=193692) { refSigma= 25.; refEff = 0.45; refClass = "C0TVX-S-NOPF-ALLNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
+ else if (run>=193693 && run<=193766) { refSigma= 25.; refEff = 0.45; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_8.00: (Artem, 2013-10-04,RunCond)
+ else if (run>=195344 && run<=197388) { refSigma=1590.; refEff = 0.76; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pPb_5.02: arxiv:1405.1849
+ else if (run>=197470 && run<=197692) { refSigma= 18.; refEff = 0.39; refClass = "C0TVX-B-NOPF-ALLNOTRD"; } // pp_2.76: 18mb=47.7mb*0.39=sigma(VBAND)*R(0TVX/VBAND) (Martino,2012-03-12,RunCond)
+
Double_t par[5] = {0};
- triggerInfo(run,refClass,ocdbStorage,par);
- fill = TMath::Nint(par[0]);
- duration = par[1];
- l0b = TMath::Nint(par[2]);
- nBCsPerOrbit = TMath::Nint(par[3]);
- mu = par[4];
- if (refSigma>0) lumi_seen = l0b/refSigma;
+ TString det;
+ triggerInfo(run,refClass,ocdbStorage,det,par);
+ fill = TMath::Nint(par[0]);
+ run_duration = par[1];
+ refl0b = par[2];
+ nBCsPerOrbit = TMath::Nint(par[3]);
+ mu = par[4];
+ activeDetectors.SetString(det.Data());
+
+ interactionRate = (run_duration>1e-10) ? refl0b/run_duration/refEff : 0;
+ if (refSigma>1.e-10) lumi_seen = refl0b/refSigma/1000; //[ub-1]
+ if (mu>1.e-10) lumi_seen*=mu/(1-TMath::Exp(-mu)); // pile-up correction
+ classes = GetClasses(run,ocdbStorage,class_l0b,class_l0a,class_l1b,class_l1a,class_l2b,class_l2a);
+ for (Int_t i=0;i<classes.GetEntriesFast();i++){
+ // printf("%30s %12lli %10lli %10lli %10lli %10lli %10lli\n",classes.At(i)->GetName(),class_l0b[i],class_l0a[i],class_l1b[i],class_l1a[i],class_l2b[i],class_l2a[i]);
+ class_lifetime[i] = class_l0b[i]>0 ? Double_t(class_l0a[i])/class_l0b[i]: 0;
+ class_lifetime[i]*= class_l1b[i]>0 ? Double_t(class_l1a[i])/class_l1b[i]: 0;
+ class_lifetime[i]*= class_l2b[i]>0 ? Double_t(class_l2a[i])/class_l2b[i]: 0;
+ class_lumi[i] = lumi_seen*class_lifetime[i];
+ }
+
+
+ TFile* fout = new TFile("trending.root","recreate");
TTree* t = new TTree("trending","tree of trending variables");
t->Branch("run",&run);
t->Branch("fill",&fill);
t->Branch("bcs",&nBCsPerOrbit);
- t->Branch("duration",&duration);
+ t->Branch("run_duration",&run_duration);
t->Branch("mu",&mu);
- t->Branch("l0b",&l0b);
+ t->Branch("interactionRate",&interactionRate);
+ t->Branch("refl0b",&refl0b);
t->Branch("lumi_seen",&lumi_seen);
- t->Branch("all",&all,Form("all[%i]/I",NBITS));
- t->Branch("accepted",&accepted,Form("accepted[%i]/I",NBITS));
-
- TFile* fout = new TFile("trending.root","recreate");
-
+ t->Branch("classes",&classes);
+ t->Branch("class_l0b",&class_l0b,Form("class_l0b[%i]/l",NMAXCLASSES));
+ t->Branch("class_l0a",&class_l0a,Form("class_l0a[%i]/l",NMAXCLASSES));
+ t->Branch("class_l1b",&class_l1b,Form("class_l1b[%i]/l",NMAXCLASSES));
+ t->Branch("class_l1a",&class_l1a,Form("class_l1a[%i]/l",NMAXCLASSES));
+ t->Branch("class_l2b",&class_l2b,Form("class_l2b[%i]/l",NMAXCLASSES));
+ t->Branch("class_l2a",&class_l2a,Form("class_l2a[%i]/l",NMAXCLASSES));
+ t->Branch("class_lifetime",&class_lifetime,Form("class_lifetime[%i]/D",NMAXCLASSES));
+ t->Branch("class_lumi",&class_lumi,Form("class_lumi[%i]/D",NMAXCLASSES));
+ t->Branch("alias_recorded",&alias_recorded,Form("alias_recorded[%i]/l",NBITS));
+ t->Branch("alias_reconstructed",&alias_reconstructed,Form("alias_reconstructed[%i]/l",NBITS));
+ t->Branch("alias_accepted",&alias_accepted,Form("alias_accepted[%i]/l",NBITS));
+ t->Branch("alias_l0b_rate",&alias_lifetime,Form("alias_l0b_rate[%i]/D",NBITS));
+ t->Branch("alias_lifetime",&alias_lifetime,Form("alias_lifetime[%i]/D",NBITS));
+ t->Branch("alias_lumi_recorded",&alias_lumi_recorded,Form("alias_lumi_recorded[%i]/D",NBITS));
+ t->Branch("alias_lumi_reconstructed",&alias_lumi_reconstructed,Form("alias_lumi_reconstructed[%i]/D",NBITS));
+ t->Branch("alias_lumi_accepted",&alias_lumi_accepted,Form("alias_lumi_accepted[%i]/D",NBITS));
+ t->Branch("activeDetectors",&activeDetectors);
+
for (Int_t j=1;j<=h->GetNbinsY();j++){
TString label = h->GetYaxis()->GetBinLabel(j);
-
// skip background triggers
// TODO introduce identifier to filter-out background triggers
- if (!label.Contains("-B-") && !label.Contains("-S-") && !(label.Contains("-ABCE-") && label.Contains("1B-"))) continue;
+ if (label.Contains("-A-")) continue;
+ else if (label.Contains("-C-")) continue;
+ else if (label.Contains("-E-")) continue;
+ else if (label.Contains("-AC-")) continue;
+ else if (label.Contains("-ACE-")) continue;
+ else if (label.Contains("-GA-")) continue;
+ else if (label.Contains("-GC-")) continue;
+ else if (label.Contains("1A-ABCE-")) continue;
+ else if (label.Contains("1C-ABCE-")) continue;
+ else if (label.Contains("C0LSR-ABCE-")) continue;
- printf("%s\n",label.Data());
// Read mask
// TODO think how to propagate mask with TBit aliases
UInt_t mask = 0;
+ TString classList = ""; // list of classes for given PS bit
TObjArray* array = label.Tokenize(" ");
for (Int_t itoken=0;itoken<array->GetEntries();itoken++){
TString token = array->At(itoken)->GetName();
+ if (itoken==0) classList = token;
if (token[0]!='&') continue;
token.Remove(0,1);
mask = token.Atoi();
}
array->Delete();
delete array;
+ printf("%s\n",label.Data());
+ printf("%i\n",mask);
if (!mask) continue;
- // Fill all and accepted counters for active bits
- // TODO can we accidentally double count events?
- for (Int_t ibit=0;ibit<NBITS;ibit++) {
- if (!(mask & 1<<ibit)) continue; // to be changed with TBits
- all[ibit] += Int_t(h->GetBinContent(1 ,j));
- accepted[ibit] += Int_t(h->GetBinContent(h->GetNbinsX(),j));
+ // Fill all and accepted counters for the most significant bit
+ Int_t ibit = TMath::Nint(TMath::Log2(mask));
+ if (ibit>=NBITS) continue;
+ if (alias_recorded[ibit]) break;
+
+ alias_reconstructed[ibit] = Int_t(h->GetBinContent(1 ,j));
+ alias_accepted[ibit] = Int_t(h->GetBinContent(h->GetNbinsX(),j));
+
+// printf("%4i %8i %8i\n",ibit,alias_reconstructed[ibit],alias_accepted[ibit]);
+
+ classList.Remove(0,1); // remove +
+ array = classList.Tokenize(",");
+ // if trigger bit corresponds to several active classes, just take the last one
+ // example: kTRD
+ // TODO think about more elegant solution
+ for (Int_t i=0;i<array->GetEntriesFast();i++){
+ TString token = array->At(i)->GetName();
+ AliTriggerClass* cl = (AliTriggerClass*) classes.FindObject(token.Data());
+ if (!cl) continue;
+ Int_t iclass = classes.IndexOf(cl);
+ printf(" %30s",token.Data());
+ printf(" %12lli",class_l0b[iclass]);
+ printf(" %12lli",class_l0a[iclass]);
+ printf(" %12lli",class_l1b[iclass]);
+ printf(" %12lli",class_l1a[iclass]);
+ printf(" %12lli",class_l2b[iclass]);
+ printf(" %12lli",class_l2a[iclass]);
+ printf("\n");
+ alias_recorded[ibit] = class_l2a[iclass];
+ alias_lifetime[ibit] = class_lifetime[iclass];
+ alias_lumi_recorded[ibit] = class_lumi[iclass];
+ if (!alias_recorded[ibit]) continue;
+ alias_lumi_reconstructed[ibit] = alias_lumi_recorded[ibit]/alias_recorded[ibit]*alias_reconstructed[ibit];
+ alias_lumi_accepted[ibit] = alias_lumi_recorded[ibit]/alias_recorded[ibit]*alias_accepted[ibit];
}
- if (h->GetBinContent(1,j)<1) continue;
- TH1F* fHistV0A = (TH1F*) fin->Get(Form("trigger_histograms_%s/fHistV0A",label.Data()));
- TH1F* fHistV0C = (TH1F*) fin->Get(Form("trigger_histograms_%s/fHistV0C",label.Data()));
- TH1F* fHistFiredBitsSPD = (TH1F*) fin->Get(Form("trigger_histograms_%s/fHistFiredBitsSPD",label.Data()));
- TH2F* fHistBitsSPD = (TH2F*) fin->Get(Form("trigger_histograms_%s/fHistBitsSPD",label.Data()));
- TH1F* fHistTDCZDC = (TH1F*) fin->Get(Form("trigger_histograms_%s/fHistTDCZDC",label.Data()));
- TH2F* fHistTimeZDC = (TH2F*) fin->Get(Form("trigger_histograms_%s/fHistTimeZDC",label.Data()));
- TH2F* fHistTimeCorrZDC = (TH2F*) fin->Get(Form("trigger_histograms_%s/fHistTimeCorrZDC",label.Data()));
-
- const char* bitName = bitNames[j-1].Data();
- TCanvas* cHistV0A = new TCanvas(Form("cHistV0A",j),Form("cHistV0A_%s",bitName),1000,800);
+ array->Delete();
+ delete array;
+
+ // Fill run QA histograms
+ const char* bitName = bitNames[ibit].Data();
+ TH1F* hV0A = (TH1F*) fin->Get(Form("trigger_histograms_%s/fHistV0A" ,label.Data()));
+ TH1F* hV0C = (TH1F*) fin->Get(Form("trigger_histograms_%s/fHistV0C" ,label.Data()));
+ TH1F* hFiredBitsSPD = (TH1F*) fin->Get(Form("trigger_histograms_%s/fHistFiredBitsSPD",label.Data()));
+ TH2F* hBitsSPD = (TH2F*) fin->Get(Form("trigger_histograms_%s/fHistBitsSPD" ,label.Data()));
+ TH1F* hTDCZDC = (TH1F*) fin->Get(Form("trigger_histograms_%s/fHistTDCZDC" ,label.Data()));
+ TH2F* hTimeZDC = (TH2F*) fin->Get(Form("trigger_histograms_%s/fHistTimeZDC" ,label.Data()));
+ TH2F* hTimeCorrZDC = (TH2F*) fin->Get(Form("trigger_histograms_%s/fHistTimeCorrZDC" ,label.Data()));
+ if (!hV0A) { printf("QA histogram not found\n"); return 1; }
+ if (!hV0C) { printf("QA histogram not found\n"); return 1; }
+ if (!hFiredBitsSPD) { printf("QA histogram not found\n"); return 1; }
+ if (!hBitsSPD) { printf("QA histogram not found\n"); return 1; }
+ if (!hTDCZDC) { printf("QA histogram not found\n"); return 1; }
+ if (!hTimeZDC) { printf("QA histogram not found\n"); return 1; }
+ if (!hTimeCorrZDC) { printf("QA histogram not found\n"); return 1; }
+
+ TCanvas* cV0A = new TCanvas(Form("cV0A_%s",bitName),Form("cV0A_%s",bitName),1000,800);
gPad->SetLogy();
- fHistV0A->SetTitle(Form("%s: V0A",bitName));
- fHistV0A->SetLineWidth(2);
- fHistV0A->SetLineColor(kBlue);
- fHistV0A->Draw();
- gPad->Print(Form("%s_histV0A.pdf",bitName));
- fHistV0A->Write(Form("%s_histV0A",bitName));
-
- TCanvas* cHistV0C = new TCanvas(Form("cHistV0C",j),Form("cHistV0C_%s",bitName),1000,800);
+ hV0A->SetTitle(Form("%s: V0A",bitName));
+ hV0A->SetLineWidth(2);
+ hV0A->SetLineColor(kBlue);
+ hV0A->Draw();
+ gPad->Print(Form("%s_V0A.pdf",bitName));
+ hV0A->Write(Form("%s_V0A",bitName));
+
+ TCanvas* cV0C = new TCanvas(Form("cV0C_%s",bitName),Form("cV0C_%s",bitName),1000,800);
gPad->SetLogy();
- fHistV0C->SetTitle(Form("%s: V0C",bitName));
- fHistV0C->SetLineWidth(2);
- fHistV0C->SetLineColor(kBlue);
- fHistV0C->Draw();
- gPad->Print(Form("%s_histV0C.pdf",bitName));
- fHistV0C->Write(Form("%s_histV0C",bitName));
-
- TCanvas* cHistFiredBitsSPD = new TCanvas(Form("cHistFiredBitsSPD",j),Form("cHistFiredBitsSPD_%s",bitName),1800,500);
+ hV0C->SetTitle(Form("%s: V0C",bitName));
+ hV0C->SetLineWidth(2);
+ hV0C->SetLineColor(kBlue);
+ hV0C->Draw();
+ gPad->Print(Form("%s_V0C.pdf",bitName));
+ hV0C->Write(Form("%s_V0C",bitName));
+
+ TCanvas* cFiredBitsSPD = new TCanvas(Form("cFiredBitsSPD_%s",bitName),Form("cFiredBitsSPD_%s",bitName),1800,500);
gPad->SetLogy();
gPad->SetMargin(0.05,0.01,0.12,0.06);
- fHistFiredBitsSPD->SetTitle(Form("%s: hardware FO",bitName));
- fHistFiredBitsSPD->SetTitleFont(43);
- fHistFiredBitsSPD->SetTitleSize(25);
- fHistFiredBitsSPD->GetYaxis()->SetTitleFont(43);
- fHistFiredBitsSPD->GetXaxis()->SetLabelFont(43);
- fHistFiredBitsSPD->GetYaxis()->SetLabelFont(43);
- fHistFiredBitsSPD->GetYaxis()->SetTitleSize(25);
- fHistFiredBitsSPD->GetXaxis()->SetLabelSize(25);
- fHistFiredBitsSPD->GetYaxis()->SetLabelSize(25);
- fHistFiredBitsSPD->GetYaxis()->SetTickLength(0.01);
- fHistFiredBitsSPD->GetYaxis()->SetTitleOffset(0.5);
- fHistFiredBitsSPD->GetYaxis()->SetDecimals(1);
- fHistFiredBitsSPD->SetLineWidth(2);
- fHistFiredBitsSPD->SetLineColor(kBlue);
- fHistFiredBitsSPD->Draw();
- gPad->Print(Form("%s_histFiredBitsSPD.pdf",bitName));
- fHistFiredBitsSPD->Write(Form("%s_histFiredBitsSPD",bitName));
-
- TCanvas* cHistBitsSPD = new TCanvas(Form("cHistBitsSPD",j),Form("cHistBitsSPD_%s",bitName),800,800);
+ hFiredBitsSPD->SetTitle(Form("%s: hardware FO",bitName));
+ hFiredBitsSPD->SetTitleFont(43);
+ hFiredBitsSPD->SetTitleSize(25);
+ hFiredBitsSPD->GetYaxis()->SetTitleFont(43);
+ hFiredBitsSPD->GetXaxis()->SetLabelFont(43);
+ hFiredBitsSPD->GetYaxis()->SetLabelFont(43);
+ hFiredBitsSPD->GetYaxis()->SetTitleSize(25);
+ hFiredBitsSPD->GetXaxis()->SetLabelSize(25);
+ hFiredBitsSPD->GetYaxis()->SetLabelSize(25);
+ hFiredBitsSPD->GetYaxis()->SetTickLength(0.01);
+ hFiredBitsSPD->GetYaxis()->SetTitleOffset(0.5);
+ hFiredBitsSPD->GetYaxis()->SetDecimals(1);
+ hFiredBitsSPD->SetLineWidth(2);
+ hFiredBitsSPD->SetLineColor(kBlue);
+ hFiredBitsSPD->Draw();
+ gPad->Print(Form("%s_FiredBitsSPD.pdf",bitName));
+ hFiredBitsSPD->Write(Form("%s_FiredBitsSPD",bitName));
+
+ TCanvas* cBitsSPD = new TCanvas(Form("cBitsSPD_%s",bitName),Form("cBitsSPD_%s",bitName),800,800);
gPad->SetLogz();
gPad->SetMargin(0.12,0.12,0.10,0.06);
- fHistBitsSPD->SetTitle(Form("%s: hardware FO vs offline FO",bitName));
- fHistBitsSPD->GetXaxis()->SetTitleOffset(1.3);
- fHistBitsSPD->GetYaxis()->SetTitleOffset(1.6);
- fHistBitsSPD->Draw("colz");
- gPad->Print(Form("%s_histBitsSPD.pdf",bitName));
- fHistBitsSPD->Write(Form("%s_histBitsSPD",bitName));
-
- TCanvas* cHistTimeZDC = new TCanvas(Form("cHistTimeZDC",j),Form("cHistTimeZDC_%s",bitName),800,800);
+ hBitsSPD->SetTitle(Form("%s: hardware FO vs offline FO",bitName));
+ hBitsSPD->GetXaxis()->SetTitleOffset(1.3);
+ hBitsSPD->GetYaxis()->SetTitleOffset(1.6);
+ hBitsSPD->Draw("colz");
+ gPad->Print(Form("%s_BitsSPD.pdf",bitName));
+ hBitsSPD->Write(Form("%s_BitsSPD",bitName));
+
+ TCanvas* cTimeZDC = new TCanvas(Form("cTimeZDC_%s",bitName),Form("cTimeZDC_%s",bitName),800,800);
gPad->SetLogz();
gPad->SetMargin(0.12,0.12,0.10,0.06);
- fHistTimeZDC->SetTitle(Form("%s: ZDC timing;TDC timing C-A;TDC timing C+A",bitName));
- fHistTimeZDC->GetXaxis()->SetTitleOffset(1.3);
- fHistTimeZDC->GetYaxis()->SetTitleOffset(1.6);
- fHistTimeZDC->Draw("colz");
- gPad->Print(Form("%s_histTimeZDC.pdf",bitName));
- fHistTimeZDC->Write(Form("%s_histTimeZDC",bitName));
-
- TCanvas* cHistTimeCorrZDC = new TCanvas(Form("cHistTimeCorrZDC",j),Form("cHistTimeCorrZDC_%s",bitName),800,800);
+ hTimeZDC->SetTitle(Form("%s: ZDC timing;TDC timing C-A;TDC timing C+A",bitName));
+ hTimeZDC->GetXaxis()->SetTitleOffset(1.3);
+ hTimeZDC->GetYaxis()->SetTitleOffset(1.6);
+ hTimeZDC->Draw("colz");
+ gPad->Print(Form("%s_TimeZDC.pdf",bitName));
+ hTimeZDC->Write(Form("%s_TimeZDC",bitName));
+
+ TCanvas* cTimeCorrZDC = new TCanvas(Form("cTimeCorrZDC_%s",bitName),Form("cTimeCorrZDC_%s",bitName),800,800);
gPad->SetLogz();
gPad->SetMargin(0.12,0.12,0.10,0.06);
- fHistTimeCorrZDC->SetTitle(Form("%s: corrected ZDC timing;TDC timing C-A;TDC timing C+A",bitName));
- fHistTimeCorrZDC->GetXaxis()->SetTitleOffset(1.3);
- fHistTimeCorrZDC->GetYaxis()->SetTitleOffset(1.6);
- fHistTimeCorrZDC->Draw("colz");
- gPad->Print(Form("%s_histTimeCorrZDC.pdf",bitName));
- fHistTimeCorrZDC->Write(Form("%s_histTimeCorrZDC",bitName));
+ hTimeCorrZDC->SetTitle(Form("%s: corrected ZDC timing;TDC timing C-A;TDC timing C+A",bitName));
+ hTimeCorrZDC->GetXaxis()->SetTitleOffset(1.3);
+ hTimeCorrZDC->GetYaxis()->SetTitleOffset(1.6);
+ hTimeCorrZDC->Draw("colz");
+ gPad->Print(Form("%s_TimeCorrZDC.pdf",bitName));
+ hTimeCorrZDC->Write(Form("%s_TimeCorrZDC",bitName));
}
t->Fill();
fout->Close();
return 0;
}
+
+
return d;
};
-Int_t triggerInfo(Int_t run, TString refClassName, TString ocdbStorage, Double_t* par){
+TObjArray GetClasses(Int_t run, TString ocdbStorage, ULong64_t* L0B, ULong64_t* L0A, ULong64_t* L1B, ULong64_t* L1A, ULong64_t* L2B, ULong64_t* L2A){
AliCDBManager* man = AliCDBManager::Instance();
man->SetDefaultStorage(ocdbStorage.Data());
man->SetRun(run);
- AliLHCData* lhc = (AliLHCData*) man->Get("GRP/GRP/LHCData")->GetObject();
- par[0] = lhc->GetFillNumber();
+ // Get scalers
+ AliTriggerConfiguration* cfg = (AliTriggerConfiguration*) man->Get("GRP/CTP/Config")->GetObject();
+ if (!cfg) { printf("No GRP/CTP/Config object for run %i\n",run); return TObjArray(); }
+
+ TObjArray classes = cfg->GetClasses();
+ AliTriggerRunScalers* scalers = (AliTriggerRunScalers*) man->Get("GRP/CTP/Scalers")->GetObject();
+ if (!scalers) { printf("No GRP/CTP/Scalers object for run %i\n",run); return TObjArray(); }
+ Int_t nEntries = scalers->GetScalersRecords()->GetEntriesFast();
+
+ for (Int_t r=0;r<nEntries-1;r++){
+ // Get SOR and EOR scaler records
+ AliTriggerScalersRecord* record1 = scalers->GetScalersRecord(r);
+ AliTriggerScalersRecord* record2 = scalers->GetScalersRecord(r+1);
+ if (!record1) { printf("Null pointer to scalers record\n"); return TObjArray(); }
+ if (!record2) { printf("Null pointer to scalers record\n"); return TObjArray(); }
+ for (Int_t i=0;i<classes.GetEntriesFast();i++){
+ // Extract SOR and EOR trigger counts
+ Int_t classId = cfg->GetClassIndexFromName(classes.At(i)->GetName());
+ const AliTriggerScalers* scaler1 = record1->GetTriggerScalersForClass(classId);
+ const AliTriggerScalers* scaler2 = record2->GetTriggerScalersForClass(classId);
+ if (!scaler1) { printf("Null pointer to scalers for class\n"); return TObjArray(); }
+ if (!scaler2) { printf("Null pointer to scalers for class\n"); return TObjArray(); }
+ L0B[i] += dif(scaler2->GetLOCB(),scaler1->GetLOCB());
+ L0A[i] += dif(scaler2->GetLOCA(),scaler1->GetLOCA());
+ L1B[i] += dif(scaler2->GetL1CB(),scaler1->GetL1CB());
+ L1A[i] += dif(scaler2->GetL1CA(),scaler1->GetL1CA());
+ L2B[i] += dif(scaler2->GetL2CB(),scaler1->GetL2CB());
+ L2A[i] += dif(scaler2->GetL2CA(),scaler1->GetL2CA());
+ }
+ }
+ return classes;
+}
+
+
+Int_t triggerInfo(Int_t run, TString refClassName, TString ocdbStorage, TString &activeDetectors, Double_t* par){
+ AliCDBManager* man = AliCDBManager::Instance();
+ man->SetDefaultStorage(ocdbStorage.Data());
+ man->SetRun(run);
+ if (run!=189694) { // No GRP/GRP/LHCData for this run
+ AliLHCData* lhc = (AliLHCData*) man->Get("GRP/GRP/LHCData")->GetObject();
+ if (!lhc) { printf("No GRP/GRP/LHCData object for run %i\n",run); return 1; }
+ par[0] = lhc->GetFillNumber();
+ }
AliTriggerConfiguration* cfg = (AliTriggerConfiguration*) man->Get("GRP/CTP/Config")->GetObject();
+ if (!cfg) { printf("No GRP/CTP/Config object for run %i\n",run); return 1; }
+ activeDetectors = cfg->GetActiveDetectors().Data();
// Get scalers
AliTriggerRunScalers* scalers = (AliTriggerRunScalers*) man->Get("GRP/CTP/Scalers")->GetObject();
+ if (!scalers) { printf("No GRP/CTP/Scalers object for run %i\n",run); return 1; }
Int_t nEntries = scalers->GetScalersRecords()->GetEntriesFast();
-
- // Get SOR and EOR scaler records
- AliTriggerScalersRecord* record1 = scalers->GetScalersRecord(0);
- AliTriggerScalersRecord* record2 = scalers->GetScalersRecord(nEntries-1);
- if (!record1) { printf("Null pointer to start scalers record\n"); return 1; }
- if (!record2) { printf("Null pointer to stop scalers record\n"); return 1; }
- // Extract SOR and EOR times
- const AliTimeStamp* stemp1 = record1->GetTimeStamp();
- const AliTimeStamp* stemp2 = record2->GetTimeStamp();
- if (!stemp1) { printf("Null pointer to start timestemp\n"); return 1; }
- if (!stemp2) { printf("Null pointer to stop timestemp\n"); return 1; }
- Double_t duration = stemp2->GetSeconds()-stemp1->GetSeconds();
- par[1] = duration;
- if (TMath::Abs(duration)<1) return 2;
+ Double_t run_duration = 0;
+ ULong64_t l0b = 0;
+ ULong64_t l0bempty = 0;
+ Int_t classId = cfg->GetClassIndexFromName(refClassName);
+ Int_t emptyclassid = cfg->GetClassIndexFromName("CBEAMB-ABCE-NOPF-ALL");
+ for (Int_t r=0;r<nEntries-1;r++){
+ // Get SOR and EOR scaler records
+ AliTriggerScalersRecord* record1 = scalers->GetScalersRecord(r);
+ AliTriggerScalersRecord* record2 = scalers->GetScalersRecord(r+1);
+ if (!record1) { printf("Null pointer to scalers record\n"); return 2; }
+ if (!record2) { printf("Null pointer to scalers record\n"); return 2; }
+ const AliTimeStamp* stamp1 = record1->GetTimeStamp();
+ const AliTimeStamp* stamp2 = record2->GetTimeStamp();
+ const AliTriggerScalers* scaler1 = record1->GetTriggerScalersForClass(classId);
+ const AliTriggerScalers* scaler2 = record2->GetTriggerScalersForClass(classId);
+ if (!stamp1 ) { printf("Null pointer to start timestamp\n"); return 2; }
+ if (!stamp2 ) { printf("Null pointer to stop timestamp\n"); return 2; }
+ if (!scaler1) { printf("Null pointer to scalers for class %s\n",refClassName.Data()); return 2; }
+ if (!scaler2) { printf("Null pointer to scalers for class %s\n",refClassName.Data()); return 2; }
+// run_duration += dif(stamp2->GetSeconds(),stamp1->GetSeconds());
+ l0b += dif(scaler2->GetLOCB() ,scaler1->GetLOCB());
+ if (emptyclassid<0) continue;
+ const AliTriggerScalers* emptyScaler1 = record1->GetTriggerScalersForClass(emptyclassid);
+ const AliTriggerScalers* emptyScaler2 = record2->GetTriggerScalersForClass(emptyclassid);
+ if (!emptyScaler1) { printf("Null pointer to scalers for empty class\n"); return 2; }
+ if (!emptyScaler2) { printf("Null pointer to scalers for empty class\n"); return 2; }
+ l0bempty+=dif(emptyScaler2->GetLOCB(),emptyScaler1->GetLOCB());
+ }
+ UInt_t t1 = scalers->GetScalersRecord(0 )->GetTimeStamp()->GetSeconds();
+ UInt_t t2 = scalers->GetScalersRecord(nEntries-1)->GetTimeStamp()->GetSeconds();
+ run_duration = dif(t2,t1);
+
+ for (Int_t r=0;r<nEntries-1;r++){
+ // Get SOR and EOR scaler records
+ AliTriggerScalersRecord* record1 = scalers->GetScalersRecord(r);
+ const AliTimeStamp* stamp1 = record1->GetTimeStamp();
+ Int_t period = stamp1->GetPeriod();
+ Int_t orbit = stamp1->GetOrbit();
+ printf("%5i %5i %5i %ll\n",r,period,orbit);
+ }
- // Extract SOR and EOR trigger counts
- Int_t classid = cfg->GetClassIndexFromName(refClassName);
- const AliTriggerScalers* scaler1 = record1->GetTriggerScalersForClass(classid);
- const AliTriggerScalers* scaler2 = record2->GetTriggerScalersForClass(classid);
- if (!scaler1) { printf("Null pointer to start scalers for reference class\n"); return 1; }
- if (!scaler2) { printf("Null pointer to stop scalers for reference class\n"); return 1; }
- UInt_t l0b = dif(scaler2->GetLOCB(),scaler1->GetLOCB());
+
+ par[1] = run_duration;
par[2] = l0b;
+ if (TMath::Abs(run_duration)<1) return 3;
// Get number of colliding bunches per orbit
- Double_t orbitRate = 11245.; // Hz
Double_t nBCsPerOrbit = -1;
+ Double_t orbitRate = 11245.;
if (refClassName.Contains("1B-ABCE-")){
nBCsPerOrbit = lhc->GetNInteractingBunchesMeasured();
Printf("Number of BCs from LHC data=%i",nBCsPerOrbit);
- if (nBCsPerOrbit<0) {
- Int_t emptyclassid = cfg->GetClassIndexFromName("CBEAMB-ABCE-NOPF-ALL");
- if (emptyclassid<0) return 3;
- const AliTriggerScalers* emptyScaler1 = record1->GetTriggerScalersForClass(emptyclassid);
- const AliTriggerScalers* emptyScaler2 = record2->GetTriggerScalersForClass(emptyclassid);
- if (!scaler1) { printf("Null pointer to start scalers for reference class\n"); return 1; }
- if (!scaler2) { printf("Null pointer to stop scalers for reference class\n"); return 1; }
- UInt_t l0bempty = dif(emptyScaler2->GetLOCB(),emptyScaler1->GetLOCB());
- if (l0bempty==0) return 4;
- nBCsPerOrbit = l0bempty/orbitRate/duration;
- }
- }
- else {
+ if (nBCsPerOrbit<0 && l0bempty>0) nBCsPerOrbit = Double_t(l0bempty)/orbitRate/run_duration;
+ } else {
// Extract number of bunches per orbit
- AliTriggerClass* cl = cfg->GetTriggerClass(classid);
+ AliTriggerClass* cl = cfg->GetTriggerClass(classId);
AliTriggerBCMask* mask = cl->GetBCMask();
nBCsPerOrbit = mask->GetNUnmaskedBCs();
}
par[3] = nBCsPerOrbit;
- Double_t totalBCs = duration*orbitRate*nBCsPerOrbit;
- par[4] = -TMath::Log(1-l0b/totalBCs); // mu
+ Double_t totalBCs = orbitRate*run_duration*nBCsPerOrbit;
+ if (totalBCs<1 || l0b<1) return 4;
+ par[4] = -TMath::Log(1-Double_t(l0b)/totalBCs); // mu
return 0;
}