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

#include <EmcBuilder.h>

Inheritance diagram for EmcBuilder:

Public Member Functions

 EmcBuilder ()
virtual ~EmcBuilder ()
StatusCode initialize (string &initFile)
uint32_t getTEID (uint32_t reid)
uint32_t getREID (uint32_t teid)
void unPack (uint32_t reDigi, uint32_t &REId, uint32_t &TETDC, uint32_t &TEADC, uint32_t &measure)
StatusCode pack (EmcDigiCol *digiCol, WriteRawEvent *&re)
 EmcBuilder ()
virtual ~EmcBuilder ()
StatusCode initialize (string &initFile)
uint32_t getTEID (uint32_t reid)
uint32_t getREID (uint32_t teid)
void unPack (uint32_t reDigi, uint32_t &REId, uint32_t &TETDC, uint32_t &TEADC, uint32_t &measure)
StatusCode pack (EmcDigiCol *digiCol, WriteRawEvent *&re)
 EmcBuilder ()
virtual ~EmcBuilder ()
StatusCode initialize (string &initFile)
uint32_t getTEID (uint32_t reid)
uint32_t getREID (uint32_t teid)
void unPack (uint32_t reDigi, uint32_t &REId, uint32_t &TETDC, uint32_t &TEADC, uint32_t &measure)
StatusCode pack (EmcDigiCol *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

◆ EmcBuilder() [1/3]

EmcBuilder::EmcBuilder ( )

Definition at line 7 of file EmcBuilder.cxx.

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

◆ ~EmcBuilder() [1/3]

EmcBuilder::~EmcBuilder ( )
virtual

Definition at line 15 of file EmcBuilder.cxx.

15{ delete m_re2te; }

◆ EmcBuilder() [2/3]

EmcBuilder::EmcBuilder ( )

◆ ~EmcBuilder() [2/3]

virtual EmcBuilder::~EmcBuilder ( )
virtual

◆ EmcBuilder() [3/3]

EmcBuilder::EmcBuilder ( )

◆ ~EmcBuilder() [3/3]

virtual EmcBuilder::~EmcBuilder ( )
virtual

Member Function Documentation

◆ getREID() [1/3]

uint32_t EmcBuilder::getREID ( uint32_t teid)
virtual

Implements Builder.

Definition at line 173 of file EmcBuilder.cxx.

173 {
174 TE2REMAP::iterator itr = m_te2reMap.find( teid );
175
176 if ( itr == m_te2reMap.end() )
177 {
178 cout << "wrong teid in emc " << teid << endl;
179 exit( 8 );
180 }
181
182 return itr->second;
183}

Referenced by pack().

◆ getREID() [2/3]

uint32_t EmcBuilder::getREID ( uint32_t teid)
virtual

Implements Builder.

◆ getREID() [3/3]

uint32_t EmcBuilder::getREID ( uint32_t teid)
virtual

Implements Builder.

◆ getTEID() [1/3]

uint32_t EmcBuilder::getTEID ( uint32_t reid)
inlinevirtual

Implements Builder.

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

15{ return m_re2te[reid]; }

◆ getTEID() [2/3]

uint32_t EmcBuilder::getTEID ( uint32_t reid)
inlinevirtual

Implements Builder.

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

15{ return m_re2te[reid]; }

◆ getTEID() [3/3]

uint32_t EmcBuilder::getTEID ( uint32_t reid)
inlinevirtual

Implements Builder.

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

15{ return m_re2te[reid]; }

◆ initialize() [1/3]

StatusCode EmcBuilder::initialize ( string & initFile)
virtual

Reimplemented from Builder.

Definition at line 62 of file EmcBuilder.cxx.

62 {
63 ifstream f;
64
65 uint32_t nREThetaPos, nREPhiPos, nREEaWePos;
66 uint32_t nREThetaMask, nREPhiMask, nREEaWeMask;
67
68 //-----------------------------------------------------------
69 // read initFile
70 f.open( initFile.c_str() );
71
72 if ( f.bad() )
73 {
74 cerr << "Error: could not open file " << initFile << endl;
75 return StatusCode::FAILURE;
76 }
77
78 if ( !Builder::find( f, "##EmcDigiConf", initFile ) )
79 {
80 cerr << "Error: could not find '##EmcDigiConf' in file " << initFile << endl;
81 return StatusCode::FAILURE;
82 }
83
84 if ( !Builder::expect( f, "#Index,mask", initFile ) ||
85 !Builder::expectInt( f, "id", initFile, m_idIndex, m_idMask ) ||
86 !Builder::expectInt( f, "tdc", initFile, m_tdcIndex, m_tdcMask ) ||
87 !Builder::expectInt( f, "measure", initFile, m_measureIndex, m_measureMask ) ||
88 !Builder::expectInt( f, "adc", initFile, m_adcIndex, m_adcMask ) ||
89 !Builder::expectInt( f, "Phi", initFile, nREPhiPos, nREPhiMask ) ||
90 !Builder::expectInt( f, "Theta", initFile, nREThetaPos, nREThetaMask ) ||
91 !Builder::expectInt( f, "EaWe", initFile, nREEaWePos, nREEaWeMask ) )
92 return StatusCode::FAILURE;
93
94 f.close();
95
96 //-----------------------------------------------------------
97 // Build re2te table
98 for ( uint32_t barrel_ec_eawe = EmcID::getBARREL_EC_MIN();
99 barrel_ec_eawe <= EmcID::getBARREL_EC_MAX(); barrel_ec_eawe++ )
100 {
101 uint32_t TEthetaMax, TEphiMax;
102 uint32_t TEthetaMin, TEphiMin;
103 uint32_t eawe = 0, theta = 0, phi = 0;
104 if ( barrel_ec_eawe == EmcID::getBARREL() )
105 {
106 // it is BARREL
107 TEthetaMax = EmcID::getTHETA_BARREL_MAX(); // 43
108 TEthetaMin = EmcID::getTHETA_BARREL_MIN(); // 0
109 }
110 else
111 {
112 // it is ease and west ENDCAP
113 TEthetaMax = EmcID::getTHETA_ENDCAP_MAX(); // 5
114 TEthetaMin = EmcID::getTHETA_ENDCAP_MIN(); // 0
115 if ( barrel_ec_eawe == EmcID::getBARREL_EC_MIN() ) eawe = 0; // east
116 else eawe = 1; // west
117 }
118 for ( uint32_t TEtheta = TEthetaMin; TEtheta <= TEthetaMax; TEtheta++ )
119 {
120 if ( barrel_ec_eawe == EmcID::getBARREL() )
121 {
122 // it is BARREL
123 if ( TEtheta <= EmcID::getTHETA_BARREL_MAX() / 2 )
124 {
125 eawe = 0; // east
126 theta = EmcID::getTHETA_BARREL_MAX() / 2 + 1 - TEtheta; // 0-21=>22-1
127 }
128 else
129 {
130 eawe = 1; // west
131 theta = TEtheta - EmcID::getTHETA_BARREL_MAX() / 2; // 22-43=>1-22
132 }
133 TEphiMax = EmcID::getPHI_BARREL_MAX(); // 119
134 TEphiMin = EmcID::getPHI_BARREL_MIN(); // 0
135 }
136 else
137 {
138 // it is ease and west ENDCAP
139 theta = TEtheta + EmcID::getTHETA_BARREL_MAX() / 2 + 2;
140 TEphiMax = EmcID::getPHI_ENDCAP_MAX( TEtheta ); // 64,80,96
141 TEphiMin = EmcID::getPHI_ENDCAP_MIN();
142 }
143
144 for ( uint32_t TEphi = TEphiMin; TEphi <= TEphiMax; TEphi++ )
145 {
146 phi = TEphi + 1;
147 // cout << "eawe" << hex << eawe <<endl;
148 // cout << "__FILE__ theta " << theta << "phi " << phi << endl;
149 uint32_t reid = ( ( eawe << nREEaWePos ) & nREEaWeMask ) |
150 ( ( theta << nREThetaPos ) & nREThetaMask ) |
151 ( ( phi << nREPhiPos ) & nREPhiMask );
152 uint32_t teid = EmcID::getIntID( barrel_ec_eawe, TEtheta, TEphi );
153 // cout << "barrel_ec_eawe" << barrel_ec_eawe <<endl;
154 // cout << "TEtheta" << hex << TEtheta << endl;
155 // cout << "TEphi" << hex << TEphi <<endl;
156
157 if ( reid >= 8192 )
158 {
159 cerr << "Error: REID overflow !" << reid << endl;
160 exit( 8 );
161 }
162 // cout << "reid" << hex << reid << endl;
163 // cout << "teid" << hex << teid << endl;
164 m_re2te[reid] = teid;
165 m_te2reMap.insert( TE2REMAP::value_type( teid, reid ) );
166 }
167 }
168 }
169 // return StatusCode::SUCCESSful initialization
170 return StatusCode::SUCCESS;
171}
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 unsigned int getPHI_BARREL_MAX()
Definition EmcID.cxx:83
static unsigned int getBARREL_EC_MIN()
Definition EmcID.cxx:93
static unsigned int getBARREL_EC_MAX()
Definition EmcID.cxx:92
static unsigned int getTHETA_ENDCAP_MIN()
Definition EmcID.cxx:82
static unsigned int getTHETA_ENDCAP_MAX()
Definition EmcID.cxx:81
static unsigned int getBARREL()
Definition EmcID.cxx:97
static unsigned int getTHETA_BARREL_MIN()
Definition EmcID.cxx:80
static unsigned int getIntID(const unsigned int barrel_ec, const unsigned int theta_module, const unsigned int phi_module)
Definition EmcID.cxx:71
static unsigned int getTHETA_BARREL_MAX()
Definition EmcID.cxx:79
static unsigned int getPHI_ENDCAP_MAX(const unsigned int theta)
Definition EmcID.cxx:85
static unsigned int getPHI_ENDCAP_MIN()
Definition EmcID.cxx:91
static unsigned int getPHI_BARREL_MIN()
Definition EmcID.cxx:84

Referenced by EmcBuilder().

◆ initialize() [2/3]

StatusCode EmcBuilder::initialize ( string & initFile)
virtual

Reimplemented from Builder.

◆ initialize() [3/3]

StatusCode EmcBuilder::initialize ( string & initFile)
virtual

Reimplemented from Builder.

◆ pack() [1/3]

StatusCode EmcBuilder::pack ( EmcDigiCol * digiCol,
WriteRawEvent *& re )

Definition at line 27 of file EmcBuilder.cxx.

27 {
28 if ( digiCol == 0 )
29 {
30 cerr << "EmcBuilder::pack can't get digiCol" << endl;
31 return StatusCode::FAILURE;
32 }
33
34 uint32_t size = 0;
35 uint32_t teid = 0, tetdc = 0, teadc = 0, reid = 0, redigi = 0, measure = 0;
36
37 EmcDigiCol::const_iterator pEmcDigi = digiCol->begin();
38 for ( pEmcDigi; pEmcDigi != digiCol->end(); pEmcDigi++ )
39 {
40 teid = ( *pEmcDigi )->getIntId();
41 reid = getREID( teid );
42 tetdc = ( *pEmcDigi )->getTimeChannel();
43 teadc = ( *pEmcDigi )->getChargeChannel();
44 measure = ( *pEmcDigi )->getMeasure();
45
46 // if negative energy, don't record
47 if ( teadc & 0x80000000 ) continue;
48 // set ...
49 redigi = ( ( reid << m_idIndex ) & m_idMask ) | ( ( tetdc << m_tdcIndex ) & m_tdcMask ) |
50 ( ( teadc << m_adcIndex ) & m_adcMask ) |
51 ( ( measure << m_measureIndex ) & m_measureMask );
52 m_buf[size++] = redigi;
53 }
54
55 append2event( re, 0xa30000, size );
56
57 return StatusCode::SUCCESS;
58}
void append2event(WriteRawEvent *&re, uint32_t source_id, uint32_t size, uint32_t shift=0)
Definition Builder.cxx:69
uint32_t getREID(uint32_t teid)

◆ pack() [2/3]

StatusCode EmcBuilder::pack ( EmcDigiCol * digiCol,
WriteRawEvent *& re )

◆ pack() [3/3]

StatusCode EmcBuilder::pack ( EmcDigiCol * digiCol,
WriteRawEvent *& re )

◆ unPack() [1/3]

void EmcBuilder::unPack ( uint32_t reDigi,
uint32_t & REId,
uint32_t & TETDC,
uint32_t & TEADC,
uint32_t & measure )

Definition at line 17 of file EmcBuilder.cxx.

18 {
19 REId = ( reDigi & m_idMask ) >> m_idIndex;
20 TETDC = ( reDigi & m_tdcMask ) >> m_tdcIndex;
21 TEADC = ( reDigi & m_adcMask ) >> m_adcIndex;
22 measure = ( reDigi & m_measureMask ) >> m_measureIndex;
23
24 return;
25}

◆ unPack() [2/3]

void EmcBuilder::unPack ( uint32_t reDigi,
uint32_t & REId,
uint32_t & TETDC,
uint32_t & TEADC,
uint32_t & measure )

◆ unPack() [3/3]

void EmcBuilder::unPack ( uint32_t reDigi,
uint32_t & REId,
uint32_t & TETDC,
uint32_t & TEADC,
uint32_t & measure )

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