25 const std::string&
name,
26 const IInterface* parent)
29 m_jeTool(
"LVL1::L1JetElementTools/L1JetElementTools"),
30 m_etTool(
"LVL1::L1EtTools/L1EtTools")
32 declareInterface<IL1JEPEtSumsTools>(
this);
58 return StatusCode::SUCCESS;
69 unsigned int nslices = 1;
72 for (; iter != iterE; ++iter) {
73 if ((*iter)->emJetElementETVec().size() > nslices) {
74 nslices = (*iter)->emJetElementETVec().size();
75 peak = (*iter)->peak();
78 if ((*iter)->hadJetElementETVec().size() > nslices) {
79 nslices = (*iter)->emJetElementETVec().size();
80 peak = (*iter)->peak();
86 m_jeTool->mapJetElements(jetElementVec, &jeMap);
88 for (
unsigned int slice = 0; slice < nslices; ++slice) {
90 modulesVec.push_back(modules);
91 m_etTool->moduleSums(&jeMap, modules, slice);
95 MultiSliceModuleEnergy::iterator miter = modulesVec.begin();
96 MultiSliceModuleEnergy::iterator miterE = modulesVec.end();
97 for (; miter != miterE; ++miter)
delete *miter;
113 MultiSliceModuleEnergy::iterator iter = modulesVec.begin();
114 MultiSliceModuleEnergy::iterator iterE = modulesVec.end();
115 for (; iter != iterE; ++iter) {
118 cratesVec.push_back(crates);
119 m_etTool->crateSums(modules, crates);
125 MultiSliceCrateEnergy::iterator citer = cratesVec.begin();
126 MultiSliceCrateEnergy::iterator citerE = cratesVec.end();
127 for (; citer != citerE; ++citer)
delete *citer;
130 MultiSliceSystemEnergy::iterator siter = systemVec.begin();
131 MultiSliceSystemEnergy::iterator siterE = systemVec.end();
132 for (; siter != siterE; ++siter)
delete *siter;
143 for (; pos != pose; ++pos) {
148 err, err, err, sums->
peak()));
164 MultiSliceModuleEnergy::iterator iter = modulesVec.begin();
165 MultiSliceModuleEnergy::iterator iterE = modulesVec.end();
166 for (; iter != iterE; ++iter) {
169 cratesVec.push_back(crates);
170 m_etTool->crateSums(modules, crates);
175 MultiSliceCrateEnergy::iterator miter = cratesVec.begin();
176 MultiSliceCrateEnergy::iterator miterE = cratesVec.end();
177 for (; miter != miterE; ++miter)
delete *miter;
192 MultiSliceCrateEnergy::iterator iter = cratesVec.begin();
193 MultiSliceCrateEnergy::iterator iterE = cratesVec.end();
194 for (; iter != iterE; ++iter) {
201 MultiSliceSystemEnergy::iterator siter = systemVec.begin();
202 MultiSliceSystemEnergy::iterator siterE = systemVec.end();
203 for (; siter != siterE; ++siter)
delete *siter;
219 MultiSliceSystemEnergy::iterator iter = systemVec.begin();
220 MultiSliceSystemEnergy::iterator iterE = systemVec.end();
221 for (; iter != iterE; ++iter)
delete *iter;
231 unsigned int nslices = 0;
234 for (; pos != pose; ++pos) {
236 int dataId = sums->
dataID();
237 if (dataId > 15)
continue;
238 int crate = sums->
crate();
239 if (sums->
peak() > peak) peak = sums->
peak();
243 unsigned int slices =
et.size();
244 if (slices > nslices) {
245 for (
unsigned int i = nslices; i < slices; ++i) {
250 for (
unsigned int sl = 0; sl < slices; ++sl) {
253 et[sl], ex[sl], ey[sl]));
264 unsigned int nslices = 0;
267 for (; pos != pose; ++pos) {
269 int crate = sums->
crate();
270 if (crate != 1)
continue;
271 int dataId = sums->
dataID();
275 if (sums->
peak() > peak) peak = sums->
peak();
282 unsigned int slices =
et.size();
283 if (slices > nslices) {
284 for (
unsigned int i = nslices; i < slices; ++i) {
289 for (
unsigned int sl = 0; sl < slices; ++sl) {
312 for (; pos != pose; ++pos) {
314 int dataId = sums->
dataID();
316 if (sums->
peak() > peak) peak = sums->
peak();
323 unsigned int slices =
et.size();
325 for (
unsigned int sl = 0; sl < slices; ++sl) {
345 std::map<int, JEMEtSums*> etMap;
346 unsigned int nslices = modulesVec.size();
347 std::vector<unsigned int> dummy(nslices);
348 for (
unsigned int slice = 0; slice < nslices; ++slice) {
352 for (; pos != pose; ++pos) {
354 unsigned int ex = energy->ex();
355 unsigned int ey = energy->ey();
356 unsigned int et = energy->et();
357 if (ex == 0 && ey == 0 &&
et == 0)
continue;
358 int crate = energy->crate();
359 int module = energy->module();
361 int key = crate*100 + module;
362 std::map<int, JEMEtSums*>::iterator iter = etMap.find(key);
363 if (iter == etMap.end()) {
364 sums =
new JEMEtSums(crate, module, dummy, dummy, dummy, peak);
365 etMap.insert(std::make_pair(key, sums));
367 }
else sums = iter->second;
368 std::vector<unsigned int> exVec(sums->
ExVec());
369 std::vector<unsigned int> eyVec(sums->
EyVec());
370 std::vector<unsigned int> etVec(sums->
EtVec());
387 std::map<int, CMMEtSums*> etMap;
388 unsigned int nslices = cratesVec.size();
389 std::vector<unsigned int> dummy(nslices);
390 std::vector<int>
error(nslices);
391 for (
unsigned int slice = 0; slice < nslices; ++slice) {
395 for (; pos != pose; ++pos) {
397 unsigned int ex = energy->exTC();
398 unsigned int ey = energy->eyTC();
399 unsigned int et = energy->et();
400 int exOverflow = energy->exOverflow();
401 int eyOverflow = energy->eyOverflow();
402 int etOverflow = energy->etOverflow();
403 if (ex == 0 && ey == 0 &&
et == 0 &&
404 exOverflow == 0 && eyOverflow == 0 && etOverflow == 0)
continue;
405 int crate = energy->crate();
408 for (
int i = 0; i < 2; ++i) {
409 int key = crate*100 + dataId;
410 std::map<int, CMMEtSums*>::iterator iter = etMap.find(key);
411 if (iter == etMap.end()) {
412 sums =
new CMMEtSums(crate, dataId, dummy, dummy, dummy,
414 etMap.insert(std::make_pair(key, sums));
416 }
else sums = iter->second;
417 std::vector<unsigned int> exVec(sums->
ExVec());
418 std::vector<unsigned int> eyVec(sums->
EyVec());
419 std::vector<unsigned int> etVec(sums->
EtVec());
429 exErr[slice] = dEx.
error();
434 eyErr[slice] = dEy.
error();
439 etErr[slice] = dEt.
error();
441 sums->
addEx(exVec, exErr);
442 sums->
addEy(eyVec, eyErr);
443 sums->
addEt(etVec, etErr);
444 if (crate == 1)
break;
459 unsigned int nslices = systemVec.size();
460 std::vector<unsigned int>
data(nslices);
461 std::vector<int>
error(nslices);
462 for (
unsigned int slice = 0; slice < nslices; ++slice) {
464 unsigned int ex = energy->exTC();
465 unsigned int ey = energy->eyTC();
466 unsigned int et = energy->et();
467 int exOverflow = energy->exOverflow();
468 int eyOverflow = energy->eyOverflow();
469 int etOverflow = energy->etOverflow();
470 if (ex == 0 && ey == 0 &&
et == 0 &&
471 exOverflow == 0 && eyOverflow == 0 && etOverflow == 0)
continue;
477 std::vector<unsigned int> exVec(sums->
ExVec());
478 std::vector<unsigned int> eyVec(sums->
EyVec());
479 std::vector<unsigned int> etVec(sums->
EtVec());
489 exErr[slice] = dEx.
error();
494 eyErr[slice] = dEy.
error();
499 etErr[slice] = dEt.
error();
501 sums->
addEx(exVec, exErr);
502 sums->
addEy(eyVec, eyErr);
503 sums->
addEt(etVec, etErr);
516 unsigned int nslices = systemVec.size();
517 std::vector<unsigned int>
data(nslices);
518 std::vector<int>
error(nslices);
519 for (
unsigned int slice = 0; slice < nslices; ++slice) {
521 unsigned int etMissHits = energy->etMissHits();
528 std::vector<unsigned int> etVec(missEt->
EtVec());
529 etVec[slice] = etMissHits;
534 unsigned int etSumHits = energy->etSumHits();
541 std::vector<unsigned int> etVec(sumEt->
EtVec());
542 etVec[slice] = etSumHits;
548 unsigned int etMissSigHits = ((energy->roiWord0())>>16)&0xff;
555 std::vector<unsigned int> etVec(missEtSig->
EtVec());
556 etVec[slice] = etMissSigHits;
#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)
DataModel_detail::const_iterator< DataVector > const_iterator
Standard 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.
CMMEtSums object stores Et sums from the Energy CMMs.
int peak() const
returns peak slice number
const std::vector< int > & EtErrorVec() const
returns module ET errors
void addEx(const std::vector< unsigned int > &Ex, const std::vector< int > &ExError)
Update Ex sum.
const std::vector< int > & ExErrorVec() const
returns module Ex errors
int dataID() const
returns data ID
void addEt(const std::vector< unsigned int > &Et, const std::vector< int > &EtError)
Add data to existing objects.
int crate() const
Data accessors.
const std::vector< unsigned int > & EtVec() const
Access multi-slice data.
void addEy(const std::vector< unsigned int > &Ey, const std::vector< int > &EyError)
Update Ey sum.
const std::vector< unsigned int > & ExVec() const
returns module Ex sum
const std::vector< int > & EyErrorVec() const
returns module Ey errors
const std::vector< unsigned int > & EyVec() const
returns module Ey sum
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.
int module() const
returns module number
const std::vector< unsigned int > & EyVec() const
returns module Ey sum
void addEx(const std::vector< unsigned int > &Ex)
Update Ex sum.
const std::vector< unsigned int > & ExVec() const
returns module Ex sum
void addEt(const std::vector< unsigned int > &Et)
Update ET sum.
const std::vector< unsigned int > & EtVec() const
returns module ET sum
int crate() const
returns crate number
int peak() const
returns peak slice number
void addEy(const std::vector< unsigned int > &Ey)
Update Ey sum.
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...
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())
std::map< int, const JetElement * > JetElementMap_t
Extra patterns decribing particle interation process.