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

#include <TagParser2.h>

Inheritance diagram for TagParser2:

Public Member Functions

 TagParser2 ()
 ~TagParser2 ()
StatusCode getVEntry (vector< int > &)
int getDstDataType ()
unsigned int getTagData0 ()
unsigned int getTagData1 ()
unsigned int getTagData2 ()
unsigned int getTagData3 ()
unsigned int getTagData4 ()
unsigned int getTagData5 ()
unsigned int getTagData6 ()
unsigned int getTagData7 ()
unsigned int getTagData8 ()
unsigned int getTagData9 ()
void setDstDataType (int t)
void setTagData0 (unsigned int t)
void setTagData1 (unsigned int t)
void setTagData2 (unsigned int t)
void setTagData3 (unsigned int t)
void setTagData4 (unsigned int t)
void setTagData5 (unsigned int t)
void setTagData6 (unsigned int t)
void setTagData7 (unsigned int t)
void setTagData8 (unsigned int t)
void setTagData9 (unsigned int t)
void setFileName (string name)
void setCriteria (vector< string > name)
void Tag1ToInt (unsigned int res, int &val1, int &val2, int &val3, int &val4)
void Tag2ToInt (unsigned int res, int &val1, int &val2, int &val3, int &val4, int &val5, int &val6)
vector< int > split (string str, string pattern, bool &all, bool &type)
Public Member Functions inherited from ITagParser
 ITagParser ()
 ~ITagParser ()

Detailed Description

Definition at line 15 of file TagParser2.h.

Constructor & Destructor Documentation

◆ TagParser2()

TagParser2::TagParser2 ( )

Definition at line 26 of file TagParser2.cxx.

26{}

◆ ~TagParser2()

TagParser2::~TagParser2 ( )

Definition at line 28 of file TagParser2.cxx.

28{}

Member Function Documentation

◆ getDstDataType()

int TagParser2::getDstDataType ( )
inlinevirtual

Implements ITagParser.

Definition at line 23 of file TagParser2.h.

23{ return m_dstDataType; }

◆ getTagData0()

unsigned int TagParser2::getTagData0 ( )
inlinevirtual

Implements ITagParser.

Definition at line 24 of file TagParser2.h.

24{ return m_tagData0; }

◆ getTagData1()

unsigned int TagParser2::getTagData1 ( )
inlinevirtual

Implements ITagParser.

Definition at line 25 of file TagParser2.h.

25{ return m_tagData1; }

◆ getTagData2()

unsigned int TagParser2::getTagData2 ( )
inlinevirtual

Implements ITagParser.

Definition at line 26 of file TagParser2.h.

26{ return m_tagData2; }

◆ getTagData3()

unsigned int TagParser2::getTagData3 ( )
inlinevirtual

Implements ITagParser.

Definition at line 27 of file TagParser2.h.

27{ return m_tagData3; }

◆ getTagData4()

unsigned int TagParser2::getTagData4 ( )
inlinevirtual

Implements ITagParser.

Definition at line 28 of file TagParser2.h.

28{ return m_tagData4; }

◆ getTagData5()

unsigned int TagParser2::getTagData5 ( )
inlinevirtual

Implements ITagParser.

Definition at line 29 of file TagParser2.h.

29{ return m_tagData5; }

◆ getTagData6()

unsigned int TagParser2::getTagData6 ( )
inlinevirtual

Implements ITagParser.

Definition at line 30 of file TagParser2.h.

30{ return m_tagData6; }

◆ getTagData7()

unsigned int TagParser2::getTagData7 ( )
inlinevirtual

Implements ITagParser.

Definition at line 31 of file TagParser2.h.

31{ return m_tagData7; }

◆ getTagData8()

unsigned int TagParser2::getTagData8 ( )
inlinevirtual

Implements ITagParser.

Definition at line 32 of file TagParser2.h.

32{ return m_tagData8; }

◆ getTagData9()

unsigned int TagParser2::getTagData9 ( )
inlinevirtual

Implements ITagParser.

Definition at line 33 of file TagParser2.h.

33{ return m_tagData9; }

◆ getVEntry()

StatusCode TagParser2::getVEntry ( std::vector< int > & ventry)
virtual

Implements ITagParser.

