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;
80 unsigned int towerID = gfexTowerRoI->gFEXtowerID();
81 unsigned int offset = (towerID > 20000) ? 20000 : (towerID > 10000 && towerID < 20000) ? 10000 : 0;
82 unsigned int iFiber = (towerID - offset)/16;
86 if (iFiber >= maxFiberN)
continue;
98 Toweret=gfexTowerRoI->towerEt();
99 Towersaturationflag=gfexTowerRoI->isSaturated();
100 float eta = gfexTowerRoI->eta();
101 float phi = gfexTowerRoI->phi();
102 if (
eta == 0.0 &&
phi == 0.0)
continue;
104 if(!emulatedTowers.empty()) {
105 Towereta =
eta; Towerphi =
phi;
106 TowerId=gfexTowerRoI->gFEXtowerID();
108 auto eTowerItr = emulatedTowers.find(gfexTowerRoI->gFEXtowerID());
109 if(eTowerItr == emulatedTowers.end()) {
112 fill(
"errors",FillTree,
Decision,lbn,evtNumber,TowerId,Towereta,Towerphi,Toweret,refTowerET,refTowerSat,Towersaturationflag);
116 const auto eTower = eTowerItr->second;
117 refTowerET = eTower->towerEt();
118 refTowerSat = eTower->isSaturated();
120 if(refTowerET != Toweret) {
122 fill(
"errors",FillTree,
Decision,lbn,evtNumber,TowerId,Towereta,Towerphi,Toweret,refTowerET,refTowerSat,Towersaturationflag);
125 fill(
"errorsTile",Towereta,Towerphi);
129 if (std::abs(
eta) >= 3.2 ){
131 fill(
"errorsSCell",Towereta,Towerphi);
132 Towerphi =
phi + 0.1;
133 fill(
"errorsSCell",Towereta,Towerphi);
135 fill(
"errorsSCell",Towereta,Towerphi);
138 fill(
"errors",FillTree,
Decision,lbn,evtNumber,TowerId,Towereta,Towerphi,Toweret,refTowerET,refTowerSat,Towersaturationflag);
140 if(refTowerSat != Towersaturationflag) {
142 fill(
"errors",FillTree,
Decision,lbn,evtNumber,TowerId,Towereta,Towerphi,Toweret,refTowerET,refTowerSat,Towersaturationflag);
149 else fill(
"gTileTowers",Toweret);
157 if(gfexTowerRoI->towerEt() >= 1662 ){
162 if (
int(Towersaturationflag) == 1){
163 if (std::abs(
eta) >= 3.2 ){
165 fill(
"SatgTowers",Towereta,Towerphi,Toweret);
166 Towerphi =
phi + 0.1;
167 fill(
"SatgTowers",Towereta,Towerphi,Toweret);
170 fill(
"SatgTowers",Towereta,Towerphi,Toweret);
176 if (gfexTowerRoI->towerEt() >= 1342){
177 if (std::abs(
eta) >= 3.2 ){
180 fill(
"highEtgTowers",Towereta,Towerphi,Toweret);
181 fill(
"highEtgTowers",lbn,binNumber);
182 Towerphi =
phi + 0.1;
184 fill(
"highEtgTowers",Towereta,Towerphi,Toweret);
185 fill(
"highEtgTowers",lbn,binNumber);
189 fill(
"highEtgTowers",Towereta,Towerphi,Toweret);
190 fill(
"highEtgTowers",lbn,binNumber);
195 else if (gfexTowerRoI->towerEt() <= 1182){
196 if (std::abs(
eta) >= 3.2){
199 fill(
"lowEtgTowers",Towereta,Towerphi,Toweret);
200 fill(
"lowEtgTowers",lbn,binNumber);
201 Towerphi =
phi + 0.1;
203 fill(
"lowEtgTowers",Towereta,Towerphi,Toweret);
204 fill(
"lowEtgTowers",lbn,binNumber);
208 fill(
"lowEtgTowers",Towereta,Towerphi,Toweret);
209 fill(
"lowEtgTowers",lbn,binNumber);
214 nGfexTowers = nTowers;
215 fill (
"highEtgTowers",lbn,nGfexTowers);
218 return StatusCode::SUCCESS;
222 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};
224 for (
int i = 0; i <= 40; i++){
225 if (inputEta >=
eta[i] && inputEta <
eta[i+1]){
232 if (inputPhi >=
phi && inputPhi <
phi+0.2){
238 int binN = 32*(xbin-1)+ybin;