35 TFile* f = TFile::Open(inFilename.c_str(),
"UPDATE");
38 if (f == 0 || !f->IsOpen()) {
39 std::cerr <<
"--> L1CaloPostProcess: Input file not opened" << std::endl;
46 std::cerr <<
"--> L1CaloPostProcess: Input file " << inFilename <<
" cannot be opened. " << std::endl;
52 if (f->GetSize() < 1000.) {
53 std::cerr <<
"--> L1CaloPostProcess: Input file empty" << std::endl;
60 TIter next_run(f->GetListOfKeys());
64 while ((key_run =
dynamic_cast<TKey*
>(next_run())) != 0) {
65 TObject* obj_run = key_run->ReadObj();
66 TDirectory* tdir_run =
dynamic_cast<TDirectory*
>(obj_run);
75 std::string runDirName(tdir_run->GetName());
78 if (runDirName.find(
"run") == std::string::npos) {
84 TString stabilityDirName = runDirName +
"/L1Calo/PPM/Stability";
93 3., 3., 3., 6., 4., 2.
95 TString energies[6] = {
96 "10",
"20",
"30",
"50",
"100",
"200"
98 for (
int i = 0; i < 3; ++i) {
99 TString effDir = runDirName +
"/L1Calo/Reco/EmEfficiencies/ClusterRaw_"
100 + energies[i] +
"GeV_EtaVsPhi";
101 TString nameDen =
"ClusterRaw_" + energies[i] +
"GeV_Eta_vs_Phi";
102 TString nameEff = nameDen +
"_trig_Eff";
109 for (
int i = 3; i < 6; ++i) {
110 TString effDir = runDirName +
"/L1Calo/Reco/JetEfficiencies/JetEmScale_"
111 + energies[i] +
"GeV_EtaVsPhi";
112 TString nameDen =
"JetEmScale_" + energies[i] +
"GeV_Eta_vs_Phi";
113 TString nameEff = nameDen +
"_J_Eff_item";
114 TString nameEffF = nameDen +
"_FJ_J_Eff_item";
142 const TString& nameData,
const TString& nameError) {
146 if (!(f->GetDirectory(nameDir))) {
151 if (f->cd(nameDir.Data()) == 0) {
157 TString p1 = nameDir +
"/" + nameData;
163 TH1* h1 = (TH1*) (f->Get(p1.Data()));
166 TString p2 = nameDir +
"/" + nameError;
172 TH1* h2 = (TH1*) (f->Get(p2.Data()));
175 const int dim = h1->GetDimension();
176 if (dim != h2->GetDimension()) {
180 if (h1->GetNbinsX() != h2->GetNbinsX() ||
181 ((dim == 2) && (h1->GetNbinsY() != h2->GetNbinsY()))) {
188 int nbins = h1->GetNbinsX() + 2;
189 if (dim == 2) nbins *= (h1->GetNbinsY() + 2);
191 double error = h1->GetBinError(
bin);
196 h2->Write(
"", TObject::kOverwrite);
203 const TString& nameDen,
const TString& nameEff,
204 int items,
double threshold,
int binSkip) {
208 if (!(f->GetDirectory(effDir))) {
213 if (f->cd(effDir.Data()) == 0) {
219 TString denPath = effDir +
"/denominator/" + nameDen;
220 TH1* h1 = (TH1*) (f->Get(denPath.Data()));
226 if (h1->GetDimension() != 2) {
233 int xbins = h1->GetNbinsX();
234 int ybins = h1->GetNbinsY();
235 std::vector<TH1*> effVec;
237 TString effBase = effDir +
"/" + nameEff;
238 for (
int i = 0; i < items; ++i) {
240 TString effPath = effBase +
str;
241 TH1* h2 = (TH1*) (f->Get(effPath.Data()));
247 if (h2->GetDimension() != 2) {
252 if (xbins != h2->GetNbinsX() || ybins != h2->GetNbinsY()) {
257 effVec.push_back(h2);
259 if (effVec.empty()) {
263 std::vector<TH1*>::iterator iter;
264 std::vector<TH1*>::iterator iterEnd = effVec.end();
267 for (
int x = 1 + binSkip;
x <= xbins - binSkip; ++
x) {
268 for (
int y = 1;
y <= ybins; ++
y) {
271 for (iter = effVec.begin(); iter != iterEnd; ++iter) {
272 (*iter)->SetBinContent(
x,
y, 100.0);
279 for (iter = effVec.begin(); iter != iterEnd; ++iter) {
280 (*iter)->Write(
"", TObject::kOverwrite);