import FWCore.ParameterSet.Config as cms

#Import tool that creates the cut sequence
from UWAnalysis.Configuration.tools.CutSequenceProducer import *

tagAndProbeConfigurator = CutSequenceProducer(initialCounter='initialEvents',
                                              pyModuleName=__name__,
                                              pyNameSpace=locals())

##Tag and probe electron+GSF track
tagAndProbeConfigurator.addDiCandidateModule('tagAndProbeEleTracks',
                                             'PATEleTrackPairProducer',
                                             'convRejElectrons',
                                             'gsfTrackCandidates',
                                             'patMETs',
                                             'selectedPatJets',
                                             1,
                                             9999,
                                             text='',
                                             leadingObjectsOnly=True,
                                             dR=0.15,
                                             recoMode="")
tagAndProbeConfigurator.addSorter('eleTracksSorted', 'PATEleTrackPairSorter')
tagAndProbeConfigurator.addSelector(
    'selectedTagAndProbeEleTracks', 'PATEleTrackPairSelector',
    'abs(leg2.eta())<2.1&&(!(abs(leg2.eta())>1.442&&abs(leg2.eta())<1.566))&&leg1.pt()>15&&charge==0&&leg2.pt()>5&&mass>15&&mass<120&&leg1.userFloat("WWID")>0&&(leg1.chargedHadronIso+leg1.photonIso+leg1.neutralHadronIso)/leg1.pt()<0.1',
    'tagAndProbeEleTracks', 0, 100)

tagAndProbeSequenceEleTracks = tagAndProbeConfigurator.returnSequence()

##Tag and probe electron+SC
import FWCore.ParameterSet.Config as cms

#Import tool that creates the cut sequence
from UWAnalysis.Configuration.tools.CutSequenceProducer import *

analysisConfigurator = CutSequenceProducer(initialCounter='initialEvents',
                                           pyModuleName=__name__,
                                           pyNameSpace=locals())

#Add smearing
analysisConfigurator.addSmearing('patOverloadedTaus', 'patMuonsForAnalysis',
                                 'convRejElectrons', 'patOverloadedJets',
                                 'METInputTag')

#Create di muon pairs for veto purposes
analysisConfigurator.addDiCandidateModule('diMuons',
                                          'PATMuPairProducer',
                                          'smearedMuons',
                                          'smearedMuons',
                                          'smearedMET',
                                          'smearedJets',
                                          0,
                                          9999,
                                          text='',
                                          leadingObjectsOnly=False,
                                          dR=0.15,
                                          recoMode="")
analysisConfigurator.addSelector(
    'osDiMuons', 'PATMuPairSelector',
    'charge==0&&leg1.isGlobalMuon&&leg2.isGlobalMuon&&leg1.pt()>15&&leg2.pt()>15&&(leg1.chargedHadronIso()+max(0.0,leg1.photonIso()+leg1.neutralHadronIso()-0.5*leg1.userIso(0)))/leg1.pt()<0.2&&(leg2.chargedHadronIso()+max(0.0,leg2.photonIso+leg2.neutralHadronIso()-0.5*leg2.userIso(0)))/leg2.pt()<0.2',
    'DiMuonCreation', 0, 0)
import FWCore.ParameterSet.Config as cms



###MU ENRICHED QCD#####################################################################################################
from UWAnalysis.Configuration.tools.CutSequenceProducer import *


muEnrichedConfigurator = CutSequenceProducer(initialCounter  = 'initialMuEnrichedEvents',
                                  pyModuleName = __name__,
                                  pyNameSpace  = locals())


muEnrichedConfigurator.addDiCandidateModule('diMuonsMuEnrichedFR','PATMuPairProducer', 'patMuonsForAnalysis','patMuonsForAnalysis','patMETs','selectedPatJets',0,9999,text = '',leadingObjectsOnly = False,dR = 0.15,recoMode = "")
muEnrichedConfigurator.addSelector('osDiMuonsMuEnrichedFR','PATMuPairSelector','charge==0&&leg1.isGlobalMuon&&leg2.isGlobalMuon&&((leg1.chargedHadronIso+leg1.photonIso+leg1.neutralHadronIso)/leg1.pt()<0.26)&&((leg2.chargedHadronIso+leg2.photonIso+leg2.neutralHadronIso)/leg2.pt()<0.3)','',0,0)
#Make Muons+MET
muEnrichedConfigurator.addCandidateMETModule('muEnrichedCands','PATMuonNuPairProducer','patMuonsForAnalysis','patMETs','selectedPatJets',0,9999,'')
muEnrichedConfigurator.addSelector('muEnrichedSelectedCands','PATMuonNuPairSelector','lepton.pt()>15&&abs(lepton.eta())<2.1&&((lepton.chargedHadronIso+lepton.photonIso+lepton.neutralHadronIso)/lepton.pt()>0.5)&&(lepton.triggerObjectMatchesByPath("HLT_Mu9").size>0||(lepton.triggerObjectMatchesByPath("HLT_Mu11").size>0)||(lepton.triggerObjectMatchesByPath("HLT_Mu15_v1").size>0))&&mt<40.','',0,100)
muEnrichedConfigurator.addGeneric('muEnrichedJetsForFakeRate','MuonNuPairJetFetcher')

muEnrichedSequence = muEnrichedConfigurator.returnSequence()