Definition at line 30 of file TagParser2.cxx.

30 {
31
32 std::map<int, unsigned int> Ds_modeTag, D0_modeTag, Dp_modeTag;
33 Ds_modeTag[400] = 1;
34 Ds_modeTag[401] = 0;
35 Ds_modeTag[402] = 2;
36 Ds_modeTag[403] = 13;
37 Ds_modeTag[404] = 3;
38 Ds_modeTag[405] = 4;
39 Ds_modeTag[406] = 5;
40 Ds_modeTag[407] = 14;
41 Ds_modeTag[420] = 28;
42 Ds_modeTag[421] = 6;
43 Ds_modeTag[422] = 24;
44 Ds_modeTag[423] = 25;
45 Ds_modeTag[424] = 26;
46 Ds_modeTag[425] = 27;
47 Ds_modeTag[440] = 7;
48 Ds_modeTag[441] = 8;
49 Ds_modeTag[442] = 20;
50 Ds_modeTag[450] = 21;
51 Ds_modeTag[451] = 22;
52 Ds_modeTag[452] = 23;
53 Ds_modeTag[460] = 9;
54 Ds_modeTag[461] = 15;
55 Ds_modeTag[470] = 16;
56 Ds_modeTag[471] = 17;
57 Ds_modeTag[480] = 10;
58 Ds_modeTag[481] = 11;
59 Ds_modeTag[500] = 29;
60 Ds_modeTag[501] = 18;
61 Ds_modeTag[502] = 12;
62 Ds_modeTag[503] = 19;
63 Ds_modeTag[504] = 30;
64
65 D0_modeTag[0] = 0;
66 D0_modeTag[1] = 1;
67 D0_modeTag[2] = 2;
68 D0_modeTag[3] = 3;
69 D0_modeTag[4] = 4;
70 D0_modeTag[5] = 5;
71 D0_modeTag[6] = 6;
72 D0_modeTag[7] = 7;
73 D0_modeTag[8] = 8;
74 D0_modeTag[9] = 8;
75 D0_modeTag[10] = 9;
76 D0_modeTag[50] = 10;
77 D0_modeTag[51] = 11;
78 D0_modeTag[100] = 12;
79 D0_modeTag[101] = 13;
80 D0_modeTag[102] = 14;
81 D0_modeTag[103] = 15;
82 D0_modeTag[104] = 16;
83 D0_modeTag[105] = 16;
84 D0_modeTag[106] = 17;
85 D0_modeTag[107] = 16;
86 D0_modeTag[108] = 16;
87 D0_modeTag[109] = 18;
88 D0_modeTag[110] = 19;
89 D0_modeTag[111] = 20;
90 D0_modeTag[112] = 16;
91 D0_modeTag[113] = 21;
92 D0_modeTag[114] = 22;
93 D0_modeTag[115] = 23;
94 D0_modeTag[116] = 24;
95 D0_modeTag[117] = 25;
96 D0_modeTag[118] = 26;
97 D0_modeTag[119] = 27;
98 D0_modeTag[120] = 28;
99 D0_modeTag[121] = 29;
100 D0_modeTag[122] = 30;
101 D0_modeTag[123] = 30;
102 D0_modeTag[124] = 30;
103 D0_modeTag[125] = 30;
104 D0_modeTag[126] = 30;
105 D0_modeTag[127] = 30;
106 D0_modeTag[128] = 30;
107 D0_modeTag[129] = 30;
108 D0_modeTag[130] = 30;
109 D0_modeTag[131] = 30;
110 D0_modeTag[132] = 30;
111 D0_modeTag[133] = 30;
112 D0_modeTag[134] = 30;
113 D0_modeTag[135] = 30;
114
115 Dp_modeTag[200] = 0;
116 Dp_modeTag[201] = 1;
117 Dp_modeTag[202] = 2;
118 Dp_modeTag[203] = 3;
119 Dp_modeTag[204] = 4;
120 Dp_modeTag[205] = 5;
121 Dp_modeTag[206] = 6;
122 Dp_modeTag[207] = 7;
123 Dp_modeTag[208] = 8;
124 Dp_modeTag[209] = 9;
125 Dp_modeTag[210] = 10;
126 Dp_modeTag[211] = 11;
127 Dp_modeTag[212] = 12;
128 Dp_modeTag[213] = 13;
129 Dp_modeTag[214] = 14;
130 Dp_modeTag[215] = 15;
131 Dp_modeTag[216] = 16;
132 Dp_modeTag[217] = 17;
133 Dp_modeTag[218] = 18;
134 Dp_modeTag[219] = 19;
135 Dp_modeTag[220] = 20;
136 Dp_modeTag[221] = 21;
137 Dp_modeTag[222] = 22;
138 Dp_modeTag[223] = 23;
139 Dp_modeTag[224] = 24;
140 Dp_modeTag[225] = 24;
141 Dp_modeTag[226] = 25;
142 Dp_modeTag[227] = 25;
143 Dp_modeTag[228] = 26;
144 Dp_modeTag[229] = 27;
145 Dp_modeTag[230] = 28;
146 Dp_modeTag[231] = 29;
147 Dp_modeTag[232] = 29;
148 Dp_modeTag[233] = 29;
149 Dp_modeTag[234] = 29;
150 Dp_modeTag[235] = 29;
151 Dp_modeTag[236] = 29;
152 Dp_modeTag[237] = 29;
153 Dp_modeTag[238] = 29;
154 Dp_modeTag[239] = 29;
155 Dp_modeTag[240] = 29;
156 Dp_modeTag[241] = 29;
157 Dp_modeTag[242] = 29;
158 Dp_modeTag[290] = 30;
159 Dp_modeTag[291] = 30;
160 Dp_modeTag[292] = 30;
161 Dp_modeTag[293] = 30;
162 Dp_modeTag[294] = 30;
163
164 int NumCriteria = m_criteria.size();
165 if ( NumCriteria > 27 )
166 {
167 std::cout << "the number of criterias too much !" << std::endl;
168 return StatusCode::SUCCESS;
169 }
170
171 unsigned int Ncut_oth = 0;
172 vector<string> name_tag, name_oth;
173 vector<int> CutDs, CutD0, CutD;
174 CutDs.clear();
175 CutD0.clear();
176 CutD.clear();
177 name_tag.clear();
178 name_oth.clear();
179 bool allDs = false, allD0 = false, allD = false, typeDs = true, typeD0 = true, typeD = true,
180 QC = false;
181
182 string name;
183 int nPos_1, nPos_2, nPos_3, nPos_4;
184 string pat = ",";
185 map<string, int> Cut1, Cut2;
186 for ( int i = 0; i < NumCriteria; i++ )
187 {
188 std::cout << "TagFilterSvc::criteria " << i << " : " << m_criteria[i];
189 nPos_1 = m_criteria[i].find_first_of( "<" );
190 nPos_2 = m_criteria[i].find_last_of( "<" );
191 nPos_3 = m_criteria[i].find_first_of( "=" );
192 nPos_4 = m_criteria[i].find( "QCon" );
193 if ( nPos_4 != -1 )
194 {
195 QC = true;
196 cout << " -> Turn on QC";
197 }
198 else if ( nPos_3 != -1 )
199 {
200 name = m_criteria[i].substr( 0, nPos_3 );
201 name_tag.push_back( name );
202 if ( name == "tagDs" )
203 { CutDs = split( m_criteria[i].substr( nPos_3 + 1 ), pat, allDs, typeDs ); }
204 else if ( name == "tagD0" )
205 { CutD0 = split( m_criteria[i].substr( nPos_3 + 1 ), pat, allD0, typeD0 ); }
206 else if ( name == "tagD" )
207 { CutD = split( m_criteria[i].substr( nPos_3 + 1 ), pat, allD, typeD ); }
208 else
209 {
210 std::cout << "pls check your tag criterias" << std::endl;
211 return StatusCode::SUCCESS;
212 }
213 }
214 else if ( nPos_1 == -1 || nPos_2 == -1 || nPos_1 == nPos_2 )
215 {
216 std::cout << "pls check your criterias" << std::endl;
217 return StatusCode::SUCCESS;
218 }
219 else
220 {
221 name = m_criteria[i].substr( nPos_1 + 1, nPos_2 - nPos_1 - 1 );
222 name_oth.push_back( name );
223 Ncut_oth++;
224 Cut1[name] = atoi( m_criteria[i].substr( 0 ).c_str() );
225 Cut2[name] = atoi( m_criteria[i].substr( nPos_2 + 1 ).c_str() );
226 }
227 std::cout << std::endl;
228 }
229
230 TFile* file = TFile::Open( m_fileName.c_str() );
231 TTree* t3 = (TTree*)file->Get( "Entries" );
232 UInt_t tagData0, tagData1, tagData2, tagData3, tagData4;
233 UInt_t tagData5, tagData6, tagData7, tagData8;
234 t3->SetBranchAddress( "tagData0", &tagData0 );
235 t3->SetBranchAddress( "tagData1", &tagData1 );
236 t3->SetBranchAddress( "tagData2", &tagData2 );
237 t3->SetBranchAddress( "tagData3", &tagData3 );
238 t3->SetBranchAddress( "tagData4", &tagData4 );
239 t3->SetBranchAddress( "tagData5", &tagData5 );
240 t3->SetBranchAddress( "tagData6", &tagData6 );
241 t3->SetBranchAddress( "tagData7", &tagData7 );
242 t3->SetBranchAddress( "tagData8", &tagData8 );
243
244 Int_t npip, npim, nkp, nkm, nlambda, nalambda;
245 Int_t npp, npm, nep, nem, nmup, nmum, neta, npi0, ngamma, nks;
246 Int_t nGoodCharged, nCharged, nGoodChargedp, nGoodChargedm, totCharged, nNeutrk, nTottrk;
247 bool isTag, isPID;
248 unsigned int flag;
249
250 for ( int i = 0; i < t3->GetEntries(); i++ )
251 {
252 t3->GetEntry( i );
253 nGoodCharged = tagData0;
254 Tag1ToInt( tagData1, nNeutrk, nTottrk, ngamma, npi0 );
255 Tag2ToInt( tagData2, npip, npim, nkp, nkm, npp, npm );
256 Tag2ToInt( tagData3, nlambda, nalambda, nep, nem, nmup, nmum );
257 Tag2ToInt( tagData4, nks, neta, nCharged, nGoodChargedp, nGoodChargedm, totCharged );
258
259 if ( QC && tagData8 == 0 ) continue;
260 if ( name_tag.size() == 0 && Ncut_oth == 0 )
261 {
262 ventry.push_back( i );
263 continue;
264 }
265 isTag = false;
266 for ( unsigned int j = 0; j < name_tag.size(); j++ )
267 {
268 if ( name_tag[j] == "tagD0" )
269 {
270 if ( tagData6 > 0 )
271 {
272 isPID = true;
273 if ( !( tagData6 & ( 1 << 31 ) ) && typeD0 ) isPID = false;
274 if ( isPID )
275 {
276 if ( !allD0 )
277 {
278 for ( unsigned int k = 0; k < CutD0.size(); k++ )
279 {
280 if ( tagData6 & ( 1 << D0_modeTag[CutD0[k]] ) )
281 {
282 isTag = true;
283 break;
284 }
285 }
286 }
287 else { isTag = true; }
288 }
289 }
290 }
291 else if ( name_tag[j] == "tagD" )
292 {
293 if ( tagData7 > 0 )
294 {
295 isPID = true;
296 if ( !( tagData7 & ( 1 << 31 ) ) && typeD ) isPID = false;
297 if ( isPID )
298 {
299 if ( !allD )
300 {
301 for ( unsigned int k = 0; k < CutD.size(); k++ )
302 {
303 if ( tagData7 & ( 1 << Dp_modeTag[CutD[k]] ) )
304 {
305 isTag = true;
306 break;
307 }
308 }
309 }
310 else { isTag = true; }
311 }
312 }
313 }
314 else if ( name_tag[j] == "tagDs" )
315 {
316 if ( tagData5 > 0 )
317 {
318 isPID = true;
319 if ( !( tagData5 & ( 1 << 31 ) ) && typeDs ) isPID = false;
320 if ( isPID )
321 {
322 if ( !allDs )
323 {
324 for ( unsigned int k = 0; k < CutDs.size(); k++ )
325 {
326 if ( tagData5 & ( 1 << Ds_modeTag[CutDs[k]] ) )
327 {
328 isTag = true;
329 break;
330 }
331 }
332 }
333 else { isTag = true; }
334 }
335 }
336 }
337 if ( isTag ) break;
338 }
339 if ( isTag )
340 {
341 ventry.push_back( i );
342 continue;
343 }
344
345 flag = 0;
346 int tagvalue = -1;
347 for ( unsigned int j = 0; j < name_oth.size(); j++ )
348 {
349 if ( name_oth[j] == "NumOfGoodCh" ) { tagvalue = nGoodCharged; }
350 else if ( name_oth[j] == "NumOfNeutrk" ) { tagvalue = nNeutrk; }
351 else if ( name_oth[j] == "NumOfTottrk" ) { tagvalue = nTottrk; }
352 else if ( name_oth[j] == "NumOfGamma" ) { tagvalue = ngamma; }
353 else if ( name_oth[j] == "NumOfPion0" ) { tagvalue = npi0; }
354 else if ( name_oth[j] == "NumOfPionp" ) { tagvalue = npip; }
355 else if ( name_oth[j] == "NumOfPionm" ) { tagvalue = npim; }
356 else if ( name_oth[j] == "NumOfKaonp" ) { tagvalue = nkp; }
357 else if ( name_oth[j] == "NumOfKaonm" ) { tagvalue = nkm; }
358 else if ( name_oth[j] == "NumOfProtonp" ) { tagvalue = npp; }
359 else if ( name_oth[j] == "NumOfProtonm" ) { tagvalue = npm; }
360 else if ( name_oth[j] == "NumOfLambda" ) { tagvalue = nlambda; }
361 else if ( name_oth[j] == "NumOfALambda" ) { tagvalue = nalambda; }
362 else if ( name_oth[j] == "NumOfElectronp" ) { tagvalue = nep; }
363 else if ( name_oth[j] == "NumOfElectronm" ) { tagvalue = nem; }
364 else if ( name_oth[j] == "NumOfMuonp" ) { tagvalue = nmup; }
365 else if ( name_oth[j] == "NumOfMuonm" ) { tagvalue = nmum; }
366 else if ( name_oth[j] == "NumOfKs" ) { tagvalue = nks; }
367 else if ( name_oth[j] == "NumOfEta" ) { tagvalue = neta; }
368 else if ( name_oth[j] == "NumOfCharged" ) { tagvalue = nCharged; }
369 else if ( name_oth[j] == "NumOfGoodChp" ) { tagvalue = nGoodChargedp; }
370 else if ( name_oth[j] == "NumOfGoodChm" ) { tagvalue = nGoodChargedm; }
371 else if ( name_oth[j] == "TotCharged" ) { tagvalue = totCharged; }
372 else
373 {
374 cout << "pls check the name of your criteria !" << endl;
375 break;
376 }
377 if ( tagvalue >= Cut2[name_oth[j]] || tagvalue <= Cut1[name_oth[j]] ) break;
378 flag++;
379 }
380 if ( Ncut_oth > 0 && Ncut_oth == flag ) ventry.push_back( i );
381 }
382 cout << "TagFilterSvc::" << ventry.size() << " out of " << t3->GetEntries()
383 << " events selected" << endl;
384 CutDs.clear();
385 CutD0.clear();
386 CutD.clear();
387 name_tag.clear();
388 name_oth.clear();
389 delete file;
390 return StatusCode::SUCCESS;
391}
char * file
Definition DQA_TO_DB.cxx:16
void Tag1ToInt(unsigned int res, int &val1, int &val2, int &val3, int &val4)
void Tag2ToInt(unsigned int res, int &val1, int &val2, int &val3, int &val4, int &val5, int &val6)
vector< int > split(string str, string pattern, bool &all, bool &type)
char * c_str(Index i)

