Newer
Older
Analysis / ganga / Lb2Lcmunu / Lb2Lcmunu_S20_data_NEWJET_moreStates.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 )

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

########## Tree for Lc* -> Lc pi pi ##################################################################
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<3500) & (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)"

decay0 = "[Lambda_b0 -> ^(Lambda_c(2595)+ -> ^(Lambda_c+ -> ^K- ^p+ ^pi+ ) ^pi+ ^pi-) ^mu- ]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 = {
    "Lambda_b0": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi-) mu- ]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"
}

########## Tree for Lc* -> Lc pi pi pi pi ##################################################################
omega_2pi = CombineParticles("omega_2pi")
omega_2pi.Inputs = ["Phys/StdAllLoosePions/Particles"]
omega_2pi.DecayDescriptors = ["[omega(782) -> pi+ pi-]cc"]
omega_2pi.MotherCut = " (M<1214) & (M>294) & (VFASPF(VCHI2/VDOF) < 12.0) "
omega_2pi.DaughtersCuts = { "pi+": "PT>0", "pi-": "PT>0" }

Lc_star4pi = CombineParticles("Lc_star4pi")
Lc_star4pi.Inputs = ["Phys/omega_2pi/Particles", "Phys/Lc2PKPiforB2DMuNuX/Particles"]
## Too much combinatorics this way
# Lc_star4pi.DecayDescriptors = ["[Lambda_c(2595)+ -> Lambda_c+ pi+ pi- pi+ pi-]cc"]
Lc_star4pi.DecayDescriptors = ["[Lambda_c(2595)+ -> Lambda_c+ omega(782) omega(782)]cc"]
Lc_star4pi.MotherCut = "(M<3500) & (M>2300) & (VFASPF(VCHI2/VDOF) < 7.0) "
#Lc_star4pi.DaughtersCuts = { "pi+": "PT>0", "pi-": "PT>0", "Lambda_c+": "ADMASS('Lambda_c+') < 50.0 *MeV" }
Lc_star4pi.DaughtersCuts = { "omega(782)": "PT>0", "Lambda_c+": "ADMASS('Lambda_c+') < 50.0 *MeV" }

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

#decay0_Lc4pi = "[Lambda_b0 -> ^(Lambda_c(2595)+ -> ^(Lambda_c+ -> ^K- ^p+ ^pi+ ) ^pi+ ^pi- ^pi+ ^pi-) ^mu- ]CC"
decay0_Lc4pi = "[Lambda_b0 -> ^(Lambda_c(2595)+ -> ^(Lambda_c+ -> ^K- ^p+ ^pi+ ) ^(omega(782) -> ^pi+ ^pi-) ^(omega(782) -> ^pi+ ^pi-)) ^mu- ]CC"

