8#include "GaudiKernel/MsgStream.h"
26 const std::string &
name,
27 const IInterface *parent)
29 m_jeTool(
"LVL1::L1JetElementTools/L1JetElementTools"),
30 m_etTool(
"LVL1::L1EtTools/L1EtTools")
32 declareInterface<IL1EnergyCMXTools>(
this);
55 return StatusCode::SUCCESS;
62 return StatusCode::SUCCESS;
77 unsigned int nslices = 1;
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);
99 for (
unsigned int slice = 0; slice < nslices; ++slice)
102 modulesVec.push_back(modules);
103 m_etTool->moduleSums(&jeMap, modules, slice);
107 MultiSliceModuleEnergy::iterator miter = modulesVec.begin();
108 MultiSliceModuleEnergy::iterator miterE = modulesVec.end();
109 for (; miter != miterE; ++miter)
126 MultiSliceModuleEnergy::iterator iter = modulesVec.begin();
127 MultiSliceModuleEnergy::iterator iterE = modulesVec.end();
130 for (; iter != iterE; ++iter)
134 cratesVec.push_back(crates);
135 m_etTool->crateSums(modules, crates);
136 systemVec.push_back(
new SystemEnergy(crates, &(*l1Menu)));
141 MultiSliceCrateEnergy::iterator citer = cratesVec.begin();
142 MultiSliceCrateEnergy::iterator citerE = cratesVec.end();
143 for (; citer != citerE; ++citer)
147 MultiSliceSystemEnergy::iterator siter = systemVec.begin();
148 MultiSliceSystemEnergy::iterator siterE = systemVec.end();
149 for (; siter != siterE; ++siter)
161 for (; pos != pose; ++pos)
166 item->makePrivateStore();
169 err, err, err, sums->
peak());
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)
221 uint32_t maskXE, maskTE;
223 ATH_MSG_DEBUG(
"Restricted eta masks: XE=" << MSG::hex << maskXE <<
", TE=" << maskTE << MSG::dec);
231 for (
auto iter : modulesVec)
236 cratesVecFull.push_back(cratesFull);
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++)
277 MultiSliceCrateEnergy::iterator iter = (*cratesVec).begin();
278 MultiSliceCrateEnergy::iterator iterE = (*cratesVec).end();
279 for (; iter != iterE; ++iter)
283 systemVec->push_back(
new SystemEnergy(crates, &(*l1Menu)));
291 for (
int i = 0; i < 2; i++)
294 MultiSliceSystemEnergy::iterator siter = (*systemVec).begin();
295 MultiSliceSystemEnergy::iterator siterE = (*systemVec).end();
296 for (; siter != siterE; ++siter)
314 MultiSliceSystemEnergy::iterator iter = systemVec.begin();
315 MultiSliceSystemEnergy::iterator iterE = systemVec.end();
316 for (; iter != iterE; ++iter)
327 unsigned int nslices = 0;
330 for (; pos != pose; ++pos)
336 int crate = sums->
crate();
337 if (sums->
peak() > peak)
342 unsigned int slices =
et.size();
343 if (slices > nslices)
345 for (
unsigned int i = nslices; i < slices; ++i)
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;
389 nslices = &nslicesRestricted;
392 crateVec = &crateVecFull;
393 nslices = &nslicesFull;
396 if (sums->
peak() > peak)
404 unsigned int slices =
et.size();
406 if (slices > *nslices)
408 for (
unsigned int i = *nslices; i < slices; ++i)
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)
454 unsigned int slices =
et.size();
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();
481 std::vector<uint16_t> dummy(nslices);
482 for (
unsigned int slice = 0; slice < nslices; ++slice)
487 for (; pos != pose; ++pos)
493 unsigned int ex = energy->ex();
494 unsigned int ey = energy->ey();
495 unsigned int et = energy->et();
496 if (ex == 0 && ey == 0 &&
et == 0)
498 int crate = energy->crate();
499 int module = energy->module();
501 int key = crate * 100 + module;
502 std::map<int, xAOD::JEMEtSums *>::iterator iter = etMap.find(key);
503 if (iter == etMap.end())
507 sums->
initialize(crate, module, dummy, dummy, dummy, peak);
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();
534 std::vector<uint16_t> dummy(nslices);
535 std::vector<uint32_t>
error(nslices);
536 for (
unsigned int slice = 0; slice < nslices; ++slice)
541 for (; pos != pose; ++pos)
544 unsigned int ex = energy->exTC();
545 unsigned int ey = energy->eyTC();
546 unsigned int et = energy->et();
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)
560 int key = crate * 100 + source;
561 std::map<int, xAOD::CMXEtSums *>::iterator iter = etMap.find(key);
562 if (iter == etMap.end())
566 sums->
initialize(crate, source, dummy, dummy, dummy,
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());
586 exErr[slice] = dEx.
error();
592 eyErr[slice] = dEy.
error();
598 etErr[slice] = dEt.
error();
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();
627 std::vector<uint16_t> dummy(nslices);
628 std::vector<uint32_t>
error(nslices);
634 for (
unsigned int slice = 0; slice < nslices; ++slice)
636 for (
unsigned int i = 0; i < 2; i++)
638 const auto *crates = (i == 0 ? cratesVecFull[slice] : cratesVecRestricted[slice]);
641 for (
auto pos : *crates)
643 int source = origSource;
645 unsigned int ex = energy->exTC();
646 unsigned int ey = energy->eyTC();
647 unsigned int et = energy->et();
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();
659 int key = crate * 100 + source;
660 std::map<int, xAOD::CMXEtSums *>::iterator iter = etMap.find(key);
661 if (iter == etMap.end())
665 sums->
initialize(crate, source, dummy, dummy, dummy,
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());
685 exErr[slice] = dEx.
error();
691 eyErr[slice] = dEy.
error();
697 etErr[slice] = dEt.
error();
699 sums->
addEx(exVec, exErr);
700 sums->
addEy(eyVec, eyErr);
701 sums->
addEt(etVec, etErr);
744 unsigned int nslices = systemVec.size();
745 std::vector<uint16_t>
data(nslices);
746 std::vector<uint32_t>
error(nslices);
747 for (
unsigned int slice = 0; slice < nslices; ++slice)
750 unsigned int ex = energy->exTC();
751 unsigned int ey = energy->eyTC();
752 unsigned int et = energy->et();
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());
783 exErr[slice] = dEx.
error();
790 eyErr[slice] = dEy.
error();
796 etErr[slice] = dEt.
error();
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();
887 (*sumEt)->makePrivateStore();
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();
909 (*missEt)->makePrivateStore();
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();
928 (*missEtSig)->makePrivateStore();
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 ");
950 ATH_MSG_DEBUG(
" Et " << c->et() <<
" overflow " << c->etOverflow());
951 ATH_MSG_DEBUG(
" Ex " << c->ex() <<
" overflow " << c->exOverflow());
952 ATH_MSG_DEBUG(
" Ey " << c->ey() <<
" overflow "<< c->eyOverflow());
#define ATH_CHECK
Evaluate an expression and check for errors.
char data[hepevt_bytes_allocation_ATLAS]
float et(const xAOD::jFexSRJetRoI *j)
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
bool msgLvl(const MSG::Level lvl) const
DataModel_detail::const_iterator< DataVector > const_iterator
value_type push_back(value_type pElem)
Add an element to the end of the collection.
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
@ MISSING_ET_SIG_STANDARD
CrateEnergy class declaration Simulates behaviour of the Crate-CMM System CMM logic is done in Energy...
int error() const
Return the full error word.
void set(ErrorBit bit, int value=1)
Set an error bit or data.
int get(ErrorBit bit) const
Return an error bit or data.
This is an internal class, used in the Energy trigger.
SystemEnergy class declaration Simulates behaviour of the Crate-CMM System CMM logic is done in Energ...
void makePrivateStore()
Create a new (empty) private store for this object.
static std::string & typeAsString(TriggerType tt)
virtual ValueWithEtaDependence< unsigned int > thrValuesCounts() const
access to the list of ThresholdValues in energy units
uint8_t crate() const
get crate
virtual void initialize(const uint8_t crate, const uint8_t source)
initialize
void addEt(const std::vector< uint16_t > &etVec, const std::vector< uint32_t > &etErrorVec)
add data to existing object add Et
const std::vector< uint32_t > & eyErrorVec() const
get eyErrorVec
uint8_t sourceComponent() const
get source
uint8_t peak() const
get peak
const std::vector< uint32_t > & exErrorVec() const
get exErrorVec
const std::vector< uint16_t > & exVec() const
get exVec
const std::vector< uint16_t > & eyVec() const
get eyVec
void addEx(const std::vector< uint16_t > &exVec, const std::vector< uint32_t > &exErrorVec)
add Ex
const std::vector< uint16_t > & etVec() const
get etVec
const std::vector< uint32_t > & etErrorVec() const
get etErrorVec
void addEy(const std::vector< uint16_t > &eyVec, const std::vector< uint32_t > &eyErrorVec)
add Ey
virtual void initialize(const uint8_t crate, const uint8_t module)
initialize
uint8_t module() const
get module
const std::vector< uint16_t > & eyVec() const
get eyVec - ey for all time slices
void setExVec(const std::vector< uint16_t > &)
set exVec - ex for all time slices
void setEyVec(const std::vector< uint16_t > &)
set eyVec - ey for all time slices
uint8_t crate() const
get crate number
void setEtVec(const std::vector< uint16_t > &)
set etVec - et for all time slices
const std::vector< uint16_t > & etVec() const
Please note that in the context of JEMEtSums, et is total energy, not transverse energy For transvers...
uint8_t peak() const
get peak
const std::vector< uint16_t > & exVec() const
get exVec - ex for all time slices
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
JetElementContainer_v2 JetElementContainer
Define the latest version of the JetElement container.
CMXEtSumsContainer_v1 CMXEtSumsContainer
Define the latest version of the CMXEtSums class.
JEMEtSums_v2 JEMEtSums
Define the latest version of the JEMEtSums class.
CMXEtSums_v1 CMXEtSums
Define the latest version of the CMXEtSums class.
std::map< int, const JetElement * > JetElementMap_t
JEMEtSumsContainer_v2 JEMEtSumsContainer
Define the latest version of the JEMEtSums container.
Extra patterns decribing particle interation process.