◆ setCriteria()

void TagParser2::setCriteria ( vector< string > name)
inlinevirtual

Implements ITagParser.

Definition at line 51 of file TagParser2.h.

51{ m_criteria = name; }

◆ setDstDataType()

void TagParser2::setDstDataType ( int t)
inlinevirtual

Implements ITagParser.

Definition at line 35 of file TagParser2.h.

35{ m_dstDataType = t; }
int t()
Definition t.c:1

◆ setFileName()

void TagParser2::setFileName ( string name)
inlinevirtual

Implements ITagParser.

Definition at line 47 of file TagParser2.h.

47 {
48 m_fileName = name;
49 std::cout << "filename is " << m_fileName << std::endl;
50 }

◆ setTagData0()

void TagParser2::setTagData0 ( unsigned int t)
inlinevirtual

Implements ITagParser.

Definition at line 36 of file TagParser2.h.

36{ m_tagData0 = t; }

◆ setTagData1()

void TagParser2::setTagData1 ( unsigned int t)
inlinevirtual

Implements ITagParser.

Definition at line 37 of file TagParser2.h.

37{ m_tagData1 = t; }

◆ setTagData2()

void TagParser2::setTagData2 ( unsigned int t)
inlinevirtual

Implements ITagParser.

Definition at line 38 of file TagParser2.h.

