ATLAS Offline Software
Loading...
Searching...
No Matches
LVL1::L1EnergyCMXTools Class Reference

This is a tool to reconstruct the L1 JEM and CMX-Energy Et sums from Jet Elements. More...

#include <L1EnergyCMXTools.h>

Inheritance diagram for LVL1::L1EnergyCMXTools:
Collaboration diagram for LVL1::L1EnergyCMXTools:

Public Member Functions

 L1EnergyCMXTools (const std::string &type, const std::string &name, const IInterface *parent)
 Constructor.
virtual ~L1EnergyCMXTools ()
 default destructor
virtual StatusCode initialize ()
 standard Athena-Algorithm method
virtual StatusCode finalize ()
 standard Athena-Algorithm method
virtual void formJEMEtSums (const xAOD::JetElementContainer *jetElementVec, xAOD::JEMEtSumsContainer *jemEtSumsVec) const
 form JEMEtSums from JetElements
virtual void formCMXEtSums (const xAOD::JEMEtSumsContainer *jemEtSumsVec, xAOD::CMXEtSumsContainer *cmxEtSumsVec) const
 form complete CMXEtSums from JEMEtSums
virtual void formCMXEtSumsModule (const xAOD::JEMEtSumsContainer *jemEtSumsVec, xAOD::CMXEtSumsContainer *cmxEtSumsMod) const
 form partial CMXEtSums (module) from JEMEtSums
virtual void formCMXEtSumsCrate (const xAOD::CMXEtSumsContainer *cmxEtSumsMod, xAOD::CMXEtSumsContainer *cmxEtSumsCrate) const
 form partial CMXEtSums (crate) from module CMXEtSums
virtual void formCMXEtSumsSystem (const xAOD::CMXEtSumsContainer *cmxEtSumsCrate, xAOD::CMXEtSumsContainer *cmxEtSumsSys) const
 form partial CMXEtSums (system) from crate CMXEtSums
virtual void formCMXEtSumsEtMaps (const xAOD::CMXEtSumsContainer *cmxEtSumsSys, xAOD::CMXEtSumsContainer *cmxEtSumsMap) const
 form partial CMXEtSums (sumEt/missingEt maps) from system CMXEtSums
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Static Public Member Functions

static const InterfaceID & interfaceID ()

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef std::vector< uint16_t > EnergyVector
typedef std::vector< uint32_t > ErrorVector
typedef std::vector< DataVector< ModuleEnergy > * > MultiSliceModuleEnergy
typedef std::vector< DataVector< CrateEnergy > * > MultiSliceCrateEnergy
typedef std::vector< SystemEnergy * > MultiSliceSystemEnergy
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

void etSumsToModuleEnergy (const xAOD::CMXEtSumsContainer *etSums, MultiSliceModuleEnergy &modulesVec, int &peak) const
 Convert CMXEtSums container to internal ModuleEnergy containers.
void etSumsToCrateEnergy (const xAOD::CMXEtSumsContainer *etSums, MultiSliceCrateEnergy &crateVecFull, MultiSliceCrateEnergy &crateVecRestricted, int &peak) const
 Convert CMXEtSums container to internal CrateEnergy containers.
void etSumsToSystemEnergy (const xAOD::CMXEtSumsContainer *etSums, MultiSliceSystemEnergy &systemVec, int &peak) const
 Convert CMXEtSums container to internal SystemEnergy objects.
void moduleEnergyToEtSums (const MultiSliceModuleEnergy &modulesVec, xAOD::JEMEtSumsContainer *jemEtSumsVec, int peak) const
 Convert internal ModuleEnergy containers to JEMEtSums container.
void crateEnergyToEtSums (const MultiSliceCrateEnergy &cratesVec, xAOD::CMXEtSumsContainer *cmxEtSumsVec, int peak) const
 Convert internal CrateEnergy containers to CMXEtSums container.
void crateEnergyToEtSums (const MultiSliceCrateEnergy &cratesVecFull, const MultiSliceCrateEnergy &cratesVecRestricted, xAOD::CMXEtSumsContainer *cmxEtSumsVec, int peak) const
void systemEnergyToEtSums (const MultiSliceSystemEnergy &systemVec, xAOD::CMXEtSumsContainer *cmxEtSumsVec, int peak, xAOD::CMXEtSums_v1::Sources source=xAOD::CMXEtSums::TOTAL_STANDARD) const
 Convert internal SystemEnergy objects to CMXEtSums object.
void etMapsToEtSums (const MultiSliceSystemEnergy &systemVec, xAOD::CMXEtSumsContainer *cmxEtSumsVec, int peak) const
 Convert maps from internal SystemEnergy objects to CMXEtSums objects.
void findRestrictedEta (uint32_t &maskXE, uint32_t &maskTE) const
 form partial CMXEtSums (crate) from module CMXEtSums
void dumpCrateEnergies (const std::string &msg, const MultiSliceCrateEnergy &crates) const
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

SG::ReadHandleKey< TrigConf::L1Menum_L1MenuKey { this, "L1TriggerMenu", "DetectorStore+L1TriggerMenu", "L1 Menu" }
ToolHandle< LVL1::IL1JetElementToolsm_jeTool
 Tool for JetElement map.
ToolHandle< LVL1::IL1EtToolsm_etTool
 Tool for energy sums.
bool m_debug = false
 Debug flag.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

This is a tool to reconstruct the L1 JEM and CMX-Energy Et sums from Jet Elements.

Used for offline monitoring and trigger reconstruction.

Useage: L1EnergyCMXTools->formJEMEtSums() // Form JEMEtSums from JetElements L1EnergyCMXTools->formCMXEtSums() // Form CMXEtSums from JEMEtSums

  @author  Peter Faulkner

Definition at line 47 of file L1EnergyCMXTools.h.

Member Typedef Documentation

◆ EnergyVector

typedef std::vector<uint16_t> LVL1::L1EnergyCMXTools::EnergyVector
private

