21#include <fairlogger/Logger.h>
26const std::map<std::string, std::string>
CTPInput::run2DetToRun3Det = {{
"T",
"FT0"}, {
"V",
"FV0"}, {
"U",
"FDD"}, {
"E",
"EMC"}, {
"D",
"EMC"}, {
"H",
"TRD"}, {
"O",
"TOF"}, {
"P",
"PHS"}, {
"Z",
"ZDC"}};
27const std::map<std::string, std::string>
CTPConfiguration::detName2LTG = {{
"FV0",
"1"}, {
"FT0",
"2"}, {
"FDD",
"3"}, {
"ITS",
"4"}, {
"TOF",
"5"}, {
"MFT",
"6"}, {
"TPC",
"7"}, {
"MCH",
"8"}, {
"MID",
"9"}, {
"TST",
"10"}, {
"TRD",
"13"}, {
"HMP",
"14"}, {
"ZDC",
"15"}, {
"PHS",
"16"}, {
"EMC",
"17"}, {
"CPV",
"18"}};
31 bool isdet = det.getID() >= det.getNDetectors();
32 isdet |= det.getID() < 0;
34 LOG(
error) <<
" Detector does not exist: " << det.getID();
47 return !
s.empty() && std::find_if(
s.begin(),
48 s.end(), [](
unsigned char c) { return !std::isdigit(c); }) ==
s.end();
55 bool coded = tokens[2].find(
"L") != std::string::npos;
56 coded |= tokens[2].find(
"H") != std::string::npos;
57 std::cout <<
"coded:" << coded << std::endl;
60 std::string bcmaskstr = tokens[2];
64 while (bccur < 3564) {
66 size_t posH = bcmaskstr.find(
'H',
pos);
67 size_t posL = bcmaskstr.find(
'L',
pos);
75 std::string bcsub = bcmaskstr.substr(
pos, posnext -
pos);
79 bcrange = std::stoull(bcsub);
81 LOG(warning) <<
"problem in bcmask decoding H:" << posH <<
" posL:" << posL <<
" bcsub:" << bcsub;
85 for (
int bc = bccur;
bc < bccur + bcrange;
bc++) {
89 LOG(warning) <<
"BC mask decoding to big bc:" <<
bc;
102 bc = std::stoull(tokens[
i]);
104 LOG(info) <<
"mask syntax:" <<
i <<
":" << tokens[
i];
115 stream <<
" # of active BC:" <<
BCmask.count() << std::endl;
118const std::set<std::string>
CTPGenerator::Generators = {
"bcd1m",
"bcd2m",
"bcd10",
"bcd20",
"rnd1m",
"rnd2m",
"rnd10",
"rnd20"};
132 this->name = std::string(
name);
150 for (
const auto& inp :
inputs) {
151 mask |= inp->inputMask;
157 stream <<
"CTP Descriptor:" <<
name <<
" Inputs:";
158 for (
const auto& inp :
inputs) {
159 stream << inp->name <<
" ";
183 stream << bcm->name <<
" ";
197 LOG(info) <<
"adding input:" << inp;
199 std::string sinp = inp;
202 sinp = inp.substr(1, inp.size() - 1);
208 }
else if (inp[0] ==
'r') {
212 int index = std::stoi(sinp);
216 if (ctpinp.
neg == 0) {
222 ctpinp.
level = sinp[0];
229 LOG(info) <<
"input found at:" <<
i;
230 descInputsIndex[clsindex].push_back(
i);
234 mInputs.push_back(ctpinp);
235 descInputsIndex[clsindex].push_back(mInputs.size() - 1);
236 LOG(info) <<
"input inderted at:" << mInputs.size() - 1;
241 LOG(info) <<
"Loading CTP configuration.";
242 std::map<int, std::vector<int>> clsDescIndex;
244 mConfigString = ctpconfiguration;
245 std::istringstream iss(ctpconfiguration);
251 while (std::getline(iss, line)) {
253 if (line.size() == 0) {
256 if (line.at(0) ==
'#') {
260 if (line.find(
"ver") != std::string::npos) {
262 LOG(info) <<
"CTP Config vesrion:" << line;
264 LOG(info) <<
"CTP Config version: 0";
269 ret = processConfigurationLineRun3(line,
level, clsDescIndex);
271 ret = processConfigurationLineRun3v2(line,
level, clsDescIndex);
278 for (
auto& cls : mCTPClasses) {
279 cls.cluster = &mClusters[cls.clusterIndex];
280 if (cls.descriptorIndex != 0xff) {
281 cls.descriptor = &mDescriptors[cls.descriptorIndex];
282 if (cls.getIndex() != 0xff) {
283 for (
auto const& inp : clsDescIndex[cls.getIndex()]) {
284 mDescriptors.at(cls.descriptorIndex).inputs.push_back(&mInputs.at(inp));
291 for (
auto& cls : mCTPClasses) {
292 cls.cluster = &mClusters[cls.clusterIndex];
297int CTPConfiguration::processConfigurationLineRun3(std::string& line,
int&
level, std::map<
int, std::vector<int>>& descInputsIndex)
299 LOG(info) <<
"Processing line";
300 LOG(info) <<
"line:" << line <<
" lev:" <<
level;
303 size_t ntokens = tokens.size();
305 LOG(warning) <<
"# of tokens zero in line:" << line;
309 if (((
first = line.find(
"run")) != std::string::npos) && (
level ==
START)) {
311 }
else if ((line.find(
"inp") != std::string::npos) && ((
level ==
RUN) || (
level ==
INPUTS))) {
317 }
else if ((
first =
line.find(
"LTG")) != std::string::npos) {
319 }
else if ((
first =
line.find(
"cluster")) != std::string::npos) {
323 if (knownlevels ==
false) {
331 mRunNumber = std::stoul(tokens[1]);
333 LOG(
error) <<
"RUN:" << tokens[1] << std::endl;
340 if (tokens.size() < 3) {
345 ctpinp.
name = tokens[1];
346 ctpinp.
level = tokens[1][0];
347 std::string run2Name{tokens[1][1]};
351 mInputs.push_back(ctpinp);
352 LOG(info) <<
"Input:" << ctpinp.
name <<
" index:" <<
index;
357 if (tokens.size() < 3) {
361 bcmask.
name = tokens[1];
362 bool coded = tokens[2].find(
"L") != std::string::npos;
363 coded |= tokens[2].find(
"H") != std::string::npos;
372 bc = std::stoull(tokens[
i]);
374 LOG(info) <<
"mask syntax:" <<
i <<
":" << tokens[
i];
380 mBCMasks.push_back(bcmask);
381 LOG(info) <<
"BC mask added:" << bcmask.
name;
387 gen.frequency = tokens[1];
388 LOG(info) <<
"Gen added:" <<
line;
393 std::string detname = tokens[1];
397 ctpdet.
detID = det.getID();
398 LOG(info) <<
"Detector found:" << det.getID() <<
" " << detname;
400 LOG(info) <<
"Unknown detectors:" <<
line;
402 mDetectors.push_back(ctpdet);
408 mDetectors.back().mode = tokens[0];
410 LOG(info) <<
"LTGitem:" <<
line;
416 cluster.
hwMask = std::stoull(tokens[0]);
418 LOG(info) <<
"Cluster syntax error:" <<
line;
421 LOG(info) <<
"Cluster:" <<
line;
422 cluster.
name = tokens[2];
424 for (
uint32_t item = 3; item < ntokens; item++) {
425 std::string detname = tokens[item];
430 mask |= det.getMask();
433 mClusters.push_back(cluster);
440 if (tokens.size() < 3) {
441 LOG(
error) <<
"CTPClass: less than 3 items in class:" <<
line;
446 index = std::stoull(tokens[0]);
448 LOG(info) <<
"Class syntax error:" <<
line;
454 cls.
name = tokens[1];
460 std::string token = tokens[
i];
461 bool isGenerator = 0;
463 if (token.find(
gen) != std::string::npos) {
470 LOG(info) <<
"Class generator found:" << desc.
name;
471 }
else if (token.find(
"~") != std::string::npos) {
478 }
else if (token.find(
"0x") != std::string::npos) {
480 cls.
downScale = std::stoul(token,
nullptr, 16);
481 }
else if (token.find(
"bcm") != std::string::npos) {
484 for (
auto const& bcm : mBCMasks) {
485 if (bcm.name == token) {
487 LOG(info) <<
"Class BCMask found:" << token;
492 if (
i == mBCMasks.size()) {
493 LOG(
error) <<
"Class BCMask NOT found:" << token <<
" assuming input";
499 mDescriptors.push_back(desc);
502 mCTPClasses.push_back(cls);
506 LOG(info) <<
"unknown line:" <<
line;
511int CTPConfiguration::processConfigurationLineRun3v2(std::string& line,
int&
level, std::map<
int, std::vector<int>>& descInputsIndex)
517 size_t ntokens = tokens.size();
519 LOG(warning) <<
"# of tokens zero in line:" <<
line;
530 }
else if ((
line.find(
"INPUTS") != std::string::npos) && (
level ==
RUN)) {
533 }
else if ((
line.find(
"inp") != std::string::npos) && (
level ==
INPUTS)) {
540 }
else if (
line.find(
"GENS") != std::string::npos) {
545 }
else if (
line.find(
"DESCRIPTORS") != std::string::npos) {
550 }
else if ((
first =
line.find(
"LTG")) != std::string::npos) {
552 }
else if ((
first =
line.find(
"cluster")) != std::string::npos) {
556 if (knownlevels ==
false) {
567 mRunNumber = std::stoul(tokens[1]);
576 if (tokens.size() != 3) {
581 ctpinp.
name = tokens[1];
582 ctpinp.
level = tokens[1][0];
583 std::string run2Name{tokens[1][1]};
587 mInputs.push_back(ctpinp);
593 if (tokens.size() < 3) {
598 mBCMasks.push_back(bcmask);
605 gen.frequency = tokens[1];
606 mGenerators.push_back(
gen);
611 if ((tokens.size() < 2)) {
612 if (
line.find(
"TRUE") != std::string::npos) {
614 desc.
name = tokens[0];
615 mDescriptors.push_back(desc);
618 LOG(warning) <<
"Unexpected Descriptor:" <<
line;
623 desc.
name = tokens[0];
626 if (inp !=
nullptr) {
627 desc.
inputs.push_back(inp);
630 mDescriptors.push_back(desc);
635 std::string detname = tokens[1];
639 ctpdet.
detID = det.getID();
640 LOG(
debug) <<
"Detector found:" << det.getID() <<
" " << detname;
644 mDetectors.push_back(ctpdet);
650 mDetectors.back().mode = tokens[0];
658 cluster.
hwMask = std::stoull(tokens[0]);
664 cluster.
name = tokens[2];
666 for (
uint32_t item = 3; item < ntokens; item++) {
667 std::string detname = tokens[item];
672 mask |= det.getMask();
675 mClusters.push_back(cluster);
682 if (tokens.size() < 6) {
688 index = std::stoull(tokens[1]);
696 cls.
name = tokens[0];
698 std::string descname = tokens[2];
700 if (descname.find(
"DTRUE") != std::string::npos) {
704 if (desc !=
nullptr) {
710 std::string bcmask = tokens[5];
711 bcmask = bcmask.substr(1, bcmask.size() - 2);
714 if (bcm !=
nullptr) {
719 if (tokens.size() > 6) {
720 cls.
downScale = std::stoul(tokens[6],
nullptr, 16);
722 mCTPClasses.push_back(cls);
726 LOG(warning) <<
"unknown line:" <<
line;
733 stream <<
"Configuration:" << mName <<
" Version:" << mVersion << std::endl;
734 stream <<
"Run:" << mRunNumber <<
" cfg name:" << mName << std::endl;
735 stream <<
"CTP BC masks:" << std::endl;
736 for (
const auto&
i : mBCMasks) {
739 stream <<
"CTP inputs:" << mInputs.size() << std::endl;
740 for (
const auto&
i : mInputs) {
743 stream <<
"CTP generators:" << std::endl;
744 for (
const auto&
i : mGenerators) {
747 stream <<
"CTP descriptors:" << mDescriptors.size() << std::endl;
748 for (
const auto&
i : mDescriptors) {
751 stream <<
"CTP detectors:" << mDetectors.size() << std::endl;
752 for (
const auto&
i : mDetectors) {
755 stream <<
"CTP clusters:" << std::endl;
756 for (
const auto&
i : mClusters) {
759 stream <<
"CTP classes:" << std::endl;
760 for (
const auto&
i : mCTPClasses) {
766 for (
auto const& inp : mInputs) {
777 if (inp !=
nullptr) {
785 if (
index < (
int)mCTPClasses.size()) {
786 return mCTPClasses[
index].name;
794 for (
auto& cls : mCTPClasses) {
799 std::string ret =
"not found";
805 for (
auto const& cls : mCTPClasses) {
815 for (
auto const& inp : mInputs) {
824 for (
auto& bcm : mBCMasks) {
825 if (bcm.
name == maskname) {
833 for (
const auto& bcm : mBCMasks) {
834 if (bcm.
name == maskname) {
835 LOG(info) <<
"isBCMaskInConfigP found:" << maskname;
839 LOG(info) <<
"isBCMaskInConfigP NOT found:" << maskname;
844 for (
const auto& inp : mInputs) {
845 if (inp.
name == inpname) {
846 LOG(info) <<
"isInputInConfig found:" << inpname;
850 LOG(info) <<
"isInputInConfig NOT found:" << inpname;
855 for (
const auto& inp : mInputs) {
858 LOG(info) <<
"Found input:" << inp.
name <<
" index:" << inp.
getIndex();
867 for (
const auto& desc : mDescriptors) {
868 if (desc.
name == descname) {
869 LOG(info) <<
"isDescriptorInConfig found:" << descname;
874 LOG(info) <<
"isDescriptorInConfig NOT found:" << descname;
880 LOG(info) <<
"Creating Inputs";
881 for (
auto& des : mDescriptors) {
889 LOG(info) <<
"Desc index:" <<
index;
892 des.inputs.push_back(inp);
894 LOG(warning) <<
"Descriptor not found:" << des.name;
897 LOG(info) <<
"Input is not a number:" << des.name;
903 std::map<o2::detectors::DetID::ID, std::vector<CTPInput>> det2inp;
904 for (
auto const& inp : mInputs) {
905 det2inp[inp.
detID].push_back(inp);
912 for (
auto const& cls : mCTPClasses) {
920 for (
auto const& cls : mCTPClasses) {
921 if (cls.
name.find(
"TRUE") != std::string::npos) {
931 for (
auto const& cls : mCTPClasses) {
932 bool exclude = cls.
name.find(
"TRUE") != std::string::npos;
933 exclude += cls.
name.find(
"EMC") != std::string::npos;
934 exclude += cls.
name.find(
"TRD") != std::string::npos;
935 exclude += cls.
name.find(
"HMP") != std::string::npos;
946 std::vector<int> classlist;
947 for (
int i = 0;
i < 64;
i++) {
948 if ((1ull <<
i) & clsmask) {
949 classlist.push_back(
i);
956 std::vector<std::string> detlist;
957 for (
auto const& det : mDetectors) {
958 std::string sdet(det.getName());
959 detlist.push_back(sdet);
966 for (
auto const& det : mDetectors) {
967 mask |= det.getMask();
976 for (
auto const& cls : mCTPClasses) {
989 for (
auto& cls : mCTPClasses) {
996 LOG(info) <<
"Checking consistency run:" << mRunNumber;
1000 std::map<std::string, int> inputs;
1001 for (
auto const& inp : mInputs) {
1002 inputs[inp.
name] = 0;
1006 std::map<std::string, int> descs;
1007 for (
auto const& desc : mDescriptors) {
1008 descs[desc.
name] = 0;
1010 for (
auto const inp : desc.
inputs) {
1011 inputs[inp->
name] += 1;
1014 std::cout <<
"desc1:" << descs.size() << std::endl;
1016 for (
const auto& cls : mCTPClasses) {
1018 std::cout <<
"ERROR class:" << cls.
name <<
" NO CLASS MASK" << std::endl;
1022 std::cout <<
"ERROR class:" << cls.
name <<
" NO CLUSTER" << std::endl;
1026 std::cout <<
"ERROR class:" << cls.
name <<
" NO CLUSTER INDEX" << std::endl;
1030 std::cout <<
"ERROR class:" << cls.
name <<
" NO DESCRIPTOR" << std::endl;
1037 std::cout <<
"ERROR class:" << cls.
name <<
" NO DESCRIPTOR INDEX" << std::endl;
1044 for (
auto const& inp : inputs) {
1045 if (inp.second == 0) {
1047 std::cout <<
"WARNING inputs:";
1049 std::cout << inp.first <<
" " << inp.second << std::endl;
1051 std::cout <<
"Descriptors check:" << descs.size() << std::endl;
1052 for (
auto const& desc : descs) {
1053 if (desc.second == 0) {
1055 std::cout <<
"WARNING descriptors:";
1058 std::cout << (desc.first) <<
" " << desc.second << std::endl;
1060 std::cout <<
"CTP Config consistency checked. WARNINGS:" << iw <<
" ERRORS:" << ret << std::endl;
1065 std::cout << mConfigString << std::endl;
1072 if (inpcfg.is_open()) {
1074 while (std::getline(inpcfg, line)) {
1076 if (line.size() == 0) {
1079 if (line[0] ==
'#') {
1083 size_t ntokens = tokens.size();
1085 LOG(warning) <<
"# of tokens < 6 in line:" << ntokens <<
":" << line;
1091 index = std::stoi(tokens[0]);
1093 LOG(warning) << line;
1097 std::string det = tokens[1];
1099 std::string
name = tokens[2];
1125 CTPInput(
"MT0A",
"FT0", 1),
CTPInput(
"MT0C",
"FT0", 2),
CTPInput(
"MTVX",
"FT0", 3),
CTPInput(
"MTSC",
"FT0", 4),
CTPInput(
"MTCE",
"FT0", 5),
1126 CTPInput(
"MVBA",
"FV0", 6),
CTPInput(
"MVOR",
"FV0", 7),
CTPInput(
"MVIR",
"FV0", 8),
CTPInput(
"MVNC",
"FV0", 9),
CTPInput(
"MVCH",
"FV0", 10),
1127 CTPInput(
"0UCE",
"FDD", 13),
CTPInput(
"0USC",
"FDD", 15),
CTPInput(
"0UVX",
"FDD", 16),
CTPInput(
"0U0C",
"FDD", 17),
CTPInput(
"0U0A",
"FDD", 18),
1128 CTPInput(
"0DMC",
"EMC", 14),
CTPInput(
"0DJ1",
"EMC", 41),
CTPInput(
"0DG1",
"EMC", 42),
CTPInput(
"0DJ2",
"EMC", 43),
CTPInput(
"0DG2",
"EMC", 44),
1129 CTPInput(
"0EMC",
"EMC", 21),
CTPInput(
"0EJ1",
"EMC", 37),
CTPInput(
"0EG1",
"EMC", 38),
CTPInput(
"0EJ2",
"EMC", 39),
CTPInput(
"0EG2",
"EMC", 40),
1130 CTPInput(
"0PH0",
"PHS", 22),
CTPInput(
"1PHL",
"PHS", 27),
CTPInput(
"1PHH",
"PHS", 28),
CTPInput(
"1PHL",
"PHM", 29),
1142 indexcor =
index - 100;
1153 LOG(info) <<
"Input with index:" <<
index <<
" not in deafult input config";
1160 if (
index > o2::ctp::CTP_NINPUTS) {
1161 LOG(warn) <<
"getInputNameFRomIndex: index too big:" <<
index;
1170 LOG(info) <<
"Input with index:" <<
index <<
" not in deafult input config";
1175 std::string namecorr =
name;
1176 if ((
name[0] ==
'0') || (
name[0] ==
'M') || (
name[0] ==
'1')) {
1177 namecorr = namecorr.substr(1, namecorr.size() - 1);
1179 LOG(warn) <<
"Input name without level:" <<
name;
1182 if (inp.
name.find(namecorr) != std::string::npos) {
1186 LOG(warn) <<
"Input with name:" <<
name <<
" not in default input config";
1193 std::ifstream ctpcfg(
file);
1194 if (ctpcfg.is_open()) {
1196 while (std::getline(ctpcfg, line)) {
1198 if (line.size() == 0) {
1201 if (line[0] ==
'#') {
1205 size_t ntokens = tokens.size();
1207 LOG(warn) <<
"Not enough tokens";
1210 if (tokens[0].find(
"TForbits") != std::string::npos) {
1211 TFOrbits = std::atol(tokens[1].c_str());
1212 }
else if (tokens[0].find(
"ccdb") != std::string::npos) {
1213 ccdb = std::atoi(tokens[1].c_str());
1214 }
else if (tokens[0].find(
"orbitshift") != std::string::npos) {
1216 }
else if (tokens[0].find(
"ir_inputs") != std::string::npos) {
1220 LOG(warn) <<
" Token not found:" << tokens[0];
1223 LOG(warn) <<
"Open file success:" <<
file;
1225 LOG(warn) <<
"Can not open file:" <<
file;
1233 std::vector<int> inputList;
1234 for (
int i = 0;
i < 24;
i++) {
1236 inputList.push_back(
i);
1239 for (
int i = 0;
i < 24;
i++) {
1241 inputList.push_back(
i + 24);
default_random_engine gen(dev())
configStandalone Light OpenGL display display_light Apply smoothing to points Enable Z buffer Highlight links Highlight seeds Highlight sector tracks Highlight final tracks Show individual Show related Highlight grid Show only individual collision Color clusters belonging to track objects Set line Enable drawing TPC data Enable drawing TOF data Enable drawing magnetic field Set field line step count Invert colors configStandalone Heavy OpenGL display display_heavy Show tracks with ITS contribution Show tracks with TOF contribution Enable propagation of loopers Show clusters at nominal x of pad row for early transformed data Split CE tracks when they cross the central Mark clusters Mark adjacent clusters Hide rejected tracks Apply filter on tracks to be displayed Separate increase X h configStandalone Camera window renderer OpenGL display display_camera Orient the camera such that the y axis is always upwards Full Screen MultiSample Anti Downsampling Anti Enable Vertical Sync Target frame or if the backend cannot limit to the refresh Use OpenGL indirect draws to reduce number of draw calls Display h configStandalone Vulkan display display_vulkan Have uniform buffers in host accessible device memory h configStandalone Internal display display_internal Number of updates the Qt GUI may send ahead of the last one the display has before it waits for the display Opacity of the console background Number of console lines the history is shortened to this when it reaches twice the size Time in seconds an info message fades out after setInfoTime h OpenGL display display Font size Do not use Freetype for font Renderer for event Frontend to use for event ROOT macros used as track filter Console script file
Timeframe settings Average distance in cm of events merged into Randomize distance around average distance of merged events Simulate correct bunch interactions instead of placing only the average number of events A value[n] sets TFlen for[n] collisions in Number of bunches per trainsort Number of bunch trains Instantaneous interaction rate Do not simulate border Total number of collisions to be placed in the interior of all time Do not select random but walk over array of events in stride steps h Event generator settings h configStandalone Use CPU for GPU Force usage of the specified GPU device no CPU fallback Continue processing after an error s
Timeframe settings Average distance in cm of events merged into Randomize distance around average distance of merged events Simulate correct bunch interactions instead of placing only the average number of events A value[n] sets TFlen for[n] collisions in Number of bunches per trainsort Number of bunch trains Instantaneous interaction rate Do not simulate border Total number of collisions to be placed in the interior of all time Do not select random but walk over array of events in stride steps h Event generator settings h configStandalone Use CPU for GPU Force usage of the specified GPU device no CPU fallback Continue processing after an error First event to Number of events to Number of iterations to Number of iterations to Number of initial iterations excluded from const char Directory with events to Events directory is and not inside events Show standalone event Run event generator maximum time bin of continuous for triggered for automatic continuous for automatic continuous triggered uint64_t
char error[CURL_ERROR_SIZE]
std::vector< std::string > getDetectorList() const
std::vector< int > getTriggerClassList() const
static bool isNumber(const std::string &s)
uint64_t getInputMask(const std::string &name) const
uint64_t getTriggerClassMaskWInputsNoTrgDets() const
uint64_t getTriggerClassMask() const
void createInputsInDecriptorsFromNames()
std::string getClassNameFromIndex(int index)
const CTPInput * isInputInConfig(const std::string inpname) const
std::string getClassNameFromHWIndex(int index)
const BCMask * isBCMaskInConfigP(const std::string bcmask) const
bool isBCMaskInConfig(const std::string maskname) const
int addInput(std::string &inp, int clsindex, std::map< int, std::vector< int > > &descInputsIndex)
int getInputIndex(const std::string &name) const
o2::detectors::DetID::mask_t getDetectorMask() const
static void capitaliseString(std::string &str)
uint64_t getClassMaskForInputMask(uint64_t inputMask) const
const CTPDescriptor * isDescriptorInConfig(const std::string descname, int &index) const
void printStream(std::ostream &stream) const
int loadConfigurationRun3(const std::string &ctpconfiguartion)
const CTPClass * getCTPClassFromHWIndex(const int index) const
uint64_t getTriggerClassMaskWInputs() const
int checkConfigConsistency() const
std::map< o2::detectors::DetID::ID, std::vector< CTPInput > > getDet2InputMap()
bool isMaskInInputs(const uint64_t &mask) const
bool isDetector(const o2::detectors::DetID &det)
static const std::map< std::string, std::string > detName2LTG
Static class with identifiers, bitmasks and names for ALICE detectors.
GLuint const GLchar * name
GLboolean GLboolean GLboolean b
GLsizei const GLchar *const * path
std::ostream & operator<<(std::ostream &in, const CTPConfiguration &conf)
int32_t const char int32_t line
std::string to_string(gsl::span< T, Size > span)
std::bitset< o2::constants::lhc::LHCMaxBunches > BCmask
int setBCmask(std::vector< std::string > &tokens)
void printStream(std::ostream &stream) const
Class = Mask+Descriptor+Cluster.
std::vector< BCMask const * > BCClassMask
void printStream(std::ostream &strem) const
CTPCluster const * cluster
CTPDescriptor const * descriptor
o2::detectors::DetID::mask_t maskCluster
std::string getClusterDetNames() const
void printStream(std::ostream &strem) const
Descriptor = Generator or List of [negated] inputs.
std::vector< CTPInput const * > inputs
std::uint64_t getInputsMask() const
void printStream(std::ostream &strem) const
The main part is Local Trigger Generator (LTG)
void printStream(std::ostream &stream) const
const char * getName() const
o2::detectors::DetID::ID detID
CTP internal generator: 4 for L0 and 4 for LM levels.
void printStream(std::ostream &stream) const
static const std::set< std::string > Generators
std::vector< int > listOfUsedInputs()
int readAndSave(std::string &path)
static void trim(std::string &s)
static std::vector< std::string > tokenize(const std::string &src, char delim, bool trimToken=true, bool skipEmpty=true)
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"