BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
MdcBuilder Class Reference

#include <MdcBuilder.h>

Inheritance diagram for MdcBuilder:

Public Member Functions

 MdcBuilder ()
virtual ~MdcBuilder ()
virtual StatusCode initialize (string &initFile)
virtual uint32_t getTEID (uint32_t reid)
virtual uint32_t getREID (uint32_t teid)
virtual void unPack (uint32_t reDigi, uint32_t &REId, uint32_t &TEData, uint32_t &overFlow, uint32_t &TorQ)
virtual StatusCode pack (MdcDigiCol *digiCol, WriteRawEvent *&re)
 MdcBuilder ()
virtual ~MdcBuilder ()
virtual StatusCode initialize (string &initFile)
virtual uint32_t getTEID (uint32_t reid)
virtual uint32_t getREID (uint32_t teid)
virtual void unPack (uint32_t reDigi, uint32_t &REId, uint32_t &TEData, uint32_t &overFlow, uint32_t &TorQ)
virtual StatusCode pack (MdcDigiCol *digiCol, WriteRawEvent *&re)
 MdcBuilder ()
virtual ~MdcBuilder ()
virtual StatusCode initialize (string &initFile)
virtual uint32_t getTEID (uint32_t reid)
virtual uint32_t getREID (uint32_t teid)
virtual void unPack (uint32_t reDigi, uint32_t &REId, uint32_t &TEData, uint32_t &overFlow, uint32_t &TorQ)
virtual StatusCode pack (MdcDigiCol *digiCol, WriteRawEvent *&re)

Additional Inherited Members

Public Types inherited from Builder
typedef std::map< uint32_t, uint32_t > TE2REMAP
typedef std::map< uint32_t, uint32_t > TE2REMAP
typedef std::map< uint32_t, uint32_t > TE2REMAP
Static Public Member Functions inherited from Builder
static bool expect (ifstream &f, string msg, string fname)
static bool expectInt (ifstream &f, string msg, string fname, uint32_t &val1, uint32_t &val2)
static bool expectLong (ifstream &f, string msg, string fname, uint64_t &val)
static bool find (ifstream &f, string msg, string fname)
static bool expect (ifstream &f, string msg, string fname)
static bool expectInt (ifstream &f, string msg, string fname, uint32_t &val1, uint32_t &val2)
static bool expectLong (ifstream &f, string msg, string fname, uint64_t &val)
static bool find (ifstream &f, string msg, string fname)
static bool expect (ifstream &f, string msg, string fname)
static bool expectInt (ifstream &f, string msg, string fname, uint32_t &val1, uint32_t &val2)
static bool expectLong (ifstream &f, string msg, string fname, uint64_t &val)
static bool find (ifstream &f, string msg, string fname)
Protected Member Functions inherited from Builder
 Builder ()
virtual ~Builder ()
void append2event (WriteRawEvent *&re, uint32_t source_id, uint32_t size, uint32_t shift=0)
 Builder ()
virtual ~Builder ()
void append2event (WriteRawEvent *&re, uint32_t source_id, uint32_t size, uint32_t shift=0)
 Builder ()
virtual ~Builder ()
void append2event (WriteRawEvent *&re, uint32_t source_id, uint32_t size, uint32_t shift=0)
Protected Attributes inherited from Builder
uint32_t * m_buf
uint32_t m_status
Static Protected Attributes inherited from Builder
static string m_confFile

Detailed Description

Constructor & Destructor Documentation

◆ MdcBuilder() [1/3]

MdcBuilder::MdcBuilder ( )

Definition at line 7 of file MdcBuilder.cxx.

7 : Builder() {
8 // set vector size (2^14) and initialize to -1
9 m_re2te = new uint32_t[16384]; // we have 2^14 different REID
10 memset( (void*)m_re2te, 0xFF, 16384 * sizeof( uint32_t ) );
11
13}
Builder()
Definition Builder.cxx:11
virtual StatusCode initialize(string &initFile)

◆ ~MdcBuilder() [1/3]

MdcBuilder::~MdcBuilder ( )
virtual

Definition at line 15 of file MdcBuilder.cxx.

15{ delete m_re2te; }