38{ m_tagData2 = t; }

◆ setTagData3()

void TagParser2::setTagData3 ( unsigned int t)
inlinevirtual

Implements ITagParser.

Definition at line 39 of file TagParser2.h.

39{ m_tagData3 = t; }

◆ setTagData4()

void TagParser2::setTagData4 ( unsigned int t)
inlinevirtual

Implements ITagParser.

Definition at line 40 of file TagParser2.h.

40{ m_tagData4 = t; }

◆ setTagData5()

void TagParser2::setTagData5 ( unsigned int t)
inlinevirtual

Implements ITagParser.

Definition at line 41 of file TagParser2.h.

41{ m_tagData5 = t; }

◆ setTagData6()

void TagParser2::setTagData6 ( unsigned int t)
inlinevirtual

Implements ITagParser.

Definition at line 42 of file TagParser2.h.

42{ m_tagData6 = t; }

◆ setTagData7()

void TagParser2::setTagData7 ( unsigned int t)
inlinevirtual

Implements ITagParser.

Definition at line 43 of file TagParser2.h.

43{ m_tagData7 = t; }

◆ setTagData8()

void TagParser2::setTagData8 ( unsigned int t)
inlinevirtual

Implements ITagParser.

Definition at line 44 of file TagParser2.h.

44{ m_tagData8 = t; }

