Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

WIP Add SV Fit #182

Closed
wants to merge 25 commits into from

2 participants

@ekfriis

This is a work-in-progress for adding SVFit to FinalStateAnalysis.

Shalhout Sha... and others added some commits
Shalhout Shalhout First commit of FSA code with SVFit 1c86c11
Shalhout Shalhout Cached SVfit output to avoid calling multiple times for identical arg…
…uments.

ZH candidate events with more than 1 SVfit call are found to have more than 4 leptons.
Each SVfit call is based on a unique choice of which leptons are 1-4.
Duplicate SVfit output is obtained when leptons 2 and 3 are fixed in a choice of leptons 1-4.
Caching the results avoids calls in this case.
515b14d
@ekfriis ekfriis SVFit from Shalhout 89c112e
@ekfriis ekfriis Indentation fbfe123
@ekfriis ekfriis Remove extraneous class wrapper 0c81c56
@ekfriis ekfriis Refactor SVfit code
Remove dependency on TauAnalysis from DataFormats.

Cache the collections using the Hash.h features.
33e9813
@ekfriis ekfriis Merge branch 'master' into svfit
Conflicts:
	DataFormats/src/PATFinalState.cc
	recipe/external/src/rootpy
dac6636
@ekfriis ekfriis Don't depend on the variable when nuking 7d11a8c
@ekfriis ekfriis Use official forward decl. to prevent conflics 8dfd14a
@ekfriis ekfriis Fix major compile errors in SVfit algo 31739ff
@ekfriis ekfriis Fix type errors b16f68b
@ekfriis ekfriis Style cleanup f98e0d4
@ekfriis ekfriis The one true brace style 91a6045
@ekfriis ekfriis Don't emit error if user doesn't type 'n' 7c79e44
@ekfriis ekfriis Add logic to ntuple builder to only SVfit legs where it makes sense 35dd18d
@ekfriis ekfriis We need to always checkout the full PAT recipe to prevent segfaults.
This is because the selectors we use from PatAlgos are still linked
agains a very old dataformat in the full release.
2f40bce
@ekfriis ekfriis fix bug in CLI 61d1c8c
@ekfriis ekfriis Add MVAMET as a recipe option 55fd3e5
@ekfriis ekfriis Use MVA MET for SVFit 0e3f09f
@ekfriis ekfriis Crash gracefully if MVAMET is missing b7ca31e
@ekfriis ekfriis Use correct name for MVA met 93c4866
@ekfriis ekfriis Make running SVfit optional fa12e91
@ekfriis

OK, @scooperstein I think this will work now. If would try to check this development branch out in a separate area and try to build the ntuples.

# Follow the install instructions here 
https://github.com/uwcms/FinalStateAnalysis/blob/master/README.md

except at the clone & recipe steps:

# Get the SVfit development branch (i.e. this pull request)
git clone -b svfit https://github.com/uwcms/FinalStateAnalysis.git

# install with necessary dependencies
cd FinalStateAnalysis/recipe
PATPROD=1 MVAMET=1 ./recipe.sh
# compile etc

then try to run the limits

cd FinalStateAnalysis/NtupleTools/test

submit_job.py 2013-04-07-8TeV-v1-ZH make_ntuples_cfg.py channels=zh rerunFSA=1 rerunMVAMET=1 svFit=1 --tuple-dirs=$fsa/MetaData/tuples/PATTuples-8TeV.json --apply-cmsRun-lumimask --input-files-per-job=1 --shared-fs  --samples "*VH*" "*WZ*" "*Zjets*" > do_higgs.txt

bash < do_higgs.txt

It should produce new ntuples in your HDFS area in the folders 2013-04-07-8TeV-v1-ZH/SAMPLE_NAME with the SVfit, for the VH, WZ, and Zjets samples. Can you try and run this and see if it works?

