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);