8 #include "GaudiKernel/MsgStream.h"
26 const std::string &
name,
29 m_jeTool(
"LVL1::L1JetElementTools/L1JetElementTools"),
30 m_etTool(
"LVL1::L1EtTools/L1EtTools")
32 declareInterface<IL1EnergyCMXTools>(
this);
55 return StatusCode::SUCCESS;
62 return StatusCode::SUCCESS;
80 for (; iter != iterE; ++iter)
82 if ((*iter)->emJetElementETVec().size() >
nslices)
84 nslices = (*iter)->emJetElementETVec().size();
85 peak = (*iter)->peak();
88 if ((*iter)->hadJetElementETVec().size() >
nslices)
90 nslices = (*iter)->hadJetElementETVec().size();
91 peak = (*iter)->peak();
97 m_jeTool->mapJetElements(jetElementVec, &jeMap);
109 for (; miter != miterE; ++miter)
130 for (; iter != iterE; ++iter)
135 m_etTool->crateSums(modules, crates);
136 systemVec.push_back(
new SystemEnergy(crates, &(*l1Menu)));
143 for (; citer != citerE; ++citer)
149 for (; siter != siterE; ++siter)
161 for (;
pos != pose; ++
pos)
166 item->makePrivateStore();
178 const float moduleEta[8] = {-4.,-2.,-1.2,-0.4,0.4,1.2,2.,4.};
181 bool maskXESet =
false;
182 bool maskTESet =
false;
185 std::vector<std::shared_ptr<TrigConf::L1Threshold>> allThresholds = l1Menu->thresholds();
186 for (
const auto&
thresh : allThresholds ) {
192 if (maskXE > 0) maskXESet =
true;
193 if (maskTE > 0) maskTESet =
true;
194 if (tvcs.size() == 0) {
195 tvcs.
addRangeValue(thresh_Calo->thrValueCounts(),-49, 49, 1,
true);
197 for (
const auto& tVC : tvcs) {
199 if (tVC.value() >= 0x7fff)
continue;
202 for (
unsigned int bin = 0;
bin < 8; ++
bin) {
203 if (moduleEta[
bin] > tVC.etaMin()*0.1 && moduleEta[
bin] < tVC.etaMax()*0.1)
208 for (
unsigned int bin = 0;
bin < 8; ++
bin) {
209 if (moduleEta[
bin] > tVC.etaMin()*0.1 && moduleEta[
bin] < tVC.etaMax()*0.1)
223 ATH_MSG_DEBUG(
"Restricted eta masks: XE=" << MSG::hex << maskXE <<
", TE=" << maskTE << MSG::dec);
231 for (
auto iter : modulesVec)
237 cratesVecRestricted.push_back(cratesRestricted);
238 m_etTool->crateSums(modules, cratesFull);
239 m_etTool->crateSums(modules, cratesRestricted, maskXE, maskTE,
true);
247 for (
auto crate : cratesVecFull)
251 for (
auto crate : cratesVecRestricted)
272 for (
int i = 0;
i < 2;
i++)
279 for (; iter != iterE; ++iter)
291 for (
int i = 0;
i < 2;
i++)
296 for (; siter != siterE; ++siter)
316 for (; iter != iterE; ++iter)
330 for (;
pos != pose; ++
pos)
336 int crate = sums->
crate();
337 if (sums->
peak() > peak)
351 for (
unsigned int sl = 0; sl <
slices; ++sl)
355 et[sl], ex[sl], ey[sl]));
367 unsigned int nslicesFull = 0;
368 unsigned int nslicesRestricted = 0;
373 unsigned int *
nslices =
nullptr;
374 bool restricted =
false;
375 for (;
pos != pose; ++
pos)
378 int crate = sums->
crate();
388 crateVec = &crateVecRestricted;
392 crateVec = &crateVecFull;
396 if (sums->
peak() > peak)
414 for (
unsigned int sl = 0; sl <
slices; ++sl)
428 dumpCrateEnergies(
"Crates from restricted region (for total)", crateVecRestricted);
440 for (;
pos != pose; ++
pos)
446 if (sums->
peak() > peak)
456 for (
unsigned int sl = 0; sl <
slices; ++sl)
468 systemVec.push_back(systemEnergy);
479 std::map<int, xAOD::JEMEtSums *> etMap;
480 unsigned int nslices = modulesVec.size();
487 for (;
pos != pose; ++
pos)
493 unsigned int ex =
energy->ex();
494 unsigned int ey =
energy->ey();
496 if (ex == 0 && ey == 0 &&
et == 0)
498 int crate =
energy->crate();
503 if (iter == etMap.end())
508 etMap.insert(std::make_pair(
key, sums));
513 std::vector<uint16_t> exVec(sums->
exVec());
514 std::vector<uint16_t> eyVec(sums->
eyVec());
515 std::vector<uint16_t> etVec(sums->
etVec());
532 std::map<int, xAOD::CMXEtSums *> etMap;
533 unsigned int nslices = cratesVec.size();
541 for (;
pos != pose; ++
pos)
544 unsigned int ex =
energy->exTC();
545 unsigned int ey =
energy->eyTC();
547 int exOverflow =
energy->exOverflow();
548 int eyOverflow =
energy->eyOverflow();
549 int etOverflow =
energy->etOverflow();
550 if (ex == 0 && ey == 0 &&
et == 0 &&
551 exOverflow == 0 && eyOverflow == 0 && etOverflow == 0)
553 int crate =
energy->crate();
556 for (
int i = 0;
i < 2; ++
i)
558 for (
int j = 0; j < 2; ++j)
562 if (iter == etMap.end())
568 etMap.insert(std::make_pair(
key, sums));
573 std::vector<uint16_t> exVec(sums->
exVec());
574 std::vector<uint16_t> eyVec(sums->
eyVec());
575 std::vector<uint16_t> etVec(sums->
etVec());
576 std::vector<uint32_t> exErr(sums->
exErrorVec());
577 std::vector<uint32_t> eyErr(sums->
eyErrorVec());
578 std::vector<uint32_t> etErr(sums->
etErrorVec());
600 sums->
addEx(exVec, exErr);
601 sums->
addEy(eyVec, eyErr);
602 sums->
addEt(etVec, etErr);
625 std::map<int, xAOD::CMXEtSums *> etMap;
626 unsigned int nslices = cratesVecFull.size();
636 for (
unsigned int i = 0;
i < 2;
i++)
638 const auto *crates = (
i == 0 ? cratesVecFull[
slice] : cratesVecRestricted[
slice]);
641 for (
auto pos : *crates)
645 unsigned int ex =
energy->exTC();
646 unsigned int ey =
energy->eyTC();
648 int exOverflow =
energy->exOverflow();
649 int eyOverflow =
energy->eyOverflow();
650 int etOverflow =
energy->etOverflow();
651 if (ex == 0 && ey == 0 &&
et == 0 &&
652 exOverflow == 0 && eyOverflow == 0 && etOverflow == 0)
654 int crate =
energy->crate();
661 if (iter == etMap.end())
667 etMap.insert(std::make_pair(
key, sums));
672 std::vector<uint16_t> exVec(sums->
exVec());
673 std::vector<uint16_t> eyVec(sums->
eyVec());
674 std::vector<uint16_t> etVec(sums->
etVec());
675 std::vector<uint32_t> exErr(sums->
exErrorVec());
676 std::vector<uint32_t> eyErr(sums->
eyErrorVec());
677 std::vector<uint32_t> etErr(sums->
etErrorVec());
699 sums->
addEx(exVec, exErr);
700 sums->
addEy(eyVec, eyErr);
701 sums->
addEt(etVec, etErr);
744 unsigned int nslices = systemVec.size();
750 unsigned int ex =
energy->exTC();
751 unsigned int ey =
energy->eyTC();
753 int exOverflow =
energy->exOverflow();
754 int eyOverflow =
energy->eyOverflow();
755 int etOverflow =
energy->etOverflow();
758 if (ex == 0 && ey == 0 &&
et == 0 &&
759 exOverflow == 0 && eyOverflow == 0 && etOverflow == 0)
769 std::vector<uint16_t> exVec(sums->
exVec());
770 std::vector<uint16_t> eyVec(sums->
eyVec());
771 std::vector<uint16_t> etVec(sums->
etVec());
772 std::vector<uint32_t> exErr(sums->
exErrorVec());
773 std::vector<uint32_t> eyErr(sums->
eyErrorVec());
774 std::vector<uint32_t> etErr(sums->
etErrorVec());
798 sums->
addEx(exVec, exErr);
799 sums->
addEy(eyVec, eyErr);
800 sums->
addEt(etVec, etErr);
824 int nslicesRestricted = 0;
826 std::map<int, bool> isRestrictedMap;
829 for (
unsigned int i = 0;
i < systemVec.size(); ++
i)
831 bool isRestricted = (systemVec[
i]->roiWord0() >> 26) & 1;
832 isRestrictedMap[
i] = isRestricted;
842 std::vector<uint16_t> dataFull(nslicesFull);
843 std::vector<uint32_t> errorFull(nslicesFull);
845 std::vector<uint16_t> dataRestricted(nslicesRestricted);
846 std::vector<uint32_t> errorRestricted(nslicesRestricted);
849 int iSliceRestricted = 0;
852 for (
unsigned int i = 0;
i < systemVec.size(); ++
i)
855 bool restricted = isRestrictedMap[
i];
857 std::vector<uint16_t>*
data;
858 std::vector<uint32_t>*
error;
861 sumEt = &sumEtRestricted;
862 missEt = &missEtRestricted;
863 missEtSig = &missEtSigRestricted;
864 iSlice = &iSliceRestricted;
865 data = &dataRestricted;
866 error = &errorRestricted;
871 missEt = &missEtFull;
872 missEtSig = &missEtSigFull;
873 iSlice = &iSliceFull;
878 unsigned int slice = *iSlice;
881 unsigned int etSumHits =
energy->etSumHits();
888 (*sumEt)->initialize(1, restricted
894 std::vector<uint16_t> etVec((*sumEt)->etVec());
895 etVec[
slice] = etSumHits;
897 (*sumEt)->addEx(etVec, *
error);
898 (*sumEt)->addEy(etVec, *
error);
899 (*sumEt)->addEt(etVec, *
error);
903 unsigned int etMissHits =
energy->etMissHits();
910 (*missEt)->initialize(1, restricted
916 std::vector<uint16_t> etVec((*missEt)->etVec());
917 etVec[
slice] = etMissHits;
918 (*missEt)->addEx(etVec, *
error);
919 (*missEt)->addEy(etVec, *
error);
920 (*missEt)->addEt(etVec, *
error);
922 unsigned int etMissSigHits =
energy->metSigHits();
932 std::vector<uint16_t> etVec((*missEtSig)->etVec());
933 etVec[
slice] = etMissSigHits;
934 (*missEtSig)->addEx(etVec, *
error);
935 (*missEtSig)->addEy(etVec, *
error);
936 (*missEtSig)->addEt(etVec, *
error);
947 for (
const auto&
p : crates) {
949 ATH_MSG_DEBUG(
" CrateEnergy: crate " <<
c->crate() <<
" results ");