32 std::map<int, unsigned int> Ds_modeTag, D0_modeTag, Dp_modeTag;
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;
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;
164 int NumCriteria = m_criteria.size();
165 if ( NumCriteria > 27 )
167 std::cout <<
"the number of criterias too much !" << std::endl;
168 return StatusCode::SUCCESS;
171 unsigned int Ncut_oth = 0;
172 vector<string> name_tag, name_oth;
173 vector<int> CutDs, CutD0, CutD;
179 bool allDs =
false, allD0 =
false, allD =
false, typeDs =
true, typeD0 =
true, typeD =
true,
183 int nPos_1, nPos_2, nPos_3, nPos_4;
185 map<string, int> Cut1, Cut2;
186 for (
int i = 0; i < NumCriteria; i++ )
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" );
196 cout <<
" -> Turn on QC";
198 else if ( nPos_3 != -1 )
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 ); }
210 std::cout <<
"pls check your tag criterias" << std::endl;
211 return StatusCode::SUCCESS;
214 else if ( nPos_1 == -1 || nPos_2 == -1 || nPos_1 == nPos_2 )
216 std::cout <<
"pls check your criterias" << std::endl;
217 return StatusCode::SUCCESS;
221 name = m_criteria[i].substr( nPos_1 + 1, nPos_2 - nPos_1 - 1 );
222 name_oth.push_back( name );
224 Cut1[name] = atoi( m_criteria[i].substr( 0 ).c_str() );
225 Cut2[name] = atoi( m_criteria[i].substr( nPos_2 + 1 ).c_str() );
227 std::cout << std::endl;
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 );
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;
250 for (
int i = 0; i < t3->GetEntries(); 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 );
259 if ( QC && tagData8 == 0 )
continue;
260 if ( name_tag.size() == 0 && Ncut_oth == 0 )
262 ventry.push_back( i );
266 for (
unsigned int j = 0; j < name_tag.size(); j++ )
268 if ( name_tag[j] ==
"tagD0" )
273 if ( !( tagData6 & ( 1 << 31 ) ) && typeD0 ) isPID =
false;
278 for (
unsigned int k = 0; k < CutD0.size(); k++ )
280 if ( tagData6 & ( 1 << D0_modeTag[CutD0[k]] ) )
287 else { isTag =
true; }
291 else if ( name_tag[j] ==
"tagD" )
296 if ( !( tagData7 & ( 1 << 31 ) ) && typeD ) isPID =
false;
301 for (
unsigned int k = 0; k < CutD.size(); k++ )
303 if ( tagData7 & ( 1 << Dp_modeTag[CutD[k]] ) )
310 else { isTag =
true; }
314 else if ( name_tag[j] ==
"tagDs" )
319 if ( !( tagData5 & ( 1 << 31 ) ) && typeDs ) isPID =
false;
324 for (
unsigned int k = 0; k < CutDs.size(); k++ )
326 if ( tagData5 & ( 1 << Ds_modeTag[CutDs[k]] ) )
333 else { isTag =
true; }
341 ventry.push_back( i );
347 for (
unsigned int j = 0; j < name_oth.size(); j++ )
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; }
374 cout <<
"pls check the name of your criteria !" << endl;
377 if ( tagvalue >= Cut2[name_oth[j]] || tagvalue <= Cut1[name_oth[j]] )
break;
380 if ( Ncut_oth > 0 && Ncut_oth ==
flag ) ventry.push_back( i );
382 cout <<
"TagFilterSvc::" << ventry.size() <<
" out of " << t3->GetEntries()
383 <<
" events selected" << endl;
390 return StatusCode::SUCCESS;