18MucFec ::MucFec(
int id ) {
21 if ( (
id < 0 ) || (
id > STRIP_NUM - 1 ) )
23 cout <<
"Initialize failure, check id!" << endl;
32 m_StripOrder = DEFAULT_STRIP_ORDER;
33 m_ChainName =
"NoName";
39MucFec ::MucFec(
int id,
int stripOrder,
int part,
int segment,
int layer,
int firstStripID,
40 unsigned int vmeRecord,
string chainName ) {
47 if ( (
id < 0 ) || (
id > STRIP_NUM - 1 ) )
50 cout <<
"MucFec::Check id:\t" <<
id <<
"!" << endl;
52 else if ( ( stripOrder != 1 ) && ( stripOrder != -1 ) )
55 cout <<
"MucFec::Check stripOrder:\t" << stripOrder <<
"!" << endl;
57 else if ( ( part < 0 ) || ( part > PART_MAX - 1 ) )
60 cout <<
"MucFec::Check part:\t" << part <<
"!" << endl;
62 else if ( ( segment < 0 ) ||
63 ( segment > ( ( part == BRID ) ? ( B_SEG_NUM - 1 ) : ( E_SEG_NUM - 1 ) ) ) )
66 cout <<
"MucFec::Check segment:\t" << segment <<
"!" << endl;
68 else if ( ( layer < 0 ) ||
69 ( layer > ( ( part == BRID ) ? ( B_LAY_NUM - 1 ) : ( E_LAY_NUM - 1 ) ) ) )
72 cout <<
"MucFec::Check layer:\t" << layer <<
"!" << endl;
74 else if (
sizeof( vmeRecord ) < 4 )
77 cout <<
"MucFec::Check record:\t" << vmeRecord <<
"!" << endl;
82 m_StripOrder = stripOrder;
86 m_FirstStripID = firstStripID;
87 m_ChainName = chainName;
88 m_VmeRecord = vmeRecord;
94void MucFec ::Initialize() {
96 MucFec::DecodeVmeAddress();
97 MucFec::SetFiredStripNumber();
98 MucFec::SetFiredStripVect();
99 MucFec::EncodePowerpcRecord();
103void MucFec ::DecodeData() { m_Data = (
unsigned short)m_VmeRecord; }
105void MucFec ::DecodeVmeAddress() {
106 m_VmeAddress = (
unsigned short)( m_VmeRecord >> LENGTH );
107 m_Module = ( m_VmeAddress >> MODULE_BIT ) & 0xF;
108 m_Socket = ( m_VmeAddress >> SOCKET_BIT ) & 0x3;
109 m_FecID = m_VmeAddress & 0xF;
112void MucFec ::SetFiredStripNumber() {
113 m_FiredStripNumber = 0;
114 for (
int i = 0; i < STRIP_NUM; i++ )
116 if ( ( m_Data >> i ) & 1 ) m_FiredStripNumber++;
120void MucFec ::SetFiredStripVect() {
121 m_FiredStripVect.clear();
122 int tempID[STRIP_NUM];
125 for (
int i = 0; i < STRIP_NUM; i++ )
127 if ( ( m_Data >> i ) & 1 )
129 tempID[tempFired] = i;
135 for (
int i = 0; i < tempFired; i++ )
137 stripID = ( ( 1 - m_StripOrder ) / 2 ) * ( STRIP_NUM - 1 ) + ( m_StripOrder * tempID[i] );
138 stripID += m_FirstStripID;
139 m_FiredStripVect.push_back( stripID );
143void MucFec ::EncodePowerpcRecord() {
144 unsigned int address = ( ( m_Part << PART_BIT ) | ( m_Segment << SEG_BIT ) |
145 ( m_Layer << LAY_BIT ) | m_FirstStripID );
146 m_GeoAddress = (
unsigned short)
address;
147 m_PowerpcRecord = (
address << LENGTH ) | m_Data;
150void MucFec ::SetStripOrder(
int stripOrder ) {
151 m_StripOrder = stripOrder;
152 MucFec::SetFiredStripVect();
155void MucFec ::SetLocation(
int part,
int segment,
int layer ) {
160 MucFec::Initialize();
163void MucFec ::SetFirstStripID(
int firstStripID ) {
164 m_FirstStripID = firstStripID;
165 MucFec ::EncodePowerpcRecord();
166 MucFec ::SetFiredStripVect();
169void MucFec ::SetData(
unsigned short data ) {
171 m_VmeRecord = ( m_VmeRecord | m_Data );
172 MucFec ::EncodePowerpcRecord();
173 MucFec ::SetFiredStripNumber();
174 MucFec ::SetFiredStripVect();
178int MucFec ::GetFiredStripNumber() {
return m_FiredStripNumber; }
179unsigned int MucFec ::GetPowerpcRecord() {
return m_PowerpcRecord; }
180vector<int>* MucFec ::GetFiredStripVect() {
return &m_FiredStripVect; }
182string MucFec ::GetBin(
unsigned int record ) {
183 const int SIZE =
sizeof(
unsigned int ) * 8;
186 unsigned int temp = 0;
187 for (
int i = 0; i < SIZE; i++ )
189 temp = record >> SIZE - i - 1;
190 Bin += ( temp & 1 ) ?
"1" :
"0";
196string MucFec ::GetBin(
unsigned short record ) {
197 const int SIZE =
sizeof(
unsigned short ) * 8;
200 unsigned short temp = 0;
201 for (
int i = 0; i < SIZE; i++ )
203 temp = record >> SIZE - i - 1;
204 Bin += ( temp & 1 ) ?
"1" :
"0";
string GetBin(unsigned int record)