15 fReportFrequency(10000),
16 fOutputFileName(outputName),
18 fOutputWeightBranch("weight")
20 fFriendNames.resize(0);
21 fKeepBranches.resize(0);
22 fWeightBranch.resize(0);
23 fRegionNames.resize(0);
24 fRegionCuts.resize(0);
38 Message(
eInfo,
"Opening %s for region %s", config, region.Data());
40 std::ifstream configFile;
41 configFile.open(config);
42 TString LimitTreeName;
46 TString ColorStyleEntry;
48 while (!configFile.eof()) {
49 configFile >> LimitTreeName >> FileName;
54 if (LimitTreeName ==
"skip") {
55 Message(
eDebug,
"Going to skip %s in region %s", FileName.Data(), region.Data());
59 Message(
eDebug,
"Adding %s as %s", FileName.Data(), LimitTreeName.Data());
60 configFile >> XSec >> LegendEntry >> ColorStyleEntry;
62 if (ColorStyleEntry ==
"rgb") {
63 for (Int_t iColor = 0; iColor != 3; ++iColor)
64 configFile >> ColorStyleEntry;
81 for (UInt_t iRegion = 0; iRegion !=
fRegionNames.size(); ++iRegion) {
84 Message(
eInfo,
"Entering region: %s", regionName.Data());
87 UInt_t numDataBackground = numData +
fMCFileInfo.size();
92 Message(
eInfo,
"Number of Background Files: %i", numDataBackground);
94 Message(
eInfo,
"Number of Standard Files (sum of previous): %i", sumOfStandard);
95 Message(
eInfo,
"Number of files in this region (adding exception): %i", numFiles);
97 for (UInt_t iFile = 0; iFile != numFiles; ++iFile) {
102 for (UInt_t jRegion = 0; jRegion !=
fRegionNames.size(); ++jRegion) {
103 if (jRegion == iRegion)
106 std::cout << fRegionNames[jRegion] <<
", ";
108 std::cout <<
" " << iFile <<
" / " << numFiles <<
" Files." << std::endl;
115 if (iFile < numData) {
121 else if (iFile < numDataBackground) {
123 outTreeName =
fMCFileInfo[iFile - numData]->fTreeName;
124 fileName =
fMCFileInfo[iFile - numData]->fFileName;
127 else if (iFile < sumOfStandard) {
141 fileName.Data(), outTreeName.Data(), XSec);
143 if (iFile < sumOfStandard) {
145 Message(
eInfo,
"Found %s in skip list for Region %s... Skipping.",
146 outTreeName.Data(), regionName.Data());
150 Message(
eInfo,
"Found %s in skip list for Region %s... Skipping.",
151 fileName.Data(), regionName.Data());
156 TFile*
inFile =
new TFile(fileName);
162 TTree* inTree = (TTree*) inFile->Get(
fTreeName);
170 TFile* tempFile =
new TFile(TString(
"/tmp/") + getenv(
"USER") +
"/" +
176 TTree* loopTree = inTree->CopyTree(theCut);
179 TTree* outTree =
new TTree(outTreeName +
"_" + regionName,outTreeName +
"_" + regionName);
182 std::map<TString, Float_t> addresses;
183 std::map<TString, Int_t> intAddresses;
184 for (UInt_t iKeep = 0; iKeep !=
fKeepBranches.size(); ++iKeep) {
187 outTree->Branch(fKeepBranches[iKeep],&intAddresses[fKeepBranches[iKeep]],fKeepBranches[iKeep] +
"/F");
188 loopTree->SetBranchAddress(fKeepBranches[iKeep],&intAddresses[fKeepBranches[iKeep]]);
192 outTree->Branch(fKeepBranches[iKeep],&addresses[fKeepBranches[iKeep]],fKeepBranches[iKeep] +
"/F");
193 loopTree->SetBranchAddress(fKeepBranches[iKeep],&addresses[fKeepBranches[iKeep]]);
199 Float_t mcScale =
fLuminosity*XSec/(allHist->GetBinContent(1));
201 Float_t mcWeight = 1.0;
204 for (UInt_t iWeight = 0; iWeight !=
fWeightBranch.size(); ++iWeight) {
206 loopTree->SetBranchAddress(fWeightBranch[iWeight],&addresses[fWeightBranch[iWeight]]);
214 UInt_t nentries = loopTree->GetEntries();
215 for (UInt_t iEntry = 0; iEntry != nentries; ++iEntry) {
216 loopTree->GetEntry(iEntry);
219 for (UInt_t iWeight = 0; iWeight !=
fWeightBranch.size(); ++iWeight)
230 outFile->WriteTObject(outTree,outTreeName +
"_" + regionName,
"Overwrite");
236 intAddresses.clear();