Definition at line 83 of file L1EnergyCMXTools.h.

◆ ErrorVector

typedef std::vector<uint32_t> LVL1::L1EnergyCMXTools::ErrorVector
private

Definition at line 84 of file L1EnergyCMXTools.h.

◆ MultiSliceCrateEnergy

Definition at line 86 of file L1EnergyCMXTools.h.

◆ MultiSliceModuleEnergy

Definition at line 85 of file L1EnergyCMXTools.h.

◆ MultiSliceSystemEnergy

Definition at line 87 of file L1EnergyCMXTools.h.

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ L1EnergyCMXTools()

LVL1::L1EnergyCMXTools::L1EnergyCMXTools ( const std::string & type,
const std::string & name,
const IInterface * parent )

Constructor.

Definition at line 25 of file L1EnergyCMXTools.cxx.

28 : AthAlgTool(type, name, parent),
29 m_jeTool("LVL1::L1JetElementTools/L1JetElementTools"),
30 m_etTool("LVL1::L1EtTools/L1EtTools")
31{
32 declareInterface<IL1EnergyCMXTools>(this);
33 declareProperty("JetElementTool", m_jeTool);
34 declareProperty("EtTool", m_etTool);
35}
AthAlgTool()
Default constructor:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
ToolHandle< LVL1::IL1JetElementTools > m_jeTool
Tool for JetElement map.
ToolHandle< LVL1::IL1EtTools > m_etTool
Tool for energy sums.

◆ ~L1EnergyCMXTools()

LVL1::L1EnergyCMXTools::~L1EnergyCMXTools ( )
virtual

default destructor

Destructor.

Definition at line 39 of file L1EnergyCMXTools.cxx.

40{
41}

Member Function Documentation

◆ crateEnergyToEtSums() [1/2]

void LVL1::L1EnergyCMXTools::crateEnergyToEtSums ( const MultiSliceCrateEnergy & cratesVec,
xAOD::CMXEtSumsContainer * cmxEtSumsVec,
int peak ) const
private

Convert internal CrateEnergy containers to CMXEtSums container.

Definition at line 528 of file L1EnergyCMXTools.cxx.

531{
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)
537 {
538 const DataVector<CrateEnergy> *crates = cratesVec[slice];
541 for (; pos != pose; ++pos)
542 {
543 const CrateEnergy *energy = *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)
552 continue;
553 int crate = energy->crate();
554 xAOD::CMXEtSums *sums = 0;
556 for (int i = 0; i < 2; ++i)
557 {
558 for (int j = 0; j < 2; ++j)
559 {
560 int key = crate * 100 + source;
561 std::map<int, xAOD::CMXEtSums *>::iterator iter = etMap.find(key);
562 if (iter == etMap.end())
563 {
564 sums = new xAOD::CMXEtSums;
565 sums->makePrivateStore();
566 sums->initialize(crate, source, dummy, dummy, dummy,
567 error, error, error, peak);
568 etMap.insert(std::make_pair(key, sums));
569 cmxEtSumsVec->push_back(sums);
570 }
571 else
572 sums = iter->second;
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());
579 exVec[slice] = ex;
580 eyVec[slice] = ey;
581 etVec[slice] = et;
582 if (exOverflow)
583 {
584 DataError dEx(exErr[slice]);
585 dEx.set(DataError::Overflow);
586 exErr[slice] = dEx.error();
587 }
588 if (eyOverflow)
589 {
590 DataError dEy(eyErr[slice]);
591 dEy.set(DataError::Overflow);
592 eyErr[slice] = dEy.error();
593 }
594 if (etOverflow)
595 {
596 DataError dEt(etErr[slice]);
597 dEt.set(DataError::Overflow);
598 etErr[slice] = dEt.error();
599 }
600 sums->addEx(exVec, exErr);
601 sums->addEy(eyVec, eyErr);
602 sums->addEt(etVec, etErr);
604 {
606 }
607 else
608 {
610 }
611 }
612 if (crate == 1)
613 break;
614 crate = 1;
616 }
617 }
618 }
619}
float et(const xAOD::jFexSRJetRoI *j)
DataModel_detail::const_iterator< DataVector > const_iterator
Standard const_iterator.
Definition DataVector.h:838
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.
void makePrivateStore()
Create a new (empty) private store for this object.
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
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
CMXEtSums_v1 CMXEtSums
Define the latest version of the CMXEtSums class.

◆ crateEnergyToEtSums() [2/2]

void LVL1::L1EnergyCMXTools::crateEnergyToEtSums ( const MultiSliceCrateEnergy & cratesVecFull,
const MultiSliceCrateEnergy & cratesVecRestricted,
xAOD::CMXEtSumsContainer * cmxEtSumsVec,
int peak ) const
private

Definition at line 621 of file L1EnergyCMXTools.cxx.

