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

#include <TofConverter.h>

Public Member Functions

StatusCode convert (const BufferHolder &src, TofDigiCol *des, LumiDigiCol *des2=0)
StatusCode convert (const BufferHolder &tof, const BufferHolder &etf, TofDigiCol *des, LumiDigiCol *des2=0)
StatusCode convert (TofDigiCol *src, WriteRawEvent *&des)
StatusCode convert (const BufferHolder &src, TofDigiCol *des, LumiDigiCol *des2=0)
StatusCode convert (const BufferHolder &tof, const BufferHolder &etf, TofDigiCol *des, LumiDigiCol *des2=0)
StatusCode convert (TofDigiCol *src, WriteRawEvent *&des)
StatusCode convert (const BufferHolder &src, TofDigiCol *des, LumiDigiCol *des2=0)
StatusCode convert (const BufferHolder &tof, const BufferHolder &etf, TofDigiCol *des, LumiDigiCol *des2=0)
StatusCode convert (TofDigiCol *src, WriteRawEvent *&des)

Static Public Member Functions

static TofConverterinstance ()
static void destroy ()
static TofConverterinstance ()
static void destroy ()
static TofConverterinstance ()
static void destroy ()

Detailed Description

Member Function Documentation

◆ convert() [1/9]

StatusCode TofConverter::convert ( const BufferHolder & src,
TofDigiCol * des,
LumiDigiCol * des2 = 0 )

Definition at line 20 of file TofConverter.cxx.

21 {
22 BufferHolder tmp;
23 return this->convert( src, tmp, des, des2 );
24}
StatusCode convert(const BufferHolder &src, TofDigiCol *des, LumiDigiCol *des2=0)

Referenced by convert().

◆ convert() [2/9]

StatusCode TofConverter::convert ( const BufferHolder & src,
TofDigiCol * des,
LumiDigiCol * des2 = 0 )

◆ convert() [3/9]

StatusCode TofConverter::convert ( const BufferHolder & src,
TofDigiCol * des,
LumiDigiCol * des2 = 0 )

◆ convert() [4/9]

StatusCode TofConverter::convert ( const BufferHolder & tof,
const BufferHolder & etf,
TofDigiCol * des,
LumiDigiCol * des2 = 0 )

Definition at line 26 of file TofConverter.cxx.

