From 496f43fb1d61108dba01757edffd043586df6363 Mon Sep 17 00:00:00 2001 From: Eva Brottmann Hansen Date: Thu, 20 Jun 2019 16:34:07 +0200 Subject: [PATCH 1/5] Addded BuildGblock function to JGTowerReader --- .../TrigT1CaloFexSim/JGTowerReader.h | 2 + .../TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h | 6 +- .../TrigT1CaloFexSim/src/JGTowerReader.cxx | 79 ++++++++++++++++++- 3 files changed, 82 insertions(+), 5 deletions(-) diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h index db4343368ca..1de72882de1 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h +++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h @@ -28,6 +28,7 @@ #include "Identifier/IdentifierHash.h" #include "TH1.h" #include "TH2.h" +#include "TrigT1CaloFexSim/Objects.h" #include "TrigT1CaloFexSim/JetAlg.h" #include "TrigT1CaloFexSim/METAlg.h" #include "string.h" @@ -122,6 +123,7 @@ class JGTowerReader: public ::AthAlgorithm { virtual StatusCode ReadTowerMap(); virtual StatusCode CheckTowerMap(const xAOD::JGTowerContainer*jTs); virtual StatusCode DumpTowerInfo(const xAOD::JGTowerContainer*jTs, const CaloCellContainer* scells); + virtual StatusCode BuildBlocksFromTowers(std::vector& blocks, const xAOD::JGTowerContainer towers, const int blockRows, const int blockCols, const bool useNegTowers); virtual StatusCode JFexAlg(const xAOD::JGTowerContainer*jTs); virtual StatusCode GFexAlg(const xAOD::JGTowerContainer*gTs); virtual StatusCode BuildJetsFromMap(const xAOD::JGTowerContainer*jTs); diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h index bb96f74ccef..b827919dbab 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h +++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h @@ -25,7 +25,7 @@ *@brief Takes JGTowers from a JGTowerContainer and combines them into gBlocks. Used for threshold on the "cone" (gBlock) pt *@return @c void */ -void BuildBlocksFromTowers(std::vector& blocks, const xAOD::JGTowerContainer towers, const int blockRows, const int blockCols, const bool useNegTowers){ +void BuildBlocksFromTowers_1(std::vector& blocks, const xAOD::JGTowerContainer towers, const int blockRows, const int blockCols, const bool useNegTowers){ blocks.clear(); TowerObject::TowerGrid grid = TowerObject::TowerGrid(towers); @@ -61,14 +61,14 @@ void BuildBlocksFromTowers(std::vector& blocks, const xAOD:: std::sort(blocks.rbegin(), blocks.rend()); } -/** +/* *@brief Separates Et into hard and soft terms depending on threshold pt. Stores hard and soft MET terms in a vector to be passed. *@return @c std::vector */ std::vector Run_JwoJ(const xAOD::JGTowerContainer* towers, float pTcone_cut, bool useNegTowers){ std::vector blocks; - BuildBlocksFromTowers(blocks, *towers, 3, 3, useNegTowers); + BuildBlocksFromTowers_1(blocks, *towers, 3, 3, useNegTowers); pTcone_cut*=Gaudi::Units::GeV; std::vector Et_vals; diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx index 6655fd6740f..ff8eb1539a8 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx +++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx @@ -6,6 +6,7 @@ #include "TrigT1CaloFexSim/JGTowerReader.h" #include "TrigT1CaloFexSim/JGTower.h" #include "TrigT1CaloFexSim/JetAlg.h" +#include "TrigT1CaloFexSim/Objects.h" #include "TSystem.h" #include "xAODEventInfo/EventInfo.h" #include "TTree.h" @@ -192,11 +193,42 @@ StatusCode JGTowerReader::execute() { //when noise file is not available, set the noise as constant for EM, Had, and FCal respectively if(gT_noise.size()==0){ ATH_MSG_INFO (" Failed to find noise file, setting gTower noise manually "); - for(unsigned int i = 0; i < gTowers->size(); i++) { - gT_noise.push_back(1500); + for(unsigned int i = 0; i < gTowers->size(); i++) { + gT_noise.push_back(1500); } } + // Put gBlock definition here? + + std::vector gBlocks; + bool useNegTowers=false; + + BuildBlocksFromTowers(gBlocks, *gTowers, 3, 3, useNegTowers); + + xAOD::JGTowerAuxContainer* gBAux = new xAOD::JGTowerAuxContainer(); + xAOD::JGTowerContainer* gBs = new xAOD::JGTowerContainer(); + const std::vector index(2, 0); + + for(unsigned int b = 0; b < gBlocks.size(); b++){ + float phi = gBlocks[b].Phi(); + float eta = gBlocks[b].Eta(); + //float deta = gBlocks[b].deltaEta(); //delta eta from what? + //float dphi = gBlocks[b].deltaPhi(); //delta phi from what? + float pt = gBlocks[b].pt(); + + //if(t > 544) totalEt = 0 + + xAOD::JGTower* m_block = new xAOD::JGTower(); + const int b_ = b; + m_block->initialize(b_, eta, phi); + //m_block->setdEta(deta); + //m_block->setdPhi(dphi); + m_block->setSCIndex(index); + m_block->setTileIndex(index); + gBs->push_back(m_block); + } + + ATH_MSG_DEBUG ("Successfully retrieved cells("<< scells->size() << "), jTowers("<< jTowers->size() <<") and gTowers (" << gTowers->size() << ")"); @@ -220,6 +252,7 @@ StatusCode JGTowerReader::execute() { ATH_MSG_DEBUG ("Algorithm passed"); setFilterPassed(true); //if got here, assume that means algorithm passed + return StatusCode::SUCCESS; } @@ -242,6 +275,48 @@ StatusCode JGTowerReader::beginInputFile() { return StatusCode::SUCCESS; } +StatusCode JGTowerReader::BuildBlocksFromTowers(std::vector& blocks, const xAOD::JGTowerContainer towers, const int blockRows, const int blockCols, const bool useNegTowers){ + + blocks.clear(); + TowerObject::TowerGrid grid = TowerObject::TowerGrid(towers); + + for(const xAOD::JGTower* seed: towers){ + int seedIndex = std::find(towers.begin(), towers.end(), seed) - towers.begin(); + + std::vector neighbors = grid.neighbors(*seed, blockRows, blockCols); + float seed_Et = seed->et(); + if(!useNegTowers) seed_Et = TMath::Abs(seed_Et); + double block_area(0.0); + double block_pt(seed_Et); + double neighbor_pt = 0; + + for(const int& neighborIndex: neighbors){ + const xAOD::JGTower* neighbor = towers.at(neighborIndex); + block_area += neighbor->deta()*neighbor->dphi(); + neighbor_pt = neighbor->et(); + if(!useNegTowers) neighbor_pt = TMath::Abs(neighbor_pt); + block_pt += neighbor_pt; + } + + TowerObject::Block block(block_pt, seed->eta(), seed->phi(), 0.0); + block.seedIndex(seedIndex); + block.numEta(blockCols); + block.numPhi(blockRows); + block.area(block_area); + block.numConstituents(neighbors.size()); + + blocks.push_back(block); + } + + std::sort(blocks.rbegin(), blocks.rend()); + + return StatusCode::SUCCESS; + +} + + + + //L1Calo algorithms are here: StatusCode JGTowerReader::JFexAlg(const xAOD::JGTowerContainer* jTs){ -- GitLab From b78c790383128425fd022cf6f9891e8aca3e1c35 Mon Sep 17 00:00:00 2001 From: Eva Brottmann Hansen Date: Mon, 24 Jun 2019 16:49:07 +0200 Subject: [PATCH 2/5] Added SC and TileIndex to gBlocks --- .../TrigT1CaloFexSim/Objects.h | 16 ++++++++-- .../TrigT1/TrigT1CaloFexSim/src/JGTower.cxx | 1 + .../TrigT1CaloFexSim/src/JGTowerMaker.cxx | 1 + .../TrigT1CaloFexSim/src/JGTowerReader.cxx | 29 ++++++++++++------- 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/Objects.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/Objects.h index c22a812265e..64f366882cb 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/Objects.h +++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/Objects.h @@ -14,6 +14,8 @@ Objects: Object: template four momentum object holding pt, eta, phi, m for defin Patch: Tower "patch" required for PUfit algorithm. A simpler implementation of Block/TowerGrid for quick use. Called a tower in PUfit algorithm, but renaming as Patch to avoid confusion */ +#ifndef TRIGT1CALOFEXSIM_OBJECTS_H +#define TRIGT1CALOFEXSIM_OBJECTS_H #include "Math/Vector4D.h" #include "TVector2.h" @@ -45,9 +47,10 @@ namespace TowerObject{ void phi(float phi) {this->SetPhi(phi);}; float m() const {return this->M();}; void m(float m) {this->SetM(m);}; + float area() const {return this->M();}; void area(float a) {m_area = a;}; - + // comparison operators for easy sorting friend bool operator < (const Object &o1, const Object &o2){ return o1.pt() < o2.pt(); }; friend bool operator > (const Object &o1, const Object &o2){ return o1.pt() > o2.pt(); }; @@ -75,7 +78,9 @@ namespace TowerObject{ int m_numEta; int m_numPhi; int m_numConstituents = 0; - + float m_sumDeta; + float m_sumDphi; + public: //Block: Object(){}; Block(float pt, float eta, float phi, float m): Object(pt, eta, phi, m){}; @@ -90,6 +95,11 @@ namespace TowerObject{ void numPhi(int n) {m_numPhi = n;}; int numConstituents() const {return m_numConstituents;}; void numConstituents(int n) {m_numConstituents = n;}; + + float sumDeta() const {return m_sumDeta;}; + void sumDeta(float sumDeta) {m_sumDeta = sumDeta;}; + float sumDphi() const {return m_sumDphi;}; + void sumDphi(float sumDphi) {m_sumDphi = sumDphi;}; }; class TowerGrid{ @@ -257,3 +267,5 @@ namespace TowerObject{ }; }; } + +#endif diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx index cb44f0e1497..9bce7276207 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx +++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx @@ -53,3 +53,4 @@ float deltaPhi(float phi1,float phi2){ //https://root.cern.ch/doc/master/TLorentzVector_8h_source.html#l00456 return TVector2::Phi_mpi_pi(phi1-phi2); } + diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx index f5fe56e9d38..c5d4228645d 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx +++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx @@ -23,6 +23,7 @@ #include "TrigT1CaloFexSim/JGTower.h" #include "xAODTrigL1Calo/TriggerTowerContainer.h" #include "TFile.h" + JGTowerMaker::JGTowerMaker( const std::string& name, ISvcLocator* pSvcLocator ) : AthAlgorithm( name, pSvcLocator ){ declareProperty("useSCQuality",m_useSCQuality=true); diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx index e212dcc347f..8de27d45d08 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx +++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx @@ -318,29 +318,32 @@ StatusCode JGTowerReader::execute() { xAOD::JGTowerAuxContainer* gBAux = new xAOD::JGTowerAuxContainer(); xAOD::JGTowerContainer* gBs = new xAOD::JGTowerContainer(); - const std::vector index(2, 0); + gBs->setStore(gBAux); + const std::vector index(2, 0); + for(unsigned int b = 0; b < gBlocks.size(); b++){ float phi = gBlocks[b].Phi(); float eta = gBlocks[b].Eta(); - //float deta = gBlocks[b].deltaEta(); //delta eta from what? - //float dphi = gBlocks[b].deltaPhi(); //delta phi from what? + float deta = gBlocks[b].sumDeta(); //sum of delta eta between seed tower to all others? + float dphi = gBlocks[b].sumDphi(); //sum of delta phi between seed tower and all others? float pt = gBlocks[b].pt(); - - //if(t > 544) totalEt = 0 + int seedTowerIndex = gBlocks[b].seedIndex(); + const int sampling = gTowers->at(seedTowerIndex)->sampling(); xAOD::JGTower* m_block = new xAOD::JGTower(); const int b_ = b; m_block->initialize(b_, eta, phi); - //m_block->setdEta(deta); - //m_block->setdPhi(dphi); - m_block->setSCIndex(index); - m_block->setTileIndex(index); + m_block->setdEta(deta); + m_block->setdPhi(dphi); + m_block->setSCIndex(index); // Not sure what these are supposed to be? + m_block->setTileIndex(index);// Not sure what these are supposed to be? + m_block->setSampling(sampling); + gBs->push_back(m_block); } - ATH_MSG_DEBUG ("Successfully retrieved cells("<< scells->size() << "), jTowers("<< jTowers->size() <<") and gTowers (" << gTowers->size() << ")"); // make and check tower mapping @@ -399,12 +402,16 @@ StatusCode JGTowerReader::BuildBlocksFromTowers(std::vector& float seed_Et = seed->et(); if(!useNegTowers) seed_Et = TMath::Abs(seed_Et); double block_area(0.0); + double sum_deta(0.0); + double sum_dphi(0.0); double block_pt(seed_Et); double neighbor_pt = 0; for(const int& neighborIndex: neighbors){ const xAOD::JGTower* neighbor = towers.at(neighborIndex); block_area += neighbor->deta()*neighbor->dphi(); + sum_deta += neighbor->deta(); + sum_dphi += neighbor->dphi(); neighbor_pt = neighbor->et(); if(!useNegTowers) neighbor_pt = TMath::Abs(neighbor_pt); block_pt += neighbor_pt; @@ -415,6 +422,8 @@ StatusCode JGTowerReader::BuildBlocksFromTowers(std::vector& block.numEta(blockCols); block.numPhi(blockRows); block.area(block_area); + block.sumDeta(sum_deta); + block.sumDphi(sum_dphi); block.numConstituents(neighbors.size()); blocks.push_back(block); -- GitLab From 8ff7343348d91986ef9e1166a440f18a749b03da Mon Sep 17 00:00:00 2001 From: Eva Brottmann Hansen Date: Thu, 27 Jun 2019 08:21:58 +0200 Subject: [PATCH 3/5] removed extra empty lines --- Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h | 2 +- Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/Objects.h | 2 +- Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx | 1 - Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx | 1 - Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx | 4 ---- 5 files changed, 2 insertions(+), 8 deletions(-) diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h index e90d520cdfe..e372e1176fd 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h +++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h @@ -63,7 +63,7 @@ void BuildBlocksFromTowers_1(std::vector& blocks, const xAOD std::sort(blocks.rbegin(), blocks.rend()); } -/* +/** *@brief Separates Et into hard and soft terms depending on threshold pt. Stores hard and soft MET terms in a vector to be passed. *@return @c std::vector */ diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/Objects.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/Objects.h index 64f366882cb..412ea136bb7 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/Objects.h +++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/Objects.h @@ -78,6 +78,7 @@ namespace TowerObject{ int m_numEta; int m_numPhi; int m_numConstituents = 0; + float m_sumDeta; float m_sumDphi; @@ -95,7 +96,6 @@ namespace TowerObject{ void numPhi(int n) {m_numPhi = n;}; int numConstituents() const {return m_numConstituents;}; void numConstituents(int n) {m_numConstituents = n;}; - float sumDeta() const {return m_sumDeta;}; void sumDeta(float sumDeta) {m_sumDeta = sumDeta;}; float sumDphi() const {return m_sumDphi;}; diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx index 9bce7276207..cb44f0e1497 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx +++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx @@ -53,4 +53,3 @@ float deltaPhi(float phi1,float phi2){ //https://root.cern.ch/doc/master/TLorentzVector_8h_source.html#l00456 return TVector2::Phi_mpi_pi(phi1-phi2); } - diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx index c5d4228645d..f5fe56e9d38 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx +++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx @@ -23,7 +23,6 @@ #include "TrigT1CaloFexSim/JGTower.h" #include "xAODTrigL1Calo/TriggerTowerContainer.h" #include "TFile.h" - JGTowerMaker::JGTowerMaker( const std::string& name, ISvcLocator* pSvcLocator ) : AthAlgorithm( name, pSvcLocator ){ declareProperty("useSCQuality",m_useSCQuality=true); diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx index 8de27d45d08..545240f0e19 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx +++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx @@ -367,7 +367,6 @@ StatusCode JGTowerReader::execute() { ATH_MSG_DEBUG ("Algorithm passed"); setFilterPassed(true); //if got here, assume that means algorithm passed - return StatusCode::SUCCESS; } @@ -435,9 +434,6 @@ StatusCode JGTowerReader::BuildBlocksFromTowers(std::vector& } - - - //L1Calo algorithms are here: StatusCode JGTowerReader::JFexAlg(const xAOD::JGTowerContainer* jTs){ -- GitLab From 0f6f7dc6b30b7944319d0f8529a96bb92b4b32c7 Mon Sep 17 00:00:00 2001 From: Eva Brottmann Hansen Date: Thu, 27 Jun 2019 09:48:16 +0200 Subject: [PATCH 4/5] Removed buildGBlocksFromTowers function from JwoJ.h --- .../TrigT1CaloFexSim/JGTowerReader.h | 3 +- .../TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h | 46 +------------------ .../TrigT1CaloFexSim/src/JGTowerReader.cxx | 6 ++- 3 files changed, 9 insertions(+), 46 deletions(-) diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h index 042f71b2fd3..57331aaa3c7 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h +++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h @@ -46,6 +46,8 @@ class JGTowerReader: public ::AthAlgorithm { virtual StatusCode ProcessObjects(); virtual StatusCode HistBookFill(const TString name, Int_t nbinsx, Double_t xbin_down, Double_t xbin_up, float xvalue, float wei); virtual StatusCode HistBookFill(const TString name, Int_t nbinsx, const Double_t* xbins, float xvalue,float wei); + static StatusCode BuildBlocksFromTowers(std::vector& blocks, const xAOD::JGTowerContainer towers, const int blockRows, const int blockCols, const bool useNegTowers); + private: bool m_vetoBCID; bool m_outputNoise; @@ -125,7 +127,6 @@ class JGTowerReader: public ::AthAlgorithm { virtual StatusCode ReadTowerMap(); virtual StatusCode CheckTowerMap(const xAOD::JGTowerContainer*jTs); virtual StatusCode DumpTowerInfo(const xAOD::JGTowerContainer*jTs, const CaloCellContainer* scells); - virtual StatusCode BuildBlocksFromTowers(std::vector& blocks, const xAOD::JGTowerContainer towers, const int blockRows, const int blockCols, const bool useNegTowers); virtual StatusCode JFexAlg(const xAOD::JGTowerContainer*jTs); virtual StatusCode GFexAlg(const xAOD::JGTowerContainer*gTs); virtual StatusCode BuildJetsFromMap(const xAOD::JGTowerContainer*jTs); diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h index e372e1176fd..1b3de0f7fb6 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h +++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JwoJ.h @@ -19,49 +19,7 @@ #include "TMath.h" #include "Objects.h" #include "GaudiKernel/SystemOfUnits.h" - - -/** - *@brief Takes JGTowers from a JGTowerContainer and combines them into gBlocks. Used for threshold on the "cone" (gBlock) pt - *@return @c void - */ -void BuildBlocksFromTowers_1(std::vector& blocks, const xAOD::JGTowerContainer towers, const int blockRows, const int blockCols, const bool useNegTowers){ - - blocks.clear(); - TowerObject::TowerGrid grid = TowerObject::TowerGrid(towers); - - for(const xAOD::JGTower* seed: towers){ - int seedIndex = std::find(towers.begin(), towers.end(), seed) - towers.begin(); - - std::vector neighbors = grid.neighbors(*seed, blockRows, blockCols); - float seed_Et = seed->et(); - - if(!useNegTowers) seed_Et = TMath::Abs(seed_Et); - double block_area(0.0); - double block_pt(seed_Et); - double neighbor_pt = 0; - - for(const int& neighborIndex: neighbors){ - const xAOD::JGTower* neighbor = towers.at(neighborIndex); - block_area += neighbor->deta()*neighbor->dphi(); - neighbor_pt = neighbor->et(); - - if(!useNegTowers) neighbor_pt = TMath::Abs(neighbor_pt); - block_pt += neighbor_pt; - } - - TowerObject::Block block(block_pt, seed->eta(), seed->phi(), 0.0); - block.seedIndex(seedIndex); - block.numEta(blockCols); - block.numPhi(blockRows); - block.area(block_area); - block.numConstituents(neighbors.size()); - - blocks.push_back(block); - } - - std::sort(blocks.rbegin(), blocks.rend()); -} +#include "JGTowerReader.h" /** *@brief Separates Et into hard and soft terms depending on threshold pt. Stores hard and soft MET terms in a vector to be passed. @@ -70,7 +28,7 @@ void BuildBlocksFromTowers_1(std::vector& blocks, const xAOD std::vector Run_JwoJ(const xAOD::JGTowerContainer* towers, float rho, float pTcone_cut, bool useEtaBins, bool useNegTowers){ std::vector blocks; - BuildBlocksFromTowers_1(blocks, *towers, 3, 3, useNegTowers); + JGTowerReader::BuildBlocksFromTowers(blocks, *towers, 3, 3, useNegTowers); pTcone_cut*=Gaudi::Units::GeV; std::vector Et_vals; diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx index 545240f0e19..8a8efb4ca0a 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx +++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx @@ -389,6 +389,10 @@ StatusCode JGTowerReader::beginInputFile() { return StatusCode::SUCCESS; } +/** + *@brief Takes JGTowers from a JGTowerContainer and combines them into gBlocks. + *@return @c status code +*/ StatusCode JGTowerReader::BuildBlocksFromTowers(std::vector& blocks, const xAOD::JGTowerContainer towers, const int blockRows, const int blockCols, const bool useNegTowers){ blocks.clear(); @@ -431,9 +435,9 @@ StatusCode JGTowerReader::BuildBlocksFromTowers(std::vector& std::sort(blocks.rbegin(), blocks.rend()); return StatusCode::SUCCESS; - } + //L1Calo algorithms are here: StatusCode JGTowerReader::JFexAlg(const xAOD::JGTowerContainer* jTs){ -- GitLab From 9cd186b5dd619e7ef196f85e7a73242b2726b840 Mon Sep 17 00:00:00 2001 From: Eva Brottmann Hansen Date: Wed, 3 Jul 2019 09:35:19 +0200 Subject: [PATCH 5/5] Added a function in JetAlgs to save highest-pt gblocks --- .../TrigT1CaloFexSim/JetAlg.h | 2 +- .../TrigT1/TrigT1CaloFexSim/src/JetAlg.cxx | 101 ++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JetAlg.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JetAlg.h index ffc650900ef..ce568d374b8 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JetAlg.h +++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JetAlg.h @@ -63,6 +63,6 @@ class JetAlg{ static StatusCode BuildFatJet(const xAOD::JGTowerContainer towers, TString jetname, float jet_r, std::vector noise, float jet_tower_noise_multiplier, float jet_total_noise_multiplier, float jet_min_ET_MeV); static StatusCode BuildJet(const xAOD::JGTowerContainer*towers, TString seedname, TString jetname, float jet_size, std::vector noise, float jet_tower_noise_multiplier, float jet_total_noise_multiplier, float jet_min_ET_MeV, bool m_saveSeeds = false); static StatusCode BuildRoundJet(const xAOD::JGTowerContainer*towers, TString seedname, TString jetname, float jet_size, std::vector noise, float jet_tower_noise_multiplier, float jet_total_noise_multiplier, float jet_min_ET_MeV, bool m_saveSeeds = false); - + static StatusCode BuildgBlockJets(const xAOD::JGTowerContainer* blocks); }; #endif diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JetAlg.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JetAlg.cxx index 1be9cc48f13..2cec19678e1 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JetAlg.cxx +++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JetAlg.cxx @@ -530,3 +530,104 @@ StatusCode JetAlg::BuildRoundJet(const xAOD::JGTowerContainer*towers, TString se return StatusCode::SUCCESS; } +StatusCode JetAlg::BuildgBlocksJets(const xAOD::JGTowerContainer* gBs const ){ + + std::vector> gbJets; + + std::vector max_pt(6,0.0); // One entry for each eta slice + std::vector sec_pt(6,0.0); + std::vector max_index(6,0); + std::vector sec_index(6,0); + + for(unsigned int b = 0; b < gBs->size(); b++){ + const xAOD::JGTower* block = gBs->at(b); + + float eta = block->eta(); + float pt = block->pt(); + + // fpga_a + if(eta > -2.5 && eta < -1.25){ + if(pt>max_pt.at(0)){ + max_pt.at(0) = pt; + max_index.at(0) = b; + } + else if(pt>sec_pt.at(0)){ + sec_pt.at(0) = pt; + sec_index.at(0) = b; + } + } + if(eta > -1.25 && eta < 0){ + if(pt>max_pt.at(1)){ + max_pt.at(1) = pt; + max_index.at(1) = b; + } + else if(pt>sec_pt.at(1)){ + sec_pt.at(1) = pt; + sec_index.at(1) = b; + } + } + // fpga_b + if(eta > 0 && eta < 1.25){ + if(pt>max_pt.at(2)){ + max_pt.at(2) = pt; + max_index.at(2) = b; + } + else if(pt>sec_pt.at(2)){ + sec_pt.at(2) = pt; + sec_index.at(2) = b; + } + } + if(eta > 1.25 && eta < 2.5){ + if(pt>max_pt.at(3)){ + max_pt.at(3) = pt; + max_index.at(3) = b; + } + else if(pt>sec_pt.at(3)){ + sec_pt.at(3) = pt; + sec_index.at(3) = b; + } + } + // fpga_c + if(eta >= 2.5){ + if(pt>max_pt.at(4)){ + max_pt.at(4) = pt; + max_index.at(4) = b; + } + else if(pt>sec_pt.at(4)){ + sec_pt.at(4) = pt; + sec_index.at(4) = b; + } + } + if(eta <= -2.5){ + if(pt>max_pt.at(5)){ + max_pt.at(5) = pt; + max_index.at(5) = b; + } + else if(pt>sec_pt.at(5)){ + sec_pt.at(5) = pt; + sec_index.at(5) = b; + } + } + } + + for(int i=0; iat(i_max)->eta(); + phi_max = gBs->at(i_max)->phi(); + et_max = gBs->at(i_max)->et(); + + eta_sec = gBs->at(i_sec)->eta(); + phi_sec = gBs->at(i_sec)->phi(); + et_sec = gBs->at(i_sec)->et(); + + std::shared_ptr gbJ_max = std::make_shared(eta_max, phi_max, et_max); + std::shared_ptr gbJ_sec = std::make_shared(eta_sec, phi_sec, et_sec); + + gbJets.push_back(gbJ_max); + gbJets.push_back(gbJ_sec); + } + + return StatusCode::SUCCESS; +} -- GitLab