diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerMaker.h b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerMaker.h index 8ddbe4f4fa8037b9e7f1546985f216c750818130..9a4ce3a05e137726f93df734706668f322814e61 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerMaker.h +++ b/Trigger/TrigT1/TrigT1CaloFexSim/TrigT1CaloFexSim/JGTowerMaker.h @@ -58,6 +58,9 @@ class JGTowerMaker: public ::AthAlgorithm { bool m_useAllRun2TT; bool m_EmulateSC; bool m_TileMapped; + float m_minSCETp; + float m_maxSCETm; + float m_minTowerEt; std::string m_scType; uint16_t m_scQuality; bool JMatched; diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/python/L1SimulationControlFlags.py b/Trigger/TrigT1/TrigT1CaloFexSim/python/L1SimulationControlFlags.py index 3aae303adddffea92e50b88d91fb0ef451f33e02..088beb2057fd26f24cfc39d0818171a2cc414f3e 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/python/L1SimulationControlFlags.py +++ b/Trigger/TrigT1/TrigT1CaloFexSim/python/L1SimulationControlFlags.py @@ -47,6 +47,41 @@ class QualBitMask(JobProperty): StoredValue = 0x200 _caloflags.append(QualBitMask) +class minTowerET(JobProperty): + """ + If Tower ET < min then set tower ET = 0 + """ + statusOn = True + allowedType = ['float'] + StoredValue = -9e9 +_caloflags.append(minTowerET) + +class minSCETp(JobProperty): + """ + if ET > 0, ET > minSCETp is required to build towers + """ + statusOn = True + allowedType = ['float'] + StoredValue = -1 +_caloflags.append(minSCETp) + +class maxSCETm(JobProperty): + """ + if ET < 0, ET < maxSCETm is required to build towers + """ + statusOn = True + allowedType = ['float'] + StoredValue = 1 +_caloflags.append(maxSCETm) + +class DataNoPedestal(JobProperty): + """ + Disable pedestal related features for data, since it crashes in some cases + """ + statusOn = True + allowType = ['bool'] + StoredValue = False +_caloflags.append(DataNoPedestal) class ComputeEFexClusters(JobProperty): """ ComputeClusters """ diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/python/L1SimulationSequence.py b/Trigger/TrigT1/TrigT1CaloFexSim/python/L1SimulationSequence.py index ca95be542a20adaa9656d8fd64d37a32ad2d54e1..0ca39905c746d3f91882d7ed0474624fdcf36169 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/python/L1SimulationSequence.py +++ b/Trigger/TrigT1/TrigT1CaloFexSim/python/L1SimulationSequence.py @@ -80,7 +80,8 @@ def setupRun3L1CaloSimulationSequence(skipCTPEmulation = False, useAlgSequence = include('TrigT1CaloByteStream/ReadLVL1CaloBSRun2_jobOptions.py') #python options for supercells - include('LArROD/LArConfigureCablingSCFolder.py') + if(simflags.Calo.DataNoPedestal()==False): + include('LArROD/LArConfigureCablingSCFolder.py') ## CaloCells need to be created from LAr and Tile data when running on raw data ## (when running on ESD, CaloCells should be taken from the file) @@ -122,7 +123,16 @@ def setupRun3L1CaloSimulationSequence(skipCTPEmulation = False, useAlgSequence = from TrigT1CaloFexSim.TrigT1CaloFexSimConfig import createSuperCellBCIDAlg l1simAlgSeq += createSuperCellBCIDAlg(SCellContainerIn="SCell",SCellContainerOut="SCellBCID") SCIn="SCellBCID" - elif simflags.Calo.SCellType() == "Emulated": + elif simflags.Calo.SCellType() == "Emulated" and simflags.Calo.DataNoPedestal() == True: + # If the pedestal correction is broken, then disable the things + from AthenaCommon.AppMgr import ServiceMgr as svcMgr + from CaloTools.CaloNoiseToolDefault import CaloNoiseToolDefault + theNoiseTool=CaloNoiseToolDefault() + svcMgr.ToolSvc += theNoiseTool + from LArL1Sim.LArL1SimConf import LArSCSimpleMaker + l1simAlgSeq += LArSCSimpleMaker( SCellContainer="SimpleSCell",CaloNoiseTool=theNoiseTool, addBCID = False) + SCIn="SimpleSCell" + elif simflags.Calo.SCellType() == "Emulated" and simflags.Calo.DataNoPedestal() == False: # Supercells are reconstructed from the ET sum of the constituent calo cells # This sets simflags.Calo.ApplySCQual to False from AthenaCommon.AppMgr import ServiceMgr as svcMgr @@ -150,7 +160,11 @@ def setupRun3L1CaloSimulationSequence(skipCTPEmulation = False, useAlgSequence = useAllCalo = simflags.Calo.UseAllCalo(), SuperCellType = SCIn, EmulateSuperCellTiming=False, - SuperCellQuality = simflags.Calo.QualBitMask() ) + SuperCellQuality = simflags.Calo.QualBitMask(), + minSCETp = simflags.Calo.minSCETp(), + maxSCETm = simflags.Calo.maxSCETm(), + minTowerET = simflags.Calo.minTowerET() + ) # Schedule fex algorithms diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx index c041a41340c007ba2be31aa61f9284695b24c0f7..e9adb1f8ca237cebccbe941fbe0d11ce266c681a 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx +++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerMaker.cxx @@ -31,6 +31,9 @@ JGTowerMaker::JGTowerMaker( const std::string& name, ISvcLocator* pSvcLocator ) declareProperty("SuperCellType",m_scType="SCell"); declareProperty("SuperCellQuality",m_scQuality=0x200); declareProperty("EmulateSuperCellTiming",m_EmulateSC=false); + declareProperty("minSCETp", m_minSCETp=-1);//initialize to -1. To require positive ET > 125 MeV, set to 125 + declareProperty("maxSCETm", m_maxSCETm=1);//initialize to 1. To require negative ET < -125 MeV, set to -125 + declareProperty("minTowerET",m_minTowerEt=-9e9); } @@ -109,6 +112,8 @@ StatusCode JGTowerMaker::FexAlg(const std::vector<std::shared_ptr<JGTower>>& jgT } else{ if(m_useSCQuality && !( scell->provenance() & m_scQuality ) ) continue; + if(scell_et>0 && scell_et<m_minSCETp)continue;//allows us to implement supercell ET cuts when building towers + if(scell_et<0 && scell_et>m_maxSCETm)continue; } jgEt += scell_et; lar_et+=scell_et; @@ -150,6 +155,7 @@ StatusCode JGTowerMaker::FexAlg(const std::vector<std::shared_ptr<JGTower>>& jgT } } + if(jgEt<m_minTowerEt)jgEt=0; xAOD::JGTower* m_trigTower = new xAOD::JGTower(); jgTContainer->push_back(m_trigTower); m_trigTower->initialize(hs,jgt->Eta(),jgt->Phi()); diff --git a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx index f8adf7dc1d05c8fc83f70ee926a7e86ff99d0cf9..7f0766efd14b97455ce2279cf8eeac63fff7ca6f 100644 --- a/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx +++ b/Trigger/TrigT1/TrigT1CaloFexSim/src/JGTowerReader.cxx @@ -80,7 +80,6 @@ histSvc("THistSvc",name){ declareProperty("jJetRound_LargeR_r", m_jJetRound_LargeR_r=0.8); declareProperty("jJetRound_LargeR_seed_min_ET_MeV", m_jJetRound_LargeR_seed_min_ET_MeV = 2000.0); declareProperty("jJetRound_LargeR_jet_min_ET_MeV", m_jJetRound_LargeR_jet_min_ET_MeV = 2000.0); - declareProperty("makeJetsFromMap", m_makeJetsFromMap = false); declareProperty("towerMap", m_towerMap = ""); @@ -108,7 +107,7 @@ histSvc("THistSvc",name){ declareProperty("gFEX_Rho_useNegTowers",m_gFEX_Rho_useNegTowers=true); declareProperty("gFEX_OnlyPosRho", m_gFEX_OnlyPosRho=false); declareProperty("gFEX_pTcone_cut", m_gFEX_pTcone_cut=25); //cone threshold for Jets without Jets: declared in GeV - + declareProperty("jXERHO_correction_file" , m_jXERHO_correction_file="Run3L1CaloSimulation/Noise/jTowerCorrection.20200510.r11881.root"); //correction file for jXERHO declareProperty("jXERHO_fixed_noise_cut" , m_jXERHO_fixed_noise_cut=0.0); declareProperty("jXERHO_rho_up_threshold" , m_jXERHO_rho_up_threshold=1000.0); @@ -383,9 +382,12 @@ StatusCode JGTowerReader::BuildBlocksFromTowers(std::vector<TowerObject::Block>& TowerObject::TowerGrid grid = TowerObject::TowerGrid(towers); for(const xAOD::JGTower* seed: towers){ + float eta = std::abs(seed->eta()); + int r = blockRows; int c = blockCols; + if(eta>2.9) {r = 1; c = 1;}//The towers beyond eta = 2.9 get much larger and more complicated. Make the blocks a single tower... int seedIndex = std::find(towers.begin(), towers.end(), seed) - towers.begin(); - std::vector<int> neighbors = grid.neighbors(*seed, blockRows, blockCols); + std::vector<int> neighbors = grid.neighbors(*seed, r, c); float seed_Et = seed->et(); if(!useNegTowers && seed->et() < 0)continue; double block_area(0.0);