◆ MdcBuilder() [2/3]

MdcBuilder::MdcBuilder ( )

◆ ~MdcBuilder() [2/3]

virtual MdcBuilder::~MdcBuilder ( )
virtual

◆ MdcBuilder() [3/3]

MdcBuilder::MdcBuilder ( )

◆ ~MdcBuilder() [3/3]

virtual MdcBuilder::~MdcBuilder ( )
virtual

Member Function Documentation

◆ getREID() [1/3]

uint32_t MdcBuilder::getREID ( uint32_t teid)
virtual

Implements Builder.

Definition at line 184 of file MdcBuilder.cxx.

184 {
185 TE2REMAP::iterator itr = m_te2reMap.find( teid );
186
187 if ( itr == m_te2reMap.end() )
188 {
189 cout << "wrong teid in mdc " << teid << endl;
190 exit( 8 );
191 }
192
193 return itr->second;
194}

Referenced by pack().

◆ getREID() [2/3]

virtual uint32_t MdcBuilder::getREID ( uint32_t teid)
virtual

Implements Builder.

◆ getREID() [3/3]

virtual uint32_t MdcBuilder::getREID ( uint32_t teid)
virtual

Implements Builder.

◆ getTEID() [1/3]

virtual uint32_t MdcBuilder::getTEID ( uint32_t reid)
inlinevirtual

Implements Builder.

Definition at line 15 of file Event/RawDataCnv/include/RawDataCnv/EventManagement/MdcBuilder.h.

15{ return m_re2te[reid]; }

◆ getTEID() [2/3]

virtual uint32_t MdcBuilder::getTEID ( uint32_t reid)
inlinevirtual

Implements Builder.

Definition at line 15 of file InstallArea/x86_64-el9-gcc13-dbg/include/RawDataCnv/EventManagement/MdcBuilder.h.

15{ return m_re2te[reid]; }

◆ getTEID() [3/3]

virtual uint32_t MdcBuilder::getTEID ( uint32_t reid)
inlinevirtual

Implements Builder.

Definition at line 15 of file InstallArea/x86_64-el9-gcc13-opt/include/RawDataCnv/EventManagement/MdcBuilder.h.

15{ return m_re2te[reid]; }

◆ initialize() [1/3]

StatusCode MdcBuilder::initialize ( string & initFile)
virtual

Reimplemented from Builder.

Definition at line 88 of file MdcBuilder.cxx.

