Newer
Older
Analysis / ganga / Lb2Lcmunu / Lb2Lcmunu_S20_data_NEWJET.py
########################################################################
from os import environ
import math
from Gaudi.Configuration import *
#from GaudiPython import AppMgr
from Configurables import DecayTreeTuple, BTaggingTool, SubstitutePID, TrackScaleState
from Configurables import CombineParticles, FilterDesktop, TupleToolDecayTreeFitter, TupleToolDecay
from Configurables import TupleToolTrigger, BackgroundCategory, TupleToolTISTOS, TupleToolRecoStats, TupleToolTagging
from Configurables import DaVinci, HltSelReportsDecoder, HltVertexReportsDecoder, HltDecReportsDecoder, LoKi__Hybrid__TupleTool, TupleToolJets
from DecayTreeTuple.Configuration import *
from StrippingConf.Configuration import StrippingConf, StrippingStream
from StrippingSettings.Utils import strippingConfiguration
from StrippingArchive.Utils import buildStreams, cloneLinesFromStream
from Configurables import CombineParticles
from StrippingArchive import strippingArchive


trigger_list = [
    'L0HadronDecision',
    'L0ElectronDecision',
    'L0ElectronHiDecision',
    'L0MuonDecision',
    'L0DiMuonDecision',


    # 'Hlt1SingleMuonNoIPDecision',
    # 'Hlt1SingleMuonHighPTDecision',
    # 'Hlt1DiMuonHighMassDecision',
    # 'Hlt1DiMuonLowMassDecision',
    'Hlt1GlobalDecision',
    'Hlt1TrackAllL0Decision',
    'Hlt1SingleMuonNoIPDecision',
    'Hlt1SingleMuonHighPTDecision',
    'Hlt1TrackMuonDecision',
    'Hlt1MuTrackDecision',
    # 'Hlt1GlobalDecision',

    'Hlt2TopoOSTF2BodyDecision',
    'Hlt2TopoOSTF3BodyDecision',
    'Hlt2TopoOSTF4BodyDecision',
    'Hlt2Topo2BodySimpleDecision',
    'Hlt2Topo3BodySimpleDecision',
    'Hlt2Topo4BodySimpleDecision',
    'Hlt2Topo2BodyBBDTDecision',
    'Hlt2Topo3BodyBBDTDecision',
    'Hlt2Topo4BodyBBDTDecision',
    'Hlt2TopoMu2BodyBBDTDecision',
    'Hlt2TopoMu3BodyBBDTDecision',
    'Hlt2TopoMu4BodyBBDTDecision',
    'Hlt2TopoE2BodyBBDTDecision',
    'Hlt2TopoE3BodyBBDTDecision',
    'Hlt2TopoE4BodyBBDTDecision',
    # 'Hlt2MuonFromHLT1Decision',
    'Hlt2SingleMuonDecision',
    # 'Hlt2SingleMuonHighPTDecision',
    # 'Hlt2SingleMuonLowPTDecision',
    # 'Hlt2DisplVerticesLowMassSingleDecision',
    # 'Hlt2DisplVerticesHighMassSingleDecision',
    # 'Hlt2DisplVerticesDoubleDecision',
    # 'Hlt2DisplVerticesSinglePostScaledDecision',
    # 'Hlt2DisplVerticesHighFDSingleDecision',
    # 'Hlt2DisplVerticesSingleDownDecision',
    # 'Hlt2DiMuonDecision',
    # 'Hlt2DiMuonLowMassDecision',
    # 'Hlt2DiMuonBDecision',
    'Hlt2DiMuonDetachedDecision',
    'Hlt2MuTrackDecision',
    'Hlt2GlobalDecision'
]


###########################################################################
# First run the stripping

eventNodeKiller = EventNodeKiller('Stripkiller')
eventNodeKiller.Nodes = [ '/Event/AllStreams', '/Event/Strip' ]


stripping = 'stripping20'
#get the configuration dictionary from the database
config  = strippingConfiguration(stripping)
#get the line builders from the archive
archive = strippingArchive(stripping)
streams = buildStreams(stripping = config, archive = archive)
MyStream = StrippingStream("MyStream")
MyLines = [ 'Strippingb2LcMuXB2DMuNuXLine' ]

for stream in streams:
    for line in stream.lines:
        if line.name() in MyLines:
            print 'Strippingb2LcMuXB2DMuNuXLine'
            MyStream.appendLines( [ line ] )


from Configurables import ProcStatusCheck
filterBadEvents = ProcStatusCheck()