◆ setTagData9()

void TagParser2::setTagData9 ( unsigned int t)
inlinevirtual

Implements ITagParser.

Definition at line 45 of file TagParser2.h.

45{ m_tagData9 = t; }

◆ split()

vector< int > TagParser2::split ( string str,
string pattern,
bool & all,
bool & type )

Definition at line 409 of file TagParser2.cxx.

409 {
410 vector<int> result;
411 unsigned int pos;
412 type = true;
413 all = false;
414 str += pattern;
415
416 for ( unsigned int i = 0; i < str.size(); i++ )
417 {
418 pos = str.find( pattern, i );
419 if ( pos < str.size() )
420 {
421 string val = str.substr( i, pos - i );
422 if ( val == "all" ) { all = true; }
423 else if ( val == "type0" ) { type = false; }
424 else { result.push_back( atoi( val.c_str() ) ); }
425 i = pos + pattern.size() - 1;
426 }
427 }
428 return result;
429}

Referenced by getVEntry().

◆ Tag1ToInt()

void TagParser2::Tag1ToInt ( unsigned int res,
int & val1,
int & val2,
int & val3,
int & val4 )

Definition at line 392 of file TagParser2.cxx.

392 {
393 val1 = ( res >> 24 ) & 0xFF;
394 val2 = ( res >> 16 ) & 0xFF;
395 val3 = ( res >> 8 ) & 0xFF;
396 val4 = res & 0xFF;
397 return;
398}

Referenced by getVEntry().

◆ Tag2ToInt()

void TagParser2::Tag2ToInt ( unsigned int res,
int & val1,
int & val2,
int & val3,
int & val4,
int & val5,
int & val6 )

Definition at line 399 of file TagParser2.cxx.

400 {
401 val1 = ( res >> 26 ) & 0x3F;
402 val2 = ( res >> 20 ) & 0x3F;
403 val3 = ( res >> 15 ) & 0x1F;
404 val4 = ( res >> 10 ) & 0x1F;
405 val5 = ( res >> 5 ) & 0x1F;
406 val6 = res & 0x1F;
407 return;
408}

Referenced by getVEntry().


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