624{
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);
629
630 dumpCrateEnergies("Crates from full region", cratesVecFull);
631 dumpCrateEnergies("Crates from restricted region", cratesVecRestricted);
632
633
634 for (unsigned int slice = 0; slice < nslices; ++slice)
635 {
636 for (unsigned int i = 0; i < 2; i++)
637 {
638 const auto *crates = (i == 0 ? cratesVecFull[slice] : cratesVecRestricted[slice]);
640
641 for (auto pos : *crates)
642 {
643 int source = origSource;
644 const CrateEnergy *energy = pos;
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)
653 continue;
654 int crate = energy->crate();
655 xAOD::CMXEtSums *sums = 0;
656
657 while (true)
658 {
659 int key = crate * 100 + source;
660 std::map<int, xAOD::CMXEtSums *>::iterator iter = etMap.find(key);
661 if (iter == etMap.end())
662 {
663 sums = new xAOD::CMXEtSums;
664 sums->makePrivateStore();
665 sums->initialize(crate, source, dummy, dummy, dummy,
666 error, error, error, peak);
667 etMap.insert(std::make_pair(key, sums));
668 cmxEtSumsVec->push_back(sums);
669 }
670 else
671 sums = iter->second;
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());
678 exVec[slice] = ex;
679 eyVec[slice] = ey;
680 etVec[slice] = et;
681 if (exOverflow)
682 {
683 DataError dEx(exErr[slice]);
684 dEx.set(DataError::Overflow);
685 exErr[slice] = dEx.error();
686 }
687 if (eyOverflow)
688 {
689 DataError dEy(eyErr[slice]);
690 dEy.set(DataError::Overflow);
691 eyErr[slice] = dEy.error();
692 }
693 if (etOverflow)
694 {
695 DataError dEt(etErr[slice]);
696 dEt.set(DataError::Overflow);
697 etErr[slice] = dEt.error();
698 }
699 sums->addEx(exVec, exErr);
700 sums->addEy(eyVec, eyErr);
701 sums->addEt(etVec, etErr);
703 {
704 if (crate == 1)
705 {
706 break;
707 }
708 else
709 {
710 crate = 1;
712 }
713 }
714 else if (source == xAOD::CMXEtSums::LOCAL_RESTRICTED)
715 {
716 if (crate == 1)
717 {
718 break;
719 }
720 else
721 {
722 crate = 1;
724 }
725 }
726 else
727 {
728 break;
729 }
730 }
731 } // crates
732 } //for i
733 }
734}
void dumpCrateEnergies(const std::string &msg, const MultiSliceCrateEnergy &crates) const

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ dumpCrateEnergies()

void LVL1::L1EnergyCMXTools::dumpCrateEnergies ( const std::string & msg,
const MultiSliceCrateEnergy & crates ) const
private

Definition at line 942 of file L1EnergyCMXTools.cxx.

943 {
944 if (!m_debug) return;
945
947 for (const auto& p : crates) {
948 for (const LVL1::CrateEnergy* c : *p) {
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());
953 }
954 ATH_MSG_DEBUG("");
955 }
956}
#define ATH_MSG_DEBUG(x)
MsgStream & msg() const

◆ etMapsToEtSums()

void LVL1::L1EnergyCMXTools::etMapsToEtSums ( const MultiSliceSystemEnergy & systemVec,
xAOD::CMXEtSumsContainer * cmxEtSumsVec,
int peak ) const
private

Convert maps from internal SystemEnergy objects to CMXEtSums objects.

Definition at line 806 of file L1EnergyCMXTools.cxx.

809{
810
811 xAOD::CMXEtSums **sumEt = 0;
812 xAOD::CMXEtSums **missEt = 0;
813 xAOD::CMXEtSums **missEtSig = 0;
814
815 xAOD::CMXEtSums *sumEtFull = 0;
816 xAOD::CMXEtSums *missEtFull = 0;
817 xAOD::CMXEtSums *missEtSigFull = 0;
818
819 xAOD::CMXEtSums *sumEtRestricted = 0;
820 xAOD::CMXEtSums *missEtRestricted = 0;
821 xAOD::CMXEtSums *missEtSigRestricted = 0;
822
823 int nslicesFull = 0;
824 int nslicesRestricted = 0;
825
826 std::map<int, bool> isRestrictedMap;
827
828
829 for (unsigned int i = 0; i < systemVec.size(); ++i)
830 {
831 bool isRestricted = (systemVec[i]->roiWord0() >> 26) & 1;
832 isRestrictedMap[i] = isRestricted;
833 if (isRestricted) {
834 nslicesRestricted++;
835 }else{
836 nslicesFull++;
837 }
838 // ATH_MSG_DEBUG("isRestriced=" << isRestricted << " slice=" << (isRestricted? nslicesRestricted: nslicesFull)
839 // << " et=" << systemVec[i]->et() << " etSumHits=" << systemVec[i]->etSumHits());
840 }
841
842 std::vector<uint16_t> dataFull(nslicesFull);
843 std::vector<uint32_t> errorFull(nslicesFull);
844
845 std::vector<uint16_t> dataRestricted(nslicesRestricted);
846 std::vector<uint32_t> errorRestricted(nslicesRestricted);
847
848 int iSliceFull = 0;
849 int iSliceRestricted = 0;
850 int *iSlice = 0;
851
852 for (unsigned int i = 0; i < systemVec.size(); ++i)
853 {
854 SystemEnergy *energy = systemVec[i];
855 bool restricted = isRestrictedMap[i];
856
857 std::vector<uint16_t>* data;
858 std::vector<uint32_t>* error;
859 if (restricted)
860 {
861 sumEt = &sumEtRestricted;
862 missEt = &missEtRestricted;
863 missEtSig = &missEtSigRestricted;
864 iSlice = &iSliceRestricted;
865 data = &dataRestricted;
866 error = &errorRestricted;
867 }
868 else
869 {
870 sumEt = &sumEtFull;
871 missEt = &missEtFull;
872 missEtSig = &missEtSigFull;
873 iSlice = &iSliceFull;
874 data = &dataFull;
875 error = &errorFull;
876 }
877
878 unsigned int slice = *iSlice;
879
880
881 unsigned int etSumHits = energy->etSumHits();
882 if (etSumHits)
883 {
884 if (!*sumEt)
885 {
886 *sumEt = new xAOD::CMXEtSums;
887 (*sumEt)->makePrivateStore();
888 (*sumEt)->initialize(1, restricted
891 *data, *data, *data, *error, *error, *error, peak);
892 cmxEtSumsVec->push_back(*sumEt);
893 }
894 std::vector<uint16_t> etVec((*sumEt)->etVec());
895 etVec[slice] = etSumHits;
896
897 (*sumEt)->addEx(etVec, *error);
898 (*sumEt)->addEy(etVec, *error);
899 (*sumEt)->addEt(etVec, *error);
900
901 // ATH_MSG_DEBUG("slice=" << slice << " restricted=" << restricted << " etVec=" << (*sumEt)->etVec() << " etSumHits=" << etSumHits);
902 }
903 unsigned int etMissHits = energy->etMissHits();
904 if (etMissHits)
905 {
906 if (!*missEt)
907 {
908 *missEt = new xAOD::CMXEtSums;
909 (*missEt)->makePrivateStore();
910 (*missEt)->initialize(1, restricted
913 *data, *data, *data, *error, *error, *error, peak);
914 cmxEtSumsVec->push_back(*missEt);
915 }
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);
921 }
922 unsigned int etMissSigHits = energy->metSigHits();
923 if (etMissSigHits)
924 {
925 if (!*missEtSig)
926 {
927 *missEtSig = new xAOD::CMXEtSums;
928 (*missEtSig)->makePrivateStore();
929 (*missEtSig)->initialize(1, CMXEtSums::MISSING_ET_SIG_STANDARD, *data, *data, *data, *error, *error, *error, peak);
930 cmxEtSumsVec->push_back(*missEtSig);
931 }
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);
937 }
938 (*iSlice)++;
939 }
940}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11

