32 if(!gFexTowerContainer.isValid()){
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;
74 unsigned int towerID = gfexTowerRoI->gFEXtowerID();
75 unsigned int offset = (towerID > 20000) ? 20000 : (towerID > 10000 && towerID < 20000) ? 10000 : 0;
76 unsigned int iFiber = (towerID - offset)/16;
80 if (iFiber >= maxFiberN)
continue;
92 Toweret=gfexTowerRoI->towerEt();
93 Towersaturationflag=gfexTowerRoI->isSaturated();
94 float eta = gfexTowerRoI->eta();
95 float phi = gfexTowerRoI->phi();
96 if (
eta == 0.0 &&
phi == 0.0)
continue;
98 if(!emulatedTowers.empty()) {
99 Towereta =
eta; Towerphi =
phi;
100 TowerId=gfexTowerRoI->gFEXtowerID();
102 auto eTowerItr = emulatedTowers.find(gfexTowerRoI->gFEXtowerID());
103 if(eTowerItr == emulatedTowers.end()) {
106 fill(
"errors",FillTree,
Decision,lbn,evtNumber,TowerId,Towereta,Towerphi,Toweret,refTowerET,refTowerSat,Towersaturationflag);
110 const auto eTower = eTowerItr->second;
111 refTowerET = eTower->towerEt();
112 refTowerSat = eTower->isSaturated();
114 if(refTowerET != Toweret) {
116 fill(
"errors",FillTree,
Decision,lbn,evtNumber,TowerId,Towereta,Towerphi,Toweret,refTowerET,refTowerSat,Towersaturationflag);
119 fill(
"errorsTile",Towereta,Towerphi);
123 if (std::abs(
eta) >= 3.2 ){
125 fill(
"errorsSCell",Towereta,Towerphi);
126 Towerphi =
phi + 0.1;
127 fill(
"errorsSCell",Towereta,Towerphi);
129 fill(
"errorsSCell",Towereta,Towerphi);
132 fill(
"errors",FillTree,
Decision,lbn,evtNumber,TowerId,Towereta,Towerphi,Toweret,refTowerET,refTowerSat,Towersaturationflag);
134 if(refTowerSat != Towersaturationflag) {
136 fill(
"errors",FillTree,
Decision,lbn,evtNumber,TowerId,Towereta,Towerphi,Toweret,refTowerET,refTowerSat,Towersaturationflag);
143 else fill(
"gTileTowers",Toweret);
150 if(gfexTowerRoI->towerEt() >= 1662 ){
155 if (
int(Towersaturationflag) == 1){
156 if (std::abs(
eta) >= 3.2 ){
158 fill(
"SatgTowers",Towereta,Towerphi,Toweret);
159 Towerphi =
phi + 0.1;
160 fill(
"SatgTowers",Towereta,Towerphi,Toweret);
163 fill(
"SatgTowers",Towereta,Towerphi,Toweret);
169 if (gfexTowerRoI->towerEt() >= 1342){
170 if (std::abs(
eta) >= 3.2 ){
173 fill(
"highEtgTowers",Towereta,Towerphi,Toweret);
174 fill(
"highEtgTowers",lbn,binNumber);
175 Towerphi =
phi + 0.1;
177 fill(
"highEtgTowers",Towereta,Towerphi,Toweret);
178 fill(
"highEtgTowers",lbn,binNumber);
182 fill(
"highEtgTowers",Towereta,Towerphi,Toweret);
183 fill(
"highEtgTowers",lbn,binNumber);
188 else if (gfexTowerRoI->towerEt() <= 1182){
189 if (std::abs(
eta) >= 3.2){
192 fill(
"lowEtgTowers",Towereta,Towerphi,Toweret);
193 fill(
"lowEtgTowers",lbn,binNumber);
194 Towerphi =
phi + 0.1;
196 fill(
"lowEtgTowers",Towereta,Towerphi,Toweret);
197 fill(
"lowEtgTowers",lbn,binNumber);
201 fill(
"lowEtgTowers",Towereta,Towerphi,Toweret);
202 fill(
"lowEtgTowers",lbn,binNumber);
207 nGfexTowers = nTowers;
208 fill (
"highEtgTowers",lbn,nGfexTowers);
211 return StatusCode::SUCCESS;
215 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};
217 for (
int i = 0; i <= 40; i++){
218 if (inputEta >=
eta[i] && inputEta <
eta[i+1]){
225 if (inputPhi >=
phi && inputPhi <
phi+0.2){
231 int binN = 32*(xbin-1)+ybin;