Hi all, I would like to have a triple for loop, where I want my first for loop to select a trigger cut (vector of strings), my second for loop to select a pT1 cut and my third for loop to select a pT2 cut (both are vectors of integers).
However, I’m only interested in certain combinations of these cuts, if i=0 for my first for loop, I want my second for loop to only select j=0 (but still have all the k combinations), similarly if i = 1, I want j to be 1 as well, but I’m not sure how to implement that in my code and I also get a few errors that I don’t know how to solve…
So in the end I would like to have 3 plots on my canvas, the first one with L1_J20 and pT cut = 80 (and then different graphs for the pT2 cuts on that plot as before, where my selected pT2 cut has to be smaller or equal to my pT1 cut), second plot with L1_J40 and pT cut =135 (and again different pT2 cuts), and so on. I hope this is a bit clear! Thanks!
#include "TFile.h"
#include "TCanvas.h"
#include "TH1.h"
#include "TMultiGraph.h"
#include "TGraphAsymmErrors.h"
#include "TString.h"
#include <vector>
#include <iostream>
void mjj_eff(const char *fname = "HaddOutput.root") {
if (!(fname && fname[0])) return; // just a precaution
TFile *f = TFile::Open(fname);
if ((!f) || f->IsZombie()) { delete f; return; } // just a precaution
std::vector<std::string> TriggerCut = {"L1_J20", "L1_J40", "L1_J50"};
std::vector<int> pT1Cut = {80, 130, 145};
std::vector<int> pT2Cut = {50, 60, 70, 80, 90, 100, 110, 120, 130, 145};
int n = TriggerCut.size();
int n1 = pT1Cut.size();
int n2 = pT2Cut.size();
TCanvas *c = new TCanvas("c", "", (n1 * 350), 1000);
c->Divide(3, 1);
c->SetFillColor(0);
TH1D *h[n];
TH1D *s[n][n1];
TH1D *m[n][n1][n2];
TMultiGraph *mg[n];
TGraphAsymmErrors *eff[n][n1][n2];
TH1D *histo = (TH1D*)f->Get("AfterCuts/yCut_0.6/pT1Cut_0/pT2Cut_0/Mjj");
for (int i = 0; i < n; i++) {
c->cd(i + 1);
f->GetObject(TString::Format("%s/yCut_0.6/pT1Cut_0/pT2Cut_0/Mjj", TriggerCut[i].c_str()), h[i]);
if (!h[i]) continue; // just a precaution
mg[i] = new TMultiGraph();
for (int j = i; j < n1; j++) {
f->GetObject("%s/yCut_0.6/pT1Cut_%d/pT2Cut_0/Mjj", TriggerCut[i].c_str()), pT1Cut[j], s[i][j]);
for (int k = 0; k < n2; k++) {
f->GetObject("%s/yCut_0.6/pT1Cut_%d/pT2Cut_%d/Mjj", TriggerCut[i].c_str()), pT1Cut[j], pT2Cut[k], m[i][j][k]);
eff[i][j][k] = new TGraphAsymmErrors();
mg[i]->Add(eff[i][j][k], "p");
}
}
mg[i]->Draw("AL");
}
}