@iross
@iross
Stephane Coo... and others added some commits
Stephane Cooperstein (CMS svfit 8ed4aac
Stephane Cooperstein (CMS fixed small error in tau template 17965e7
@ekfriis ekfriis Merge pull request #190 from scooperstein/svfit
Fixed a small error in tau template, update some data locations.
5145b80
@ekfriis ekfriis referenced this pull request
Merged

Add SVFit functionality #226

@ekfriis

Superseded by #226

@ekfriis ekfriis closed this
@ekfriis ekfriis deleted the branch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Nov 21, 2012
  1. First commit of FSA code with SVFit

    Shalhout Shalhout authored
Commits on Dec 3, 2012
  1. Cached SVfit output to avoid calling multiple times for identical arg…

    Shalhout Shalhout authored
    …uments.
    
    ZH candidate events with more than 1 SVfit call are found to have more than 4 leptons.
    Each SVfit call is based on a unique choice of which leptons are 1-4.
    Duplicate SVfit output is obtained when leptons 2 and 3 are fixed in a choice of leptons 1-4.
    Caching the results avoids calls in this case.
Commits on Dec 6, 2012
  1. @ekfriis

    SVFit from Shalhout

    ekfriis authored
Commits on Dec 12, 2012
  1. @ekfriis

    Indentation

    ekfriis authored
  2. @ekfriis
  3. @ekfriis

    Refactor SVfit code

    ekfriis authored
    Remove dependency on TauAnalysis from DataFormats.
    
    Cache the collections using the Hash.h features.
Commits on Apr 3, 2013
  1. @ekfriis

    Merge branch 'master' into svfit

    ekfriis authored
    Conflicts:
    	DataFormats/src/PATFinalState.cc
    	recipe/external/src/rootpy
  2. @ekfriis
  3. @ekfriis
  4. @ekfriis
  5. @ekfriis

    Fix type errors

    ekfriis authored
  6. @ekfriis

    Style cleanup

    ekfriis authored
  7. @ekfriis

    The one true brace style

    ekfriis authored
  8. @ekfriis
  9. @ekfriis
  10. @ekfriis

    We need to always checkout the full PAT recipe to prevent segfaults.

    ekfriis authored
    This is because the selectors we use from PatAlgos are still linked
    agains a very old dataformat in the full release.
Commits on Apr 4, 2013
  1. @ekfriis

    fix bug in CLI

    ekfriis authored
  2. @ekfriis

    Add MVAMET as a recipe option

    ekfriis authored
Commits on Apr 6, 2013
  1. @ekfriis

    Use MVA MET for SVFit

    ekfriis authored
Commits on Apr 7, 2013
  1. @ekfriis
  2. @ekfriis

    Use correct name for MVA met

    ekfriis authored
  3. @ekfriis

    Make running SVfit optional

    ekfriis authored
Commits on Apr 18, 2013
  1. svfit

    Stephane Cooperstein (CMS authored
  2. fixed small error in tau template

    Stephane Cooperstein (CMS authored
Commits on Apr 19, 2013
  1. @ekfriis

    Merge pull request #190 from scooperstein/svfit

    ekfriis authored
    Fixed a small error in tau template, update some data locations.
This page is out of date. Refresh to see the latest.
View
3  DataAlgos/BuildFile.xml
@@ -11,6 +11,9 @@
<use name="DataFormats/HepMCCandidate"/>
<use name="DataFormats/PatCandidates"/>
<use name="FWCore/Utilities"/>
+<use name="TauAnalysis/CandidateTools"/>
<export>
<lib name="1"/>
+ <use name="TauAnalysis/CandidateTools"/>
</export>
+
View
29 DataAlgos/interface/ApplySVfit.h
@@ -0,0 +1,29 @@
+///////////
+// getSVFit mass
+// based on standalone SVfit instructions
+// https://twiki.cern.ch/twiki/bin/view/CMS/HiggsToTauTauWorking2012#SVFit_Christian_Lorenzo_Aram_Rog
+//
+// S.Z. Shalhout (sshalhou@CERN.CH) Nov 20, 2012
+/////////
+
+#ifndef APPLYSVFIT_TO_FSA
+#define APPLYSVFIT_TO_FSA
+
+#include "DataFormats/Candidate/interface/CandidateFwd.h"
+#include <vector>
+#include "TMatrixDfwd.h"
+
+// forward declarations
+namespace pat { class MET; }
+namespace edm { class EventID; }
+
+namespace ApplySVfit {
+ double getSVfitMass(
+ std::vector<reco::CandidatePtr>& cands,
+ const pat::MET& met,
+ const TMatrixD& covariance,
+ unsigned int verbosity,
+ const edm::EventID& evtId);
+}
+
+#endif // end of include guard: APPLYSVFIT_TO_FSA
View
83 DataAlgos/src/ApplySVfit.cc
@@ -0,0 +1,83 @@
+///////////
+// imp of function getSVfitMass
+// based on standalone SVfit instructions
+// https://twiki.cern.ch/twiki/bin/view/CMS/HiggsToTauTauWorking2012#SVFit_Christian_Lorenzo_Aram_Rog
+//
+// S.Z. Shalhout (sshalhou@CERN.CH) Nov 20, 2012
+/////////
+
+
+#include "DataFormats/Provenance/interface/EventID.h"
+#include "FinalStateAnalysis/DataAlgos/interface/ApplySVfit.h"
+#include "TauAnalysis/CandidateTools/interface/NSVfitStandaloneAlgorithm.h"
+#include "TLorentzVector.h"
+#include "DataFormats/Candidate/interface/Candidate.h"
+#include "DataFormats/PatCandidates/interface/MET.h"
+#include "DataFormats/Math/interface/Vector3D.h"
+#include "DataFormats/Math/interface/LorentzVector.h"
+#include "FinalStateAnalysis/DataAlgos/interface/Hash.h"
+#include <iostream>
+#include <iomanip>
+#include <map>
+#include <stdio.h>
+#include <string>
+
+
+namespace ApplySVfit {
+
+ using NSVfitStandalone::Vector;
+ using NSVfitStandalone::LorentzVector;
+ using NSVfitStandalone::MeasuredTauLepton;
+
+ // Caching and translation layer
+ typedef std::map<size_t, double> SVFitCache;
+ static SVFitCache theCache;
+ static edm::EventID lastSVfitEvent; // last processed event
+
+ double getSVfitMass(std::vector<reco::CandidatePtr>& cands,
+ const pat::MET& met, const TMatrixD& covMET, unsigned int verbosity,
+ const edm::EventID& evtId) {
+
+ // Check if this a new event
+ if (evtId != lastSVfitEvent) {
+ theCache.clear();
+ }
+ lastSVfitEvent = evtId;
+
+ // Hash our candidates - NB cands will be sorted in place
+ size_t hash = hashCandsByContent(cands);
+
+ // Check if we've already computed it
+ SVFitCache::const_iterator lookup = theCache.find(hash);
+ if (lookup != theCache.end()) {
+ return lookup->second;
+ }
+
+ // No pain no gain
+ Vector measuredMET = met.momentum();
+ std::vector<MeasuredTauLepton> measuredTauLeptons;
+
+ for (size_t dau = 0; dau < cands.size(); ++dau) {
+ int pdgId = std::abs(cands[dau]->pdgId());
+ if (pdgId == 11 || pdgId == 13)
+ measuredTauLeptons.push_back(
+ MeasuredTauLepton(NSVfitStandalone::kLepDecay,cands[dau]->p4()));
+ else if (pdgId == 15)
+ measuredTauLeptons.push_back(
+ MeasuredTauLepton(NSVfitStandalone::kHadDecay,cands[dau]->p4()));
+ else
+ throw cms::Exception("BadPdgId") << "I don't understand PDG id: "
+ << pdgId << ", sorry." << std::endl;
+ }
+
+ NSVfitStandaloneAlgorithm algo(measuredTauLeptons,
+ measuredMET, covMET, verbosity);
+ algo.addLogM(false);
+ algo.integrate();
+ double mass = algo.getMass(); // mass uncertainty not implemented yet
+
+ theCache[hash] = mass;
+ return mass;
+ }
+
+} // namespace ApplySVfit
View
3  DataFormats/interface/PATFinalState.h
@@ -146,6 +146,9 @@ class PATFinalState : public pat::PATObject<reco::LeafCandidate> {
/// Using the raw four vector
double deltaPhiToMEt(int i) const;
+ // return the SVfit computed mass
+ double SVfit(int i, int j) const;
+
/// Get the transverse mass between two objects
double mt(int i, const std::string& tagI,
int j, const std::string& tagJ) const;
View
60 DataFormats/src/PATFinalState.cc
@@ -4,6 +4,7 @@
#include "FinalStateAnalysis/DataAlgos/interface/helpers.h"
#include "FinalStateAnalysis/DataAlgos/interface/CollectionFilter.h"
+#include "FinalStateAnalysis/DataAlgos/interface/ApplySVfit.h"
#include "DataFormats/PatCandidates/interface/Electron.h"
#include "DataFormats/PatCandidates/interface/Muon.h"
@@ -320,6 +321,28 @@ PATFinalState::smallestDeltaPhi() const {
}
double
+PATFinalState::SVfit(int i, int j) const {
+
+ std::vector<reco::CandidatePtr> toFit;
+ toFit.push_back(daughterPtr(i));
+ toFit.push_back(daughterPtr(j));
+
+ edm::Ptr<pat::MET> mvaMet = evt()->met("mvamet");
+
+ if (mvaMet.isNull()) {
+ throw cms::Exception("MissingMVAMet")
+ << "SV fit requires the MVAMET be available via "
+ << " met('mvamet') method in PATFinalStateEvent. It's null."
+ << std::endl;
+ }
+
+
+ return ApplySVfit::getSVfitMass(toFit, *mvaMet,
+ mvaMet->getSignificanceMatrix(), 0,
+ evt()->evtId());
+}
+
+double
PATFinalState::dR(int i, const std::string& sysTagI,
int j, const std::string& sysTagJ) const {
return reco::deltaR(daughterUserCandP4(i, sysTagI),
@@ -631,14 +654,12 @@ edm::Ptr<pat::Photon> PATFinalState::daughterAsPhoton(size_t i) const {
return daughterAs<pat::Photon>(i);
}
-const reco::GenParticleRef PATFinalState::getDaughterGenParticle(size_t i, int pdgIdToMatch, int checkCharge) const
-{
+const reco::GenParticleRef PATFinalState::getDaughterGenParticle(size_t i, int pdgIdToMatch, int checkCharge) const {
bool charge = (bool) checkCharge;
return fshelpers::getGenParticle( daughter(i), event_->genParticleRefProd(), pdgIdToMatch, charge);
}
-const reco::GenParticleRef PATFinalState::getDaughterGenParticleMotherSmart(size_t i, int pdgIdToMatch, int checkCharge) const
-{
+const reco::GenParticleRef PATFinalState::getDaughterGenParticleMotherSmart(size_t i, int pdgIdToMatch, int checkCharge) const {
const reco::GenParticleRef genp = getDaughterGenParticle(i, pdgIdToMatch, checkCharge);
if( genp.isAvailable() && genp.isNonnull() )
return fshelpers::getMotherSmart(genp, genp->pdgId());
@@ -646,8 +667,7 @@ const reco::GenParticleRef PATFinalState::getDaughterGenParticleMotherSmart(size
return genp;
}
-const bool PATFinalState::comesFromHiggs(size_t i, int pdgIdToMatch, int checkCharge) const
-{
+const bool PATFinalState::comesFromHiggs(size_t i, int pdgIdToMatch, int checkCharge) const {
const reco::GenParticleRef genp = getDaughterGenParticle(i, pdgIdToMatch, checkCharge);
if( genp.isAvailable() && genp.isNonnull() )
return fshelpers::comesFromHiggs(genp);
@@ -655,8 +675,7 @@ const bool PATFinalState::comesFromHiggs(size_t i, int pdgIdToMatch, int checkCh
return false;
}
-const reco::Candidate::Vector PATFinalState::getDaughtersRecoil() const
-{
+const reco::Candidate::Vector PATFinalState::getDaughtersRecoil() const {
double x =0;
double y =0;
std::vector<const reco::Candidate*> daughters = this->daughters();
@@ -670,23 +689,20 @@ const reco::Candidate::Vector PATFinalState::getDaughtersRecoil() const
return retval;
}
-const reco::Candidate::Vector PATFinalState::getDaughtersRecoilWithMet() const
-{
+const reco::Candidate::Vector PATFinalState::getDaughtersRecoilWithMet() const {
const reco::Candidate::Vector dau_recoil = getDaughtersRecoil();
const edm::Ptr<pat::MET>& met = event_->met();
const reco::Candidate::Vector retval = dau_recoil + met->momentum();
return retval;
}
-const double PATFinalState::getRecoilWithMetSignificance() const
-{
+const double PATFinalState::getRecoilWithMetSignificance() const {
return fshelpers::xySignficance(getDaughtersRecoilWithMet(), event_->metCovariance());
}
-const math::XYZTLorentzVector
-PATFinalState::getUserLorentzVector(size_t i,const std::string& name) const
-{
+const math::XYZTLorentzVector
+PATFinalState::getUserLorentzVector(size_t i,const std::string& name) const {
edm::Ptr<pat::Electron> ele = daughterAsElectron(i);
edm::Ptr<pat::Muon> mu = daughterAsMuon(i);
edm::Ptr<pat::Photon> pho = daughterAsPhoton(i);
@@ -698,16 +714,16 @@ PATFinalState::getUserLorentzVector(size_t i,const std::string& name) const
if(ele.isNonnull() && ele.isAvailable())
result = ele->userData<math::XYZTLorentzVector>(name);
- if(mu.isNonnull() && mu.isAvailable())
+ if(mu.isNonnull() && mu.isAvailable())
result = mu->userData<math::XYZTLorentzVector>(name);
- if(pho.isNonnull() && pho.isAvailable())
+ if(pho.isNonnull() && pho.isAvailable())
result = pho->userData<math::XYZTLorentzVector>(name);
- if(jet.isNonnull() && jet.isAvailable())
+ if(jet.isNonnull() && jet.isAvailable())
result = jet->userData<math::XYZTLorentzVector>(name);
- if(tau.isNonnull() && tau.isAvailable())
+ if(tau.isNonnull() && tau.isAvailable())
result = tau->userData<math::XYZTLorentzVector>(name);
if( result ) return *result; // return the result if we have it stored
@@ -715,7 +731,7 @@ PATFinalState::getUserLorentzVector(size_t i,const std::string& name) const
return math::XYZTLorentzVector();
}
-const float PATFinalState::getPhotonUserIsolation(size_t i,
+const float PATFinalState::getPhotonUserIsolation(size_t i,
const std::string& key) const {
edm::Ptr<pat::Photon> d = daughterAsPhoton(i);
// remove leading namespace specifier
@@ -734,10 +750,10 @@ const float PATFinalState::getPhotonUserIsolation(size_t i,
if ( prunedKey == "User5Iso" ) return d->userIsolation(pat::User5Iso);
if ( prunedKey == "UserBaseIso" ) return d->userIsolation(pat::UserBaseIso);
if ( prunedKey == "CaloIso" ) return d->userIsolation(pat::CaloIso);
- if ( prunedKey == "PfPUChargedHadronIso" )
+ if ( prunedKey == "PfPUChargedHadronIso" )
return d->userIsolation(pat::PfPUChargedHadronIso);
//throw cms::Excepton("Missing Data")
- //<< "Isolation corresponding to key "
+ //<< "Isolation corresponding to key "
//<< key << " was not stored for this particle.";
return -1.0;
}
View
93 MetaData/tuples/PATTuples-8TeV.json
@@ -1,49 +1,62 @@
{
- "Zjets_M50" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/DYJetsToLL_M-50_TuneZ2Star_8TeV-madgraph-tarball",
- "WplusJets_madgraph" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/WJetsToLNu_TuneZ2Star_8TeV-madgraph-tarball_v2",
- "TTplusJets_madgraph" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/TTJets_MassiveBinDECAY_TuneZ2star_8TeV-madgraph-tauola",
- "WZJetsTo3LNu_pythia" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/WZJetsTo3LNu_TuneZ2_8TeV-madgraph-tauola",
- "ZZJetsTo4L_pythia" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/ZZJetsTo4L_TuneZ2star_8TeV-madgraph-tauola",
- "WWJetsTo2L2Nu_TuneZ2_8TeV" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/WWJetsTo2L2Nu_TuneZ2star_8TeV-madgraph-tauola",
+ "Zjets_M50" : "/hdfs/store/user/tapas/DYJetsToLL_M-50_TuneZ2Star_8TeV-madgraph-tarball/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-03-13-8TeV-53X-PatTuple_Master",
- "VH_H2Tau_M-110" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/VHtautau_lepdecay_110/",
- "VH_H2Tau_M-120" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/VHtautau_lepdecay_120/",
- "VH_H2Tau_M-130" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/VHtautau_lepdecay_130/",
- "VH_H2Tau_M-140" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/VHtautau_lepdecay_140/",
+ "WplusJets_madgraph" : "/hdfs/store/user/swanson/WJetsToLNu_TuneZ2Star_8TeV-madgraph-tarball/WJetsToLNu_TuneZ2Star_8TeV-madgraph-tarball_v1_WJets8TeV-9ec8fe3",
+
+ "TTplusJets_madgraph" : "/hdfs/store/user/tapas/TTJets_MassiveBinDECAY_TuneZ2star_8TeV-madgraph-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "WZJetsTo3LNu_pythia" : "/hdfs/store/user/tapas/WZJetsTo3LNu_TuneZ2_8TeV-madgraph-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "ZZJetsTo4L_pythia" : "/hdfs/store/user/tapas/ZZJetsTo4L_TuneZ2star_8TeV-madgraph-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "WWJetsTo2L2Nu_TuneZ2_8TeV" : "/hdfs/store/user/tapas/WWJetsTo2L2Nu_TuneZ2star_8TeV-madgraph-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+
+ "VH_H2Tau_M-100" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-100_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7C-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-105" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-105_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7C-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-110" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-110_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-115" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-115_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-120" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-120_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-125" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-125_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-130" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-130_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-135" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-135_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7A-v2/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-140" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-140_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-145" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-145_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-150" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-150_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-155" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-155_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
+ "VH_H2Tau_M-160" : "/hdfs/store/user/tapas/WH_ZH_TTH_HToTauTau_M-160_8TeV-pythia6-tauola/Summer12_DR53X-PU_S10_START53_V7A-v1/AODSIM/2013-02-25-8TeV-53X-PatTuple_Master",
"VH_110_HWW" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/VHWW_lepdecay_110",
"VH_120_HWW" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/VHWW_lepdecay_120",
"VH_130_HWW" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/VHWW_lepdecay_130",
"VH_140_HWW" : "/hdfs/store/user/tapas/2012-09-18-8TeV-53X-PatTuple/VHWW_lepdecay_140",
- "data_DoubleMu_Run2012A_13Jul2012_v1" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_DoubleMu_Run2012A_13Jul2012_v1/",
- "data_DoubleMu_Run2012A_recover_06Aug2012_v1" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_DoubleMu_Run2012A_recover_06Aug2012_v1/",
- "data_DoubleMu_Run2012B_13Jul2012_v4" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_DoubleMu_Run2012B_13Jul2012_v4/",
- "data_DoubleMu_Run2012C_PromptReco_v2_Run198934_201264" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_DoubleMu_Run2012C_PromptReco_v2_Run198934_201264/",
- "data_DoubleMu_Run2012C_PromptReco_v2_Run201265_203755" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_DoubleMu_Run2012C_PromptReco_v2_Run201265_203755/",
- "data_DoubleMu_Run2012D_PromptReco_v1" : "/hdfs/store/user/tapas/2012-12-05-8TeV-53X-PatTuple_HCP2012/data_DoubleMu_Run2012D_PromptReco_v1/",
-
- "data_MuEG_Run2012A_13Jul2012_v1" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_MuEG_Run2012A_13Jul2012_v1/",
- "data_MuEG_Run2012A_recover_06Aug2012_v1" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_MuEG_Run2012A_recover_06Aug2012_v1/",
- "data_MuEG_Run2012B_13Jul2012_v1" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_MuEG_Run2012B_13Jul2012_v1//",
- "data_MuEG_Run2012C_PromptReco_v2_Run198934_201264" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_MuEG_Run2012C_PromptReco_v2_Run198934_201264/",
- "data_MuEG_Run2012C_PromptReco_v2_Run201265_203755" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_MuEG_Run2012C_PromptReco_v2_Run201265_203755/",
- "data_MuEG_Run2012D_PromptReco_v1" : "/hdfs/store/user/tapas/2012-12-05-8TeV-53X-PatTuple_HCP2012/data_MuEG_Run2012D_PromptReco_v1/",
-
- "data_DoubleElectron_Run2012A_13Jul2012_v1" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_DoubleElectron_Run2012A_13Jul2012_v1/",
- "data_DoubleElectron_Run2012A_recover_06Aug2012_v1" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_DoubleElectron_Run2012A_recover_06Aug2012_v1/",
- "data_DoubleElectron_Run2012B_13Jul2012_v1" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_DoubleElectron_Run2012B_13Jul2012_v1/",
- "data_DoubleElectron_Run2012C_PromptReco_v2_Run198934_201264" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_DoubleElectron_Run2012C_PromptReco_v2_Run198934_201264/",
- "data_DoubleElectron_Run2012C_PromptReco_v2_Run201265_203755" : "/hdfs/store/user/tapas/2012-10-30-8TeV-53X-PatTuple_IanEleIsolationFix/data_DoubleElectron_Run2012C_PromptReco_v2_Run201265_203755/",
- "data_DoubleElectron_Run2012D_PromptReco_v1" : "/hdfs/store/user/tapas/2012-12-05-8TeV-53X-PatTuple_HCP2012/data_DoubleElectron_Run2012D_PromptReco_v1/",
-
- "data_SingleMu_Run2012A_13Jul2012_v1" : "/hdfs/store/user/tapas/2012-10-02-8TeV-53X-PatTuple_ShareFSFix/data_SingleMu_Run2012A_13Jul2012_v1",
- "data_SingleMu_Run2012B_13Jul2012_v1" : "/hdfs/store/user/tapas/2012-10-02-8TeV-53X-PatTuple_ShareFSFix/data_SingleMu_Run2012B_13Jul2012_v1",
- "data_SingleMu_Run2012C_24Aug2012_v1" : "/hdfs/store/user/tapas/2012-10-02-8TeV-53X-PatTuple_ShareFSFix/data_SingleMu_Run2012C_24Aug2012_v1",
- "data_SingleMu_Run2012C_PromptReco_v2_Run198934_201264" : "/hdfs/store/user/tapas/2012-10-02-8TeV-53X-PatTuple_ShareFSFix/data_SingleMu_Run2012C_PromptReco_v2_Run198934_201264",
- "data_SingleMu_Run2012C_PromptReco_v2_Run201265_203755" : "/hdfs/store/user/tapas/2012-10-02-8TeV-53X-PatTuple_ShareFSFix/data_SingleMu_Run2012C_PromptReco_v2_Run201265_203755"
+ "data_DoubleElectron_Run2012A_13Jul2012_v1" : "/hdfs/store/user/tapas/DoubleElectron/Run2012A-13Jul2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleElectron_Run2012A_recover_06Aug2012_v1" : "/hdfs/store/user/tapas/DoubleElectron/Run2012A-recover-06Aug2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleElectron_Run2012B_13Jul2012_v1" : "/hdfs/store/user/tapas/DoubleElectron/Run2012B-13Jul2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleElectron_Run2012C_24Aug2012_v1" : "/hdfs/store/user/tapas/DoubleElectron/Run2012C-24Aug2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleElectron_Run2012C_EcalRecover_11DEC2012_v1": "/hdfs/store/user/tapas/DoubleElectron/Run2012C-EcalRecover_11Dec2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleElectron_Run2012C_PromptReco_v2" : "/hdfs/store/user/tapas/DoubleElectron/Run2012C-PromptReco-v2/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleElectron_Run2012D_PromptReco_v1" : "/hdfs/store/user/tapas/DoubleElectron/Run2012D-PromptReco-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleElectron_Run2012D_16Jan2013_v1" : "/hdfs/store/user/tapas/DoubleElectron/Run2012D-16Jan2013-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+
+ "data_DoubleMu_Run2012A_13Jul2012_v1" : "/hdfs/store/user/tapas/DoubleMu/Run2012A-13Jul2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleMu_Run2012A_recover_06Aug2012_v1" : "/hdfs/store/user/tapas/DoubleMu/Run2012A-recover-06Aug2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleMu_Run2012B_13Jul2012_v4" : "/hdfs/store/user/tapas/DoubleMu/Run2012B-13Jul2012-v4/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleMu_Run2012C_24Aug2012_v1" : "/hdfs/store/user/tapas/DoubleMu/Run2012C-24Aug2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleMu_Run2012C_EcalRecover_11DEC2012_v1": "/hdfs/store/user/tapas/DoubleMu/Run2012C-EcalRecover_11Dec2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleMu_Run2012C_PromptReco_v2" : "/hdfs/store/user/tapas/DoubleMu/Run2012C-PromptReco-v2/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleMu_Run2012D_PromptReco_v1" : "/hdfs/store/user/tapas/DoubleMu/Run2012D-PromptReco-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_DoubleMu_Run2012D_16Jan2013_v1" : "/hdfs/store/user/tapas/DoubleMu/Run2012D-16Jan2013-v2/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+
+ "data_MuEG_Run2012A_13Jul2012_v1" : "/hdfs/store/user/tapas/MuEG/Run2012A-13Jul2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_MuEG_Run2012A_recover_06Aug2012_v1" : "/hdfs/store/user/tapas/MuEG/Run2012A-recover-06Aug2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_MuEG_Run2012B_13Jul2012_v4" : "/hdfs/store/user/tapas/MuEG/Run2012B-13Jul2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_MuEG_Run2012C_24Aug2012_v1" : "/hdfs/store/user/tapas/MuEG/Run2012C-24Aug2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_MuEG_Run2012C_EcalRecover_11DEC2012_v1": "/hdfs/store/user/tapas/MuEG/Run2012C-EcalRecover_11Dec2012-v1/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_MuEG_Run2012C_PromptReco_v2" : "/hdfs/store/user/tapas/MuEG/Run2012C-PromptReco-v2/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+ "data_MuEG_Run2012D_PromptReco_v1" : "/hdfs/store/user/tapas/MuEG/Run2012D-PromptReco-v1/AOD/2013-01-11-8TeV-53X-PatTuple_Master",
+ "data_MuEG_Run2012D_16Jan2013_v2" : "/hdfs/store/user/tapas/MuEG/Run2012D-16Jan2013-v2/AOD/2013-04-01-8TeV-53X-PatTuple_Master",
+
+ "data_SingleMu_Run2012A_13Jul2012_v1" : "/hdfs/store/user/tapas/SingleMu/Run2012A-13Jul2012-v1",
+ "data_SingleMu_Run2012A_recover_06Aug2012_v1" : "/hdfs/store/user/tapas/SingleMu/Run2012A-recover-06Aug2012-v1",
+ "data_SingleMu_Run2012C_24Aug2012_v1" : "/hdfs/store/user/tapas/SingleMu/Run2012C-24Aug2012-v1",
+ "data_SingleMu_Run2012C_PromptReco_v2" : "/hdfs/store/user/tapas/SingleMu/Run2012C-PromptReco-v2",
+ "data_SingleMu_Run2012D_PromptReco_v1" : "/hdfs/store/user/tapas/SingleMu/Run2012D-PromptReco-v1"
}
-
-
-
-
View
33 NtupleTools/python/ntuple_builder.py
@@ -172,7 +172,7 @@ def make_ntuple(*legs, **kwargs):
if 'branches' in kwargs:
for branch, value in kwargs['branches'].iteritems():
setattr(ntuple_config, branch, cms.string(value))
-
+
# Check if we want to use special versions of the FSA producers
# via a suffix on the producer name.
producer_suffix = kwargs.get('suffix', '')
@@ -204,6 +204,35 @@ def make_ntuple(*legs, **kwargs):
templates.topology.pairs.replace(object1=leg_a, object2=leg_b),
templates.topology.zboson.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)
+ if not len(legs) % 2 == 0:
+ do_svfit = False
+
+ leg_a_type = leg_a[0]
+ leg_b_type = leg_b[0]
+ leg_a_index = legs.index(leg_a_type) \
+ if counts[leg_a_type] == 1 else int(leg_a[1]) - 1
+ leg_b_index = legs.index(leg_b_type) \
+ if counts[leg_b_type] == 1 else int(leg_b[1]) - 1
+
+ # Never do SVfit on 'non-paired' leptons (eg legs 0 & 2), or legs 1&3
+ if leg_a_index % 2 != 0 or abs(leg_a_index - leg_b_index) != 1:
+ do_svfit = False
+ # Only do SVfit on mu + tau, e + tau, e + mu, & tau + tau combinations
+ if leg_a_type == leg_b_type and leg_a_type in ('m', 'e'):
+ do_svfit = False
+ # Always ignore photons
+ if 'g' in legs:
+ do_svfit = False
+ if do_svfit:
+ print "SV fitting legs %s and %s in final state %s" % (
+ leg_a, leg_b, ''.join(legs))
+ ntuple_config = PSet(
+ ntuple_config,
+ templates.topology.svfit.replace(object1=leg_a, object2=leg_b)
+ )
# Now build our analyzer EDFilter skeleton
output = cms.EDFilter(
@@ -211,7 +240,7 @@ def make_ntuple(*legs, **kwargs):
weights=cms.vstring(),
# input final state collection.
src=cms.InputTag("finalState" + "".join(
- _producer_translation[x] for x in legs)
+ _producer_translation[x] for x in legs)
+ producer_suffix),
evtSrc=cms.InputTag("patFinalStateEventProducer"),
# counter of events before any selections
View
1  NtupleTools/python/templates/taus.py
@@ -23,7 +23,6 @@
# ID and isolation
id = PSet(
objectAntiElectronMVA2loose = '{object}.tauID("againstElectronLooseMVA2")',
- againstElectronLooseMVA2 = '{object}.tauID("againstElectronMediumMVA2")',
objectAntiElectronMVA2Tight = '{object}.tauID("againstElectronTightMVA2")',
objectAntiElectronMVA2Vloose = '{object}.tauID("againstElectronVLooseMVA2")',
objectAntiMuonMedium = '{object}.tauID("againstMuonMedium")',
View
6 NtupleTools/python/templates/topology.py
@@ -39,6 +39,10 @@
object1_object2_ToMETDPhi = 'deltaPhi(subcand({object1_idx}, {object2_idx}).get.phi, evt.met("pfmet").userCand("type1").phi)',
)
+svfit = PSet(
+ object1_object2_SVfitMass = 'SVfit({object1_idx},{object2_idx})',
+)
+
finalstate = PSet(
LT = 'ht',
charge = 'charge',
@@ -48,7 +52,7 @@
MassErrord1 = 'userFloat("cand_dM_0")',
MassErrord2 = 'userFloat("cand_dM_1")',
MassErrord3 = 'userFloat("cand_dM_2")',
- MassErrord4 = 'userFloat("cand_dM_3")'
+ MassErrord4 = 'userFloat("cand_dM_3")'
)
# Branches for identifying Z bosons using a pair of objects
View
7 NtupleTools/test/make_ntuples_cfg.py
@@ -31,6 +31,10 @@
rerunFSA=0 - regenerate PATFinalState dataformats
verbose=0 - print out timing information
noPhotons=0 - don't build things which depend on photons.
+ rerunMVAMET=0 - rerun the MVAMET algorithm
+ svFit=0 - run the SVfit on appropriate pairs.
+ Requires rerunMVAMET, if it's not already
+ in the PAT tuple.
'''
@@ -57,6 +61,7 @@
verbose=0, # If one print out the TimeReport
noPhotons=0, # If one, don't assume that photons are in the PAT tuples.
rerunMVAMET=0, # If one, (re)build the MVA MET
+ svFit=1, # If one, SVfit appropriate lepton pairs.
)
options.outputFile = "ntuplize.root"
@@ -188,7 +193,7 @@ def expanded_final_states(input):
print "Building ntuple for final states: %s" % ", ".join(final_states)
for final_state in expanded_final_states(final_states):
- analyzer = make_ntuple(*final_state)
+ analyzer = make_ntuple(*final_state, svFit=options.svFit)
add_ntuple(final_state, analyzer, process,
process.schedule, options.eventView)
View
4 StatTools/python/poisson.py
@@ -26,7 +26,7 @@
Command line usage:
python poisson.py N
-
+
prints the upper and lower confidence interval to stdout.
'''
@@ -76,4 +76,4 @@ def convert(histogram, x_err=True, set_zero_bins=None):
if __name__ == "__main__":
arg = sys.argv[-1]
- print poisson_error(int(arg))
+ print poisson_errors(int(arg))
View
6 Utilities/scripts/check_git_updates.sh
@@ -10,7 +10,7 @@ if [ -z $CONDOR_ID ]; then
if [ -z $(git log | grep $lastCommit | awk '{print $2}') ]; then #looks if we have that commit in our git log (the print $2 is just to get rid of the word 'commit' that gives bash some problem
echo "UWCMS master repository is ahead of the used one! Should I pull the changes? [y/n]"
read choice
- if [ $choice = 'y' ]; then
+ if [ "$choice" = 'y' ]; then
echo "pulling from $remoteName master"
git pull $remoteName master
echo "remember to recopile! [any key]"
@@ -26,8 +26,8 @@ if [ -z $CONDOR_ID ]; then
#ok, now that we know we are up to date check if WE have someting to push in uwcms
commitsAhead=$(git log | grep commit | grep -n $lastCommit | awk -F: '{print $1}')
- if [ -n $commitsAhead ]; then
- if [ $commitsAhead != '1' ]; then
+ if [ -n "$commitsAhead" ]; then
+ if [ "$commitsAhead" != '1' ]; then
echo "Your repository is ahead of $commitsAhead, consider sending a Pull Request! [any key]"
read ok
fi
View
2  recipe/nuke_pat_tools.sh
@@ -26,7 +26,7 @@ if [ -z "$FORCENUKE" ]; then
done
fi
-pushd $fsa/PatTools
+pushd $CMSSW_BASE/src/FinalStateAnalysis/PatTools
echo "Deleting all bogus files in PatTools..."
# We keep the ones needed for producing PATFinalStateObjects
# The pfCandAuxFunctions is just to ensure that libFinalStateAnalysisPatTools
View
8 recipe/recipe.sh
@@ -10,6 +10,7 @@
# PATPROD: enable PAT tuple production
# LIMIT: code for computing limits
# LUMI: code for computing instantaneous luminosity (lumiCalc and friends)
+# MVAMET: code for MVA MET. Always produced if PATPROD=1
#
# Options which are absolutely required, like PAT data formats, are always
# installed.
@@ -20,6 +21,7 @@
LIMITS=${LIMITS:-0}
LUMI=${LUMI:-0}
PATPROD=${PATPROD:-0}
+MVAMET=${MVAMET:-$PATPROD}
set -o errexit
set -o nounset
@@ -75,6 +77,12 @@ fi
echo "Applying common recipe"
LUMI=$LUMI LIMITS=$LIMITS PATPROD=$PATPROD ./recipe_common.sh
+if [ "$MVAMET" = "1" ]
+then
+ echo "Applying MVA MET recpe"
+ ./recipe_mvamet.sh
+fi
+
# Note you now need to install virtual env
echo "Now run recipe/install_python.sh to install python"
View
8 recipe/recipe_53X.sh
@@ -8,6 +8,10 @@ pushd $CMSSW_BASE/src
echo "Checking out PAT dataformats"
addpkg DataFormats/PatCandidates V06-05-06-06
+addpkg PhysicsTools/PatAlgos V08-09-52
+addpkg DataFormats/StdDictionaries V00-02-14
+addpkg PhysicsTools/PatUtils V03-09-26
+addpkg CommonTools/ParticleFlow V00-03-16
if [ "$LIMITS" = "1" ]
then
@@ -21,10 +25,6 @@ then
echo "Checking out tuple production tags"
- addpkg PhysicsTools/PatAlgos V08-09-52
- addpkg DataFormats/StdDictionaries V00-02-14
- addpkg PhysicsTools/PatUtils V03-09-26
- addpkg CommonTools/ParticleFlow V00-03-16
addpkg FWCore/GuiBrowsers V00-00-70
#24/10/2012 LAG -- PF Isolation for Photons
addpkg RecoParticleFlow/PFProducer V15-02-06
View
7 recipe/recipe_common.sh
@@ -4,6 +4,13 @@ set -o nounset
pushd $CMSSW_BASE/src
+#for standalone version of svfit
+ cvs co -r V00-01-04s TauAnalysis/CandidateTools
+
+# for some reason patTuple creation fails due to lack of plugin PFCandIsolatorFromDeposits
+# to fix
+cvs co -r V00-03-13 CommonTools/ParticleFlow
+
# Tags that work in any release
# To install lumiCalc.py
Something went wrong with that request. Please try again.