88 {
89 ifstream f;
90
91 uint32_t NRELAYERPOS, NREWIREPOS, NREEAWEPOS;
92 uint32_t NRELAYERMASK, NREWIREMASK, NREEAWEMASK;
93
94 //-----------------------------------------------------------
95 // read initFile
96 f.open( initFile.c_str() );
97
98 if ( f.bad() || !f.is_open() )
99 {
100 cerr << "Error: could not open file " << initFile << endl;
101 return StatusCode::FAILURE;
102 }
103
104 if ( !Builder::find( f, "##MdcDigiConf", initFile ) )
105 {
106 cerr << "Error: could not find '##MdcDigiConf' in file " << initFile << endl;
107 return StatusCode::FAILURE;
108 }
109
110 if ( !Builder::expect( f, "#Index,mask", initFile ) ||
111 !Builder::expectInt( f, "id", initFile, m_idIndex, m_idMask ) ||
112 !Builder::expectInt( f, "data", initFile, m_dataIndex, m_dataMask ) ||
113 !Builder::expectInt( f, "Overflow", initFile, m_overflowIndex, m_overflowMask ) ||
114 !Builder::expectInt( f, "T/Q", initFile, m_TQIndex, m_TQMask ) ||
115 !Builder::expectInt( f, "Wire", initFile, NREWIREPOS, NREWIREMASK ) ||
116 !Builder::expectInt( f, "Layer", initFile, NRELAYERPOS, NRELAYERMASK ) )
117 return StatusCode::FAILURE;
118
119 f.close();
120 //-----------------------------------------------------------
121 // Build re2te table
122 uint32_t nRELayerPos, nREWirePos, nREEaWePos;
123 uint32_t nRELayerMask, nREWireMask, nREEaWeMask;
124
125 uint32_t TELayerMax = MdcID::getAXIAL_LAYER_MAX() + MdcID::getSTEREO_LAYER_MAX() + 1;
126 uint32_t TEWireMax = MdcID::getAXIAL_WIRE_MAX();
127
128 int i = 0;
129
130 uint32_t layer, wire;
131
132 nRELayerPos = NRELAYERPOS;
133 nREWirePos = NREWIREPOS;
134 nRELayerMask = NRELAYERMASK;
135 nREWireMask = NREWIREMASK;
136
137 for ( uint32_t TELayer = 0; TELayer <= TELayerMax; TELayer++ )
138 {
139 layer = TELayer + 1;
140 // After Layer 32, there are changes in positions of Layers and wires
141 if ( layer >= 0x20 )
142 {
143 layer = layer + i;
144 i++;
145 nRELayerMask = nRELayerMask & 0xFFFFFBFF;
146 nREWireMask = nREWireMask | 0x00000400;
147 TEWireMax = MdcID::getAXIAL_WIRE_MAX();
148 }
149 else
150 {
151 // When Layer is less than 32, the number of wire is less than 240 to prevent overflow;
152 TEWireMax = 240;
153 }
154
155 for ( uint32_t TEWire = 0; TEWire <= TEWireMax; TEWire++ )
156 {
157 wire = TEWire + 1;
158 uint32_t reid = ( ( ( layer << nRELayerPos ) & nRELayerMask ) |
159 ( ( wire << nREWirePos ) & nREWireMask ) ) >>
160 2;
161 // cout << "TELayer" << hex << TELayer;
162 // cout << " TEWire" << hex << TEWire;
163 // cout << " layer" << hex << layer;
164 // cout << " wire" << hex << wire;
165
166 uint32_t teid = MdcID::getIntID( TELayer, TEWire );
167
168 if ( reid >= 16384 )
169 {
170 cerr << "Error: REID overflow !" << reid << endl;
171 exit( 8 );
172 }
173 // cout << " reid" << hex << reid;
174 // cout << " teid" << hex << teid << endl;
175 m_re2te[reid] = teid;
176 m_te2reMap.insert( TE2REMAP::value_type( teid, reid ) );
177 }
178 }
179
180 // return StatusCode::SUCCESSful initialization
181 return StatusCode::SUCCESS;
182}
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
static bool find(ifstream &f, string msg, string fname)
Definition Builder.cxx:52
static bool expect(ifstream &f, string msg, string fname)
Definition Builder.cxx:25
static bool expectInt(ifstream &f, string msg, string fname, uint32_t &val1, uint32_t &val2)
Definition Builder.cxx:39
static value_type getAXIAL_LAYER_MAX()
Definition MdcID.cxx:110
static value_type getAXIAL_WIRE_MAX()
Definition MdcID.cxx:112
static value_type getIntID(unsigned int wireType, unsigned int layer, unsigned int wire)
Definition MdcID.cxx:102
static value_type getSTEREO_LAYER_MAX()
Definition MdcID.cxx:111

Referenced by MdcBuilder().

◆ initialize() [2/3]

virtual StatusCode MdcBuilder::initialize ( string & initFile)
virtual

Reimplemented from Builder.

◆ initialize() [3/3]

virtual StatusCode MdcBuilder::initialize ( string & initFile)
virtual

Reimplemented from Builder.

◆ pack() [1/3]

StatusCode MdcBuilder::pack ( MdcDigiCol * digiCol,
WriteRawEvent *& re )
virtual

Definition at line 30 of file MdcBuilder.cxx.

