2020#include "CCDB/BasicCCDBManager.h"
2121#include "DataFormatsCTP/Scalers.h"
2222#include "DataFormatsCTP/Configuration.h"
23- #include <DataFormatsParameters/GRPLHCIFData.h>
24- #include "TGraph.h"
25- #include "TGraphErrors.h"
26- #include "TCanvas.h"
27- #include "TMath.h"
28- #include "TStyle.h"
29- #include "TF1.h"
3023#include <string>
3124#include <map>
3225#include <iostream>
3326#endif
3427using namespace o2 ::ctp ;
35- using namespace std ::chrono ;
36- //
37- // if fillN = 0: pileup correction not done
38- // QCDB =1 : use for ongoing run
39- //
40- void PlotPbLumi (int runNumber , int fillN = 0 , int QCDB = 0 , std ::string ccdbHost = "http://alice-ccdb.cern.ch" )
41- { // "http://ccdb-test.cern.ch:8080"
28+ void PlotPbLumi (int runNumber , int fillN , std ::string ccdbHost = "http://ccdb-test.cern.ch:8080" )
29+ { //
30+ // what = 1: znc rate
31+ // what = 2: (TCE+TSC)/ZNC
32+ // what = 3: TCE/ZNC
4233 std ::string mCCDBPathCTPScalers = "CTP/Calib/Scalers" ;
43- std ::string mQCDBPathCTPScalers = "qc/CTP/Scalers" ;
4434 std ::string mCCDBPathCTPConfig = "CTP/Config/Config" ;
4535 auto& ccdbMgr = o2 ::ccdb ::BasicCCDBManager ::instance ();
46- ccdbMgr .setURL (ccdbHost );
4736 // Timestamp
4837 auto soreor = ccdbMgr .getRunDuration (runNumber );
4938 uint64_t timeStamp = (soreor .second - soreor .first ) / 2 + soreor .first ;
5039 std ::cout << "Timestamp:" << timeStamp << std ::endl ;
5140 // Filling
41+ std ::string sfill = std ::to_string (fillN );
5242 std ::map < string , string > metadata ;
53- int nbc = 0 ;
54- if (fillN ) {
55- std ::string sfill = std ::to_string (fillN );
56- metadata ["fillNumber" ] = sfill ;
57- auto lhcifdata = ccdbMgr .getSpecific < o2 ::parameters ::GRPLHCIFData > ("GLO/Config/GRPLHCIF" , timeStamp , metadata );
58- auto bfilling = lhcifdata -> getBunchFilling ();
59- std ::vector < int > bcs = bfilling .getFilledBCs ();
60- nbc = bcs .size ();
61- std ::cout << "Number of interacting bc:" << nbc << std ::endl ;
62- }
63- if (QCDB ) { // use this option for ongoing run
64- mCCDBPathCTPScalers = mQCDBPathCTPScalers ;
65- ccdbMgr .setURL ("http://ccdb-test.cern.ch:8080" );
66- timeStamp = duration_cast < milliseconds > (system_clock ::now ().time_since_epoch ()).count ();
67- std ::cout << "For scalers using Current time:" << timeStamp << std ::endl ;
68- }
43+ metadata ["fillNumber" ] = sfill ;
44+ auto lhcifdata = ccdbMgr .getSpecific < o2 ::parameters ::GRPLHCIFData > ("GLO/Config/GRPLHCIF" , timeStamp , metadata );
45+ auto bfilling = lhcifdata -> getBunchFilling ();
46+ std ::vector < int > bcs = bfilling .getFilledBCs ();
47+ int nbc = bcs .size ();
48+ std ::cout << "Number of interacting bc:" << nbc << std ::endl ;
6949 // Scalers
7050 std ::string srun = std ::to_string (runNumber );
7151 metadata .clear (); // can be empty
7252 metadata ["runNumber" ] = srun ;
53+ ccdbMgr .setURL ("http://ccdb-test.cern.ch:8080" );
7354 auto scl = ccdbMgr .getSpecific < CTPRunScalers > (mCCDBPathCTPScalers , timeStamp , metadata );
7455 if (scl == nullptr ) {
7556 LOG (info ) << "CTPRunScalers not in database, timestamp:" << timeStamp ;
@@ -124,72 +105,48 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHost
124105 return ;
125106 }
126107 //
108+ // Anal
109+ //
127110 // Times
128111 double_t frev = 11245 ;
129112 double_t time0 = recs [0 ].epochTime ;
130113 double_t timeL = recs [recs .size () - 1 ].epochTime ;
131114 double_t Trun = timeL - time0 ;
132115 double_t orbit0 = recs [0 ].intRecord .orbit ;
133116 int n = recs .size () - 1 ;
134- if (runNumber == 559143 ) {
135- n = 400 ;
136- }
137- if (runNumber == 559561 ) {
138- n = n - 3 ; // rate drops at the end
139- }
140- if (runNumber == 559575 ) {
141- n = n - 6 ;
142- }
143- if (runNumber == 559617 ) {
144- n = n - 5 ;
145- }
146- if (runNumber == 559632 ) {
147- n = n - 6 ;
148- }
149117 std ::cout << " Run duration:" << Trun << " Scalers size:" << n + 1 << std ::endl ;
150- Double_t x [n ], znc [n ], zncpp [n ], ex [ n ], eznc [ n ] ;
118+ Double_t x [n ], znc [n ], zncpp [n ];
151119 Double_t tcetsctoznc [n ], tcetoznc [n ], vchtoznc [n ];
152- Double_t etcetsctoznc [n ], etcetoznc [n ], evchtoznc [n ];
153-
154120 for (int i = 0 ; i < n ; i ++ ) {
155- ex [i ] = 0 ;
156121 x [i ] = (double_t )(recs [i + 1 ].intRecord .orbit + recs [i ].intRecord .orbit ) / 2. - orbit0 ;
157122 x [i ] *= 88e-6 ;
158123 // x[i] = (double_t)(recs[i+1].epochTime + recs[i].epochTime)/2.;
159124 double_t tt = (double_t )(recs [i + 1 ].intRecord .orbit - recs [i ].intRecord .orbit );
160125 tt = tt * 88e-6 ;
161126 //
127+ // std::cout << recs[i+1].scalersInps[25] << std::endl;
162128 double_t znci = (double_t )(recs [i + 1 ].scalersInps [25 ] - recs [i ].scalersInps [25 ]);
163- double_t zncipp = znci ;
164- double_t mu = 0 ;
165- if (fillN ) {
166- mu = - TMath ::Log (1. - znci / tt / nbc / frev );
167- zncipp = mu * nbc * frev * tt ;
168- }
129+ double_t mu = - TMath ::Log (1. - znci / tt / nbc / frev );
130+ double_t zncipp = mu * nbc * frev ;
169131 zncpp [i ] = zncipp / 28. ;
170- znc [i ] = zncipp / 28. / tt ;
171- eznc [i ] = TMath ::Sqrt (zncipp ) / 28. / tt ;
172- if (1 ) {
173- //
174- auto had = recs [i + 1 ].scalers [tsc ].lmBefore - recs [i ].scalers [tsc ].lmBefore ;
175- had += recs [i + 1 ].scalers [tce ].lmBefore - recs [i ].scalers [tce ].lmBefore ;
176- tcetsctoznc [i ] = (double_t )(had ) / zncpp [i ];
177- etcetsctoznc [i ] = TMath ::Sqrt (tcetsctoznc [i ] * (1 - tcetsctoznc [i ]) / zncpp [i ]);
178- had = recs [i + 1 ].scalers [tce ].lmBefore - recs [i ].scalers [tce ].lmBefore ;
179- double_t tcec = had ;
180- tcetoznc [i ] = (double_t )(had ) / zncpp [i ];
181- had = recs [i + 1 ].scalers [vch ].lmBefore - recs [i ].scalers [vch ].lmBefore ;
182- vchtoznc [i ] = (double_t )(had ) / zncpp [i ];
183- // std::cout << "mu:" << mu << " zncpp corr:" << zncipp << " zncraw:" << znci << " tce:" << tcec << " tce/had" << tcec/zncpp[i] << std::endl;
184- }
132+ znc [i ] = znci / 28. / tt ;
133+ //
134+ auto had = recs [i + 1 ].scalers [tce ].lmBefore - recs [i ].scalers [tce ].lmBefore ;
135+ // std::cout << recs[i+1].scalers[tce].lmBefore << std::endl;
136+ had += recs [i + 1 ].scalers [tsc ].lmBefore - recs [i ].scalers [tsc ].lmBefore ;
137+ // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28;
138+ tcetsctoznc [i ] = (double_t )(had ) / zncpp [i ] / tt ;
139+ had = recs [i + 1 ].scalers [tce ].lmBefore - recs [i ].scalers [tce ].lmBefore ;
140+ // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28;
141+ tcetoznc [i ] = (double_t )(had ) / zncpp [i ] / tt ;
142+ had = recs [i + 1 ].scalers [vch ].lmBefore - recs [i ].scalers [vch ].lmBefore ;
143+ // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28;
144+ vchtoznc [i ] = (double_t )(had ) / zncpp [i ] / tt ;
185145 }
186146 //
187- TFile myfile ("file.root" , "RECREATE" );
188147 gStyle -> SetMarkerSize (0.5 );
189- // TGraph* gr1 = new TGraph(n, x, znc);
190- TGraphErrors * gr1 = new TGraphErrors (n , x , znc , ex , eznc );
148+ TGraph * gr1 = new TGraph (n , x , znc );
191149 TGraph * gr2 = new TGraph (n , x , tcetsctoznc );
192- // TGraphErrors* gr2 = new TGraphErrors(n, x, tcetsctoznc, ex, etcetsctoznc); // nom and denom are strongly correlated
193150 TGraph * gr3 = new TGraph (n , x , tcetoznc );
194151 TGraph * gr4 = new TGraph (n , x , vchtoznc );
195152 gr1 -> SetMarkerStyle (20 );
@@ -198,39 +155,28 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHost
198155 gr4 -> SetMarkerStyle (23 );
199156 gr1 -> SetTitle ("R=ZNC/28 rate [Hz]; time[sec]; R" );
200157 gr2 -> SetTitle ("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R" );
201- // gr2->SetTitle("R=TSC*TVTX*B*28/ZNC; time[sec]; R");
202- // gr2->GetHistogram()->SetMaximum(1.1);
203- // gr2->GetHistogram()->SetMinimum(0.9);
158+ // gr2->GetHistogram()->SetMaximum(1.1);
159+ // gr2->GetHistogram()->SetMinimum(0.9);
204160 gr3 -> SetTitle ("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R" );
205161 // gr3->GetHistogram()->SetMaximum(0.6);
206162 // gr3->GetHistogram()->SetMinimum(0.4);
207163 gr4 -> SetTitle ("R=(VCH)*TVTX*B*28/ZNC; time[sec]; R" );
208164 // gr4->GetHistogram()->SetMaximum(0.6);
209165 // gr4->GetHistogram()->SetMinimum(0.4);
210166 TCanvas * c1 = new TCanvas ("c1" , srun .c_str (), 200 , 10 , 800 , 500 );
211- TF1 * fun = new TF1 ("poly0" , "[0]+x*[1]" );
212167 c1 -> Divide (2 , 2 );
213168 c1 -> cd (1 );
214169 gr1 -> Draw ("AP" );
215170 c1 -> cd (2 );
216- fun -> SetParameter (0 , 1 );
217- gr2 -> Fit ("poly0" , "FM" );
218171 gr2 -> Draw ("AP" );
219172 c1 -> cd (3 );
220- fun -> SetParameter (0 , 0.5 );
221- gr3 -> Fit ("poly0" );
222173 gr3 -> Draw ("AP" );
223174 c1 -> cd (4 );
224- gr4 -> Fit ("poly0" );
225175 gr4 -> Draw ("AP" );
226176 // getRate test:
227177 double tt = timeStamp / 1000. ;
228178 std ::pair < double , double > r1 = scl -> getRateGivenT (tt , 25 , 7 );
229179 std ::cout << "ZDC input getRateGivetT:" << r1 .first / 28. << " " << r1 .second / 28. << std ::endl ;
230180 std ::pair < double , double > r2 = scl -> getRateGivenT (tt , tce , 1 );
231181 std ::cout << "LM before TCE class getRateGivetT:" << r2 .first << " " << r2 .second << std ::endl ;
232- gr1 -> Write ();
233- gr2 -> Write ();
234- gr3 -> Write ();
235- gr4 -> Write ();
236182}
0 commit comments