Skip to content

Commit 91acb9d

Browse files
lietavaRoman Lietava
andauthored
dev: improvements of pb lumi macro (#14822)
* dev: improvements of pb lumi macro * forgot clang * more options * clang * clang * multigraph (thanks to Andreas Molander) --------- Co-authored-by: Roman Lietava <romanlietava@romans-macbook-pro.home>
1 parent dae698e commit 91acb9d

File tree

1 file changed

+106
-28
lines changed

1 file changed

+106
-28
lines changed

Detectors/CTP/macro/PlotPbLumi.C

Lines changed: 106 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
1111

12-
/// \file TestCTPScalers.C
12+
/// \file PlotPbLumi.C
1313
/// \brief create CTP scalers, test it and add to database
1414
/// \author Roman Lietava
15-
// root -b -q "GetScalers.C(\"519499\", 1656286373953)"
15+
// root "PLotPbLumi.C(519499)"
1616
#if !defined(__CLING__) || defined(__ROOTCLING__)
1717

1818
#include <fairlogger/Logger.h>
@@ -30,33 +30,48 @@
3030
#include <iostream>
3131
#endif
3232
using namespace o2::ctp;
33-
void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-test.cern.ch:8080")
33+
//
34+
// sum = 0: TCE and TSC separatelly otherwise TCE and (TCE+TSC)
35+
// qc = 0: takes scalers from CCDB (available only for finished runs) otherwise from QCCDB (available for active runs)
36+
// t0-tlast: window in seconds counted from beginning of run
37+
//
38+
void PlotPbLumi(int runNumber = 567905, bool sum = 0, bool qc = 0, Double_t t0 = 0., Double_t tlast = 0.)
3439
{ //
35-
// what = 1: znc rate
36-
// what = 2: (TCE+TSC)/ZNC
37-
// what = 3: TCE/ZNC
38-
std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers";
40+
// PLots in one canvas
41+
// znc rate/28
42+
// R = (TCE+TSC)*TVX*B*/ZNC*28
43+
// R = TCE*TVX*B/ZNC*28
44+
// R = VCH*TVX*B/ZNC*28
45+
std::string ccdbHost = "http://alice-ccdb.cern.ch";
46+
std::string mCCDBPathCTPScalers = "/CTP/Calib/Scalers";
47+
std::string mCCDBPathCTPScalersQC = "qc/CTP/Scalers";
3948
std::string mCCDBPathCTPConfig = "CTP/Config/Config";
4049
auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance();
4150
// Timestamp
4251
auto soreor = ccdbMgr.getRunDuration(runNumber);
4352
uint64_t timeStamp = (soreor.second - soreor.first) / 2 + soreor.first;
4453
std::cout << "Timestamp:" << timeStamp << std::endl;
4554
// Filling
46-
std::string sfill = std::to_string(fillN);
47-
std::map<string, string> metadata;
48-
metadata["fillNumber"] = sfill;
49-
auto lhcifdata = ccdbMgr.getSpecific<o2::parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", timeStamp, metadata);
55+
auto lhcifdata = ccdbMgr.getForRun<o2::parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", runNumber);
56+
// auto lhcifdata = ccdbMgr.getSpecific<o2::parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", timeStamp, metadata);
57+
if (!lhcifdata) {
58+
throw std::runtime_error("No GRPLHCIFData for run " + std::to_string(runNumber));
59+
}
5060
auto bfilling = lhcifdata->getBunchFilling();
5161
std::vector<int> bcs = bfilling.getFilledBCs();
5262
int nbc = bcs.size();
5363
std::cout << "Number of interacting bc:" << nbc << std::endl;
5464
// Scalers
5565
std::string srun = std::to_string(runNumber);
56-
metadata.clear(); // can be empty
66+
std::map<string, string> metadata;
5767
metadata["runNumber"] = srun;
58-
ccdbMgr.setURL("http://ccdb-test.cern.ch:8080");
59-
auto scl = ccdbMgr.getSpecific<CTPRunScalers>(mCCDBPathCTPScalers, timeStamp, metadata);
68+
CTPRunScalers* scl = nullptr;
69+
if (qc) {
70+
ccdbMgr.setURL("http://ali-qcdb-gpn.cern.ch:8083");
71+
scl = ccdbMgr.getSpecific<CTPRunScalers>(mCCDBPathCTPScalersQC, timeStamp, metadata);
72+
} else {
73+
scl = ccdbMgr.getSpecific<CTPRunScalers>(mCCDBPathCTPScalers, timeStamp, metadata);
74+
}
6075
if (scl == nullptr) {
6176
LOG(info) << "CTPRunScalers not in database, timestamp:" << timeStamp;
6277
return;
@@ -65,6 +80,7 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
6580
std::vector<CTPScalerRecordO2> recs = scl->getScalerRecordO2();
6681
//
6782
// CTPConfiguration ctpcfg;
83+
ccdbMgr.setURL("http://alice-ccdb.cern.ch");
6884
auto ctpcfg = ccdbMgr.getSpecific<CTPConfiguration>(mCCDBPathCTPConfig, timeStamp, metadata);
6985
if (ctpcfg == nullptr) {
7086
LOG(info) << "CTPRunConfig not in database, timestamp:" << timeStamp;
@@ -85,6 +101,7 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
85101
int tsc = 255;
86102
int tce = 255;
87103
int vch = 255;
104+
int zncclsi = 255;
88105
for (auto const& cls : ctpcls) {
89106
if (cls.name.find("CMTVXTSC-B-NOPF") != std::string::npos && tsc == 255) {
90107
int itsc = cls.getIndex();
@@ -104,6 +121,12 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
104121
// vch = scl->getScalerIndexForClass(ivch);
105122
std::cout << cls.name << ":" << vch << ":" << ivch << std::endl;
106123
}
124+
if (cls.name.find("C1ZNC-B-NOPF-CRU") != std::string::npos) {
125+
int iznc = cls.getIndex();
126+
zncclsi = clsIndexToScaler[iznc];
127+
// vch = scl->getScalerIndexForClass(ivch);
128+
std::cout << cls.name << ":" << zncclsi << ":" << iznc << std::endl;
129+
}
107130
}
108131
if (tsc == 255 || tce == 255 || vch == 255) {
109132
std::cout << " One of dcalers not available, check config to find alternative)" << std::endl;
@@ -120,11 +143,39 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
120143
double_t orbit0 = recs[0].intRecord.orbit;
121144
int n = recs.size() - 1;
122145
std::cout << " Run duration:" << Trun << " Scalers size:" << n + 1 << std::endl;
123-
Double_t x[n], znc[n], zncpp[n];
124-
Double_t tcetsctoznc[n], tcetoznc[n], vchtoznc[n];
125-
for (int i = 0; i < n; i++) {
126-
x[i] = (double_t)(recs[i + 1].intRecord.orbit + recs[i].intRecord.orbit) / 2. - orbit0;
127-
x[i] *= 88e-6;
146+
//
147+
int i0 = 0;
148+
int ilast = 0;
149+
if (t0 != 0. || tlast != 0.) {
150+
for (int i = 0; i < n; i++) {
151+
double_t ttime = recs[i].epochTime - time0;
152+
if (!i0 && t0 < ttime) {
153+
i0 = i;
154+
}
155+
if (!ilast && tlast < ttime) {
156+
ilast = i;
157+
}
158+
}
159+
} else {
160+
ilast = n;
161+
}
162+
n = ilast - i0;
163+
std::cout << "i0:" << i0 << " ilast:" << ilast << std::endl;
164+
// Double_t x[n], znc[n], zncpp[n];
165+
std::vector<Double_t> xvec(n), zncvec(n), zncppvec(n), zncclassvec(n);
166+
Double_t* x = xvec.data();
167+
Double_t* znc = zncvec.data();
168+
Double_t* zncpp = zncppvec.data();
169+
Double_t* zncclass = zncclassvec.data();
170+
// Double_t tcetsctoznc[n], tcetoznc[n], vchtoznc[n];
171+
std::vector<Double_t> tcetsctozncvec(n), tcetozncvec(n), vchtozncvec(n);
172+
Double_t* tcetsctoznc = tcetsctozncvec.data();
173+
Double_t* tcetoznc = tcetozncvec.data();
174+
Double_t* vchtoznc = vchtozncvec.data();
175+
for (int i = i0; i < ilast; i++) {
176+
int iv = i - i0;
177+
x[iv] = (double_t)(recs[i + 1].intRecord.orbit + recs[i].intRecord.orbit) / 2. - orbit0;
178+
x[iv] *= 88e-6;
128179
// x[i] = (double_t)(recs[i+1].epochTime + recs[i].epochTime)/2.;
129180
double_t tt = (double_t)(recs[i + 1].intRecord.orbit - recs[i].intRecord.orbit);
130181
tt = tt * 88e-6;
@@ -133,33 +184,53 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
133184
double_t znci = (double_t)(recs[i + 1].scalersInps[25] - recs[i].scalersInps[25]);
134185
double_t mu = -TMath::Log(1. - znci / tt / nbc / frev);
135186
double_t zncipp = mu * nbc * frev;
136-
zncpp[i] = zncipp / 28.;
137-
znc[i] = znci / 28. / tt;
187+
zncpp[iv] = zncipp / 28.;
188+
znc[iv] = znci / 28. / tt;
189+
// znc class
190+
znci = recs[i + 1].scalers[zncclsi].l1Before - recs[i].scalers[zncclsi].l1Before;
191+
zncclass[iv] = znci / 28. / tt;
192+
// std::cout << znc[i]/zncclass[i] << std::endl;
138193
//
139-
auto had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore;
194+
double_t had = 0;
195+
if (sum) {
196+
had += recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore;
197+
}
198+
double_t mutce = -TMath::Log(1. - had / tt / nbc / frev);
140199
// std::cout << recs[i+1].scalers[tce].lmBefore << std::endl;
141200
had += recs[i + 1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore;
142201
// rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28;
143-
tcetsctoznc[i] = (double_t)(had) / zncpp[i] / tt;
202+
tcetsctoznc[iv] = (double_t)(had) / zncpp[iv] / tt;
144203
had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore;
145204
// rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28;
146-
tcetoznc[i] = (double_t)(had) / zncpp[i] / tt;
205+
tcetoznc[iv] = (double_t)(had) / zncpp[iv] / tt;
147206
had = recs[i + 1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore;
207+
double_t muvch = -TMath::Log(1. - had / tt / nbc / frev);
208+
148209
// rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28;
149-
vchtoznc[i] = (double_t)(had) / zncpp[i] / tt;
210+
vchtoznc[iv] = (double_t)(had) / zncpp[iv] / tt;
211+
// std::cout << "muzdc:" << mu << " mu tce:" << mutce << " muvch:" << muvch << std::endl;
150212
}
151213
//
152214
gStyle->SetMarkerSize(0.5);
153215
TGraph* gr1 = new TGraph(n, x, znc);
216+
TGraph* gr11 = new TGraph(n, x, zncpp); // PileuP corrected
217+
TGraph* gr12 = new TGraph(n, x, zncclass); // NOT PileuP corrected
154218
TGraph* gr2 = new TGraph(n, x, tcetsctoznc);
155219
TGraph* gr3 = new TGraph(n, x, tcetoznc);
156220
TGraph* gr4 = new TGraph(n, x, vchtoznc);
157221
gr1->SetMarkerStyle(20);
222+
gr11->SetMarkerStyle(20);
223+
gr12->SetMarkerStyle(20);
224+
gr11->SetMarkerColor(kRed);
225+
gr12->SetMarkerColor(kBlue);
158226
gr2->SetMarkerStyle(21);
159227
gr3->SetMarkerStyle(23);
160228
gr4->SetMarkerStyle(23);
161-
gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R");
162-
gr2->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R");
229+
if (sum) {
230+
gr2->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R");
231+
} else {
232+
gr2->SetTitle("R=(TSC)*TVTX*B*28/ZNC; time[sec]; R");
233+
}
163234
// gr2->GetHistogram()->SetMaximum(1.1);
164235
// gr2->GetHistogram()->SetMinimum(0.9);
165236
gr3->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R");
@@ -168,10 +239,17 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
168239
gr4->SetTitle("R=(VCH)*TVTX*B*28/ZNC; time[sec]; R");
169240
// gr4->GetHistogram()->SetMaximum(0.6);
170241
// gr4->GetHistogram()->SetMinimum(0.4);
242+
TMultiGraph* mg1 = new TMultiGraph();
243+
mg1->SetTitle("R=ZNC/28 rate [Hz] (red=PilUp Corrected); time[sec]; R");
244+
mg1->Add(gr1);
245+
mg1->Add(gr11);
246+
mg1->Add(gr12);
171247
TCanvas* c1 = new TCanvas("c1", srun.c_str(), 200, 10, 800, 500);
248+
std::string title = "RUN " + std::to_string(runNumber);
249+
c1->SetTitle(title.c_str());
172250
c1->Divide(2, 2);
173251
c1->cd(1);
174-
gr1->Draw("AP");
252+
mg1->Draw("AP");
175253
c1->cd(2);
176254
gr2->Draw("AP");
177255
c1->cd(3);

0 commit comments

Comments
 (0)