Skip to content

Commit 9ea1358

Browse files
mpucciolietava
andauthored
Utility to get CTP rates (AliceO2Group#4296)
* Utility to get CTP rates Co-authored-by: Roman Lietava <roman.lietava@cern.ch> * Add proper handling of ZDC class Co-authored-by: Roman Lietava <roman.lietava@cern.ch> * Use correct input type for ZDC class Co-authored-by: Roman Lietava <roman.lietava@cern.ch> --------- Co-authored-by: Roman Lietava <roman.lietava@cern.ch>
1 parent 4fe340e commit 9ea1358

3 files changed

Lines changed: 194 additions & 0 deletions

File tree

Common/CCDB/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212
o2physics_add_library(AnalysisCCDB
1313
SOURCES EventSelectionParams.cxx
1414
SOURCES TriggerAliases.cxx
15+
SOURCES ctpRateFetcher.cxx
1516
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore)
1617

1718
o2physics_target_root_dictionary(AnalysisCCDB
1819
HEADERS EventSelectionParams.h
1920
HEADERS TriggerAliases.h
21+
HEADERS ctpRateFetcher.h
2022
LINKDEF AnalysisCCDBLinkDef.h)

Common/CCDB/ctpRateFetcher.cxx

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
#include "ctpRateFetcher.h"
13+
14+
#include <map>
15+
#include <vector>
16+
17+
#include "CommonConstants/LHCConstants.h"
18+
#include "DataFormatsCTP/Configuration.h"
19+
#include "DataFormatsCTP/Scalers.h"
20+
#include "DataFormatsParameters/GRPLHCIFData.h"
21+
#include "CCDB/BasicCCDBManager.h"
22+
23+
namespace o2
24+
{
25+
26+
using framework::Service;
27+
28+
double ctpRateFetcher::fetch(Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber, std::string sourceName)
29+
{
30+
if (sourceName.find("ZNC") != std::string::npos) {
31+
if (runNumber < 544448) {
32+
return fetchCTPratesInputs(ccdb, timeStamp, runNumber, 26) / (sourceName.find("hadronic") != std::string::npos ? 28. : 1.);
33+
} else {
34+
return fetchCTPratesClasses(ccdb, timeStamp, runNumber, "C1ZNC-B-NOPF-CRU", 6) / (sourceName.find("hadronic") != std::string::npos ? 28. : 1.);
35+
}
36+
} else if (sourceName == "T0CE") {
37+
return fetchCTPratesClasses(ccdb, timeStamp, runNumber, "CMTVXTCE-B-NOPF-CRU");
38+
} else if (sourceName == "T0SC") {
39+
return fetchCTPratesClasses(ccdb, timeStamp, runNumber, "CMTVXTSC-B-NOPF-CRU");
40+
} else if (sourceName == "T0VTX") {
41+
if (runNumber < 534202) {
42+
return fetchCTPratesClasses(ccdb, timeStamp, runNumber, "minbias_TVX_L0"); // 2022
43+
} else {
44+
return fetchCTPratesClasses(ccdb, timeStamp, runNumber, "CMTVX-B-NOPF-CRU");
45+
}
46+
}
47+
LOG(error) << "CTP rate for " << sourceName << " not available";
48+
return -1.;
49+
}
50+
51+
double ctpRateFetcher::fetchCTPratesClasses(Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber, std::string className, int inputType)
52+
{
53+
getCTPscalers(ccdb, timeStamp, runNumber);
54+
getCTPconfig(ccdb, timeStamp, runNumber);
55+
56+
std::vector<ctp::CTPClass> ctpcls = mConfig->getCTPClasses();
57+
std::vector<int> clslist = mConfig->getTriggerClassList();
58+
int classIndex = -1;
59+
for (size_t i = 0; i < clslist.size(); i++) {
60+
if (ctpcls[i].name == className) {
61+
classIndex = i;
62+
break;
63+
}
64+
}
65+
if (classIndex == -1) {
66+
LOG(fatal) << "Trigger class " << className << " not found in CTPConfiguration";
67+
}
68+
69+
auto rate{mScalers->getRateGivenT(timeStamp, classIndex, inputType)};
70+
71+
return pileUpCorrection(rate.second);
72+
}
73+
74+
double ctpRateFetcher::fetchCTPratesInputs(Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber, int input)
75+
{
76+
getCTPscalers(ccdb, timeStamp, runNumber);
77+
getLHCIFdata(ccdb, timeStamp, runNumber);
78+
79+
std::vector<ctp::CTPScalerRecordO2> recs = mScalers->getScalerRecordO2();
80+
if (recs[0].scalersInps.size() == 48) {
81+
return pileUpCorrection(mScalers->getRateGivenT(timeStamp, input, 7).second);
82+
} else {
83+
LOG(error) << "Inputs not available";
84+
return -1.;
85+
}
86+
}
87+
88+
void ctpRateFetcher::getCTPscalers(Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber)
89+
{
90+
if (runNumber == mRunNumber && mScalers != nullptr) {
91+
return;
92+
}
93+
std::map<string, string> metadata;
94+
metadata["runNumber"] = std::to_string(runNumber);
95+
mScalers = ccdb->getSpecific<ctp::CTPRunScalers>("CTP/Calib/Scalers", timeStamp, metadata);
96+
if (mScalers == nullptr) {
97+
LOG(fatal) << "CTPRunScalers not in database, timestamp:" << timeStamp;
98+
}
99+
mScalers->convertRawToO2();
100+
}
101+
102+
void ctpRateFetcher::getLHCIFdata(Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber)
103+
{
104+
if (runNumber == mRunNumber && mLHCIFdata != nullptr) {
105+
return;
106+
}
107+
std::map<string, string> metadata;
108+
mLHCIFdata = ccdb->getSpecific<parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", timeStamp, metadata);
109+
if (mLHCIFdata == nullptr) {
110+
LOG(fatal) << "GRPLHCIFData not in database, timestamp:" << timeStamp;
111+
}
112+
}
113+
114+
void ctpRateFetcher::getCTPconfig(Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber)
115+
{
116+
if (runNumber == mRunNumber && mConfig != nullptr) {
117+
return;
118+
}
119+
std::map<string, string> metadata;
120+
metadata["runNumber"] = std::to_string(runNumber);
121+
mConfig = ccdb->getSpecific<ctp::CTPConfiguration>("CTP/Config/Config", timeStamp, metadata);
122+
if (mConfig == nullptr) {
123+
LOG(fatal) << "CTPRunConfig not in database, timestamp:" << timeStamp;
124+
}
125+
}
126+
127+
double ctpRateFetcher::pileUpCorrection(double triggerRate)
128+
{
129+
auto bfilling = mLHCIFdata->getBunchFilling();
130+
std::vector<int> bcs = bfilling.getFilledBCs();
131+
double nbc = bcs.size();
132+
double nTriggersPerFilledBC = triggerRate / nbc / constants::lhc::LHCRevFreq;
133+
double mu = -std::log(1 - nTriggersPerFilledBC);
134+
return mu * nbc * constants::lhc::LHCRevFreq;
135+
}
136+
137+
} // namespace o2

Common/CCDB/ctpRateFetcher.h

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
#ifndef COMMON_CCDB_CTPRATEFETCHER_H_
13+
#define COMMON_CCDB_CTPRATEFETCHER_H_
14+
15+
#include <string>
16+
17+
#include "CCDB/BasicCCDBManager.h"
18+
#include "Framework/AnalysisHelpers.h"
19+
20+
namespace o2
21+
{
22+
23+
namespace ctp
24+
{
25+
class CTPRunScalers;
26+
class CTPConfiguration;
27+
} // namespace ctp
28+
29+
namespace parameters
30+
{
31+
class GRPLHCIFData;
32+
}
33+
34+
class ctpRateFetcher
35+
{
36+
public:
37+
ctpRateFetcher() = default;
38+
double fetch(framework::Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber, std::string sourceName);
39+
40+
private:
41+
void getCTPconfig(framework::Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber);
42+
void getCTPscalers(framework::Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber);
43+
void getLHCIFdata(framework::Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber);
44+
double fetchCTPratesInputs(framework::Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber, int input);
45+
double fetchCTPratesClasses(framework::Service<o2::ccdb::BasicCCDBManager>& ccdb, uint64_t timeStamp, int runNumber, std::string className, int inputType = 1);
46+
double pileUpCorrection(double rate);
47+
48+
int mRunNumber = -1;
49+
ctp::CTPConfiguration* mConfig = nullptr;
50+
ctp::CTPRunScalers* mScalers = nullptr;
51+
parameters::GRPLHCIFData* mLHCIFdata = nullptr;
52+
};
53+
} // namespace o2
54+
55+
#endif // COMMON_CCDB_CTPRATEFETCHER_H_

0 commit comments

Comments
 (0)