BOSS 7.0.8
BESIII Offline Software System
Loading...
Searching...
No Matches
TagParser1.cxx
Go to the documentation of this file.
1#include "GaudiKernel/IInterface.h"
2#include "GaudiKernel/StatusCode.h"
3#include "GaudiKernel/SvcFactory.h"
4#include "GaudiKernel/MsgStream.h"
5#include "GaudiKernel/ISvcLocator.h"
6#include "GaudiKernel/SmartDataPtr.h"
7#include "GaudiKernel/IDataProviderSvc.h"
8#include "GaudiKernel/PropertyMgr.h"
9#include "GaudiKernel/SmartIF.h"
10#include "GaudiKernel/IAppMgrUI.h"
11#include "GaudiKernel/IProperty.h"
12
13
14#include "GaudiKernel/IIncidentSvc.h"
15#include "GaudiKernel/Incident.h"
16#include "GaudiKernel/IIncidentListener.h"
17#include "GaudiKernel/ISvcLocator.h"
18#include "GaudiKernel/Bootstrap.h"
19
21#include <iostream>
22#include <fstream>
23#include <map>
24#include "TFile.h"
25#include "TTree.h"
26#include "TFormula.h"
27
29}
30
32}
33
34
35StatusCode TagParser1::getVEntry(std::vector<int>& ventry) {
36
37 int NumCriteria = m_criteria.size();
38 if (NumCriteria>23) {
39 std::cout<<"the number of criterias too much!!"<<std::endl;
40 return StatusCode::SUCCESS;
41 }
42 if(m_criteria[0].find("<NumOfGoodCh<") == std::string::npos){
43 std::cout<<"pls ensure your first criterias is NumOfCharged"<<std::endl;
44 return StatusCode::SUCCESS;
45 }
46 //string criteria="";
47 vector<string> criteria;
48 map<string, int> Cut1;
49 map<string, int> Cut2;
50 for(int i=0;i<NumCriteria;i++){
51 int nPos_1 = m_criteria[i].find_first_of("<");
52 int nPos_2 = m_criteria[i].find_last_of("<");
53 if(nPos_1 == nPos_2 || nPos_1==-1 || nPos_2==-1) {
54 std::cout<<"pls check your criterias"<<std::endl;
55 return StatusCode::SUCCESS;
56 }
57 string name_cut = m_criteria[i].substr(nPos_1+1,nPos_2-nPos_1-1);
58 Cut1[name_cut] = atoi(m_criteria[i].substr(0).c_str());
59 Cut2[name_cut] = atoi(m_criteria[i].substr(nPos_2+1).c_str());
60 criteria.push_back(name_cut);
61 std::cout<<"criteria is "<<criteria[i]<<std::endl;
62 std::cout<<"nCTrkCut1: "<<Cut1[criteria[i]]<<" nCTrkCut2: "<<Cut2[criteria[i]]<<std::endl;
63 }
64
65
66
67
68
69 // if ( criteria.find("<NumOfCharged<") != std::string::npos ) {
70 // nCTrkCut1 = atoi( criteria.substr(0).c_str() );
71 // nCTrkCut2 = atoi( criteria.substr(15).c_str() );
72 // std::cout<<"nCTrkCut1: "<<nCTrkCut1<<" nCTrkCut2: "<<nCTrkCut2<<std::endl;
73 // }
74
75
76 std::vector<int> ventry_temp;
77
78 TFile* file = TFile::Open( m_fileName.c_str() );
79 TTree* t0 = (TTree*)file->Get("Metadata");
80 Int_t mode, begin, end;
81 t0->SetBranchAddress("mode", &mode);
82 t0->SetBranchAddress("begin", &begin);
83 t0->SetBranchAddress("end", &end);
84
85 for ( int i = 0; i < t0->GetEntries(); ++i ) {
86 t0->GetEntry(i);
87 std::cout<<"t0 entry: "<<i<<std::endl;
88 if ( (mode != -1) && (mode>Cut1["NumOfGoodCh"] && mode<Cut2["NumOfGoodCh"]) ) {
89 for ( int i = begin; i < end; ++i ) {
90 ventry_temp.push_back(i);
91 //ventry.push_back(i);
92 //std::cout<<"ventry_temp push back: "<<i<<std::endl;
93 }
94 }
95 }
96
97
98
99
100
101 TTree* t3 = (TTree*)file->Get("Entries");
102 UInt_t tagData0, tagData1, tagData2, tagData3, tagData4;
103 t3->SetBranchAddress("tagData0", &tagData0);
104 t3->SetBranchAddress("tagData1", &tagData1);
105 t3->SetBranchAddress("tagData2", &tagData2);
106 t3->SetBranchAddress("tagData3", &tagData3);
107 t3->SetBranchAddress("tagData4", &tagData4);
108
109 Int_t npip, npim, nkp, nkm, nlambda, nalambda;
110 Int_t npp, npm, nep, nem, nmup, nmum, neta, npi0, ngamma, nks;
111 Int_t nCharged, nGoodChargedp, nGoodChargedm,totCharged,nNeutrk, nTottrk;
112 for (int i=0;i<ventry_temp.size();i++ )
113 {
114 t3->GetEntry(ventry_temp[i]);
115 Tag1ToInt(tagData1, nNeutrk, nTottrk, ngamma, npi0);
116 Tag2ToInt(tagData2, npip, npim, nkp, nkm, npp, npm);
117 Tag2ToInt(tagData3, nlambda, nalambda, nep, nem, nmup, nmum);
118 Tag2ToInt(tagData4, nks, neta, nCharged, nGoodChargedp, nGoodChargedm, totCharged);
119
120 //std::cout<<"npip = "<<npip<<", npim = "<<npim<<std::endl;
121 //std::cout<<"nctk = "<<tagData0<<std::endl;
122
123
124 if( Cut2["NumOfNeutrk"]!=0&& (nNeutrk>=Cut2["NumOfNeutrk"] || nNeutrk<=Cut1["NumOfNeutrk"] )) continue;
125 if( Cut2["NumOfTottrk"]!=0&& (nTottrk>=Cut2["NumOfTottrk"] || nTottrk<=Cut1["NumOfTottrk"] )) continue;
126 if( Cut2["NumOfGamma"]!=0 && (ngamma>=Cut2["NumOfGamma"] || ngamma<=Cut1["NumOfGamma"] )) continue;
127 if( Cut2["NumOfPion0"]!=0 && (npi0>=Cut2["NumOfPion0"] || npi0<=Cut1["NumOfPion0"] )) continue;
128 if( Cut2["NumOfPionp"]!=0 && (npip>=Cut2["NumOfPionp"] || npip<=Cut1["NumOfPionp"] )) continue;
129 if( Cut2["NumOfPionm"]!=0 && (npim>=Cut2["NumOfPionm"] || npim<=Cut1["NumOfPionm"] )) continue;
130 if( Cut2["NumOfKaonp"]!=0 && (nkp>=Cut2["NumOfKaonp"] || nkp<=Cut1["NumOfKaonp"] )) continue;
131 if( Cut2["NumOfKaonm"]!=0 && (nkm>=Cut2["NumOfKaonm"] || nkm<=Cut1["NumOfKaonm"] )) continue;
132 if( Cut2["NumOfProtonp"]!=0 && (npp>=Cut2["NumOfProtonp"] || npp<=Cut1["NumOfProtonp"] )) continue;
133 if( Cut2["NumOfProtonm"]!=0 && (npm>=Cut2["NumOfProtonm"] || npp<=Cut1["NumOfProtonm"] )) continue;
134 if( Cut2["NumOfLambda"]!=0 && (nlambda>=Cut2["NumOfLambda"] || nlambda<=Cut1["NumOfLambda"] )) continue;
135 if( Cut2["NumOfALambda"]!=0 && (nalambda>=Cut2["NumOfALambda"] || nalambda<=Cut1["NumOfALambda"] )) continue;
136 if( Cut2["NumOfElectronp"]!=0 && (nep>=Cut2["NumOfElectronp"] || nep<=Cut1["NumOfElectronp"] )) continue;
137 if( Cut2["NumOfElectronm"]!=0 && (nem>=Cut2["NumOfElectronm"] || nem<=Cut1["NumOfElectronm"] )) continue;
138 if( Cut2["NumOfMuonp"]!=0 && (nmup>=Cut2["NumOfMuonp"] || nmup<=Cut1["NumOfMuonp"] )) continue;
139 if( Cut2["NumOfMuonm"]!=0 && (nmum>=Cut2["NumOfMuonm"] || nmum<=Cut1["NumOfMuonm"] )) continue;
140 if( Cut2["NumOfKs"]!=0 && (nks>=Cut2["NumOfKs"] || nks<=Cut1["NumOfKs"] )) continue;
141 if( Cut2["NumOfEta"]!=0 && (neta>=Cut2["NumOfEta"] || neta<=Cut1["NumOfEta"] )) continue;
142 if( Cut2["NumOfCharged"]!=0 && (nCharged>=Cut2["NumOfCharged"] || nCharged<=Cut1["NumOfCharged"] )) continue;
143 if( Cut2["NumOfGoodChp"]!=0 && (nGoodChargedp>=Cut2["NumOfGoodChp"] || nGoodChargedp<=Cut1["NumOfGoodChp"] )) continue;
144 if( Cut2["NumOfGoodChm"]!=0 && (nGoodChargedm>=Cut2["NumOfGoodChm"] || nGoodChargedm<=Cut1["NumOfGoodChm"] )) continue;
145 if( Cut2["TotCharged"]!=0 && (totCharged>=Cut2["TotCharged"] || totCharged<=Cut1["TotCharged"] )) continue;
146 ventry.push_back(ventry_temp[i]);
147 // std::cout<<"ventry push back: "<<i<<std::endl;
148 }
149 delete file;
150
151
152 return StatusCode::SUCCESS;
153}
154void TagParser1::Tag1ToInt(unsigned int res, int & val1, int & val2, int & val3, int & val4)
155{
156 val1 = (res>>24) & 0xFF;
157 val2 = (res>>16) & 0xFF;
158 val3 = (res>>8) & 0xFF;
159 val4 = res & 0xFF;
160 return;
161}
162void TagParser1::Tag2ToInt(unsigned int res, int & val1, int & val2, int & val3, int & val4, int & val5, int & val6)
163{
164 val1=(res>>26) & 0x3F;
165 val2=(res>>20) & 0x3F;
166 val3=(res>>15) & 0x1F;
167 val4=(res>>10) & 0x1F;
168 val5=(res>>5) & 0x1F;
169 val6 =res & 0x1F;
170 return;
171}
172
173/*int* TagParser1::IntToChar(int val)
174 {
175 int *ch;
176 ch = new int[4];
177 ch[0]=(val>>24) & 0xFF;
178 ch[1]=(val>>16) & 0xFF;
179 ch[2]=(val>>8) & 0xFF;
180 ch[3]=val & 0xFF;
181 return ch;
182
183 }*/
184
185
186
187
char * file
Definition: DQA_TO_DB.cxx:15
void Tag2ToInt(unsigned int res, int &val1, int &val2, int &val3, int &val4, int &val5, int &val6)
Definition: TagParser1.cxx:162
void Tag1ToInt(unsigned int res, int &val1, int &val2, int &val3, int &val4)
Definition: TagParser1.cxx:154
StatusCode getVEntry(vector< int > &)
Definition: TagParser1.cxx:35