◆ etSumsToCrateEnergy()

void LVL1::L1EnergyCMXTools::etSumsToCrateEnergy ( const xAOD::CMXEtSumsContainer * etSums,
MultiSliceCrateEnergy & crateVecFull,
MultiSliceCrateEnergy & crateVecRestricted,
int & peak ) const
private

Convert CMXEtSums container to internal CrateEnergy containers.

Definition at line 362 of file L1EnergyCMXTools.cxx.

365{
366 peak = 0;
367 unsigned int nslicesFull = 0;
368 unsigned int nslicesRestricted = 0;
371
372 MultiSliceCrateEnergy *crateVec = nullptr;
373 unsigned int *nslices = nullptr;
374 bool restricted = false;
375 for (; pos != pose; ++pos)
376 {
377 const xAOD::CMXEtSums *sums = *pos;
378 int crate = sums->crate();
379 if (crate != 1)
380 continue;
381 int source = sums->sourceComponent();
384 continue;
386 crate = 0; // SASHA: check
388 crateVec = &crateVecRestricted;
389 nslices = &nslicesRestricted;
390 restricted = true;
391 }else{
392 crateVec = &crateVecFull;
393 nslices = &nslicesFull;
394 restricted = false;
395 }
396 if (sums->peak() > peak)
397 peak = sums->peak();
398 const EnergyVector &ex(sums->exVec());
399 const EnergyVector &ey(sums->eyVec());
400 const EnergyVector &et(sums->etVec());
401 const ErrorVector &exErrVec(sums->exErrorVec());
402 const ErrorVector &eyErrVec(sums->eyErrorVec());
403 const ErrorVector &etErrVec(sums->etErrorVec());
404 unsigned int slices = et.size();
405
406 if (slices > *nslices)
407 {
408 for (unsigned int i = *nslices; i < slices; ++i)
409 {
410 crateVec->push_back(new DataVector<CrateEnergy>);
411 }
412 *nslices = slices;
413 }
414 for (unsigned int sl = 0; sl < slices; ++sl)
415 {
416 DataVector<CrateEnergy> *crates = (*crateVec)[sl];
417 DataError exErr(exErrVec[sl]);
418 DataError eyErr(eyErrVec[sl]);
419 DataError etErr(etErrVec[sl]);
420 crates->push_back(new CrateEnergy(crate, et[sl], ex[sl], ey[sl],
421 etErr.get(DataError::Overflow),
422 exErr.get(DataError::Overflow),
423 eyErr.get(DataError::Overflow), restricted));
424 }
425 }
426
427 dumpCrateEnergies("Crates from full region (for total)", crateVecFull);
428 dumpCrateEnergies("Crates from restricted region (for total)", crateVecRestricted);
429}
std::vector< uint16_t > EnergyVector
std::vector< uint32_t > ErrorVector
std::vector< DataVector< CrateEnergy > * > MultiSliceCrateEnergy
uint8_t crate() const
get crate
uint8_t sourceComponent() const
get source
uint8_t peak() const
get peak

◆ etSumsToModuleEnergy()

void LVL1::L1EnergyCMXTools::etSumsToModuleEnergy ( const xAOD::CMXEtSumsContainer * etSums,
MultiSliceModuleEnergy & modulesVec,
int & peak ) const
private

Convert CMXEtSums container to internal ModuleEnergy containers.

Definition at line 322 of file L1EnergyCMXTools.cxx.

325{
326 peak = 0;
327 unsigned int nslices = 0;
330 for (; pos != pose; ++pos)
331 {
332 const xAOD::CMXEtSums *sums = *pos;
333 int source = sums->sourceComponent();
334 if (source > 15)
335 continue;
336 int crate = sums->crate();
337 if (sums->peak() > peak)
338 peak = sums->peak();
339 const EnergyVector &ex(sums->exVec());
340 const EnergyVector &ey(sums->eyVec());
341 const EnergyVector &et(sums->etVec());
342 unsigned int slices = et.size();
343 if (slices > nslices)
344 {
345 for (unsigned int i = nslices; i < slices; ++i)
346 {
347 modulesVec.push_back(new DataVector<ModuleEnergy>);
348 }
349 nslices = slices;
350 }
351 for (unsigned int sl = 0; sl < slices; ++sl)
352 {
353 DataVector<ModuleEnergy> *modules = modulesVec[sl];
354 modules->push_back(new ModuleEnergy(crate, source,
355 et[sl], ex[sl], ey[sl]));
356 }
357 }
358}

◆ etSumsToSystemEnergy()

void LVL1::L1EnergyCMXTools::etSumsToSystemEnergy ( const xAOD::CMXEtSumsContainer * etSums,
MultiSliceSystemEnergy & systemVec,
int & peak ) const
private

Convert CMXEtSums container to internal SystemEnergy objects.

Definition at line 433 of file L1EnergyCMXTools.cxx.

