diff --git a/DataFormats/interface/PATFinalState.h b/DataFormats/interface/PATFinalState.h index 5880113bf..ff7b78924 100755 --- a/DataFormats/interface/PATFinalState.h +++ b/DataFormats/interface/PATFinalState.h @@ -166,6 +166,8 @@ class PATFinalState : public pat::PATObject { double ht(const std::string& sysTags) const; double ht() const; + double jetHt(const std::string& jetCuts) const; + /// Compute the pZeta variable using the ith and jth legs as /// the "visible" objects. double pZeta(int i=0, int j=1) const; @@ -194,9 +196,17 @@ class PATFinalState : public pat::PATObject { // and the same thing for a general Lorentz vector. Doesn't check sign. double zCompatibility(const PATFinalState::LorentzVector& p4) const; - // Try this method to see if I can get the parser to work when I reorder my candidates - double zCompatibilityFSR(int i, int j, std::string fsrLabel) const; - + // closest Z value + double closestZ(int i, const std::string& filter, std::vector legs) const; + double closestZElectron(int i, const std::string& filter) const; + double closestZMuon(int i, const std::string& filter) const; + double closestZTau(int i, const std::string& filter) const; + + // smallest invariant mass + double smallestMll(int i, const std::string& filter, std::vector legs) const; + double smallestMee(int i, const std::string& filter) const; + double smallestMmm(int i, const std::string& filter) const; + double smallestMtt(int i, const std::string& filter) const; /// Get the VBF selection variables. The jet cuts are applied to the veto /// jets using dR of 0.3 away from the members. VBFVariables vbfVariables(const std::string& jetCuts) const; @@ -255,22 +265,6 @@ class PATFinalState : public pat::PATObject { // double massUsingSuperCluster(int electronIndex, int j, // int x=-1, int y=-1, int z=-1) const; - /// Build a subcandidate - PATFinalStateProxy subcand(int i, int j, - int x=-1, int y=-1, int z=-1) const; - - /// Build a subcandidate w/ fsr - PATFinalStateProxy subcandfsr( int i, int j, const std::string& fsrLabel="" ) const; - - /// quad candidate p4 w/ fsr - LorentzVector p4fsr(const std::string& fsrLabel="") const; - - /// Returns the index of this lepton's Z partner in 4l ordering - const inline size_t get4LPartner(size_t i) const - { - return i + (i%2 ? -1 : 1); - } - /// Build a subcand using a tag string PATFinalStateProxy subcand(const std::string& tags) const; @@ -279,9 +273,6 @@ class PATFinalState : public pat::PATObject { const std::string& tags, const std::string& extras, const std::string& filter="") const; - // Get the FSR candidate that moves the invariant mass of the lepton pair closest to nominal Z mass - const reco::CandidatePtr bestFSROfZ(int i, int j, const std::string& fsrLabel) const; - // Abstract interface to derived classes. Can return null stuff. virtual const reco::Candidate* daughterUnsafe(size_t i) const = 0; virtual const reco::CandidatePtr daughterPtrUnsafe(size_t i) const = 0; diff --git a/DataFormats/interface/PATQuadFinalStateT.h b/DataFormats/interface/PATQuadFinalStateT.h index 2abda86b3..75509fb13 100644 --- a/DataFormats/interface/PATQuadFinalStateT.h +++ b/DataFormats/interface/PATQuadFinalStateT.h @@ -1,7 +1,14 @@ #ifndef FinalStateAnalysis_DataFormats_PATQuadFinalStateT_h #define FinalStateAnalysis_DataFormats_PATQuadFinalStateT_h ++class PATFinalStateProxy; ++class PATMultiCandFinalState; ++ #include "FinalStateAnalysis/DataFormats/interface/PATFinalState.h" +#include "FinalStateAnalysis/DataFormats/interface/PATFinalStateProxy.h" +#include "FinalStateAnalysis/DataFormats/interface/PATFinalStateEventFwd.h" + +#include "DataFormats/Math/interface/deltaR.h" template class PATQuadFinalStateT : public PATFinalState { @@ -87,6 +94,201 @@ class PATQuadFinalStateT : public PATFinalState { << ") is null!" << std::endl; } + /// Build a subcandidate w/ fsr + PATFinalStateProxy subcandfsr( int i, int j, const std::string& fsrLabel="" ) const + { + std::vector output; + output.push_back( daughterPtr(i) ); + output.push_back( daughterPtr(j) ); + + const reco::CandidatePtr fsrPho = bestFSROfZ(i, j, fsrLabel); + if(fsrPho.isNonnull() && fsrPho.isAvailable()) + output.push_back(fsrPho); + return PATFinalStateProxy(new PATMultiCandFinalState(output, evt())); + } + + /// quad candidate p4 w/ fsr + LorentzVector p4fsr(const std::string& fsrLabel="") const + { + // start with the 4-momentum of the first Z and add to it + PATFinalState::LorentzVector p = subcandfsr(0, 1, fsrLabel)->p4(); + + for(unsigned int i = 2; i+1 < numberOfDaughters(); i += 2) + { + p += subcandfsr(i, i+1, fsrLabel)->p4(); + } + + return p; + } + + /// Returns the index of this lepton's Z partner in 4l ordering + const inline size_t get4LPartner(size_t i) const + { + return i + (i%2 ? -1 : 1); + } + + // Get the FSR candidate that moves the invariant mass of the lepton pair closest to nominal Z mass + const reco::CandidatePtr bestFSROfZ(int i, int j, const std::string& fsrLabel) const + { + bool iIsElectron = false; + bool jIsElectron = false; + + edm::Ptr ei = daughterAsElectron(i); + edm::Ptr mi = daughterAsMuon(i); + if(daughter(i)->isElectron() && ei.isNonnull() && ei.isAvailable()) + { + iIsElectron = true; + } + else + { + if(!(daughter(i)->isMuon() && mi.isNonnull() && mi.isAvailable())) + return reco::CandidatePtr(); + } + + edm::Ptr ej = daughterAsElectron(j); + edm::Ptr mj = daughterAsMuon(j); + if(daughter(j)->isElectron() && ej.isNonnull() && ej.isAvailable()) + { + jIsElectron = true; + } + else + { + if(!(daughter(j)->isMuon() && mj.isNonnull() && mj.isAvailable())) + return reco::CandidatePtr();//edm::Ptr(new const reco::Candidate()); + } + + int leptonOfBest; // index of daughter that has best FSR cand + int bestFSR = -1; // index of best photon as userCand + double bestFSRPt = -1; // Pt of best photon + double bestFSRDeltaR = 1000; // delta R between best FSR and nearest lepton + float noFSRDist = zCompatibility(i,j); // must be better Z candidate than no FSR + if(noFSRDist == -1000) // Same sign leptons + return reco::CandidatePtr(); + PATFinalState::LorentzVector p4NoFSR = daughter(i)->p4() + daughter(j)->p4(); + + if((iIsElectron?ei->hasUserInt("n"+fsrLabel):mi->hasUserInt("n"+fsrLabel))) + { + for(int ind = 0; ind < (iIsElectron?ei->userInt("n"+fsrLabel):mi->userInt("n"+fsrLabel)); ++ind) + { + PATFinalState::LorentzVector fsrCandP4 = daughterUserCandP4(i, fsrLabel+std::to_string(ind)); + PATFinalState::LorentzVector zCandP4 = p4NoFSR + fsrCandP4; + if(zCandP4.mass() < 4. || zCandP4.mass() > 100.) // overall mass cut + continue; + if(zCompatibility(zCandP4) > noFSRDist) // Must bring us closer to on-shell Z + continue; + // If any FSR candidate has pt > 4, pick the highest pt candidate. + // Otherwise, pick the one with the smallest deltaR to its lepton. + if(bestFSRPt > 4. || fsrCandP4.pt() > 4.) + { + if(fsrCandP4.pt() < bestFSRPt) + continue; + } + else if(reco::deltaR(daughter(i)->p4(), fsrCandP4) > bestFSRDeltaR) + continue; + + // This one looks like the best for now + leptonOfBest = i; + bestFSR = ind; + bestFSRPt = fsrCandP4.pt(); + bestFSRDeltaR = reco::deltaR(daughter(i)->p4(), fsrCandP4); + } + } + if((jIsElectron?ej->hasUserInt("n"+fsrLabel):mj->hasUserInt("n"+fsrLabel))) + { + // std::cout << "Found an embedded candidate in event " << evt()->evtId().event() << std::endl; + for(int ind = 0; ind < (jIsElectron?ej->userInt("n"+fsrLabel):mj->userInt("n"+fsrLabel)); ++ind) + { + PATFinalState::LorentzVector fsrCandP4 = daughterUserCandP4(j, fsrLabel+std::to_string(ind)); + PATFinalState::LorentzVector zCandP4 = p4NoFSR + fsrCandP4; + if(zCandP4.mass() < 4. || zCandP4.mass() > 100.) // overall mass cut + continue; + if(zCompatibility(zCandP4) > noFSRDist) // Must bring us closer to on-shell Z + continue; + // If any FSR candidate has pt > 4, pick the highest pt candidate. + // Otherwise, pick the one with the smallest deltaR to its lepton. + if(bestFSRPt > 4. || fsrCandP4.pt() > 4.) + { + if(fsrCandP4.pt() < bestFSRPt) + continue; + } + else if(reco::deltaR(daughter(j)->p4(), fsrCandP4) > bestFSRDeltaR) + continue; + + // This one looks like the best for now + leptonOfBest = j; + bestFSR = ind; + bestFSRPt = fsrCandP4.pt(); + bestFSRDeltaR = reco::deltaR(daughter(j)->p4(), fsrCandP4); + } + } + if(bestFSR != -1) + { + // std::cout << "Accepted FSR cand, event " << evt()->evtId().event() << std::endl; + return daughterUserCand(leptonOfBest, fsrLabel+std::to_string(bestFSR)); + } + // std::cout << "Rejected FSR cand, event " << evt()->evtId().event() << std::endl; + return reco::CandidatePtr();//edm::Ptr(new const reco::Candidate()); + } + + double zCompatibilityFSR(int i, int j, const std::string fsrLabel) const + { + PATFinalStateProxy z = subcandfsr(i, j, fsrLabel); + return zCompatibility(z); + } + + + float allFSRIsoContribution(const size_t i, const std::string& label, + const float dRMin=0.01, const float dRMax=0.4) const + { + float isoContrib = 0; + + for(size_t l1 = 0; l1 < numberOfDaughters(); l1 += 2) + { + reco::CandidatePtr fsr = bestFSROfZ(l1, l1+1, label); + if(!(fsr.isNonnull() && fsr.isAvailable())) + continue; + + float dR = reco::deltaR(daughter(i)->p4(), fsr->p4()); + + if(dR > dRMin && dR < dRMax) + isoContrib += fsr->pt(); + } + + return isoContrib; + } + + + /// Build a subcandidate w/ fsr of the main Zs FSR photons + PATFinalStateProxy subcandPrimaryFSR( size_t i, size_t j, const std::string& fsrLabel="" ) const + { + if(j == get4LPartner(i)) + return subcandfsr(i,j,fsrLabel); + + std::vector output; + output.push_back( daughterPtr(i) ); + output.push_back( daughterPtr(j) ); + + size_t i2 = get4LPartner(i); + size_t j2 = get4LPartner(j); + + const reco::CandidatePtr fsr1 = bestFSROfZ(i, i2, fsrLabel); + const reco::CandidatePtr fsr2 = bestFSROfZ(j, j2, fsrLabel); + if(fsr1.isNonnull() && fsr1.isAvailable()) + { + // photon is always matched with closer lepton + if(reco::deltaR(daughter(i)->p4(), fsr1->p4()) < reco::deltaR(daughter(i2)->p4(), fsr1->p4())) + output.push_back(fsr1); + } + if(fsr2.isNonnull() && fsr2.isAvailable()) + { + if(reco::deltaR(daughter(j)->p4(), fsr2->p4()) < reco::deltaR(daughter(j2)->p4(), fsr2->p4())) + output.push_back(fsr2); + } + return PATFinalStateProxy(new PATMultiCandFinalState(output, evt())); + } + + + private: edm::Ptr p1_; edm::Ptr p2_; diff --git a/DataFormats/src/PATFinalState.cc b/DataFormats/src/PATFinalState.cc index 8890da8b3..b782b0975 100755 --- a/DataFormats/src/PATFinalState.cc +++ b/DataFormats/src/PATFinalState.cc @@ -239,6 +239,7 @@ PATFinalState::ptOrdered(size_t i, size_t j, const std::string& tags) const { int PATFinalState::matchToHLTFilter(size_t i, const std::string& filter, double maxDeltaR) const { + //std::cout << "Will match to " << path << " with dR " << maxDeltaR << std::endl; const reco::Candidate* dau = this->daughter(i); assert(dau); return evt()->matchedToFilter(*dau, filter, maxDeltaR); @@ -272,6 +273,15 @@ PATFinalState::visP4(const std::string& tags) const { return output; } +double PATFinalState::jetHt(const std::string& jetCuts) const { + std::vector jets = this->vetoJets(0.0, jetCuts); + double output = 0; + for (size_t i = 0; i < jets.size(); ++i) { + output += jets[i]->pt(); + } + return output; +} + PATFinalState::LorentzVector PATFinalState::visP4() const { LorentzVector output; @@ -356,14 +366,17 @@ PATFinalState::dR(int i, int j) const { double PATFinalState::smallestDeltaR() const { double smallestDeltaR = 1e9; + std::cout<<"number of daughters: " << numberOfDaughters() << std::endl; for (size_t i = 0; i < numberOfDaughters()-1; ++i) { for (size_t j = i+1; j < numberOfDaughters(); ++j) { double deltaRIJ = dR(i, j); + std::cout << "i, j, deltaRIJ: " << i << " " << j<< " " < output; - output.push_back( daughterPtr(i) ); - output.push_back( daughterPtr(j) ); - - const reco::CandidatePtr fsrPho = bestFSROfZ(i, j, fsrLabel); - if(fsrPho.isNonnull() && fsrPho.isAvailable()) - output.push_back(fsrPho); - return PATFinalStateProxy(new PATMultiCandFinalState(output, evt())); -} - -const reco::CandidatePtr PATFinalState::bestFSROfZ(int i, int j, const std::string& fsrLabel) const -{ - bool iIsElectron = false; - bool jIsElectron = false; - - edm::Ptr ei = daughterAsElectron(i); - edm::Ptr mi = daughterAsMuon(i); - if(daughter(i)->isElectron() && ei.isNonnull() && ei.isAvailable()) - { - iIsElectron = true; - } - else - { - if(!(daughter(i)->isMuon() && mi.isNonnull() && mi.isAvailable())) - return reco::CandidatePtr(); - } - - edm::Ptr ej = daughterAsElectron(j); - edm::Ptr mj = daughterAsMuon(j); - if(daughter(j)->isElectron() && ej.isNonnull() && ej.isAvailable()) - { - jIsElectron = true; - } - else - { - if(!(daughter(j)->isMuon() && mj.isNonnull() && mj.isAvailable())) - return reco::CandidatePtr();//edm::Ptr(new const reco::Candidate()); - } - - int leptonOfBest; // index of daughter that has best FSR cand - int bestFSR = -1; // index of best photon as userCand - double bestFSRPt = -1; // Pt of best photon - double bestFSRDeltaR = 1000; // delta R between best FSR and nearest lepton - float noFSRDist = zCompatibility(i,j); // must be better Z candidate than no FSR - if(noFSRDist == -1000) // Same sign leptons - return reco::CandidatePtr(); - PATFinalState::LorentzVector p4NoFSR = daughter(i)->p4() + daughter(j)->p4(); - - if((iIsElectron?ei->hasUserInt("n"+fsrLabel):mi->hasUserInt("n"+fsrLabel))) - { - for(int ind = 0; ind < (iIsElectron?ei->userInt("n"+fsrLabel):mi->userInt("n"+fsrLabel)); ++ind) - { - PATFinalState::LorentzVector fsrCandP4 = daughterUserCandP4(i, fsrLabel+std::to_string(ind)); - PATFinalState::LorentzVector zCandP4 = p4NoFSR + fsrCandP4; - if(zCandP4.mass() < 4. || zCandP4.mass() > 100.) // overall mass cut - continue; - if(zCompatibility(zCandP4) > noFSRDist) // Must bring us closer to on-shell Z - continue; - // If any FSR candidate has pt > 4, pick the highest pt candidate. - // Otherwise, pick the one with the smallest deltaR to its lepton. - if(bestFSRPt > 4. || fsrCandP4.pt() > 4.) - { - if(fsrCandP4.pt() < bestFSRPt) - continue; - } - else if(reco::deltaR(daughter(i)->p4(), fsrCandP4) > bestFSRDeltaR) - continue; - - // This one looks like the best for now - leptonOfBest = i; - bestFSR = ind; - bestFSRPt = fsrCandP4.pt(); - bestFSRDeltaR = reco::deltaR(daughter(i)->p4(), fsrCandP4); - } - } - if((jIsElectron?ej->hasUserInt("n"+fsrLabel):mj->hasUserInt("n"+fsrLabel))) - { - // std::cout << "Found an embedded candidate in event " << evt()->evtId().event() << std::endl; - for(int ind = 0; ind < (jIsElectron?ej->userInt("n"+fsrLabel):mj->userInt("n"+fsrLabel)); ++ind) - { - PATFinalState::LorentzVector fsrCandP4 = daughterUserCandP4(j, fsrLabel+std::to_string(ind)); - PATFinalState::LorentzVector zCandP4 = p4NoFSR + fsrCandP4; - if(zCandP4.mass() < 4. || zCandP4.mass() > 100.) // overall mass cut - continue; - if(zCompatibility(zCandP4) > noFSRDist) // Must bring us closer to on-shell Z - continue; - // If any FSR candidate has pt > 4, pick the highest pt candidate. - // Otherwise, pick the one with the smallest deltaR to its lepton. - if(bestFSRPt > 4. || fsrCandP4.pt() > 4.) - { - if(fsrCandP4.pt() < bestFSRPt) - continue; - } - else if(reco::deltaR(daughter(j)->p4(), fsrCandP4) > bestFSRDeltaR) - continue; - - // This one looks like the best for now - leptonOfBest = j; - bestFSR = ind; - bestFSRPt = fsrCandP4.pt(); - bestFSRDeltaR = reco::deltaR(daughter(j)->p4(), fsrCandP4); - } - } - if(bestFSR != -1) - { - // std::cout << "Accepted FSR cand, event " << evt()->evtId().event() << std::endl; - return daughterUserCand(leptonOfBest, fsrLabel+std::to_string(bestFSR)); - } - // std::cout << "Rejected FSR cand, event " << evt()->evtId().event() << std::endl; - return reco::CandidatePtr();//edm::Ptr(new const reco::Candidate()); -} - -PATFinalState::LorentzVector -PATFinalState::p4fsr(const std::string& fsrLabel) const -{ - // start with the 4-momentum of the first Z and add to it - PATFinalState::LorentzVector p = subcandfsr(0, 1, fsrLabel)->p4(); - - for(unsigned int i = 2; i+1 < numberOfDaughters(); i += 2) - { - p += subcandfsr(i, i+1, fsrLabel)->p4(); - } - - return p; -} - PATFinalStateProxy PATFinalState::subcand(const std::string& tags) const { const std::vector daus = daughterPtrs(tags); @@ -817,12 +701,83 @@ double PATFinalState::zCompatibility(const PATFinalState::LorentzVector& p4) con return std::abs(p4.mass() - 91.1876); } -double PATFinalState::zCompatibilityFSR(int i, int j, const std::string fsrLabel) const +double PATFinalState::closestZ(int i, const std::string& filter, std::vector legs) const +{ + std::vector zFirstLeg; + zFirstLeg.push_back(daughter(i)); + int charge = daughter(i)->charge(); + std::string newfilter = filter; + if (charge>0) { + newfilter += "charge()<0"; + } + else { + newfilter += "charge()>0"; + } + std::vector zSecondLegs = getVetoObjects( + zFirstLeg, legs, 0.0, newfilter); + double result = 1000; + for (size_t j=0; jp4() + zSecondLegs.at(j)->p4(); + double temp = std::abs(totalP4.mass() - 91.1876); + if (temp < result) result = temp; + } + return result; +} + +double PATFinalState::closestZElectron(int i, const std::string& filter="") const { - PATFinalStateProxy z = subcandfsr(i, j, fsrLabel); - return zCompatibility(z); + return closestZ(i,filter,ptrizeCollection(evt()->electrons())); } +double PATFinalState::closestZMuon(int i, const std::string& filter="") const +{ + return closestZ(i,filter,ptrizeCollection(evt()->muons())); +} + +double PATFinalState::closestZTau(int i, const std::string& filter="") const +{ + return closestZ(i,filter,ptrizeCollection(evt()->taus())); +} + +double PATFinalState::smallestMll(int i, const std::string& filter, std::vector legs) const +{ + std::vector zFirstLeg; + zFirstLeg.push_back(daughter(i)); + int charge = daughter(i)->charge(); + std::string newfilter = filter; + if (charge>0) { + newfilter += "charge()<0"; + } + else { + newfilter += "charge()>0"; + } + std::vector zSecondLegs = getVetoObjects( + zFirstLeg, legs, 0.0, newfilter); + double result = 1000; + for (size_t j=0; jp4() + zSecondLegs.at(j)->p4(); + double temp = totalP4.mass(); + if (temp < result) result = temp; + } + return result; +} + +double PATFinalState::smallestMee(int i, const std::string& filter="") const +{ + return smallestMll(i,filter,ptrizeCollection(evt()->electrons())); +} + +double PATFinalState::smallestMmm(int i, const std::string& filter="") const +{ + return smallestMll(i,filter,ptrizeCollection(evt()->muons())); +} + +double PATFinalState::smallestMtt(int i, const std::string& filter="") const +{ + return smallestMll(i,filter,ptrizeCollection(evt()->taus())); +} + + VBFVariables PATFinalState::vbfVariables(const std::string& jetCuts) const { std::vector hardScatter = this->daughters(); std::vector jets = this->vetoJets(0.3, jetCuts); @@ -1035,7 +990,12 @@ const float PATFinalState::getPVDZ(const size_t i) const const edm::Ptr pv = event_->pv(); return daughterAsMuon(i)->muonBestTrack()->dz(pv->position()); } - throw cms::Exception("InvalidParticle") << "FSA can only find dZ for electron and muon for now" << std::endl; + else if(abs(daughter(i)->pdgId()) == 15) + { + pat::PackedCandidate const* packedLeadTauCand = dynamic_cast(daughterAsTau(i)->leadChargedHadrCand().get()); + return (packedLeadTauCand->dz()); + } + throw cms::Exception("InvalidParticle") << "FSA can only find dZ for electron, muon and tau for now" << std::endl; } const float PATFinalState::getPVDXY(const size_t i) const diff --git a/DataFormats/src/PATFinalStateEvent.cc b/DataFormats/src/PATFinalStateEvent.cc index a601ac9e0..9e36949b1 100644 --- a/DataFormats/src/PATFinalStateEvent.cc +++ b/DataFormats/src/PATFinalStateEvent.cc @@ -9,26 +9,61 @@ #define FSA_DATA_FORMAT_VERSION 3 namespace { - int matchedToAnObject(const pat::TriggerObjectRefVector& trgObjects, - const reco::Candidate& cand, double maxDeltaR) { + int matchedToAnObject(const std::vector trgObjects, const edm::TriggerNames names, + const reco::Candidate& cand, double maxDeltaR, std::string trigName="") { bool matched = false; for (size_t i = 0; i < trgObjects.size(); ++i) { - if (reco::deltaR(cand, *trgObjects.at(i)) < maxDeltaR) { - matched = true; - break; } - } - if (matched) - return 1; - else return 0; - } - int matchedToAnObject(const std::vector trgObjects, - const reco::Candidate& cand, double maxDeltaR) { - bool matched = false; - for (size_t i = 0; i < trgObjects.size(); ++i) { - if (reco::deltaR(cand, trgObjects.at(i)) < maxDeltaR) { - matched = true; - break; + pat::TriggerObjectStandAlone obj = trgObjects.at(i); + //std::cout << " - - dR(cand,trig" << i << "): " << reco::deltaR(cand, obj) << " max: " << maxDeltaR << std::endl; + if (reco::deltaR(cand, obj) > maxDeltaR) continue; + + obj.unpackPathNames(names); + std::vector pathNames = obj.pathNames(false); + for (size_t t = 0; t < pathNames.size(); t++) { + std::string path = pathNames.at(t); + //std::cout << " - - - path name: " << path << " match name " << trigName << std::endl; + if (path.compare(trigName)==0) { + matched = true; + return 1; + } + + // Current filter matching relies only on checking for a trigger object + // within the desired cone size that contains the desired trigger filter. + // There is no requirement place on the HLT object to match pdgID type + // with the candidate. If this matching is desired, uncomment, and double + // check the below code. + std::vector filterLabels = obj.filterLabels(); + for (size_t i = 0; i < filterLabels.size(); i++) { + std::string filter = filterLabels.at(i); + if (filter.compare(trigName)==0) { + //std::cout << " - - - filter name: " << filter << " match name " << trigName << std::endl; + //std::cout << "Checking obj with pdgID = " << cand.pdgId() << std::endl; + //std::cout << "Trig Obj pdgId: " << obj.pdgId() << std::endl; + //std::cout << "Trig Obj Type: " << obj.filterIds() << std::endl; + //for (size_t j = 0; j < obj.filterIds().size(); j++) { + // std::cout << " -- filter ID " << obj.filterIds().at(j) << std::endl; + // // Match the Candidate PDG ID to the Trigger Object ID: see DataFormats/HLTReco/interface/TriggerTypeDefs.h + // // Currently many miniAOD files are missing HLT Electron Trigger objects from above .h file. + // if ( abs( obj.pdgId() ) == 11 && abs( obj.pdgId() ) == 11 ) { + // std::cout << " ------ XXX Matching electron!" << std::endl; + // matched = true; + // return 1; + // } + // if ( abs( obj.pdgId() ) == 13 && abs( obj.pdgId() ) == 13 ) { + // std::cout << " ------ XXX Matching muon!" << std::endl; + // matched = true; + // return 1; + // } + // if ( abs( obj.pdgId() ) == 15 && abs( obj.pdgId() ) == 15 ) { + // std::cout << " ------ XXX Matching tau!" << std::endl; + // matched = true; + // return 1; + // } + //} + matched = true; + return 1; + } } } if (matched) @@ -231,24 +266,42 @@ int PATFinalStateEvent::hltGroup(const std::string& pattern) const { int PATFinalStateEvent::matchedToFilter(const reco::Candidate& cand, const std::string& pattern, double maxDeltaR) const { + //std::cout << evtID_ << " running <<< matchedToFilter >>> : " << pattern << std::endl; std::vector filters = matchingTriggerFilters(trigStandAlone(), names(), pattern); if (!filters.size()) return -1; - return matchedToAnObject(trigStandAlone(), cand, maxDeltaR); + //std::cout << "Filters Obj: " << filters << std::endl; + int matchCount = 0; + //std::cout << "Filters: " << std::endl; + for (unsigned int i=0; i < filters.size(); ++i) + { + //std::cout << " ---- Calling matchedToAnObject for:" << std::endl; + //std::cout << " ---- trigStandAlone() " << trigStandAlone() << std::endl; + //std::cout << " ---- names() " << names() << std::endl; + //std::cout << " ---- cand " << cand << std::endl; + //std::cout << " ---- filter " << filters[i] << std::endl; + bool matched = matchedToAnObject(trigStandAlone(), names(), cand, maxDeltaR, pattern);//, filters[i]); + if (matched) + matchCount += 1; + //std::cout << "Filters matched obj " << cand << "number of matches: " << matched << " for dr: " << maxDeltaR << std::endl; + } + //std::cout << "TOTAL MATCHES: " << matchCount << std::endl; + return matchCount; } int PATFinalStateEvent::matchedToPath(const reco::Candidate& cand, const std::string& pattern, double maxDeltaR) const { - // std::cout << "matcher: " << pattern << std::endl; + //std::cout << evtID_ << " smart trigger pattern: " << pattern << std::endl; SmartTriggerResult result = smartTrigger(pattern, names(), trigPrescale(), trigResults(), evtID_); - //std::cout << " result: " << result.group << " " << result.prescale << " " << result.passed << std::endl; + //std::cout << " result: group " << result.group << ", prescale " << result.prescale << ", passed " << result.passed << std::endl; // Loop over all the paths that fired and see if any matched this object. if (!result.passed) return -1; int matchCount = 0; for (size_t i = 0; i < result.paths.size(); ++i) { - bool matched = matchedToAnObject(trigStandAlone(), cand, maxDeltaR); - // std::cout << " - path: " << result.paths[i] << " matched: " << matched << std::endl; + //std::cout << " - path: " << result.paths[i] << std::endl; + bool matched = matchedToAnObject(trigStandAlone(), names(), cand, maxDeltaR, result.paths.at(i)); + //std::cout << " - path: " << result.paths[i] << " matched: " << matched << std::endl; if (matched) matchCount += 1; } diff --git a/MetaData/tuples/MiniAOD-13TeV_Data.json b/MetaData/tuples/MiniAOD-13TeV_Data.json index c2c5f1af9..dc30625a8 100644 --- a/MetaData/tuples/MiniAOD-13TeV_Data.json +++ b/MetaData/tuples/MiniAOD-13TeV_Data.json @@ -2,9 +2,19 @@ "data_DoubleMuon_Run2015B_PromptReco_50ns" : "/DoubleMuon/Run2015B-PromptReco-v1/MINIAOD", "data_MuonEG_Run2015B_PromptReco_50ns" : "/MuonEG/Run2015B-PromptReco-v1/MINIAOD", "data_DoubleEG_Run2015B_PromptReco_50ns" : "/DoubleEG/Run2015B-PromptReco-v1/MINIAOD", - "data_DoubleMuon_Run2015B_17July2015_50ns" : "/DoubleMuon/Run2015B-17July2015-v1/MINIAOD", - "data_MuonEG_Run2015B_17July2015_50ns" : "/MuonEG/Run2015B-17July2015-v1/MINIAOD", - "data_DoubleEG_Run2015B_17July2015_50ns" : "/DoubleEG/Run2015B-17July2015-v1/MINIAOD" + "data_Tau_Run2015B_PromptReco_50ns" : "/Tau/Run2015B-PromptReco-v1/MINIAOD", + "data_DoubleMuon_Run2015B_17Jul2015_50ns" : "/DoubleMuon/Run2015B-17Jul2015-v1/MINIAOD", + "data_MuonEG_Run2015B_17Jul2015_50ns" : "/MuonEG/Run2015B-17Jul2015-v1/MINIAOD", + "data_DoubleEG_Run2015B_17Jul2015_50ns" : "/DoubleEG/Run2015B-17Jul2015-v1/MINIAOD", + "data_Tau_Run2015B_17Jul2015_50ns" : "/Tau/Run2015B-17Jul2015-v1/MINIAOD", + "data_DoubleMuon_Run2015C_PromptReco_25ns" : "/DoubleMuon/Run2015C-PromptReco-v1/MINIAOD", + "data_MuonEG_Run2015C_PromptReco_25ns" : "/MuonEG/Run2015C-PromptReco-v1/MINIAOD", + "data_DoubleEG_Run2015C_PromptReco_25ns" : "/DoubleEG/Run2015C-PromptReco-v1/MINIAOD", + "data_Tau_Run2015C_PromptReco_25ns" : "/Tau/Run2015C-PromptReco-v1/MINIAOD", + "data_DoubleMuon_Run2015D_PromptReco_25ns" : "/DoubleMuon/Run2015D-PromptReco-v3/MINIAOD", + "data_MuonEG_Run2015D_PromptReco_25ns" : "/MuonEG/Run2015D-PromptReco-v3/MINIAOD", + "data_DoubleEG_Run2015D_PromptReco_25ns" : "/DoubleEG/Run2015D-PromptReco-v3/MINIAOD", + "data_Tau_Run2015D_PromptReco_25ns" : "/Tau/Run2015D-PromptReco-v3/MINIAOD" } diff --git a/MetaData/tuples/MiniAOD-13TeV_RunIISpring15DR74.json b/MetaData/tuples/MiniAOD-13TeV_RunIISpring15DR74.json index 73313661a..f7c854082 100644 --- a/MetaData/tuples/MiniAOD-13TeV_RunIISpring15DR74.json +++ b/MetaData/tuples/MiniAOD-13TeV_RunIISpring15DR74.json @@ -1,7 +1,4 @@ { - "data_DoubleMuon_Run2015B_PromptReco_50ns" : "/DoubleMuon/Run2015B-PromptReco-v1/MINIAOD", - "data_MuonEG_Run2015B_PromptReco_50ns" : "/MuonEG/Run2015B-PromptReco-v1/MINIAOD", - "data_DoubleEG_Run2015B_PromptReco_50ns" : "/DoubleEG/Run2015B-PromptReco-v1/MINIAOD", "DYJetsToLL_M-10to50" : "DYJetsToLL_M-10to50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8", "DYJetsToLL_M-50" : "DYJetsToLL_M-50_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8", @@ -61,6 +58,13 @@ "TTJets" : "TTJets_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8", "TTTo2L2Nu" : "TTTo2L2Nu_13TeV-powheg", "TT" : "TT_TuneCUETP8M1_13TeV-powheg-pythia8", + "TTWJetsToLNu" : "TTWJetsToLNu_TuneCUETP8M1_13TeV-amcatnloFXFX-madspin-pythia8", + "TTWJetsToQQ" : "TTWJetsToQQ_TuneCUETP8M1_13TeV-amcatnloFXFX-madspin-pythia8", + "TTZToQQ" : "TTZToQQ_TuneCUETP8M1_13TeV-amcatnlo-pythia8", + "TTZToLLNuNu" : "TTZToLLNuNu_M-10_TuneCUETP8M1_13TeV-amcatnlo-pythia8", + "TTHToGG" : "ttHToGG_M125_13TeV_powheg_pythia8", + "TTHToNonbb" : "ttHToNonbb_M125_13TeV_powheg_pythia8", + "TTHTobb" : "ttHTobb_M125_13TeV_powheg_pythia8", "WJetsToLNu" : "WJetsToLNu_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8", @@ -69,14 +73,34 @@ "WWToLNuQQ" : "WWToLNuQQ_13TeV-powheg", "WW" : "WW_TuneCUETP8M1_13TeV-pythia8", + "WZJets" : "WZJets_TuneCUETP8M1_13TeV-amcatnloFXFX-pythia8", "WZTo1L1Nu2Q" : "WZTo1L1Nu2Q_13TeV_amcatnloFXFX_madspin_pythia8", + "WZTo1L3Nu" : "WZTo1L3Nu_13TeV_amcatnloFXFX_madspin_pythia8", + "WZTo2L2Q" : "WZTo2L2Q_13TeV_amcatnloFXFX_madspin_pythia8", "WZTo3LNu" : "WZTo3LNu_TuneCUETP8M1_13TeV-powheg-pythia8", "WZ" : "WZ_TuneCUETP8M1_13TeV-pythia8", + "ZZTo2L2Nu" : "ZZTo2L2Nu_13TeV_powheg_pythia8", + "ZZTo2Q2Nu" : "ZZTo2Q2Nu_13TeV_amcatnloFXFX_madspin_pythia8", "ZZTo2L2Q" : "ZZTo2L2Q_13TeV_amcatnloFXFX_madspin_pythia8", - "ZZTo4L" : "ZZTo4L_13TeV_powheg_pythia8", + "ZZTo4L_powheg" : "ZZTo4L_13TeV_powheg_pythia8", + "ZZTo4L" : "ZZTo4L_13TeV-amcatnloFXFX-pythia8", "ZZTo4Q" : "ZZTo4Q_13TeV_amcatnloFXFX_madspin_pythia8", - "ZZ" : "ZZ_TuneCUETP8M1_13TeV-pythia8" + "ZZ" : "ZZ_TuneCUETP8M1_13TeV-pythia8", + + "GluGluToZZTo2e2mu" : "GluGluToZZTo2e2mu_BackgroundOnly_13TeV_MCFM", + "GluGluToZZTo2e2tau" : "GluGluToZZTo2e2tau_BackgroundOnly_13TeV_MCFM", + "GluGluToZZTo2mu2tau" : "GluGluToZZTo2mu2tau_BackgroundOnly_13TeV_MCFM", + "GluGluToZZTo4e" : "GluGluToZZTo4e_BackgroundOnly_13TeV_MCFM", + "GluGluToZZTo4mu" : "GluGluToZZTo4mu_BackgroundOnly_13TeV_MCFM", + "GluGluToZZTo4tau" : "GluGluToZZTo4tau_BackgroundOnly_13TeV_MCFM", + + "WH_HToBB_WToLNu" : "WH_HToBB_WToLNu_M125_13TeV_amcatnloFXFX_madspin_pythia8", + "ZH_HToBB_ZToLL" : "ZH_HToBB_ZToLL_M125_13TeV_amcatnloFXFX_madspin_pythia8", + + "WWZ" : "WWZ_TuneCUETP8M1_13TeV-amcatnlo-pythia8", + "WZZ" : "WZZ_TuneCUETP8M1_13TeV-amcatnlo-pythia8", + "ZZZ" : "ZZZ_TuneCUETP8M1_13TeV-amcatnlo-pythia8" } diff --git a/NtupleTools/interface/PATFinalStateAnalysis.h b/NtupleTools/interface/PATFinalStateAnalysis.h index 91529b36c..d75b93d38 100644 --- a/NtupleTools/interface/PATFinalStateAnalysis.h +++ b/NtupleTools/interface/PATFinalStateAnalysis.h @@ -67,6 +67,9 @@ class PATFinalStateAnalysis : public edm::BasicAnalyzer { // For keeping track of the skimming edm::InputTag skimCounter_; TH1* skimEventCounter_; + // gen weights + edm::InputTag summedWeight_; + TH1* summedWeightHist_; // For counting the luminosity edm::InputTag lumiProducer_; TH1* integratedLumi_; @@ -76,6 +79,8 @@ class PATFinalStateAnalysis : public edm::BasicAnalyzer { Int_t treeRunBranch_; Int_t treeLumiBranch_; Int_t treeEventsProcessedBranch_; + Float_t treeSummedWeightsBranch_; + Float_t treeIntLumi_; // The estimated integrated luminosity bool filter_; diff --git a/NtupleTools/python/embedElectronIDs.py b/NtupleTools/python/embedElectronIDs.py index e30c9dce8..0376f70a4 100644 --- a/NtupleTools/python/embedElectronIDs.py +++ b/NtupleTools/python/embedElectronIDs.py @@ -5,48 +5,46 @@ def embedElectronIDs(process, use25ns, eSrc): from PhysicsTools.SelectorUtils.tools.vid_id_tools import setupAllVIDIdsInModule, setupVIDElectronSelection, switchOnVIDElectronIdProducer, DataFormat switchOnVIDElectronIdProducer(process, DataFormat.MiniAOD) process.egmGsfElectronIDs.physicsObjectSrc = cms.InputTag(eSrc) - if use25ns: - id_modules = [ - 'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_PHYS14_PU20bx25_V2_cff', - 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_PHYS14_PU20bx25_nonTrig_V1_cff', - ] - else: - print "50 ns cut based electron IDs don't exist yet for PHYS14. Using CSA14 cuts." - id_modules = ['RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_CSA14_50ns_V1_cff'] + id_modules = [ + #'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_PHYS14_PU20bx25_V2_cff', + #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_PHYS14_PU20bx25_nonTrig_V1_cff', + 'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Spring15_25ns_V1_cff', # both 25 and 50 ns cutbased ids produced + 'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Spring15_50ns_V1_cff', + 'RecoEgamma.ElectronIdentification.Identification.heepElectronID_HEEPV60_cff', # recommended for both 50 and 25 ns + 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_25ns_nonTrig_V1_cff', # will not be produced for 50 ns, triggering still to come + ] for idmod in id_modules: setupAllVIDIdsInModule(process,idmod,setupVIDElectronSelection) + CBIDLabels = ["CBIDVeto", "CBIDLoose", "CBIDMedium", "CBIDTight", "HEEPV60", "MVANonTrigWP80", "MVANonTrigWP90"] # keys of cut based id user floats - CBIDLabels = ["CBIDVeto", "CBIDLoose", "CBIDMedium", "CBIDTight", "MVANonTrigWP80", "MVANonTrigWP90"] # keys of cut based id user floats + CBIDTags = [ + cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-Spring15-50ns-V1-standalone-veto'), + cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-Spring15-50ns-V1-standalone-loose'), + cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-Spring15-50ns-V1-standalone-medium'), + cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-Spring15-50ns-V1-standalone-tight'), + cms.InputTag('egmGsfElectronIDs:heepElectronID-HEEPV60'), + cms.InputTag('egmGsfElectronIDs:mvaEleID-Spring15-25ns-nonTrig-V1-wp80'), + cms.InputTag('egmGsfElectronIDs:mvaEleID-Spring15-25ns-nonTrig-V1-wp90'), + ] if use25ns: CBIDTags = [ - cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-PHYS14-PU20bx25-V2-standalone-veto'), - cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-PHYS14-PU20bx25-V2-standalone-loose'), - cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-PHYS14-PU20bx25-V2-standalone-medium'), - cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-PHYS14-PU20bx25-V2-standalone-tight'), - cms.InputTag("egmGsfElectronIDs:mvaEleID-PHYS14-PU20bx25-nonTrig-V1-wp80"), - cms.InputTag("egmGsfElectronIDs:mvaEleID-PHYS14-PU20bx25-nonTrig-V1-wp90"), + cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-Spring15-25ns-V1-standalone-veto'), + cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-Spring15-25ns-V1-standalone-loose'), + cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-Spring15-25ns-V1-standalone-medium'), + cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-Spring15-25ns-V1-standalone-tight'), + cms.InputTag('egmGsfElectronIDs:heepElectronID-HEEPV60'), + cms.InputTag('egmGsfElectronIDs:mvaEleID-Spring15-25ns-nonTrig-V1-wp80'), + cms.InputTag('egmGsfElectronIDs:mvaEleID-Spring15-25ns-nonTrig-V1-wp90'), ] - else: - CBIDTags = [ # almost certainly wrong. Just don't use 50ns miniAOD any more - cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-CSA14-50ns-V1-standalone-veto'), - cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-CSA14-50ns-V1-standalone-loose'), - cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-CSA14-50ns-V1-standalone-medium'), - cms.InputTag('egmGsfElectronIDs:cutBasedElectronID-CSA14-50ns-V1-standalone-tight'), - ] - if use25ns: - mvaValueLabels = ["BDTIDNonTrig"] - mvaValues = [ - cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Phys14NonTrigValues"), - ] - mvaCategoryLabels = ["BDTIDNonTrigCategory"] - mvaCategories = [ - cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Phys14NonTrigCategories"), - ] - else: - mvaValueLabels = [] - mvaValues = [] - mvaCategoryLabels = [] - mvaCategories = [] + + mvaValueLabels = ["BDTIDNonTrig"] + mvaValues = [ + cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring15NonTrig25nsV1Values"), + ] + mvaCategoryLabels = ["BDTIDNonTrigCategory"] + mvaCategories = [ + cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring15NonTrig25nsV1Categories"), + ] # Embed cut-based VIDs process.miniAODElectronID = cms.EDProducer( diff --git a/NtupleTools/python/ntuple_builder.py b/NtupleTools/python/ntuple_builder.py index 965dd8fc8..8003f6e44 100644 --- a/NtupleTools/python/ntuple_builder.py +++ b/NtupleTools/python/ntuple_builder.py @@ -64,7 +64,7 @@ templates.muons.id, templates.muons.energyCorrections, templates.muons.tracking, - templates.muons.trigger, + #templates.muons.trigger_25ns, templates.topology.mtToMET, ) @@ -83,7 +83,7 @@ templates.electrons.energyCorrections, templates.electrons.tracking, templates.electrons.supercluster, - templates.electrons.trigger, + #templates.electrons.trigger_25ns, templates.topology.mtToMET, ) @@ -219,7 +219,10 @@ def make_ntuple(*legs, **kwargs): ) # Triggers we care about depend on run configuration + leg_triggers = { 'e':PSet(), 'm':PSet(), 't':PSet(), 'j':PSet(), 'g':PSet() } if use25ns: + leg_triggers['e'] = templates.electrons.trigger_25ns + leg_triggers['m'] = templates.muons.trigger_25ns diLep_triggers = templates.trigger.doubleLepton_25ns if isMC: lep_triggers = templates.trigger.singleLepton_25ns_MC @@ -227,6 +230,8 @@ def make_ntuple(*legs, **kwargs): lep_triggers = templates.trigger.singleLepton_25ns else: diLep_triggers = templates.trigger.doubleLepton_50ns + leg_triggers['e'] = templates.electrons.trigger_50ns + leg_triggers['m'] = templates.muons.trigger_50ns if isMC: lep_triggers = templates.trigger.singleLepton_50ns_MC else: @@ -243,6 +248,9 @@ def make_ntuple(*legs, **kwargs): # Optionally apply extra branches in kwargs if 'branches' in kwargs: for branch, value in kwargs['branches'].iteritems(): + print "branch, value" + print branch + print value setattr(ntuple_config, branch, cms.string(value)) # Check if we want to use special versions of the FSA producers @@ -268,6 +276,7 @@ def make_ntuple(*legs, **kwargs): for v in ['e','m','t','g','j']: leg_branch_templates[v] = PSet( _leg_templates[v], + leg_triggers[v], custVariables[v], candidateVariables, ) @@ -296,6 +305,8 @@ def make_ntuple(*legs, **kwargs): extraJetVariables = kwargs.get('extraJetVariables', PSet()) extra_jet_template = PSet( templates.topology.extraJet, + templates.topology.extraBJetTools, + templates.topology.extraPUTools, extraJetVariables, ) for i in range(kwargs.get("nExtraJets", 0)): @@ -307,6 +318,7 @@ def make_ntuple(*legs, **kwargs): ntuple_config, extra_jet_template.replace(object=label) ) + print ntuple_config dicandidateVariables = kwargs.get('dicandidateVariables',PSet()) dicandidate_template = PSet( @@ -316,17 +328,10 @@ def make_ntuple(*legs, **kwargs): # Now we need to add all the information about the pairs for leg_a, leg_b in itertools.combinations(object_labels, 2): - if hzz: - ntuple_config = PSet( - ntuple_config, - dicandidate_template.replace(object1=leg_a, object2=leg_b), - templates.topology.zbosonMiniAOD.replace(object1=leg_a, object2=leg_b), - ) - else: - ntuple_config = PSet( - ntuple_config, - dicandidate_template.replace(object1=leg_a, object2=leg_b), - ) + ntuple_config = PSet( + ntuple_config, + dicandidate_template.replace(object1=leg_a, object2=leg_b), + ) # Check if we want to enable SVfit # Only do SVfit in states with 2 or 4 leptons do_svfit = kwargs.get("svFit", False) @@ -361,19 +366,14 @@ def make_ntuple(*legs, **kwargs): analyzerSrc = "finalState" + "".join( _producer_translation[x] for x in legs ) + producer_suffix + print "analyzerSrc" + print analyzerSrc - if hzz: - ntuple_config = PSet( - ntuple_config, - templates.topology.hzzMiniAOD - ) - # Some feature are not included in miniAOD or are currently broken. # Remove them from the ntuples to prevent crashes. #!!! Take items off of this list as we unbreak them. !!!# notInMiniAOD = [ # candidates.py - "t[1-9]?PVDZ", "t[1-9]?S?IP[23]D(Err)?", ] @@ -395,6 +395,7 @@ def make_ntuple(*legs, **kwargs): evtSrc=cms.InputTag("patFinalStateEventProducer"), # counter of events before any selections skimCounter=cms.InputTag("eventCount"), + summedWeight=cms.InputTag("summedWeight"), analysis=cms.PSet( selections=cms.VPSet(), EventView=cms.bool(False), @@ -429,11 +430,16 @@ def make_ntuple(*legs, **kwargs): cut=cms.string(cut), ) ) + print name + print cut # Now apply our formatting operations + print "output not formatted: " + print format_labels format(output, **format_labels) # return LHEFilter*output - + print "formatted: " + #print output return output if __name__ == "__main__": diff --git a/NtupleTools/python/parameters/default.py b/NtupleTools/python/parameters/default.py index f5bdfa1da..02f06430c 100644 --- a/NtupleTools/python/parameters/default.py +++ b/NtupleTools/python/parameters/default.py @@ -12,14 +12,16 @@ 'e': '7', 't': '18', 'g': '10', - 'j': '20' + #'j': '20' + 'j': '5' }, 'etaCuts' : { 'm': '2.5', 'e': '3.0', 't': '2.3', 'g': '3.0', - 'j': '2.5' + #'j': '2.5' + 'j': '5.0' }, # preselections for an object to be used anywhere @@ -30,25 +32,26 @@ 'finalSelection' : { 'e': 'abs(superCluster().eta) < 3.0 & max(pt, userFloat("maxCorPt")) > 7', 'm': 'max(pt, userFloat("maxCorPt")) > 4 & (isGlobalMuon | isTrackerMuon)', - 't': 'abs(eta) < 2.5 & pt > 17 & tauID("decayModeFinding")', + 't': 'abs(eta) < 2.5 & pt > 17', 'g': 'abs(superCluster().eta()) < 3.0 & pt > 10', # remove jets that are close to leptons - 'j' : { - 'selection' : 'pt>20 & abs(eta) < 2.5 & userFloat("idLoose")', - 'e': { - 'selection' : 'pt>10&&userInt("CBIDLoose")>0&&(chargedHadronIso()+max(0.0,neutralHadronIso()+photonIso()-userFloat("rhoCSA14")*userFloat("EffectiveArea_HZZ4l2015")))/pt()<0.2', - 'deltaR' : 0.3, - }, - 'm': { - 'selection' : 'pt>10&&isLooseMuon&&(chargedHadronIso()+max(photonIso()+neutralHadronIso()-0.5*puChargedHadronIso,0.0))/pt()<0.2', - 'deltaR' : 0.3, - }, - }, + #'j' : { + # 'selection' : 'pt>20 & abs(eta) < 2.5 & userFloat("idLoose")', + # 'e': { + # 'selection' : 'pt>10&&userInt("CBIDLoose")>0&&(chargedHadronIso()+max(0.0,neutralHadronIso()+photonIso()-userFloat("rho_fastjet")*userFloat("EffectiveArea")))/pt()<0.2', + # 'deltaR' : 0.3, + # }, + # 'm': { + # 'selection' : 'pt>10&&isLooseMuon&&(chargedHadronIso()+max(photonIso()+neutralHadronIso()-0.5*puChargedHadronIso,0.0))/pt()<0.2', + # 'deltaR' : 0.3, + # }, + # }, }, # cross cleaning for objects in final state - 'crossCleaning' : 'smallestDeltaR() > 0.3', + #'crossCleaning' : 'smallestDeltaR() > 0.3', + 'crossCleaning' : 'smallestDeltaR() >= 0', # additional variables for ntuple 'eventVariables' : PSet(), # candidates of form: objectVarName = 'string expression for selection' diff --git a/NtupleTools/python/parameters/wz.py b/NtupleTools/python/parameters/wz.py index e77ca022c..c7e05431b 100644 --- a/NtupleTools/python/parameters/wz.py +++ b/NtupleTools/python/parameters/wz.py @@ -27,7 +27,7 @@ # remove jets that are close to leptons 'j' : { 'e': { - 'selection' : 'pt>10&&userInt("CBIDLoose")>0&&(chargedHadronIso()+max(0.0,neutralHadronIso()+photonIso()-userFloat("rhoCSA14")*userFloat("EffectiveArea_HZZ4l2015")))/pt()<0.2', + 'selection' : 'pt>10&&userInt("CBIDLoose")>0.5', 'deltaR' : 0.3, }, 'm': { @@ -49,10 +49,10 @@ 'crossCleaning' : '', # additional variables for ntuple 'eventVariables' : PSet( - muVeto = 'vetoMuons(0.1, "isLooseMuon & pt > 10 & abs(eta) < 2.4 & (chargedHadronIso+max(photonIso+neutralHadronIso-0.5*puChargedHadronIso,0.0))/pt()<0.2").size()', - muVetoTight = 'vetoMuons(0.1, "userInt(\'tightID\') > 0.5 & pt > 10 & abs(eta) < 2.4 & (chargedHadronIso+max(photonIso+neutralHadronIso-0.5*puChargedHadronIso,0.0))/pt()<0.12").size()', - eVeto = 'vetoElectrons(0.1, "userFloat(\'CBIDLoose\')>0.5 & pt > 10 & abs(eta) < 2.5").size()', - eVetoTight = 'vetoElectrons(0.1, "userFloat(\'CBIDMedium\')>0.5 & pt > 10 & abs(eta) < 2.5").size()', + muVeto = 'vetoMuons(0.01, "isLooseMuon & pt > 10 & abs(eta) < 2.4 & (chargedHadronIso+max(photonIso+neutralHadronIso-0.5*puChargedHadronIso,0.0))/pt()<0.2").size()', + muVetoTight = 'vetoMuons(0.01, "userInt(\'tightID\') > 0.5 & pt > 10 & abs(eta) < 2.4 & (chargedHadronIso+max(photonIso+neutralHadronIso-0.5*puChargedHadronIso,0.0))/pt()<0.12").size()', + eVeto = 'vetoElectrons(0.01, "userFloat(\'CBIDLoose\')>0.5 & pt > 10 & abs(eta) < 2.5").size()', + eVetoTight = 'vetoElectrons(0.01, "userFloat(\'CBIDMedium\')>0.5 & pt > 10 & abs(eta) < 2.5").size()', ), # candidates of form: objectVarName = 'string expression for selection' 'candidateVariables' : PSet(), diff --git a/NtupleTools/python/parameters/zz.py b/NtupleTools/python/parameters/zz.py index 5057c969d..d7edae776 100644 --- a/NtupleTools/python/parameters/zz.py +++ b/NtupleTools/python/parameters/zz.py @@ -33,7 +33,7 @@ '+max(0.0,{object}.neutralHadronIso()' + '+{object}.photonIso()' + '-daughterUserCandIsoContribution({object_idx}, "%sCand")' + - '-{object}.userFloat("rhoCSA14")*{object}.userFloat("EffectiveArea_HZZ4l2015")))' + + '-{object}.userFloat("rho_fastjet")*{object}.userFloat("EffectiveArea_HZZ4l2015")))' + '/{object}.pt()')%(fsr)) ), @@ -60,6 +60,42 @@ muVars.objectDREt = cms.string(('? daughterHasUserCand({object_idx}, "%sCand") ? ' + 'daughterAsMuon({object_idx}).userFloat("%sCandDREt") : ' + '-999.')%(fsr, fsr)) +setattr(eleVars, "objectRelPFIsoRhoFSR", + cms.string(('({object}.chargedHadronIso()' + + '+max(0.0,{object}.neutralHadronIso()' + + '+{object}.photonIso()' + + '-allFSRIsoContribution({object_idx}, "FSRCand")' + + '-{object}.userFloat("rho_fastjet")*{object}.userFloat("EffectiveArea_HZZ4l2015")))' + + '/{object}.pt()')) + ), + +setattr(muVars, "objectRelPFIsoDBFSR", + cms.string(('({object}.chargedHadronIso()' + + '+max({object}.photonIso()' + + '-allFSRIsoContribution({object_idx}, "FSRCand")' + + '+{object}.neutralHadronIso()' + + '-0.5*{object}.puChargedHadronIso,0.0))' + + '/{object}.pt()')) + ) + +zzEvVars.MassFSR = cms.string('p4fsr("FSRCand").M') +zzEvVars.PtFSR = cms.string('p4fsr("FSRCand").pt') +zzEvVars.EtaFSR = cms.string('p4fsr("FSRCand").eta') +zzEvVars.PhiFSR = cms.string('p4fsr("FSRCand").phi') +zzEvVars.MtFSR = cms.string('p4fsr("FSRCand").Mt') +zzEvVars.nJets = cms.string('evt.jets.size') + +zzDiObjVars.object1_object2_MassFSR = cms.string('subcandPrimaryFSR({object1_idx}, {object2_idx}, "FSRCand").get.mass') +zzDiObjVars.object1_object2_PtFSR = cms.string('subcandPrimaryFSR({object1_idx}, {object2_idx}, "FSRCand").get.pt') +zzDiObjVars.object1_object2_EtaFSR = cms.string('subcandPrimaryFSR({object1_idx}, {object2_idx}, "FSRCand").get.eta') +zzDiObjVars.object1_object2_PhiFSR = cms.string('subcandPrimaryFSR({object1_idx}, {object2_idx}, "FSRCand").get.phi') +zzDiObjVars.object1_object2_MtFSR = cms.string('subcandPrimaryFSR({object1_idx}, {object2_idx}, "FSRCand").get.mt') +zzDiObjVars.object1_object2_FSRPt = cms.string('? bestFSROfZ({object1_idx}, {object2_idx}, "FSRCand").isNonnull() ? ' + 'bestFSROfZ({object1_idx}, {object2_idx}, "FSRCand").pt() : -999.') +zzDiObjVars.object1_object2_FSREta = cms.string('? bestFSROfZ({object1_idx}, {object2_idx}, "FSRCand").isNonnull() ? ' + 'bestFSROfZ({object1_idx}, {object2_idx}, "FSRCand").eta() : -999.') +zzDiObjVars.object1_object2_FSRPhi = cms.string('? bestFSROfZ({object1_idx}, {object2_idx}, "FSRCand").isNonnull() ? ' + 'bestFSROfZ({object1_idx}, {object2_idx}, "FSRCand").phi() : -999.') parameters = { @@ -111,9 +147,9 @@ D_g4 = 'userFloat("p0plus_VAJHU") / (userFloat("p0plus_VAJHU") + userFloat("p0minus_VAJHU"))', Djet_VAJHU = '? evt.jets.size >= 2 ? userFloat("pvbf_VAJHU") / (userFloat("pvbf_VAJHU") + userFloat("phjj_VAJHU")) : -1', muVeto = 'vetoMuons(0.4, "isLooseMuon & pt > 10 & abs(eta) < 2.4").size()', - muVetoIso = 'vetoMuons(0.4, "isLooseMuon & pt > 10 & abs(eta) < 2.4 & (chargedHadronIso()+max(0.0,neutralHadronIso()+photonIso()-userFloat(\'rhoCSA14\')*userFloat(\'EffectiveArea_HZZ4l2015\')))/pt()<0.2").size()', + muVetoIso = 'vetoMuons(0.4, "isLooseMuon & pt > 10 & abs(eta) < 2.4 & (chargedHadronIso()+max(0.0,neutralHadronIso()+photonIso()-userFloat(\'rho_fastjet\')*userFloat(\'EffectiveArea_HZZ4l2015\')))/pt()<0.2").size()', eVeto = 'vetoElectrons(0.4, "userFloat(\'CBIDLoose\')>0.5 & pt > 10 & abs(eta) < 2.5").size()', - eVetoIso = 'vetoElectrons(0.4, "userFloat(\'CBIDLoose\')>0.5 & pt > 10 & abs(eta) < 2.5 & (chargedHadronIso()+max(0.0,neutralHadronIso()+photonIso()-userFloat(\'rhoCSA14\')*userFloat(\'EffectiveArea_HZZ4l2015\')))/pt() < 0.2").size()', + eVetoIso = 'vetoElectrons(0.4, "userFloat(\'CBIDLoose\')>0.5 & pt > 10 & abs(eta) < 2.5 & (chargedHadronIso()+max(0.0,neutralHadronIso()+photonIso()-userFloat(\'rho_fastjet\')*userFloat(\'EffectiveArea_HZZ4l2015\')))/pt() < 0.2").size()', ), # candidates of form: objectVarName = 'string expression for selection' diff --git a/NtupleTools/python/templates/bjets.py b/NtupleTools/python/templates/bjets.py index 8d1f55e54..77980f310 100644 --- a/NtupleTools/python/templates/bjets.py +++ b/NtupleTools/python/templates/bjets.py @@ -38,6 +38,8 @@ pujets = PSet( objectIDTight='{object}.userFloat("idTight")', + objectIDLoose='{object}.userFloat("idLoose")', + objectIDMedium='{object}.userFloat("idMedium")', objectPUIDFullDiscriminant='{object}.userFloat("pileupJetId:fullDiscriminant")', ) diff --git a/NtupleTools/python/templates/candidates.py b/NtupleTools/python/templates/candidates.py index df732e590..760b63e62 100644 --- a/NtupleTools/python/templates/candidates.py +++ b/NtupleTools/python/templates/candidates.py @@ -9,7 +9,8 @@ from FinalStateAnalysis.Utilities.cfgtools import PSet kinematics = PSet( - objectPt = '{object}.pt', + #objectPt = '{object}.pt', + objectPt = '? evt.jets.size()>{object_idx} ? {object}.pt() : -999', objectEta = '{object}.eta', objectAbsEta = 'abs({object}.eta)', objectPhi = '{object}.phi', diff --git a/NtupleTools/python/templates/cleaning.py b/NtupleTools/python/templates/cleaning.py index 301f3ee6b..4b4dcc7f1 100644 --- a/NtupleTools/python/templates/cleaning.py +++ b/NtupleTools/python/templates/cleaning.py @@ -20,25 +20,19 @@ muGlbIsoVetoPt10 = 'vetoMuons(0.4, "isGlobalMuon & isTrackerMuon & pt > 10 & abs(eta) < 2.4 & (userIso(0) + max(photonIso + neutralHadronIso - 0.5*puChargedHadronIso, 0))/pt < 0.4").size()', muVetoPt5IsoIdVtx = 'vetoMuons(0.4, "pt > 5 & abs(eta) < 2.4 & userInt(\'tightID\') > 0.5 & ((userIso(0) + max(photonIso()+neutralHadronIso()-0.5*puChargedHadronIso,0.0))/pt()) < 0.15 & userFloat(\'dz\') < 0.2").size()', muVetoPt15IsoIdVtx = 'vetoMuons(0.4, "pt > 15 & abs(eta) < 2.4 & userInt(\'tightID\') > 0.5 & ((userIso(0) + max(photonIso()+neutralHadronIso()-0.5*puChargedHadronIso,0.0))/pt()) < 0.15 & userFloat(\'dz\') < 0.2").size()', - muVetoWZ = 'vetoMuons(0.4, "isLooseMuon & pt > 10 & abs(eta) < 2.4").size()', - muVetoWZIso = 'vetoMuons(0.4, "isLooseMuon & pt > 10 & abs(eta) < 2.4 & (chargedHadronIso()+max(photonIso()+neutralHadronIso()-0.5*puChargedHadronIso,0.0))/pt() < 0.2").size()', #TAU VETOS #OLD DMs tauVetoPt20Loose3HitsVtx = 'vetoTaus(0.4, "pt > 20 & abs(eta) < 2.5 & tauID(\'decayModeFinding\') & tauID(\'byLooseCombinedIsolationDeltaBetaCorr3Hits\') & userFloat(\'dz\') < 0.2").size()', tauVetoPt20TightMVALTVtx = 'vetoTaus(0.4, "pt > 20 & abs(eta) < 2.5 & tauID(\'decayModeFinding\') & tauID(\'byTightIsolationMVA3oldDMwLT\') & userFloat(\'dz\') < 0.2").size()', - tauVetoPt20TightMVAVtx = 'vetoTaus(0.4, "pt > 20 & abs(eta) < 2.5 & tauID(\'decayModeFinding\') & tauID(\'byTightIsolationMVA3oldDMwoLT\') & userFloat(\'dz\') < 0.2").size()', #NEW DMs tauVetoPt20Loose3HitsNewDMVtx = 'vetoTaus(0.4, "pt > 20 & abs(eta) < 2.5 & tauID(\'decayModeFindingNewDMs\') & tauID(\'byLooseCombinedIsolationDeltaBetaCorr3Hits\') & userFloat(\'dz\') < 0.2").size()', tauVetoPt20TightMVALTNewDMVtx = 'vetoTaus(0.4, "pt > 20 & abs(eta) < 2.5 & tauID(\'decayModeFinding\') & tauID(\'byTightIsolationMVA3newDMwLT\') & userFloat(\'dz\') < 0.2").size()', - tauVetoPt20TightMVANewDMVtx = 'vetoTaus(0.4, "pt > 20 & abs(eta) < 2.5 & tauID(\'decayModeFinding\') & tauID(\'byTightIsolationMVA3newDMwoLT\') & userFloat(\'dz\') < 0.2").size()', #ELECTRON VETOS eVetoMVAIsoVtx = 'vetoElectrons(0.4, "pt > 10 & abs(eta) < 2.5 & userInt(\'mvaidwp\') > 0.5 & ((userIso(0) + max(userIso(1) + neutralHadronIso - 0.5*userIso(2), 0))/pt) < 0.3 & userFloat(\'dz\') < 0.2").size()', eVetoMVAIso = 'vetoElectrons(0.4, "pt > 10 & abs(eta) < 2.5 & userInt(\'mvaidwp\') > 0.5 & (userIso(0) + max(userIso(1) + neutralHadronIso - 0.5*userIso(2), 0))/pt < 0.3").size()', - eVetoWZ = 'vetoElectrons(0.4, "userFloat(\'CBIDLoose\')>0.5 & pt > 10 & abs(eta) < 2.5").size()', - eVetoWZTight = 'vetoElectrons(0.4, "userFloat(\'CBIDMedium\')>0.5 & pt > 10 & abs(eta) < 2.5").size()', #B-JET Vetos bjetCISVVeto20Loose = 'vetoJets(0.4, "pt > 20 & abs(eta) < 2.4 & bDiscriminator(\'pfCombinedInclusiveSecondaryVertexV2BJetTags\') > 0.423").size()', diff --git a/NtupleTools/python/templates/electrons.py b/NtupleTools/python/templates/electrons.py index e3d117e7e..bad6a8055 100755 --- a/NtupleTools/python/templates/electrons.py +++ b/NtupleTools/python/templates/electrons.py @@ -28,29 +28,40 @@ objectMVANonTrigWP90 = '{object}.userFloat("MVANonTrigWP90")', # Use cms.string so we get the parentheses formatting bonus +# objectRelPFIsoDB = cms.string( +# "({object}.userIso(0)" +# "+max({object}.userIso(1)" +# "+{object}.neutralHadronIso()" +# "-0.5*{object}.userIso(2),0.0))" +# "/{object}.pt()" +# ), objectRelPFIsoDB = cms.string( - "({object}.userIso(0)" - "+max({object}.userIso(1)" - "+{object}.neutralHadronIso()" - "-0.5*{object}.userIso(2),0.0))" + "({object}.userIsolation('PfChargedHadronIso')" + "+max({object}.userIsolation('PfNeutralHadronIso')" + "+{object}.userIsolation('PfGammaIso')" + "-0.5*{object}.userIsolation('PfPUChargedHadronIso'),0.0))" "/{object}.pt()" ), objectRelPFIsoRho = cms.string( '({object}.chargedHadronIso()' '+max(0.0,{object}.neutralHadronIso()' '+{object}.photonIso()' - '-{object}.userFloat("rhoCSA14")*{object}.userFloat("EffectiveArea_HZZ4l2015")))' + '-{object}.userFloat("rho_fastjet")*{object}.userFloat("EffectiveArea")))' '/{object}.pt()' ), + # Number of matched conversions + objectPassesConversionVeto = '{object}.passConversionVeto()', + objectPFChargedIso = cms.string('{object}.userIsolation("PfChargedHadronIso")'), objectPFNeutralIso = cms.string('{object}.userIsolation("PfNeutralHadronIso")'), objectPFPhotonIso = cms.string('{object}.userIsolation("PfGammaIso")'), - + objectPFPUChargedIso = cms.string('{object}.userIsolation("PfPUChargedHadronIso")'), + objectEffectiveArea2012Data = cms.string('{object}.userFloat("ea_comb_Data2012_iso04_kt6PFJ")'), - objectEffectiveAreaPHYS14 = cms.string('{object}.userFloat("EffectiveArea_HZZ4l2015")'), + objectEffectiveAreaSpring15 = cms.string('{object}.userFloat("EffectiveArea")'), - objectRho = cms.string('{object}.userFloat("rhoCSA14")'), + objectRho = cms.string('{object}.userFloat("rho_fastjet")'), objectRelIso = cms.string("({object}.dr03TkSumPt()" "+max({object}.dr03EcalRecHitSumEt()-1.0,0.0)" "+{object}.dr03HcalTowerSumEt())/{object}.pt()"), @@ -91,6 +102,10 @@ # How close is the nearest muon passing some basic quality cuts? objectNearestMuonDR = "electronClosestMuonDR({object_idx})", + # closest Z mass + objectNearestZMass = 'closestZElectron({object_idx},"")', + # lowest invariant mass + objectLowestMll = 'smallestMee({object_idx},"")', ) energyCorrections = PSet( @@ -128,21 +143,29 @@ objectSCPreshowerEnergy = '{object}.superCluster().preshowerEnergy', objectSCPhiWidth = '{object}.superCluster().phiWidth', objectSCEtaWidth = '{object}.superCluster().etaWidth' +trigger_50ns = PSet( + objectMatchesSingleE = r'matchToHLTPath({object_idx},"HLT_Ele27_eta2p1_WPLoose_Gsf_v\\d+|HLT_Ele23_CaloIdL_TrackIdL_IsoVL_V\\d+",0.5)', + objectMatchesSingleE_leg1 = r'matchToHLTPath({object_idx},"HLT_Ele17_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesSingleE_leg2 = r'matchToHLTPath({object_idx},"HLT_Ele12_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesDoubleE = r'matchToHLTPath({object_idx},"HLT_Ele17_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v\\d+",0.5)', + objectMatchesSingleESingleMu = r'matchToHLTPath({object_idx},"HLT_Mu8_TrkIsoVVL_Ele17_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesSingleMuSingleE = r'matchToHLTPath({object_idx},"HLT_Mu17_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesTripleE = r'matchToHLTPath({object_idx},"HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL_v\\d+",0.5)', + objectMatchesDoubleESingleMu = r'matchToHLTPath({object_idx},"HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v\\d+",0.5)', + objectMatchesDoubleMuSingleE = r'matchToHLTPath({object_idx},"HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v\\d+",0.5)', ) -trigger = PSet( - objectMu17Ele8dZFilter = 'matchToHLTFilter({object_idx}, "hltMu17Ele8dZFilter")', # HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v4-v6 - objectMu17Ele8CaloIdTPixelMatchFilter = 'matchToHLTFilter({object_idx}, "hltMu17Ele8CaloIdTPixelMatchFilter")', - objectL1NonIsoHLTNonIsoMu17Ele8PixelMatchFilter = 'matchToHLTFilter({object_idx}, "hltL1NonIsoHLTNonIsoMu17Ele8PixelMatchFilter")', - objectMu17Ele8CaloIdTCaloIsoVLTrkIdVLTrkIsoVLTrackIsoFilter = 'matchToHLTFilter({object_idx}, "hltMu17Ele8CaloIdTCaloIsoVLTrkIdVLTrkIsoVLTrackIsoFilter")', - objectEle27WP80TrackIsoMatchFilter = 'matchToHLTFilter({object_idx}, "hltEle27WP80TrackIsoFilter")', - objectEle32WP70PFMT50PFMTFilter = 'matchToHLTFilter({object_idx},"hltEle32WP70PFMT50PFMTFilter")', - objectEle27WP80PFMT50PFMTFilter = 'matchToHLTFilter({object_idx},"hltEle27WP80PFMT50PFMTFilter")', - objectMatchesDoubleEPath = r'matchToHLTPath({object_idx}, "HLT_Ele17_CaloIdL_CaloIsoVL_Ele8_CaloIdL_CaloIsoVL_v\\d+,HLT_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v\\d+")', - objectMatchesMu17Ele8Path = r'matchToHLTPath({object_idx}, "HLT_Mu17_Ele8_CaloIdL_v\\d+,HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_v\\d+,HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v\\d+")', - objectMatchesMu8Ele17Path = r'matchToHLTPath({object_idx}, "HLT_Mu8_Ele17_CaloIdL_v\\d+,HLT_Mu8_Ele17_CaloIdT_CaloIsoVL_v\\d+")', - objectMatchesMu17Ele8IsoPath = r'matchToHLTPath({object_idx}, "HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v\\d+")', - objectMatchesMu8Ele17IsoPath = r'matchToHLTPath({object_idx}, "HLT_Mu8_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v\\d+")', - objectMatchesSingleE = r'matchToHLTPath({object_idx}, "HLT_Ele27_WP80_v\\d+,HLT_Ele27_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v\\d+,HLT_Ele32_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v\\d+")', - objectMatchesSingleEPlusMET = r'matchToHLTPath({object_idx},"HLT_Ele27_WP80_PFMET_MT50_v\\d+,HLT_Ele32_WP70_PFMT50_v\\d+")', +trigger_25ns = PSet( + objectMatchesSingleE = r'matchToHLTPath({object_idx},"HLT_Ele32_eta2p1_WPLoose_Gsf_v\\d+",0.5)', + objectMatchesSingleE_leg1 = r'matchToHLTPath({object_idx},"HLT_Ele23_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesSingleE_leg2 = r'matchToHLTPath({object_idx},"HLT_Ele12_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesDoubleE = r'matchToHLTPath({object_idx},"HLT_Ele23_Ele12_CaloIdL_TrackIdL_IsoVL_DZ_v\\d+",0.5)', + objectMatchesSingleESingleMu = r'matchToHLTPath({object_idx},"HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesSingleMuSingleE = r'matchToHLTPath({object_idx},"HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesTripleE = r'matchToHLTPath({object_idx},"HLT_Ele16_Ele12_Ele8_CaloIdL_TrackIdL_v\\d+",0.5)', + objectMatchesDoubleESingleMu = r'matchToHLTPath({object_idx},"HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v\\d+",0.5)', + objectMatchesDoubleMuSingleE = r'matchToHLTPath({object_idx},"HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v\\d+",0.5)', + ) + ) + diff --git a/NtupleTools/python/templates/event.py b/NtupleTools/python/templates/event.py index 73d1f39ef..bb47a539a 100644 --- a/NtupleTools/python/templates/event.py +++ b/NtupleTools/python/templates/event.py @@ -74,7 +74,7 @@ #isWmunu='evt.findDecay(24,13)', NUP='evt.lesHouches.NUP', EmbPtWeight='evt.generatorFilter.filterEfficiency', - GenWeight='evt.genEventInfo.weights()[0]', + GenWeight='? evt.genEventInfo.weights().size>0 ? evt.genEventInfo.weights()[0] : 0', ) tauSpinner = PSet( diff --git a/NtupleTools/python/templates/muons.py b/NtupleTools/python/templates/muons.py index 790f886e9..280308a66 100755 --- a/NtupleTools/python/templates/muons.py +++ b/NtupleTools/python/templates/muons.py @@ -22,7 +22,7 @@ # For charged, we use ALL charged particles objectEffectiveArea2012 = '{object}.userFloat("ea_comb_iso04_kt6PFJCNth05")', objectEffectiveArea2011 = '{object}.userFloat("ea_comb_iso04_kt6PFJCth05")', - objectRho = cms.string('{object}.userFloat("rhoCSA14")'), + objectRho = cms.string('{object}.userFloat("rho_fastjet")'), objectPFChargedIso = cms.string('{object}.userIsolation("PfChargedHadronIso")'), objectPFNeutralIso = cms.string('{object}.userIsolation("PfNeutralHadronIso")'), objectPFPhotonIso = cms.string('{object}.userIsolation("PfGammaIso")'), @@ -38,14 +38,14 @@ '({object}.chargedHadronIso()' '+max(0.0,{object}.neutralHadronIso()' '+{object}.photonIso()' - '-{object}.userFloat("rhoCSA14")*{object}.userFloat("ea_comb_iso04_kt6PFJCNth05")))' + '-{object}.userFloat("rho_fastjet")*{object}.userFloat("ea_comb_iso04_kt6PFJCNth05")))' '/{object}.pt()' ), objectRelPFIsoRhoFSR = cms.string( '({object}.chargedHadronIso()' '+max(0.0,{object}.neutralHadronIso()' '+{object}.photonIso() - userFloat("leg{object_idx}fsrIsoCorr")' - '-{object}.userFloat("rhoCSA14")*{object}.userFloat("ea_comb_iso04_kt6PFJCNth05")))' + '-{object}.userFloat("rho_fastjet")*{object}.userFloat("ea_comb_iso04_kt6PFJCNth05")))' '/{object}.pt()' ), @@ -65,6 +65,10 @@ objectGenPt = '? (getDaughterGenParticle({object_idx}, 13, 0).isAvailable && getDaughterGenParticle({object_idx}, 13, 0).isNonnull) ? getDaughterGenParticle({object_idx}, 13, 0).pt() : -999', objectGenVZ = '? (getDaughterGenParticle({object_idx}, 13, 0).isAvailable && getDaughterGenParticle({object_idx}, 13, 0).isNonnull) ? getDaughterGenParticle({object_idx}, 13, 0).vz() : -999', objectGenVtxPVMatch = 'genVtxPVMatch({object_idx})', # is PV closest vtx to gen vtx? + # closest Z mass + objectNearestZMass = 'closestZMuon({object_idx},"")', + # lowest invariant mass + objectLowestMll = 'smallestMmm({object_idx},"")', ) energyCorrections = PSet( @@ -91,25 +95,33 @@ ) # Trigger matching -trigger = PSet( - objectDiMuonL3p5PreFiltered8 = 'matchToHLTFilter({object_idx}, "hltDiMuonL3(p5|)PreFiltered8")', - objectDiMuonL3PreFiltered7 = 'matchToHLTFilter({object_idx}, "hltDiMuonL3PreFiltered7")', - objectSingleMu13L3Filtered13 = 'matchToHLTFilter({object_idx}, "hltSingleMu13L3Filtered13")', - objectSingleMu13L3Filtered17 = 'matchToHLTFilter({object_idx}, "hltSingleMu13L3Filtered17")', - objectDiMuonMu17Mu8DzFiltered0p2 = 'matchToHLTFilter({object_idx}, "hltDiMuonMu17Mu8DzFiltered0p2")', - objectL1Mu3EG5L3Filtered17 = 'matchToHLTFilter({object_idx}, "hltL1Mu3EG5L3Filtered17")', - objectMu17Ele8dZFilter = 'matchToHLTFilter({object_idx}, "hltMu17Ele8dZFilter")', - objectL3fL1DoubleMu10MuOpenL1f0L2f10L3Filtered17 = 'matchToHLTFilter({object_idx}, "hltL3fL1DoubleMu10MuOpenL1f0L2f10L3Filtered17")',# missing ) on purpose - objectMatchesDoubleMuPaths = r'matchToHLTPath({object_idx}, "HLT_DoubleMu7_v\\d+,HLT_Mu13_Mu8_v\\d+,HLT_Mu17_Mu8_v\\d+")', - objectMatchesDoubleMuTrkPaths = r'matchToHLTPath({object_idx}, "HLT_DoubleMu7_v\\d+,HLT_Mu13_Mu8_v\\d+,HLT_Mu17_TrkMu8_v\\d+")', - objectMatchesMu17Mu8Path = r'matchToHLTPath({object_idx}, "HLT_Mu17_Mu8_v\\d+")', - objectMatchesMu17TrkMu8Path = r'matchToHLTPath({object_idx}, "HLT_Mu17_TrkMu8_v\\d+")', - objectMatchesMu17Ele8Path = r'matchToHLTPath({object_idx}, "HLT_Mu17_Ele8_CaloIdL_v\\d+,HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_v\\d+,HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v\\d+")', - objectMatchesMu8Ele17Path = r'matchToHLTPath({object_idx}, "HLT_Mu8_Ele17_CaloIdL_v\\d+,HLT_Mu8_Ele17_CaloIdT_CaloIsoVL_v\\d+")', - objectMatchesMu17Ele8IsoPath = r'matchToHLTPath({object_idx}, "HLT_Mu17_Ele8_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v\\d+")', - objectMatchesMu8Ele17IsoPath = r'matchToHLTPath({object_idx}, "HLT_Mu8_Ele17_CaloIdT_CaloIsoVL_TrkIdVL_TrkIsoVL_v\\d+")', - objectMatchesIsoMuGroup = r'matchToHLTPath({object_idx}, "HLT_IsoMu17_v\\d+,HLT_IsoMu20_v\\d+,HLT_IsoMu24_v\\d+,HLT_IsoMu24_eta2p1_v\\d+,HLT_IsoMu30_v\\d+,HLT_IsoMu30_eta2p1_v\\d+")', - objectMatchesIsoMu24eta2p1 = r'matchToHLTPath({object_idx}, "HLT_IsoMu24_eta2p1_v\\d+")', +trigger_50ns = PSet( + objectMatchesSingleMu = r'matchToHLTPath({object_idx},"HLT_Mu40_v\\d+",0.5)', + objectMatchesSingleMu_leg1 = r'matchToHLTPath({object_idx},"HLT_Mu17_TrkIsoVVL_v\\d+",0.5)', + objectMatchesSingleMu_leg2 = r'matchToHLTPath({object_idx},"HLT_Mu8_TrkIsoVVL_v\\d+",0.5)', + objectMatchesSingleMu_leg1_noiso = r'matchToHLTPath({object_idx},"HLT_Mu17_v\\d+",0.5)', + objectMatchesSingleMu_leg2_noiso = r'matchToHLTPath({object_idx},"HLT_Mu8_v\\d+",0.5)', + objectMatchesDoubleMu = r'matchToHLTPath({object_idx},"HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v\\d+|HLT_Mu17_TrkIsoVVL_TkMu8_TrkIsoVVL_DZ_v\\d+",0.5)', + objectMatchesSingleESingleMu = r'matchToHLTPath({object_idx},"HLT_Mu8_TrkIsoVVL_Ele17_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesSingleMuSingleE = r'matchToHLTPath({object_idx},"HLT_Mu17_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesTripleMu = r'matchToHLTPath({object_idx},"HLT_TripleMu_12_10_5_v\\d+",0.5)', + objectMatchesDoubleESingleMu = r'matchToHLTPath({object_idx},"HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v\\d+",0.5)', + objectMatchesDoubleMuSingleE = r'matchToHLTPath({object_idx},"HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v\\d+",0.5)', +) + +trigger_25ns = PSet( + objectMatchesSingleMu = r'matchToHLTPath({object_idx},"HLT_Mu50_v\\d+",0.5)', + objectMatchesSingleMu_leg1 = r'matchToHLTPath({object_idx},"HLT_Mu17_TrkIsoVVL_v\\d+",0.5)', + objectMatchesSingleMu_leg2 = r'matchToHLTPath({object_idx},"HLT_Mu8_TrkIsoVVL_v\\d+",0.5)', + objectMatchesSingleMu_leg1_noiso = r'matchToHLTPath({object_idx},"HLT_Mu17_v\\d+",0.5)', + objectMatchesSingleMu_leg2_noiso = r'matchToHLTPath({object_idx},"HLT_Mu8_v\\d+",0.5)', + objectMatchesDoubleMu = r'matchToHLTPath({object_idx},"HLT_Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_v\\d+|HLT_Mu17_TrkIsoVVL_TkMu8_TrkIsoVVL_DZ_v\\d+",0.5)', + objectMatchesSingleESingleMu = r'matchToHLTPath({object_idx},"HLT_Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesSingleMuSingleE = r'matchToHLTPath({object_idx},"HLT_Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_v\\d+",0.5)', + objectMatchesTripleMu = r'matchToHLTPath({object_idx},"HLT_TripleMu_12_10_5_v\\d+",0.5)', + objectMatchesDoubleESingleMu = r'matchToHLTPath({object_idx},"HLT_Mu8_DiEle12_CaloIdL_TrackIdL_v\\d+",0.5)', + objectMatchesDoubleMuSingleE = r'matchToHLTPath({object_idx},"HLT_DiMu9_Ele9_CaloIdL_TrackIdL_v\\d+",0.5)', + ) ) diff --git a/NtupleTools/python/templates/topology.py b/NtupleTools/python/templates/topology.py index 272245408..9415a2cc8 100644 --- a/NtupleTools/python/templates/topology.py +++ b/NtupleTools/python/templates/topology.py @@ -122,3 +122,32 @@ objectPhi = '? evt.jets.size()>{object_idx} ? {object}.phi() : -999', objectPUMVA = '? evt.jets.size()>{object_idx} ? {object}.userFloat("pileupJetId:fullDiscriminant") : -999', ) + +extraBJetTools = PSet( + #Btagging + objectCSVBtag = '? evt.jets.size()>{object_idx} ? {object}.bDiscriminator("combinedSecondaryVertexBJetTags") : -999', + objectPFJBPBtag = '? evt.jets.size()>{object_idx} ? {object}.bDiscriminator("pfJetBProbabilityBJetTags") : -999', + objectPFJPBtag = '? evt.jets.size()>{object_idx} ? {object}.bDiscriminator("pfJetProbabilityBJetTags") : -999', + objectPFTCHPBtag = '? evt.jets.size()>{object_idx} ? {object}.bDiscriminator("pfTrackCountingHighPurBJetTags") : -999', + objectPFTCHEBtag = '? evt.jets.size()>{object_idx} ? {object}.bDiscriminator("pfTrackCountingHighEffBJetTags") : -999', + objectPFSSVHEBtag = '? evt.jets.size()>{object_idx} ? {object}.bDiscriminator("pfSimpleSecondaryVertexHighEffBJetTags") : -999', + objectPFSSVHPBtag = '? evt.jets.size()>{object_idx} ? {object}.bDiscriminator("pfSimpleSecondaryVertexHighPurBJetTags") : -999', + objectPFCSVBtag = '? evt.jets.size()>{object_idx} ? {object}.bDiscriminator("pfCombinedSecondaryVertexV2BJetTags") : -999', + objectPFCISVBtag = '? evt.jets.size()>{object_idx} ? {object}.bDiscriminator("pfCombinedInclusiveSecondaryVertexV2BJetTags") : -999', + objectPFCSVSLBtag = '? evt.jets.size()>{object_idx} ? {object}.bDiscriminator("pfCombinedSecondaryVertexSoftLeptonBJetTags") : -999', + objectPFCMVABtag = '? evt.jets.size()>{object_idx} ? {object}.bDiscriminator("pfCombinedMVABJetTags") : -999', + + # sv variables in miniAOD + objectSVMass = '? evt.jets.size()>{object_idx} ? {object}.userFloat("vtxMass") : -999', + objectSVNTracks = '? evt.jets.size()>{object_idx} ? {object}.userFloat("vtxNtracks") : -999', + objectSV3DVal = '? evt.jets.size()>{object_idx} ? {object}.userFloat("vtx3DVal") : -999', + objectSV3DSig = '? evt.jets.size()>{object_idx} ? {object}.userFloat("vtx3DSig") : -999', + + #Flavour + objectJetFlavour = '? evt.jets.size()>{object_idx} ? {object}.partonFlavour() : -999', +) + +extraPUTools = PSet( + objectIDTight = '? evt.jets.size()>{object_idx} ? {object}.userFloat("idTight") : -999', + objectPUIDFullDiscriminant = '? evt.jets.size()>{object_idx} ? {object}.userFloat("pileupJetId:fullDiscriminant") : -999', +) diff --git a/NtupleTools/test/make_ntuples_cfg.py b/NtupleTools/test/make_ntuples_cfg.py index fa8c0623b..1b5af1418 100755 --- a/NtupleTools/test/make_ntuples_cfg.py +++ b/NtupleTools/test/make_ntuples_cfg.py @@ -728,7 +728,8 @@ def get_producer_suffix(state): else: print "Building ntuple for final states: %s" % ", ".join(final_states) for final_state in expanded_final_states(final_states): - extraJets = options.nExtraJets if 'j' not in final_state else 0 + #extraJets = options.nExtraJets if 'j' not in final_state else 0 + extraJets = options.nExtraJets final_state = order_final_state(final_state) analyzer = make_ntuple(*final_state, svFit=options.svFit, dblhMode=options.dblhMode, diff --git a/PatTools/python/patFinalStateProducers.py b/PatTools/python/patFinalStateProducers.py index f066ad8b7..edc2c5548 100644 --- a/PatTools/python/patFinalStateProducers.py +++ b/PatTools/python/patFinalStateProducers.py @@ -184,8 +184,10 @@ def produce_final_states(process, daughter_collections, output_commands, process.buildSingleObjects = cms.Sequence() # build single object pairs for object in object_types: + print object # Define some basic selections for building combinations cuts = [crossCleaning] # basic x-cleaning + print cuts producer = cms.EDProducer( "PAT%sFinalStateProducer" % object[0], @@ -225,6 +227,7 @@ def produce_final_states(process, daughter_collections, output_commands, # Define some basic selections for building combinations cuts = [crossCleaning] # basic x-cleaning + print cuts producer = cms.EDProducer( "PAT%s%sFinalStateProducer" % (diobject[0][0], diobject[1][0]), diff --git a/PlotTools/rake/meta.rake b/PlotTools/rake/meta.rake index e64256f91..194c647c3 100644 --- a/PlotTools/rake/meta.rake +++ b/PlotTools/rake/meta.rake @@ -40,50 +40,52 @@ namespace :meta do sh "extract_meta_info.py #{t.prerequisites} metaInfo #{t.name}" end end - + # For data, we need a computed lumi mask - if sample.include? 'data' - # Get lumi mask in plain format. - file sample + '.lumimask.json' => sample + '.meta.json' do |t| - sh "cat #{t.prerequisites} | dump_lumimask.py > #{t.name}" - end - # Run lumicalc on the mask - file sample + '.lumicalc.csv' => sample + '.lumimask.json' do |t| - #sh "pixelLumiCalc.py overview -i #{t.prerequisites} -o #{t.name}" - sh "lumiCalc2.py overview -i #{t.prerequisites} -o #{t.name}" - end - # Get the PU distribution - file sample + '.pu.root' => sample + '.lumimask.json' do |t| - pu_file = '' - maxbin = 50 - nbins = 500 - # Minbias xsection - minbias = 68000 - if sqrts == "8" then - pu_file = ENV['pu2012JSON'] - maxbin = 60 - nbins = 600 - minbias = 69400 - end - if sqrts == "7" then - pu_file = ENV["pu2011JSON"] - end - # Find the newest PU json file - sh "pileupCalc.py -i #{t.prerequisites[0]} --inputLumiJSON #{pu_file} --calcMode true --minBiasXsec #{minbias} --maxPileupBin #{maxbin} --numPileupBins #{nbins} #{t.name}" - end - # Put the lumicalc result in a readable format. Make it dependent - # on the PU .root file as well, so it gets built. - file sample + '.lumicalc.sum' => [sample + '.lumicalc.csv', sample + '.pu.root'] do |t| - sh "lumicalc_parser.py #{t.prerequisites[0]} > #{t.name}" - end - else - # In MC, we can get the effective lumi from xsec and #events. - file sample + '.lumicalc.sum' => sample + '.meta.json' do |t| - sh "get_mc_lumi.py --sqrts #{sqrts} #{sample} `cat #{t.prerequisites} | extract_json.py n_evts` > #{t.name}" - end - end - # Return the final target - return sample + '.lumicalc.sum' +# if sample.include? 'data' +# # Get lumi mask in plain format. +# file sample + '.lumimask.json' => sample + '.meta.json' do |t| +# print {t.prerequisites} +# sh "cat #{t.prerequisites} | dump_lumimask.py > #{t.name}" +# end +# # Run lumicalc on the mask +# file sample + '.lumicalc.csv' => sample + '.lumimask.json' do |t| +# #sh "pixelLumiCalc.py overview -i #{t.prerequisites} -o #{t.name}" +# sh "lumiCalc2.py overview -i #{t.prerequisites} -o #{t.name}" +# end +# # Get the PU distribution +# file sample + '.pu.root' => sample + '.lumimask.json' do |t| +# pu_file = '' +# maxbin = 50 +# nbins = 500 +# # Minbias xsection +# minbias = 68000 +# if sqrts == "8" then +# pu_file = ENV['pu2012JSON'] +# maxbin = 60 +# nbins = 600 +# minbias = 69400 +# end +# if sqrts == "7" then +# pu_file = ENV["pu2011JSON"] +# end +# # Find the newest PU json file +# sh "pileupCalc.py -i #{t.prerequisites[0]} --inputLumiJSON #{pu_file} --calcMode true --minBiasXsec #{minbias} --maxPileupBin #{maxbin} --numPileupBins #{nbins} #{t.name}" +# end +# # Put the lumicalc result in a readable format. Make it dependent +# # on the PU .root file as well, so it gets built. +# file sample + '.lumicalc.sum' => [sample + '.lumicalc.csv', sample + '.pu.root'] do |t| +# sh "lumicalc_parser.py #{t.prerequisites[0]} > #{t.name}" +# end +# #else +# # In MC, we can get the effective lumi from xsec and #events. +# file sample + '.lumicalc.sum' => sample + '.meta.json' do |t| +# sh "get_mc_lumi.py --sqrts #{sqrts} #{sample} `cat #{t.prerequisites} | extract_json.py n_evts` > #{t.name}" +# end +# end +# # Return the final target +# return sample + '.lumicalc.sum' + end task :getmeta, [:directory, :ntuple, :sqrts] do |t, args| diff --git a/Utilities/python/cfgtools.py b/Utilities/python/cfgtools.py index a8aeed89d..c21e2c73f 100644 --- a/Utilities/python/cfgtools.py +++ b/Utilities/python/cfgtools.py @@ -268,6 +268,9 @@ def __init__(self, *args, **kwargs): # Reduce boiler plate of input arguments for key in kwargs.keys(): value = kwargs[key] + print "key, value:" + print key + print value if isinstance(value, str): kwargs[key] = cms.string(value) elif isinstance(value, float): diff --git a/Utilities/scripts/submit_job.py b/Utilities/scripts/submit_job.py index 3628ce65b..0185e6032 100755 --- a/Utilities/scripts/submit_job.py +++ b/Utilities/scripts/submit_job.py @@ -125,7 +125,8 @@ def getFarmoutCommand(args, dataset_name, full_dataset_name): # temp hardcode if args.apply_cms_lumimask: - filename = 'Cert_246908-251642_13TeV_PromptReco_Collisions15_JSON.txt' + #filename = 'Cert_246908-251883_13TeV_PromptReco_Collisions15_JSON_v2.txt' + filename = 'Cert_246908-254879_13TeV_PromptReco_Collisions15_JSON.txt' lumi_mask_path = os.path.join('/afs/cern.ch/cms/CAF/CMSCOMM/COMM_DQM/certification/Collisions15/13TeV',filename) command.append('lumiMask=%s' % lumi_mask_path) @@ -170,7 +171,6 @@ def datasets_from_das(args): dataset_name = dataset.split('/')[1] passes_filter = True passes_wildcard = False - for pattern in args.samples: if args.dastuple: # check json for shorthand with open(args.dastuple) as tuple_file: @@ -181,6 +181,8 @@ def datasets_from_das(args): if fnmatch.fnmatchcase(shorthand, pattern): passes_wildcard = True else: # check das directly + print dataset_name + print pattern if fnmatch.fnmatchcase(dataset_name, pattern): passes_wildcard = True passes_filter = passes_wildcard and passes_filter @@ -188,23 +190,32 @@ def datasets_from_das(args): script_content += getFarmoutCommand(args, dataset_name, dataset) # special handling for data if args.isData: - data_patterns = [x for x in args.samples if 'data_' in x] + #data_patterns = [x for x in args.samples if 'data_' in x] + data_patterns = [x for x in args.samples] data_datasets = get_das_info('/*/*/MINIAOD') for dataset in data_datasets: passes_filter = True passes_wildcard = False + #print "test" + #print dataset + #print data_datasets + #print data_patterns name_to_use = 'data_' + '_'.join(dataset.split('/')) + #print name_to_use for pattern in data_patterns: if args.dastuple: # check json for shorthand, links to full dataset name with open(args.dastuple) as tuple_file: tuple_info = json.load(tuple_file) matching_datasets = [] for shorthand, fullname in tuple_info.iteritems(): + print "fullname: " + fullname if fullname in dataset: if fnmatch.fnmatchcase(shorthand, pattern): passes_wildcard = True name_to_use = shorthand else: # check das directly + print dataset + print pattern if fnmatch.fnmatchcase(dataset, pattern): passes_wildcard = True passes_filter = passes_wildcard and passes_filter