diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXFPGA.h b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXFPGA.h index 59f8ae5f3e971943fef0e2970e5328ab81526e47..16cfa7428ad5d7fb1232f43cd46686b0eb09113b 100644 --- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXFPGA.h +++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXFPGA.h @@ -24,6 +24,7 @@ #include "L1CaloFEXToolInterfaces/IjFEXsumETAlgo.h" #include "L1CaloFEXToolInterfaces/IjFEXmetAlgo.h" #include "L1CaloFEXToolInterfaces/IjFEXForwardJetsAlgo.h" +#include "L1CaloFEXToolInterfaces/IjFEXForwardElecAlgo.h" #include "L1CaloFEXToolInterfaces/IjFEXPileupAndNoise.h" #include "CaloEvent/CaloCellContainer.h" #include "CaloIdentifier/CaloIdManager.h" @@ -135,8 +136,7 @@ namespace LVL1 { ToolHandle<IjFEXsumETAlgo> m_jFEXsumETAlgoTool {this, "jFEXsumETAlgoTool" , "LVL1::jFEXsumETAlgo" , "Tool that runs the jFEX sumET algorithm"}; ToolHandle<IjFEXmetAlgo> m_jFEXmetAlgoTool {this, "jFEXmetAlgoTool" , "LVL1::jFEXmetAlgo" , "Tool that runs the jFEX met algorithm"}; ToolHandle<IjFEXForwardJetsAlgo> m_jFEXForwardJetsAlgoTool {this, "jFEXForwardJetsAlgoTool" , "LVL1::jFEXForwardJetsAlgo" , "Tool that runs the jFEX FCAL Jets algorithm"}; - - //ToolHandle<IjFEXegAlgo> m_jFEXegAlgoTool {this, "jFEXegAlgoTool", "LVL1::jFEXegAlgo", "Tool that runs the jFEX e/gamma algorithm"}; + ToolHandle<IjFEXForwardElecAlgo> m_jFEXForwardElecAlgoTool {this, "jFEXForwardElecAlgoTool" , "LVL1::jFEXForwardElecAlgo" , "Tool that runs the jFEX FCAL Electrons algorithm"}; ToolHandle<IjFEXPileupAndNoise> m_jFEXPileupAndNoiseTool {this, "jFEXPileupAndNoiseTool", "LVL1::jFEXPileupAndNoise", "Tool that applies Pileup and Noise"}; int getTTowerET_SG(unsigned int TTID); diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXForwardElecAlgo.h b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXForwardElecAlgo.h new file mode 100644 index 0000000000000000000000000000000000000000..1ca8a0451ab928eb482ba0fddf33aff2af0d8ea8 --- /dev/null +++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/L1CaloFEXSim/jFEXForwardElecAlgo.h @@ -0,0 +1,70 @@ +/* + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration +*/ +//*************************************************************************** +// jFEXForwardElecAlgo - Algorithm for Forward Electron Algorithm in jFEX +// ------------------- +// begin : 16 11 2021 +// email : Sergi.Rodriguez@cern.ch +//*************************************************************************** + +#ifndef jFEXForwardElecAlgo_H +#define jFEXForwardElecAlgo_H + + +#include "AthenaBaseComps/AthAlgTool.h" +#include "L1CaloFEXToolInterfaces/IjFEXForwardElecAlgo.h" +#include "AthenaKernel/CLASS_DEF.h" +#include "L1CaloFEXSim/jTowerContainer.h" + +#include "CaloEvent/CaloCellContainer.h" +#include "CaloIdentifier/CaloIdManager.h" +#include "CaloIdentifier/CaloCell_SuperCell_ID.h" +#include "AthenaBaseComps/AthAlgorithm.h" +#include "StoreGate/StoreGateSvc.h" + + +namespace LVL1 { + +class jFEXForwardElecAlgo : public AthAlgTool, virtual public IjFEXForwardElecAlgo { + + public: + /** Constructors **/ + jFEXForwardElecAlgo(const std::string& type, const std::string& name, const IInterface* parent); + + /** standard Athena-Algorithm method **/ + virtual StatusCode initialize() override; + + /** Destructor **/ + virtual ~jFEXForwardElecAlgo(); + + virtual StatusCode safetyTest() override; + virtual StatusCode reset() override; + virtual void setup() override; + + + virtual void setFPGAEnergy(std::unordered_map<int,std::vector<int> > et_map_EM,std::unordered_map<int,std::vector<int> > et_map_HAD) override; + + protected: + + private: + + SG::ReadHandleKey<LVL1::jTowerContainer> m_jFEXFwElecAlgo_jTowerContainerKey {this, "MyjTowers", "jTowerContainer", "Input container for jTowers"}; + SG::ReadHandle<jTowerContainer> m_jTowerContainer; + std::unordered_map<int,std::vector<int> > m_map_Etvalues_EM; + std::unordered_map<int,std::vector<int> > m_map_Etvalues_HAD; + + int getTTowerET_EM(unsigned int TTID ); + int getTTowerET_HAD(unsigned int TTID ); + int getTTowerTotalET(unsigned int TTID ); + int getPhi(unsigned int TTID ); + int getEta(unsigned int TTID ); + + +}; + +}//end of namespace + +CLASS_DEF( LVL1::jFEXForwardElecAlgo, 71453331, 1 ) + +#endif diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/components/FEXDriver_entries.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/components/FEXDriver_entries.cxx index 2d053fcc4c039bab6cda775be12ac980fd071ab7..7292d02ce519c307212f995989d9c2d0b0acf971 100644 --- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/components/FEXDriver_entries.cxx +++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/components/FEXDriver_entries.cxx @@ -21,6 +21,7 @@ #include "L1CaloFEXSim/jFEXmetAlgo.h" #include "L1CaloFEXSim/jFEXLargeRJetAlgo.h" #include "L1CaloFEXSim/jFEXForwardJetsAlgo.h" +#include "L1CaloFEXSim/jFEXForwardElecAlgo.h" #include "L1CaloFEXSim/jFEXNtupleWriter.h" #include "L1CaloFEXSim/eFEXFPGATowerIdProvider.h" #include "L1CaloFEXSim/eFEXSuperCellTowerIdProvider.h" @@ -67,6 +68,7 @@ DECLARE_COMPONENT(jFEXsumETAlgo) DECLARE_COMPONENT(jFEXmetAlgo) DECLARE_COMPONENT(jFEXLargeRJetAlgo) DECLARE_COMPONENT(jFEXForwardJetsAlgo) +DECLARE_COMPONENT(jFEXForwardElecAlgo) DECLARE_COMPONENT(jFEXNtupleWriter) DECLARE_COMPONENT(gFEXDriver) diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXFPGA.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXFPGA.cxx index cc499b7f35168e261a218728ab2663262ebee3a0..847c3c21222449640e94c398dc102ece0459952e 100644 --- a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXFPGA.cxx +++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXFPGA.cxx @@ -25,6 +25,7 @@ #include "L1CaloFEXSim/jFEXmetTOB.h" #include "L1CaloFEXSim/jFEXForwardJetsAlgo.h" #include "L1CaloFEXSim/jFEXForwardJetsInfo.h" +#include "L1CaloFEXSim/jFEXForwardElecAlgo.h" #include "L1CaloFEXSim/jFEXPileupAndNoise.h" #include "CaloEvent/CaloCellContainer.h" #include "CaloIdentifier/CaloIdManager.h" @@ -85,6 +86,8 @@ void jFEXFPGA::reset() { m_sumET_tobwords.clear(); m_Met_tobwords.clear(); m_map_Etvalues_FPGA.clear(); + m_map_EM_Etvalues_FPGA.clear(); + m_map_HAD_Etvalues_FPGA.clear(); } @@ -324,10 +327,13 @@ StatusCode jFEXFPGA::execute(jFEXOutputCollection* inputOutputCollection) { inputOutputCollection->fill_smallRJet(); inputOutputCollection->fill_largeRJet(); - //**********Forward Jets*********************** + //FCAL region algorithm if(m_jfexid ==0 || m_jfexid ==5) { + + + //**********Forward Jets*********************** ATH_CHECK(m_jFEXForwardJetsAlgoTool->reset()); ATH_CHECK(m_jFEXForwardJetsAlgoTool->safetyTest()); m_jFEXForwardJetsAlgoTool->setFPGAEnergy(m_map_Etvalues_FPGA); @@ -422,7 +428,20 @@ StatusCode jFEXFPGA::execute(jFEXOutputCollection* inputOutputCollection) { inputOutputCollection->fill_smallRJet(); inputOutputCollection->fill_largeRJet(); - + + + + //********** Forward Electrons *********************** + ATH_CHECK(m_jFEXForwardElecAlgoTool->reset()); + ATH_CHECK(m_jFEXForwardElecAlgoTool->safetyTest()); + m_jFEXForwardElecAlgoTool->setFPGAEnergy(m_map_EM_Etvalues_FPGA,m_map_HAD_Etvalues_FPGA); + + /* This is a work in progress, PLEASE DO NOT REMOVE IT YET + * To enter in the algorithm, just uncomment the line below + * it should also enter when is a FWD FPGA so 8 times per eventloop + m_jFEXForwardElecAlgoTool->setup(); + */ + } //end of if statement for checking if in central jfex modules //******************************** TAU ********************************************** diff --git a/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXForwardElecAlgo.cxx b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXForwardElecAlgo.cxx new file mode 100644 index 0000000000000000000000000000000000000000..5545314c0a79160354a56820d45f8e559b109769 --- /dev/null +++ b/Trigger/TrigT1/L1CaloFEX/L1CaloFEXSim/src/jFEXForwardElecAlgo.cxx @@ -0,0 +1,128 @@ +/* + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration +*/ +//*************************************************************************** +// jFEXForwardElecAlgo - Algorithm for Forward Electron Algorithm in jFEX +// ------------------- +// begin : 16 11 2021 +// email : Sergi.Rodriguez@cern.ch +//*************************************************************************** +#include <iostream> +#include <vector> +#include <stdio.h> +#include <math.h> +#include "L1CaloFEXSim/jFEXForwardElecAlgo.h" +#include "L1CaloFEXSim/jTower.h" +#include "L1CaloFEXSim/jTowerContainer.h" +#include "CaloEvent/CaloCellContainer.h" +#include "CaloIdentifier/CaloIdManager.h" +#include "CaloIdentifier/CaloCell_SuperCell_ID.h" +#include "AthenaBaseComps/AthAlgorithm.h" +#include "StoreGate/StoreGateSvc.h" + +namespace LVL1 { + +//Default Constructor +LVL1::jFEXForwardElecAlgo::jFEXForwardElecAlgo(const std::string& type, const std::string& name, const IInterface* parent): AthAlgTool(type, name, parent) { + declareInterface<IjFEXForwardElecAlgo>(this); +} + +/** Destructor */ +LVL1::jFEXForwardElecAlgo::~jFEXForwardElecAlgo() { +} + +StatusCode LVL1::jFEXForwardElecAlgo::initialize() { + ATH_CHECK(m_jFEXFwElecAlgo_jTowerContainerKey.initialize()); + return StatusCode::SUCCESS; +} + +//calls container for TT +StatusCode LVL1::jFEXForwardElecAlgo::safetyTest() { + + if(! m_jTowerContainer.isValid()) { + ATH_MSG_FATAL("Could not retrieve m_jTowerContainer " << m_jFEXFwElecAlgo_jTowerContainerKey.key()); + return StatusCode::FAILURE; + } + + return StatusCode::SUCCESS; +} + +StatusCode LVL1::jFEXForwardElecAlgo::reset() { + + m_jTowerContainer = SG::ReadHandle<jTowerContainer>(m_jFEXFwElecAlgo_jTowerContainerKey); + return StatusCode::SUCCESS; +} + +void LVL1::jFEXForwardElecAlgo::setup() { + + // this is just to setup the algorithm, you will need more functions (you can take a look at jTau or jJ algorithms) + ATH_MSG_DEBUG("---------------- jFEXForwardElecAlgo::setup ----------------"); + +} + + + + +//Gets the EM Et for the TT. +int LVL1::jFEXForwardElecAlgo::getTTowerET_EM(unsigned int TTID ) { + if(TTID == 0) { + return 0; + } + + if(m_map_Etvalues_EM.find(TTID) != m_map_Etvalues_EM.end()) { + return m_map_Etvalues_EM[TTID][0]; + } + + //we shouldn't arrive here + return 0; + +} + +//Gets the HAD Et for the TT. +int LVL1::jFEXForwardElecAlgo::getTTowerET_HAD(unsigned int TTID ) { + if(TTID == 0) { + return 0; + } + + if(m_map_Etvalues_HAD.find(TTID) != m_map_Etvalues_HAD.end()) { + return m_map_Etvalues_HAD[TTID][0]; + } + + //we shouldn't arrive here + return 0; + +} + +//Gets the Total Et for the TT. +int LVL1::jFEXForwardElecAlgo::getTTowerTotalET(unsigned int TTID ) { + return getTTowerET_HAD(TTID) + getTTowerET_EM(TTID); + +} + +//Gets Phi of the TT +int LVL1::jFEXForwardElecAlgo::getPhi(unsigned int TTID ) { + if(TTID == 0) { + return 0; + } + + const LVL1::jTower * tmpTower = m_jTowerContainer->findTower(TTID); + return tmpTower->centrePhi(); +} +//Gets Eta of the TT +int LVL1::jFEXForwardElecAlgo::getEta(unsigned int TTID ) { + if(TTID == 0) { + return 0; + } + + const LVL1::jTower * tmpTower = m_jTowerContainer->findTower(TTID); + return tmpTower->centreEta(); +} + +void LVL1::jFEXForwardElecAlgo::setFPGAEnergy(std::unordered_map<int,std::vector<int> > et_map_EM,std::unordered_map<int,std::vector<int> > et_map_HAD) { + m_map_Etvalues_EM=et_map_EM; + m_map_Etvalues_HAD=et_map_HAD; +} + + + +}// end of namespace LVL1 diff --git a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXForwardElecAlgo.h b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXForwardElecAlgo.h new file mode 100644 index 0000000000000000000000000000000000000000..36d7546143d662bcbb63e5b3c67e40be600f341d --- /dev/null +++ b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXForwardElecAlgo.h @@ -0,0 +1,43 @@ +/* + Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration +*/ +//*************************************************************************** +// Interface for jFEXForwardElecAlgo - Algorithm for Forward Electron Algorithm in jFEX +// ------------------- +// begin : 16 11 2021 +// email : Sergi.Rodriguez@cern.ch +//*************************************************************************** + +#ifndef IjFEXForwardElecAlgo_H +#define IjFEXForwardElecAlgo_H + +#include "GaudiKernel/IAlgTool.h" +#include "L1CaloFEXSim/jTowerContainer.h" + + +namespace LVL1 { + +static const InterfaceID IID_IjFEXForwardElecAlgo("LVL1::IjFEXForwardElecAlgo",1, 0); + +class IjFEXForwardElecAlgo : virtual public IAlgTool { + public: + static const InterfaceID& interfaceID ( ) ; + virtual StatusCode safetyTest() = 0; + virtual StatusCode reset() =0; + virtual void setup() = 0; + + virtual void setFPGAEnergy(std::unordered_map<int,std::vector<int> >,std::unordered_map<int,std::vector<int> > ) =0; + + + + private: + +}; +inline const InterfaceID& LVL1::IjFEXForwardElecAlgo::interfaceID() +{ + return IID_IjFEXForwardElecAlgo; +} + +} +#endif + diff --git a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXtauAlgo.h b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXtauAlgo.h index 293c4bf6f8ea281e35128f61f4b7c0938805ba5c..af19a639b467e7c56a89860f659894d8a69106e2 100644 --- a/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXtauAlgo.h +++ b/Trigger/TrigT1/L1CaloFEXToolInterfaces/L1CaloFEXToolInterfaces/IjFEXtauAlgo.h @@ -24,7 +24,6 @@ class IjFEXtauAlgo : virtual public IAlgTool { static const InterfaceID& interfaceID ( ) ; virtual StatusCode safetyTest() = 0; virtual void setup(int TTwindow[5][5], int seed[3][3]) = 0; - //virtual void setupCluster(int inputTable[4][5]) =0; virtual bool isSeedLocalMaxima() = 0; virtual void buildSeeds() = 0; virtual void setFirstEtRing(int First_ETring[]) =0;