436{
437 peak = 0;
440 for (; pos != pose; ++pos)
441 {
442 const xAOD::CMXEtSums *sums = *pos;
443 int source = sums->sourceComponent();
445 continue;
446 if (sums->peak() > peak)
447 peak = sums->peak();
448 const EnergyVector &ex(sums->exVec());
449 const EnergyVector &ey(sums->eyVec());
450 const EnergyVector &et(sums->etVec());
451 const ErrorVector &exErrVec(sums->exErrorVec());
452 const ErrorVector &eyErrVec(sums->eyErrorVec());
453 const ErrorVector &etErrVec(sums->etErrorVec());
454 unsigned int slices = et.size();
455 auto l1Menu = SG::makeHandle( m_L1MenuKey );
456 for (unsigned int sl = 0; sl < slices; ++sl)
457 {
458 DataError exErr(exErrVec[sl]);
459 DataError eyErr(eyErrVec[sl]);
460 DataError etErr(etErrVec[sl]);
461 auto systemEnergy = new SystemEnergy(et[sl], ex[sl], ey[sl],
462 etErr.get(DataError::Overflow),
463 exErr.get(DataError::Overflow),
464 eyErr.get(DataError::Overflow),
466 &(*l1Menu));
467 // bool srestricted = (systemEnergy->roiWord0() >> 26) & 1;
468 systemVec.push_back(systemEnergy);
469 }
470 }
471}
SG::ReadHandleKey< TrigConf::L1Menu > m_L1MenuKey
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ finalize()

StatusCode LVL1::L1EnergyCMXTools::finalize ( )
virtual

standard Athena-Algorithm method

Finalisation.

Definition at line 60 of file L1EnergyCMXTools.cxx.

61{
62 return StatusCode::SUCCESS;
63}

◆ findRestrictedEta()

void LVL1::L1EnergyCMXTools::findRestrictedEta ( uint32_t & maskXE,
uint32_t & maskTE ) const
private

form partial CMXEtSums (crate) from module CMXEtSums

Definition at line 175 of file L1EnergyCMXTools.cxx.

176{
177 using TrigConf::L1DataDef;
178 const float moduleEta[8] = {-4.,-2.,-1.2,-0.4,0.4,1.2,2.,4.};
179 maskXE = 0;
180 maskTE = 0;
181 bool maskXESet = false;
182 bool maskTESet = false;
183
184 auto l1Menu = SG::makeHandle( m_L1MenuKey );
185 std::vector<std::shared_ptr<TrigConf::L1Threshold>> allThresholds = l1Menu->thresholds();
186 for ( const auto& thresh : allThresholds ) {
187 if ( ( thresh->type() == L1DataDef::typeAsString(L1DataDef::XE) ||
188 thresh->type() == L1DataDef::typeAsString(L1DataDef::TE) ) && thresh->mapping() > 7 ) {
189 auto thresh_Calo = static_cast<TrigConf::L1Threshold_Calo*>(thresh.get());
190 auto tvcs = thresh_Calo->thrValuesCounts();
191 // Make sure only set masks from the first valid threshold in the range (for each type)
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);
196 }
197 for (const auto& tVC : tvcs) {
198 // Bits are set false by default, so ignore thresholds that are just doing that
199 if (tVC.value() >= 0x7fff) continue;
200 // Set bits true if module centre between etaMin and etaMax
201 if ( thresh->type() == L1DataDef::typeAsString(L1DataDef::XE) && !maskXESet ) {
202 for (unsigned int bin = 0; bin < 8; ++bin) {
203 if (moduleEta[bin] > tVC.etaMin()*0.1 && moduleEta[bin] < tVC.etaMax()*0.1)
204 maskXE |= (1<<bin);
205 }
206 }
207 else if ( thresh->type() == L1DataDef::typeAsString(L1DataDef::TE) && !maskTESet ) {
208 for (unsigned int bin = 0; bin < 8; ++bin) {
209 if (moduleEta[bin] > tVC.etaMin()*0.1 && moduleEta[bin] < tVC.etaMax()*0.1)
210 maskTE |= (1<<bin);
211 }
212 }
213 } // loop over TTV
214 } // Is this XE or TE threshold?
215 }
216}
static std::string & typeAsString(TriggerType tt)
Definition L1DataDef.h:53

◆ formCMXEtSums()

void LVL1::L1EnergyCMXTools::formCMXEtSums ( const xAOD::JEMEtSumsContainer * jemEtSumsVec,
xAOD::CMXEtSumsContainer * cmxEtSumsVec ) const
virtual

form complete CMXEtSums from JEMEtSums

Implements LVL1::IL1EnergyCMXTools.

Definition at line 115 of file L1EnergyCMXTools.cxx.

