6 #include "TProfile2D.h"
34 return StatusCode::SUCCESS;
49 std::map<uint32_t, const xAOD::gFexTower*> emulatedTowers;
52 if(!gFexEmulatedTowerContainer.isValid()){
54 return StatusCode::FAILURE;
58 if(emulatedTowers.find(tower->gFEXtowerID())!=emulatedTowers.end()) {
61 emulatedTowers[tower->gFEXtowerID()] = tower;
70 unsigned int nTowers = 0;
73 unsigned int towerID = gfexTowerRoI->gFEXtowerID();
74 unsigned int offset = (towerID > 20000) ? 20000 : (towerID > 10000 && towerID < 20000) ? 10000 : 0;
75 unsigned int iFiber = (towerID -
offset)/16;
79 if (iFiber >= maxFiberN)
continue;
91 Toweret=gfexTowerRoI->towerEt();
92 Towersaturationflag=gfexTowerRoI->isSaturated();
93 float eta = gfexTowerRoI->eta();
94 float phi = gfexTowerRoI->phi();
95 if (
eta == 0.0 &&
phi == 0.0)
continue;
97 if(!emulatedTowers.empty()) {
98 Towereta =
eta; Towerphi =
phi;
99 TowerId=gfexTowerRoI->gFEXtowerID();
101 auto eTowerItr = emulatedTowers.find(gfexTowerRoI->gFEXtowerID());
102 if(eTowerItr == emulatedTowers.end()) {
105 fill(
"errors",FillTree,
Decision,lbn,evtNumber,TowerId,Towereta,Towerphi,Toweret,refTowerET,refTowerSat,Towersaturationflag);
109 const auto eTower = eTowerItr->second;
110 refTowerET = eTower->towerEt();
111 refTowerSat = eTower->isSaturated();
113 if(refTowerET != Toweret) {
115 fill(
"errors",FillTree,
Decision,lbn,evtNumber,TowerId,Towereta,Towerphi,Toweret,refTowerET,refTowerSat,Towersaturationflag);
117 if(refTowerSat != Towersaturationflag) {
119 fill(
"errors",FillTree,
Decision,lbn,evtNumber,TowerId,Towereta,Towerphi,Toweret,refTowerET,refTowerSat,Towersaturationflag);
126 else fill(
"gTileTowers",Toweret);
128 if (eta < -3.17 && eta > -3.25){
eta = -3.225;}
129 if (eta < 3.3 && eta > 3.17){
eta = 3.275;}
133 if(gfexTowerRoI->towerEt() >= 1662 ){
138 if (
int(Towersaturationflag) == 1){
139 if (std::abs(
eta) >= 3.2 ){
141 fill(
"SatgTowers",Towereta,Towerphi,Toweret);
142 Towerphi =
phi + 0.1;
143 fill(
"SatgTowers",Towereta,Towerphi,Toweret);
146 fill(
"SatgTowers",Towereta,Towerphi,Toweret);
152 if (gfexTowerRoI->towerEt() >= 1342){
153 if (std::abs(
eta) >= 3.2 ){
156 fill(
"highEtgTowers",Towereta,Towerphi,Toweret);
157 fill(
"highEtgTowers",lbn,binNumber);
158 Towerphi =
phi + 0.1;
160 fill(
"highEtgTowers",Towereta,Towerphi,Toweret);
161 fill(
"highEtgTowers",lbn,binNumber);
165 fill(
"highEtgTowers",Towereta,Towerphi,Toweret);
166 fill(
"highEtgTowers",lbn,binNumber);
171 else if (gfexTowerRoI->towerEt() <= 1182){
172 if (std::abs(
eta) >= 3.2){
175 fill(
"lowEtgTowers",Towereta,Towerphi,Toweret);
176 fill(
"lowEtgTowers",lbn,binNumber);
177 Towerphi =
phi + 0.1;
179 fill(
"lowEtgTowers",Towereta,Towerphi,Toweret);
180 fill(
"lowEtgTowers",lbn,binNumber);
184 fill(
"lowEtgTowers",Towereta,Towerphi,Toweret);
185 fill(
"lowEtgTowers",lbn,binNumber);
190 nGfexTowers = nTowers;
191 fill (
"highEtgTowers",lbn,nGfexTowers);
194 return StatusCode::SUCCESS;
198 const std::vector<float>
eta = {-4.9, -4.1,-3.5,-3.25,-3.2,-3.1,-2.9,-2.7,-2.5,-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.5,2.7,2.9,3.1,3.25,3.3,3.5,4.1,4.9};
200 for (
int i = 0;
i <= 40;
i++){
201 if (inputEta >=
eta[
i] && inputEta <
eta[
i+1]){
208 if (inputPhi >=
phi && inputPhi <
phi+0.2){
214 int binN = 32*(xbin-1)+ybin;