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>
3030#include <iostream>
3131#endif
3232using namespace o2 ::ctp ;
33- void PlotPbLumi (int runNumber , int fillN , std :: string ccdbHost = "http://ccdb-test.cern.ch:8080" )
33+ void PlotPbLumi (int runNumber = 567905 , bool qc = 0 )
3434{ //
35- // what = 1: znc rate
36- // what = 2: (TCE+TSC)/ZNC
37- // what = 3: TCE/ZNC
38- std ::string mCCDBPathCTPScalers = "CTP/Calib/Scalers" ;
35+ // PLots in one canvas
36+ // znc rate/28
37+ // R = (TCE+TSC)*TVX*B*/ZNC*28
38+ // R = TCE*TVX*B/ZNC*28
39+ // R = VCH*TVX*B/ZNC*28
40+ std ::string ccdbHost = "http://alice-ccdb.cern.ch" ;
41+ std ::string mCCDBPathCTPScalers = "/CTP/Calib/Scalers" ;
42+ std ::string mCCDBPathCTPScalersQC = "qc/CTP/Scalers" ;
3943 std ::string mCCDBPathCTPConfig = "CTP/Config/Config" ;
4044 auto& ccdbMgr = o2 ::ccdb ::BasicCCDBManager ::instance ();
4145 // Timestamp
4246 auto soreor = ccdbMgr .getRunDuration (runNumber );
4347 uint64_t timeStamp = (soreor .second - soreor .first ) / 2 + soreor .first ;
4448 std ::cout << "Timestamp:" << timeStamp << std ::endl ;
4549 // 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 );
50+ auto lhcifdata = ccdbMgr .getForRun < o2 ::parameters ::GRPLHCIFData > ("GLO/Config/GRPLHCIF" , runNumber );
51+ //auto lhcifdata = ccdbMgr.getSpecific<o2::parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", timeStamp, metadata);
52+ if (!lhcifdata ) {
53+ throw std ::runtime_error ("No GRPLHCIFData for run " + std ::to_string (runNumber ));
54+ }
5055 auto bfilling = lhcifdata -> getBunchFilling ();
5156 std ::vector < int > bcs = bfilling .getFilledBCs ();
5257 int nbc = bcs .size ();
5358 std ::cout << "Number of interacting bc:" << nbc << std ::endl ;
5459 // Scalers
5560 std ::string srun = std ::to_string (runNumber );
56- metadata . clear (); // can be empty
61+ std :: map < string , string > metadata ;
5762 metadata ["runNumber" ] = srun ;
58- ccdbMgr .setURL ("http://ccdb-test.cern.ch:8080" );
59- auto scl = ccdbMgr .getSpecific < CTPRunScalers > (mCCDBPathCTPScalers , timeStamp , metadata );
63+ CTPRunScalers * scl = nullptr ;
64+ if (qc ) {
65+ ccdbMgr .setURL ("http://ali-qcdb-gpn.cern.ch:8083" );
66+ scl = ccdbMgr .getSpecific < CTPRunScalers > (mCCDBPathCTPScalersQC , timeStamp , metadata );
67+ } else {
68+ scl = ccdbMgr .getSpecific < CTPRunScalers > (mCCDBPathCTPScalers , timeStamp , metadata );
69+ }
6070 if (scl == nullptr ) {
6171 LOG (info ) << "CTPRunScalers not in database, timestamp:" << timeStamp ;
6272 return ;
@@ -65,6 +75,7 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
6575 std ::vector < CTPScalerRecordO2 > recs = scl -> getScalerRecordO2 ();
6676 //
6777 // CTPConfiguration ctpcfg;
78+ ccdbMgr .setURL ("http://alice-ccdb.cern.ch" );
6879 auto ctpcfg = ccdbMgr .getSpecific < CTPConfiguration > (mCCDBPathCTPConfig , timeStamp , metadata );
6980 if (ctpcfg == nullptr ) {
7081 LOG (info ) << "CTPRunConfig not in database, timestamp:" << timeStamp ;
@@ -85,6 +96,7 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
8596 int tsc = 255 ;
8697 int tce = 255 ;
8798 int vch = 255 ;
99+ int zncclsi = 255 ;
88100 for (auto const & cls : ctpcls ) {
89101 if (cls .name .find ("CMTVXTSC-B-NOPF" ) != std ::string ::npos && tsc == 255 ) {
90102 int itsc = cls .getIndex ();
@@ -104,6 +116,12 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
104116 // vch = scl->getScalerIndexForClass(ivch);
105117 std ::cout << cls .name << ":" << vch << ":" << ivch << std ::endl ;
106118 }
119+ if (cls .name .find ("C1ZNC-B-NOPF-CRU" ) != std ::string ::npos ) {
120+ int iznc = cls .getIndex ();
121+ zncclsi = clsIndexToScaler [iznc ];
122+ // vch = scl->getScalerIndexForClass(ivch);
123+ std ::cout << cls .name << ":" << zncclsi << ":" << iznc << std ::endl ;
124+ }
107125 }
108126 if (tsc == 255 || tce == 255 || vch == 255 ) {
109127 std ::cout << " One of dcalers not available, check config to find alternative)" << std ::endl ;
@@ -120,8 +138,18 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
120138 double_t orbit0 = recs [0 ].intRecord .orbit ;
121139 int n = recs .size () - 1 ;
122140 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 ];
141+ //Double_t x[n], znc[n], zncpp[n];
142+ std ::vector < Double_t > xvec (n ), zncvec (n ), zncppvec (n ), zncclassvec (n );
143+ Double_t * x = xvec .data ();
144+ Double_t * znc = zncvec .data ();
145+ Double_t * zncpp = zncppvec .data ();
146+ Double_t * zncclass = zncclassvec .data ();
147+ //Double_t tcetsctoznc[n], tcetoznc[n], vchtoznc[n];
148+ std ::vector < Double_t > tcetsctozncvec (n ), tcetozncvec (n ), vchtozncvec (n );
149+ Double_t * tcetsctoznc = tcetsctozncvec .data ();
150+ Double_t * tcetoznc = tcetozncvec .data ();
151+ Double_t * vchtoznc = vchtozncvec .data ();
152+ bool sum = 0 ;
125153 for (int i = 0 ; i < n ; i ++ ) {
126154 x [i ] = (double_t )(recs [i + 1 ].intRecord .orbit + recs [i ].intRecord .orbit ) / 2. - orbit0 ;
127155 x [i ] *= 88e-6 ;
@@ -135,8 +163,16 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
135163 double_t zncipp = mu * nbc * frev ;
136164 zncpp [i ] = zncipp / 28. ;
137165 znc [i ] = znci / 28. / tt ;
166+ // znc class
167+ znci = recs [i + 1 ].scalers [zncclsi ].l1Before - recs [i ].scalers [zncclsi ].l1Before ;
168+ zncclass [i ] = znci / 28. /tt ;
169+ //std::cout << znc[i]/zncclass[i] << std::endl;
138170 //
139- auto had = recs [i + 1 ].scalers [tce ].lmBefore - recs [i ].scalers [tce ].lmBefore ;
171+ double_t had = 0 ;
172+ if (sum ) {
173+ had += recs [i + 1 ].scalers [tce ].lmBefore - recs [i ].scalers [tce ].lmBefore ;
174+ }
175+ double_t mutce = - TMath ::Log (1. - had / tt / nbc / frev );
140176 // std::cout << recs[i+1].scalers[tce].lmBefore << std::endl;
141177 had += recs [i + 1 ].scalers [tsc ].lmBefore - recs [i ].scalers [tsc ].lmBefore ;
142178 // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28;
@@ -145,21 +181,34 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
145181 // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28;
146182 tcetoznc [i ] = (double_t )(had ) / zncpp [i ] / tt ;
147183 had = recs [i + 1 ].scalers [vch ].lmBefore - recs [i ].scalers [vch ].lmBefore ;
184+ double_t muvch = - TMath ::Log (1. - had / tt / nbc / frev );
185+
148186 // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28;
149187 vchtoznc [i ] = (double_t )(had ) / zncpp [i ] / tt ;
188+ //std::cout << "muzdc:" << mu << " mu tce:" << mutce << " muvch:" << muvch << std::endl;
150189 }
151190 //
152191 gStyle -> SetMarkerSize (0.5 );
153192 TGraph * gr1 = new TGraph (n , x , znc );
193+ TGraph * gr11 = new TGraph (n , x , zncpp ); // PileuP corrected
194+ TGraph * gr12 = new TGraph (n , x , zncclass ); // NOT PileuP corrected
154195 TGraph * gr2 = new TGraph (n , x , tcetsctoznc );
155196 TGraph * gr3 = new TGraph (n , x , tcetoznc );
156197 TGraph * gr4 = new TGraph (n , x , vchtoznc );
157198 gr1 -> SetMarkerStyle (20 );
199+ gr11 -> SetMarkerStyle (20 );
200+ gr12 -> SetMarkerStyle (20 );
201+ gr11 -> SetMarkerColor (kRed );
202+ gr12 -> SetMarkerColor (kBlue );
158203 gr2 -> SetMarkerStyle (21 );
159204 gr3 -> SetMarkerStyle (23 );
160205 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" );
206+ gr11 -> SetTitle ("R=ZNC/28 rate [Hz] (red=PilUp Corrected); time[sec]; R" );
207+ if (sum ) {
208+ gr2 -> SetTitle ("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R" );
209+ } else {
210+ gr2 -> SetTitle ("R=(TSC)*TVTX*B*28/ZNC; time[sec]; R" );
211+ }
163212 // gr2->GetHistogram()->SetMaximum(1.1);
164213 // gr2->GetHistogram()->SetMinimum(0.9);
165214 gr3 -> SetTitle ("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R" );
@@ -171,7 +220,9 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te
171220 TCanvas * c1 = new TCanvas ("c1" , srun .c_str (), 200 , 10 , 800 , 500 );
172221 c1 -> Divide (2 , 2 );
173222 c1 -> cd (1 );
174- gr1 -> Draw ("AP" );
223+ gr11 -> Draw ("AP" );
224+ gr1 -> Draw ("P" );
225+ gr12 -> Draw ("P" );
175226 c1 -> cd (2 );
176227 gr2 -> Draw ("AP" );
177228 c1 -> cd (3 );
0 commit comments