Lb_SL_Lc4pi_OfflineTree = DecayTreeTuple("Lb_SL_Lc4pi_OfflineTree")
Lb_SL_Lc4pi_OfflineTree.Inputs = ["Phys/Lb_SL_Lc4pi/Particles"]
Lb_SL_Lc4pi_OfflineTree.Decay = decay0_Lc4pi
Lb_SL_Lc4pi_OfflineTree.Branches = {
    "Lambda_b0": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) (omega(782) -> pi+ pi-) (omega(782) -> pi+ pi-)) mu- ]CC",
    "Lambda_c_STAR": "[Lambda_b0 -> ^(Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) (omega(782) -> pi+ pi-) (omega(782) -> pi+ pi-)) mu- ]CC",
    "mu": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) (omega(782) -> pi+ pi-) (omega(782) -> pi+ pi-)) ^mu- ]CC",
    "Lambda_c": "[Lambda_b0 -> (Lambda_c(2595)+ -> ^(Lambda_c+ -> K- p+ pi+ ) (omega(782) -> pi+ pi-) (omega(782) -> pi+ pi-)) mu- ]CC",
    "pi_plus": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) (omega(782) -> ^pi+ pi-) (omega(782) -> pi+ pi-)) mu- ]CC",
    "pi_minus": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) (omega(782) -> pi+ ^pi-) (omega(782) -> pi+ pi-)) mu- ]CC",
    "pi_plus2": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) (omega(782) -> pi+ pi-) (omega(782) -> ^pi+ pi-)) mu- ]CC",
    "pi_minus2": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) (omega(782) -> pi+ pi-) (omega(782) -> pi+ ^pi-)) mu- ]CC",
    "omega": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) ^(omega(782) -> pi+ pi-) (omega(782) -> pi+ pi-)) mu- ]CC",
    "omega2": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) (omega(782) -> pi+ pi-) ^(omega(782) -> pi+ pi-)) mu- ]CC",
    "p": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- ^p+ pi+ ) (omega(782) -> pi+ pi-) (omega(782) -> pi+ pi-)) mu- ]CC",
    "pi_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ ^pi+ ) (omega(782) -> pi+ pi-) (omega(782) -> pi+ pi-)) mu- ]CC",
    "K_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> ^K- p+ pi+ ) (omega(782) -> pi+ pi-) (omega(782) -> pi+ pi-)) mu- ]CC"
}
#Lb_SL_Lc4pi_OfflineTree.Branches = {
#    "Lambda_b0": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi- pi+ pi-) mu- ]CC",
#    "Lambda_c_STAR": "[Lambda_b0 -> ^(Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi- pi+ pi-) mu- ]CC",
#    "mu": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi- pi+ pi-) ^mu- ]CC",
#    "Lambda_c": "[Lambda_b0 -> (Lambda_c(2595)+ -> ^(Lambda_c+ -> K- p+ pi+ ) pi+ pi- pi+ pi-) mu- ]CC",
#    "pi_plus": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) ^pi+ pi- pi+ pi-) mu- ]CC",
#    "pi_minus": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ ^pi- pi+ pi-) mu- ]CC",
#    "pi_plus2": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi- ^pi+ pi-) mu- ]CC",
#    "pi_minus2": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi- pi+ ^pi-) mu- ]CC",
#    "p": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- ^p+ pi+ ) pi+ pi- pi+ pi-) mu- ]CC",
#    "pi_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ ^pi+ ) pi+ pi- pi+ pi-) mu- ]CC",
#    "K_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> ^K- p+ pi+ ) pi+ pi- pi+ pi-) mu- ]CC"
#}


########## Tree for Lc* -> Lc pi0 ##################################################################
pi0containers = ['StdLooseMergedPi0', 'StdLoosePi024e', 'StdLoosePi02gee', 'StdLoosePi02gg']

Lc_star1pi0 = CombineParticles("Lc_star1pi0")
Lc_star1pi0.Inputs = ["Phys/StdLooseMergedPi0/Particles", "Phys/Lc2PKPiforB2DMuNuX/Particles"]
for pc in pi0containers:
    Lc_star1pi0.Inputs.append('Phys/%s/Particles' % pc)
Lc_star1pi0.DecayDescriptors = ["[Lambda_c(2595)+ -> Lambda_c+ pi0]cc"]
Lc_star1pi0.MotherCut = "(M<3500) & (M>2300) & (VFASPF(VCHI2/VDOF) < 7.0) "
Lc_star1pi0.DaughtersCuts = { "pi0": "PT>0", "Lambda_c+": "ADMASS('Lambda_c+') < 50.0 *MeV" }

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

decay0_1pi0 = "[Lambda_b0 -> ^(Lambda_c(2595)+ -> ^(Lambda_c+ -> ^K- ^p+ ^pi+ ) ^pi0) ^mu- ]CC"

Lb_SL_Lc1pi0_OfflineTree = DecayTreeTuple("Lb_SL_Lc1pi0_OfflineTree")
Lb_SL_Lc1pi0_OfflineTree.Inputs = ["Phys/Lb_SL_Lc1pi0/Particles"]
Lb_SL_Lc1pi0_OfflineTree.Decay = decay0_1pi0
Lb_SL_Lc1pi0_OfflineTree.Branches = {
    "Lambda_b0": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi0) mu- ]CC",
    "Lambda_c_STAR": "[Lambda_b0 -> ^(Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi0) mu- ]CC",
    "mu": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi0) ^mu- ]CC",
    "Lambda_c": "[Lambda_b0 -> (Lambda_c(2595)+ -> ^(Lambda_c+ -> K- p+ pi+ ) pi0) mu- ]CC",
    "pi": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) ^pi0) mu- ]CC",
    "p": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- ^p+ pi+ ) pi0) mu- ]CC",
    "pi_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ ^pi+ ) pi0) mu- ]CC",
    "K_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> ^K- p+ pi+ ) pi0) mu- ]CC"
}


########## Tree for Lc* -> Lc pi0 pi pi ##################################################################
Lc_starpi0pipi = CombineParticles("Lc_starpi0pipi")
Lc_starpi0pipi.Inputs = ["Phys/Lc2PKPiforB2DMuNuX/Particles", "Phys/StdAllLoosePions/Particles"]
for pc in pi0containers:
    Lc_starpi0pipi.Inputs.append('Phys/%s/Particles' % pc)
Lc_starpi0pipi.DecayDescriptors = ["[Lambda_c(2595)+ -> Lambda_c+ pi0 pi+ pi-]cc"]
Lc_starpi0pipi.MotherCut = "(M<3500) & (M>2300) & (VFASPF(VCHI2/VDOF) < 7.0) "
Lc_starpi0pipi.DaughtersCuts = { "pi0": "PT>0", "pi+": "PT>0", "pi-": "PT>0", "Lambda_c+": "ADMASS('Lambda_c+') < 50.0 *MeV" }

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

decay0_pi0pipi = "[Lambda_b0 -> ^(Lambda_c(2595)+ -> ^(Lambda_c+ -> ^K- ^p+ ^pi+ ) ^pi0 ^pi+ ^pi-) ^mu- ]CC"

Lb_SL_Lcpi0pipi_OfflineTree = DecayTreeTuple("Lb_SL_Lcpi0pipi_OfflineTree")
Lb_SL_Lcpi0pipi_OfflineTree.Inputs = ["Phys/Lb_SL_Lcpi0pipi/Particles"]
Lb_SL_Lcpi0pipi_OfflineTree.Decay = decay0_pi0pipi
Lb_SL_Lcpi0pipi_OfflineTree.Branches = {
    "Lambda_b0": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi0 pi+ pi-) mu- ]CC",
    "Lambda_c_STAR": "[Lambda_b0 -> ^(Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi0 pi+ pi-) mu- ]CC",
    "mu": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi0 pi+ pi-) ^mu- ]CC",
    "Lambda_c": "[Lambda_b0 -> (Lambda_c(2595)+ -> ^(Lambda_c+ -> K- p+ pi+ ) pi0 pi+ pi-) mu- ]CC",
    "pi0": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) ^pi0 pi+ pi-) mu- ]CC",
    "pi_plus": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi0 ^pi+ pi-) mu- ]CC",
    "pi_minus": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) pi0 pi+ ^pi-) mu- ]CC",
    "p": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- ^p+ pi+ ) pi0 pi+ pi-) mu- ]CC",
    "pi_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ ^pi+ ) pi0 pi+ pi-) mu- ]CC",
    "K_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> ^K- p+ pi+ ) pi0 pi+ pi-) mu- ]CC",
}


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

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

decay0_1pi = "[Lambda_b0 -> ^(Sigma_c+ -> ^(Lambda_c+ -> ^K- ^p+ ^pi+ ) ^pi+) ^mu- ]CC"

Lb_SL_Sc1pi_OfflineTree = DecayTreeTuple("Lb_SL_Sc1pi_OfflineTree")
Lb_SL_Sc1pi_OfflineTree.Inputs = ["Phys/Lb_SL_Sc1pi/Particles"]
Lb_SL_Sc1pi_OfflineTree.Decay = decay0_1pi
Lb_SL_Sc1pi_OfflineTree.Branches = {
    "Lambda_b0": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- p+ pi+ ) pi+) mu- ]CC",
    "Lambda_c_STAR": "[Lambda_b0 -> ^(Sigma_c+ -> (Lambda_c+ -> K- p+ pi+ ) pi+) mu- ]CC",
    "mu": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- p+ pi+ ) pi+) ^mu- ]CC",
    "Lambda_c": "[Lambda_b0 -> (Sigma_c+ -> ^(Lambda_c+ -> K- p+ pi+ ) pi+) mu- ]CC",
    "pi": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- p+ pi+ ) ^pi+) mu- ]CC",
    "p": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- ^p+ pi+ ) pi+) mu- ]CC",
    "pi_Lc": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- p+ ^pi+ ) pi+) mu- ]CC",
    "K_Lc": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> ^K- p+ pi+ ) pi+) mu- ]CC"
}


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

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

decay0_3pi = "[Lambda_b0 -> ^(Sigma_c+ -> ^(Lambda_c+ -> ^K- ^p+ ^pi+ ) ^pi+ ^pi+ ^pi-) ^mu- ]CC"

Lb_SL_Sc3pi_OfflineTree = DecayTreeTuple("Lb_SL_Sc3pi_OfflineTree")
Lb_SL_Sc3pi_OfflineTree.Inputs = ["Phys/Lb_SL_Sc3pi/Particles"]
Lb_SL_Sc3pi_OfflineTree.Decay = decay0_3pi
Lb_SL_Sc3pi_OfflineTree.Branches = {
    "Lambda_b0": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi+ pi-) mu- ]CC",
    "Lambda_c_STAR": "[Lambda_b0 -> ^(Sigma_c+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi+ pi-) mu- ]CC",
    "mu": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi+ pi-) ^mu- ]CC",
    "Lambda_c": "[Lambda_b0 -> (Sigma_c+ -> ^(Lambda_c+ -> K- p+ pi+ ) pi+ pi+ pi-) mu- ]CC",
    "pi_plus1": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- p+ pi+ ) ^pi+ pi+ pi-) mu- ]CC",
    "pi_plus2": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ ^pi+ pi-) mu- ]CC",
    "pi_minus": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- p+ pi+ ) pi+ pi+ ^pi-) mu- ]CC",
    "p": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- ^p+ pi+ ) pi+ pi+ pi-) mu- ]CC",
    "pi_Lc": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> K- p+ ^pi+ ) pi+ pi+ pi-) mu- ]CC",
    "K_Lc": "[Lambda_b0 -> (Sigma_c+ -> (Lambda_c+ -> ^K- p+ pi+ ) pi+ pi+ pi-) mu- ]CC"
}


########## Tree for Lc* -> Lc gamma ##################################################################
Lc_starG = CombineParticles("Lc_starG")
Lc_starG.Inputs = ["Phys/Lc2PKPiforB2DMuNuX/Particles"]
for g in ['StdAllLooseGammaDD', 'StdAllLooseGammaLL', 'StdAllTightGammaDD', 'StdAllTightGammaLL',
          'StdAllTightSymGammaDD', 'StdAllTightSymGammaLL', 'StdDiElectronGamma']:
    Lc_starG.Inputs.append('Phys/%s/Particles' % g)
Lc_starG.DecayDescriptors = ["[Lambda_c(2595)+ -> Lambda_c+ gamma]cc"]
Lc_starG.MotherCut = "(M<3500) & (M>2300) & (VFASPF(VCHI2/VDOF) < 7.0) "
Lc_starG.DaughtersCuts = { "gamma": "PT>0", "Lambda_c+": "ADMASS('Lambda_c+') < 50.0 *MeV" }

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

decay0_G = "[Lambda_b0 -> ^(Lambda_c(2595)+ -> ^(Lambda_c+ -> ^K- ^p+ ^pi+ ) ^gamma) ^mu- ]CC"

Lb_SL_LcG_OfflineTree = DecayTreeTuple("Lb_SL_LcG_OfflineTree")
Lb_SL_LcG_OfflineTree.Inputs = ["Phys/Lb_SL_LcG/Particles"]
Lb_SL_LcG_OfflineTree.Decay = decay0_G
Lb_SL_LcG_OfflineTree.Branches = {
    "Lambda_b0": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) gamma) mu- ]CC",
    "Lambda_c_STAR": "[Lambda_b0 -> ^(Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) gamma) mu- ]CC",
    "mu": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) gamma) ^mu- ]CC",
    "Lambda_c": "[Lambda_b0 -> (Lambda_c(2595)+ -> ^(Lambda_c+ -> K- p+ pi+ ) gamma) mu- ]CC",
    "gamma": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ pi+ ) ^gamma) mu- ]CC",
    "p": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- ^p+ pi+ ) gamma) mu- ]CC",
    "pi_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> K- p+ ^pi+ ) gamma) mu- ]CC",
    "K_Lc": "[Lambda_b0 -> (Lambda_c(2595)+ -> (Lambda_c+ -> ^K- p+ pi+ ) gamma) mu- ]CC"
}


############################## Configuring all DecayTreeTuples #######################################
from Configurables import TupleToolNeutrinoReco
from Configurables import TupleToolKinematic
from Configurables import TupleToolGeometry
from Configurables import TupleToolTrackIsolation

Lc_star_list = [Lc_starG, Lc_star3pi, Lc_star1pi, Lc_starpi0pipi, Lc_star1pi0, Lc_star4pi, Lc_star]
Lb_list = [Lb_SL_LcG, Lb_SL_Sc3pi, Lb_SL_Sc1pi, Lb_SL_Lcpi0pipi, Lb_SL_Lc1pi0, Lb_SL_Lc4pi, Lb_SL]

DTTlist = [Lb_SL_LcG_OfflineTree,
           Lb_SL_Sc3pi_OfflineTree,
           Lb_SL_Sc1pi_OfflineTree,
           Lb_SL_Lcpi0pipi_OfflineTree,
           Lb_SL_Lc1pi0_OfflineTree,
           Lb_SL_OfflineTree,
           Lb_SL_Lc4pi_OfflineTree]

for DTT in DTTlist:

    DTT.ToolList = [
        "TupleToolKinematic",
        "TupleToolPid",
        "TupleToolGeometry",
        "TupleToolPrimaries",
        "TupleToolTrackInfo",
        "TupleToolEventInfo",
        "TupleToolRecoStats",
        "TupleToolAngles",
        "TupleToolNeutrinoReco",
        "TupleToolMCBackgroundInfo",
        "TupleToolMCTruth",
        "TupleToolJets",
        'TupleToolTrigger',
        'TupleToolTISTOS',
        'TupleToolRICHPid',
        'TupleToolDira',
        'TupleToolEventInfo',
        'TupleToolPropertime',
        'TupleToolRecoStats',
        'TupleToolTrackPosition'
    ]
    DTT.addTool( TupleToolTrigger, name='TupleToolTrigger' )
    DTT.TupleToolTrigger.Verbose = True
    DTT.TupleToolTrigger.TriggerList = trigger_list
    DTT.addTool( TupleToolTISTOS, name='TupleToolTISTOS' )
    DTT.TupleToolTISTOS.Verbose = True
    DTT.TupleToolTISTOS.TriggerList = trigger_list
    DTT.ToolList += [ "TupleToolTISTOS" ]
    DTT.addTool( TupleToolNeutrinoReco, name = "TupleToolNeutrinoReco" )
    DTT.TupleToolNeutrinoReco.Verbose = True
    DTT.TupleToolNeutrinoReco.MotherMass = 5619.5  # MeV
    DTT.TupleToolNeutrinoReco.ExtraName = 'mLb'
    DTT.addTool( TupleToolKinematic, name = "TupleToolKinematic" )
    DTT.TupleToolKinematic.Verbose = True
    DTT.addTool( TupleToolGeometry, name = "TupleToolGeometry" )
    DTT.TupleToolGeometry.Verbose = True
    DTT.addTool(TupleToolRecoStats, name="TupleToolRecoStats")
    DTT.TupleToolRecoStats.Verbose = True
    DTT.UseLabXSyntax = True
    DTT.RevertToPositiveID = False
    DTT.addTupleTool('TupleToolTrackIsolation/TrackIsolation')
    DTT.TrackIsolation.MinConeAngle = 0.5
    DTT.TrackIsolation.MaxConeAngle = 1.5
    DTT.TrackIsolation.StepSize = 0.1
    DTT.TrackIsolation.Verbose = True

##################################################
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()]
# Add particles
DaVinci().UserAlgorithms.append(omega_2pi)
for lc in Lc_star_list:
    DaVinci().UserAlgorithms.append(lc)
for lb in Lb_list:
    DaVinci().UserAlgorithms.append(lb)
for DTT in DTTlist:
    DaVinci().UserAlgorithms.append(DTT)
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 )