117{
118 formCMXEtSumsModule(jemEtSumsVec, cmxEtSumsVec);
119 // Convert to internal containers
120 int peak = 0;
121 MultiSliceModuleEnergy modulesVec;
122 MultiSliceCrateEnergy cratesVec;
123 MultiSliceSystemEnergy systemVec;
124 etSumsToModuleEnergy(cmxEtSumsVec, modulesVec, peak);
125 // Process each slice
126 MultiSliceModuleEnergy::iterator iter = modulesVec.begin();
127 MultiSliceModuleEnergy::iterator iterE = modulesVec.end();
128
129 auto l1Menu = SG::makeHandle( m_L1MenuKey );
130 for (; iter != iterE; ++iter)
131 {
132 DataVector<ModuleEnergy> *modules = *iter;
133 DataVector<CrateEnergy> *crates = new DataVector<CrateEnergy>;
134 cratesVec.push_back(crates);
135 m_etTool->crateSums(modules, crates);
136 systemVec.push_back(new SystemEnergy(crates, &(*l1Menu)));
137 delete modules;
138 }
139 // Convert back to CMXEtSums
140 crateEnergyToEtSums(cratesVec, cmxEtSumsVec, peak);
141 MultiSliceCrateEnergy::iterator citer = cratesVec.begin();
142 MultiSliceCrateEnergy::iterator citerE = cratesVec.end();
143 for (; citer != citerE; ++citer)
144 delete *citer;
145 systemEnergyToEtSums(systemVec, cmxEtSumsVec, peak);
146 etMapsToEtSums(systemVec, cmxEtSumsVec, peak);
147 MultiSliceSystemEnergy::iterator siter = systemVec.begin();
148 MultiSliceSystemEnergy::iterator siterE = systemVec.end();
149 for (; siter != siterE; ++siter)
150 delete *siter;
151}
void crateEnergyToEtSums(const MultiSliceCrateEnergy &cratesVec, xAOD::CMXEtSumsContainer *cmxEtSumsVec, int peak) const
Convert internal CrateEnergy containers to CMXEtSums container.
void systemEnergyToEtSums(const MultiSliceSystemEnergy &systemVec, xAOD::CMXEtSumsContainer *cmxEtSumsVec, int peak, xAOD::CMXEtSums_v1::Sources source=xAOD::CMXEtSums::TOTAL_STANDARD) const
Convert internal SystemEnergy objects to CMXEtSums object.
std::vector< SystemEnergy * > MultiSliceSystemEnergy
void etSumsToModuleEnergy(const xAOD::CMXEtSumsContainer *etSums, MultiSliceModuleEnergy &modulesVec, int &peak) const
Convert CMXEtSums container to internal ModuleEnergy containers.
std::vector< DataVector< ModuleEnergy > * > MultiSliceModuleEnergy
virtual void formCMXEtSumsModule(const xAOD::JEMEtSumsContainer *jemEtSumsVec, xAOD::CMXEtSumsContainer *cmxEtSumsMod) const
form partial CMXEtSums (module) from JEMEtSums
void etMapsToEtSums(const MultiSliceSystemEnergy &systemVec, xAOD::CMXEtSumsContainer *cmxEtSumsVec, int peak) const
Convert maps from internal SystemEnergy objects to CMXEtSums objects.

◆ formCMXEtSumsCrate()

void LVL1::L1EnergyCMXTools::formCMXEtSumsCrate ( const xAOD::CMXEtSumsContainer * cmxEtSumsMod,
xAOD::CMXEtSumsContainer * cmxEtSumsCrate ) const
virtual

form partial CMXEtSums (crate) from module CMXEtSums

Implements LVL1::IL1EnergyCMXTools.

Definition at line 217 of file L1EnergyCMXTools.cxx.

220{
221 uint32_t maskXE, maskTE;
222 findRestrictedEta(maskXE, maskTE);
223 ATH_MSG_DEBUG("Restricted eta masks: XE=" << MSG::hex << maskXE << ", TE=" << maskTE << MSG::dec);
224 // Convert to internal containers
225 int peak = 0;
226 MultiSliceModuleEnergy modulesVec;
227 MultiSliceCrateEnergy cratesVecFull;
228 MultiSliceCrateEnergy cratesVecRestricted;
229 etSumsToModuleEnergy(cmxEtSumsMod, modulesVec, peak);
230 // Process each slice
231 for (auto iter : modulesVec)
232 {
233 DataVector<ModuleEnergy> *modules = iter;
234 DataVector<CrateEnergy> *cratesFull = new DataVector<CrateEnergy>;
235 DataVector<CrateEnergy> *cratesRestricted = new DataVector<CrateEnergy>;
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);
240 delete modules;
241 }
242
243 // Convert back to CMXEtSums
244 crateEnergyToEtSums(cratesVecFull, cratesVecRestricted, cmxEtSumsCrate, peak);
245 // crateEnergyToEtSums(cratesVecRestricted, cmxEtSumsCrate, peak);
246
247 for (auto crate : cratesVecFull)
248 {
249 delete crate;
250 }
251 for (auto crate : cratesVecRestricted)
252 {
253 delete crate;
254 }
255}
void findRestrictedEta(uint32_t &maskXE, uint32_t &maskTE) const
form partial CMXEtSums (crate) from module CMXEtSums
setEventNumber uint32_t

◆ formCMXEtSumsEtMaps()

void LVL1::L1EnergyCMXTools::formCMXEtSumsEtMaps ( const xAOD::CMXEtSumsContainer * cmxEtSumsSys,
xAOD::CMXEtSumsContainer * cmxEtSumsMap ) const
virtual

form partial CMXEtSums (sumEt/missingEt maps) from system CMXEtSums

form partial CMXEtSums (sumEt/missingEt/missingEtSig maps) from system CMXEtSums

Implements LVL1::IL1EnergyCMXTools.

Definition at line 304 of file L1EnergyCMXTools.cxx.

307{
308 // Convert to internal objects
309 int peak = 0;
310 MultiSliceSystemEnergy systemVec;
311 etSumsToSystemEnergy(cmxEtSumsSys, systemVec, peak);
312 // Convert back to CMXEtSums
313 etMapsToEtSums(systemVec, cmxEtSumsMap, peak);
314 MultiSliceSystemEnergy::iterator iter = systemVec.begin();
315 MultiSliceSystemEnergy::iterator iterE = systemVec.end();
316 for (; iter != iterE; ++iter)
317 delete *iter;
318}
void etSumsToSystemEnergy(const xAOD::CMXEtSumsContainer *etSums, MultiSliceSystemEnergy &systemVec, int &peak) const
Convert CMXEtSums container to internal SystemEnergy objects.

◆ formCMXEtSumsModule()

void LVL1::L1EnergyCMXTools::formCMXEtSumsModule ( const xAOD::JEMEtSumsContainer * jemEtSumsVec,
xAOD::CMXEtSumsContainer * cmxEtSumsMod ) const
virtual

form partial CMXEtSums (module) from JEMEtSums

Implements LVL1::IL1EnergyCMXTools.

Definition at line 155 of file L1EnergyCMXTools.cxx.

