std::vector ConvertTreeCpp(TTree &inputTree, const char *outputFileName, const char* outputTreeName, const double datasetWeight) { ROOT::RDataFrame inputDataFrame(inputTree); auto finalDF = inputDataFrame.Filter("soft_term_pt>10"); double n_jet = 0; double ph_eta = 0; double jet_sublead_eta = 0; double metTST_pt = 0; double g_centr = 0; double n_lep = 0; double m_jj = 0; double dYjj = 0; double dYjg = 0; double pt_bal = 0; double pt_bal_tr = 0; double dphi_jj = 0; double jet_lead_pt = 0; double weightInput = 0; double n_jet20 = 0; double n_jet25 = 0; double n_jet30 = 0; double n_jet35 = 0; double n_jet40 = 0; double n_jet45 = 0; double soft_term_pt = 0; inputTree.SetBranchAddress("n_jet", &n_jet); inputTree.SetBranchAddress("ph_eta", &ph_eta); inputTree.SetBranchAddress("jet_sublead_eta", &jet_sublead_eta); inputTree.SetBranchAddress("metTST_pt", &metTST_pt); inputTree.SetBranchAddress("g_centr", &g_centr); inputTree.SetBranchAddress("n_lep", &n_lep); inputTree.SetBranchAddress("m_jj", &m_jj); inputTree.SetBranchAddress("dYjj", &dYjj); inputTree.SetBranchAddress("dYjg", &dYjg); inputTree.SetBranchAddress("pt_bal", &pt_bal); inputTree.SetBranchAddress("pt_bal_tr", &pt_bal_tr); inputTree.SetBranchAddress("dphi_jj", &dphi_jj); inputTree.SetBranchAddress("jet_lead_pt", &jet_lead_pt); inputTree.SetBranchAddress("weight", &weightInput); inputTree.SetBranchAddress("n_jet20", &n_jet20); inputTree.SetBranchAddress("n_jet25", &n_jet25); inputTree.SetBranchAddress("n_jet30", &n_jet30); inputTree.SetBranchAddress("n_jet35", &n_jet35); inputTree.SetBranchAddress("n_jet40", &n_jet40); inputTree.SetBranchAddress("n_jet45", &n_jet45); inputTree.SetBranchAddress("soft_term_pt", &soft_term_pt); //string outputFilePath = "output/" + outputFileName; TFile *outputFile = new TFile(outputFileName, "RECREATE"); TTree *outputTree = new TTree(outputTreeName, outputTreeName); int nJets = 0; double photonEta = 0; double subleadJetEta = 0; double metPt = 0; double phCentrality = 0; double nLeptons = 0; double mJJ = 0; double deltaYJJ = 0; double deltaYJPh = 0; double ptBalance = 0; double ptBalanceRed = 0; double sinDeltaPhiJJOver2 = 0; double leadJetPt = 0; double weightModified = 0; int nJets20 = 0; int nJets25 = 0; int nJets30 = 0; int nJets35 = 0; int nJets40 = 0; int nJets45 = 0; double deltaPhiJJ = 0; outputTree->Branch("nJets", &nJets, "nJets/I"); outputTree->Branch("photonEta", &photonEta, "photonEta/D"); outputTree->Branch("subleadJetEta", &subleadJetEta, "subleadJetEta/D"); outputTree->Branch("metPt", &metPt, "metPt/D"); outputTree->Branch("phCentrality", &phCentrality, "phCentrality/D"); outputTree->Branch("nLeptons", &nLeptons, "nLeptons/D"); outputTree->Branch("mJJ", &mJJ, "mJJ/D"); outputTree->Branch("deltaYJJ", &deltaYJJ, "deltaYJJ/D"); outputTree->Branch("deltaYJPh", &deltaYJPh, "deltaYJPh/D"); outputTree->Branch("ptBalance", &ptBalance, "ptBalance/D"); outputTree->Branch("ptBalanceRed", &ptBalanceRed, "ptBalanceRed/D"); outputTree->Branch("sinDeltaPhiJJOver2", &sinDeltaPhiJJOver2, "sinDeltaPhiJJOver2/D"); outputTree->Branch("leadJetPt", &leadJetPt, "leadJetPt/D"); outputTree->Branch("weightModified", &weightModified, "weightModified/D"); outputTree->Branch("nJets20", &nJets20, "nJets20/I"); outputTree->Branch("nJets25", &nJets25, "nJets25/I"); outputTree->Branch("nJets30", &nJets30, "nJets30/I"); outputTree->Branch("nJets35", &nJets35, "nJets35/I"); outputTree->Branch("nJets40", &nJets40, "nJets40/I"); outputTree->Branch("nJets45", &nJets45, "nJets45/I"); int passedEntryNum = 0; double passedWeightSum = 0; double passedWeightSumNorm = 0; UInt_t entryNum = inputTree.GetEntries(); for (UInt_t entryIdx = 0; entryIdx <= entryNum; entryIdx++){ inputTree.GetEntry(entryIdx); if (soft_term_pt > 10) {} nJets = n_jet; photonEta = ph_eta; subleadJetEta = jet_sublead_eta; metPt = metTST_pt; phCentrality = g_centr; nLeptons = n_lep; mJJ = m_jj; deltaYJJ = dYjj; deltaYJPh = dYjg; ptBalance = pt_bal; ptBalanceRed = pt_bal_tr; deltaPhiJJ = dphi_jj; sinDeltaPhiJJOver2 = TMath::Sin(TMath::Abs(dphi_jj) / 2); leadJetPt = jet_lead_pt; weightModified = weightInput * datasetWeight; nJets20 = n_jet20; nJets25 = n_jet25; nJets30 = n_jet30; nJets35 = n_jet35; nJets40 = n_jet40; nJets45 = n_jet45; passedEntryNum++; passedWeightSum += weightInput; passedWeightSumNorm += weightModified; outputTree->Fill(); } outputTree->Write(); outputFile->Close(); return {double(passedEntryNum), passedWeightSum, passedWeightSumNorm}; }