30 {
31 if ( digiCol == 0 )
32 {
33 cerr << "MdcBuilder::pack can't get digiCol" << endl;
34 return StatusCode::FAILURE;
35 }
36
37 uint32_t size = 0;
38 uint32_t teid = 0, tetdc = 0, teadc = 0, reid = 0, redigi = 0, overflow = 0;
39
40 MdcDigiCol::const_iterator pMdcDigi = digiCol->begin();
41 for ( pMdcDigi; pMdcDigi != digiCol->end(); pMdcDigi++ )
42 {
43 // zoujh+++++++++++, be consistent with DAQ raw data
44 Identifier id = ( *pMdcDigi )->identify();
45 int layer = MdcID::layer( id ), wire = MdcID::wire( id );
46 if ( layer == 20 && wire < 8 ) { layer = 42; }
47 else if ( layer == 42 && wire < 8 ) { layer = 20; }
48 else if ( layer == 40 )
49 {
50 if ( wire >= 200 && wire < 208 ) { wire += 8; }
51 else if ( wire >= 208 && wire < 216 ) { wire -= 8; }
52 }
53 // teid = (*pMdcDigi)->getIntId();
54 teid = MdcID::getIntID( layer, wire );
55 // zoujh-----------
56 reid = getREID( teid );
57 tetdc = ( *pMdcDigi )->getTimeChannel();
58 teadc = ( *pMdcDigi )->getChargeChannel();
59 // overflow
60 uint32_t overflow_tmp = ( *pMdcDigi )->getOverflow();
61 // set tdc
62 if ( tetdc != 0x7FFFFFFF )
63 {
64 overflow = ( ( tetdc > m_dataMask ) ? 1 : 0 ) | ( overflow_tmp & 1 );
65 redigi = ( tetdc & m_dataMask ) | ( ( reid << m_idIndex ) & m_idMask ) |
66 ( ( overflow << m_overflowIndex ) & m_overflowMask ) |
67 ( ( 0 << m_TQIndex ) & m_TQMask );
68 m_buf[size++] = redigi;
69 }
70 // set adc
71 if ( teadc != 0x7FFFFFFF )
72 {
73 overflow = ( ( teadc > m_dataMask ) ? 1 : 0 ) | ( ( overflow_tmp >> 1 ) & 1 );
74 redigi = ( teadc & m_dataMask ) | ( ( reid << m_idIndex ) & m_idMask ) |
75 ( ( overflow << m_overflowIndex ) & m_overflowMask ) |
76 ( ( 1 << m_TQIndex ) & m_TQMask );
77 m_buf[size++] = redigi;
78 }
79 }
80
81 append2event( re, 0xa10000, size );
82
83 return StatusCode::SUCCESS;
84}
void append2event(WriteRawEvent *&re, uint32_t source_id, uint32_t size, uint32_t shift=0)
Definition Builder.cxx:69
virtual uint32_t getREID(uint32_t teid)
static int layer(const Identifier &id)
Values of different levels (failure returns 0).
Definition MdcID.cxx:47
static int wire(const Identifier &id)
Definition MdcID.cxx:52

◆ pack() [2/3]

virtual StatusCode MdcBuilder::pack ( MdcDigiCol * digiCol,
WriteRawEvent *& re )
virtual

◆ pack() [3/3]

virtual StatusCode MdcBuilder::pack ( MdcDigiCol * digiCol,
WriteRawEvent *& re )
virtual

◆ unPack() [1/3]

void MdcBuilder::unPack ( uint32_t reDigi,
uint32_t & REId,
uint32_t & TEData,
uint32_t & overFlow,
uint32_t & TorQ )
virtual

Definition at line 17 of file MdcBuilder.cxx.

18 {
19 REId = ( reDigi & m_idMask ) >> m_idIndex;
20 // cout << "MdcBuilder::unPack reDigi: 0x" << hex << reDigi << " reid: 0x" << reid << dec
21 // << endl;
22 TEData = reDigi & m_dataMask;
23 overFlow = ( reDigi & m_overflowMask ) >> m_overflowIndex;
24 TorQ = ( reDigi & m_TQMask ) >> m_TQIndex;
25 // cout << "reid" << hex << reid << endl;
26 // cout << "teid" << hex << TEId << endl;
27 return;
28}

◆ unPack() [2/3]

virtual void MdcBuilder::unPack ( uint32_t reDigi,
uint32_t & REId,
uint32_t & TEData,
uint32_t & overFlow,
uint32_t & TorQ )
virtual

◆ unPack() [3/3]

virtual void MdcBuilder::unPack ( uint32_t reDigi,
uint32_t & REId,
uint32_t & TEData,
uint32_t & overFlow,
uint32_t & TorQ )
virtual

The documentation for this class was generated from the following files: