Exemplo n.º 1
0
import FWCore.ParameterSet.Config as cms
from FWCore.ParameterSet.VarParsing import VarParsing

options = VarParsing('analysis')

options.register('isMC', True, VarParsing.multiplicity.singleton,
                 VarParsing.varType.bool, "True if is MC dataset")

options.register('runRandomTrack', False, VarParsing.multiplicity.singleton,
                 VarParsing.varType.bool,
                 "True if is studying random track efficiency")

options.register('runLocally', False, VarParsing.multiplicity.singleton,
                 VarParsing.varType.bool, "True if running locally")

options.register('isSig', False, VarParsing.multiplicity.singleton,
                 VarParsing.varType.bool,
                 "True if using signal injected events")

options.register('hasDpho', False, VarParsing.multiplicity.singleton,
                 VarParsing.varType.bool,
                 "True if dark brem particle is present")

options.parseArguments()

process = cms.Process("TEST")

process.load("FWCore.MessageService.MessageLogger_cfi")
process.MessageLogger.cerr.FwkReport.reportEvery = 1000
process.load("TrackingTools/TransientTrack/TransientTrackBuilder_cfi")
process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
Exemplo n.º 2
0
# coding: utf-8

import os
import math

import FWCore.ParameterSet.Config as cms
from FWCore.ParameterSet.VarParsing import VarParsing
from reco_prodtools.templates.GSDfineCalo_fragment import process

# option parsing
options = VarParsing('python')
options.setDefault('outputFile',
                   'file:partGun_PDGid22_x96_Pt1.0To100.0_GSD_1.root')
options.setDefault('maxEvents', 1)
options.register("pileup", 0, VarParsing.multiplicity.singleton,
                 VarParsing.varType.int, "pileup")
options.register("seed", 1, VarParsing.multiplicity.singleton,
                 VarParsing.varType.int, "random seed")
options.register("nThreads", 1, VarParsing.multiplicity.singleton,
                 VarParsing.varType.int, "number of threads")
options.register("nParticles", 10, VarParsing.multiplicity.singleton,
                 VarParsing.varType.int, "number of particles in gun")
options.parseArguments()

process.maxEvents.input = cms.untracked.int32(options.maxEvents)

seed = int(options.seed) + 1
# random seeds
process.RandomNumberGeneratorService.generator.initialSeed = cms.untracked.uint32(
    seed)
