11#include "nlohmann/json.hpp"
49 std::ifstream fin(
file.c_str());
52 return StatusCode::FAILURE;
54 nlohmann::json
data = nlohmann::json::parse(fin);
60 for(
int j=0; j<75; j++) {
88 unsigned int maxHash =
m_pTRTHelper->straw_layer_hash_max();
102 int idSide = idBarrelEndcap?1:-1;
104 element =
m_mgr->getBarrelElement(idSide, idLayerWheel, idPhiModule, idStrawLayer);
105 if (element ==
nullptr)
continue;
107 for(
unsigned int istraw = 0; istraw < element->
nStraws(); istraw++) {
119 if (idLayerWheel == 1) i_chip+=21;
120 if (idLayerWheel == 2) i_chip+=54;
129 int idSide = idBarrelEndcap?2:-2;
135 element =
m_mgr->getEndcapElement(idSide, idLayerWheel, idStrawLayer, idPhiModule);
136 if (element ==
nullptr)
continue;
138 for(
unsigned int istraw = 0; istraw < element->
nStraws(); istraw++) {
140 int tempStrawNumber =
EndcapStrawNumber(istraw, idStrawLayer, idLayerWheel, idPhiModule, idSide);
157 return StatusCode::SUCCESS;
167 int barrel_trigger_board[2][32][9] = {{{0}}};
168 int endcap_trigger_board[2][32][20] = {{{0}}};
171 int barrel_trigger_ttc[2][8] = {{0}};
172 int endcap_trigger_ttc[2][16] = {{0}};
179 for (
const auto trtRDO : *trtRDOs) {
182 if(!TRT_Collection) {
188 for (
const auto p_rdo : *TRT_Collection) {
192 Identifier TRT_Identifier = p_rdo->identify();
194 int barrel_ec =
m_pTRTHelper->barrel_ec(TRT_Identifier);
197 if(!p_lolum)
continue;
200 TRT_Identifier = p_lolum->
identify();
201 int phi_module =
m_pTRTHelper->phi_module(TRT_Identifier);
202 int layer_or_wheel =
m_pTRTHelper->layer_or_wheel(TRT_Identifier);
203 int straw_layer =
m_pTRTHelper->straw_layer(TRT_Identifier);
213 if (barrel_ec == 1 || barrel_ec == -1) {
214 int side = barrel_ec>0?1:0;
220 return StatusCode::FAILURE;
225 if(std::find(maskedChips.begin(), maskedChips.end(), chip) != maskedChips.end())
229 barrel_trigger_board[side][phi_module][board]++;
233 else if (barrel_ec == 2 || barrel_ec == -2) {
235 int side = barrel_ec>0?1:0;
236 strawNumber =
EndcapStrawNumber(straw, straw_layer, layer_or_wheel, phi_module, barrel_ec);
241 std::vector<int> maskedChips =
m_maskedChipsEc.at(side).at(phi_module);
242 if(std::find(maskedChips.begin(), maskedChips.end(), chip) != maskedChips.end())
246 endcap_trigger_board[side][phi_module][board]++;
255 for (
int i=0; i<2; i++) {
256 for (
int j=0; j<32; j++) {
257 for (
int k=0; k<9; k++) {
258 if (barrel_trigger_board[i][j][k]) {
259 barrel_trigger_ttc[i][j%4]++;
262 for (
int k=0; k<20; k++) {
263 if (endcap_trigger_board[i][j][k]) {
264 endcap_trigger_ttc[i][j%2]++;
270 unsigned int cableWord0 = 0;
273 for (
int i=0; i<2; i++) {
274 for (
int j=0; j<8; j++) {
276 cableWord0 |= (uint64_t(0x1) << 21);
279 for (
int j=0; j<16; j++) {
281 cableWord0 |= (uint64_t(0x1) << 21);
293 ATH_MSG_DEBUG(
"Stored TRT CTP object with bit " << std::dec << cableWord0);
295 return StatusCode::SUCCESS;
315 int list[] = {10, 11, 15, 9, 9, 11, 12, 13, 14};
319 for (
int i=0; i<9; i++) {
321 if (chip <
count)
return i+1;
322 else if (chip == 104)
return 9;
325 throw std::runtime_error(
"Board not found!");
333 Board = int(((chip -1) -
remainder) / 12);
343 static const int TripletOrientation[2][32] = {
355 if(side==2) phi1=phi_stack, side=1;
356 else if (side==-2) phi1=31-phi_stack, side=0;
358 if (TripletOrientation[side][phi1]){
360 if (strawLayerNumber < 8)strawNumber = strawNumber + 24*strawLayerNumber;
361 if (strawLayerNumber > 7)strawNumber = strawNumber + 24*(strawLayerNumber -8);
362 strawNumber = (192-1)*TripletOrientation[side][phi1]+strawNumber*(1-2*TripletOrientation[side][phi1]);
365 if (strawLayerNumber<8) strawLayerNumber = int(strawNumber/24);
366 if (strawLayerNumber>7) strawLayerNumber = int(strawNumber/24) + 8;
367 strawNumber = strawNumber%24;
374 if (side==0) strawNumber = 23 - strawNumber;
382 int strawNumberNew=0;
384 if(LayerNumber<6 && strawLayerNumber>7) {
385 strawNumberNew=strawNumberNew+(384*LayerNumber);
386 strawNumberNew=strawNumberNew+192+(strawLayerNumber%8)+(strawNumber*8);
388 else if(LayerNumber<6 && strawLayerNumber<8) {
389 strawNumberNew=strawNumberNew+(384*LayerNumber);
390 strawNumberNew=strawNumberNew + (strawLayerNumber%8) + (strawNumber*8);
392 else if(LayerNumber>5 && strawLayerNumber>7) {
393 strawNumberNew = strawNumberNew + 2304 + 192*(LayerNumber-6);
394 strawNumberNew = strawNumberNew + 192 + (strawLayerNumber%8) + (8*strawNumber);
396 else if(LayerNumber>5 && strawLayerNumber<8) {
397 strawNumberNew = strawNumberNew + 2304 + 192*(LayerNumber-6);
398 strawNumberNew = strawNumberNew + (strawLayerNumber%8) + (8*strawNumber);
401 strawNumber=strawNumberNew;
407 int addToStrawNumber=0;
408 int addToStrawNumberNext=0;
417 strawNumber = addToStrawNumberNext - strawNumber-1;
424 }
else if(LayerNumber==1) {
425 strawLayerNumber+=19;
426 }
else if(LayerNumber==2) {
427 strawLayerNumber+=43;
429 return strawLayerNumber;
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
char data[hepevt_bytes_allocation_ATLAS]
const ServiceHandle< StoreGateSvc > & detStore() const
An algorithm that can be simultaneously executed in multiple threads.
This is a "hash" representation of an Identifier.
Virtual base class of TRT readout elements.
unsigned int nStraws() const
Number of straws in the element.
virtual Identifier identify() const override final
virtual StatusCode initialize() override
ToolHandle< ITRT_StrawStatusSummaryTool > m_ConditionsSummary
Gaudi::Property< std::string > m_maskedChipsFile
Gaudi::Property< int > m_TTCMultiplicity
SG::WriteHandleKey< TrtCTP > m_trtCTPLocation
const TRT_ID * m_pTRTHelper
SG::ReadHandleKey< TRT_RDO_Container > m_trtRDOKey
ServiceHandle< ITRT_StrawNeighbourSvc > m_TRTStrawNeighbourSvc
int BarrelStrawNumber(int strawNumber, int strawlayerNumber, int LayerNumber) const
unsigned char m_mat_chip_endcap[64][3840]
int BarrelStrawLayerNumber(int strawLayerNumber, int LayerNumber) const
virtual StatusCode execute(const EventContext &ctx) const override
unsigned char m_mat_chip_barrel[64][1642]
std::array< std::array< std::vector< int >, 32 >, 2 > m_maskedChipsBarrel
TrigT1TRT(const std::string &name, ISvcLocator *pSvcLocator)
int EndcapStrawNumber(int strawNumber, int strawLayerNumber, int LayerNumber, int phi_stack, int side) const
int EndcapChipToBoard(int chip) const
int BarrelChipToBoard(int chip) const
const InDetDD::TRT_DetectorManager * m_mgr
std::array< std::array< std::vector< int >, 32 >, 2 > m_maskedChipsEc
static std::string find_file(const std::string &logical_file_name, const std::string &search_path)
virtual bool isValid() override final
Can the handle be successfully dereferenced?
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
std::vector< std::string > remainder(const std::vector< std::string > &v1, const std::vector< std::string > &v2)
bool highLevel(unsigned int m_word)
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
int count(std::string s, const std::string ®x)
count how many occurances of a regx are in a string
eFexTowerBuilder creates xAOD::eFexTowerContainer from supercells (LATOME) and triggerTowers (TREX) i...
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())