29 if (!mCTPConfiguration) {
32 std::map<o2::detectors::DetID::ID, std::vector<CTPInput>> det2ctpinp = mCTPConfiguration->
getDet2InputMap();
34 std::map<std::string, uint64_t> detInputName2Mask =
35 {{
"MVBA", 1}, {
"MVOR", 2}, {
"MVNC", 4}, {
"MVCH", 8}, {
"MVIR", 0x10}, {
"MT0A", 1}, {
"MT0C", 2}, {
"MTSC", 4}, {
"MTCE", 8}, {
"MTVX", 0x10}, {
"0U0A", 1}, {
"0U0C", 2}, {
"0USC", 4}, {
"0UCE", 8}, {
"0UVX", 0x10}, {
"EMBA", 0x1}, {
"0EMC", 0x2}, {
"0DMC", 0x4}};
38 std::map<o2::InteractionRecord, std::vector<const CTPInputDigit*>> predigits;
39 for (
auto const& inp : detinputs) {
40 predigits[inp.intRecord].push_back(&inp);
43 std::vector<CTPDigit>
digits;
44 for (
auto const& hits : predigits) {
45 std::bitset<CTP_NINPUTS> inpmaskcoll = 0;
46 auto currentIR = hits.first;
47 for (
auto const inp : hits.second) {
48 switch (inp->detector) {
52 uint64_t
mask = (inp->inputsMask).to_ullong() & detInputName2Mask[ctpinp.name];
54 inpmaskcoll |= std::bitset<CTP_NINPUTS>(ctpinp.inputMask);
61 uint64_t
mask = (inp->inputsMask).to_ullong() & detInputName2Mask[ctpinp.name];
63 inpmaskcoll |= std::bitset<CTP_NINPUTS>(ctpinp.inputMask);
70 uint64_t
mask = (inp->inputsMask).to_ullong() & detInputName2Mask[ctpinp.name];
72 inpmaskcoll |= std::bitset<CTP_NINPUTS>(ctpinp.inputMask);
79 uint64_t inpmaskdebug = (inp->inputsMask).to_ullong();
80 if (inpmaskdebug & detInputName2Mask[
"EMBA"]) {
82 std::bitset<CTP_NINPUTS> emcMBaccept;
83 emcMBaccept.set(CTP_NINPUTS - 1, 1);
84 inpmaskcoll |= emcMBaccept;
87 uint64_t
mask = inpmaskdebug & detInputName2Mask[ctpinp.name];
90 inpmaskcoll |= std::bitset<CTP_NINPUTS>(ctpinp.inputMask);
99 uint64_t
mask = (inp->inputsMask).to_ullong() & detInputName2Mask[ctpinp.name];
101 inpmaskcoll |= std::bitset<CTP_NINPUTS>(ctpinp.inputMask);
108 uint64_t
mask = (inp->inputsMask).to_ullong() & detInputName2Mask[ctpinp.name];
110 inpmaskcoll |= std::bitset<CTP_NINPUTS>(ctpinp.inputMask);
117 LOG(error) <<
"CTP Digitizer: unknown detector:" << inp->detector;
123 if (inpmaskcoll.to_ullong()) {
125 std::bitset<64> classmask;
127 if (classmask.to_ulong() == 0) {
133 data.CTPInputMask = inpmaskcoll;
134 data.CTPClassMask = classmask;
136 LOG(info) <<
"Trigger-Event " <<
data.intRecord.
bc <<
" " <<
data.intRecord.orbit <<
" Input mask:" << inpmaskcoll <<
" with IR = " <<
data.intRecord.bc <<
", orbit = " <<
data.intRecord.orbit;
146 auto clustername = boost::algorithm::to_lower_copy(tcl.cluster->name);
147 if (clustername ==
"emc") {
149 bool tvxMBemc = tcl.name.find(
"C0TVX-B-NOPF-EMC") != std::string::npos;
150 tvxMBemc |= tcl.name.find(
"C0TVX-A-NOPF-EMC") != std::string::npos;
151 tvxMBemc |= tcl.name.find(
"C0TVX-C-NOPF-EMC") != std::string::npos;
152 tvxMBemc |= tcl.name.find(
"C0TVX-E-NOPF-EMC") != std::string::npos;
153 if (clustername ==
"emc") {
154 tvxMBemc |= tcl.name.find(
"minbias_TVX_L0") != std::string::npos;
156 if (tvxMBemc || (ctpinpmask.to_ullong() & tcl.descriptor->getInputsMask()) == tcl.descriptor->getInputsMask()) {
161 if (ctpinpmask[CTP_NINPUTS - 1]) {
162 classmask |= tcl.classMask;
163 LOG(info) <<
"adding MBA:" << tcl.name;
169 classmask |= tcl.classMask;
173 if (tcl.descriptor && ((ctpinpmask.to_ullong() & tcl.descriptor->getInputsMask()) == tcl.descriptor->getInputsMask())) {
174 classmask |= tcl.classMask;
178 LOG(info) <<
"input mask:" << ctpinpmask;
179 LOG(info) <<
"class mask:" << classmask;