13 #include "TTreeFormula.h" 37 std::ifstream filterFile;
38 filterFile.open(filterName.Data());
40 while (!filterFile.eof()) {
41 filterFile >> eventString;
42 if (eventString !=
"")
62 TTree *inTree = (TTree*) inFile->Get(
fTreeName);
66 TString branchToDisable;
67 while (!disableFile.eof()) {
68 disableFile >> branchToDisable;
69 if (branchToDisable !=
"")
70 inTree->SetBranchStatus(branchToDisable, 0);
76 inTree->SetBranchStatus(
"*", 0);
79 while (!keepFile.eof()) {
80 keepFile >> branchToKeep;
81 if (branchToKeep !=
"")
82 inTree->SetBranchStatus(branchToKeep, 1);
87 for (
auto*
branch : *(inTree->GetListOfBranches())) {
88 auto name =
branch->GetName();
89 if (
fCut.Contains(name))
90 inTree->SetBranchStatus(name, 1);
93 TTreeFormula *cutter =
new TTreeFormula(
"cutter",
fCut,inTree);
97 ULong64_t eventNum = 0;
98 inTree->SetBranchAddress(
fRunExpr,&runNum);
99 inTree->SetBranchAddress(
fLumiExpr,&lumiNum);
100 inTree->SetBranchAddress(
fEventExpr,&eventNum);
103 TTree *outTree = inTree->CloneTree(0);
105 std::set<TString> eventsRecorded;
106 TString testString =
"";
111 Int_t duplicates = 0;
115 for (Long64_t iEntry = 0; iEntry != nentries; ++iEntry) {
117 inTree->GetEntry(iEntry);
119 if (cutter->EvalInstance()) {
120 testString = TString::Format(
"%i:%i:%llu",runNum,lumiNum,eventNum);
126 if (eventsRecorded.find(testString) == eventsRecorded.end())
127 eventsRecorded.insert(testString);
129 std::cerr <<
"Duplicate: " << testString << std::endl;
143 outFile->WriteTObject(outTree,
fTreeName,
"Overwrite");
144 for (UInt_t iObj = 0; iObj !=
fCopyObjects.size(); ++iObj) {
146 auto* tree =
dynamic_cast<TTree*
>(inFile->Get(
fCopyObjects[iObj]));
148 TTree* outtree = tree->CloneTree();
152 outFile->WriteTObject(inFile->Get(
fCopyObjects[iObj])->Clone());
155 std::cout <<
"Could not find " <<
fCopyObjects[iObj] <<
" in " << fileName << std::endl;
161 std::cout << fileName <<
" events removed for" << std::endl;
162 std::cout <<
" Bad Runs: " << badlumis << std::endl;
163 std::cout <<
" Event Cut: " << cutevents << std::endl;
164 std::cout <<
" Filter: " << filtered << std::endl;
165 std::cout <<
" Duplicates: ";
167 std::cout << duplicates << std::endl;
169 std::cout <<
"Not Checking" << std::endl;