Skip to content
Snippets Groups Projects
Commit 2b240313 authored by John Derek Chapman's avatar John Derek Chapman
Browse files

Merge branch '21.3_FixMapping' into '21.3'

the fix on gTower mapping

See merge request atlas/athena!21433
parents 956fd9df 5a268510
No related branches found
No related tags found
No related merge requests found
......@@ -999,19 +999,35 @@
eta0="0.0" deta="0.2" phi0="0.0" dphi="0.2">
<reference subregion="GTower" />
<range field="GTregion" value="0" />
<range field="GTeta" minvalue="0" maxvalue="15" />
<range field="GTeta" minvalue="0" maxvalue="11" />
<range field="GTphi" minvalue="0" maxvalue="31" wraparound="TRUE" />
</region>
<!-- FCAL region, NEEDS WORK/FIXING -\-> -->
<!-- <region group="Reg_GTower" name="GTower_1"
eta0="3.2" deta="0.425" phi0="0.0" dphi="0.4" >
<!-- Up to eta=2.5 -\-> -->
<region group="Reg_GTower" name="GTower_1"
eta0="2.4" deta="0.1" phi0="0.0" dphi="0.2" >
<reference subregion="GTower" />
<range field="GTregion" value="1" />
<range field="GTeta" minvalue="0" maxvalue="3"/>
<range field="GTphi" minvalue="0" maxvalue="15" wraparound="TRUE" />
<range field="GTeta" minvalue="0" maxvalue="0"/>
<range field="GTphi" minvalue="0" maxvalue="31" wraparound="TRUE" />
</region>
-->
<!-- Up to eta=3.1 -\-> -->
<region group="Reg_GTower" name="GTower_2"
eta0="2.5" deta="0.2" phi0="0.0" dphi="0.2" >
<reference subregion="GTower" />
<range field="GTregion" value="2" />
<range field="GTeta" minvalue="0" maxvalue="2"/>
<range field="GTphi" minvalue="0" maxvalue="31" wraparound="TRUE" />
</region>
<!-- Up to eta=3.2 -\-> -->
<region group="Reg_GTower" name="GTower_3"
eta0="3.1" deta="0.1" phi0="0.0" dphi="0.2" >
<reference subregion="GTower" />
<range field="GTregion" value="3" />
<range field="GTeta" minvalue="0" maxvalue="0"/>
<range field="GTphi" minvalue="0" maxvalue="31" wraparound="TRUE" />
</region>
</IdDictionary>
......@@ -26,22 +26,26 @@ class JGTowerMaker: public ::AthAlgorithm {
JGTowerMaker( const std::string& name, ISvcLocator* pSvcLocator );
virtual ~JGTowerMaker();
private:
virtual StatusCode initialize();
virtual StatusCode execute();
virtual StatusCode finalize();
virtual StatusCode FexAlg(std::vector<JGTower*> jgT, xAOD::JGTowerContainer*towerContainer);
virtual StatusCode FexAlg(const std::vector<std::shared_ptr<JGTower>>& jgT, xAOD::JGTowerContainer*towerContainer);
virtual StatusCode beginInputFile();
virtual StatusCode SCTowerMapping();
virtual StatusCode ForwardMapping();
virtual StatusCode TileMapping();
virtual StatusCode TileMapping();
std::vector<std::shared_ptr<JGTower>> m_jT;
std::vector<std::shared_ptr<JGTower>> m_gT;
GTowerSCMap *m_GMap = new GTowerSCMap();
JTowerSCMap *m_JMap = new JTowerSCMap();
std::vector<JGTower*> jT;
std::vector<JGTower*> gT;
GTowerSCMap *myGMap = new GTowerSCMap();
JTowerSCMap *myJMap = new JTowerSCMap();
private:
const DataHandle<CaloSuperCellDetDescrManager> m_sem_mgr;
// const DataHandle<CaloTTDescrManager> m_tt_mgr; //kept temporarily to use trigger tower id for for ID mapping in the futher
const CaloCell_SuperCell_ID* m_scid;
const JTower_ID* m_jTowerId;
......
......@@ -153,8 +153,8 @@ class JGTowerReader: public ::AthAlgorithm {
std::vector<JetAlg::L1Jet> jL1Jets;
std::vector<JetAlg::L1Jet> jJet_L1Jets;
std::vector<JetAlg::L1Jet> gL1Jets;
std::map<TString, TH1*> hName;
std::map<TString, TH2*> h2Name;
std::map<TString, TH1*> m_hName;
std::map<TString, TH2*> m_h2Name;
int m_jTowerHashMax;
int m_gTowerHashMax;
......
......@@ -33,8 +33,8 @@ JGTowerMaker::JGTowerMaker( const std::string& name, ISvcLocator* pSvcLocator )
JGTowerMaker::~JGTowerMaker() {
jT.clear();
gT.clear();
m_jT.clear();
m_gT.clear();
}
......@@ -63,7 +63,7 @@ StatusCode JGTowerMaker::finalize() {
return StatusCode::SUCCESS;
}
StatusCode JGTowerMaker::FexAlg(std::vector<JGTower*> jgT, xAOD::JGTowerContainer*jgTContainer){
StatusCode JGTowerMaker::FexAlg(const std::vector<std::shared_ptr<JGTower>>& jgT, xAOD::JGTowerContainer*jgTContainer){
const CaloCellContainer* scells = 0;
CHECK( evtStore()->retrieve( scells, m_scType.data()) );
......@@ -82,7 +82,7 @@ StatusCode JGTowerMaker::FexAlg(std::vector<JGTower*> jgT, xAOD::JGTowerContaine
for (unsigned hs=0;hs<jgT.size();++hs){
JGTower*jgt = jgT.at(hs);
std::shared_ptr<JGTower> jgt = jgT.at(hs);
float jgEt=0;
float lar_et=0;
float tile_et=0;
......@@ -155,8 +155,8 @@ StatusCode JGTowerMaker::execute() {
xAOD::JGTowerContainer* gTContainer = new xAOD::JGTowerContainer() ;
gTContainer->setStore(gTAuxContainer);
CHECK( FexAlg(jT,jTContainer));
CHECK( FexAlg(gT,gTContainer));
CHECK( FexAlg(m_jT,jTContainer));
CHECK( FexAlg(m_gT,gTContainer));
CHECK( evtStore()->record( gTContainer, "GTower" ) );
CHECK( evtStore()->record( gTAuxContainer, "GTowerAux." )) ;
......@@ -173,9 +173,9 @@ StatusCode JGTowerMaker::execute() {
StatusCode JGTowerMaker::ForwardMapping(){
unsigned sc_hashMax = m_scid-> calo_cell_hash_max();
// Forward supercells are jTowers
for(unsigned sc_hs=0;sc_hs<sc_hashMax;++sc_hs) {
const Identifier scid=m_scid->cell_id(sc_hs);
//const Identifier tid=m_tid->cell_id(scid);
if((m_scid->is_tile(scid)&&m_scid->sampling(scid)!=2)) continue; //skip all tile SCs
......@@ -187,19 +187,59 @@ StatusCode JGTowerMaker::ForwardMapping(){
const CaloDetDescrElement* dde = m_sem_mgr->get_element(scid);
// Very speical case being handle here. At the end of the barrel there is a constant-eta ring that has
// eta_raw=1.4 (which is the midpoint of the scell). These will be put into the g/jTower that starts at eta=1.4
float scEta = dde->eta_raw();
float scPhi = dde->phi_raw();
if(fabs(scEta)<3.2) continue;
float scDEta = dde->deta();
float scDPhi = dde->dphi();
JGTower*JGT = new JGTower(scEta,scDEta,scPhi,scDPhi);
std::shared_ptr<JGTower> JGT = std::make_shared<JGTower>(scEta,scDEta,scPhi,scDPhi);
JGT->SetSCIndices(sc_hs);
JGT->SetSampling(2);
jT.push_back(JGT);
gT.push_back(JGT);
m_jT.push_back(JGT);
}
//define gTowers geometry
float fgT_Etas[5] = {3.2, 3.5, 4.0, 4.45,4.9};
int nTowers = 17;
float fgT_dPhi = 2*TMath::Pi()/nTowers;
for(unsigned int iEta=0; iEta<4; iEta++){
float fgT_Eta = (fgT_Etas[iEta]+fgT_Etas[iEta+1])/2;
float fgT_dEta = fgT_Etas[iEta+1]-fgT_Etas[iEta];
for(int isign=1; isign>-2; isign=isign-2){
fgT_Eta = fgT_Eta*isign;
for(unsigned int iPhi = 0; iPhi< 17; iPhi++ ){
float fgT_Phi = iPhi*fgT_dPhi+fgT_dPhi/2;
if(fgT_Phi>TMath::Pi()) fgT_Phi = fgT_Phi-2*TMath::Pi();
//Allocate supercells into gTowers
std::shared_ptr<JGTower> JGT = std::make_shared<JGTower>(fgT_Eta,fgT_dEta,fgT_Phi,fgT_dPhi);
JGT->SetSampling(2);
for(unsigned sc_hs=0;sc_hs<sc_hashMax;++sc_hs) {
const Identifier scid=m_scid->cell_id(sc_hs);
if((m_scid->is_tile(scid)&&m_scid->sampling(scid)!=2)) continue; //skip all tile SCs
if(m_sem_mgr->get_element(scid)==nullptr) {
ATH_MSG_INFO("ERROR loading CaloDetDescrElement");
return StatusCode::FAILURE;
}
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(inBox(fgT_Eta,scEta,fgT_dEta/2,fgT_Phi,scPhi,fgT_dPhi/2) && isign*m_scid->pos_neg(scid) > 0){
JGT->SetSCIndices(sc_hs);
}
}
m_gT.push_back(JGT);
}
}
}
return StatusCode::SUCCESS;
......@@ -218,14 +258,14 @@ StatusCode JGTowerMaker::TileMapping(){
if(cell==nullptr) continue;
if(!(m_ccIdHelper->is_tile(cell->ID()))) continue;
for (unsigned hs=0;hs<jT.size();++hs){
JGTower*jt = jT.at(hs);
for (unsigned hs=0;hs<m_jT.size();++hs){
std::shared_ptr<JGTower> jt = m_jT.at(hs);
if(jt->sampling()==0) continue;
if(inBox(jt->Eta(),cell->eta(),jt->dEta()/2,jt->Phi(),cell->phi(),jt->dPhi()/2)) jt->SetTileIndices(cell_hs);
}
for (unsigned hs=0;hs<gT.size();++hs){
JGTower*gt = gT.at(hs);
for (unsigned hs=0;hs<m_gT.size();++hs){
std::shared_ptr<JGTower> gt = m_gT.at(hs);
if(gt->sampling()==0) continue;
if(inBox(gt->Eta(),cell->eta(),gt->dEta()/2,gt->Phi(),cell->phi(),gt->dPhi()/2)) gt->SetTileIndices(cell_hs);
}
......@@ -260,7 +300,7 @@ StatusCode JGTowerMaker::SCTowerMapping(){
float jPhi = (m_jTowerId->phi(jid)+1-0.5)*jDPhi+m_jTowerId->phi0(rid);
if(jPhi>TMath::Pi()) jPhi = jPhi-2*TMath::Pi(); //m_jTowerId->phi0(rid)-jDPhi*(2*nTowers-m_jTowerId->phi(jid));
JGTower*JT = new JGTower(jEta,jDEta,jPhi,jDPhi);
std::shared_ptr<JGTower> JT = std::make_shared<JGTower>(jEta,jDEta,jPhi,jDPhi);
unsigned sc_hashMax = m_scid-> calo_cell_hash_max();
JT->SetSampling(m_jTowerId->sampling(jid));
......@@ -320,11 +360,11 @@ StatusCode JGTowerMaker::SCTowerMapping(){
if(hs!=0) continue;
} //SC loop
jT.push_back(JT);
m_jT.push_back(JT);
} //jTower loop
myJMap->set(jSCs);
CHECK(detStore()->record(myJMap,"JTowerSCMap"));
m_JMap->set(jSCs);
CHECK(detStore()->record(m_JMap,"JTowerSCMap"));
int m_gTowerHashMax = m_gTowerId->tower_hash_max();
......@@ -346,9 +386,11 @@ StatusCode JGTowerMaker::SCTowerMapping(){
float gEta = (m_gTowerId->eta(gid)+1-0.5)*gDEta*detSide+m_gTowerId->eta0(rid)*detSide;
float gPhi = (m_gTowerId->phi(gid)+1-0.5)*gDPhi+m_gTowerId->phi0(rid);
if(gPhi>TMath::Pi()) gPhi = gPhi-2*TMath::Pi();
JGTower*GT = new JGTower(gEta,gDEta,gPhi,gDPhi);
std::shared_ptr<JGTower> GT = std::make_shared<JGTower>(gEta,gDEta,gPhi,gDPhi);
unsigned sc_hashMax = m_scid-> calo_cell_hash_max();
GT->SetSampling(m_jTowerId->sampling(gid));
for (unsigned sc_hs=0;sc_hs<sc_hashMax;++sc_hs) {
const Identifier scid=m_scid->cell_id(sc_hs);
const Identifier tid=m_tid->cell_id(scid);
......@@ -367,8 +409,8 @@ StatusCode JGTowerMaker::SCTowerMapping(){
// eta_raw=1.4 (which is the midpoint of the scell). These will be put into the g/gTower that starts at eta=1.4
float scEta = dde->eta_raw();
float scPhi = dde->phi_raw();
if(fabs(fabs(dde->eta_raw())-1.4)<0.001 && m_scid->region(scid) == 0 && m_scid->sampling(scid) == 2)
{
if(fabs(scEta)>3.2) continue;
if(fabs(fabs(dde->eta_raw())-1.4)<0.001 && m_scid->region(scid) == 0 && m_scid->sampling(scid) == 2){
if(scEta > 0) scEta += 0.05;
else scEta -= 0.05;
}
......@@ -404,11 +446,11 @@ StatusCode JGTowerMaker::SCTowerMapping(){
} //inbox matching
} //SC looping
gT.push_back(GT);
m_gT.push_back(GT);
} //gTower looping
myGMap->set(gSCs); //not properly in use, but still taken as the tool to identify duplication of SCs
CHECK(detStore()->record(myGMap,"GTowerSCMap"));
m_GMap->set(gSCs); //not properly in use, but still taken as the tool to identify duplication of SCs
CHECK(detStore()->record(m_GMap,"GTowerSCMap"));
return StatusCode::SUCCESS;
......
......@@ -377,11 +377,11 @@ StatusCode JGTowerReader::HistBookFill(const TString name, Int_t nbinsx, const D
TH1F*h = new TH1F( name, name, nbinsx, xbins);
h->Sumw2();
CHECK( histSvc->regHist(Form("/OUTPUT/%s",name.Data()),h));
hName[name]=h;
hName[name]->Fill(xvalue,wei);
m_hName[name]=h;
m_hName[name]->Fill(xvalue,wei);
hists.push_back(name);
}
else hName[name]->Fill(xvalue,wei);
else m_hName[name]->Fill(xvalue,wei);
return StatusCode::SUCCESS;
}
......@@ -391,11 +391,11 @@ StatusCode JGTowerReader::HistBookFill(const TString name, Int_t nbinsx, Double_
TH1F*h=new TH1F( name, name, nbinsx, xbin_down,xbin_up);
h->Sumw2();
CHECK( histSvc->regHist(Form("/OUTPUT/%s",name.Data()),h));
hName[name]=h;
hName[name]->Fill(xvalue,wei);
m_hName[name]=h;
m_hName[name]->Fill(xvalue,wei);
hists.push_back(name);
}
else hName[name]->Fill(xvalue,wei);
else m_hName[name]->Fill(xvalue,wei);
return StatusCode::SUCCESS;
}
......@@ -689,10 +689,10 @@ StatusCode JGTowerReader::BuildJetsFromMap(const xAOD::JGTowerContainer*jTs) {
// set seed ET to 0 if it has less ET than N times the total noise over the seed towers
if(seed_ET < seed_totalNoise * m_map_seed_total_noise_multiplier)
seed_ET = 0;
else
else{
// ATH_MSG_DEBUG("adding a non-zero seed " << i_seed << " at (eta,phi)=" << towerMap_seedEta[i_seed] << "," << towerMap_seedPhi[i_seed] << ") with ET " << seed_ET);
;
}
towerMapSeed_ET.push_back(seed_ET);
}
......
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