diff --git a/interface/helpers.h b/interface/helpers.h new file mode 100644 index 0000000..ac766bb --- /dev/null +++ b/interface/helpers.h @@ -0,0 +1,7 @@ +int jet_flavour(const pat::Jet& jet, + const std::vector& gToBB, + const std::vector& gToCC, + const std::vector& neutrinosLepB, + const std::vector& neutrinosLepB_C, + const std::vector& alltaus, + bool usePhysForLightAndUndefined); diff --git a/plugins/DeepJetTableProducer.cc b/plugins/DeepJetTableProducer.cc index 4a5b7f0..48d5995 100644 --- a/plugins/DeepJetTableProducer.cc +++ b/plugins/DeepJetTableProducer.cc @@ -11,6 +11,8 @@ using namespace btagbtvdeep; +#include "DataFormats/Math/interface/deltaR.h" + #include "CommonTools/Utils/interface/StringCutObjectSelector.h" #include "DataFormats/NanoAOD/interface/FlatTable.h" #include @@ -21,9 +23,11 @@ using namespace btagbtvdeep; #include "DataFormats/BTauReco/interface/DeepFlavourTagInfo.h" // To store the gen info to get the truth flavour of the jet -//#include "DataFormats/PatCandidates/interface/Jet.h" +#include "DataFormats/PatCandidates/interface/Jet.h" #include "DataFormats/HepMCCandidate/interface/GenParticle.h" +#include "../interface/helpers.h" + template class DeepJetTableProducer : public edm::stream::EDProducer<> { public: @@ -32,7 +36,121 @@ class DeepJetTableProducer : public edm::stream::EDProducer<> { static void fillDescriptions(edm::ConfigurationDescriptions &descriptions); + int jet_flavour(const pat::Jet& jet, + const std::vector& gToBB, + const std::vector& gToCC, + const std::vector& neutrinosLepB, + const std::vector& neutrinosLepB_C, + const std::vector& alltaus, + bool usePhysForLightAndUndefined) { + + int hflav = abs(jet.hadronFlavour()); + int pflav = abs(jet.partonFlavour()); + int physflav = 0; + if ( !( jet.genJet() ) ){ + if (pflav == 0) return 999; + else return 1000; + } + if(jet.genParton()) physflav=abs(jet.genParton()->pdgId()); + std::size_t nbs = jet.jetFlavourInfo().getbHadrons().size(); + std::size_t ncs = jet.jetFlavourInfo().getcHadrons().size(); + + unsigned int nbFromGSP(0); + for (reco::GenParticle p : gToBB) { + double dr2(reco::deltaR2(jet, p)); + if (dr2 < jetR_ * jetR_) ++nbFromGSP; + } + + unsigned int ncFromGSP(0); + for (reco::GenParticle p : gToCC) { + double dr2(reco::deltaR2(jet, p)); + if (dr2 < jetR_ * jetR_) ++ncFromGSP; + } + //std::cout << " jet pt = " << jet.pt() << " hfl = " << hflav << " pfl = " << pflav << " genpart = " << physflav + // << " nbFromGSP = " << nbFromGSP << " ncFromGSP = " << ncFromGSP + // << " nBhadrons " << nbs << " nCHadrons " << ncs << std::endl; + if(hflav == 5) { //B jet + if(nbs > 1) { + if (nbFromGSP > 0) return 511; + else return 510; + } + else if(nbs == 1) { + for (std::vector::const_iterator it = neutrinosLepB.begin(); it != neutrinosLepB.end(); ++it){ + if(reco::deltaR2(it->eta(),it->phi(),jet.eta(),jet.phi()) < 0.4*0.4) { + return 520; + } + } + for (std::vector::const_iterator it = neutrinosLepB_C.begin(); it != neutrinosLepB_C.end(); ++it){ + if(reco::deltaR2(it->eta(),it->phi(),jet.eta(),jet.phi()) < 0.4*0.4) { + return 521; + } + } + return 500; + } + else { + if(usePhysForLightAndUndefined){ + if(physflav == 21) return 0; + else if(physflav == 3) return 2; + else if(physflav == 2 || physflav ==1) return 1; + else return 1000; + } + else return 1000; + } + } + else if(hflav == 4) { //C jet + if (ncs > 1) { + if (ncFromGSP > 0) return 411; + else return 410; + } + else return 400; + } + else { //not a heavy jet + if(alltaus.size()>0){ //check for tau in a simplistic way + bool ishadrtaucontained=true; + for(const auto& p:alltaus){ + size_t ndau=p.numberOfDaughters(); + for(size_t i=0;ipdgId()); + if(daupid == 13 || daupid == 11){ + ishadrtaucontained=false; + break; + } + if(daupid != 12 && daupid!=14 && daupid!=16 && + reco::deltaR2(*dau,jet) > jetR_*jetR_){ + ishadrtaucontained=false; + break; + } + } + } + if(ishadrtaucontained) return 600; + } + if(std::abs(pflav) == 4 || std::abs(pflav) == 5 || nbs || ncs) { + if(usePhysForLightAndUndefined){ + if(physflav == 21) return 0; + else if(physflav == 3) return 2; + else if(physflav == 2 || physflav ==1) return 1; + else return 1000; + } + else return 1000; + } + else if(usePhysForLightAndUndefined){ + if(physflav == 21) return 0; + else if(physflav == 3) return 2; + else if(physflav == 2 || physflav ==1) return 1; + else return 1000; + } + else { + if(pflav == 21) return 0; + else if(pflav == 3) return 2; + else if(pflav == 2 || pflav ==1) return 1; + else return 1000; + } + } + + } + private: void produce(edm::Event &, const edm::EventSetup &) override; @@ -48,7 +166,6 @@ class DeepJetTableProducer : public edm::stream::EDProducer<> { typedef std::vector TagInfoCollection; const edm::EDGetTokenT tag_info_src_; - constexpr static unsigned n_cpf_ = 25; constexpr static unsigned n_npf_ = 25; constexpr static unsigned n_sv_ = 4; // 5 @@ -138,7 +255,7 @@ void DeepJetTableProducer::produce(edm::Event &iEvent, const edm::EventSetup std::vector> Npfcan_drminsv_nNpf(n_npf_, std::vector(nJets)); std::vector> Npfcan_puppiw_nNpf(n_npf_, std::vector(nJets)); /* - // not relevant for this version of the tagger + // only after dataformat updated as well std::vector> Npfcan_etarel_nNpf(n_npf_, std::vector(nJets)); std::vector> Npfcan_phirel_nNpf(n_npf_, std::vector(nJets)); */ @@ -156,166 +273,73 @@ void DeepJetTableProducer::produce(edm::Event &iEvent, const edm::EventSetup std::vector> sv_d3dsig_nSV(n_sv_, std::vector(nJets)); std::vector> sv_costhetasvpv_nSV(n_sv_, std::vector(nJets)); /* - // not relevant for this version of the tagger + // only after dataformat updated as well std::vector> sv_etarel_nSV(n_sv_, std::vector(nJets)); std::vector> sv_phirel_nSV(n_sv_, std::vector(nJets)); */ std::vector> sv_deltaR_nSV(n_sv_, std::vector(nJets)); std::vector> sv_enratio_nSV(n_sv_, std::vector(nJets)); + if (storeAK4Truth_ == "yes") { + + neutrinosLepB.clear(); + neutrinosLepB_C.clear(); + gToBB.clear(); + gToCC.clear(); + alltaus.clear(); + + for (const reco::Candidate &genC : *genParticlesHandle) { + const reco::GenParticle &gen = static_cast< const reco::GenParticle &>(genC); + if(abs(gen.pdgId())==12||abs(gen.pdgId())==14||abs(gen.pdgId())==16) { + const reco::GenParticle* mother = static_cast< const reco::GenParticle*> (gen.mother()); + if(mother!=NULL) { + if((abs(mother->pdgId())>500&&abs(mother->pdgId())<600)||(abs(mother->pdgId())>5000&&abs(mother->pdgId())<6000)) { + neutrinosLepB.emplace_back(gen); + } + if((abs(mother->pdgId())>400&&abs(mother->pdgId())<500)||(abs(mother->pdgId())>4000&&abs(mother->pdgId())<5000)) { + neutrinosLepB_C.emplace_back(gen); + } + } + else { + std::cout << "No mother" << std::endl; + } + } + + int id(std::abs(gen.pdgId())); + int status(gen.status()); + + if (id == 21 && status >= 21 && status <= 59) { //// Pythia8 hard scatter, ISR, or FSR + if ( gen.numberOfDaughters() == 2 ) { + const reco::Candidate* d0 = gen.daughter(0); + const reco::Candidate* d1 = gen.daughter(1); + if ( std::abs(d0->pdgId()) == 5 && std::abs(d1->pdgId()) == 5 + && d0->pdgId()*d1->pdgId() < 0 && reco::deltaR2(*d0, *d1) < jetR_ * jetR_) gToBB.push_back(gen) ; + if ( std::abs(d0->pdgId()) == 4 && std::abs(d1->pdgId()) == 4 + && d0->pdgId()*d1->pdgId() < 0 && reco::deltaR2(*d0, *d1) < jetR_ * jetR_) gToCC.push_back(gen) ; + } + } + + if(id == 15 && false){ + alltaus.push_back(gen); + } + + } + + } + if (!tag_infos->empty()) { for (unsigned i_jet = 0; i_jet < nJets; ++i_jet) { if (storeAK4Truth_ == "yes") { + // from DeepNTuples const auto &jet = jets->at(i_jet); - neutrinosLepB.clear(); - neutrinosLepB_C.clear(); - gToBB.clear(); - gToCC.clear(); - alltaus.clear(); - for (const reco::Candidate &genC : *genParticlesHandle) { - const reco::GenParticle &gen = static_cast< const reco::GenParticle &>(genC); - if(abs(gen.pdgId())==12||abs(gen.pdgId())==14||abs(gen.pdgId())==16) { - const reco::GenParticle* mother = static_cast< const reco::GenParticle*> (gen.mother()); - if(mother!=NULL) { - if((abs(mother->pdgId())>500&&abs(mother->pdgId())<600)||(abs(mother->pdgId())>5000&&abs(mother->pdgId())<6000)) { - neutrinosLepB.emplace_back(gen); - } - if((abs(mother->pdgId())>400&&abs(mother->pdgId())<500)||(abs(mother->pdgId())>4000&&abs(mother->pdgId())<5000)) { - neutrinosLepB_C.emplace_back(gen); - } - } - else { - std::cout << "No mother" << std::endl; - } - } - - int id(std::abs(gen.pdgId())); - int status(gen.status()); - - if (id == 21 && status >= 21 && status <= 59) { //// Pythia8 hard scatter, ISR, or FSR - if ( gen.numberOfDaughters() == 2 ) { - const reco::Candidate* d0 = gen.daughter(0); - const reco::Candidate* d1 = gen.daughter(1); - if ( std::abs(d0->pdgId()) == 5 && std::abs(d1->pdgId()) == 5 - && d0->pdgId()*d1->pdgId() < 0 && reco::deltaR(*d0, *d1) < jetR_) gToBB.push_back(gen) ; - if ( std::abs(d0->pdgId()) == 4 && std::abs(d1->pdgId()) == 4 - && d0->pdgId()*d1->pdgId() < 0 && reco::deltaR(*d0, *d1) < jetR_) gToCC.push_back(gen) ; - } - } - - if(id == 15 && false){ - alltaus.push_back(gen); - } - - } + jet_FlavSplit[i_jet] = jet_flavour(jet, gToBB, gToCC, neutrinosLepB, neutrinosLepB_C, alltaus, usePhysForLightAndUndefined); - int hflav = abs(jet.hadronFlavour()); - int pflav = abs(jet.partonFlavour()); - int physflav = 0; - if(jet.genParton()) physflav=abs(jet.genParton()->pdgId()); - std::size_t nbs = jet.jetFlavourInfo().getbHadrons().size(); - std::size_t ncs = jet.jetFlavourInfo().getcHadrons().size(); - - unsigned int nbFromGSP(0); - for (reco::GenParticle p : gToBB) { - double dr(reco::deltaR(jet, p)); - if (dr < jetR_) ++nbFromGSP; - } - - unsigned int ncFromGSP(0); - for (reco::GenParticle p : gToCC) { - double dr(reco::deltaR(jet, p)); - if (dr < jetR_) ++ncFromGSP; - } - - //std::cout << " jet pt = " << jet.pt() << " hfl = " << hflav << " pfl = " << pflav << " genpart = " << physflav - // << " nbFromGSP = " << nbFromGSP << " ncFromGSP = " << ncFromGSP - // << " nBhadrons " << nbs << " nCHadrons " << ncs << std::endl; - if(hflav == 5) { //B jet - if(nbs > 1) { - if (nbFromGSP > 0) jet_FlavSplit[i_jet] = 511; - else jet_FlavSplit[i_jet] = 510; - } - else if(nbs == 1) { - for (std::vector::const_iterator it = neutrinosLepB.begin(); it != neutrinosLepB.end(); ++it){ - if(reco::deltaR(it->eta(),it->phi(),jet.eta(),jet.phi()) < 0.4) { - jet_FlavSplit[i_jet] = 520; - } - } - for (std::vector::const_iterator it = neutrinosLepB_C.begin(); it != neutrinosLepB_C.end(); ++it){ - if(reco::deltaR(it->eta(),it->phi(),jet.eta(),jet.phi()) < 0.4) { - jet_FlavSplit[i_jet] = 521; - } - } - jet_FlavSplit[i_jet] = 500; - } - else { - if(usePhysForLightAndUndefined){ - if(physflav == 21) jet_FlavSplit[i_jet] = 0; - else if(physflav == 3) jet_FlavSplit[i_jet] = 2; - else if(physflav == 2 || physflav ==1) jet_FlavSplit[i_jet] = 1; - else jet_FlavSplit[i_jet] = 1000; - } - else jet_FlavSplit[i_jet] = 1000; - } - } - else if(hflav == 4) { //C jet - if (ncs > 1) { - if (ncFromGSP > 0) jet_FlavSplit[i_jet] = 411; - else jet_FlavSplit[i_jet] = 410; - } - else jet_FlavSplit[i_jet] = 400; - } - else { //not a heavy jet - if(alltaus.size()>0){ //check for tau in a simplistic way - bool ishadrtaucontained=true; - for(const auto& p:alltaus){ - size_t ndau=p.numberOfDaughters(); - for(size_t i=0;ipdgId()); - if(daupid == 13 || daupid == 11){ - ishadrtaucontained=false; - break; - } - if(daupid != 12 && daupid!=14 && daupid!=16 && - reco::deltaR(*dau,jet) > jetR_){ - ishadrtaucontained=false; - break; - } - } - } - if(ishadrtaucontained) jet_FlavSplit[i_jet] = 600; - } - if(std::abs(pflav) == 4 || std::abs(pflav) == 5 || nbs || ncs) { - if(usePhysForLightAndUndefined){ - if(physflav == 21) jet_FlavSplit[i_jet] = 0; - else if(physflav == 3) jet_FlavSplit[i_jet] = 2; - else if(physflav == 2 || physflav ==1) jet_FlavSplit[i_jet] = 1; - else jet_FlavSplit[i_jet] = 1000; - } - else jet_FlavSplit[i_jet] = 1000; - } - else if(usePhysForLightAndUndefined){ - if(physflav == 21) jet_FlavSplit[i_jet] = 0; - else if(physflav == 3) jet_FlavSplit[i_jet] = 2; - else if(physflav == 2 || physflav ==1) jet_FlavSplit[i_jet] = 1; - else jet_FlavSplit[i_jet] = 1000; - } - else { - if(pflav == 21) jet_FlavSplit[i_jet] = 0; - else if(pflav == 3) jet_FlavSplit[i_jet] = 2; - else if(pflav == 2 || pflav ==1) jet_FlavSplit[i_jet] = 1; - else jet_FlavSplit[i_jet] = 1000; - } - } - } // jet loop reads tag info instead of constituent info @@ -364,8 +388,11 @@ void DeepJetTableProducer::produce(edm::Event &iEvent, const edm::EventSetup Npfcan_HadFrac_nNpf[n_pf_n][i_jet] = n_pf_features.hadFrac; Npfcan_drminsv_nNpf[n_pf_n][i_jet] = n_pf_features.drminsv; Npfcan_puppiw_nNpf[n_pf_n][i_jet] = n_pf_features.puppiw; - //Npfcan_etarel_nNpf[n_pf_n][i_jet] = n_pf_features.etarel; - //Npfcan_phirel_nNpf[n_pf_n][i_jet] = n_pf_features.phirel; + /* + // only after dataformat updated as well + Npfcan_etarel_nNpf[n_pf_n][i_jet] = n_pf_features.etarel; + Npfcan_phirel_nNpf[n_pf_n][i_jet] = n_pf_features.phirel; + */ } // sv candidates @@ -384,33 +411,36 @@ void DeepJetTableProducer::produce(edm::Event &iEvent, const edm::EventSetup sv_d3dsig_nSV[sv_n][i_jet] = sv_features.d3dsig; sv_costhetasvpv_nSV[sv_n][i_jet] = sv_features.costhetasvpv; sv_enratio_nSV[sv_n][i_jet] = sv_features.enratio; - //sv_etarel_nSV[sv_n][i_jet] = sv_features.etarel; - //sv_phirel_nSV[sv_n][i_jet] = sv_features.phirel; + /* + // only after dataformat updated as well + sv_etarel_nSV[sv_n][i_jet] = sv_features.etarel; + sv_phirel_nSV[sv_n][i_jet] = sv_features.phirel; + */ } } } // DeepJetInputs table auto djTable = std::make_unique(jet_N_CPFCands.size(), nameDeepJet_, false, true); - //djTable->addColumn("DeepJet_jetIdx", jetIdx_dj, "Index of the parent jet", nanoaod::FlatTable::IntColumn); + //djTable->addColumn("DeepJet_jetIdx", jetIdx_dj, "Index of the parent jet", ); djTable->addColumn("DeepJet_nCpfcand", jet_N_CPFCands, - "Number of charged PF candidates in the jet", - nanoaod::FlatTable::IntColumn); + "Number of charged PF candidates in the jet" + ); djTable->addColumn("DeepJet_nNpfcand", jet_N_NPFCands, - "Number of neutral PF candidates in the jet", - nanoaod::FlatTable::IntColumn); + "Number of neutral PF candidates in the jet" + ); djTable->addColumn("DeepJet_nsv", jet_N_SVs, - "Number of secondary vertices in the jet", - nanoaod::FlatTable::IntColumn); + "Number of secondary vertices in the jet" + ); djTable->addColumn("DeepJet_npv", jet_N_PVs, - "Number of primary vertices", - nanoaod::FlatTable::IntColumn); + "Number of primary vertices" + ); //if (true) { if (storeAK4Truth_ == "yes") { @@ -430,9 +460,10 @@ void DeepJetTableProducer::produce(edm::Event &iEvent, const edm::EventSetup "isLeptonicB: 520, " "isLeptonicB_C: 521, " "isTAU: 600, " + "isPU: 999," "isUndefined: 1000. " - "May be combined to form coarse labels for tagger training and flavour dependent attacks using the loss surface.", - nanoaod::FlatTable::IntColumn); + "May be combined to form coarse labels for tagger training and flavour dependent attacks using the loss surface." + ); } // ============================================================== Cpfs =================================================================== @@ -442,68 +473,68 @@ void DeepJetTableProducer::produce(edm::Event &iEvent, const edm::EventSetup djTable->addColumn("DeepJet_Cpfcan_puppiw_" + s, Cpfcan_puppiw_nCpf[p], "charged candidate PUPPI weight of the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_VTX_ass_" + s, Cpfcan_VTX_ass_nCpf[p], "integer flag that indicates whether the track was used in the primary vertex fit for the " + s + ". cpf", - nanoaod::FlatTable::IntColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_drminsv_" + s, Cpfcan_drminsv_nCpf[p], "track pseudoangular distance from the closest secondary vertex of the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_ptrel_" + s, Cpfcan_ptrel_nCpf[p], "fraction of the jet momentum carried by the track for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_quality_" + s, Cpfcan_quality_nCpf[p], "integer flag which indicates the quality of the fitted track, based on number of detector hits used for the reconstruction as well as the overall chi2 of the charged track fit for the " + s + ". cpf", - nanoaod::FlatTable::IntColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_chi2_" + s, Cpfcan_chi2_nCpf[p], "chi2 of the charged track fit for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_BtagPf_trackDeltaR_" + s, Cpfcan_BtagPf_trackDeltaR_nCpf[p], "track pseudoangular distance from the jet axis for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_BtagPf_trackEtaRel_" + s, Cpfcan_BtagPf_trackEtaRel_nCpf[p], "track pseudorapidity, relative to the jet axis for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_BtagPf_trackJetDistVal_" + s, Cpfcan_BtagPf_trackJetDistVal_nCpf[p], "minimum track approach distance to jet axis for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_BtagPf_trackPPar_" + s, Cpfcan_BtagPf_trackPPar_nCpf[p], "dot product of the jet and track momentum for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_BtagPf_trackPParRatio_" + s, Cpfcan_BtagPf_trackPParRatio_nCpf[p], "dot product of the jet and track momentum divided by the magnitude of the jet momentum for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_BtagPf_trackPtRel_" + s, Cpfcan_BtagPf_trackPtRel_nCpf[p], "track transverse momentum, relative to the jet axis for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_BtagPf_trackSip2dSig_" + s, Cpfcan_BtagPf_trackSip2dSig_nCpf[p], "track 2D signed impact parameter significance for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_BtagPf_trackSip3dSig_" + s, Cpfcan_BtagPf_trackSip3dSig_nCpf[p], "track 3D signed impact parameter significance for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_BtagPf_trackSip2dVal_" + s, Cpfcan_BtagPf_trackSip2dVal_nCpf[p], "track 2D signed impact parameter for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Cpfcan_BtagPf_trackSip3dVal_" + s, Cpfcan_BtagPf_trackSip3dVal_nCpf[p], "track 3D signed impact parameter for the " + s + ". cpf", - nanoaod::FlatTable::FloatColumn, 10); + 10); } @@ -514,28 +545,38 @@ void DeepJetTableProducer::produce(edm::Event &iEvent, const edm::EventSetup djTable->addColumn("DeepJet_Npfcan_puppiw_" + s, Npfcan_puppiw_nNpf[p], "neutral candidate PUPPI weight for the " + s + ". npf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Npfcan_deltaR_" + s, Npfcan_deltaR_nNpf[p], "pseudoangular distance between the neutral candidate and the jet axis for the " + s + ". npf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Npfcan_drminsv_" + s, Npfcan_drminsv_nNpf[p], "pseudoangular distance between the neutral candidate and the closest secondary vertex for the " + s + ". npf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Npfcan_HadFrac_" + s, Npfcan_HadFrac_nNpf[p], "fraction of the neutral candidate energy deposited in the hadronic calorimeter for the " + s + ". npf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Npfcan_ptrel_" + s, Npfcan_ptrel_nNpf[p], "fraction of the jet momentum carried by the neutral candidate for the " + s + ". npf", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_Npfcan_isGamma_" + s, Npfcan_isGamma_nNpf[p], "integer flag indicating whether the neutral candidate is a photon for the " + s + ". npf", - nanoaod::FlatTable::IntColumn, 10); - + 10); + /* + // only after dataformat updated as well + djTable->addColumn("DeepJetExtra_Npfcan_etarel_" + s, + Npfcan_etarel_nNpf[p], + "pseudorapidity relative to parent jet for the " + s + ". npf", + 10); + djTable->addColumn("DeepJetExtra_Npfcan_phirel_" + s, + Npfcan_phirel_nNpf[p], + "DeltaPhi(npf, jet) for the " + s + ". npf", + 10); + */ } // ============================================================== SVs =================================================================== @@ -545,62 +586,62 @@ void DeepJetTableProducer::produce(edm::Event &iEvent, const edm::EventSetup djTable->addColumn("DeepJet_sv_mass_" + s, sv_mass_nSV[p], "SV mass of the " + s + ". SV", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_sv_pt_" + s, sv_pt_nSV[p], "SV pt of the " + s + ". SV", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_sv_ntracks_" + s, sv_ntracks_nSV[p], "Number of tracks asociated to the " + s + ". SV", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_sv_chi2_" + s, sv_chi2_nSV[p], "chi2 of the " + s + ". SV", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_sv_normchi2_" + s, sv_normchi2_nSV[p], "chi2/dof of the " + s + ". SV", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_sv_dxy_" + s, sv_dxy_nSV[p], "2D impact parameter (flight distance) value of the " + s + ". SV", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_sv_dxysig_" + s, sv_dxysig_nSV[p], "2D impact parameter (flight distance) significance of the " + s + ". SV", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_sv_d3d_" + s, sv_d3d_nSV[p], "3D impact parameter (flight distance) value of the " + s + ". SV", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_sv_d3dsig_" + s, sv_d3dsig_nSV[p], "3D impact parameter (flight distance) significance of the " + s + ". SV", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_sv_costhetasvpv_" + s, sv_costhetasvpv_nSV[p], "cosine of the angle between the " + s + ". SV flight direction and the direction of the " + s + ". SV momentum", - nanoaod::FlatTable::FloatColumn, 10); + 10); /* - // only relevant if also included in the tag info, not yet, maybe in future versions of the tagger + // only after dataformat updated as well djTable->addColumn("DeepJetExtra_sv_etarel_" + s, sv_etarel_nSV[p], "pseudorapidity relative to parent jet for the " + s + ". SV", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJetExtra_sv_phirel_" + s, sv_phirel_nSV[p], "DeltaPhi(sv, jet) for the " + s + ". SV", - nanoaod::FlatTable::FloatColumn, 10); + 10); */ djTable->addColumn("DeepJet_sv_deltaR_" + s, sv_deltaR_nSV[p], "pseudoangular distance between jet axis and the " + s + ". SV direction", - nanoaod::FlatTable::FloatColumn, 10); + 10); djTable->addColumn("DeepJet_sv_enratio_" + s, sv_enratio_nSV[p], "ratio of the " + s + ". SV energy ratio to the jet energy", - nanoaod::FlatTable::FloatColumn, 10); + 10); } @@ -616,7 +657,7 @@ void DeepJetTableProducer::fillDescriptions(edm::ConfigurationDescriptions &d desc.add("idx_nameDeepJet", "djIdx"); desc.add("storeAK4Truth","no"); desc.add("genparticles", edm::InputTag("prunedGenParticles")); - desc.add("jets", edm::InputTag("slimmedJets")); + desc.add("jets", edm::InputTag("slimmedJetsPuppi")); desc.add("tagInfo_src", edm::InputTag("pfDeepFlavourTagInfosWithDeepInfo")); descriptions.addWithDefaultLabel(desc); } diff --git a/plugins/JetConstituentTableProducer.cc b/plugins/JetConstituentTableProducer.cc index 56adb70..3af53cd 100644 --- a/plugins/JetConstituentTableProducer.cc +++ b/plugins/JetConstituentTableProducer.cc @@ -62,6 +62,7 @@ class JetConstituentTableProducer : public edm::stream::EDProducer<> { edm::Handle cands_; edm::Handle svs_; edm::ESHandle track_builder_; + const edm::ESGetToken track_builder_token_; const reco::Vertex *pv_ = nullptr; @@ -81,7 +82,9 @@ JetConstituentTableProducer::JetConstituentTableProducer(const edm::Parameter jet_token_(consumes>(iConfig.getParameter("jets"))), vtx_token_(consumes(iConfig.getParameter("vertices"))), cand_token_(consumes(iConfig.getParameter("candidates"))), - sv_token_(consumes(iConfig.getParameter("secondary_vertices"))){ + sv_token_(consumes(iConfig.getParameter("secondary_vertices"))), + track_builder_token_( + esConsumes(edm::ESInputTag("", "TransientTrackBuilder"))){ //produces(name_); produces(name_); produces(nameSV_); @@ -109,7 +112,10 @@ void JetConstituentTableProducer::produce(edm::Event &iEvent, const edm::Even iEvent.getByToken(sv_token_, svs_); if(readBtag_){ - iSetup.get().get("TransientTrackBuilder", track_builder_); + //iSetup.get().get("TransientTrackBuilder", track_builder_); + edm::ESHandle track_builder_ = iSetup.getHandle(track_builder_token_); + //auto const& data = iEventSetup.getData(esToken_); + //auto transientHandle = iEventSetup.getTransientHandle(esToken_)); } for (unsigned i_jet = 0; i_jet < jets->size(); ++i_jet) { @@ -216,40 +222,40 @@ void JetConstituentTableProducer::produce(edm::Event &iEvent, const edm::Even auto candTable = std::make_unique(outCands->size(), name_, false); // We fill from here only stuff that cannot be created with the SimpleFlatTableProducer - candTable->addColumn(idx_name_, pfcandIdx, "Index in the candidate list", nanoaod::FlatTable::IntColumn); - candTable->addColumn("jetIdx", jetIdx_pf, "Index of the parent jet", nanoaod::FlatTable::IntColumn); + candTable->addColumn(idx_name_, pfcandIdx, "Index in the candidate list"); + candTable->addColumn("jetIdx", jetIdx_pf, "Index of the parent jet"); if (readBtag_) { - candTable->addColumn("pt", cand_pt, "pt", nanoaod::FlatTable::FloatColumn, 10); // to check matchind down the line - candTable->addColumn("btagEtaRel", btagEtaRel, "btagEtaRel", nanoaod::FlatTable::FloatColumn, 10); - candTable->addColumn("btagPtRatio", btagPtRatio, "btagPtRatio", nanoaod::FlatTable::FloatColumn, 10); - candTable->addColumn("btagPParRatio", btagPParRatio, "btagPParRatio", nanoaod::FlatTable::FloatColumn, 10); - candTable->addColumn("btagSip3dVal", btagSip3dVal, "btagSip3dVal", nanoaod::FlatTable::FloatColumn, 10); - candTable->addColumn("btagSip3dSig", btagSip3dSig, "btagSip3dSig", nanoaod::FlatTable::FloatColumn, 10); - candTable->addColumn("btagJetDistVal", btagJetDistVal, "btagJetDistVal", nanoaod::FlatTable::FloatColumn, 10); + candTable->addColumn("pt", cand_pt, "pt", 10); // to check matchind down the line + candTable->addColumn("btagEtaRel", btagEtaRel, "btagEtaRel", 10); + candTable->addColumn("btagPtRatio", btagPtRatio, "btagPtRatio", 10); + candTable->addColumn("btagPParRatio", btagPParRatio, "btagPParRatio", 10); + candTable->addColumn("btagSip3dVal", btagSip3dVal, "btagSip3dVal", 10); + candTable->addColumn("btagSip3dSig", btagSip3dSig, "btagSip3dSig", 10); + candTable->addColumn("btagJetDistVal", btagJetDistVal, "btagJetDistVal", 10); } iEvent.put(std::move(candTable), name_); // SV table auto svTable = std::make_unique(outSVs->size(), nameSV_, false); // We fill from here only stuff that cannot be created with the SimpleFlatTnameableProducer - svTable->addColumn("jetIdx", jetIdx_sv, "Index of the parent jet", nanoaod::FlatTable::IntColumn); - svTable->addColumn(idx_nameSV_, svIdx, "Index in the SV list", nanoaod::FlatTable::IntColumn); + svTable->addColumn("jetIdx", jetIdx_sv, "Index of the parent jet"); + svTable->addColumn(idx_nameSV_, svIdx, "Index in the SV list"); if (readBtag_) { - svTable->addColumn("mass", sv_mass, "SV mass", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("pt", sv_pt, "SV pt", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("ntracks", sv_ntracks, "Number of tracks associated to SV", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("chi2", sv_chi2, "chi2", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("normchi2", sv_normchi2, "chi2/ndof", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("dxy", sv_dxy, "", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("dxysig", sv_dxysig, "", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("d3d", sv_d3d, "", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("d3dsig", sv_d3dsig, "", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("costhetasvpv", sv_costhetasvpv, "", nanoaod::FlatTable::FloatColumn, 10); + svTable->addColumn("mass", sv_mass, "SV mass", 10); + svTable->addColumn("pt", sv_pt, "SV pt", 10); + svTable->addColumn("ntracks", sv_ntracks, "Number of tracks associated to SV", 10); + svTable->addColumn("chi2", sv_chi2, "chi2", 10); + svTable->addColumn("normchi2", sv_normchi2, "chi2/ndof", 10); + svTable->addColumn("dxy", sv_dxy, "", 10); + svTable->addColumn("dxysig", sv_dxysig, "", 10); + svTable->addColumn("d3d", sv_d3d, "", 10); + svTable->addColumn("d3dsig", sv_d3dsig, "", 10); + svTable->addColumn("costhetasvpv", sv_costhetasvpv, "", 10); // Jet related - svTable->addColumn("phirel", sv_phirel, "DeltaPhi(sv, jet)", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("ptrel", sv_ptrel, "pT relative to parent jet", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("deltaR", sv_deltaR, "dR from parent jet", nanoaod::FlatTable::FloatColumn, 10); - svTable->addColumn("enration", sv_enratio, "energy relative to parent jet", nanoaod::FlatTable::FloatColumn, 10); + svTable->addColumn("phirel", sv_phirel, "DeltaPhi(sv, jet)", 10); + svTable->addColumn("ptrel", sv_ptrel, "pT relative to parent jet", 10); + svTable->addColumn("deltaR", sv_deltaR, "dR from parent jet", 10); + svTable->addColumn("enration", sv_enratio, "energy relative to parent jet", 10); } iEvent.put(std::move(svTable), nameSV_); diff --git a/python/addBTV.py b/python/addBTV.py index 4dfea35..c9b4ed3 100644 --- a/python/addBTV.py +++ b/python/addBTV.py @@ -1,11 +1,16 @@ import FWCore.ParameterSet.Config as cms # from PhysicsTools.NanoAOD.common_cff import * from PhysicsTools.NanoAOD.common_cff import Var -from PhysicsTools.NanoAOD.jets_cff import jetTable, fatJetTable, subJetTable +#from PhysicsTools.NanoAOD.jets_cff import jetTable, fatJetTable, subJetTable +from PhysicsTools.NanoAOD.jetsAK4_CHS_cff import jetTable, jetCorrFactorsNano, updatedJets, finalJets, qgtagger, hfJetShowerShapeforNanoAOD +#from PhysicsTools.NanoAOD.jetsAK4_CHS_cff import jetTable, jetCorrFactorsNano, qgtagger, hfJetShowerShapeforNanoAOD +from PhysicsTools.NanoAOD.jetsAK4_Puppi_cff import jetPuppiTable, jetPuppiCorrFactorsNano, updatedJetsPuppi, updatedJetsPuppiWithUserData +from PhysicsTools.NanoAOD.jetsAK8_cff import fatJetTable, subJetTable from PhysicsTools.PatAlgos.tools.jetTools import updateJetCollection from PhysicsTools.PatAlgos.tools.helpers import addToProcessAndTask, getPatAlgosToolsTask + def update_jets_AK4(process): # Based on ``nanoAOD_addDeepInfo`` # in https://github.com/cms-sw/cmssw/blob/master/PhysicsTools/NanoAOD/python/nano_cff.py @@ -26,6 +31,27 @@ def update_jets_AK4(process): 'pfDeepFlavourJetTags:probg' ] + from PhysicsTools.PatAlgos.recoLayer0.jetCorrFactors_cfi import patJetCorrFactors + # Note: Safe to always add 'L2L3Residual' as MC contains dummy L2L3Residual corrections (always set to 1) + # (cf. https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookJetEnergyCorrections#CMSSW_7_6_4_and_above ) + jetCorrFactorsNano = patJetCorrFactors.clone(src='slimmedJets', + levels = cms.vstring('L1FastJet', + 'L2Relative', + 'L3Absolute', + 'L2L3Residual'), + primaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"), + ) + + from PhysicsTools.PatAlgos.producersLayer1.jetUpdater_cfi import updatedPatJets + updatedJets = updatedPatJets.clone( + addBTagInfo=False, + jetSource='slimmedJets', + jetCorrFactorsSource=cms.VInputTag(cms.InputTag("jetCorrFactorsNano") ), + tagInfoSources=["pfDeepCSVTagInfosWithDeepInfo","pfDeepFlavourTagInfosWithDeepInfo"], + addTagInfos=cms.bool(True), + discriminatorSources=_btagDiscriminators, + ) + updateJetCollection( process, jetSource=cms.InputTag('slimmedJets'), @@ -33,18 +59,31 @@ def update_jets_AK4(process): cms.vstring( ['L1FastJet', 'L2Relative', 'L3Absolute', 'L2L3Residual']), 'None'), + #jetSource=cms.InputTag('slimmedJetsPuppi'), + #jetCorrections=('AK4PFPuppi', + # cms.vstring( + # ['L1FastJet', 'L2Relative', 'L3Absolute', + # 'L2L3Residual']), 'None'), btagDiscriminators=_btagDiscriminators, postfix='WithDeepInfo', ) process.load("Configuration.StandardSequences.MagneticField_cff") process.jetCorrFactorsNano.src = "selectedUpdatedPatJetsWithDeepInfo" process.updatedJets.jetSource = "selectedUpdatedPatJetsWithDeepInfo" - + + #process.updatedJetsWithDeepInfo = updatedJets process.updatedPatJetsTransientCorrectedWithDeepInfo.tagInfoSources.append(cms.InputTag("pfDeepCSVTagInfosWithDeepInfo")) process.updatedPatJetsTransientCorrectedWithDeepInfo.tagInfoSources.append(cms.InputTag("pfDeepFlavourTagInfosWithDeepInfo")) + #process.updatedJetsWithDeepInfo.tagInfoSources.append(cms.InputTag("pfDeepFlavourTagInfosWithDeepInfo")) + process.updatedPatJetsTransientCorrectedWithDeepInfo.addTagInfos = cms.bool(True) + finalJets = cms.EDFilter("PATJetRefSelector", + src = cms.InputTag("selectedUpdatedPatJetsWithDeepInfo"), + cut = cms.string("pt > 15") + ) + return process @@ -302,7 +341,7 @@ def add_BTV(process, runOnMC=False, onlyAK4=False, onlyAK8=False, keepInputs=['D # AK4 process.customJetExtTable = cms.EDProducer( "SimpleCandidateFlatTableProducer", - src=jetTable.src, + src=cms.InputTag("linkedObjects","jets"), cut=jetTable.cut, name=jetTable.name, doc=jetTable.doc, @@ -317,9 +356,46 @@ def add_BTV(process, runOnMC=False, onlyAK4=False, onlyAK8=False, keepInputs=['D if ('DeepJet' in keepInputs): if runOnMC == False and storeAK4Truth == "yes": storeAK4Truth = "no" # data does not have truth information, avoid crashes in producer. + #process.finalJets = finalJets + #process.content = cms.EDAnalyzer("EventContentAnalyzer") + + #finalJets = cms.EDFilter("PATJetRefSelector", + # src = cms.InputTag("updatedPatJetsWithDeepInfo"), + # cut = cms.string("pt > 15") # test with -1 to not require sth + #) + #process.finalJets = finalJets + + + # from PhysicsTools.PatAlgos.recoLayer0.jetCorrFactors_cfi import patJetCorrFactors + # # Note: Safe to always add 'L2L3Residual' as MC contains dummy L2L3Residual corrections (always set to 1) + # # (cf. https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookJetEnergyCorrections#CMSSW_7_6_4_and_above ) + # jetCorrFactorsNano = patJetCorrFactors.clone(src='slimmedJets', + # levels = cms.vstring('L1FastJet', + # 'L2Relative', + # 'L3Absolute', + # 'L2L3Residual'), + # primaryVertices = cms.InputTag("offlineSlimmedPrimaryVertices"), + # ) + + # from PhysicsTools.PatAlgos.producersLayer1.jetUpdater_cfi import updatedPatJets + # updatedJets = updatedPatJets.clone( + # addBTagInfo=False, + # jetSource='slimmedJets', + # jetCorrFactorsSource=cms.VInputTag(cms.InputTag("jetCorrFactorsNano") ), + # ) + # finalJets = cms.EDFilter("PATJetRefSelector", + # src = cms.InputTag("updatedJets"), + # cut = cms.string("pt > 15") + # ) + + process.customAK4ConstituentsForDeepJetTable = cms.EDProducer("PatJetDeepJetTableProducer", - jets = cms.InputTag("finalJets"), - storeAK4Truth = cms.string(storeAK4Truth) + #jets = cms.InputTag("finalJets"), + jets = cms.InputTag("linkedObjects","jets"), + #jets = jetTable.src, + #jets = cms.InputTag("slimmedJets"), + storeAK4Truth = cms.string(storeAK4Truth), + #nameDeepJet = cms.string("JetCHS"), ) @@ -376,14 +452,17 @@ def add_BTV(process, runOnMC=False, onlyAK4=False, onlyAK8=False, keepInputs=['D ) if addAK4: - process.customizeJetTask.add(process.customJetExtTable) + #process.customizeJetTask.add(process.customJetExtTable) if ('DeepJet' in keepInputs): + #process.customizeJetTask.add(process.content) + #process.customizeJetTask.add(process.updatedJets) + #process.customizeJetTask.add(process.finalJets) process.customizeJetTask.add(process.customAK4ConstituentsForDeepJetTable) if addAK8: process.customizeJetTask.add(process.customFatJetExtTable) process.customizeJetTask.add(process.customSubJetExtTable) - if runOnMC and addAK8: - process.customizeJetTask.add(process.customSubJetMCExtTable) + if runOnMC: + process.customizeJetTask.add(process.customSubJetMCExtTable) return process diff --git a/python/addPFCands_cff.py b/python/addPFCands_cff.py index 1f1a90c..6319122 100644 --- a/python/addPFCands_cff.py +++ b/python/addPFCands_cff.py @@ -64,7 +64,7 @@ def addPFCands(process, runOnMC=False, allPF = False, onlyAK4=False, onlyAK8=Fal process.customAK4ConstituentsTable = cms.EDProducer("PatJetConstituentTableProducer", #candidates = cms.InputTag("packedPFCandidates"), candidates = candInput, - jets = cms.InputTag("finalJets"), + jets = cms.InputTag("linkedObjects","jets"), # was finalJets before jet_radius = cms.double(0.4), name = cms.string("JetPFCands"), idx_name = cms.string("pFCandsIdx"), diff --git a/python/pfnano_cff.py b/python/pfnano_cff.py index d3a223f..d0499f0 100644 --- a/python/pfnano_cff.py +++ b/python/pfnano_cff.py @@ -66,7 +66,7 @@ def PFnano_customizeData(process): return process def PFnano_customizeData_add_DeepJet(process): - addPFCands(process, False) + #addPFCands(process, False) add_BTV(process, False, keepInputs=['DeepCSV','DeepJet','DDX']) process.NANOAODSIMoutput.fakeNameForCrab = cms.untracked.bool(True) # needed for crab publication return process diff --git a/test/nano_data_2022_Adversarial_NANO.py b/test/nano_data_2022_Adversarial_NANO.py new file mode 100644 index 0000000..7cb28f5 --- /dev/null +++ b/test/nano_data_2022_Adversarial_NANO.py @@ -0,0 +1,129 @@ +# Auto generated configuration file +# using: +# Revision: 1.19 +# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v +# with command line options: nano_data_2022_Adversarial --data --eventcontent NANOAODSIM --datatier NANOAODSIM --step NANO --conditions 124X_dataRun3_Prompt_v4 --era Run3,run3_nanoAOD_devel --customise_commands=process.add_(cms.Service('InitRootHandlers', EnableIMT = cms.untracked.bool(False)));process.MessageLogger.cerr.FwkReport.reportEvery=100 --nThreads 4 -n -1 --filein /store/data/Run2022A/DoubleMuon/MINIAOD/PromptReco-v1/000/352/505/00000/56e473a0-5c0f-4577-b9b6-01ed3e76d5f3.root --fileout file:nano_data2022.root --customise PhysicsTools/PFNano/pfnano_cff.PFnano_customizeData_add_DeepJet --no_exec +import FWCore.ParameterSet.Config as cms + +from Configuration.Eras.Era_Run3_cff import Run3 +from Configuration.Eras.Modifier_run3_nanoAOD_devel_cff import run3_nanoAOD_devel + +process = cms.Process('NANO',Run3,run3_nanoAOD_devel) + +# import of standard configurations +process.load('Configuration.StandardSequences.Services_cff') +process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi') +process.load('FWCore.MessageService.MessageLogger_cfi') +process.load('Configuration.EventContent.EventContent_cff') +process.load('Configuration.StandardSequences.GeometryRecoDB_cff') +process.load('Configuration.StandardSequences.MagneticField_cff') +process.load('PhysicsTools.NanoAOD.nano_cff') +process.load('Configuration.StandardSequences.EndOfProcess_cff') +process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff') + +process.maxEvents = cms.untracked.PSet( + input = cms.untracked.int32(-1), + output = cms.optional.untracked.allowed(cms.int32,cms.PSet) +) + +# Input source +process.source = cms.Source("PoolSource", + #fileNames = cms.untracked.vstring('/store/data/Run2022A/DoubleMuon/MINIAOD/PromptReco-v1/000/352/505/00000/56e473a0-5c0f-4577-b9b6-01ed3e76d5f3.root'), + fileNames = cms.untracked.vstring('file:datarun3.root'), + secondaryFileNames = cms.untracked.vstring() +) + +process.options = cms.untracked.PSet( + FailPath = cms.untracked.vstring(), + IgnoreCompletely = cms.untracked.vstring(), + Rethrow = cms.untracked.vstring(), + SkipEvent = cms.untracked.vstring(), + accelerators = cms.untracked.vstring('*'), + allowUnscheduled = cms.obsolete.untracked.bool, + canDeleteEarly = cms.untracked.vstring(), + deleteNonConsumedUnscheduledModules = cms.untracked.bool(True), + dumpOptions = cms.untracked.bool(False), + emptyRunLumiMode = cms.obsolete.untracked.string, + eventSetup = cms.untracked.PSet( + forceNumberOfConcurrentIOVs = cms.untracked.PSet( + allowAnyLabel_=cms.required.untracked.uint32 + ), + numberOfConcurrentIOVs = cms.untracked.uint32(0) + ), + fileMode = cms.untracked.string('FULLMERGE'), + forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False), + makeTriggerResults = cms.obsolete.untracked.bool, + numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0), + numberOfConcurrentRuns = cms.untracked.uint32(1), + numberOfStreams = cms.untracked.uint32(0), + numberOfThreads = cms.untracked.uint32(1), + printDependencies = cms.untracked.bool(False), + sizeOfStackForThreadsInKB = cms.optional.untracked.uint32, + throwIfIllegalParameter = cms.untracked.bool(True), + wantSummary = cms.untracked.bool(False) +) + +# Production Info +process.configurationMetadata = cms.untracked.PSet( + annotation = cms.untracked.string('nano_data_2022_Adversarial nevts:-1'), + name = cms.untracked.string('Applications'), + version = cms.untracked.string('$Revision: 1.19 $') +) + +# Output definition + +process.NANOAODSIMoutput = cms.OutputModule("NanoAODOutputModule", + compressionAlgorithm = cms.untracked.string('LZMA'), + compressionLevel = cms.untracked.int32(9), + dataset = cms.untracked.PSet( + dataTier = cms.untracked.string('NANOAODSIM'), + filterName = cms.untracked.string('') + ), + fileName = cms.untracked.string('file:nano_data2022.root'), + outputCommands = process.NANOAODSIMEventContent.outputCommands +) + +# Additional output definition + +# Other statements +from Configuration.AlCa.GlobalTag import GlobalTag +process.GlobalTag = GlobalTag(process.GlobalTag, '124X_dataRun3_Prompt_v4', '') + +# Path and EndPath definitions +process.nanoAOD_step = cms.Path(process.nanoSequence) +process.endjob_step = cms.EndPath(process.endOfProcess) +process.NANOAODSIMoutput_step = cms.EndPath(process.NANOAODSIMoutput) + +# Schedule definition +process.schedule = cms.Schedule(process.nanoAOD_step,process.endjob_step,process.NANOAODSIMoutput_step) +from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask +associatePatAlgosToolsTask(process) + +#Setup FWK for multithreaded +process.options.numberOfThreads = 4 +process.options.numberOfStreams = 0 + +# customisation of the process. + +# Automatic addition of the customisation function from PhysicsTools.NanoAOD.nano_cff +from PhysicsTools.NanoAOD.nano_cff import nanoAOD_customizeData + +#call to customisation function nanoAOD_customizeData imported from PhysicsTools.NanoAOD.nano_cff +process = nanoAOD_customizeData(process) + +# Automatic addition of the customisation function from PhysicsTools.PFNano.pfnano_cff +from PhysicsTools.PFNano.pfnano_cff import PFnano_customizeData_add_DeepJet + +#call to customisation function PFnano_customizeData_add_DeepJet imported from PhysicsTools.PFNano.pfnano_cff +process = PFnano_customizeData_add_DeepJet(process) + +# End of customisation functions + + +# Customisation from command line + +process.add_(cms.Service('InitRootHandlers', EnableIMT = cms.untracked.bool(False)));process.MessageLogger.cerr.FwkReport.reportEvery=100 +# Add early deletion of temporary data products to reduce peak memory need +from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete +process = customiseEarlyDelete(process) +# End adding early deletion