Skip to content
Snippets Groups Projects
Commit 98e89099 authored by Cecilia Tosciri's avatar Cecilia Tosciri Committed by Walter Lampl
Browse files

Make L1Calo gFEXOutputCollection work with read and write handles

parent e6703466
No related branches found
No related tags found
5 merge requests!69091Fix correlated smearing bug in JER in JetUncertainties in 22.0,!58791DataQualityConfigurations: Modify L1Calo config for web display,!51674Fixing hotSpotInHIST for Run3 HIST,!50012RecExConfig: Adjust log message levels from GetRunNumber and GetLBNumber,!47055Make L1Calo gFEXOutputCollection work with read and write handles
Showing
with 79 additions and 45 deletions
......@@ -29,6 +29,9 @@ public:
StatusCode finalize ();
private:
//readhandle key for gFEXOutputCollection
SG::ReadHandleKey<LVL1::gFEXOutputCollection> m_gFEXOutputCollectionSGKey {this, "MyOutputs", "gFEXOutputCollection", "MyOutputs"};
gFEXOutputCollection* m_gFEXOutputCollection;
float m_jet_nTOBs;
float m_global_nTOBs;
......@@ -57,8 +60,8 @@ private:
std::string m_jet_container_name = "AntiKt10TruthJets";
TTree *m_myTree;
StatusCode loadJetAlgoVariables();
StatusCode loadGlobalAlgoVariables();
StatusCode loadJetAlgoVariables(SG::ReadHandle<LVL1::gFEXOutputCollection>);
StatusCode loadGlobalAlgoVariables(SG::ReadHandle<LVL1::gFEXOutputCollection>);
StatusCode loadTruthElectron();
StatusCode loadTruthJets();
......
......@@ -23,9 +23,10 @@ namespace LVL1 {
{
//gFEXOutputCollection class stores the output of gFEX simulation for the use of gFEXNtupleWriter.
public:
//constructor
gFEXOutputCollection() {};
gFEXOutputCollection();
//Destructor
~gFEXOutputCollection();
......@@ -49,8 +50,8 @@ namespace LVL1 {
void fillGlobal();
//Get total number of TOBs saved
int jetsSize();
int globalsSize();
int jetsSize() const;
int globalsSize() const;
//Get all jets related values
std::unordered_map<std::string, float> getJet(int) const;
......@@ -64,7 +65,14 @@ namespace LVL1 {
std::vector<uint32_t> getJetTob() const;
std::vector<uint32_t> getGlobalTob() const;
//setting true if ntuple output is needed
void setdooutput(bool);
//return true if ntuple output is needed
bool getdooutput() const;
private:
bool m_dooutput; //if write Ntuple
//vector of TOB words
std::vector<uint32_t> m_jettob;
std::vector<uint32_t> m_globaltob;
......@@ -79,4 +87,4 @@ namespace LVL1 {
}
CLASS_DEF( LVL1::gFEXOutputCollection, 2459353 , 1 )
#endif
\ No newline at end of file
#endif
......@@ -47,7 +47,7 @@ namespace LVL1 {
virtual StatusCode initialize() override ;
virtual StatusCode executegFEXSim(gTowersIDs tmp) override;
virtual StatusCode executegFEXSim(gTowersIDs tmp, gFEXOutputCollection* gFEXOutputs) override;
virtual std::vector<uint32_t> getgRhoTOBs() const override;
......
......@@ -47,7 +47,7 @@ namespace LVL1 {
/** standard Athena-Algorithm method */
virtual StatusCode initialize() override;
virtual StatusCode execute() override ;
virtual StatusCode execute(gFEXOutputCollection* gFEXOutputs) override ;
virtual void cleanup() override;
......
......@@ -40,5 +40,6 @@ svcMgr.THistSvc.Output += ["ANALYSIS DATAFILE='myfile.root' OPT='RECREATE'"]
log.info("==========================================================")
log.info("Scheduling gFEXDriver")
athAlgSeq += CfgMgr.LVL1__gFEXDriver('MygFEXDriver')
athAlgSeq += CfgMgr.LVL1__gFEXNtupleWriter('MygFEXNtupleWriter')
log.info("==========================================================")
#######################################################
......@@ -65,6 +65,7 @@ StatusCode gFEXDriver::initialize()
ATH_CHECK( m_gTowerContainerSGKey.initialize() );
ATH_CHECK( m_gFEXOutputCollectionSGKey.initialize() );
return StatusCode::SUCCESS;
......@@ -79,14 +80,11 @@ StatusCode gFEXDriver::initialize()
// STEP 0 - Make a fresh local gTowerContainer
std::unique_ptr<gTowerContainer> local_gTowerContainerRaw = std::make_unique<gTowerContainer>();
// std::unique_ptr<gFEXOutputCollection> my_gFEXOutputCollection = std::make_unique<gFEXOutputCollection>();
//STEP 1 - Do some monitoring
gFEXOutputCollection* my_gFEXOutputCollection = new gFEXOutputCollection();
ATH_CHECK( evtStore()->record(my_gFEXOutputCollection,"gFEXOutputCollection") );
my_gFEXOutputCollection->setdooutput(true);
// SG::WriteHandle<LVL1::gFEXOutputCollection> gFEXOutputCollectionSG(m_gFEXOutputCollectionSGKey);
// ATH_CHECK(gFEXOutputCollectionSG.record(std::move(my_gFEXOutputCollection)));
// STEP 2 - Make some gTowers and fill the local container
m_gTowerBuilderTool->init(local_gTowerContainerRaw);
......@@ -101,15 +99,19 @@ StatusCode gFEXDriver::initialize()
SG::WriteHandle<LVL1::gTowerContainer> gTowerContainerSG(m_gTowerContainerSGKey);
ATH_CHECK(gTowerContainerSG.record(std::move(local_gTowerContainerRaw)));
// STEP 5 - Set up the gFEXSysSim
// STEP 5 - Run the gFEXSysSim
ATH_CHECK(m_gFEXSysSimTool->execute(my_gFEXOutputCollection));
// STEP 6 - Run the gFEXSysSim
ATH_CHECK(m_gFEXSysSimTool->execute());
// STEP 7 - Close and clean the event
// STEP 6 - Close and clean the event
m_gFEXSysSimTool->cleanup();
m_gSuperCellTowerMapperTool->reset();
m_gTowerBuilderTool->reset();
// STEP 7 - Write the completed gFEXOutputCollection into StoreGate (move the local copy in memory)
std::unique_ptr<gFEXOutputCollection> local_gFEXOutputCollection = std::unique_ptr<gFEXOutputCollection>(my_gFEXOutputCollection);
SG::WriteHandle<LVL1::gFEXOutputCollection> gFEXOutputCollectionSG(m_gFEXOutputCollectionSGKey);
ATH_CHECK(gFEXOutputCollectionSG.record(std::move(local_gFEXOutputCollection)));
ATH_MSG_DEBUG("Executed " << name() << ", closing event number " << m_numberOfEvents );
m_numberOfEvents++;
......
......@@ -37,6 +37,8 @@ StatusCode LVL1::gFEXNtupleWriter::initialize () {
m_myTree = new TTree("data","data");
CHECK( histSvc->regTree("/ANALYSIS/data",m_myTree) );
ATH_CHECK( m_gFEXOutputCollectionSGKey.initialize() );
m_load_truth_jet = false;
if (m_load_truth_jet){
......@@ -65,19 +67,23 @@ StatusCode LVL1::gFEXNtupleWriter::initialize () {
return StatusCode::SUCCESS;
}
StatusCode LVL1::gFEXNtupleWriter::execute () {
ATH_MSG_DEBUG("==== gFEXNtupleWriter ============ execute()");
ServiceHandle<StoreGateSvc> evtStore("StoreGateSvc/StoreGateSvc", "arbitrary");
CHECK(evtStore.retrieve() );
CHECK(evtStore->retrieve(m_gFEXOutputCollection, "gFEXOutputCollection"));
StatusCode LVL1::gFEXNtupleWriter::execute () {
SG::ReadHandle<LVL1::gFEXOutputCollection> gFEXOutputCollectionobj = SG::ReadHandle<LVL1::gFEXOutputCollection>(m_gFEXOutputCollectionSGKey);
if(!gFEXOutputCollectionobj.isValid()){
ATH_MSG_FATAL("Could not retrieve gFEXOutputCollection " << m_gFEXOutputCollectionSGKey.key());
return StatusCode::FAILURE;
}
if (!gFEXOutputCollectionobj->getdooutput()) {
return StatusCode::SUCCESS;
}
CHECK(loadJetAlgoVariables());
CHECK(loadJetAlgoVariables(gFEXOutputCollectionobj));
if (m_load_truth_jet){
CHECK(loadTruthJets());
}
CHECK(loadGlobalAlgoVariables());
CHECK(loadGlobalAlgoVariables(gFEXOutputCollectionobj));
m_myTree->Fill();
return StatusCode::SUCCESS;
......@@ -88,7 +94,7 @@ StatusCode LVL1::gFEXNtupleWriter::finalize () {
return StatusCode::SUCCESS;
}
StatusCode LVL1::gFEXNtupleWriter::loadJetAlgoVariables() {
StatusCode LVL1::gFEXNtupleWriter::loadJetAlgoVariables(SG::ReadHandle<LVL1::gFEXOutputCollection> gFEXOutputCollectionobj) {
m_jet_TOB.clear();
m_jet_TOB_Eta.clear();
m_jet_TOB_Phi.clear();
......@@ -97,12 +103,13 @@ StatusCode LVL1::gFEXNtupleWriter::loadJetAlgoVariables() {
m_jet_TOB_Status.clear();
m_jet_nTOBs = m_gFEXOutputCollection->jetsSize();
for (int i = 0; i < m_gFEXOutputCollection->jetsSize(); i++)
m_jet_nTOBs = gFEXOutputCollectionobj->jetsSize();
for (int i = 0; i < gFEXOutputCollectionobj->jetsSize(); i++)
{
uint32_t TOB = m_gFEXOutputCollection->getJetTob()[i];
uint32_t TOB = gFEXOutputCollectionobj->getJetTob()[i];
m_jet_TOB.push_back(TOB);
std::unordered_map<std::string, float> gFEXjetvalue = (m_gFEXOutputCollection->getJet(i));
std::unordered_map<std::string, float> gFEXjetvalue = (gFEXOutputCollectionobj->getJet(i));
m_jet_TOB_Eta.push_back(gFEXjetvalue["EtaJet"]);
m_jet_TOB_Phi.push_back(gFEXjetvalue["PhiJet"]);
m_jet_TOB_ET.push_back(gFEXjetvalue["ETJet"]);
......@@ -113,7 +120,7 @@ StatusCode LVL1::gFEXNtupleWriter::loadJetAlgoVariables() {
return StatusCode::SUCCESS;
}
StatusCode LVL1::gFEXNtupleWriter::loadGlobalAlgoVariables() {
StatusCode LVL1::gFEXNtupleWriter::loadGlobalAlgoVariables(SG::ReadHandle<LVL1::gFEXOutputCollection> gFEXOutputCollectionobj) {
m_global_TOB.clear();
m_global_TOB_Quantity1.clear();
m_global_TOB_Quantity2.clear();
......@@ -122,12 +129,13 @@ StatusCode LVL1::gFEXNtupleWriter::loadGlobalAlgoVariables() {
m_global_TOB_Status1.clear();
m_global_TOB_Status2.clear();
m_global_nTOBs = m_gFEXOutputCollection->globalsSize();
for (int i = 0; i < m_gFEXOutputCollection->globalsSize(); i++)
m_global_nTOBs = gFEXOutputCollectionobj->globalsSize();
for (int i = 0; i < gFEXOutputCollectionobj->globalsSize(); i++)
{
uint32_t TOB = m_gFEXOutputCollection->getGlobalTob()[i];
uint32_t TOB = gFEXOutputCollectionobj->getGlobalTob()[i];
m_global_TOB.push_back(TOB);
std::unordered_map<std::string, float> gFEXglobalvalue = (m_gFEXOutputCollection->getGlobal(i));
std::unordered_map<std::string, float> gFEXglobalvalue = (gFEXOutputCollectionobj->getGlobal(i));
m_global_TOB_Quantity1.push_back(gFEXglobalvalue["GlobalQuantity1"]);
m_global_TOB_Quantity2.push_back(gFEXglobalvalue["GlobalQuantity2"]);
m_global_TOB_Saturation.push_back(gFEXglobalvalue["SaturationGlobal"]);
......
......@@ -10,6 +10,10 @@
#include "L1CaloFEXSim/gFEXOutputCollection.h"
LVL1::gFEXOutputCollection::gFEXOutputCollection() {
m_dooutput = false;
}
LVL1::gFEXOutputCollection::~gFEXOutputCollection()
{
}
......@@ -41,7 +45,7 @@ void LVL1::gFEXOutputCollection::fillJet()
m_values_gFEXJet.clear();
}
int LVL1::gFEXOutputCollection::jetsSize()
int LVL1::gFEXOutputCollection::jetsSize() const
{
return m_allvalues_gFEXjet.size();
}
......@@ -74,7 +78,7 @@ void LVL1::gFEXOutputCollection::fillGlobal()
m_values_gFEXGlobal.clear();
}
int LVL1::gFEXOutputCollection::globalsSize()
int LVL1::gFEXOutputCollection::globalsSize() const
{
return m_allvalues_gFEXglobal.size();
}
......@@ -93,3 +97,12 @@ std::vector<uint32_t> LVL1::gFEXOutputCollection::getGlobalTob() const
{
return m_globaltob;
}
void LVL1::gFEXOutputCollection::setdooutput(bool input) {
m_dooutput = input;
}
bool LVL1::gFEXOutputCollection::getdooutput() const {
return m_dooutput;
}
......@@ -56,7 +56,7 @@ namespace LVL1 {
}
StatusCode gFEXSim::executegFEXSim(gTowersIDs tmp_gTowersIDs_subset){
StatusCode gFEXSim::executegFEXSim(gTowersIDs tmp_gTowersIDs_subset, gFEXOutputCollection* gFEXOutputs){
typedef std::array<std::array<int, 12>, 32> gTowersCentral;
typedef std::array<std::array<int, 7>, 32> gTowersForward;
......@@ -212,9 +212,6 @@ StatusCode gFEXSim::executegFEXSim(gTowersIDs tmp_gTowersIDs_subset){
m_gMHTComponentsJwojTobWords[0] = outTOB[2];//
m_gMSTComponentsJwojTobWords[0] = outTOB[3];//
gFEXOutputCollection* gFEXOutputs;
ATH_CHECK(evtStore()->retrieve(gFEXOutputs, "gFEXOutputCollection"));
for (int i = 0; i <14; i++){
gFEXOutputs->addJetTob(tobs_v[i]->getWord());
......
......@@ -77,7 +77,7 @@ namespace LVL1 {
}
StatusCode gFEXSysSim::execute() {
StatusCode gFEXSysSim::execute(gFEXOutputCollection* gFEXOutputs) {
SG::ReadHandle<LVL1::gTowerContainer> this_gTowerContainer(m_gTowerContainerSGKey);
if(!this_gTowerContainer.isValid()){
......@@ -221,7 +221,7 @@ namespace LVL1 {
}
}
ATH_CHECK(m_gFEXSimTool->executegFEXSim(tmp_gTowersIDs_subset));
ATH_CHECK(m_gFEXSimTool->executegFEXSim(tmp_gTowersIDs_subset, gFEXOutputs));
m_allgRhoTobs = m_gFEXSimTool->getgRhoTOBs();
m_allgBlockTobs = m_gFEXSimTool->getgBlockTOBs();
......
......@@ -10,6 +10,7 @@
#include "L1CaloFEXSim/gTowerContainer.h"
#include "CaloIdentifier/CaloIdManager.h"
#include "CaloEvent/CaloCellContainer.h"
#include "L1CaloFEXSim/gFEXOutputCollection.h"
namespace LVL1 {
......@@ -28,7 +29,7 @@ Interface definition for gFEXSim
virtual void execute() = 0;
virtual StatusCode executegFEXSim(gTowersIDs tmp) = 0;
virtual StatusCode executegFEXSim(gTowersIDs tmp, gFEXOutputCollection* gFEXOutputs) = 0;
virtual std::vector<uint32_t> getgRhoTOBs() const =0;
......
......@@ -8,6 +8,7 @@
#include "GaudiKernel/IAlgTool.h"
#include "L1CaloFEXSim/gTowerContainer.h"
#include "L1CaloFEXSim/gFEXOutputCollection.h"
namespace LVL1 {
......@@ -21,7 +22,7 @@ Interface definition for gFEXSysSim
public:
static const InterfaceID& interfaceID( ) ;
virtual StatusCode execute() = 0;
virtual StatusCode execute(gFEXOutputCollection* gFEXOutputs) = 0;
virtual void cleanup() = 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment