ATLAS Offline Software
Public Member Functions | Private Attributes | List of all members
BIS78_triggerSimulation Class Reference

#include <BIS78_triggerSimulation.h>

Collaboration diagram for BIS78_triggerSimulation:

Public Member Functions

 BIS78_triggerSimulation ()
 
 ~BIS78_triggerSimulation ()=default
 
StatusCode clear ()
 
void build_trigRawData (Muon::RpcBis78_TrigRawDataContainer *trgContainer, uint8_t dstrip_phi, uint8_t dstrip_eta, uint16_t bcid)
 
unsigned int AddStrip (int sectoreta, int sectorphi, int igap, int mphi, int strip)
 

Private Attributes

std::vector< int > m_strip_eta [2][8][3]
 
std::vector< int > m_strip_phi [2][8][3]
 
std::unique_ptr< Muon::RpcBis78_TrigRawDataContainerm_bisTrgContainer
 

Detailed Description

Definition at line 26 of file BIS78_triggerSimulation.h.

Constructor & Destructor Documentation

◆ BIS78_triggerSimulation()

BIS78_triggerSimulation::BIS78_triggerSimulation ( )

Definition at line 15 of file BIS78_triggerSimulation.cxx.

16 {}

◆ ~BIS78_triggerSimulation()

BIS78_triggerSimulation::~BIS78_triggerSimulation ( )
default

Member Function Documentation

◆ AddStrip()

unsigned int BIS78_triggerSimulation::AddStrip ( int  sectoreta,
int  sectorphi,
int  igap,
int  mphi,
int  strip 
)

Definition at line 18 of file BIS78_triggerSimulation.cxx.

18  {
19  if (igap<1||igap>3) return false;
20  int side = 0;
21  if (sectoreta>0) side=1;
22  if (mphi==1){
23  m_strip_phi[side][sectorphi-1][igap-1].push_back(strip);
24  } else {
25  m_strip_eta[side][sectorphi-1][igap-1].push_back(strip);
26  }
27 
28  return 0;
29 }

◆ build_trigRawData()

void BIS78_triggerSimulation::build_trigRawData ( Muon::RpcBis78_TrigRawDataContainer trgContainer,
uint8_t  dstrip_phi,
uint8_t  dstrip_eta,
uint16_t  bcid 
)

Definition at line 46 of file BIS78_triggerSimulation.cxx.

48 {
49 
50  uint8_t delta_strip_phi=dstrip_phi;
51  uint8_t delta_strip_eta=dstrip_eta;
52 
53  for (int i=0; i<2; i++){ // i = side (0,1)
54  for (int j=0; j<8; j++){ // j = sector-1 (0,7)
55 
56  uint16_t side=i;
57  uint16_t sector=j;
58  auto trgRawData=std::make_unique< Muon::RpcBis78_TrigRawData>(sector, side, bcid);
59 
60 
61  uint32_t trigword = 0;
62  unsigned int majority_eta=0; uint8_t position_eta=0;
63  unsigned int majority_phi=0; uint8_t position_phi=0;
64 
65  // use middle gas gap as pilot
66  // SEARCH OF PHI COINCIDENCES
67  for (unsigned int istrip1=0; istrip1<m_strip_phi[i][j][1].size(); istrip1++){
68  unsigned int majority=0;
69  for (unsigned int istrip0=0; istrip0<m_strip_phi[i][j][0].size(); istrip0++){
70  if (std::abs(m_strip_phi[i][j][1].at(istrip1)-m_strip_phi[i][j][0].at(istrip0))<=delta_strip_phi) {
71  majority=1;
72  }
73  }
74  for (unsigned int istrip2=0; istrip2<m_strip_phi[i][j][2].size(); istrip2++){
75  if (std::abs(m_strip_phi[i][j][1].at(istrip1)-m_strip_phi[i][j][2].at(istrip2))<=delta_strip_phi) {
76  if (majority>0) {
77  majority=2;
78  } else {
79  majority=1;
80  }
81  }
82  }
83  if (majority > majority_phi) {
84  majority_phi=majority;
85  position_phi=m_strip_phi[i][j][1].at(istrip1);
86  }
87  }
88  if (majority_phi==0) { // try also combination first-last
89  for (unsigned int istrip0=0; istrip0<m_strip_phi[i][j][0].size(); istrip0++){
90  for (unsigned int istrip2=0; istrip2<m_strip_phi[i][j][2].size(); istrip2++){
91  if (std::abs(m_strip_phi[i][j][2].at(istrip2)-m_strip_phi[i][j][0].at(istrip0))<=delta_strip_phi) {
92  position_phi=m_strip_phi[i][j][0].at(istrip0);
93  majority_phi=1;
94  }
95  }
96  }
97  } // end of phi loop
98  // SEARCH OF ETA COINCIDENCES
99  for (unsigned int istrip1=0; istrip1<m_strip_eta[i][j][1].size(); istrip1++){
100  unsigned int majority=0;
101  for (unsigned int istrip0=0; istrip0<m_strip_eta[i][j][0].size(); istrip0++){
102  if (std::abs(m_strip_eta[i][j][1].at(istrip1)-m_strip_eta[i][j][0].at(istrip0))<=delta_strip_eta) {
103  majority=1;
104  }
105  }
106  for (unsigned int istrip2=0; istrip2<m_strip_eta[i][j][2].size(); istrip2++){
107  if (std::abs(m_strip_eta[i][j][1].at(istrip1)-m_strip_eta[i][j][2].at(istrip2))<=delta_strip_eta) {
108  if (majority>0) {
109  majority=2;
110  } else {
111  majority=1;
112  }
113  }
114  }
115  if (majority > majority_eta) {
116  majority_eta=majority;
117  position_eta=m_strip_eta[i][j][1].at(istrip1);
118  }
119  }
120  if (majority_eta==0) { // try also combination first-last
121  for (unsigned int istrip0=0; istrip0<m_strip_eta[i][j][0].size(); istrip0++){
122  for (unsigned int istrip2=0; istrip2<m_strip_eta[i][j][2].size(); istrip2++){
123  if (std::abs(m_strip_eta[i][j][2].at(istrip2)-m_strip_eta[i][j][0].at(istrip0))<=delta_strip_eta) {
124  position_eta=m_strip_eta[i][j][0].at(istrip0);
125  majority_eta=1;
126  }
127  }
128  }
129  } // end of eta loop
130 
131 
132  // Here one has to compute the trigword for each sector
133  // Content of the 24 bits word:
134  // - eta strip index -> 6 bits
135  // - phi strip index -> 6 bits
136  // - eta strip coincidence window -> 3 bits (NOT IMPLEMENTED YET: TO BE CHECKED WITH FIRMWARE)
137  // - phi strip coincidence window -> 3 bits (NOT IMPLEMENTED YET: TO BE CHECKED WITH FIRMWARE)
138  // - 3 over 3 gaps coincidence flag for eta/phi-> 2 bits
139  // - reserved -> 4 bits
140 
141 
142  uint8_t flag3o3_eta=0;
143  uint8_t flag3o3_phi=0;
144  if (majority_eta>0&&majority_phi>0){
145  if (majority_eta>1) flag3o3_eta=1;
146  if (majority_phi>1) flag3o3_phi=1;
147 
148  // set the trigger word
149  trigword = ((position_eta & 0x3f) << 18)
150  + ((position_phi & 0x3f) << 12 )
151  + ((flag3o3_eta & 0x1) << 5 )
152  + ((flag3o3_phi & 0x1) << 4 );
153 
154  auto bis_segment= std::make_unique<Muon::RpcBis78_TrigRawDataSegment>(position_eta,position_phi,
155  delta_strip_eta,delta_strip_phi,
156  flag3o3_eta,flag3o3_phi,trigword );
157 
158  trgRawData->push_back(std::move(bis_segment));
159  trgContainer->push_back(std::move(trgRawData));
160  }
161 
162 
163  }
164  }
165 
166 }

◆ clear()

StatusCode BIS78_triggerSimulation::clear ( )

Definition at line 31 of file BIS78_triggerSimulation.cxx.

31  {
32 
33  for (int i=0; i<2; i++){ // 2 sides (0 or 1, just for BIS78, otherwise, for full BIS it should be the eta sector)
34  for (int j=0; j<8; j++){ // 8 sectors
35  for (int k=0;k<3; k++){ // 3 gas gaps
36  m_strip_eta[i][j][k].clear();
37  m_strip_phi[i][j][k].clear();
38  }
39  }
40  }
41 
42  return StatusCode::SUCCESS;
43 }

Member Data Documentation

◆ m_bisTrgContainer

std::unique_ptr<Muon::RpcBis78_TrigRawDataContainer> BIS78_triggerSimulation::m_bisTrgContainer
private

Definition at line 44 of file BIS78_triggerSimulation.h.

◆ m_strip_eta

std::vector<int> BIS78_triggerSimulation::m_strip_eta[2][8][3]
private

Definition at line 41 of file BIS78_triggerSimulation.h.

◆ m_strip_phi

std::vector<int> BIS78_triggerSimulation::m_strip_phi[2][8][3]
private

Definition at line 42 of file BIS78_triggerSimulation.h.


The documentation for this class was generated from the following files:
BIS78_triggerSimulation::m_strip_eta
std::vector< int > m_strip_eta[2][8][3]
Definition: BIS78_triggerSimulation.h:41
SiliconTech::strip
@ strip
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
TRT::Hit::side
@ side
Definition: HitInfo.h:83
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
lumiFormat.i
int i
Definition: lumiFormat.py:92
DataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition: EventInfo_v1.cxx:133
fitman.k
k
Definition: fitman.py:528
BIS78_triggerSimulation::m_strip_phi
std::vector< int > m_strip_phi[2][8][3]
Definition: BIS78_triggerSimulation.h:42