158{
160 xAOD::JEMEtSumsContainer::const_iterator pose = jemEtSumsVec->end();
161 for (; pos != pose; ++pos)
162 {
163 const xAOD::JEMEtSums *sums = *pos;
164 ErrorVector err(sums->etVec().size());
165 auto item = new xAOD::CMXEtSums;
166 item->makePrivateStore();
167 item->initialize(sums->crate(), sums->module(),
168 sums->etVec(), sums->exVec(), sums->eyVec(),
169 err, err, err, sums->peak());
170 cmxEtSumsMod->push_back(item);
171 }
172}
uint8_t module() const
get module
const std::vector< uint16_t > & eyVec() const
get eyVec - ey for all time slices
uint8_t crate() const
get crate number
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
JEMEtSums_v2 JEMEtSums
Define the latest version of the JEMEtSums class.

◆ formCMXEtSumsSystem()

void LVL1::L1EnergyCMXTools::formCMXEtSumsSystem ( const xAOD::CMXEtSumsContainer * cmxEtSumsCrate,
xAOD::CMXEtSumsContainer * cmxEtSumsSys ) const
virtual

form partial CMXEtSums (system) from crate CMXEtSums

Implements LVL1::IL1EnergyCMXTools.

Definition at line 259 of file L1EnergyCMXTools.cxx.

262{
263 // Convert to internal containers
264 int peak = 0;
265 MultiSliceCrateEnergy cratesVecFull;
266 MultiSliceCrateEnergy cratesVecRestricted;
267
268 MultiSliceSystemEnergy systemVecFull;
269 MultiSliceSystemEnergy systemVecRestricted;
270 auto l1Menu = SG::makeHandle( m_L1MenuKey );
271 etSumsToCrateEnergy(cmxEtSumsCrate, cratesVecFull, cratesVecRestricted, peak);
272 for (int i = 0; i < 2; i++)
273 {
274 MultiSliceCrateEnergy *cratesVec = i == 0? &cratesVecFull: &cratesVecRestricted;
275 MultiSliceSystemEnergy *systemVec = i == 0? &systemVecFull: &systemVecRestricted;
276 // Process each slice
277 MultiSliceCrateEnergy::iterator iter = (*cratesVec).begin();
278 MultiSliceCrateEnergy::iterator iterE = (*cratesVec).end();
279 for (; iter != iterE; ++iter)
280 {
281 DataVector<CrateEnergy> *crates = *iter;
282 //systemVec.push_back(new SystemEnergy(m_etTool->systemSums(crates)));
283 systemVec->push_back(new SystemEnergy(crates, &(*l1Menu)));
284 delete crates;
285 }
286 }
287 // Convert back to CMXEtSums
288 systemEnergyToEtSums(systemVecFull, cmxEtSumsSys, peak, xAOD::CMXEtSums::TOTAL_STANDARD);
289 systemEnergyToEtSums(systemVecRestricted, cmxEtSumsSys, peak, xAOD::CMXEtSums::TOTAL_RESTRICTED);
290
291 for (int i = 0; i < 2; i++)
292 {
293 MultiSliceSystemEnergy *systemVec = i == 0? &systemVecFull: &systemVecRestricted;
294 MultiSliceSystemEnergy::iterator siter = (*systemVec).begin();
295 MultiSliceSystemEnergy::iterator siterE = (*systemVec).end();
296 for (; siter != siterE; ++siter)
297 delete *siter;
298 }
299}
void etSumsToCrateEnergy(const xAOD::CMXEtSumsContainer *etSums, MultiSliceCrateEnergy &crateVecFull, MultiSliceCrateEnergy &crateVecRestricted, int &peak) const
Convert CMXEtSums container to internal CrateEnergy containers.

◆ formJEMEtSums()

void LVL1::L1EnergyCMXTools::formJEMEtSums ( const xAOD::JetElementContainer * jetElementVec,
xAOD::JEMEtSumsContainer * jemEtSumsVec ) const
virtual

form JEMEtSums from JetElements

Temporary version for testing bytestream converters and monitoring.

Until ModuleEnergy et al updated takes masked and normal values the same. Effect of quadlinear encoding/decoding ignored. form JEMEtSums from JetElements

Implements LVL1::IL1EnergyCMXTools.

Definition at line 71 of file L1EnergyCMXTools.cxx.

74{
75 // Find number of slices
76 int peak = 0;
77 unsigned int nslices = 1;
79 xAOD::JetElementContainer::const_iterator iterE = jetElementVec->end();
80 for (; iter != iterE; ++iter)
81 {
82 if ((*iter)->emJetElementETVec().size() > nslices)
83 {
84 nslices = (*iter)->emJetElementETVec().size();
85 peak = (*iter)->peak();
86 break;
87 }
88 if ((*iter)->hadJetElementETVec().size() > nslices)
89 {
90 nslices = (*iter)->hadJetElementETVec().size();
91 peak = (*iter)->peak();
92 break;
93 }
94 }
95 // Process each slice
97 m_jeTool->mapJetElements(jetElementVec, &jeMap);
98 MultiSliceModuleEnergy modulesVec;
99 for (unsigned int slice = 0; slice < nslices; ++slice)
100 {
101 DataVector<ModuleEnergy> *modules = new DataVector<ModuleEnergy>;
102 modulesVec.push_back(modules);
103 m_etTool->moduleSums(&jeMap, modules, slice);
104 }
105 // Convert to JEMEtSums
106 moduleEnergyToEtSums(modulesVec, jemEtSumsVec, peak);
107 MultiSliceModuleEnergy::iterator miter = modulesVec.begin();
108 MultiSliceModuleEnergy::iterator miterE = modulesVec.end();
109 for (; miter != miterE; ++miter)
110 delete *miter;
111}
void moduleEnergyToEtSums(const MultiSliceModuleEnergy &modulesVec, xAOD::JEMEtSumsContainer *jemEtSumsVec, int peak) const
Convert internal ModuleEnergy containers to JEMEtSums container.
std::map< int, const JetElement * > JetElementMap_t

◆ initialize()

StatusCode LVL1::L1EnergyCMXTools::initialize ( )
virtual

standard Athena-Algorithm method

