diff --git a/DetectorDescription/IdDictParser/data/IdDictCalorimeter_L1Onl.xml b/DetectorDescription/IdDictParser/data/IdDictCalorimeter_L1Onl.xml
index 4f958d8b196c4ab6ea287f306eb90ac2bf593aea..3220eba2110d31e6ac11ac9194243b785e6c2e52 100644
--- a/DetectorDescription/IdDictParser/data/IdDictCalorimeter_L1Onl.xml
+++ b/DetectorDescription/IdDictParser/data/IdDictCalorimeter_L1Onl.xml
@@ -961,14 +961,14 @@
-
+
-
+
diff --git a/LArCalorimeter/LArROD/src/LArSuperCellBuilderDriver.cxx b/LArCalorimeter/LArROD/src/LArSuperCellBuilderDriver.cxx
index 6998c94aa8554c602f02ac44099b2e85c047b7f9..f2d7921346a46eec8e7b64cb2f5209f220e1b188 100755
--- a/LArCalorimeter/LArROD/src/LArSuperCellBuilderDriver.cxx
+++ b/LArCalorimeter/LArROD/src/LArSuperCellBuilderDriver.cxx
@@ -52,8 +52,8 @@ LArSuperCellBuilderDriver::LArSuperCellBuilderDriver (const std::string& name,
declareProperty("BuildDiscChannel", m_buildDiscChannel=false);
declareProperty("DefaultShiftTimeSample", m_defaultShiftTimeSamples=0);
declareProperty("BCID_Iter", m_bcs=2);
- declareProperty("bCIDLowLim", m_bcidLowLim={8,-2,-8});
- declareProperty("bCIDUpLim", m_bcidUpLim={-8,2,8});
+ declareProperty("bCIDLowLim", m_bcidLowLim={8,-8,-8});
+ declareProperty("bCIDUpLim", m_bcidUpLim={-8,8,16});
declareProperty("bCIDbands", m_bcidBands={-1e4,0,10,1e4});
}
diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTower.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTower.h
index 6f781e49cd79cb3a0739434aa1eb9a7af41c8dc4..35acd0d7a87b03f83751b5955ffa06e618a99835 100644
--- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTower.h
+++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTower.h
@@ -21,7 +21,7 @@
#include
#include
#include
-
+#include
class JGTower{
public:
@@ -60,4 +60,16 @@ bool inBox(float eta1, float eta2, float deta, float phi1, float phi2, float dph
bool withinRadius(float eta1, float eta2, float phi1, float phi2, float dR, bool acceptEqual=false);
float deltaPhi(float phi1, float phi2);
+class TowerHelper{
+
+ public:
+ //constructor
+ TowerHelper(std::vector& h_inputbins);
+ //destructor
+ virtual ~TowerHelper();
+
+ std::vector h_bins;
+ int iEta(float eta);
+ int iPhi(float eta, float phi);
+};
#endif
diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerMaker.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerMaker.h
index 9005d6be96a16cc33c6b765abf7aff67afa8f7f8..3645af20cdb30a9b72c75e2ab719676bccb4cd80 100644
--- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerMaker.h
+++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerMaker.h
@@ -55,6 +55,7 @@ class JGTowerMaker: public ::AthAlgorithm {
const CaloCell_ID* m_ccIdHelper;
bool m_useSCQuality;
bool m_useAllCalo;
+ bool m_useAllRun2TT;
bool m_TileMapped;
std::string m_scType;
uint16_t m_scQuality;
diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h
index e2ccd7d12a78c186d01c8145a06639b999a41de4..f09911dd7877fd2f5777c4bfa5eb2ec11e71dec4 100644
--- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h
+++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerReader.h
@@ -30,7 +30,7 @@
#include "TH2.h"
#include "TrigT1CaloFexSim/JetAlg.h"
#include "TrigT1CaloFexSim/METAlg.h"
-
+#include "TrigT1CaloFexSim/JGTower.h"
#include "string.h"
std::vector splitString(std::string parentString, std::string sep, bool stripEmpty=false);
class JGTowerReader: public ::AthAlgorithm {
@@ -175,6 +175,8 @@ class JGTowerReader: public ::AthAlgorithm {
std::map m_h2Name;
int m_jTowerHashMax;
int m_gTowerHashMax;
+ std::shared_ptr jT_helper;
+ std::shared_ptr gT_helper;
unsigned int m_eventCount = 0;
SG::AuxElement::Accessor* acc_rho = new SG::AuxElement::Accessor("Rho_avg");
diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/python/TrigT1CaloFexSimConfig.py b/Trigger/TrigT1/TrigT1CaloFexSim/python/TrigT1CaloFexSimConfig.py
index ddc55e29d414a19e00ae4c0da3a9d85ed6280faf..48b883f7838877d2fde5dfa1a8c7ae1c047967af 100644
--- a/Trigger/TrigT1/TrigT1CaloFexSim/python/TrigT1CaloFexSimConfig.py
+++ b/Trigger/TrigT1/TrigT1CaloFexSim/python/TrigT1CaloFexSimConfig.py
@@ -6,6 +6,7 @@ def createJGTowerMaker( SuperCellContainer="SCell", ApplySCQual=True, SCBitMask=
towerMaker = JGTowerMaker( useSCQuality = ApplySCQual,
useAllCalo = False,
+ useAllRun2TT = True,
SuperCellType = SuperCellContainer,
SuperCellQuality = SCBitMask )
@@ -27,7 +28,8 @@ def createJGTowerReader( SuperCellType = "SCell", **kwargs ) :
towerReader = JGTowerReader( outputNoise = False,
debugJetAlg = False,
SuperCellType = SuperCellType,
- noise_file = "Run3L1CaloSimulation/Noise/noise_r10684_MapFixed.root",
+ ## noise_file = "Run3L1CaloSimulation/Noise/noise_r10684_MapFixed.root",
+ noise_file = "",
plotSeeds = False,
dumpTowerInfo = False,
diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx
index cb44f0e1497b68b4f89ce73ca9a93db2ac1581ce..1d4101f68f363bd3b71772392b6ba4264809207c 100644
--- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx
+++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTower.cxx
@@ -53,3 +53,50 @@ float deltaPhi(float phi1,float phi2){
//https://root.cern.ch/doc/master/TLorentzVector_8h_source.html#l00456
return TVector2::Phi_mpi_pi(phi1-phi2);
}
+
+//The helpers
+TowerHelper::TowerHelper(std::vector & h_inputs){
+
+ TH2F*h_in;
+ for(auto& h:h_inputs){
+ h_in = (TH2F*) h->Clone("h_in");
+ h_bins.push_back(h_in);
+ }
+
+}
+
+TowerHelper::~TowerHelper(){
+ for(auto& h:h_bins){
+ h->Delete();
+ }
+}
+
+int TowerHelper::iEta(float eta){
+ int x=0;
+ for(auto& h:h_bins){
+ int test = h->GetXaxis()->FindBin(eta);
+ int nbin = ((TH1F*)h->ProjectionX())->GetSize()-2;
+
+ if(test==0) continue;
+ else if(testGetXaxis()->FindBin(eta);
+ int nbin = ((TH1F*)h->ProjectionX())->GetSize()-2;
+
+ if(test==0 || test>nbin) continue;
+ y=h->GetYaxis()->FindBin(phi);
+ }
+ return y;
+}
+
diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx
index f5fe56e9d38c5275b95bcb5e79f2a4aa5e45655c..7c87b79d6d0ef0fa382158818c4f5692c45a3a73 100644
--- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx
+++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx
@@ -27,6 +27,7 @@ JGTowerMaker::JGTowerMaker( const std::string& name, ISvcLocator* pSvcLocator )
declareProperty("useSCQuality",m_useSCQuality=true);
declareProperty("useAllCalo",m_useAllCalo=false);
+ declareProperty("useAllRun2TT",m_useAllCalo=false);
declareProperty("SuperCellType",m_scType="SCell");
declareProperty("SuperCellQuality",m_scQuality=0x200);
}
@@ -92,40 +93,53 @@ StatusCode JGTowerMaker::FexAlg(const std::vector>& jgT
std::vector jgTowerSCIndex = jgt->GetSCIndices();
//Filling tower energy with SC
-
- for(unsigned i=0; icell_id(jgTowerSCIndex.at(i));
- const IdentifierHash sc_hash = m_scid->calo_cell_hash(scid);
- CaloCell* scell = (CaloCell*) scells->findCell(sc_hash);
- if(scell==nullptr)continue;
- if(m_useSCQuality && !( scell->provenance() & m_scQuality ) ) continue;
- float scell_et = scell->et();
- jgEt += scell_et;
- lar_et+=scell_et;
- }
-
- if(jgt->sampling()==1){
- if(m_useAllCalo){
- for(unsigned cell_hs=0 ; cell_hsfindCell(jgTowerTileIndex.at(cell_hs));
- jgEt+=cell->e()*cell->sinTh();
- tile_et+=cell->e()*cell->sinTh();
- }
- }
+ if(!m_useAllRun2TT){
+ for(unsigned i=0; icell_id(jgTowerSCIndex.at(i));
+ const IdentifierHash sc_hash = m_scid->calo_cell_hash(scid);
+ CaloCell* scell = (CaloCell*) scells->findCell(sc_hash);
+ if(scell==nullptr)continue;
+ if(m_useSCQuality && !( scell->provenance() & m_scQuality ) ) continue;
+ float scell_et = scell->et();
+ jgEt += scell_et;
+ lar_et+=scell_et;
+ }
- else{
+ if(jgt->sampling()==1){
+ if(m_useAllCalo){
+ for(unsigned cell_hs=0 ; cell_hsfindCell(jgTowerTileIndex.at(cell_hs));
+ jgEt+=cell->e()*cell->sinTh();
+ tile_et+=cell->e()*cell->sinTh();
+ }
+ }
+
+ else{
+
+ for(unsigned tt_hs=0 ; tt_hssize(); tt_hs++){
+ const xAOD::TriggerTower * tt = TTs->at(tt_hs);
+ if(tt->sampling()!=1 || fabs(tt->eta())>1.5) continue; // Tile raneg upto 1.5 with sampling == 1
+ float ttPhi = TVector2::Phi_mpi_pi(tt->phi() );//converted [0,2pi] -> [-pi,pi]
+ if(!inBox(jgt->Eta(),tt->eta(),jgt->dEta()/2,jgt->Phi(),ttPhi,jgt->dPhi()/2)) continue;
+ float cpET = 500*tt->cpET();
+ jgEt+=cpET;
+ tile_et+=cpET;
+ }
+ }
+ }
+ }
+ else{
for(unsigned tt_hs=0 ; tt_hssize(); tt_hs++){
const xAOD::TriggerTower * tt = TTs->at(tt_hs);
- if(tt->sampling()!=1 || fabs(tt->eta())>1.5) continue; // Tile raneg upto 1.5 with sampling == 1
- float ttPhi = TVector2::Phi_mpi_pi(tt->phi() );//converted [0,2pi] -> [-pi,pi]
+ if(tt->sampling()!= jgt->sampling() && fabs(jgt->Eta())<3.1) continue; // Tile raneg upto 1.5 with sampling == 1
+ float ttPhi = TVector2::Phi_mpi_pi(tt->phi() );//converted [0,2pi] -> [-pi,pi]
if(!inBox(jgt->Eta(),tt->eta(),jgt->dEta()/2,jgt->Phi(),ttPhi,jgt->dPhi()/2)) continue;
float cpET = 500*tt->cpET();
- jgEt+=cpET;
+ jgEt+=cpET;
tile_et+=cpET;
}
-
- }
+
}
xAOD::JGTower* m_trigTower = new xAOD::JGTower();
jgTContainer->push_back(m_trigTower);
@@ -190,7 +204,7 @@ StatusCode JGTowerMaker::ForwardMapping(){
const CaloDetDescrElement* dde = m_sem_mgr->get_element(scid);
float scEta = dde->eta_raw();
float scPhi = dde->phi_raw();
- if(fabs(scEta)<3.2) continue;
+ if(fabs(scEta)<3.1) continue;
float scDEta = dde->deta();
float scDPhi = dde->dphi();
diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx
index 9386ede4126c43e64c88cf485956c0bb8026686e..9ce0347195ed01a0da6aff72b549f4e5cd7accd0 100644
--- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx
+++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx
@@ -121,6 +121,7 @@ JGTowerReader::~JGTowerReader() {
jL1Jets.clear();
jJet_L1Jets.clear();
gL1Jets.clear();
+
}
@@ -151,10 +152,39 @@ StatusCode JGTowerReader::initialize() {
if(m_makeJetsFromMap) {
CHECK( ReadTowerMap() );
}
+
acc_rho = new SG::AuxElement::Accessor("Rho");
acc_mht = new SG::AuxElement::Accessor("MHT");
acc_mst = new SG::AuxElement::Accessor("MST");
+ //Here is to set up the tower helper which returns the tower eta/phi indices
+ //Define the histograms for each region
+ std::vector hs_jT;
+ TH2F* j_h1=new TH2F("j_h1","j_h1",1,-3.2,-3.1,32,-TMath::Pi(),TMath::Pi());
+ TH2F* j_h2=new TH2F("j_h2","j_h2",3,-3.1,-2.5,32,-TMath::Pi(),TMath::Pi());
+ TH2F* j_h3=new TH2F("j_h3","j_h3",50,-2.5, 2.5,64,-TMath::Pi(),TMath::Pi());
+ TH2F* j_h4=new TH2F("j_h4","j_h4",3,2.5,3.1,32,-TMath::Pi(),TMath::Pi());
+ TH2F* j_h5=new TH2F("j_h5","j_h5",1,3.1,3.2,32,-TMath::Pi(),TMath::Pi());
+ hs_jT.push_back(j_h1);
+ hs_jT.push_back(j_h2);
+ hs_jT.push_back(j_h3);
+ hs_jT.push_back(j_h4);
+ hs_jT.push_back(j_h5);
+ jT_helper = std::make_shared(hs_jT);
+
+
+ std::vector hs_gT;
+ double fgT_Eta_p[5] = {3.2, 3.5, 4.0, 4.45,4.9};
+ double fgT_Eta_n[5] = {-4.9, -4.45, -4.0, -3.5,-3.2};
+ double gT_barrel[35]={-3.2,-3.1,-2.9,-2.7,-2.5,-2.4,-2.2,-2.0,-1.8,-1.6,-1.4,-1.2,-1.0,-0.8,-0.6,-0.4,-0.2,0.0,
+ 0.2,0.4,0.6,0.8,1.0,1.2,1.4,1.6,1.8,2.0,2.2,2.4,2.5,2.7,2.9,3.1,3.2};
+ TH2F* g_h1=new TH2F("g_h1","g_h1",4 , fgT_Eta_p,17,-TMath::Pi(),TMath::Pi());
+ TH2F* g_h2=new TH2F("g_h2","g_h2",34, gT_barrel,32,-TMath::Pi(),TMath::Pi());
+ TH2F* g_h3=new TH2F("g_h3","g_h3",4 , fgT_Eta_n,17,-TMath::Pi(),TMath::Pi());
+ hs_gT.push_back(g_h1);
+ hs_gT.push_back(g_h2);
+ hs_gT.push_back(g_h3);
+ gT_helper = std::make_shared(hs_gT);
return StatusCode::SUCCESS;
}
@@ -196,7 +226,7 @@ StatusCode JGTowerReader::execute() {
if(jT_noise.size()==0){
ATH_MSG_INFO (" Failed to find noise file, setting jTower noise manually ");
for( const auto &jT : *jTowers){
- if(jT->sampling()==0) jT_noise.push_back(450);
+ if(jT->sampling()==0) jT_noise.push_back(430);
else if(jT->sampling()==1) jT_noise.push_back(2400);
else jT_noise.push_back(2000);
}
@@ -320,6 +350,48 @@ StatusCode JGTowerReader::execute() {
CHECK( CheckTowerMap(jTowers) );
}
+ if(m_outputNoise){
+
+ for(const auto &jT : *jTowers){
+ //===============Test Block================
+ int ieta = jT_helper->iEta(jT->eta());
+ int iphi = jT_helper->iPhi(jT->eta(), jT->phi());
+ ATH_MSG_DEBUG(jT->eta()<<"("<phi()<<"("<et())<0.1) continue;
+ CHECK(HistBookFill(Form("jTNoise/jT%d",jT->Id()), 5000, -1500, 3500, jT->et(),1));
+ if(jT->sampling()==0){
+ if(fabs(jT->eta())<2.5) CHECK(HistBookFill("jTNoise_regions/region0_em", 5000, -1500, 3500, jT->et(),1));
+ else if(fabs(jT->eta())<3.1) CHECK(HistBookFill("jTNoise_regions/region1_em", 5000, -1500, 3500, jT->et(),1));
+ else if(fabs(jT->eta())<3.2) CHECK(HistBookFill("jTNoise_regions/region2_em", 5000, -1500, 3500, jT->et(),1));
+ }
+ else if(jT->sampling()==1){
+ if(fabs(jT->eta())<2.5) CHECK(HistBookFill("jTNoise_regions/region0_had", 5000, -1500, 3500, jT->et(),1));
+ else if(fabs(jT->eta())<3.1) CHECK(HistBookFill("jTNoise_regions/region1_had", 5000, -1500, 3500, jT->et(),1));
+ else if(fabs(jT->eta())<3.2) CHECK(HistBookFill("jTNoise_regions/region2_had", 5000, -1500, 3500, jT->et(),1));
+ }
+
+ else CHECK(HistBookFill("jTNoise_regions/region3", 5000, -1500, 3500, jT->et(),1));
+ }
+
+ for(const auto &gT : *gTowers){
+ if(fabs(gT->et())<0.1) continue;
+ CHECK(HistBookFill(Form("gTNoise/gT%d",gT->Id()), 7000, -1500, 5500, gT->et(),1));
+ if(gT->sampling()==0){
+ if(fabs(gT->eta())<2.4) CHECK(HistBookFill("gTNoise_regions/region0_em", 7000, -1500, 5500, gT->et(),1));
+ else if(fabs(gT->eta())<2.5) CHECK(HistBookFill("gTNoise_regions/region1_em", 7000, -1500, 5500, gT->et(),1));
+ else if(fabs(gT->eta())<3.1) CHECK(HistBookFill("gTNoise_regions/region2_em", 7000, -1500, 5500, gT->et(),1));
+ else if(fabs(gT->eta())<3.2) CHECK(HistBookFill("gTNoise_regions/region3_em", 7000, -1500, 5500, gT->et(),1));
+ }
+ else if(gT->sampling()==1){
+ if(fabs(gT->eta())<2.4) CHECK(HistBookFill("gTNoise_regions/region0_had", 7000, -1500, 5500, gT->et(),1));
+ else if(fabs(gT->eta())<2.5) CHECK(HistBookFill("gTNoise_regions/region1_had", 7000, -1500, 5500, gT->et(),1));
+ else if(fabs(gT->eta())<3.1) CHECK(HistBookFill("gTNoise_regions/region2_had", 7000, -1500, 5500, gT->et(),1));
+ else if(fabs(gT->eta())<3.2) CHECK(HistBookFill("gTNoise_regions/region3_had", 7000, -1500, 5500, gT->et(),1));
+ }
+ else CHECK(HistBookFill("gTNoise_regions/region4", 7000, -1500, 5500, gT->et(),1));
+ }
+
+ }
ATH_MSG_DEBUG ("About to call JFexAlg");
CHECK(JFexAlg(jTowers)); // all the functions for JFex shall be executed here
ATH_MSG_DEBUG ("About to call GFexAlg");
@@ -789,9 +861,20 @@ StatusCode JGTowerReader::ProcessObjects(){
StatusCode JGTowerReader::HistBookFill(const TString name, Int_t nbinsx, const Double_t* xbins, float xvalue,float wei){
if(std::find(hists.begin(),hists.end(),name)==hists.end()) {
- TH1F*h = new TH1F( name, name, nbinsx, xbins);
- h->Sumw2();
- CHECK( histSvc->regHist(Form("/EXPERT/%s/%s", this->name().c_str(), name.Data()),h));
+ TH1F*h;
+ const std::string name_str(name.Data());
+ if(name_str.find("/")!=std::string::npos){
+ TString name1= name_str.substr(0, name_str.find("/"));
+ TString name2= name_str.substr(name_str.find("/")+1,name_str.length()-1);
+ h = new TH1F( name2, name2, nbinsx, xbins);
+ h->Sumw2();
+ CHECK( histSvc->regHist(Form("/EXPERT/%s/%s/%s", this->name().c_str(),name1.Data(), name2.Data()),h));
+ }
+ else{
+ h = new TH1F( name, name, nbinsx, xbins);
+ h->Sumw2();
+ CHECK( histSvc->regHist(Form("/EXPERT/%s/%s", this->name().c_str(), name.Data()),h));
+ }
m_hName[name]=h;
m_hName[name]->Fill(xvalue,wei);
hists.push_back(name);
@@ -803,9 +886,21 @@ StatusCode JGTowerReader::HistBookFill(const TString name, Int_t nbinsx, const D
StatusCode JGTowerReader::HistBookFill(const TString name, Int_t nbinsx, Double_t xbin_down, Double_t xbin_up, float xvalue,float wei){
if(std::find(hists.begin(),hists.end(),name)==hists.end()) {
- TH1F*h=new TH1F( name, name, nbinsx, xbin_down,xbin_up);
- h->Sumw2();
- CHECK( histSvc->regHist(Form("/EXPERT/%s/%s",this->name().c_str(), name.Data()),h));
+ TH1F*h;
+ const std::string name_str(name.Data());
+ if(name_str.find("/")!=std::string::npos){
+ TString name1= name_str.substr(0, name_str.find("/"));
+ TString name2= name_str.substr(name_str.find("/")+1,name_str.length()-1);
+ h = new TH1F( name2, name2, nbinsx, xbin_down, xbin_up);
+ h->Sumw2();
+ CHECK( histSvc->regHist(Form("/EXPERT/%s/%s/%s", this->name().c_str(),name1.Data(), name2.Data()),h));
+ }
+ else{
+ h = new TH1F( name, name, nbinsx, xbin_down, xbin_up);
+ h->Sumw2();
+ CHECK( histSvc->regHist(Form("/EXPERT/%s/%s", this->name().c_str(), name.Data()),h));
+ }
+
m_hName[name]=h;
m_hName[name]->Fill(xvalue,wei);
hists.push_back(name);