sc = StrippingConf( Streams = [ MyStream ],
                    MaxCandidates = 2000,
                    AcceptBadEvents = False,
                    BadEventSelection = filterBadEvents )

###########################################################################


#from StandardParticles import StdAllLoosePions


Lc_star = CombineParticles("Lc_star")
Lc_star.Inputs = ["Phys/StdAllLoosePions/Particles", "Phys/Lc2PKPiforB2DMuNuX/Particles"]
Lc_star.DecayDescriptors = ["[Lambda_c(2595)+ -> Lambda_c+ pi+ pi-]cc"]
Lc_star.MotherCut = "(M<3000) & (M>2300) & (VFASPF(VCHI2/VDOF) < 7.0) "
Lc_star.DaughtersCuts = { "pi+": "PT>0", "pi-": "PT>0", "Lambda_c+": "ADMASS('Lambda_c+') < 50.0 *MeV" }
#############################################################################

Lb_SL = CombineParticles("Lb_SL")
Lb_SL.Inputs = [ "Phys/MuforB2DMuNuX/Particles", "Phys/Lc_star/Particles"]
Lb_SL.DecayDescriptors = [ "[Lambda_b0 -> Lambda_c(2595)+ mu-]cc" ]
Lb_SL.MotherCut = "(M<6500) & (VFASPF(VCHI2/VDOF) < 7.0) & (BPVDIRA>0.999)"


'''
################################################################################
Lb_SLSel = CombineParticles("Lb_SLSel")
Lb_SLSel.Preambulo=JJACUT
Lb_SLSel.Inputs  = ["Phys/Lb_SL/Particles","Phys/StdJetsJEC/Particles"]

Lb_SLSel.DecayDescriptors  = ["[H_10 -> Lambda_b0 CELLjet]cc"]
Lb_SLSel.Preambulo = JJACUT

Lb_SLSel.MotherCut = "(M<15000)"
Lb_SLSel.CombinationCut = "(AM < 15000)&(DR<1.5)"
'''


########################################################################
#decay = "[ B*_s20 -> ^(B- -> ^(J/psi(1S) -> ^mu+ ^mu-) ^K-) ^[pi+]CC]CC"
decay0 = "[Lambda_b0 -> ^(Lambda_c(2595)+ -> ^(Lambda_c+ -> ^K- ^p+ ^pi+ ) ^pi+ ^pi-) ^mu- ]CC"
#decay0 = "[H_10 -> ^( B*_s20 -> ^K+ ^(B- -> ^(D0 -> ^K- ^pi+) ^mu-)) ^CELLjet ]CC"
#decay0 = "[H_10 -> ^( Lambda_b0 -> ^(Lambda_c(2595)+ -> ^(Lambda_c+ ->  K- p+ pi+  )   ) ^mu- ) ^CELLjet ]CC"
#decay1 = "[H_10 -> ^(  B*_s20-> ^K- ^(B- -> ^(D0 -> ^K- ^pi+) ^mu-)) ^CELLjet ]CC"
########################################################################
Lb_SL_OfflineTree = DecayTreeTuple("Lb_SL_OfflineTree")
Lb_SL_OfflineTree.Inputs = ["Phys/Lb_SL/Particles"]
Lb_SL_OfflineTree.Decay = decay0
Lb_SL_OfflineTree.Branches = {
    #   "H_10": "[^H_10 -> (Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi-) mu- ) CELLjet]CC",
    "Lambda_b0": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi-) mu- ]CC",
    #   "CELLjet": "[H_10 -> (Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi-) mu- ) ^CELLjet]CC",
    "Lambda_c_STAR": "[Lambda_b0 -> ^(Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi-) mu- ]CC",
    "mu": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi-) ^mu- ]CC",
    "Lambda_c": "[Lambda_b0 -> (Lambda_c(2595)+ -> ^(Lambda_c+ -> K- p+ pi+ ) pi+ pi-) mu- ]CC",
    "pi_plus": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) ^pi+ pi-) mu- ]CC",
    "pi_minus": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ ^pi-) mu- ]CC",
    "p": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- ^p+ pi+ ) pi+ pi-) mu- ]CC",
    "pi_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ ^pi+ ) pi+ pi-) mu- ]CC",
    "K_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> ^K- p+ pi+ ) pi+ pi-) mu- ]CC"
}
Lb_SL_OfflineTree.ToolList = [
    "TupleToolKinematic",
    "TupleToolPid",
    "TupleToolGeometry",
    "TupleToolPrimaries",
    "TupleToolTrackInfo",
    "TupleToolEventInfo",
    "TupleToolRecoStats",
    "TupleToolAngles",
    "TupleToolNeutrinoReco",
    "TupleToolMCBackgroundInfo",
    "TupleToolMCTruth",
    "TupleToolJets",
    'TupleToolTrigger',
    'TupleToolTISTOS',
    'TupleToolRICHPid',
    'TupleToolDira',
    'TupleToolEventInfo',
    'TupleToolPropertime',
    'TupleToolRecoStats',
    'TupleToolTrackPosition'
]


Lb_SL_OfflineTree.addTool( TupleToolTrigger, name='TupleToolTrigger' )
Lb_SL_OfflineTree.TupleToolTrigger.Verbose = True
Lb_SL_OfflineTree.TupleToolTrigger.TriggerList = trigger_list


Lb_SL_OfflineTree.addTool( TupleToolTISTOS, name='TupleToolTISTOS' )
Lb_SL_OfflineTree.TupleToolTISTOS.Verbose = True
Lb_SL_OfflineTree.TupleToolTISTOS.TriggerList = trigger_list
Lb_SL_OfflineTree.ToolList += [ "TupleToolTISTOS" ]


########################################################################
from Configurables import TupleToolNeutrinoReco
Lb_SL_OfflineTree.addTool( TupleToolNeutrinoReco, name = "TupleToolNeutrinoReco" )
Lb_SL_OfflineTree.TupleToolNeutrinoReco.Verbose = True
Lb_SL_OfflineTree.TupleToolNeutrinoReco.MotherMass = 5619.5  # MeV
Lb_SL_OfflineTree.TupleToolNeutrinoReco.ExtraName = 'mLb'

from Configurables import TupleToolKinematic
Lb_SL_OfflineTree.addTool( TupleToolKinematic, name = "TupleToolKinematic" )
Lb_SL_OfflineTree.TupleToolKinematic.Verbose = True

from Configurables import TupleToolGeometry
Lb_SL_OfflineTree.addTool( TupleToolGeometry, name = "TupleToolGeometry" )
Lb_SL_OfflineTree.TupleToolGeometry.Verbose = True

Lb_SL_OfflineTree.addTool(TupleToolRecoStats, name="TupleToolRecoStats")
Lb_SL_OfflineTree.TupleToolRecoStats.Verbose = True
Lb_SL_OfflineTree.UseLabXSyntax = True
Lb_SL_OfflineTree.RevertToPositiveID = False

from Configurables import TupleToolTrackIsolation
Lb_SL_OfflineTree.addTupleTool('TupleToolTrackIsolation/TrackIsolation')
Lb_SL_OfflineTree.TrackIsolation.MinConeAngle = 0.5
Lb_SL_OfflineTree.TrackIsolation.MaxConeAngle = 1.5
Lb_SL_OfflineTree.TrackIsolation.StepSize = 0.1
Lb_SL_OfflineTree.TrackIsolation.Verbose = True


##################################################
#DaVinci().Input = ([
#'root://eoslhcb.cern.ch//eos/lhcb/grid/prod/lhcb/MC/2012/ALLSTREAMS.DST/00025296/0000/00025296_00000002_1.allstreams.dst'
#'root://eoslhcb.cern.ch//eos/lhcb/grid/prod/lhcb/MC/2012/ALLSTREAMS.DST/00025296/0000/00025296_00000003_1.allstreams.dst',
#'root://eoslhcb.cern.ch//eos/lhcb/grid/prod/lhcb/MC/2012/ALLSTREAMS.DST/00025296/0000/00025296_00000004_1.allstreams.dst'
#])
from Configurables import DaVinci
#DaVinci().EventPreFilters = fltrs.filters('Filters')
DaVinci().EvtMax = -1                          # Number of events
DaVinci().SkipEvents = 0                       # Events to skip
DaVinci().PrintFreq = 10000
DaVinci().Simulation = False
DaVinci().Lumi = True
DaVinci().appendToMainSequence( [ eventNodeKiller ] )
DaVinci().appendToMainSequence( [ sc.sequence() ] )
DaVinci().UserAlgorithms = [    HltSelReportsDecoder(),
                                HltVertexReportsDecoder(),
                                HltDecReportsDecoder(),
                                Lc_star, Lb_SL,
                                Lb_SL_OfflineTree]
DaVinci().TupleFile = "Lb_Lcstarmunu.root"

#DaVinci().CondDBtag = "Sim08-20130503-1-vc-md100"
#DaVinci().DDDBtag   = "Sim08-20130503-1"
#appMgr = AppMgr()
#appMgr.initialize()
#appMgr.run( DaVinci().EvtMax )