Initialisation.

Definition at line 45 of file L1EnergyCMXTools.cxx.

46{
47 m_debug = msgLvl(MSG::DEBUG);
48 ATH_CHECK( m_L1MenuKey.initialize() );
49
50 // Retrieve jet element tool
51
52 ATH_CHECK(m_jeTool.retrieve());
53 ATH_CHECK(m_etTool.retrieve());
54
55 return StatusCode::SUCCESS;
56}
#define ATH_CHECK
Evaluate an expression and check for errors.
bool msgLvl(const MSG::Level lvl) const

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ interfaceID()

const InterfaceID & LVL1::IL1EnergyCMXTools::interfaceID ( )
inlinestaticinherited

Definition at line 51 of file IL1EnergyCMXTools.h.

52 {
54 }
static const InterfaceID IID_IL1EnergyCMXTools("LVL1::IL1EnergyCMXTools", 1, 0)
Interface definition for L1EnergyCMXTools.

◆ moduleEnergyToEtSums()

void LVL1::L1EnergyCMXTools::moduleEnergyToEtSums ( const MultiSliceModuleEnergy & modulesVec,
xAOD::JEMEtSumsContainer * jemEtSumsVec,
int peak ) const
private

Convert internal ModuleEnergy containers to JEMEtSums container.

Definition at line 475 of file L1EnergyCMXTools.cxx.

478{
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)
483 {
484 const DataVector<ModuleEnergy> *modules = modulesVec[slice];
487 for (; pos != pose; ++pos)
488 {
489 const ModuleEnergy *energy = *pos;
490 //unsigned int ex = energy->exCompressed();
491 //unsigned int ey = energy->eyCompressed();
492 //unsigned int et = energy->etCompressed();
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)
497 continue;
498 int crate = energy->crate();
499 int module = energy->module();
500 xAOD::JEMEtSums *sums = 0;
501 int key = crate * 100 + module;
502 std::map<int, xAOD::JEMEtSums *>::iterator iter = etMap.find(key);
503 if (iter == etMap.end())
504 {
505 sums = new xAOD::JEMEtSums;
506 sums->makePrivateStore();
507 sums->initialize(crate, module, dummy, dummy, dummy, peak);
508 etMap.insert(std::make_pair(key, sums));
509 jemEtSumsVec->push_back(sums);
510 }
511 else
512 sums = iter->second;
513 std::vector<uint16_t> exVec(sums->exVec());
514 std::vector<uint16_t> eyVec(sums->eyVec());
515 std::vector<uint16_t> etVec(sums->etVec());
516 exVec[slice] = ex;
517 eyVec[slice] = ey;
518 etVec[slice] = et;
519 sums->setExVec(exVec);
520 sums->setEyVec(eyVec);
521 sums->setEtVec(etVec);
522 }
523 }
524}
virtual void initialize(const uint8_t crate, const uint8_t module)
initialize
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
void setEtVec(const std::vector< uint16_t > &)
set etVec - et for all time slices

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ systemEnergyToEtSums()

void LVL1::L1EnergyCMXTools::systemEnergyToEtSums ( const MultiSliceSystemEnergy & systemVec,
xAOD::CMXEtSumsContainer * cmxEtSumsVec,
int peak,
xAOD::CMXEtSums_v1::Sources source = xAOD::CMXEtSums::TOTAL_STANDARD ) const
private

Convert internal SystemEnergy objects to CMXEtSums object.

Definition at line 738 of file L1EnergyCMXTools.cxx.

741{
742 xAOD::CMXEtSums *sums = nullptr;
743
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)
748 {
749 SystemEnergy *energy = systemVec[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();
756
757 // don't trust to exOverflow for restricted
758 if (ex == 0 && ey == 0 && et == 0 &&
759 exOverflow == 0 && eyOverflow == 0 && etOverflow == 0)
760 continue;
761 if (!sums)
762 {
763 sums = new xAOD::CMXEtSums;
764 sums->makePrivateStore();
765 sums->initialize(1, source, data, data, data,
766 error, error, error, peak);
767 cmxEtSumsVec->push_back(sums);
768 }
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());
775 exVec[slice] = ex;
776 eyVec[slice] = ey;
777 etVec[slice] = et;
778
779 if (exOverflow)
780 {
781 DataError dEx(exErr[slice]);
782 dEx.set(DataError::Overflow);
783 exErr[slice] = dEx.error();
784 }
785
786 if (eyOverflow)
787 {
788 DataError dEy(eyErr[slice]);
789 dEy.set(DataError::Overflow);
790 eyErr[slice] = dEy.error();
791 }
792 if (etOverflow)
793 {
794 DataError dEt(etErr[slice]);
795 dEt.set(DataError::Overflow);
796 etErr[slice] = dEt.error();
797 }
798 sums->addEx(exVec, exErr);
799 sums->addEy(eyVec, eyErr);
800 sums->addEt(etVec, etErr);
801 }
802}

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_debug

bool LVL1::L1EnergyCMXTools::m_debug = false
private

Debug flag.

Definition at line 124 of file L1EnergyCMXTools.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_etTool

ToolHandle<LVL1::IL1EtTools> LVL1::L1EnergyCMXTools::m_etTool
private

Tool for energy sums.

Definition at line 122 of file L1EnergyCMXTools.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_jeTool

ToolHandle<LVL1::IL1JetElementTools> LVL1::L1EnergyCMXTools::m_jeTool
private

Tool for JetElement map.

Definition at line 120 of file L1EnergyCMXTools.h.

◆ m_L1MenuKey

SG::ReadHandleKey<TrigConf::L1Menu> LVL1::L1EnergyCMXTools::m_L1MenuKey { this, "L1TriggerMenu", "DetectorStore+L1TriggerMenu", "L1 Menu" }
private

Definition at line 118 of file L1EnergyCMXTools.h.

118{ this, "L1TriggerMenu", "DetectorStore+L1TriggerMenu", "L1 Menu" };

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: