35 {
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
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
70
71
72
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
92
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
121
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
148 }
150
151
152 return StatusCode::SUCCESS;
153}
void Tag2ToInt(unsigned int res, int &val1, int &val2, int &val3, int &val4, int &val5, int &val6)
void Tag1ToInt(unsigned int res, int &val1, int &val2, int &val3, int &val4)