32 ATH_MSG_INFO(
"L1CaloFEXTools/gFexTower2SCellDecorator::initialize()");
53 return StatusCode::SUCCESS;
62 return StatusCode::FAILURE;
67 if(!triggerTowerContainer.
isValid()) {
68 ATH_MSG_FATAL(
"Could not retrieve collection " << triggerTowerContainer.
key() );
69 return StatusCode::FAILURE;
76 return StatusCode::FAILURE;
80 ATH_MSG_WARNING(
"Nothing to decorate here, at least one container is empty. ScellContainer.size="<<ScellContainer->
size() <<
" or gTowerContainer.size=" <<
gTowerContainer->
size() <<
" or triggerTowerContainer.size=" << triggerTowerContainer->
size() );
81 return StatusCode::SUCCESS;
85 std::unordered_map< uint64_t, const CaloCell*> map_ScellID2ptr;
87 for(
const CaloCell* scell : *ScellContainer){
89 map_ScellID2ptr[
ID] = scell;
93 std::unordered_map< uint32_t, const xAOD::TriggerTower*> map_TileID2ptr;
98 if(std::abs(tower->eta())>1.5 || tower->sampling()!=1)
continue;
99 map_TileID2ptr[tower->coolId()]=tower;
122 std::vector<float> scEt;
123 std::vector<float> scEta;
124 std::vector<float> scPhi;
125 std::vector<int> scID;
126 std::vector<int> scSample;
128 std::vector<int> TileEt;
129 std::vector<float> TileEta;
130 std::vector<float> TilePhi;
136 ATH_MSG_ERROR(
"ID: "<<gFexID<<
" not found on map m_map_TTower2SCells");
137 return StatusCode::FAILURE;
140 for (
auto const& SCellID : it_TTower2SCells->second ) {
143 auto it_ScellID2ptr = map_ScellID2ptr.find(SCellID);
144 if(it_ScellID2ptr == map_ScellID2ptr.end()) {
145 ATH_MSG_WARNING(
"Scell ID: 0x"<<std::hex<<(SCellID >> 32)<<std::dec<<
" not found on map map_ScellID2ptr");
147 scEt.push_back(-9999);
148 scEta.push_back(-99);
149 scPhi.push_back(-99);
151 scID.push_back( SCellID >> 32 );
152 scSample.push_back(-99);
158 const CaloCell* myCell = it_ScellID2ptr->second;
159 float et = myCell->
et();
164 int prov = (myCell)->provenance();
165 int SCprov = prov&0xFFF;
166 bool isMasked = (SCprov&0x80)==0x80;
170 scEta.push_back(myCell->
eta());
171 scPhi.push_back(myCell->
phi());
173 scID.push_back( SCellID >> 32 );
174 scSample.push_back(
sample);
180 float tmpSCellEt = 0;
181 for(
const auto& tmpet : scEt){
188 gTowerSCellEt (*
gTower) = scEt;
189 gTowerSCellEta (*
gTower) = scEta;
190 gTowerSCellPhi (*
gTower) = scPhi;
191 gTowerSCellID (*
gTower) = scID;
192 gTowerSCellSample (*
gTower) = scSample;
193 gTowerEtMeV (*
gTower) = gFexEt * 200;
194 gTowerSCEtEncoded (*
gTower) = scSumEtEncoded;
203 for (
auto const& TileTowerID : it_TTower2Tile->second ) {
206 auto it_TileID2ptr = map_TileID2ptr.find(TileTowerID);
207 if(it_TileID2ptr == map_TileID2ptr.end()) {
211 TileEt.push_back(-9999);
212 TileEta.push_back(-99);
213 TilePhi.push_back(-99);
219 TileEt.push_back(tileTower->
jepET()*1000);
220 TileEta.push_back(tileTower->
eta());
222 TilePhi.push_back(
phi);
223 TileID.push_back(TileTowerID);
232 gTowerTileEt (*
gTower) = TileEt;
234 gTowerTileEta (*
gTower) = TileEta;
235 gTowerTilePhi (*
gTower) = TilePhi;
239 return StatusCode::SUCCESS;
249 if ( !myfile.is_open() ){
251 return StatusCode::FAILURE;
255 while ( std::getline (myfile, myline) ) {
256 std::vector<uint64_t> SCellvector;
260 myline.erase(myline.begin(), std::find_if(myline.begin(), myline.end(), [](
int ch) {
261 return !std::isspace(ch);
263 if(myline[0] ==
'#')
continue;
266 std::stringstream oneSCellID(myline);
269 std::string substr =
"";
273 while(std::getline(oneSCellID, substr,
' '))
277 TTID = std::stoi(substr);
282 return StatusCode::FAILURE;
286 uint64_t scid_uint64 = std::strtoull(substr.c_str(),
nullptr, 0);
289 if(scid_uint64 == 0xffffffffffffffff)
continue;
291 SCellvector.push_back(scid_uint64);
300 return StatusCode::SUCCESS;
306 if (
ID.find(
"0x") == std::string::npos) {
307 ATH_MSG_ERROR(
"Invalid SuperCell ID " <<
ID <<
". Expecting hexadecimal number on the mapping file");
321 if ( !myfile.is_open() ){
323 return StatusCode::FAILURE;
327 while ( std::getline (myfile, myline) ) {
329 std::vector<uint32_t> Tilevector;
332 myline.erase(myline.begin(), std::find_if(myline.begin(), myline.end(), [](
int ch) {
333 return !std::isspace(ch);
335 if(myline[0] ==
'#')
continue;
338 std::stringstream oneTileID(myline);
341 std::string substr =
"";
345 while(std::getline(oneTileID, substr,
' ')){
348 gTowerID = std::stoi(substr);
351 uint32_t tileid_uint32 = std::strtoul(substr.c_str(),
nullptr, 0);
352 Tilevector.push_back(tileid_uint32);
361 return StatusCode::SUCCESS;