process.RandomNumberGeneratorService.VtxSmeared.initialSeed = cms.untracked.uint32(
Exemplo n.º 3
0
import FWCore.ParameterSet.Config as cms
from FWCore.ParameterSet.VarParsing import VarParsing

defaults = {
    "mineta": -3.,
    "maxeta": 3.,
    "minphi": -3.14159265359,
    "maxphi": 3.14159265359,
}

options = VarParsing("analysis")
options.register("particle", "electron", VarParsing.multiplicity.singleton,
                 VarParsing.varType.string)
options.register("mult", 1, VarParsing.multiplicity.singleton,
                 VarParsing.varType.int)  # number of particles
options.register("minenergy", 1, VarParsing.multiplicity.singleton,
                 VarParsing.varType.float)
options.register("maxenergy", 0, VarParsing.multiplicity.singleton,
                 VarParsing.varType.float)
options.register("mineta", defaults["mineta"],
                 VarParsing.multiplicity.singleton, VarParsing.varType.float)
options.register("maxeta", defaults["maxeta"],
                 VarParsing.multiplicity.singleton, VarParsing.varType.float)
options.register("minphi", defaults["minphi"],
                 VarParsing.multiplicity.singleton, VarParsing.varType.float)
options.register("maxphi", defaults["maxphi"],
                 VarParsing.multiplicity.singleton, VarParsing.varType.float)
options.register("maxEventsIn", -1, VarParsing.multiplicity.singleton,
                 VarParsing.varType.int)
options.register("output", True, VarParsing.multiplicity.singleton,
                 VarParsing.varType.bool)
Exemplo n.º 4
0
import os, sys, json

# module/model correspondence
models = {
    "TritonImageProducer": ["inception_graphdef", "densenet_onnx"],
    "TritonGraphProducer": ["gat_test"],
    "TritonGraphFilter": ["gat_test"],
    "TritonGraphAnalyzer": ["gat_test"],
}

# other choices
allowed_modes = ["Async","PseudoAsync","Sync"]
allowed_compression = ["none","deflate","gzip"]
allowed_devices = ["auto","cpu","gpu"]

options = VarParsing()
options.register("maxEvents", -1, VarParsing.multiplicity.singleton, VarParsing.varType.int, "Number of events to process (-1 for all)")
options.register("serverName", "default", VarParsing.multiplicity.singleton, VarParsing.varType.string, "name for server (used internally)")
options.register("address", "", VarParsing.multiplicity.singleton, VarParsing.varType.string, "server address")
options.register("port", 8001, VarParsing.multiplicity.singleton, VarParsing.varType.int, "server port")
options.register("timeout", 30, VarParsing.multiplicity.singleton, VarParsing.varType.int, "timeout for requests")
options.register("params", "", VarParsing.multiplicity.singleton, VarParsing.varType.string, "json file containing server address/port")
options.register("threads", 1, VarParsing.multiplicity.singleton, VarParsing.varType.int, "number of threads")
options.register("streams", 0, VarParsing.multiplicity.singleton, VarParsing.varType.int, "number of streams")
options.register("modules", "TritonGraphProducer", VarParsing.multiplicity.list, VarParsing.varType.string, "list of modules to run (choices: {})".format(', '.join(models)))
options.register("models","gat_test", VarParsing.multiplicity.list, VarParsing.varType.string, "list of models (same length as modules, or just 1 entry if all modules use same model)")
options.register("mode","Async", VarParsing.multiplicity.singleton, VarParsing.varType.string, "mode for client (choices: {})".format(', '.join(allowed_modes)))
options.register("verbose", False, VarParsing.multiplicity.singleton, VarParsing.varType.bool, "enable verbose output")
options.register("brief", False, VarParsing.multiplicity.singleton, VarParsing.varType.bool, "briefer output for graph modules")
options.register("fallbackName", "", VarParsing.multiplicity.singleton, VarParsing.varType.string, "name for fallback server")
options.register("unittest", False, VarParsing.multiplicity.singleton, VarParsing.varType.bool, "unit test mode: reduce input sizes")
Exemplo n.º 5
0
import os
import FWCore.ParameterSet.Config as cms

# Set parameters externally 
from FWCore.ParameterSet.VarParsing import VarParsing
params = VarParsing('analysis')

params.register(
    'skipEvents',
    0,
    VarParsing.multiplicity.singleton,VarParsing.varType.int,
    'Path of local input files'
)

params.register(
    'reportFreq',
    100,
    VarParsing.multiplicity.singleton,VarParsing.varType.int,
    'Path of local input files'
)

params.register(
    'localDatasetPath',
    '',
    VarParsing.multiplicity.singleton,VarParsing.varType.string,
    'Path of local input files'
)

params.register(
    'Dataset',
    '',
# coding: utf-8

import os

import FWCore.ParameterSet.Config as cms
from FWCore.ParameterSet.VarParsing import VarParsing

# get the data/ directory
thisdir = os.path.dirname(os.path.abspath(__file__))
datadir = os.path.join(os.path.dirname(thisdir), "data")

# setup minimal options
options = VarParsing("python")
options.setDefault(
    "inputFiles",
    "root://xrootd-cms.infn.it//store/mc/RunIIFall17MiniAOD/DYJetsToLL_M-10to50_TuneCP5_13TeV-madgraphMLM-pythia8/MINIAODSIM/94X_mc2017_realistic_v10-v2/00000/9A439935-1FFF-E711-AE07-D4AE5269F5FF.root"
)  # noqa
options.parseArguments()

# define the process to run
process = cms.Process("TEST")

# minimal configuration
process.load("FWCore.MessageService.MessageLogger_cfi")
process.MessageLogger.cerr.FwkReport.reportEvery = 1
process.maxEvents = cms.untracked.PSet(input=cms.untracked.int32(10))
process.source = cms.Source("PoolSource",
                            fileNames=cms.untracked.vstring(
                                options.inputFiles))

# process options
Exemplo n.º 7
0
def configureJetMetNtuple(process):
    #  Options parsing  #
    ###################

    from FWCore.ParameterSet.VarParsing import VarParsing

    options = VarParsing('analysis')
    options.register('applyMETFilters', True,
                     VarParsing.multiplicity.singleton,
                     VarParsing.varType.bool, 'Apply MET filters')
    options.register('runJets', False, VarParsing.multiplicity.singleton,
                     VarParsing.varType.bool, 'Store Jet Variables')

    process.load('RecoMET.METFilters.BadChargedCandidateFilter_cfi')
    process.BadChargedCandidateFilter.muons = cms.InputTag("slimmedMuons")
    process.BadChargedCandidateFilter.PFCandidates = cms.InputTag(
        "packedPFCandidates")

    process.load('RecoMET.METFilters.BadPFMuonFilter_cfi')
    process.BadPFMuonFilter.muons = cms.InputTag("slimmedMuons")
    process.BadPFMuonFilter.PFCandidates = cms.InputTag("packedPFCandidates")

    # Electron ID ==========================================================================================

    #from PhysicsTools.SelectorUtils.tools.vid_id_tools import *
    # turn on VID producer, indicate data format  to be
    # DataFormat.AOD or DataFormat.MiniAOD, as appropriate
    useAOD = False

    if useAOD == True:
        dataFormat = DataFormat.AOD
    else:
        dataFormat = DataFormat.MiniAOD

        switchOnVIDElectronIdProducer(process, dataFormat)

    # define which IDs we want to produce
    #my_id_modules = [#'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Spring15_25ns_V1_cff',
    #  'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Summer16_80X_V1_cff',
    #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_25ns_Trig_V1_cff',
    #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_25ns_nonTrig_V1_cff',
    # 'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring16_GeneralPurpose_V1_cff'
    # ]


# define which IDs we want to produce
    my_id_modules = [  #'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Spring15_25ns_V1_cff',
        #'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Summer16_80X_V1_cff',
        #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_25ns_Trig_V1_cff',
        #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring15_25ns_nonTrig_V1_cff',
        #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Spring16_GeneralPurpose_V1_cff',
        #'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_noIso_V1_cff',
        'RecoEgamma.ElectronIdentification.Identification.mvaElectronID_Fall17_iso_V1_cff',
        'RecoEgamma.ElectronIdentification.Identification.cutBasedElectronID_Fall17_94X_V1_cff',
    ]

    #add them to the VID producer
    for idmod in my_id_modules:
        setupAllVIDIdsInModule(process, idmod, setupVIDElectronSelection)

        ### END Electron ID ====================================================================================

        process.hltJetMetNtuple = cms.EDAnalyzer(
            'hltAnalyzer',  #'HLTJetMETNtupleProducer',
            #                                           runJets = cms.bool(options.runJets),
            #              isData = cms.bool(True),
            #                                             PVCollectionTag = cms.InputTag("offlineSlimmedPrimaryVertices"),
            #MetCollectionTag = cms.InputTag('slimmedMETs'),
            #GenMetCollectionTag = cms.InputTag('genMetTrue'),
            #applyMETFilters = cms.bool(options.applyMETFilters),
            # BadMuonFilter              = cms.InputTag("BadPFMuonFilter",""),
            #BadChargedCandidateFilter = cms.InputTag("BadChargedCandidateFilter",""),
            MuonCollectionTag=cms.InputTag('hltMuons'),
            #ElectronCollectionTag = cms.InputTag('slimmedElectrons'),
            #PFJetCollectionTag = cms.InputTag('slimmedJets'),
            #CaloJetCollectionTag = cms.InputTag('slimmedCaloJets'),
            #GenJetCollectionTag = cms.InputTag('slimmedGenJets'),
            #HLTPFJetCollectionTag = cms.InputTag('hltAK4PFJetsCorrected'),
            # HLTCaloJetCollectionTag = cms.InputTag('hltAK4CaloJetsCorrected'),
            #HLTPFMetCollectionTag = cms.InputTag('hltPFMETProducer'),
            HLTCaloMetCollectionTag=cms.InputTag('hltMET'),
            #HLTCaloMetCollectionTag = cms.InputTag('hltCaloMETMuon'),

            #eleVetoIdMap = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-Spring15-25ns-V1-standalone-veto"),
            #eleLooseIdMap = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-Spring15-25ns-V1-standalone-loose"),
            #eleMediumIdMap = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-Spring15-25ns-V1-standalone-medium"),
            #eleTightIdMap = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-Spring15-25ns-V1-standalone-tight"),
            #eleMvaNonTrigIdWP80Map = cms.InputTag("egmGsfElectronIDs:mvaEleID-Spring15-25ns-nonTrig-V1-wp80"),
            #eleMvaNonTrigIdWP90Map = cms.InputTag("egmGsfElectronIDs:mvaEleID-Spring15-25ns-nonTrig-V1-wp90"),
            #eleMvaTrigIdWP80Map = cms.InputTag("egmGsfElectronIDs:mvaEleID-Spring15-25ns-Trig-V1-wp80"),
            #eleMvaTrigIdWP90Map = cms.InputTag("egmGsfElectronIDs:mvaEleID-Spring15-25ns-Trig-V1-wp90"),
            #mvaNonTrigValuesMap     = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring15NonTrig25nsV1Values"),
            #mvaNonTrigCategoriesMap = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring15NonTrig25nsV1Categories"),
            #mvaTrigValuesMap     = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring15Trig25nsV1Values"),
            #mvaTrigCategoriesMap = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring15Trig25nsV1Categories"),
            #eleMvaSpring16WPMediumMap = cms.InputTag("egmGsfElectronIDs:mvaEleID-Spring16-GeneralPurpose-V1-wp90"),
            #eleMvaSpring16WPTightMap = cms.InputTag("egmGsfElectronIDs:mvaEleID-Spring16-GeneralPurpose-V1-wp80"),
            #mvaSpring16ValuesMap = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring16GeneralPurposeV1Values"),
            #mvaSpring16CategoriesMap = cms.InputTag("electronMVAValueMapProducer:ElectronMVAEstimatorRun2Spring16GeneralPurposeV1Categories"),
            #eleSummer16VetoIdMap = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-Summer16-80X-V1-veto"),
            #eleSummer16LooseIdMap = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-Summer16-80X-V1-loose"),
            #eleSummer16MediumIdMap = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-Summer16-80X-V1-medium"),
            # eleSummer16TightIdMap = cms.InputTag("egmGsfElectronIDs:cutBasedElectronID-Summer16-80X-V1-tight"),
            hltprocess=cms.InputTag("TriggerResults::HLT"),  #changed HLT->TEST
            hltprocess_rerun=cms.InputTag("TriggerResults::TEST"),
            # triggerObjects = cms.InputTag("slimmedPatTrigger"),
            caloMetRaw=cms.InputTag(
                "hltMet", "",
                "TEST"),  #hltMet,hltPFMETTypeOne,hltPFMETProducer
            pfMetRaw=cms.InputTag("hltPFMETProducer", "", "TEST"),
            triggerLabel=cms.InputTag("TriggerResults", "", "TEST"),
            #triggerPaths = cms.untracked.vstring('HLT_PFMET200_NotCleaned_v',
            #                                     'HLT_PFMET200_HBHECleaned_v',
            #                                    'HLT_PFMET250_HBHECleaned_v',
            #                                   'HLT_PFMET300_HBHECleaned_v',
            #                                   'HLT_PFMET200_HBHE_BeamHaloCleaned_v',
            #                                   'HLT_PFMETTypeOne200_HBHE_BeamHaloCleaned_v',
            #                                  'HLT_PFMET110_PFMHT110_IDTight_v',
            # 'HLT_CaloMET80_NotCleaned_v',
            #                                'HLT_IsoMu20_v',
            #                                'HLT_IsoMu24_eta2p1_v',
            #                               'HLT_IsoMu24_v',
            #                               'HLT_CaloJet500_NoJetID_v12',
            # 'HLT_CaloMET90_NotCleaned_v',
            # 'HLT_CaloMET100_NotCleaned_v',
            # 'HLT_CaloMET110_NotCleaned_v',
            # 'HLT_CaloMET250_NotCleaned_v',
            # 'HLT_CaloMET70_HBHECleaned_v',
            # 'HLT_CaloMET80_HBHECleaned_v',
            # 'HLT_CaloMET90_HBHECleaned_v',
            # 'HLT_CaloMET100_HBHECleaned_v',
            # 'HLT_CaloMET250_HBHECleaned_v',
            # 'HLT_CaloMET300_HBHECleaned_v',
            # 'HLT_CaloMET350_HBHECleaned_v',
            # 'HLT_Ele25_WPTight_Gsf_v',
            # 'HLT_Ele25_eta2p1_WPTight_Gsf_v',
            # 'HLT_Ele27_WPTight_Gsf_v',
            # 'HLT_Ele27_eta2p1_WPTight_Gsf_v',
            # 'HLT_Ele30_WPTight_Gsf_v',
            # 'HLT_Ele30_eta2p1_WPTight_Gsf_v',
            #                            'HLT_Ele32_WPTight_Gsf_v',
            # 'HLT_Ele32_eta2p1_WPTight_Gsf_v',
            # 'HLT_PFJet40_v',
            # 'HLT_PFJet60_v',
            # 'HLT_PFJet80_v',
            # 'HLT_PFJet140_v',
            # 'HLT_PFJet200_v',
            # 'HLT_PFJet260_v',
            # 'HLT_PFJet320_v',
            # 'HLT_PFJet400_v',
            #                           'HLT_PFJet450_v',
            #                          'HLT_PFJet500_v',
            #                           'HLT_PFJet550_v'
            # 'HLT_PFJetFwd40_v',
            # 'HLT_PFJetFwd60_v',
            # 'HLT_PFJetFwd80_v',
            # 'HLT_PFJetFwd140_v',
            # 'HLT_PFJetFwd200_v',
            # 'HLT_PFJetFwd260_v',
            # 'HLT_PFJetFwd320_v',
            # 'HLT_PFJetFwd400_v',
            # 'HLT_PFJetFwd450_v',
            # 'HLT_PFJetFwd500_v'

            #                             )
        )
        process.JetMetNtupleSequence = cms.Sequence(process.hltJetMetNtuple)
Exemplo n.º 8
0
def configureJetMetNtuple(process):
    #  Options parsing  #
    ###################

    from FWCore.ParameterSet.VarParsing import VarParsing

    options = VarParsing('analysis')
    options.register('applyMETFilters', True,
                     VarParsing.multiplicity.singleton,
                     VarParsing.varType.bool, 'Apply MET filters')
    options.register('runJets', False, VarParsing.multiplicity.singleton,
                     VarParsing.varType.bool, 'Store Jet Variables')
    '''
  process.load('RecoMET.METFilters.BadChargedCandidateFilter_cfi')
  process.BadChargedCandidateFilter.muons = cms.InputTag("slimmedMuons")
  process.BadChargedCandidateFilter.PFCandidates = cms.InputTag("packedPFCandidates")

  process.load('RecoMET.METFilters.BadPFMuonFilter_cfi')
  process.BadPFMuonFilter.muons = cms.InputTag("slimmedMuons")
  process.BadPFMuonFilter.PFCandidates = cms.InputTag("packedPFCandidates")
  '''

    # Electron ID ==========================================================================================

    setupEgammaPostRecoSeq(process, era='2017-Nov17ReReco')

    ### END Electron ID ====================================================================================

    ### Add Event filters to reduce ntuple size ============================================================

    process.primaryVertexFilter = cms.EDFilter(
        "VertexSelector",
        src=cms.InputTag("offlineSlimmedPrimaryVertices"),
        cut=cms.string(
            "!isFake && ndof >= 4 && abs(z) <= 24 && abs(position.Rho) <= 2"),
        filter=cms.bool(
            True
        ),  # otherwise it won't filter the events, just produce an empty vertex collection.
    )

    process.triggerSelection = cms.EDFilter(
        "TriggerResultsFilter",
        triggerConditions=cms.vstring(
            'HLT_IsoMu24_v*', 'HLT_IsoMu24_eta2p1_v*', 'HLT_IsoMu27_v*',
            'HLT_IsoMu30_v*', 'HLT_Ele25_WPTight_Gsf_v*',
            'HLT_Ele25_eta2p1_WPTight_Gsf_v*', 'HLT_Ele27_WPTight_Gsf_v*',
            'HLT_Ele27_eta2p1_WPTight_Gsf_v*', 'HLT_Ele30_WPTight_Gsf_v*',
            'HLT_Ele30_eta2p1_WPTight_Gsf_v*', 'HLT_Ele32_WPTight_Gsf_v*',
            'HLT_Ele32_eta2p1_WPTight_Gsf_v*', 'HLT_Ele35_WPTight_Gsf_v*'),
        hltResults=cms.InputTag("TriggerResults", "", "HLT"),
        l1tResults=cms.InputTag(""),
        throw=cms.bool(False))

    process.SelectedMuons = cms.EDFilter(
        "PATMuonSelector",
        src=cms.InputTag("slimmedMuons"),
        cut=cms.string(
            "pt > 25 && " + "abs(eta) < 2.4" + " && isGlobalMuon" +
            " && passed('CutBasedIdMediumPrompt')" +
            " && (pfIsolationR04.sumChargedHadronPt+max(0.,(pfIsolationR04.sumNeutralHadronEt+pfIsolationR04.sumPhotonEt-0.5*pfIsolationR04.sumPUPt)))/pt < 0.15"
        ))

    process.minMuonFilter = cms.EDFilter("PATCandViewCountFilter",
                                         src=cms.InputTag('SelectedMuons'),
                                         minNumber=cms.uint32(1),
                                         maxNumber=cms.uint32(999999))

    process.selectedElectrons = cms.EDFilter(
        "PATElectronSelector",
        src=cms.InputTag("slimmedElectrons"),
        cut=cms.string(
            "pt > 25 && " + "abs(eta) < 2.4" +
            " && (electronID('mvaEleID-Spring16-GeneralPurpose-V1-wp90')" +
            " || electronID('mvaEleID-Fall17-iso-V2-wp90')" +
            " || electronID('cutBasedElectronID-Summer16-80X-V1-medium')" +
            " || electronID('cutBasedElectronID-Fall17-94X-V2-medium'))" +
            " && (pfIsolationVariables.sumChargedHadronPt+max(0.,(pfIsolationVariables.sumNeutralHadronEt+pfIsolationVariables.sumPhotonEt-0.5*pfIsolationVariables.sumPUPt)))/pt < 0.15"
        ))

    process.minElectronFilter = cms.EDFilter(
        "PATCandViewCountFilter",
        src=cms.InputTag('selectedElectrons'),
        minNumber=cms.uint32(1),
        maxNumber=cms.uint32(999999))

    if runOnMuonPD:
        process.leptonFilterSequence = cms.Sequence(process.SelectedMuons *
                                                    process.minMuonFilter)
    elif runOnElectronPD:
        process.leptonFilterSequence = cms.Sequence(process.selectedElectrons *
                                                    process.minElectronFilter)
    else:
        process.leptonFilterSequence = cms.Sequence()

    ######============================================================================================

    process.hltJetMetNtuple = cms.EDAnalyzer(
        'HLTJetMETNtupleProducer',
        runJets=cms.bool(options.runJets),
        runMets=cms.untracked.bool(False),
        isData=cms.bool(isData),
        PVCollectionTag=cms.InputTag("offlineSlimmedPrimaryVertices"),
        MetCollectionTag=cms.InputTag('slimmedMETs'),
        applyMETFilters=cms.bool(options.applyMETFilters),
        BadMuonFilter=cms.InputTag("BadPFMuonFilter", ""),
        BadChargedCandidateFilter=cms.InputTag("BadChargedCandidateFilter",
                                               ""),
        MuonCollectionTag=cms.InputTag('slimmedMuons'),
        ElectronCollectionTag=cms.InputTag('slimmedElectrons'),
        PFJetCollectionTag=cms.InputTag('slimmedJets'),
        HLTPFJetCollectionTag=cms.InputTag('hltAK4PFJetsCorrected'),
        HLTCaloJetCollectionTag=cms.InputTag('hltAK4CaloJetsCorrected'),
        hltprocess=cms.InputTag('TriggerResults::HLT'),
        triggerObjects=cms.InputTag("slimmedPatTrigger"),
        triggerPaths=cms.untracked.vstring(
            'HLT_PFMET200_NotCleaned_v',
            'HLT_PFMET200_HBHECleaned_v',
            'HLT_PFMET250_HBHECleaned_v',
            'HLT_PFMET300_HBHECleaned_v',
            'HLT_PFMET200_HBHE_BeamHaloCleaned_v',
            'HLT_PFMETTypeOne200_HBHE_BeamHaloCleaned_v',
            #'HLT_PFMET110_PFMHT110_IDTight_v',
            'HLT_Ele25_WPTight_Gsf_v',
            'HLT_Ele25_eta2p1_WPTight_Gsf_v',
            'HLT_Ele27_WPTight_Gsf_v',
            'HLT_Ele27_eta2p1_WPTight_Gsf_v',
            'HLT_Ele30_WPTight_Gsf_v',
            'HLT_Ele30_eta2p1_WPTight_Gsf_v',
            'HLT_Ele32_WPTight_Gsf_v',
            'HLT_Ele32_eta2p1_WPTight_Gsf_v',
            'HLT_Ele35_WPTight_Gsf_v',
            'HLT_IsoMu24_v',
            'HLT_IsoMu24_eta2p1_v',
            'HLT_IsoMu27_v',
            'HLT_IsoMu30_v',
            'HLT_PFJet40_v',
            'HLT_PFJet60_v',
            'HLT_PFJet80_v',
            'HLT_PFJet140_v',
            'HLT_PFJet200_v',
            'HLT_PFJet260_v',
            'HLT_PFJet320_v',
            'HLT_PFJet400_v',
            'HLT_PFJet450_v',
            'HLT_PFJet500_v',
            'HLT_PFJet550_v',
            'HLT_PFJetFwd40_v',
            'HLT_PFJetFwd60_v',
            'HLT_PFJetFwd80_v',
            'HLT_PFJetFwd140_v',
            'HLT_PFJetFwd200_v',
            'HLT_PFJetFwd260_v',
            'HLT_PFJetFwd320_v',
            'HLT_PFJetFwd400_v',
            'HLT_PFJetFwd450_v',
            'HLT_PFJetFwd500_v'))

    process.JetMetNtupleSequence = cms.Sequence(
        process.primaryVertexFilter * process.triggerSelection *
        process.egammaPostRecoSeq * process.leptonFilterSequence *
        process.hltJetMetNtuple)
Exemplo n.º 9
0
def SingleTopStep2():

    if not Config.onGrid:
        options = VarParsing('analysis')
        options.register ('subChannel', 'T_t',
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.string,
                  "The sample that you are running on")
        options.register ('channel', 'signal',
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.string,
                  "Signal or Background")
        options.register ('reverseIsoCut', False,
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.bool,
                  "Consider anti-isolated region")
        options.register ('doDebug', False,
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.bool,
                  "Turn on debugging messages")
        options.register ('isMC', True,
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.bool,
                  "Run on MC"
        )
        options.register ('doGenParticlePath', True,
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.bool,
                  "Run the gen particle paths (only works on specific MC)"
        )
        options.register ('globalTag', Config.globalTagMC,
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.string,
                  "Global tag"
        )
        options.register ('srcPUDistribution', "S10",
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.string,
                  "Source pile-up distribution"
        )
        options.register ('destPUDistribution', "data",
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.string,
                  "destination pile-up distribution"
        )

        options.register ('compHep', False,
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.bool,
                  "Use CompHep-specific processing")

        options.register ('sherpa', False,
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.bool,
                  "Use sherpa-specific processing")

        options.register ('systematic', "",
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.string,
                  "Apply Systematic variation")

        options.register ('doPDFWeights', True,
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.bool,
                  "Run the PDF weight generation module")

        options.register ('dataRun', "RunABCD",
                  VarParsing.multiplicity.singleton,
                  VarParsing.varType.string,
                  "A string Run{A,B,C,D} to specify the data period")

        options.parseArguments()


        if options.isMC:
            if options.channel.lower() == "signal":
                Config.channel = Config.Channel.signal
            elif options.channel.lower() == "background":
                Config.channel = Config.Channel.background
            Config.srcPUDistribution = pileUpDistributions.distributions[options.srcPUDistribution]
            Config.destPUDistribution = pileUpDistributions.distributions[options.destPUDistribution]
        else:
            Config.channel = "data"
            Config.subChannel = None


        Config.Leptons.reverseIsoCut = options.reverseIsoCut
        Config.subChannel = options.subChannel
        Config.doDebug = options.doDebug
        Config.isMC = options.isMC
        Config.isCompHep = options.compHep
        Config.isSherpa = options.sherpa
        Config.systematic = options.systematic
        Config.dataRun = options.dataRun
        print "Systematic! ",Config.systematic

    if Config.isMC:
        logging.info("Changing jet source from %s to smearedPatJetsWithOwnRef" % Config.Jets.source)
        Config.Jets.source = "smearedPatJetsWithOwnRef"

        if Config.systematic in ["ResUp", "ResDown"]:
             logging.info("Changing jet source from %s to smearedPatJetsWithOwnRef%s" % (Config.Jets.source, Config.systematic))
             Config.Jets.source = "smearedPatJetsWithOwnRef"+Config.systematic
             logging.info("Changing MET source from %s to patType1CorrectedPFMetJet%s" % (Config.metSource, Config.systematic))
             Config.metSource = "patType1CorrectedPFMetJet"+Config.systematic
        elif Config.systematic in ["EnUp", "EnDown"]:
             logging.info("Changing jet source from %s to shiftedPatJetsWithOwnRef%sForCorrMEt" % (Config.Jets.source, Config.systematic))
             Config.Jets.source = "shiftedPatJetsWithOwnRef"+Config.systematic+"ForCorrMEt"
             logging.info("Changing MET source from %s to patType1CorrectedPFMetJet%s" % (Config.metSource, Config.systematic))
             Config.metSource = "patType1CorrectedPFMetJet"+Config.systematic
        elif Config.systematic in ["UnclusteredEnUp", "UnclusteredEnDown"]:
             logging.info("Changing MET source from %s to patType1CorrectedPFMet%s" % (Config.metSource, Config.systematic))
             Config.metSource = "patType1CorrectedPFMet"+Config.systematic

    print "Configuration"
    print Config._toStr()

    print Config.Jets._toStr()
    print Config.Muons._toStr()
    print Config.Electrons._toStr()
    print ""

    process = cms.Process("STPOLSEL2")
    eventCounting.countProcessed(process)

    process.load("Configuration.Geometry.GeometryIdeal_cff")
    process.load("Configuration.StandardSequences.FrontierConditions_GlobalTag_cff")
    from Configuration.AlCa.autoCond import autoCond
    process.GlobalTag.globaltag = cms.string(options.globalTag)
    process.load("Configuration.StandardSequences.MagneticField_cff")

    if Config.doDebug:
        process.load("FWCore.MessageLogger.MessageLogger_cfi")
        process.MessageLogger = cms.Service("MessageLogger",
               destinations=cms.untracked.vstring('cout', 'debug'),
               debugModules=cms.untracked.vstring('*'),
               cout=cms.untracked.PSet(threshold=cms.untracked.string('INFO')),
               debug=cms.untracked.PSet(threshold=cms.untracked.string('DEBUG')),
        )
        logging.basicConfig(level=logging.DEBUG)
    else:
        process.load("FWCore.MessageLogger.MessageLogger_cfi")
        process.MessageLogger.cerr.FwkReport.reportEvery = 1000
        process.MessageLogger.cerr.threshold = cms.untracked.string("INFO")
        logging.basicConfig(level=logging.DEBUG)

    process.maxEvents = cms.untracked.PSet(input=cms.untracked.int32(-1))

    process.options = cms.untracked.PSet(wantSummary=cms.untracked.bool(True))

    process.source = cms.Source("PoolSource",
        # replace 'myfile.root' with the source file you want to use
        fileNames=cms.untracked.vstring(""),
        cacheSize = cms.untracked.uint32(10*1024*1024),
    )


    #-------------------------------------------------
    # Jets
    #-------------------------------------------------

    from SingleTopPolarization.Analysis.jets_step2_cfi import JetSetup
    JetSetup(process, Config)

    #-------------------------------------------------
    # Leptons
    #-------------------------------------------------

    #Embed the corrected isolations to the leptons
    #process.muonClones = cms.EDProducer("MuonShallowCloneProducer",
    #    src = cms.InputTag(Config.Muons.source)
    #)
    process.skimmedMuons = cms.EDFilter("PtMinCandViewCloneSelector",
      src=cms.InputTag(Config.Muons.source), ptMin=cms.double(20)
    )
    process.muonsWithIso = cms.EDProducer(
      'MuonIsolationProducer',
      leptonSrc = cms.InputTag("skimmedMuons"),
      rhoSrc = cms.InputTag("kt6PFJets", "rho"),
      dR = cms.double(0.4)
    )
    process.muIsoSequence = cms.Sequence(process.skimmedMuons*process.muonsWithIso)

    process.skimmedElectrons = cms.EDFilter("PtMinCandViewCloneSelector",
      src=cms.InputTag(Config.Electrons.source), ptMin=cms.double(20)
    )
    process.elesWithIso = cms.EDProducer(
      'ElectronIsolationProducer',
      leptonSrc = cms.InputTag("skimmedElectrons"),
      rhoSrc = cms.InputTag("kt6PFJets", "rho"),
      dR = cms.double(0.3)
    )
    process.eleIsoSequence = cms.Sequence(process.skimmedElectrons*process.elesWithIso)

    from SingleTopPolarization.Analysis.muons_step2_cfi import MuonSetup
    MuonSetup(process, Config)

    from SingleTopPolarization.Analysis.electrons_step2_cfi import ElectronSetup
    ElectronSetup(process, Config)

    process.looseVetoMuCount = cms.EDProducer(
        "CollectionSizeProducer<reco::Candidate>",
        src = cms.InputTag("looseVetoMuons")
    )

    process.looseVetoEleCount = cms.EDProducer(
        "CollectionSizeProducer<reco::Candidate>",
        src = cms.InputTag("looseVetoElectrons")
    )


    #Combine the found electron/muon to a single collection
    process.goodSignalLeptons = cms.EDProducer(
         'CandRefCombiner',
         sources=cms.untracked.vstring(["singleIsoMu", "singleIsoEle"]),
             maxOut=cms.untracked.uint32(1),
             minOut=cms.untracked.uint32(1)
    )

    process.decayTreeProducerMu = cms.EDProducer(
        'GenParticleDecayTreeProducer',
        src=cms.untracked.InputTag("singleIsoMu")
    )
    process.decayTreeProducerEle = cms.EDProducer(
        'GenParticleDecayTreeProducer',
        src=cms.untracked.InputTag("singleIsoEle")
    )

    #-----------------------------------------------
    # Top reco and cosine calcs
    #-----------------------------------------------

    from SingleTopPolarization.Analysis.top_step2_cfi import TopRecoSetup
    TopRecoSetup(process)

    #-----------------------------------------------
    # Treemaking
    #-----------------------------------------------


    def treeCollection(collection_, maxElems_, varlist):
        varVPSet = cms.untracked.VPSet()
        for v in varlist:
            pset = cms.untracked.PSet(tag=cms.untracked.string(v[0]), expr=cms.untracked.string(v[1]), )
            varVPSet.append(pset)
        ret = cms.untracked.PSet(
            collection=collection_,
            maxElems=cms.untracked.int32(maxElems_),
            variables=varVPSet
        )
        return ret

    def ntupleCollection(items):
        varVPSet = cms.VPSet()
        for item in items:
            pset = cms.untracked.PSet(
                tag=cms.untracked.string(item[0]),
                quantity=cms.untracked.string(item[1])
            )
            varVPSet.append(pset)
        return varVPSet

    #Following treemakers for reference only, not to be used. Use CandViewNtpProducer2 instead! --joosep
    #process.treesMu = cms.EDAnalyzer('MuonCandViewTreemakerAnalyzer',
    #    collections = cms.untracked.VPSet(
    #        treeCollection(
    #            cms.untracked.InputTag("muonsWithIso"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["relIso", "userFloat('%s')" % Config.Muons.relIsoType],
    #                ["Charge", "charge"],
    #                ["genPdgId", "? genParticlesSize() > 0 ? genParticle(0).pdgId() : 0"],
    #                ["normChi2", "? globalTrack().isNonnull() ? normChi2 : -1.0"],
    #                ["track_hitPattern_trackerLayersWithMeasurement", "userFloat('track_hitPattern_trackerLayersWithMeasurement')"],
    #                ["globalTrack_hitPattern_numberOfValidMuonHits", "userFloat('globalTrack_hitPattern_numberOfValidMuonHits')"],
    #                ["innerTrack_hitPattern_numberOfValidPixelHits", "userFloat('innerTrack_hitPattern_numberOfValidPixelHits')"],
    #                ["db", "dB"],
    #                ["dz", "userFloat('dz')"],
    #                ["numberOfMatchedStations", "numberOfMatchedStations"],
    #            ]
    #        ),
    #        treeCollection(
    #            cms.untracked.InputTag("goodSignalMuons"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["relIso", "userFloat('%s')" % Config.Muons.relIsoType],
    #                ["Charge", "charge"],
    #                ["genPdgId", "? genParticlesSize() > 0 ? genParticle(0).pdgId() : 0"],
    #            ]
    #        ),
    #        treeCollection(
    #            cms.untracked.InputTag("looseVetoMuons"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["relIso", "userFloat('%s')" % Config.Muons.relIsoType],
    #                ["Charge", "charge"],
    #                ["genPdgId", "? genParticlesSize() > 0 ? genParticle(0).pdgId() : 0"],
    #            ]
    #        )
    #    )
    #)

    #process.treesEle = cms.EDAnalyzer('ElectronCandViewTreemakerAnalyzer',
    #    collections = cms.untracked.VPSet(
    #        treeCollection(
    #            cms.untracked.InputTag("elesWithIso"), 1,
    #            [
    #                ["Pt", "%s" % Config.Electrons.pt],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["relIso", "userFloat('%s')" % Config.Electrons.relIsoType],
    #                ["mvaID", "electronID('mvaTrigV0')"],
    #                ["Charge", "charge"],
    #                ["superCluster_eta", "superCluster.eta"],
    #                ["passConversionVeto", "passConversionVeto()"],
    #                ["superCluster_eta", "superCluster.eta"],
    #                ["gsfTrack_trackerExpectedHitsInner_numberOfHits", "userInt('gsfTrack_trackerExpectedHitsInner_numberOfHits')"]
    #            ]
    #        ),
    #        treeCollection(
    #            cms.untracked.InputTag("goodSignalElectrons"), 1,
    #            [
    #                ["Pt", "%s" % Config.Electrons.pt],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["relIso", "userFloat('%s')" % Config.Electrons.relIsoType],
    #                ["mvaID", "electronID('mvaTrigV0')"],
    #                ["Charge", "charge"],
    #            ]
    #        ),
    #        treeCollection(
    #            cms.untracked.InputTag("looseVetoElectrons"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["relIso", "userFloat('%s')" % Config.Electrons.relIsoType],
    #                ["Charge", "charge"],
    #                ["genPdgId", "? genParticlesSize() > 0 ? genParticle(0).pdgId() : 0"],
    #            ]
    #        )
    #    )
    #)
    #process.treesJets = cms.EDAnalyzer('JetCandViewTreemakerAnalyzer',
    #        collections = cms.untracked.VPSet(
    #        #all the selected jets in events, passing the reference selection cuts, ordered pt-descending
    #        treeCollection(
    #            cms.untracked.InputTag("goodJets"), 5,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["Mass", "mass"],
    #                ["bDiscriminator", "bDiscriminator('%s')" % Config.Jets.bTagDiscriminant],
    #                ["bDiscriminatorTCHP", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.TCHP],
    #                ["bDiscriminatorCSV_MVA", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.CSV_MVA],
    #                ["rms", "userFloat('rms')"],
    #                ["partonFlavour", "partonFlavour()"],
    #                ["deltaR", "userFloat('deltaR')"]
    #            ]
    #        ),
    #        # treeCollection(
    #        #     cms.untracked.InputTag("fwdMostLightJet"), 1,
    #        #     [
    #        #         ["Pt", "pt"],
    #        #         ["Eta", "eta"],
    #        #         ["Phi", "phi"],
    #        #         ["Mass", "mass"],
    #        #         ["bDiscriminator", "bDiscriminator('combinedSecondaryVertexBJetTags')"],
    #        #         ["rms", "userFloat('rms')"]
    #        #     ]
    #        # ),

    #        #the tagged jet with the highest b-discriminator value (== THE b-jet)
    #        treeCollection(
    #            cms.untracked.InputTag("highestBTagJet"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["Mass", "mass"],
    #                ["bDiscriminator", "bDiscriminator('%s')" % Config.Jets.bTagDiscriminant],
    #                ["bDiscriminatorTCHP", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.TCHP],
    #                ["bDiscriminatorCSV_MVA", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.CSV_MVA],
    #                ["rms", "userFloat('rms')"],
    #                ["partonFlavour", "partonFlavour()"],
    #                ["deltaR", "userFloat('deltaR')"]
    #            ]
    #        ),

    #        #The jet with the lowest b-discriminator value (== THE light jet)
    #        treeCollection(
    #            cms.untracked.InputTag("lowestBTagJet"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["Mass", "mass"],
    #                ["bDiscriminator", "bDiscriminator('%s')" % Config.Jets.bTagDiscriminant],
    #                ["bDiscriminatorTCHP", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.TCHP],
    #                ["bDiscriminatorCSV_MVA", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.CSV_MVA],
    #                ["rms", "userFloat('rms')"],
    #                ["partonFlavour", "partonFlavour()"],
    #                ["deltaR", "userFloat('deltaR')"]
    #            ]
    #        ),

    #    #all the b-tagged jets in the event, ordered pt-descending
    #        treeCollection(
    #            cms.untracked.InputTag("btaggedJets"), Config.Jets.nBTags,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["Mass", "mass"],
    #                ["bDiscriminator", "bDiscriminator('%s')" % Config.Jets.bTagDiscriminant],
    #                ["bDiscriminatorTCHP", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.TCHP],
    #                ["bDiscriminatorCSV_MVA", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.CSV_MVA],
    #                ["rms", "userFloat('rms')"],
    #                ["partonFlavour", "partonFlavour()"],
    #                ["deltaR", "userFloat('deltaR')"]
    #            ]
    #        ),
    #        treeCollection(
    #            cms.untracked.InputTag("untaggedJets"), Config.Jets.nJets-Config.Jets.nBTags,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["Mass", "mass"],
    #                ["bDiscriminator", "bDiscriminator('%s')" % Config.Jets.bTagDiscriminant],
    #                ["bDiscriminatorTCHP", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.TCHP],
    #                ["bDiscriminatorCSV_MVA", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.CSV_MVA],
    #                ["rms", "userFloat('rms')"],
    #                ["partonFlavour", "partonFlavour()"],
    #                ["deltaR", "userFloat('deltaR')"]
    #            ]
    #        )
    #    )
    #)



    ##process.treesEle = cms.EDAnalyzer('ElectronCandViewTreemakerAnalyzer',
    ##        collections = cms.untracked.VPSet(treeCollection("goodSignalElectrons", 1,
    ##            [
    ##                ["Pt", "pt"],
    ##                ["Eta", "eta"],
    ##                ["Phi", "phi"],
    ##                ["rhoCorrRelIso", "userFloat('rhoCorrRelIso')"],
    ##            ]
    ##            )
    ##        )
    ##)

    #process.treesCands = cms.EDAnalyzer('CandViewTreemakerAnalyzer',
    #        collections = cms.untracked.VPSet(
    #        treeCollection(
    #            cms.untracked.InputTag("recoTop"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["Mass", "mass"],
    #            ]
    #        ),
    #        treeCollection(
    #            cms.untracked.InputTag("recoNu"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["Px", "p4().Px()"],
    #                ["Py", "p4().Py()"],
    #                ["Pz", "p4().Pz()"],
    #            ]
    #        ),
    #        treeCollection(
    #            cms.untracked.InputTag("genParticleSelector", "trueTop", "STPOLSEL2"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["Mass", "mass"],
    #            ]
    #        ),
    #        treeCollection(
    #            cms.untracked.InputTag("genParticleSelector", "trueNeutrino", "STPOLSEL2"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #                ["Px", "p4().Px()"],
    #                ["Py", "p4().Py()"],
    #                ["Pz", "p4().Pz()"],
    #            ]
    #        ),
    #        treeCollection(
    #            cms.untracked.InputTag("genParticleSelector", "trueLepton", "STPOLSEL2"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #            ]
    #        ),
    #        treeCollection(
    #            cms.untracked.InputTag("genParticleSelector", "trueLightJet", "STPOLSEL2"), 1,
    #            [
    #                ["Pt", "pt"],
    #                ["Eta", "eta"],
    #                ["Phi", "phi"],
    #            ]
    #        ),
    #        treeCollection(
    #            cms.untracked.InputTag("patMETs"), 1,
    #            [
    #                ["Pt", "pt"],
    #            ]
    #        ),
    #    )
    #)

    #process.treesDouble = cms.EDAnalyzer("FloatTreemakerAnalyzer",
    #    collections = cms.VInputTag(
    #        #Merged cosTheta*
    #        cms.InputTag("cosTheta", "cosThetaLightJet"),

    #        #cosTheta* separately from mu and ele
    #        #cms.InputTag("cosThetaProducerEle", "cosThetaLightJet"),
    #        #cms.InputTag("cosThetaProducerMu", "cosThetaLightJet"),

    #        #cosTheta* from gen
    #        cms.InputTag("cosThetaProducerTrueTop", "cosThetaLightJet"),
    #        cms.InputTag("cosThetaProducerTrueLepton", "cosThetaLightJet"),
    #        cms.InputTag("cosThetaProducerTrueJet", "cosThetaLightJet"),
    #        cms.InputTag("cosThetaProducerTrueAll", "cosThetaLightJet"),

    #        cms.InputTag("puWeightProducer", "nVerticesTrue"),

    #        #Transverse mass of MET and lepton
    #        cms.InputTag("muAndMETMT", ""),
    #        cms.InputTag("eleAndMETMT", ""),

    #        ##B-tag systematics
    #        #cms.InputTag("bTagWeightProducer", "bTagWeight"),
    #        #cms.InputTag("bTagWeightProducer", "bTagWeightSystBCUp"),
    #        #cms.InputTag("bTagWeightProducer", "bTagWeightSystBCDown"),
    #        #cms.InputTag("bTagWeightProducer", "bTagWeightSystLUp"),
    #        #cms.InputTag("bTagWeightProducer", "bTagWeightSystLDown"),


    #        #Some debugging data
    #        #cms.InputTag("kt6PFJets", "rho", "RECO"),
    #        #cms.InputTag("recoNu", "Delta"),
    #    )
    #)

    #process.treesDoubleWeight = cms.EDAnalyzer("FloatTreemakerAnalyzer",
    #    defaultValue = cms.untracked.double(0),
    #    putNaNs = cms.untracked.bool(False),
    #    collections = cms.VInputTag(
    #        #B-tag systematics
    #        cms.InputTag("bTagWeightProducerNJMT", "bTagWeight"),
    #        cms.InputTag("bTagWeightProducerNJMT", "bTagWeightSystBCUp"),
    #        cms.InputTag("bTagWeightProducerNJMT", "bTagWeightSystBCDown"),
    #        cms.InputTag("bTagWeightProducerNJMT", "bTagWeightSystLUp"),
    #        cms.InputTag("bTagWeightProducerNJMT", "bTagWeightSystLDown"),

    #        #cms.InputTag("bTagWeightProducer2J1T", "bTagWeight"),
    #        #cms.InputTag("bTagWeightProducer2J1T", "bTagWeightSystBCUp"),
    #        #cms.InputTag("bTagWeightProducer2J1T", "bTagWeightSystBCDown"),
    #        #cms.InputTag("bTagWeightProducer2J1T", "bTagWeightSystLUp"),
    #        #cms.InputTag("bTagWeightProducer2J1T", "bTagWeightSystLDown"),

    #        #cms.InputTag("bTagWeightProducer2J0T", "bTagWeight"),
    #        #cms.InputTag("bTagWeightProducer2J0T", "bTagWeightSystBCUp"),
    #        #cms.InputTag("bTagWeightProducer2J0T", "bTagWeightSystBCDown"),
    #        #cms.InputTag("bTagWeightProducer2J0T", "bTagWeightSystLUp"),
    #        #cms.InputTag("bTagWeightProducer2J0T", "bTagWeightSystLDown"),

    #        #cms.InputTag("bTagWeightProducer3J0T", "bTagWeight"),
    #        #cms.InputTag("bTagWeightProducer3J0T", "bTagWeightSystBCUp"),
    #        #cms.InputTag("bTagWeightProducer3J0T", "bTagWeightSystBCDown"),
    #        #cms.InputTag("bTagWeightProducer3J0T", "bTagWeightSystLUp"),
    #        #cms.InputTag("bTagWeightProducer3J0T", "bTagWeightSystLDown"),

    #        #cms.InputTag("bTagWeightProducer3J1T", "bTagWeight"),
    #        #cms.InputTag("bTagWeightProducer3J1T", "bTagWeightSystBCUp"),
    #        #cms.InputTag("bTagWeightProducer3J1T", "bTagWeightSystBCDown"),
    #        #cms.InputTag("bTagWeightProducer3J1T", "bTagWeightSystLUp"),
    #        #cms.InputTag("bTagWeightProducer3J1T", "bTagWeightSystLDown"),

    #        #cms.InputTag("puWeightProducer", "PUWeightN0"),
    #        cms.InputTag("puWeightProducer", "PUWeightNtrue"),

    #        cms.InputTag("muonWeightsProducer", "muonIDWeight"),
    #        cms.InputTag("muonWeightsProducer", "muonIDWeightUp"),
    #        cms.InputTag("muonWeightsProducer", "muonIDWeightDown"),
    #        cms.InputTag("muonWeightsProducer", "muonIsoWeight"),
    #        cms.InputTag("muonWeightsProducer", "muonIsoWeightUp"),
    #        cms.InputTag("muonWeightsProducer", "muonIsoWeightDown")
    #    )
    #)

    #process.treesBool = cms.EDAnalyzer("BoolTreemakerAnalyzer",
    #    collections = cms.VInputTag(
    #        cms.InputTag("ecalLaserCorrFilter", "", "PAT"),
    #    )
    #)

    #process.treesInt = cms.EDAnalyzer("IntTreemakerAnalyzer",
    #    collections = cms.VInputTag(
    #        [
    #        #cms.InputTag("recoNuProducerMu", "solType"),
    #        #cms.InputTag("recoNuProducerEle ", "solType"),
    #        cms.InputTag("muonCount"),
    #        cms.InputTag("electronCount"),
    #        cms.InputTag("topCount"),
    #        cms.InputTag("bJetCount"),
    #        cms.InputTag("lightJetCount"),

    #        cms.InputTag("looseVetoMuCount"),
    #        cms.InputTag("looseVetoEleCount"),

    #        cms.InputTag("btaggedTrueBJetCount"),
    #        cms.InputTag("trueBJetCount"),
    #        cms.InputTag("btaggedTrueCJetCount"),
    #        cms.InputTag("trueCJetCount"),
    #        cms.InputTag("btaggedTrueLJetCount"),
    #        cms.InputTag("trueLJetCount"),

    #        cms.InputTag("eventIDProducer", "eventId"),
    #        cms.InputTag("eventIDProducer", "runId"),
    #        cms.InputTag("eventIDProducer", "lumiId"),

    #        cms.InputTag("offlinePVCount"),

    #        cms.InputTag("genLeptonsTCount"),
    #        cms.InputTag("trueLeptonPdgId")
    #        ]
    #    )
    #)

    #process.treeSequence = cms.Sequence(process.treesMu*process.treesEle*process.treesDouble*process.treesBool*process.treesCands*process.treesJets*process.treesInt*process.treesDoubleWeight)

    process.recoTopNTupleProducer = cms.EDProducer(
        "CandViewNtpProducer2",
        src = cms.InputTag("recoTop"),
        lazyParser = cms.untracked.bool(True),
        prefix = cms.untracked.string(""),
        #eventInfo = cms.untracked.bool(True),
        variables = ntupleCollection(
            [
                ["Pt", "pt"],
                ["Eta", "eta"],
                ["Phi", "phi"],
                ["Mass", "mass"],
            ]
      )
    )
    process.recoNuNTupleProducer = cms.EDProducer(
        "CandViewNtpProducer2",
        src = cms.InputTag("recoNu"),
        lazyParser = cms.untracked.bool(True),
        prefix = cms.untracked.string(""),
        #eventInfo = cms.untracked.bool(True),
        variables = ntupleCollection(
            [
                ["Pt", "pt"],
                ["Eta", "eta"],
                ["Phi", "phi"],
                ["Px", "p4().Px()"],
                ["Py", "p4().Py()"],
                ["Pz", "p4().Pz()"],
            ]
      )
    )

    process.trueNuNTupleProducer = process.recoNuNTupleProducer.clone(
        src=cms.InputTag("genParticleSelector", "trueNeutrino", "STPOLSEL2"),
    )
    if Config.isCompHep:
        process.trueTopNTupleProducer = process.recoTopNTupleProducer.clone(
            src=cms.InputTag("recoTrueTop"),
        )
    else:
        process.trueTopNTupleProducer = process.recoTopNTupleProducer.clone(
            src=cms.InputTag("genParticleSelector", "trueTop", "STPOLSEL2"),
        )
    process.patMETNTupleProducer = process.recoTopNTupleProducer.clone(
        src=cms.InputTag(Config.metSource),
    )
    process.trueLeptonNTupleProducer = process.recoTopNTupleProducer.clone(
        src=cms.InputTag("genParticleSelector", "trueLepton", "STPOLSEL2"),
    )

    process.trueLightJetNTupleProducer = process.recoTopNTupleProducer.clone(
        src=cms.InputTag("genParticleSelector", "trueLightJet", "STPOLSEL2"),
    )
    process.goodSignalMuonsNTupleProducer = cms.EDProducer(
        "CandViewNtpProducer2",
        src = cms.InputTag("goodSignalMuons"),
        lazyParser = cms.untracked.bool(True),
        prefix = cms.untracked.string(""),
        #eventInfo = cms.untracked.bool(True),
        variables = ntupleCollection(
            [
                ["Pt", "pt"],
                ["Eta", "eta"],
                ["Phi", "phi"],
                ["relIso", "userFloat('%s')" % Config.Muons.relIsoType],
                ["Charge", "charge"],
                ["genPdgId", "? genParticlesSize() > 0 ? genParticle(0).pdgId() : 0"],
                ["motherGenPdgId", "? genParticlesSize() > 0 ? genParticle(0).mother(0).pdgId() : 0"],
                ["normChi2", "? globalTrack().isNonnull() ? normChi2 : -1.0"],
                ["trackhitPatterntrackerLayersWithMeasurement", "userFloat('track_hitPattern_trackerLayersWithMeasurement')"],
                ["globalTrackhitPatternnumberOfValidMuonHits", "userFloat('globalTrack_hitPattern_numberOfValidMuonHits')"],
                ["innerTrackhitPatternnumberOfValidPixelHits", "userFloat('innerTrack_hitPattern_numberOfValidPixelHits')"],
                ["db", "dB"],
                ["dz", "userFloat('dz')"],
                ["numberOfMatchedStations", "numberOfMatchedStations"],
            ]
      )
    )
    process.goodSignalElectronsNTupleProducer = cms.EDProducer(
        "CandViewNtpProducer2",
        src = cms.InputTag("goodSignalElectrons"),
        lazyParser = cms.untracked.bool(True),
        prefix = cms.untracked.string(""),
        #eventInfo = cms.untracked.bool(True),
        variables = ntupleCollection(
                [
                    ["Pt", "%s" % Config.Electrons.pt],
                    ["Eta", "eta"],
                    ["Phi", "phi"],
                    ["relIso", "userFloat('%s')" % Config.Electrons.relIsoType],
                    ["mvaID", "electronID('mvaTrigV0')"],
                    ["Charge", "charge"],
                    ["superClustereta", "superCluster.eta"],
                    ["passConversionVeto", "passConversionVeto()"],
                    ["gsfTracktrackerExpectedHitsInnernumberOfHits", "userInt('gsfTrack_trackerExpectedHitsInner_numberOfHits')"],
                    ["genPdgId", "? genParticlesSize() > 0 ? genParticle(0).pdgId() : 0"],
                    ["motherGenPdgId", "? genParticlesSize() > 0 ? genParticle(0).mother(0).pdgId() : 0"],
                ]
      )
    )
    process.goodJetsNTupleProducer = cms.EDProducer(
        "CandViewNtpProducer2",
        src = cms.InputTag("goodJets"),
        lazyParser = cms.untracked.bool(True),
        prefix = cms.untracked.string(""),
        eventInfo = cms.untracked.bool(False),
        variables = ntupleCollection(
                [
                    ["Pt", "pt"],
                    ["Eta", "eta"],
                    ["Phi", "phi"],
                    ["Mass", "mass"],
                    #["bDiscriminator", "bDiscriminator('%s')" % Config.Jets.bTagDiscriminant],
                    ["bDiscriminatorTCHP", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.TCHP],
                    #["bDiscriminatorCSV_MVA", "bDiscriminator('%s')" % Config.Jets.BTagDiscriminant.CSV_MVA],
                    ["rms", "userFloat('rms')"],
                    ["partonFlavour", "partonFlavour()"],
                    ["area", "jetArea()"],

                    #These require PFCandidates to be present (huge collection)
                    #["n90", "n90()"],
                    #["n60", "n60()"],

                    #["genJetFlavour", "? genJet()>0 ? (genJet()->pdgId()) : 0"], #FIXME
                    ["deltaR", "userFloat('deltaR')"],

                    ["numberOfDaughters", "numberOfDaughters"],
                    ["neutralHadronEnergy", "neutralHadronEnergy"],
                    ["HFHadronEnergy", "HFHadronEnergy"],
                    ["chargedEmEnergyFraction", "chargedEmEnergyFraction"],
                    ["neutralEmEnergyFraction", "neutralEmEnergyFraction"],
                    ["chargedHadronEnergyFraction", "chargedHadronEnergyFraction"],
                    ["chargedMultiplicity", "chargedMultiplicity"],
                    ["nParticles", "userFloat('nParticles')"],
                    ["puMva", "userFloat('mva')"],
                    ["nCharged", "userFloat('nCharged')"],
                    ["nNeutral", "userFloat('nNeutral')"],
                ]
        )
    )
    process.lowestBTagJetNTupleProducer = process.goodJetsNTupleProducer.clone(src=cms.InputTag("lowestBTagJet"))
    process.highestBTagJetNTupleProducer = process.goodJetsNTupleProducer.clone(src=cms.InputTag("highestBTagJet"))

    process.treeSequenceNew = cms.Sequence(
        process.patMETNTupleProducer *
        process.recoTopNTupleProducer *
        process.recoNuNTupleProducer *
        process.trueTopNTupleProducer *
        process.trueNuNTupleProducer *
        process.trueLeptonNTupleProducer *
        process.trueLightJetNTupleProducer *
        process.goodJetsNTupleProducer *
        process.lowestBTagJetNTupleProducer *
        process.highestBTagJetNTupleProducer *
        process.goodSignalMuonsNTupleProducer *
        process.goodSignalElectronsNTupleProducer
    )
    #-----------------------------------------------
    # Flavour analyzer
    #-----------------------------------------------

    Config.doWJetsFlavour = Config.isMC and Config.subChannel.lower() == "wjets" and not Config.isSherpa
    if Config.doWJetsFlavour:
        process.flavourAnalyzer = cms.EDProducer('FlavourAnalyzer',
            genParticles = cms.InputTag('genParticles'),
            generator = cms.InputTag('generator'),
            genJets = cms.InputTag('selectedPatJets', 'genJets'),
            saveGenJets = cms.bool(False),
            savePDFInfo = cms.bool(True)
        )


    #-----------------------------------------------
    # Paths
    #-----------------------------------------------

    from SingleTopPolarization.Analysis.hlt_step2_cfi import HLTSetup
    HLTSetup(process, Config)

    if Config.isMC and options.doPDFWeights:
        process.PDFweights = cms.EDProducer('PDFweightsProducer')
        process.pdfPath = cms.Path(
              process.PDFweights
        )


    if Config.doDebug:
        from SingleTopPolarization.Analysis.debugAnalyzers_step2_cfi import DebugAnalyzerSetup
        DebugAnalyzerSetup(process)

    process.looseVetoMuCount = cms.EDProducer(
        "CollectionSizeProducer<reco::Candidate>",
        src = cms.InputTag("looseVetoMuons")
    )

    process.looseVetoElectronCount = cms.EDProducer(
        "CollectionSizeProducer<reco::Candidate>",
        src = cms.InputTag("looseVetoElectrons")
    )

    if Config.isMC and options.doGenParticlePath:
        if Config.isCompHep:
            from SingleTopPolarization.Analysis.partonStudy_comphep_step2_cfi import PartonStudySetup
        else:
            from SingleTopPolarization.Analysis.partonStudy_step2_cfi import PartonStudySetup
        PartonStudySetup(process)
        process.partonPath = cms.Path()
        #process.partonPath = cms.Path(process.commonPartonSequence)
        if Config.channel==Config.Channel.signal:
            process.partonPath += process.partonStudyTrueSequence

    if Config.doMuon:
        from SingleTopPolarization.Analysis.muons_step2_cfi import MuonPath
        MuonPath(process, Config)
        process.muPath.insert(process.muPath.index(process.singleIsoMu)+1, process.goodSignalLeptons)
        process.muPath.insert(process.muPath.index(process.looseVetoMuons)+1, process.looseVetoMuCount)
        process.muPath.insert(process.muPath.index(process.looseVetoElectrons)+1, process.looseVetoEleCount)

    if Config.doElectron:
        from SingleTopPolarization.Analysis.electrons_step2_cfi import ElectronPath
        ElectronPath(process, Config)
        process.elePath.insert(process.elePath.index(process.singleIsoEle)+1, process.goodSignalLeptons)
        process.elePath.insert(process.elePath.index(process.looseVetoMuons)+1, process.looseVetoMuCount)
        process.elePath.insert(process.elePath.index(process.looseVetoElectrons)+1, process.looseVetoEleCount)

    if Config.isMC:
        process.puWeightProducer = cms.EDProducer('PUWeightProducer'
            , maxVertices = cms.uint32(50)
            , srcDistribution = cms.vdouble(Config.srcPUDistribution)
            , destDistribution = cms.vdouble(Config.destPUDistribution)
        )
        if Config.doMuon:
             process.muPath.insert(0, process.puWeightProducer)
        if Config.doElectron:
             process.elePath.insert(0, process.puWeightProducer)


#    process.offlinePVCount = cms.EDProducer(
#        "CollectionSizeProducer<reco::Vertex>",
#        src = cms.InputTag("offlinePrimaryVertices")
#    )

    process.eventIDProducer = cms.EDProducer('EventIDProducer'
    )
    process.treePath = cms.Path(
        process.eventIDProducer *
        #process.offlinePVCount *
       # process.treeSequence *
        process.treeSequenceNew
    )

    if Config.doWJetsFlavour:
        process.treePath += process.flavourAnalyzer


    #-----------------------------------------------
    # Outpath
    #-----------------------------------------------
    if not Config.skipPatTupleOutput:
        process.out = cms.OutputModule("PoolOutputModule",
            dropMetaData=cms.untracked.string("DROPPED"),
            splitLevel=cms.untracked.int32(99),
            fileName=cms.untracked.string('out_step2.root'),
             SelectEvents=cms.untracked.PSet(
                 SelectEvents=cms.vstring(["*"])
             ),
            outputCommands=cms.untracked.vstring(
                #'drop *',
                'drop *',
                'keep edmMergeableCounter_*__*',
                'keep *_generator__*',
                'keep edmTriggerResults_TriggerResults__*',
                'keep *_flavourAnalyzer_*_STPOLSEL2',
                'keep floats_patMETNTupleProducer_*_STPOLSEL2',
                'keep floats_recoTopNTupleProducer_*_STPOLSEL2',
                'keep floats_recoNuNTupleProducer_*_STPOLSEL2',
                'keep floats_trueTopNTupleProducer_*_STPOLSEL2',
                'keep floats_trueNuNTupleProducer_*_STPOLSEL2',
                'keep floats_trueLeptonNTupleProducer_*_STPOLSEL2',
                'keep floats_goodSignalMuonsNTupleProducer_*_STPOLSEL2',
                'keep floats_goodSignalElectronsNTupleProducer_*_STPOLSEL2',
                'keep floats_goodJetsNTupleProducer_*_STPOLSEL2',
                'keep floats_lowestBTagJetNTupleProducer_*_STPOLSEL2',
                'keep floats_highestBTagJetNTupleProducer_*_STPOLSEL2',
                'keep double_*__STPOLSEL2',
                'keep float_*__STPOLSEL2',
                'keep double_*_*_STPOLSEL2',
                'keep float_*_*_STPOLSEL2',
                'keep double_cosTheta_*_STPOLSEL2',
                'keep double_cosThetaProducerTrueAll_*_STPOLSEL2',
                'keep double_cosThetaProducerTrueTop_*_STPOLSEL2',
                'keep double_cosThetaProducerTrueLepton_*_STPOLSEL2',
                'keep double_cosThetaProducerTrueJet_*_STPOLSEL2',
                'keep *_bTagWeightProducerNJMT_*_STPOLSEL2',
                'keep int_*__STPOLSEL2',
                'keep int_*_*_STPOLSEL2',
                'keep int_*_*_*',
                'keep String_*_*_*', #the decay trees
                'keep *_pdfInfo1_*_STPOLSEL2',
                'keep *_pdfInfo2_*_STPOLSEL2',
                'keep *_pdfInfo3_*_STPOLSEL2',
                'keep *_pdfInfo4_*_STPOLSEL2',
                'keep *_pdfInfo5_*_STPOLSEL2',
                #'keep *',
                #'keep *_recoTop_*_*',
                #'keep *_goodSignalMuons_*_*',
                #'keep *_goodSignalElectrons_*_*',
                #'keep *_goodJets_*_*',
                #'keep *_bTaggedJets_*_*',
                #'keep *_untaggedJets_*_*',
            )
        )
        process.outpath = cms.EndPath(process.out)
        if Config.doElectron:
            process.out.SelectEvents.SelectEvents.append("elePath")
        if Config.doMuon:
            process.out.SelectEvents.SelectEvents.append("muPath")

    #-----------------------------------------------
    #
    #-----------------------------------------------

    #Command-line arguments
    if not Config.onGrid:
        process.source.fileNames = cms.untracked.vstring(options.inputFiles)
        process.maxEvents = cms.untracked.PSet(
          input = cms.untracked.int32(options.maxEvents)
        )
        if hasattr(process, "out"):
            process.out.fileName = cms.untracked.string(options.outputFile)
        outFile = options.outputFile
        #from SingleTopPolarization.Analysis.cmdlineParsing import enableCommandLineArguments
        #(inFiles, outFile) = enableCommandLineArguments(process)
    else:
        outFile = "step2.root"

    #process.TFileService = cms.Service(
    #    "TFileService",
    #    fileName=cms.string(outFile.replace(".root", "_trees.root")),
    #)

    #print "Output trees: %s" % process.TFileService.fileName.value()
    if hasattr(process, "out"):
        print "Output patTuples: %s" % process.out.fileName.value()
    print 80*"-"
    print "Step2 configured"

    return process
# Auto generated configuration file
# using:
# Revision: 1.19
# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v
# with command line options: step5 --conditions 106X_dataRun2_v15 --era Run2_2017 --eventcontent NANOAODSIM --filein root://cms-xrd-global.cern.ch//store/relval/CMSSW_10_6_1/JetHT/MINIAOD/106X_dataRun2_v15_rsb_RelVal_2017C-v1/10000/DF91AEDE-0FC0-DB42-9037-8CABDB66F4CE.root -s NANO --datatier NANOAODSIM --geometry DB:Extended --python NanoData.py --no_exec --fileout file:data.root -n 10000 --data
import FWCore.ParameterSet.Config as cms

from Configuration.Eras.Era_Run2_2016_cff import Run2_2016
from FWCore.ParameterSet.VarParsing import VarParsing

options = VarParsing('standard')

options.register('nevents', -1, VarParsing.multiplicity.singleton,
                 VarParsing.varType.int, "Number of events to process")

options.register(
    'productionName',
    '/store/relval/CMSSW_10_6_8/RelValQCD_FlatPt_15_3000HS_13/MINIAODSIM/PU25ns_106X_mcRun2_asymptotic_v9_postVFP-v2/20000/96ABF93D-CD98-AD4F-9A69-AC448627FE7A.root',
    VarParsing.multiplicity.singleton, VarParsing.varType.string,
    "Name of the production")

options.register('dataset', '96ABF93D-CD98-AD4F-9A69-AC448627FE7A.root',
                 VarParsing.multiplicity.singleton, VarParsing.varType.string,
                 "Name of the dataset")

options.register('globalTag', '106X_mcRun2_asymptotic_v9_postVFP',
                 VarParsing.multiplicity.singleton, VarParsing.varType.string,
                 "GlobalTag of the sample")

options.parseArguments()
Exemplo n.º 11
0
from pdb import set_trace
import ROOT
ROOT.gSystem.Load('libCMGToolsHNL')
from ROOT import HNLKinematicVertexFitter as VertexFitter
import sys
from DataFormats.FWLite import Events, Handle
from itertools import product, combinations

# Make VarParsing object
# https://twiki.cern.ch/twiki/bin/view/CMS/SWGuideAboutPythonConfigFile#VarParsing_Example
from FWCore.ParameterSet.VarParsing import VarParsing
options = VarParsing ('python')
options = VarParsing ('analysis')
options.parseArguments()

def makeRecoVertex(kinVtx, kinVtxChi2=0., kinVtxNdof=0, kinVtxTrkSize=0): point = ROOT.reco.Vertex.Point(
        kinVtx.vertexState().position().x(),
        kinVtx.vertexState().position().y(),
        kinVtx.vertexState().position().z(),
    )
    error = kinVtx.vertexState().error().matrix()
    chi2  = kinVtxChi2 if kinVtxChi2 else kinVtx.chiSquared()
    ndof  = kinVtxNdof if kinVtxNdof else kinVtx.degreesOfFreedom()
    recoVtx = ROOT.reco.Vertex(point, error, chi2, ndof, kinVtxTrkSize)
    return recoVtx

# use Varparsing object
events = Events ('/afs/cern.ch/work/d/dezhu/HNL/CMSSW_9_4_6_patch1/src/CMGTools/HNL/test/testfile.root')

# create handle outside of loop
handle_ele  = Handle ("std::vector<pat::Electron>")
Exemplo n.º 12
0
def SingleTopStep1(process, ):

    options = VarParsing('analysis')
    options.register('isMC', True, VarParsing.multiplicity.singleton,
                     VarParsing.varType.bool, "Run on MC")
    options.register('doDebug', False, VarParsing.multiplicity.singleton,
                     VarParsing.varType.bool, "Run in debugging mode")
    options.register('doSkimming', True, VarParsing.multiplicity.singleton,
                     VarParsing.varType.bool, "Preselect events")
    options.register('doSlimming', True, VarParsing.multiplicity.singleton,
                     VarParsing.varType.bool, "Drop unnecessary collections")
    options.register('doMuon', True, VarParsing.multiplicity.singleton,
                     VarParsing.varType.bool, "Do muon paths")
    options.register('doElectron', True, VarParsing.multiplicity.singleton,
                     VarParsing.varType.bool, "Do electron paths")

    #Tag from https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideFrontierConditions?redirectedfrom=CMS.SWGuideFrontierConditions#2012_MC_production
    # Latest for "53Y Releases (MC)"
    options.register('globalTag', Config.globalTagMC,
                     VarParsing.multiplicity.singleton,
                     VarParsing.varType.string, "Global tag")
    options.parseArguments()

    process.source.fileNames = cms.untracked.vstring(options.inputFiles)
    process.maxEvents = cms.untracked.PSet(
        input=cms.untracked.int32(options.maxEvents))
    process.out.fileName = cms.untracked.string(options.outputFile)
    process.options = cms.untracked.PSet(
        wantSummary=cms.untracked.bool(options.doDebug))

    if options.doDebug:
        process.load("FWCore.MessageLogger.MessageLogger_cfi")
        process.MessageLogger = cms.Service(
            "MessageLogger",
            destinations=cms.untracked.vstring('cout', 'debug'),
            debugModules=cms.untracked.vstring('*'),
            cout=cms.untracked.PSet(threshold=cms.untracked.string('INFO')),
            debug=cms.untracked.PSet(threshold=cms.untracked.string('DEBUG')),
        )
    else:
        process.load("FWCore.MessageService.MessageLogger_cfi")

    postfix = ""
    jetCorr = ['L1FastJet', 'L2Relative', 'L3Absolute']
    if not options.isMC:
        jetCorr += ['L2L3Residual']

    usePF2PAT(
        process,
        runPF2PAT=True,
        jetAlgo='AK5',
        runOnMC=options.isMC,
        postfix=postfix,
        jetCorrections=('AK5PFchs', jetCorr),
        pvCollection=cms.InputTag('goodOfflinePrimaryVertices'),
        #typeIMetCorrections = True
        typeIMetCorrections=
        False  #Type1 MET now applied later using runMETUncertainties
    )

    # https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookJetEnergyCorrections#JetEnCorPFnoPU2012
    process.pfPileUp.Enable = True
    process.pfPileUp.checkClosestZVertex = False

    #-------------------------------------------------
    # selection step 2: vertex filter
    #-------------------------------------------------

    # https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookJetEnergyCorrections#JetEnCorPFnoPU2012
    # https://twiki.cern.ch/twiki/bin/viewauth/CMS/TWikiTopRefEventSel#Cleaning_Filters
    process.goodOfflinePrimaryVertices = cms.EDFilter(
        "PrimaryVertexObjectFilter",
        filterParams=cms.PSet(minNdof=cms.double(4.0),
                              maxZ=cms.double(24.0),
                              maxRho=cms.double(2.0)),
        filter=cms.bool(True),
        src=cms.InputTag('offlinePrimaryVertices'))

    #-------------------------------------------------
    # Muons
    #-------------------------------------------------

    #if not maxLeptonIso is None:
    #    process.pfIsolatedMuons.isolationCut = maxLeptonIso

    #Use both isolated and non-isolated muons as a patMuon source
    #process.patMuons.pfMuonSource = cms.InputTag("pfMuons")
    #process.muonMatch.src = cms.InputTag("pfMuons")
    process.patMuons.pfMuonSource = cms.InputTag("pfIsolatedMuons")
    process.muonMatch.src = cms.InputTag("pfIsolatedMuons")

    process.selectedPatMuons.cut = "pt>20 && abs(eta)<3.0"

    # muon ID production (essentially track count embedding) must be here
    # because tracks get dropped from the collection after this step, resulting
    # in null ptrs.
    process.muonsWithID = cms.EDProducer(
        'MuonIDProducer',
        muonSrc=cms.InputTag("selectedPatMuons"),
        primaryVertexSource=cms.InputTag("goodOfflinePrimaryVertices"))

    #process.muonClones = cms.EDProducer("MuonShallowCloneProducer",
    #    src = cms.InputTag("selectedPatMuons")
    #)

    #-------------------------------------------------
    # Electrons
    # Implemented as in https://indico.cern.ch/getFile.py/access?contribId=1&resId=0&materialId=slides&confId=208765
    #-------------------------------------------------

    #if not maxLeptonIso is None:
    #    process.pfIsolatedElectrons.isolationCut = maxLeptonIso
    #Use both isolated and un-isolated electrons as patElectrons.
    #NB: no need to change process.electronMatch.src to pfElectrons,
    #    it's already gsfElectrons, which is a superset of the pfElectrons
    process.patElectrons.pfElectronSource = cms.InputTag("pfElectrons")

    process.load('EGamma.EGammaAnalysisTools.electronIdMVAProducer_cfi')
    process.mvaID = cms.Sequence(process.mvaTrigV0 + process.mvaNonTrigV0)
    process.patElectrons.electronIDSources.mvaTrigV0 = cms.InputTag(
        "mvaTrigV0")
    process.patElectrons.electronIDSources.mvaNonTrigV0 = cms.InputTag(
        "mvaNonTrigV0")
    process.patPF2PATSequence.replace(process.patElectrons,
                                      process.mvaID * process.patElectrons)
    process.selectedPatElectrons.cut = "pt>25 && abs(eta)<3.0"

    process.electronsWithID = cms.EDProducer(
        'ElectronIDProducer',
        electronSrc=cms.InputTag("selectedPatElectrons"),
        primaryVertexSource=cms.InputTag("goodOfflinePrimaryVertices"))
    #process.electronClones = cms.EDProducer("ElectronShallowCloneProducer",
    #    src = cms.InputTag("selectedPatElectrons")
    #)

    #if not maxLeptonIso is None:
    #    process.pfIsolatedElectrons.isolationCut = maxLeptonIso

    #electron dR=0.3
    process.pfElectrons.isolationValueMapsCharged = cms.VInputTag(
        cms.InputTag("elPFIsoValueCharged03PFId"))
    process.pfElectrons.deltaBetaIsolationValueMap = cms.InputTag(
        "elPFIsoValuePU03PFId")
    process.pfElectrons.isolationValueMapsNeutral = cms.VInputTag(
        cms.InputTag("elPFIsoValueNeutral03PFId"),
        cms.InputTag("elPFIsoValueGamma03PFId"))
    process.pfElectrons.deltaBetaIsolationValueMap = cms.InputTag(
        "elPFIsoValuePU03PFId")
    process.pfElectrons.isolationValueMapsNeutral = cms.VInputTag(
        cms.InputTag("elPFIsoValueNeutral03PFId"),
        cms.InputTag("elPFIsoValueGamma03PFId"))

    process.patElectrons.isolationValues.pfNeutralHadrons = cms.InputTag(
        "elPFIsoValueNeutral03PFId")
    process.patElectrons.isolationValues.pfChargedAll = cms.InputTag(
        "elPFIsoValueChargedAll03PFId")
    process.patElectrons.isolationValues.pfPUChargedHadrons = cms.InputTag(
        "elPFIsoValuePU03PFId")
    process.patElectrons.isolationValues.pfPhotons = cms.InputTag(
        "elPFIsoValueGamma03PFId")
    process.patElectrons.isolationValues.pfChargedHadrons = cms.InputTag(
        "elPFIsoValueCharged03PFId")

    process.pfIsolatedElectrons.isolationValueMapsCharged = cms.VInputTag(
        cms.InputTag("elPFIsoValueCharged03PFId"))
    process.pfIsolatedElectrons.deltaBetaIsolationValueMap = cms.InputTag(
        "elPFIsoValuePU03PFId")
    process.pfIsolatedElectrons.isolationValueMapsNeutral = cms.VInputTag(
        cms.InputTag("elPFIsoValueNeutral03PFId"),
        cms.InputTag("elPFIsoValueGamma03PFId"))

    #-------------------------------------------------
    # Jets
    # MET corrections as https://twiki.cern.ch/twiki/bin/view/CMSPublic/WorkBookMetAnalysis#Type_I_0_with_PAT
    #-------------------------------------------------

    #pfNoTau == True => remove taus from jets
    #process.pfNoTau.enable = noTau

    process.selectedPatJets.cut = cms.string("pt>30 && abs(eta)<5.0")
    process.load("CMGTools.External.pujetidsequence_cff")
    process.patPF2PATSequence += process.puJetIdSqeuence
    #process.jetClones = cms.EDProducer("CaloJetShallowCloneProducer",
    #    src = cms.InputTag("seletedPatJets")
    #)

    #-------------------------------------------------
    # MET uncertainty step
    #-------------------------------------------------
    #Embed the reference to the original jet in the jets, which is constant during the propagation
    process.patJetsWithOwnRef = cms.EDProducer(
        'PatObjectOwnRefProducer<pat::Jet>',
        src=cms.InputTag("selectedPatJets"))

    #Note: this module causes a large memory increase when crossing the file boundary
    #Reason - unknown, solution: limit processing to ~1 file.
    from PhysicsTools.PatUtils.tools.metUncertaintyTools import runMEtUncertainties
    runMEtUncertainties(
        process,
        electronCollection=cms.InputTag("electronsWithID"),
        photonCollection=None,
        muonCollection=cms.InputTag("muonsWithID"),
        tauCollection="",  # "" means emtpy, None means cleanPatTaus
        jetCollection=cms.InputTag("patJetsWithOwnRef"),
        jetCorrLabel="L3Absolute" if options.isMC else "L2L3Residual",
        doSmearJets=options.isMC,
        jetCorrPayloadName="AK5PFchs",
        addToPatDefaultSequence=False)
    process.stpolMetUncertaintySequence = cms.Sequence(
        process.metUncertaintySequence)

    if not options.doSlimming:
        process.out.outputCommands = cms.untracked.vstring('keep *')
    else:
        process.out.outputCommands = cms.untracked.vstring([
            'drop *',
            'keep edmMergeableCounter_*_*_*',  # Keep the lumi-block counter information
            'keep edmTriggerResults_TriggerResults__*',  #Keep the trigger results
            'keep *_genParticles__*',  #keep all the genParticles
            #'keep recoVertexs_offlinePrimaryVertices__*', #keep the offline PV-s
            'keep recoVertexs_goodOfflinePrimaryVertices__*',  #keep the offline PV-s

            # Jets
            'keep patJets_*__*',
            'keep double_*_rho_*',  #For rho-corr rel iso
            'keep recoGenJets_selectedPatJets_genJets_*',  #For Jet MC smearing we need to keep the genJets
            "keep *_puJetId_*_*",  # input variables
            "keep *_puJetMva_*_*",  # final MVAs and working point flags
            'keep *_jetClones__*',

            # Muons
            'keep patMuons_*__*',
            'keep *_muonClones__*',

            # Electrons
            'keep patElectrons_*__*',
            'keep *_electronClones__*',

            # METs
            'keep patMETs_*__*',

            #ECAL laser corr filter
            'keep bool_ecalLaserCorrFilter__*',

            #For flavour analyzer
            'keep GenEventInfoProduct_generator__*',

            #PU info
            'keep PileupSummaryInfos_addPileupInfo__*',

            ##PFCandidates
            #'keep recoPFCandidates_*_pfCandidates_PAT',
            #'keep recoPFMETs_pfMET__*',
            #'keep recoPFMETs_pfMet__*',
            #'keep recoGenMETs_genMetTrue__*',
            #'keep recoPFCandidates_particleFlow__*',
            #'keep recoConversions_allConversions__*',
            #'keep recoVertexCompositeCandidates_generalV0Candidates_*_*',
            #'keep recoTracks_generalTracks__*',
            #'keep recoBeamSpot_offlineBeamSpot__*',
            #'keep recoMuons_muons__*',
            'keep int_*__PAT',
            'keep ints_*__PAT',
            'keep double_*__PAT',
            'keep doubles_*__PAT',
            'keep float_*__PAT',
            'keep floats_*__PAT',
        ])

    #FIXME: is this correct?
    #Keep events that pass either the muon OR the electron path
    process.out.SelectEvents = cms.untracked.PSet(SelectEvents=cms.vstring([]))

    #-------------------------------------------------
    # Paths
    #-------------------------------------------------

    process.goodOfflinePVCount = cms.EDProducer(
        "CollectionSizeProducer<reco::Vertex>",
        src=cms.InputTag("goodOfflinePrimaryVertices"))

    process.preCalcSequences = cms.Sequence(process.patJetsWithOwnRef *
                                            process.goodOfflinePVCount)

    process.patPF2PATSequence.insert(
        process.patPF2PATSequence.index(process.selectedPatMuons) + 1,
        process.muonsWithID)
    process.patPF2PATSequence.insert(
        process.patPF2PATSequence.index(process.selectedPatElectrons) + 1,
        process.electronsWithID)

    #Need separate paths because of skimming

    if options.doMuon:
        process.singleTopPathStep1Mu = cms.Path(
            process.goodOfflinePrimaryVertices * process.patPF2PATSequence
            #* process.muonClones
            #* process.electronClones
            #* process.jetClones
        )

    if options.doElectron:
        process.singleTopPathStep1Ele = cms.Path(
            process.goodOfflinePrimaryVertices * process.patPF2PATSequence
            #* process.muonClones
            #* process.electronClones
            #* process.jetClones
        )

    if options.doMuon:
        process.out.SelectEvents.SelectEvents.append("singleTopPathStep1Mu")
    if options.doElectron:
        process.out.SelectEvents.SelectEvents.append("singleTopPathStep1Ele")

    process.GlobalTag.globaltag = cms.string(options.globalTag)

    process.singleTopPathStep1Mu += process.preCalcSequences
    process.singleTopPathStep1Ele += process.preCalcSequences

    if options.doMuon:
        process.singleTopPathStep1Mu += process.stpolMetUncertaintySequence
    if options.doElectron:
        process.singleTopPathStep1Ele += process.stpolMetUncertaintySequence

    if options.isMC:
        #https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideBTagJetProbabilityCalibration?redirectedfrom=CMS.SWGuideBTagJetProbabilityCalibration#Calibration_in_53x_Data_and_MC
        process.GlobalTag.toGet = cms.VPSet(
            cms.PSet(record=cms.string("BTagTrackProbability2DRcd"),
                     tag=cms.string("TrackProbabilityCalibration_2D_MC53X_v2"),
                     connect=cms.untracked.string(
                         "frontier://FrontierPrep/CMS_COND_BTAU")),
            cms.PSet(record=cms.string("BTagTrackProbability3DRcd"),
                     tag=cms.string("TrackProbabilityCalibration_3D_MC53X_v2"),
                     connect=cms.untracked.string(
                         "frontier://FrontierPrep/CMS_COND_BTAU")))
    else:
        #https://twiki.cern.ch/twiki/bin/view/CMSPublic/SWGuideBTagJetProbabilityCalibration?redirectedfrom=CMS.SWGuideBTagJetProbabilityCalibration#Calibration_in_53x_Data_and_MC
        process.GlobalTag.toGet = cms.VPSet(
            cms.PSet(
                record=cms.string("BTagTrackProbability2DRcd"),
                tag=cms.string("TrackProbabilityCalibration_2D_Data53X_v2"),
                connect=cms.untracked.string(
                    "frontier://FrontierPrep/CMS_COND_BTAU")),
            cms.PSet(
                record=cms.string("BTagTrackProbability3DRcd"),
                tag=cms.string("TrackProbabilityCalibration_3D_Data53X_v2"),
                connect=cms.untracked.string(
                    "frontier://FrontierPrep/CMS_COND_BTAU")))

        process.load('RecoMET.METFilters.ecalLaserCorrFilter_cfi')
        process.ecalLaserCorrFilter.taggingMode = True

        # https://twiki.cern.ch/twiki/bin/viewauth/CMS/TWikiTopRefEventSel#Cleaning_Filters
        process.scrapingFilter = cms.EDFilter(
            "FilterOutScraping",
            applyfilter=cms.untracked.bool(True),
            debugOn=cms.untracked.bool(False),
            numtrack=cms.untracked.uint32(10),
            thresh=cms.untracked.double(0.25))

        #if doElectron:
        #  process.singleTopPathStep1Ele.insert(0, process.scrapingFilter)
        #if doMuon:
        #  process.singleTopPathStep1Mu.insert(0, process.scrapingFilter)

        process.patPF2PATSequence += process.scrapingFilter
        process.patPF2PATSequence += process.ecalLaserCorrFilter

    #if not onGrid:
    #  from SingleTopPolarization.Analysis.cmdlineParsing import enableCommandLineArguments
    #  enableCommandLineArguments(process)
    #else:
    #  process.out.fileName = "step1.root"

    if options.doSkimming:
        process.out.fileName.setValue(process.out.fileName.value().replace(
            ".root", "_Skim.root"))
    else:
        process.out.fileName.setValue(process.out.fileName.value().replace(
            ".root", "_noSkim.root"))

    #-----------------------------------------------
    # Skimming
    #-----------------------------------------------

    #Throw away events before particle flow?
    if options.doSkimming:
        from SingleTopPolarization.Analysis.eventSkimming_cfg import skimFilters
        skimFilters(process)

        if options.doMuon:
            process.singleTopPathStep1Mu.insert(0, process.muonSkim)
        if options.doElectron:
            process.singleTopPathStep1Ele.insert(0, process.electronSkim)

    #-----------------------------------------------
    # Skim efficiency counters
    #-----------------------------------------------

    #count all processed events
    countProcessed(process)

    #count events passing mu and ele paths

    if options.doMuon:
        countInSequence(process, process.singleTopPathStep1Mu)
    if options.doElectron:
        countInSequence(process, process.singleTopPathStep1Ele)
    #-------------------------------------------------
    #
    #-------------------------------------------------

    if not options.doSlimming:
        process.out.fileName.setValue(process.out.fileName.value().replace(
            ".root", "_noSlim.root"))

    return process
Exemplo n.º 13
0
import sys
from FWCore.ParameterSet.VarParsing import VarParsing

cmdopts = VarParsing('analysis')
cmdopts.register('isData', False, VarParsing.multiplicity.singleton,
                 VarParsing.varType.bool,
                 "True if running on Data, False if running on MC")
cmdopts.register(
    'nerohead', "XXX", VarParsing.multiplicity.singleton,
    VarParsing.varType.string,
    "Set to the head of the repository. use check_output 'git rev-parse HEAD' in the crab py file. active only if isGrid."
)
cmdopts.register(
    "nerotag", "YYY", VarParsing.multiplicity.singleton,
    VarParsing.varType.string,
    "Set to the tag of the repository. use check_output 'git rev-parse HEAD' in the crab py file. active only if isGrid."
)
cmdopts.register('connect',
                 '',
                 VarParsing.multiplicity.singleton,
                 mytype=VarParsing.varType.string,
                 info='Globaltag connect')
cmdopts.register('lumiList',
                 '',
                 VarParsing.multiplicity.singleton,
                 mytype=VarParsing.varType.string,
                 info='Good lumi JSON')
cmdopts._tags.pop('numEvent%d')
cmdopts._tagOrder.remove('numEvent%d')

cmdopts.parseArguments()