27 {
28 uint32_t REId, TEId, TEData, TEOverflow, TETorQ;
29 uint32_t n1buf = tof.nBuf();
30 uint32_t n2buf = etf.nBuf();
31 uint32_t nbuf = n1buf + n2buf;
32
33 TofDigi* tofDigi;
34 typedef std::multimap<uint32_t, TofDigi*>::iterator my_iter;
35 std::multimap<uint32_t, TofDigi*> mapIdData;
36 my_iter it;
37
38 for ( uint32_t i = 0; i < nbuf; ++i )
39 {
40 bool isTof = ( i < n1buf );
41 const BufferHolder& rBH = isTof ? tof : etf;
42 uint32_t ii = isTof ? i : ( i - n1buf );
43 uint32_t* buf = rBH( ii );
44 uint32_t bufSize = rBH.bufSize( ii );
45 for ( uint32_t j = 0; j < bufSize; ++j )
46 {
47 if ( isTof )
48 {
49 m_builder.unPack( buf[j], REId, TEData, TEOverflow, TETorQ );
50 TEId = m_builder.getTEID( REId );
51 }
52 else
53 { // ETF
54 this->unPackETF( buf[j], TEId, TEData, TEOverflow, TETorQ );
55 }
56
57 if ( TEId == 0xFFFFFFFF )
58 {
59 uint32_t data_unit = buf[j];
60 if ( ( data_unit >> 25 ) == 0x7F )
61 {
62 tofDigi = new TofDigi( Identifier( 0xFFFFFFFF ), 0x7FFFFFFF, 0x7FFFFFFF );
63 tofDigi->setOverflow( data_unit );
64 des->push_back( tofDigi );
65 }
66 continue;
67 }
68
69 uint32_t count = mapIdData.count( TEId );
70
71 if ( count == 0 )
72 {
73 if ( TETorQ )
74 { // Q
75 tofDigi = new TofDigi( Identifier( TEId ), 0x7FFFFFFF, TEData );
76 tofDigi->setOverflow( 0x10 | ( TEOverflow << 1 ) );
77 }
78 else
79 { // T
80 tofDigi = new TofDigi( Identifier( TEId ), TEData, 0x7FFFFFFF );
81 tofDigi->setOverflow( 0x20 | TEOverflow );
82 }
83 mapIdData.insert( make_pair( TEId, tofDigi ) );
84 }
85 else
86 {
87 pair<my_iter, my_iter> range = mapIdData.equal_range( TEId );
88 it = range.first;
89 tofDigi = it->second;
90 if ( TETorQ )
91 { // Q
92 if ( tofDigi->getChargeChannel() == 0x7FFFFFFF )
93 { // matched Q and T, first Q
94 tofDigi->setChargeChannel( TEData );
95 tofDigi->setOverflow( ( tofDigi->getOverflow() | ( TEOverflow << 1 ) ) & 0xF );
96 while ( ( ++it ) != range.second )
97 { // multiT
98 tofDigi = it->second;
99 tofDigi->setOverflow( tofDigi->getOverflow() & 0xF );
100 }
101 }
102 else
103 { // multiQ
104 uint32_t flag = ( tofDigi->getOverflow() & 0x3C ) | 8;
105 while ( it != range.second )
106 {
107 tofDigi = ( it++ )->second;
108 tofDigi->setOverflow( ( tofDigi->getOverflow() & 0x3 ) | flag );
109 }
110 tofDigi = new TofDigi( Identifier( TEId ), 0x7FFFFFFF, TEData );
111 tofDigi->setOverflow( flag | ( TEOverflow << 1 ) );
112 mapIdData.insert( make_pair( TEId, tofDigi ) );
113 }
114 }
115 else
116 { // T
117 if ( tofDigi->getTimeChannel() == 0x7FFFFFFF )
118 { // matched T and Q, firstT
119 tofDigi->setTimeChannel( TEData );
120 tofDigi->setOverflow( ( tofDigi->getOverflow() | TEOverflow ) & 0xF );
121 while ( ( ++it ) != range.second )
122 { // multiQ
123 tofDigi = it->second;
124 tofDigi->setOverflow( tofDigi->getOverflow() & 0xF );
125 }
126 }
127 else
128 { // multiT
129 uint32_t flag = ( tofDigi->getOverflow() & 0x3C ) | 4;
130 while ( it != range.second )
131 {
132 tofDigi = ( it++ )->second;
133 tofDigi->setOverflow( ( tofDigi->getOverflow() & 0x3 ) | flag );
134 }
135 tofDigi = new TofDigi( Identifier( TEId ), TEData, 0x7FFFFFFF );
136 tofDigi->setOverflow( flag | TEOverflow );
137 mapIdData.insert( make_pair( TEId, tofDigi ) );
138 }
139 }
140 }
141 }
142 }
143
144 my_iter end = mapIdData.end();
145 for ( it = mapIdData.begin(); it != end; ++it )
146 {
147 TEId = it->first;
148 tofDigi = it->second;
149 if ( ( TEId & 0xFFFF7FFF ) != 0x20000060 ) { des->push_back( tofDigi ); }
150 // zoujh: for luminosity
151 else
152 {
153 if ( des2 != 0 ) { des2->push_back( new LumiDigi( tofDigi ) ); }
154 delete tofDigi;
155 }
156 }
157
158 return StatusCode::SUCCESS;
159}
DOUBLE_PRECISION count[3]
void setChargeChannel(const unsigned int chargeChannel)
Definition RawData.cxx:24
unsigned int getChargeChannel() const
Definition RawData.cxx:35
void setTimeChannel(const unsigned int timeChannel)
Definition RawData.cxx:21
unsigned int getTimeChannel() const
Definition RawData.cxx:32

◆ convert() [5/9]

StatusCode TofConverter::convert ( const BufferHolder & tof,
const BufferHolder & etf,
TofDigiCol * des,
LumiDigiCol * des2 = 0 )

◆ convert() [6/9]

StatusCode TofConverter::convert ( const BufferHolder & tof,
const BufferHolder & etf,
TofDigiCol * des,
LumiDigiCol * des2 = 0 )

◆ convert() [7/9]

StatusCode TofConverter::convert ( TofDigiCol * src,
WriteRawEvent *& des )

Definition at line 161 of file TofConverter.cxx.

161 {
162 return m_builder.pack( src, des );
163}

◆ convert() [8/9]

StatusCode TofConverter::convert ( TofDigiCol * src,
WriteRawEvent *& des )

◆ convert() [9/9]

StatusCode TofConverter::convert ( TofDigiCol * src,
WriteRawEvent *& des )

◆ destroy() [1/3]

void TofConverter::destroy ( )
static

Definition at line 12 of file TofConverter.cxx.

12 {
13 if ( s_instance != 0 )
14 {
15 delete s_instance;
16 s_instance = 0;
17 }
18}

Referenced by RawDataTofDigiCnv::~RawDataTofDigiCnv(), and RawEventReader::~RawEventReader().

◆ destroy() [2/3]

void TofConverter::destroy ( )
static

◆ destroy() [3/3]

void TofConverter::destroy ( )
static

◆ instance() [1/3]

TofConverter * TofConverter::instance ( )
static

Definition at line 6 of file TofConverter.cxx.

6 {
7 if ( s_instance == 0 ) { s_instance = new TofConverter(); }
8
9 return s_instance;
10}

Referenced by MixerAlg::initialize(), RawDataTofDigiCnv::initialize(), and RawEventReader::initialize().

◆ instance() [2/3]

TofConverter * TofConverter::instance ( )
static

◆ instance() [3/3]

TofConverter * TofConverter::instance ( )
static

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