Ejemplo n.º 1
0
    def locallines(self):
        from Stages import MassFilter, DetachedV0V0Combiner
        from Stages import CharmHadSharedKsLL, CharmHadSharedKsDD
        from Stages import TagDecay, SharedSoftTagChild_pi

        ## If either KS0 is DD,  use the DD dictionary, otherwise use LL.
        D2KS0KS0_2LLComb = DetachedV0V0Combiner('Comb',
                                                decay="D0 -> KS0 KS0",
                                                inputs=[CharmHadSharedKsLL],
                                                nickname='D2KS0KS0_LL')

        D2KS0KS0_2LL = MassFilter('D2KS0KS0_LL', inputs=[D2KS0KS0_2LLComb])

        D2KS0KS0_LLDDComb = DetachedV0V0Combiner(
            'Comb',
            decay="D0 -> KS0 KS0",
            inputs=[CharmHadSharedKsLL, CharmHadSharedKsDD],
            lldd=True,
            nickname='D2KS0KS0_DD')

        D2KS0KS0_LLDD = MassFilter('D2KS0KS0_DD', inputs=[D2KS0KS0_LLDDComb])

        D2KS0KS0_2DDComb = DetachedV0V0Combiner('Comb',
                                                decay="D0 -> KS0 KS0",
                                                inputs=[CharmHadSharedKsDD],
                                                nickname='D2KS0KS0_DD')

        D2KS0KS0_2DD = MassFilter('D2KS0KS0_DD', inputs=[D2KS0KS0_2DDComb])

        # Now the tagged lines
        Dstp2D0Pip_D2KS0KS0_2LL = TagDecay(
            'D02V0V0_TAG_CPV', ["D*(2010)- -> D0 pi-", "D*(2010)+ -> D0 pi+"],
            inputs=[D2KS0KS0_2LL, SharedSoftTagChild_pi],
            ReFitPVs=True)

        Dstp2D0Pip_D2KS0KS0_LLDD = TagDecay(
            'D02V0V0_TAG_CPV', ["D*(2010)- -> D0 pi-", "D*(2010)+ -> D0 pi+"],
            inputs=[D2KS0KS0_LLDD, SharedSoftTagChild_pi],
            ReFitPVs=True)

        Dstp2D0Pip_D2KS0KS0_2DD = TagDecay(
            'D02V0V0_TAG_CPV', ["D*(2010)- -> D0 pi-", "D*(2010)+ -> D0 pi+"],
            inputs=[D2KS0KS0_2DD, SharedSoftTagChild_pi],
            ReFitPVs=True)

        stages = {
            # First untagged
            'D02KS0KS0_KS0LLTurbo': [D2KS0KS0_2LL],
            'D02KS0KS0_KS0LL_KS0DDTurbo': [D2KS0KS0_LLDD],
            'D02KS0KS0_KS0DDTurbo': [D2KS0KS0_2DD],
            # Now tagged
            'Dstp2D0Pip_D02KS0KS0_KS0LLTurbo': [Dstp2D0Pip_D2KS0KS0_2LL],
            'Dstp2D0Pip_D02KS0KS0_KS0LL_KS0DDTurbo':
            [Dstp2D0Pip_D2KS0KS0_LLDD],
            'Dstp2D0Pip_D02KS0KS0_KS0DDTurbo': [Dstp2D0Pip_D2KS0KS0_2DD]
        }
        return stages
Ejemplo n.º 2
0
    def locallines(self):
        from Stages import MassFilter
        from Stages import SharedDetachedD0ToHHHHChild_pi, SharedDetachedD0ToHHHHChild_K, SharedSoftTagChild_pi
        from Stages import D02HHHH_D02PiPiPiPi, D02HHHH_D02KPiPiPi
        from Stages import D02HHHH_D02KKPiPi, D02HHHH_D02KKKPi
        from Stages import D02HHHHMass_D02PiPiPiPi, D02HHHHMass_D02KPiPiPi
        from Stages import D02HHHHMass_D02KKPiPi, D02HHHHMass_D02KKKPi
        from Stages import DstToD02HHHH_D02CFKPiPiPi
        from Stages import DV4BCombiner, TagDecay
        from Stages import SharedSoftTagChild_mu

        ## D*+ -> D0 pi+ reconstruction on D0 with wide mass windows
        DstToD02HHHH_D02PiPiPiPiWideTag = TagDecay(
            'DstpComb',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[D02HHHH_D02PiPiPiPi, SharedSoftTagChild_pi],
            nickname='DstToD02HHHH')

        DstToD02HHHH_D02KKPiPiWideTag = DstToD02HHHH_D02PiPiPiPiWideTag.clone(
            'DstpComb', inputs=[D02HHHH_D02KKPiPi, SharedSoftTagChild_pi])

        DstToD02HHHH_D02CFKPiPiPiWideTag = TagDecay(
            'DstpComb',
            decay=["[D*(2010)+ -> D0 pi+]cc"],
            inputs=[D02HHHH_D02KPiPiPi, SharedSoftTagChild_pi],
            nickname='DstToD02HHHH')
        DstToD02HHHH_D02DCSKPiPiPiWideTag = DstToD02HHHH_D02CFKPiPiPiWideTag.clone(
            'DstpComb', decay=["[D*(2010)- -> D0 pi-]cc"])

        DstToD02HHHH_D02CFKKKPiWideTag = DstToD02HHHH_D02CFKPiPiPiWideTag.clone(
            'DstpComb', inputs=[D02HHHH_D02KKKPi, SharedSoftTagChild_pi])
        DstToD02HHHH_D02DCSKKKPiWideTag = DstToD02HHHH_D02CFKKKPiWideTag.clone(
            'DstpComb', decay=["[D*(2010)- -> D0 pi-]cc"])

        ## D*+ -> D0 pi+ reconstruction
        ## The combiner for the Cabibbo-favored D*+ -> D0(K- pi- pi+ pi+) pi+
        ##   is shared with a spectroscopy line in CharmSpectroscopyLines.py.
        ##   Its definition is moved to Stages.py for sharing.
        DstToD02HHHH_D02PiPiPiPiTag = TagDecay(
            'DstpComb',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[D02HHHHMass_D02PiPiPiPi, SharedSoftTagChild_pi],
            nickname='DstToD02HHHH')

        DstToD02HHHH_D02KKPiPiTag = DstToD02HHHH_D02PiPiPiPiTag.clone(
            'DstpComb', inputs=[D02HHHHMass_D02KKPiPi, SharedSoftTagChild_pi])

        DstToD02HHHH_D02DCSKPiPiPiTag = TagDecay(
            'DstpComb',
            decay=["[D*(2010)- -> D0 pi-]cc"],
            inputs=[D02HHHHMass_D02KPiPiPi, SharedSoftTagChild_pi],
            nickname='DstToD02HHHH')

        DstToD02HHHH_D02CFKKKPiTag = TagDecay(
            'DstpComb',
            decay=["[D*(2010)+ -> D0 pi+]cc"],
            inputs=[D02HHHHMass_D02KKKPi, SharedSoftTagChild_pi],
            nickname='DstToD02HHHH')

        DstToD02HHHH_D02DCSKKKPiTag = DstToD02HHHH_D02CFKKKPiTag.clone(
            'DstpComb', decay=["[D*(2010)- -> D0 pi-]cc"])

        ## Add muon-tagged versions of the D*+/- lines following the form used
        ## for MuTag_DstpMu_Dstp2D0Pip_D02KpPim in D02HHLines.py  [150825, mds]
        MuTag_Dstp_D02PimPimPipPip = TagDecay(
            'DSTP_HHHH_MUTAG_CPV',
            ["[B0 -> D*(2010)+ mu-]cc", "[Delta(1905)++ -> D*(2010)+ mu+]cc"],
            inputs=[DstToD02HHHH_D02PiPiPiPiTag, SharedSoftTagChild_mu],
            ReFitPVs=True)
        MuTag_Dstp_D02KmKpPimPip = TagDecay(
            'DSTP_HHHH_MUTAG_CPV',
            ["[B0 -> D*(2010)+ mu-]cc", "[Delta(1905)++ -> D*(2010)+ mu+]cc"],
            inputs=[DstToD02HHHH_D02KKPiPiTag, SharedSoftTagChild_mu],
            ReFitPVs=True)
        MuTag_Dstp_D02KmPimPipPip = TagDecay(
            'DSTP_HHHH_MUTAG_CPV',
            ["[B0 -> D*(2010)+ mu-]cc", "[Delta(1905)++ -> D*(2010)+ mu+]cc"],
            inputs=[DstToD02HHHH_D02CFKPiPiPi, SharedSoftTagChild_mu],
            ReFitPVs=True)
        MuTag_Dstp_D02KpPimPimPip = TagDecay(
            'DSTP_HHHH_MUTAG_CPV',
            ["[B0 -> D*(2010)+ mu-]cc", "[Delta(1905)++ -> D*(2010)+ mu+]cc"],
            inputs=[DstToD02HHHH_D02DCSKPiPiPiTag, SharedSoftTagChild_mu],
            ReFitPVs=True)
        MuTag_Dstp_D02KmKmKpPip = TagDecay(
            'DSTP_HHHH_MUTAG_CPV',
            ["[B0 -> D*(2010)+ mu-]cc", "[Delta(1905)++ -> D*(2010)+ mu+]cc"],
            inputs=[DstToD02HHHH_D02CFKKKPiTag, SharedSoftTagChild_mu],
            ReFitPVs=True)
        MuTag_Dstp_D02KmKpKpPim = TagDecay(
            'DSTP_HHHH_MUTAG_CPV',
            ["[B0 -> D*(2010)+ mu-]cc", "[Delta(1905)++ -> D*(2010)+ mu+]cc"],
            inputs=[DstToD02HHHH_D02DCSKKKPiTag, SharedSoftTagChild_mu],
            ReFitPVs=True)

        ## The stages dictionary should be a clear two-column list from
        ##   which the lines defined in this module can be directly read.

        stages = {}
        # Create the nominal and wide mass combinations
        stages = {
            ## Main lines (nominal mass window)
            'D02PimPimPipPipTurbo': [D02HHHHMass_D02PiPiPiPi],
            'D02KmPimPipPipTurbo': [D02HHHHMass_D02KPiPiPi],
            'D02KmKpPimPipTurbo': [D02HHHHMass_D02KKPiPi],
            'D02KmKmKpPipTurbo': [D02HHHHMass_D02KKKPi],
            'Dstp2D0Pip_D02PimPimPipPipTurbo': [DstToD02HHHH_D02PiPiPiPiTag],
            'Dstp2D0Pip_D02KmKpPimPipTurbo': [DstToD02HHHH_D02KKPiPiTag],
            'Dstp2D0Pip_D02KmPimPipPipTurbo': [DstToD02HHHH_D02CFKPiPiPi],
            'Dstp2D0Pip_D02KpPimPimPipTurbo': [DstToD02HHHH_D02DCSKPiPiPiTag],
            'Dstp2D0Pip_D02KmKmKpPipTurbo': [DstToD02HHHH_D02CFKKKPiTag],
            'Dstp2D0Pip_D02KmKpKpPimTurbo': [DstToD02HHHH_D02DCSKKKPiTag],
            'MuTag_Dstp_D02PimPimPipPipTurbo': [MuTag_Dstp_D02PimPimPipPip],
            'MuTag_Dstp_D02KmKpPimPipTurbo': [MuTag_Dstp_D02KmKpPimPip],
            'MuTag_Dstp_D02KmPimPipPipTurbo': [MuTag_Dstp_D02KmPimPipPip],
            'MuTag_Dstp_D02KpPimPimPipTurbo': [MuTag_Dstp_D02KpPimPimPip],
            'MuTag_Dstp_D02KmKmKpPipTurbo': [MuTag_Dstp_D02KmKmKpPip],
            'MuTag_Dstp_D02KmKpKpPimTurbo': [MuTag_Dstp_D02KmKpKpPim]

            ## Wide mass lines (plan for obsolescence)
            ,
            'D02PimPimPipPip_WideTurbo': [D02HHHH_D02PiPiPiPi],
            'D02KmPimPipPip_WideTurbo': [D02HHHH_D02KPiPiPi],
            'D02KmKpPimPip_WideTurbo': [D02HHHH_D02KKPiPi],
            'D02KmKmKpPip_WideTurbo': [D02HHHH_D02KKKPi],
            'Dstp2D0Pip_D02PimPimPipPip_WideTurbo':
            [DstToD02HHHH_D02PiPiPiPiWideTag],
            'Dstp2D0Pip_D02KmKpPimPip_WideTurbo':
            [DstToD02HHHH_D02KKPiPiWideTag],
            'Dstp2D0Pip_D02KmPimPipPip_WideTurbo':
            [DstToD02HHHH_D02CFKPiPiPiWideTag],
            'Dstp2D0Pip_D02KpPimPimPip_WideTurbo':
            [DstToD02HHHH_D02DCSKPiPiPiWideTag],
            'Dstp2D0Pip_D02KmKmKpPip_WideTurbo':
            [DstToD02HHHH_D02CFKKKPiWideTag],
            'Dstp2D0Pip_D02KmKpKpPim_WideTurbo':
            [DstToD02HHHH_D02DCSKKKPiWideTag]
        }

        return stages
Ejemplo n.º 3
0
    def locallines(self):
        from Stages import MassFilter,TagDecay,TagDecayWithNeutral
        from Stages import SharedSoftTagChild_pi,SharedNeutralLowPtChild_pi0,SharedNeutralLowPtChild_gamma
        from Stages import XSec_D02KPi, XSec_D02K3Pi
        from Stages import XSec_DpToKmPipPip, XSec_DpToKmKpPim
        from Stages import XSec_DspToKmKpPim, XSec_DspToPimPipPip
        from Stages import XSec_LcpToKmPpPip, XSec_LcpToPimPpPip, XSec_LcpToKmPpKp
        
        stages = {# First the D2HHH lines
                  'Dpm2KPiPi_XSecTurbo'       : [MassFilter('Dpm2KPiPi_XSec',nickname='Dpm2HHH_XSec', 
                                                      inputs=[XSec_DpToKmPipPip],shared=True)],
                  'Dpm2KKPi_XSecTurbo'        : [MassFilter('Dpm2KKPi_XSec', nickname = 'Dpm2HHH_XSec',
                                                      inputs=[XSec_DpToKmKpPim],shared=True)],
                  'Ds2KKPi_XSecTurbo'         : [MassFilter('Ds2KKPi_XSec', nickname = 'Ds2HHH_XSec', 
                                                      inputs=[XSec_DspToKmKpPim],shared=True)],
                  'Ds2PiPiPi_XSecTurbo'       : [MassFilter('Ds2PiPiPi_XSec', nickname = 'Ds2HHH_XSec',
                                                      inputs=[XSec_DspToPimPipPip],shared=True)],
                  # Now the Lc2HHH lines, untagged, CF shared to reuse in tagged lines
                  # Because of the mass window these also catch neutral Xi_c baryons
                  'Lc2KPPi_XSecTurbo'        : [MassFilter('Lc2KPPi_XSec', nickname = 'Lc2HHH_XSec',
                                                      inputs=[XSec_LcpToKmPpPip],shared=True)],
                  'Lc2KPK_XSecTurbo'         : [MassFilter('Lc2KPK_XSec', nickname = 'Lc2HHH_XSec',
                                                      inputs=[XSec_LcpToKmPpKp],shared=True)],
                  'Lc2PiPPi_XSecTurbo'       : [MassFilter('Lc2PiPPi_XSec', nickname = 'Lc2HHH_XSec',
                                                      inputs=[XSec_LcpToPimPpPip],shared=True)],
                  # The untagged D->KPi line
                  'D02KPi_XSecTurbo'         : [MassFilter('D02KPi_XSec',nickname='D02HH_XSec',
                                                      inputs=[XSec_D02KPi],shared=True)]
                 }
        # Now the Sigma_c0,++->Lambda_c(pKpi)pi line
        # Because of the mass window this also catches some excited Xi_c
        stages['Sigmac_2LcPi_XSecTurbo']      = [TagDecay('Sigmac_2LcPi_XSec',
                                                     ["[Sigma_c0 -> Lambda_c+ pi-]cc",
                                                      "[Sigma_c++ -> Lambda_c+ pi+]cc"],
                                                     inputs = [ stages["Lc2KPPi_XSecTurbo"][0],
                                                                SharedSoftTagChild_pi ], 
                                                     nickname = 'Sigmac_TAG_XSec', shared=True) ]
        # Now the D*->D0pi line for the D0->KPi case
        stages['Dst_2D0Pi_D02KPi_XSecTurbo']  = [TagDecay('Dst_2D0Pi_D02KPi_XSec',
                                                     ["[D*(2010)+ -> D0 pi+]cc"],
                                                     inputs = [ stages["D02KPi_XSecTurbo"][0],
                                                                SharedSoftTagChild_pi ], 
                                                     nickname = 'D0_TAG_XSec', shared=True) ]

        # Now the D*->D0pi line for the D0->K3Pi case
        stages['Dst_2D0Pi_D02K3Pi_XSecTurbo'] = [TagDecay('Dst_2D0Pi_D02K3Pi_XSec',
                                                     ["[D*(2010)+ -> D0 pi+]cc"],
                                                     inputs = [ MassFilter('D02K3Pi_XSec',nickname='D02HHHH_XSec',
                                                                           inputs=[XSec_D02K3Pi],shared=True),
                                                                SharedSoftTagChild_pi ], 
                                                     nickname='D0_TAG_XSec', shared=True) ]

        # Now the lines tagged with a photon or pi0
        stages['Dst_2D0Pi0_D02KPi_XSecTurbo']    = [TagDecayWithNeutral('Dst_2D0Pi0_D02KPi_XSec',
                                                                   ["D*(2007)0 -> D0 pi0","D*(2007)0 -> D~0 pi0"],
                                                                   inputs = [ stages["D02KPi_XSecTurbo"][0],
                                                                   SharedNeutralLowPtChild_pi0 ], 
                                                                   nickname='D_TAG_NEUTRAL_XSec', shared=True) ]
        stages['Dst_2D0Gamma_D02KPi_XSecTurbo']  = [TagDecayWithNeutral('Dst_2D0Gamma_D02KPi_XSec',
                                                                   ["D*(2007)0 -> D0 gamma","D*(2007)0 -> D~0 gamma"],
                                                                   inputs = [ stages["D02KPi_XSecTurbo"][0],
                                                                   SharedNeutralLowPtChild_gamma ],  
                                                                   nickname='D_TAG_NEUTRAL_XSec', shared=True) ]
        stages['Dst_2DsGamma_Ds2KKPi_XSecTurbo'] = [TagDecayWithNeutral('Dst_2DsGamma_Ds2KKPi_XSec',
                                                                   ["[D*_s+ -> D_s+ gamma]cc"],
                                                                   inputs = [ stages["Ds2KKPi_XSecTurbo"][0],
                                                                   SharedNeutralLowPtChild_gamma ], 
                                                                   nickname='D_TAG_NEUTRAL_XSec',shared=True) ]  
 

        return stages
Ejemplo n.º 4
0
    def stages(self):  # {
        ## Define the sets of stages for the lines.
        ## NOTE!!!  This method should only be called from within the
        ##    __apply_configuration__() method of a class that inherits from
        ##    Hlt2LinesConfigurableUser.
        ## I would much prefer that this is done in the class constructor.
        ## However, the import from Stages will not work outside of the
        ##   __apply_configuration__ method of the Hlt2LinesConfigurableUser
        ##   that uses these lines.
        if len(self.__stages) == 0:  # {
            from Stages import D02HH_D0ToKmPip, D02HH_D0ToKmKp, D02HH_D0ToPimPip
            from Stages import D02HH_D0ToKmPip_LTUNB, D02HH_D0ToKmKp_LTUNB, D02HH_D0ToPimPip_LTUNB
            from Stages import D0_TAG_CPV_Dstp2D0Pip_D02KmPip
            from Stages import TagDecay, SharedSoftTagChild_pi, SharedSoftTagChild_mu

            ## Create D*+ -> D0 pi+

            ## I (P.S.) want to make this very easy to trace, but some
            ##   automation would help to ensure consistency.  Need to
            ##   consider better patterns.  For now, i have gone with making
            ##   it as clear as possible.

            ## Hmm, having several MassFilter with the same name seems strange,
            ##   but the automatic name mangling does something sensible since
            ##   these are not shared instances.
            ## <grumble, grumble, inscrutable obfuscated wrapper nonsense>

            ## D0 -> K pi reconstructed as "[D0 -> K- pi+]cc
            ## D0_TAG_CPV_Dstp2D0Pip_D02KmPip is a shared instance defined in
            ##   Stages.py because it is also used in CharmSpectroscopyLines.py
            Dstp2D0Pip_D02KpPim = TagDecay(
                'CharmHadDstp2D0Pip_D02KpPim', ["[D*(2010)- -> D0 pi-]cc"],
                inputs=[D02HH_D0ToKmPip, SharedSoftTagChild_pi],
                shared=True,
                nickname='D0_TAG_CPV',
                ReFitPVs=True)

            ## Self-conjugate final state reconstructed only as D0
            Dstp2D0Pip_D02KmKp = TagDecay(
                'CharmHadDstp2D0Pip_D02KmKp',
                decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
                inputs=[D02HH_D0ToKmKp, SharedSoftTagChild_pi],
                shared=True,
                nickname='D0_TAG_CPV',
                ReFitPVs=True)

            Dstp2D0Pip_D02PimPip = TagDecay(
                'CharmHadDstp2D0Pip_D02PimPip',
                decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
                inputs=[D02HH_D0ToPimPip, SharedSoftTagChild_pi],
                shared=True,
                nickname='D0_TAG_CPV',
                ReFitPVs=True)

            ## Muon tagged lines
            MuTag_DstpMu_Dstp2D0Pip_D02KpPim = TagDecay(
                'DSTP_MUTAG_CPV',
                ["[B0 -> D*(2010)- mu+]cc", "[B0 -> D*(2010)- mu-]cc"],
                inputs=[Dstp2D0Pip_D02KpPim, SharedSoftTagChild_mu],
                ReFitPVs=True)
            MuTag_DstpMu_Dstp2D0Pip_D02KmPip = TagDecay(
                'DSTP_MUTAG_CPV',
                ["[B0 -> D*(2010)- mu+]cc", "[B0 -> D*(2010)- mu-]cc"],
                inputs=[D0_TAG_CPV_Dstp2D0Pip_D02KmPip, SharedSoftTagChild_mu],
                ReFitPVs=True)
            MuTag_DstpMu_Dstp2D0Pip_D02KmKp = TagDecay(
                'DSTP_MUTAG_CPV',
                decay=["[B0 -> D*(2010)- mu+]cc", "[B0 -> D*(2010)- mu-]cc"],
                inputs=[Dstp2D0Pip_D02KmKp, SharedSoftTagChild_mu],
                ReFitPVs=True)
            MuTag_DstpMu_Dstp2D0Pip_D02PimPip = TagDecay(
                'DSTP_MUTAG_CPV',
                decay=["[B0 -> D*(2010)- mu+]cc", "[B0 -> D*(2010)- mu-]cc"],
                inputs=[Dstp2D0Pip_D02PimPip, SharedSoftTagChild_mu],
                ReFitPVs=True)

            ## For decay-time-PDF unbiased D0s.
            Dstp2D0Pip_D02KmPip_LTUNB = TagDecay(
                'D0_TAG_CPV', ["[D*(2010)+ -> D0 pi+]cc"],
                inputs=[D02HH_D0ToKmPip_LTUNB, SharedSoftTagChild_pi],
                ReFitPVs=True)

            Dstp2D0Pip_D02KpPim_LTUNB = TagDecay(
                'D0_TAG_CPV', ["[D*(2010)- -> D0 pi-]cc"],
                inputs=[D02HH_D0ToKmPip_LTUNB, SharedSoftTagChild_pi],
                ReFitPVs=True)

            Dstp2D0Pip_D02KmKp_LTUNB = TagDecay(
                'D0_TAG_CPV', ["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
                inputs=[D02HH_D0ToKmKp_LTUNB, SharedSoftTagChild_pi],
                ReFitPVs=True)

            Dstp2D0Pip_D02PimPip_LTUNB = TagDecay(
                'D0_TAG_CPV', ["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
                inputs=[D02HH_D0ToPimPip_LTUNB, SharedSoftTagChild_pi],
                ReFitPVs=True)

            ## The stages dictionary should be a clear two-column list from
            ##   which the lines defined in this module can be directly read.
            self.__stages = {
                'D02KmKpTurbo': [D02HH_D0ToKmKp],
                'D02KmPipTurbo': [D02HH_D0ToKmPip],
                'D02PimPipTurbo': [D02HH_D0ToPimPip]

                ## Now add the tagged lines
                ,
                'Dstp2D0Pip_D02KmKpTurbo': [Dstp2D0Pip_D02KmKp],
                'Dstp2D0Pip_D02PimPipTurbo': [Dstp2D0Pip_D02PimPip],
                'Dstp2D0Pip_D02KmPipTurbo': [D0_TAG_CPV_Dstp2D0Pip_D02KmPip],
                'Dstp2D0Pip_D02KpPimTurbo': [Dstp2D0Pip_D02KpPim]

                ## The muon tagged D* lines
                ,
                'MuTag_DstpMu_Dstp2D0Pip_D02KpPimTurbo':
                [MuTag_DstpMu_Dstp2D0Pip_D02KpPim],
                'MuTag_DstpMu_Dstp2D0Pip_D02KmPipTurbo':
                [MuTag_DstpMu_Dstp2D0Pip_D02KmPip],
                'MuTag_DstpMu_Dstp2D0Pip_D02KmKpTurbo':
                [MuTag_DstpMu_Dstp2D0Pip_D02KmKp],
                'MuTag_DstpMu_Dstp2D0Pip_D02PimPipTurbo':
                [MuTag_DstpMu_Dstp2D0Pip_D02PimPip]

                ## The tagged LTUNB lines
                ,
                'Dstp2D0Pip_D02KmKp_LTUNBTurbo': [Dstp2D0Pip_D02KmKp_LTUNB],
                'Dstp2D0Pip_D02PimPip_LTUNBTurbo':
                [Dstp2D0Pip_D02PimPip_LTUNB],
                'Dstp2D0Pip_D02KmPip_LTUNBTurbo': [Dstp2D0Pip_D02KmPip_LTUNB],
                'Dstp2D0Pip_D02KpPim_LTUNBTurbo': [Dstp2D0Pip_D02KpPim_LTUNB]
            }
        # }

        return self.__stages
Ejemplo n.º 5
0
    def locallines(self):
        from Stages import AttachParticle, TagDecay
        from Stages import SharedNeutralChild_pi0R, SharedNeutralChild_pi0M
        from Stages import SharedSoftTagChild_pi
        from Stages import D2HHPi0_PiPi, D2HHPi0_KPi, D2HHPi0_KK


        D2PiPiPi0R = AttachParticle('D2PiPiPi0R'
                        , decay = "D0 -> K*(892)0 pi0"
                        , inputs = [ D2HHPi0_PiPi , SharedNeutralChild_pi0R ]
                        , nickname = 'D2HHPi0R')

        DstD02PiPiPi0R = TagDecay('DstD02PiPiPi0R'
                , decay = ["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"]
                , inputs = [ D2PiPiPi0R, SharedSoftTagChild_pi]
                , nickname = 'DstD02HHPi0R' )


        D2PiPiPi0M = AttachParticle('D2PiPiPi0M'
                        , decay = "D0 -> K*(892)0 pi0"
                        , inputs = [ D2HHPi0_PiPi , SharedNeutralChild_pi0M ]
                        , nickname = 'D2HHPi0M')

        DstD02PiPiPi0M = TagDecay('DstD02PiPiPi0M'
                , decay = ["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"]
                , inputs = [D2PiPiPi0M, SharedSoftTagChild_pi]
                , nickname = 'DstD02HHPi0M')


        D2KKPi0R = AttachParticle('D2KKPi0R'
                        , decay = "D0 -> K*(892)0 pi0"
                        , inputs = [ D2HHPi0_KK , SharedNeutralChild_pi0R ]
                        , nickname = 'D2HHPi0R')

        DstD02KKPi0R = TagDecay('DstD02KKPi0R'
                , decay = ["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"]
                , inputs = [ D2KKPi0R, SharedSoftTagChild_pi]
                , nickname = 'DstD02HHPi0R' )


        D2KKPi0M = AttachParticle('D2KKPi0M'
                        , decay = "D0 -> K*(892)0 pi0"
                        , inputs = [ D2HHPi0_KK, SharedNeutralChild_pi0M ]
                        , nickname = 'D2HHPi0M')

        DstD02KKPi0M = TagDecay('DstD02KKPi0M'
                , decay = ["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"]
                , inputs = [D2KKPi0M, SharedSoftTagChild_pi]
                , nickname = 'DstD02HHPi0M')


        D2KPiPi0R = AttachParticle('D2KPiPi0R'
                        , decay = "[D0 -> K*(892)0 pi0]cc"
                        , inputs = [ D2HHPi0_KPi , SharedNeutralChild_pi0R ]
                        , nickname = 'D2HHPi0R')

        DstD02KmPipPi0R = TagDecay('DstD02KPiPi0R'
                , decay = ["[D*(2010)+ -> D0 pi+]cc"]
                , inputs = [ D2KPiPi0R, SharedSoftTagChild_pi]
                , nickname = 'DstD02HHPi0R' )
        DstD02KpPimPi0R = TagDecay('DstD02KPiPi0R'
                , decay = ["[D*(2010)- -> D0 pi-]cc"]
                , inputs = [ D2KPiPi0R, SharedSoftTagChild_pi]
                , nickname = 'DstD02HHPi0R' )


        D2KPiPi0M = AttachParticle('D2KPiPi0M'
                        , decay = "[D0 -> K*(892)0 pi0]cc"
                        , inputs = [ D2HHPi0_KPi , SharedNeutralChild_pi0M ]
                        , nickname = 'D2HHPi0M')

        DstD02KmPipPi0M = TagDecay('DstD02KPiPi0M'
                , decay = ["[D*(2010)+ -> D0 pi+]cc"]
                , inputs = [D2KPiPi0M, SharedSoftTagChild_pi]
                , nickname = 'DstD02HHPi0M')
        DstD02KpPimPi0M = TagDecay('DstD02KPiPi0M'
                , decay = ["[D*(2010)- -> D0 pi-]cc"]
                , inputs = [D2KPiPi0M, SharedSoftTagChild_pi]
                , nickname = 'DstD02HHPi0M')


        ## The stages dictionary should be a clear two-column list from
        ##   which the lines defined in this module can be directly read.
        stages = {
            'Dstp2D0Pip_D02PimPipPi0_Pi0R' : [DstD02PiPiPi0R],
            'Dstp2D0Pip_D02PimPipPi0_Pi0M' : [DstD02PiPiPi0M],
            'Dstp2D0Pip_D02KmKpPi0_Pi0R'   : [DstD02KKPi0R],
            'Dstp2D0Pip_D02KmKpPi0_Pi0M'   : [DstD02KKPi0M],
            'Dstp2D0Pip_D02KmPipPi0_Pi0R'  : [DstD02KmPipPi0R],
            'Dstp2D0Pip_D02KpPimPi0_Pi0R'  : [DstD02KpPimPi0R],
            'Dstp2D0Pip_D02KmPipPi0_Pi0M'  : [DstD02KmPipPi0M],
            'Dstp2D0Pip_D02KpPimPi0_Pi0M'  : [DstD02KpPimPi0M],
            }
        return stages
    def locallines(self):

        ##  these are  combiners instantiated in Stages.py
        ##  as indicated below, there is a different grammar to access
        ##  candidates passing trigger selections specified in  other files
        from Stages import D02HH_D0ToKmPip
        from Stages import TagDecay, TagDecayWithNeutral
        from Stages import SharedSoftTagChild_pi, SharedPromptChild_K, SharedPromptChild_p
        from Stages import CharmHadSharedKsLL, CharmHadSharedKsDD
        from Stages import CharmHadSharedSecondaryLambdaLL, CharmHadSharedSecondaryLambdaDD
        from Stages import D02KsKK_LL, D02KsKK_DD, D02KsPiPi_LL, D02KsPiPi_DD
        from Stages import D02KsKPi_LL, D02KsKPi_DD
        from Stages import D2HHH_DspToKmKpPip, D2HHH_DpToKmPipPip
        from Stages import D0_TAG_CPV_Dstp2D0Pip_D02KmPip
        from Stages import DstToD02HHHH_D02CFKPiPiPi
        from Stages import D02HHHHMass_D02KPiPiPi
        from Stages import SharedNeutralLowPtChild_pi0, SharedNeutralLowPtChild_eta
        from Stages import SharedNeutralLowPtChild_gamma
        from Stages import PromptBachelorFilter, PromptSpectroscopyFilter
        from Stages import SharedTighterPromptChild_p
        from Stages import SharedSoftTagChild_pi
        ##

        ## these come from D02HHHHLines.py
        D02KPiPiPiForSpectroscopy = PromptSpectroscopyFilter(
            'D02KPiPiPiSpec', inputs=[D02HHHHMass_D02KPiPiPi], shared=True)

        from Stages import Lc2HHH_LcpToKmPpPip

        from Hlt2Lines.Utilities.Hlt2Stage import Hlt2ExternalStage
        from Hlt2Lines.DPS.Stages import MergeCharm

        ##  change from MergedD0 to separate trigger lines as D0 --> K,pi and
        ##  D0 --> K,pi,pi,pi have very different S:B circa July 15, 2015
        ##  mds        d0 = MergeCharm('MergedD0', inputs = [D02HH_D0ToKmPip, D02KsKK_LL, D02KsKK_DD,
        ##  mds                D02KsPiPi_LL, D02KsPiPi_DD,
        ##  mds                D02KsKPi_LL, D02KsKPi_DD,
        ##  mds                D02KPiPiPiForSpectroscopy
        ##  mds                ])

        ##        dstar = MergeCharm('MergedDstar', inputs = [D0_TAG_CPV_Dstp2D0Pip_D02KmPip, DstToD02HHHH_D02CFKPiPiPi])
        ##        dstar = MergeCharm('MergedDstar', inputs = [D0_TAG_CPV_Dstp2D0Pip_D02KmPip])
        dstarKPi = D0_TAG_CPV_Dstp2D0Pip_D02KmPip
        dstarK3Pi = TagDecay(
            'Dst2D0pi_D02KPiPiPi',
            decay=["[D*(2010)+ -> D0 pi+]cc"],
            inputs=[D02KPiPiPiForSpectroscopy, SharedSoftTagChild_pi])

        ##
        ##
        ##  start by filtering the standard "prompt" track lists to add IPChi2 cuts
        ##
        ## shared instances should usually be defined in Stages.py.
        ## Consider moving them there.
        BachelorPi = PromptBachelorFilter(
            'CharmHadBachelorPi',
            inputs=[SharedSoftTagChild_pi],
            nickname='ChargedSpectroscopyBachelors',
            shared=True)

        BachelorK = PromptBachelorFilter(
            'CharmHadBachelorK',
            inputs=[SharedPromptChild_K],
            nickname='ChargedSpectroscopyBachelors',
            shared=True)

        BachelorPr = PromptBachelorFilter(
            'CharmHadBachelorPr',
            inputs=[SharedTighterPromptChild_p],
            nickname='ChargedSpectroscopyBachelors',
            shared=True)

        ## LcpForSpectroscopy is meant to be used as input for spectroscopy studies. It has
        ## a tighter set of selections on  decay time, on IPChi2 (nonexistent for
        ## default CPV lines), and (potentially) Lambda_c mass to create candidates for spectroscopy studies
        ## It should be sent to *neither* Full or Turbo.
        ## shared instances should usually be defined in Stages.py.
        ## Consider moving them there.
        LcpForSpectroscopy = PromptSpectroscopyFilter(
            'LcForSpec',
            nickname='LcSpec',
            inputs=[Lc2HHH_LcpToKmPpPip],
            shared=True)

        stages = {}
        ##  recall that the "nicknake" in TagDecay is the "name" used in the dictionary of cuts.
        ##
        ##
        stages.update({
            'Spec_D0ToKPi_PiTurbo': [
                TagDecay('Spec_D0Pi',
                         decay=[
                             "[D*(2010)+ -> D0 pi+]cc",
                             "[D*(2010)- -> D0 pi-]cc"
                         ],
                         nickname='Spec_D0Pi',
                         inputs=[D02HH_D0ToKmPip, BachelorPi])
            ],
            'Spec_D0ToKPi_KsTurbo': [
                TagDecay('Spec_D0Ks',
                         decay=["[D*(2007)0 -> D0 KS0]cc"],
                         nickname='Spec_DK',
                         inputs=[
                             D02HH_D0ToKmPip, CharmHadSharedKsLL,
                             CharmHadSharedKsDD
                         ])
            ],
            'Spec_D0ToKPi_KpmTurbo': [
                TagDecay(
                    'Spec_D0K',
                    decay=["[D*(2010)+ -> D0 K+]cc", "[D*(2010)- -> D0 K-]cc"],
                    nickname='Spec_DK',
                    inputs=[D02HH_D0ToKmPip, BachelorK])
            ],
            'Spec_D0ToKPi_PrTurbo': [
                TagDecay('Spec_D0Pr',
                         decay=[
                             "[D*(2010)+ -> D0 p+]cc",
                             "[D*(2010)- -> D0 p~-]cc"
                         ],
                         nickname='Spec_DPr',
                         inputs=[D02HH_D0ToKmPip, BachelorPr])
            ],
            'Spec_D0ToKPi_LambdaTurbo': [
                TagDecay('Spec_D0Lambda',
                         decay=[
                             "[D*(2007)0 -> D0 Lambda0]cc",
                             "[D*(2007)0 -> D~0 Lambda0]cc"
                         ],
                         nickname='Spec_DLambda',
                         inputs=[
                             D02HH_D0ToKmPip, CharmHadSharedSecondaryLambdaLL,
                             CharmHadSharedSecondaryLambdaDD
                         ])
            ],
            'Spec_D0ToKPi_Pi0Turbo': [
                TagDecayWithNeutral(
                    'Spec_D0Pi0',
                    decay=["[D*(2007)0 -> D0 pi0]cc"],
                    nickname='Spec_DPi',
                    inputs=[D02HH_D0ToKmPip, SharedNeutralLowPtChild_pi0])
            ],
            'Spec_D0ToKPi_EtaTurbo': [
                TagDecayWithNeutral(
                    'Spec_D0Eta',
                    decay=["[D*(2007)0 -> D0 eta]cc"],
                    nickname='Spec_DEta',
                    inputs=[D02HH_D0ToKmPip, SharedNeutralLowPtChild_eta])
            ],
            'Spec_D0ToKPi_GammaTurbo': [
                TagDecayWithNeutral(
                    'Spec_D0Gamma',
                    decay=["[D*(2007)0 -> D0 gamma]cc"],
                    nickname='Spec_DGamma',
                    inputs=[D02HH_D0ToKmPip, SharedNeutralLowPtChild_gamma])
            ],
            'Spec_D0ToK3Pi_PiTurbo': [
                TagDecay('Spec_D0Pi',
                         decay=[
                             "[D*(2010)+ -> D0 pi+]cc",
                             "[D*(2010)- -> D0 pi-]cc"
                         ],
                         nickname='Spec_D0Pi',
                         inputs=[D02KPiPiPiForSpectroscopy, BachelorPi])
            ],
            'Spec_D0ToK3Pi_KsTurbo': [
                TagDecay('Spec_D0Ks',
                         decay=["[D*(2007)0 -> D0 KS0]cc"],
                         nickname='Spec_DK',
                         inputs=[
                             D02KPiPiPiForSpectroscopy, CharmHadSharedKsLL,
                             CharmHadSharedKsDD
                         ])
            ],
            'Spec_D0ToK3Pi_KpmTurbo': [
                TagDecay(
                    'Spec_D0K',
                    decay=["[D*(2010)+ -> D0 K+]cc", "[D*(2010)- -> D0 K-]cc"],
                    nickname='Spec_DK',
                    inputs=[D02KPiPiPiForSpectroscopy, BachelorK])
            ],
            'Spec_D0ToK3Pi_PrTurbo': [
                TagDecay('Spec_D0Pr',
                         decay=[
                             "[D*(2010)+ -> D0 p+]cc",
                             "[D*(2010)- -> D0 p~-]cc"
                         ],
                         nickname='Spec_DPr',
                         inputs=[D02KPiPiPiForSpectroscopy, BachelorPr])
            ],
            'Spec_D0ToK3Pi_LambdaTurbo': [
                TagDecay('Spec_D0Lambda',
                         decay=[
                             "[D*(2007)0 -> D0 Lambda0]cc",
                             "[D*(2007)0 -> D~0 Lambda0]cc"
                         ],
                         nickname='Spec_DLambda',
                         inputs=[
                             D02KPiPiPiForSpectroscopy,
                             CharmHadSharedSecondaryLambdaLL,
                             CharmHadSharedSecondaryLambdaDD
                         ])
            ],
            'Spec_D0ToK3Pi_Pi0Turbo': [
                TagDecayWithNeutral('Spec_D0Pi0',
                                    decay=["[D*(2007)0 -> D0 pi0]cc"],
                                    nickname='Spec_DPi',
                                    inputs=[
                                        D02KPiPiPiForSpectroscopy,
                                        SharedNeutralLowPtChild_pi0
                                    ])
            ],
            'Spec_D0ToK3Pi_EtaTurbo': [
                TagDecayWithNeutral('Spec_D0Eta',
                                    decay=["[D*(2007)0 -> D0 eta]cc"],
                                    nickname='Spec_DEta',
                                    inputs=[
                                        D02KPiPiPiForSpectroscopy,
                                        SharedNeutralLowPtChild_eta
                                    ])
            ],
            'Spec_D0ToK3Pi_GammaTurbo': [
                TagDecayWithNeutral('Spec_D0Gamma',
                                    decay=["[D*(2007)0 -> D0 gamma]cc"],
                                    nickname='Spec_DGamma',
                                    inputs=[
                                        D02KPiPiPiForSpectroscopy,
                                        SharedNeutralLowPtChild_gamma
                                    ])
            ],
            'Spec_DsPiTurbo': [
                TagDecay('Spec_D0Pi',
                         decay=[
                             "[Delta(1905)++ -> D_s+ pi+]cc",
                             "[D*(2007)0 -> D_s+ pi-]cc"
                         ],
                         nickname='Spec_DPi',
                         inputs=[D2HHH_DspToKmKpPip, BachelorPi])
            ],
            'Spec_DsKsTurbo': [
                TagDecay('Spec_D0K',
                         decay=["[D*(2010)+ -> D_s+ KS0]cc"],
                         nickname='Spec_DK',
                         inputs=[
                             D2HHH_DspToKmKpPip, CharmHadSharedKsLL,
                             CharmHadSharedKsDD
                         ])
            ],
            'Spec_DsKpmTurbo': [
                TagDecay('Spec_D0K',
                         decay=[
                             "[Delta(1905)++ -> D_s+ K+]cc",
                             "[D*(2007)0 -> D_s+ K-]cc"
                         ],
                         nickname='Spec_DK',
                         inputs=[D2HHH_DspToKmKpPip, BachelorK])
            ],
            'Spec_DsPrTurbo': [
                TagDecay('Spec_D0Pr',
                         decay=[
                             "[Delta(1905)++ -> D_s+ p+]cc",
                             "[D*(2007)0 -> D_s+ p~-]cc"
                         ],
                         nickname='Spec_DPr',
                         inputs=[D2HHH_DspToKmKpPip, BachelorPr])
            ],
            'Spec_DsLambdaTurbo': [
                TagDecay('Spec_D0Lambda',
                         decay=[
                             "[D*(2010)+ -> D_s+ Lambda0]cc",
                             "[D*(2010)- -> D_s- Lambda0]cc"
                         ],
                         nickname='Spec_DLambda',
                         inputs=[
                             D2HHH_DspToKmKpPip,
                             CharmHadSharedSecondaryLambdaLL,
                             CharmHadSharedSecondaryLambdaDD
                         ])
            ],
            'Spec_DsPi0Turbo': [
                TagDecayWithNeutral(
                    'Spec_DsPi0',
                    decay=["[D*(2010)+ -> D_s+ pi0]cc"],
                    nickname='Spec_DPi',
                    inputs=[D2HHH_DspToKmKpPip, SharedNeutralLowPtChild_pi0])
            ],
            'Spec_DsEtaTurbo': [
                TagDecayWithNeutral(
                    'Spec_DsEta',
                    decay=["[D*(2010)+ -> D_s+ eta]cc"],
                    nickname='Spec_DEta',
                    inputs=[D2HHH_DspToKmKpPip, SharedNeutralLowPtChild_eta])
            ],
            'Spec_DsGammaTurbo': [
                TagDecayWithNeutral(
                    'Spec_DsGamma',
                    decay=["[D*(2010)+ -> D_s+ gamma]cc"],
                    nickname='Spec_DGamma',
                    inputs=[D2HHH_DspToKmKpPip, SharedNeutralLowPtChild_gamma])
            ],
            'Spec_DpPiTurbo': [
                TagDecay('Spec_DpPi',
                         decay=[
                             "[Delta(1905)++ -> D+ pi+]cc",
                             "[D*(2007)0 -> D+ pi-]cc"
                         ],
                         nickname='Spec_DpmPi',
                         inputs=[D2HHH_DpToKmPipPip, BachelorPi])
            ],
            'Spec_DpKsTurbo': [
                TagDecay('Spec_DpK',
                         decay=["[D*(2010)+ -> D+ KS0]cc"],
                         nickname='Spec_DK',
                         inputs=[
                             D2HHH_DpToKmPipPip, CharmHadSharedKsLL,
                             CharmHadSharedKsDD
                         ])
            ],
            'Spec_DpKpmTurbo': [
                TagDecay('Spec_DpK',
                         decay=[
                             "[Delta(1905)++ -> D+ K+]cc",
                             "[D*(2007)0 -> D+ K-]cc"
                         ],
                         nickname='Spec_DK',
                         inputs=[D2HHH_DpToKmPipPip, BachelorK])
            ],
            'Spec_DpPrTurbo': [
                TagDecay('Spec_DpPr',
                         decay=[
                             "[Delta(1905)++ -> D+ p+]cc",
                             "[D*(2007)0 -> D+ p~-]cc"
                         ],
                         nickname='Spec_DPr',
                         inputs=[D2HHH_DpToKmPipPip, BachelorPr])
            ],
            'Spec_DpLambdaTurbo': [
                TagDecay('Spec_DpLambda',
                         decay=[
                             "[D*(2010)+ -> D+ Lambda0]cc",
                             "[D*(2010)- -> D- Lambda0]cc"
                         ],
                         nickname='Spec_DLambda',
                         inputs=[
                             D2HHH_DpToKmPipPip,
                             CharmHadSharedSecondaryLambdaLL,
                             CharmHadSharedSecondaryLambdaDD
                         ])
            ],
            'Spec_DpPi0Turbo': [
                TagDecayWithNeutral(
                    'Spec_DpPi0',
                    decay=["[D*(2010)+ -> D+ pi0]cc"],
                    nickname='Spec_DPi',
                    inputs=[D2HHH_DpToKmPipPip, SharedNeutralLowPtChild_pi0])
            ],
            'Spec_DpEtaTurbo': [
                TagDecayWithNeutral(
                    'Spec_DpEta',
                    decay=["[D*(2010)+ -> D+ eta]cc"],
                    nickname='Spec_DEta',
                    inputs=[D2HHH_DpToKmPipPip, SharedNeutralLowPtChild_eta])
            ],
            'Spec_DpGammaTurbo': [
                TagDecayWithNeutral(
                    'Spec_DpGamma',
                    decay=["[D*(2010)+ -> D+ gamma]cc"],
                    nickname='Spec_DGamma',
                    inputs=[D2HHH_DpToKmPipPip, SharedNeutralLowPtChild_gamma])
            ],
            'Spec_LcPiTurbo': [
                TagDecay('Spec_LcPi',
                         decay=[
                             "[Delta(1905)++ -> Lambda_c+ pi+]cc",
                             "[D*(2007)0 -> Lambda_c+ pi-]cc"
                         ],
                         nickname='Spec_DPi',
                         inputs=[LcpForSpectroscopy, BachelorPi])
            ],
            'Spec_LcKsTurbo': [
                TagDecay('Spec_LcK',
                         decay=["[D*(2010)+ -> Lambda_c+ KS0]cc"],
                         nickname='Spec_DK',
                         inputs=[
                             LcpForSpectroscopy, CharmHadSharedKsLL,
                             CharmHadSharedKsDD
                         ])
            ],
            'Spec_LcKpmTurbo': [
                TagDecay('Spec_LcK',
                         decay=[
                             "[Delta(1905)++ -> Lambda_c+ K+]cc",
                             "[D*(2007)0 -> Lambda_c+ K-]cc"
                         ],
                         nickname='Spec_DK',
                         inputs=[LcpForSpectroscopy, BachelorK])
            ],
            'Spec_LcPrTurbo': [
                TagDecay('Spec_LcPr',
                         decay=[
                             "[Delta(1905)++ -> Lambda_c+ p+]cc",
                             "[D*(2007)0 -> Lambda_c+ p~-]cc"
                         ],
                         nickname='Spec_DPr',
                         inputs=[LcpForSpectroscopy, BachelorPr])
            ],
            'Spec_LcLambdaTurbo': [
                TagDecay('Spec_LcLambda',
                         decay=[
                             "[D*(2010)+ -> Lambda_c+ Lambda0]cc",
                             "[D*(2010)- -> Lambda_c~- Lambda0]cc"
                         ],
                         nickname='Spec_DLambda',
                         inputs=[
                             LcpForSpectroscopy,
                             CharmHadSharedSecondaryLambdaLL,
                             CharmHadSharedSecondaryLambdaDD
                         ])
            ],
            'Spec_LcPi0Turbo': [
                TagDecayWithNeutral(
                    'Spec_LcPi0',
                    decay=["[D*(2010)+ -> Lambda_c+ pi0]cc"],
                    nickname='Spec_DPi',
                    inputs=[LcpForSpectroscopy, SharedNeutralLowPtChild_pi0])
            ],
            'Spec_LcEtaTurbo': [
                TagDecayWithNeutral(
                    'Spec_LcEta',
                    decay=["[D*(2010)+ -> Lambda_c+ eta]cc"],
                    nickname='Spec_DEta',
                    inputs=[LcpForSpectroscopy, SharedNeutralLowPtChild_eta])
            ],
            'Spec_LcGammaTurbo': [
                TagDecayWithNeutral(
                    'Spec_LcGamma',
                    decay=["[D*(2010)+ -> Lambda_c+ gamma]cc"],
                    nickname='Spec_DGamma',
                    inputs=[LcpForSpectroscopy, SharedNeutralLowPtChild_gamma])
            ],
            'Spec_Dst_KPi_PiTurbo': [
                TagDecay('Spec_D0Pi',
                         decay=[
                             "[Delta(1905)++ -> D*(2010)+ pi+]cc",
                             "[D*(2007)0 -> D*(2010)+ pi-]cc"
                         ],
                         nickname='Spec_DPi',
                         inputs=[dstarKPi, BachelorPi])
            ],
            'Spec_Dst_KPi_KsTurbo': [
                TagDecay(
                    'Spec_D0K',
                    decay=["[Delta(1905)~+ -> D*(2010)+ KS0]cc"],
                    nickname='Spec_DK',
                    inputs=[dstarKPi, CharmHadSharedKsLL, CharmHadSharedKsDD])
            ],
            'Spec_Dst_KPi_KpmTurbo': [
                TagDecay('Spec_D0K',
                         decay=[
                             "[Delta(1905)++ -> D*(2010)+ K+]cc",
                             "[D*(2007)0 -> D*(2010)+ K-]cc"
                         ],
                         nickname='Spec_DK',
                         inputs=[dstarKPi, BachelorK])
            ],
            'Spec_Dst_KPi_PrTurbo': [
                TagDecay('Spec_D0Pr',
                         decay=[
                             "[Delta(1905)++ -> D*(2010)+ p+]cc",
                             "[D*(2007)0 -> D*(2010)+ p~-]cc"
                         ],
                         nickname='Spec_DPr',
                         inputs=[dstarKPi, BachelorPr])
            ],
            'Spec_Dst_KPi_LambdaTurbo': [
                TagDecay('Spec_D0Lambda',
                         decay=[
                             "[Delta(1905)~+ -> D*(2010)+ Lambda0]cc",
                             "[D*(2010)- -> D*(2010)- Lambda0]cc"
                         ],
                         nickname='Spec_DLambda',
                         inputs=[
                             dstarKPi, CharmHadSharedSecondaryLambdaLL,
                             CharmHadSharedSecondaryLambdaDD
                         ])
            ],
            'Spec_Dst_KPi_Pi0Turbo': [
                TagDecayWithNeutral(
                    'Spec_DstPi0',
                    decay=["[Delta(1905)~+ -> D*(2010)+  pi0]cc"],
                    nickname='Spec_DPi',
                    inputs=[dstarKPi, SharedNeutralLowPtChild_pi0])
            ],
            'Spec_Dst_KPi_EtaTurbo': [
                TagDecayWithNeutral(
                    'Spec_DstEta',
                    decay=["[Delta(1905)~+ -> D*(2010)+ eta]cc"],
                    nickname='Spec_DEta',
                    inputs=[dstarKPi, SharedNeutralLowPtChild_eta])
            ],
            'Spec_Dst_KPi_GammaTurbo': [
                TagDecayWithNeutral(
                    'Spec_DstGamma',
                    decay=["[Delta(1905)~+ -> D*(2010)+ gamma]cc"],
                    nickname='Spec_DGamma',
                    inputs=[dstarKPi, SharedNeutralLowPtChild_gamma])
            ],
            'Spec_Dst_K3Pi_PiTurbo': [
                TagDecay('Spec_D0Pi',
                         decay=[
                             "[Delta(1905)++ -> D*(2010)+ pi+]cc",
                             "[D*(2007)0 -> D*(2010)+ pi-]cc"
                         ],
                         nickname='Spec_DPi',
                         inputs=[dstarK3Pi, BachelorPi])
            ],
            'Spec_Dst_K3Pi_KsTurbo': [
                TagDecay(
                    'Spec_D0K',
                    decay=["[Delta(1905)~+ -> D*(2010)+ KS0]cc"],
                    nickname='Spec_DK',
                    inputs=[dstarK3Pi, CharmHadSharedKsLL, CharmHadSharedKsDD])
            ],
            'Spec_Dst_K3Pi_KpmTurbo': [
                TagDecay('Spec_D0K',
                         decay=[
                             "[Delta(1905)++ -> D*(2010)+ K+]cc",
                             "[D*(2007)0 -> D*(2010)+ K-]cc"
                         ],
                         nickname='Spec_DK',
                         inputs=[dstarK3Pi, BachelorK])
            ],
            'Spec_Dst_K3Pi_PrTurbo': [
                TagDecay('Spec_D0Pr',
                         decay=[
                             "[Delta(1905)++ -> D*(2010)+ p+]cc",
                             "[D*(2007)0 -> D*(2010)+ p~-]cc"
                         ],
                         nickname='Spec_DPr',
                         inputs=[dstarK3Pi, BachelorPr])
            ],
            'Spec_Dst_K3Pi_LambdaTurbo': [
                TagDecay('Spec_D0Lambda',
                         decay=[
                             "[Delta(1905)~+ -> D*(2010)+ Lambda0]cc",
                             "[D*(2010)- -> D*(2010)- Lambda0]cc"
                         ],
                         nickname='Spec_DLambda',
                         inputs=[
                             dstarK3Pi, CharmHadSharedSecondaryLambdaLL,
                             CharmHadSharedSecondaryLambdaDD
                         ])
            ],
            'Spec_Dst_K3Pi_Pi0Turbo': [
                TagDecayWithNeutral(
                    'Spec_DstPi0',
                    decay=["[Delta(1905)~+ -> D*(2010)+ pi0]cc"],
                    nickname='Spec_DPi',
                    inputs=[dstarK3Pi, SharedNeutralLowPtChild_pi0])
            ],
            'Spec_Dst_K3Pi_EtaTurbo': [
                TagDecayWithNeutral(
                    'Spec_DstEta',
                    decay=["[Delta(1905)~+ -> D*(2010)+  eta]cc"],
                    nickname='Spec_DEta',
                    inputs=[dstarK3Pi, SharedNeutralLowPtChild_eta])
            ],
            'Spec_Dst_K3Pi_GammaTurbo': [
                TagDecayWithNeutral(
                    'Spec_DstGamma',
                    decay=["[Delta(1905)~+ -> D*(2010)+  gamma]cc"],
                    nickname='Spec_DGamma',
                    inputs=[dstarK3Pi, SharedNeutralLowPtChild_gamma])
            ],
        })

        return stages
Ejemplo n.º 7
0
    def locallines(self):
        from Stages import MassFilter
        from Stages import D02KsPiPi_LL, D02KsPiPi_DD
        from Stages import D02KsKPi_LL, D02KsKPi_DD
        from Stages import D02KsKK_LL, D02KsKK_DD
        from Stages import D02KsPiPi_LL_LTUNB, D02KsPiPi_DD_LTUNB
        from Stages import D02KsKPi_LL_LTUNB, D02KsKPi_DD_LTUNB
        from Stages import D02KsKK_LL_LTUNB, D02KsKK_DD_LTUNB
        from Stages import TagDecay
        from Stages import SharedSoftTagChild_pi

        Filtered_D02KsPiPi_LL = MassFilter('D02KshPiPi_LL',
                                           inputs=[D02KsPiPi_LL])
        Filtered_D02KsPiPi_DD = MassFilter('D02KshPiPi_DD',
                                           inputs=[D02KsPiPi_DD])
        Filtered_D02KsKPi_LL = MassFilter('D02KshKPi_LL', inputs=[D02KsKPi_LL])
        Filtered_D02KsKPi_DD = MassFilter('D02KshKPi_DD', inputs=[D02KsKPi_DD])
        Filtered_D02KsKK_LL = MassFilter('D02KshKK_LL', inputs=[D02KsKK_LL])
        Filtered_D02KsKK_DD = MassFilter('D02KshKK_DD', inputs=[D02KsKK_DD])

        Filtered_D02KsPiPi_LL_LTUNB = MassFilter('D02KshPiPi_LL',
                                                 inputs=[D02KsPiPi_LL_LTUNB])
        Filtered_D02KsPiPi_DD_LTUNB = MassFilter('D02KshPiPi_DD',
                                                 inputs=[D02KsPiPi_DD_LTUNB])
        Filtered_D02KsKPi_LL_LTUNB = MassFilter('D02KshKPi_LL',
                                                inputs=[D02KsKPi_LL_LTUNB])
        Filtered_D02KsKPi_DD_LTUNB = MassFilter('D02KshKPi_DD',
                                                inputs=[D02KsKPi_DD_LTUNB])
        Filtered_D02KsKK_LL_LTUNB = MassFilter('D02KshKK_LL',
                                               inputs=[D02KsKK_LL_LTUNB])
        Filtered_D02KsKK_DD_LTUNB = MassFilter('D02KshKK_DD',
                                               inputs=[D02KsKK_DD_LTUNB])

        ## We can probably use only D*-tagged HHKs candidates, so let's make
        ## the corresponding D*-tagged lines.
        ##
        ## Recall that the first argument of Dst2D0pi is the "name" used in
        ## the dictionary of cuts and the second argument is the "d0" list to
        ## be used.
        ##
        ## All of the following lines use a common dictionary
        ## "name":  Dst2D0pi_D02HHKsh
        ## as the channels should be sufficiently similar to use common cuts.
        Dstp2D0Pip_D02KS0PimPip_KS0LL = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsPiPi_LL, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0PimPip_KS0DD = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsPiPi_DD, SharedSoftTagChild_pi])

        ## These lines will produce
        ## D*+ --> D0,pi+; D0 --> D0 --> K-,pi+,Kshort candidates
        ## and also D*- --> D0bar,pi-;  D0bar --> K+,pi-,Kshort candidates;
        ## Ignoring CPV in K0 and K0bar decays to Kshort, these are CP
        ## conjugate decays.
        Dstp2D0Pip_D02KS0KmPip_KS0LL = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D~0 pi-"],
            inputs=[Filtered_D02KsKPi_LL, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0KmPip_KS0DD = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D~0 pi-"],
            inputs=[Filtered_D02KsKPi_DD, SharedSoftTagChild_pi])

        ## These lines will produce
        ## D*+ --> D0,pi+; D0 --> D0 --> K+,pi-,Kshort candidates
        ## and also D*- --> D0bar,pi-;  D0bar --> K-,pi+,Kshort candidates;
        ## Ignoring CPV in K0 and K0bar decays to Kshort, these are CP
        ## conjugate decays.
        ##
        ## Note that the code reuses the D02KsKPi_XX inputs where
        ## D0 --> Ks,K-,pi+ and D0bar --> Ks,K+,pi-.  To allow this reuse,
        ## with the charge assignments wanted here, the descriptors say that
        ## the D*+ decays to D0bar,pi+ and the D*- decays to D0,pi-.
        ## This is OK because the descriptor is not encoded in the candidate
        ## beyond Hlt.
        Dstp2D0Pip_D02KS0KpPim_KS0LL = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D~0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsKPi_LL, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0KpPim_KS0DD = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D~0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsKPi_DD, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0KmKp_KS0LL = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsKK_LL, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0KmKp_KS0DD = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsKK_DD, SharedSoftTagChild_pi])
        ##
        ##  create the LTUNB version of these D* combiners

        Dstp2D0Pip_D02KS0PimPip_KS0LL_LTUNB = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsPiPi_LL_LTUNB, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0PimPip_KS0DD_LTUNB = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsPiPi_DD_LTUNB, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0KmPip_KS0LL_LTUNB = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D~0 pi-"],
            inputs=[Filtered_D02KsKPi_LL_LTUNB, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0KmPip_KS0DD_LTUNB = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D~0 pi-"],
            inputs=[Filtered_D02KsKPi_DD_LTUNB, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0KpPim_KS0LL_LTUNB = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D~0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsKPi_LL_LTUNB, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0KpPim_KS0DD_LTUNB = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D~0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsKPi_DD_LTUNB, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0KmKp_KS0LL_LTUNB = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsKK_LL_LTUNB, SharedSoftTagChild_pi])

        Dstp2D0Pip_D02KS0KmKp_KS0DD_LTUNB = TagDecay(
            'Dst2D0pi_D02HHKsh',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[Filtered_D02KsKK_DD_LTUNB, SharedSoftTagChild_pi])
        ##

        ## The stages dictionary should be a clear two-column list from
        ##   which the lines defined in this module can be directly read.
        ## mdsstages = {'D02KS0PimPip_KS0LLTurbo'       : [MassFilter('D02KshPiPi_LL',inputs=[D02KsPiPi_LL])],
        ## mds          'D02KS0PimPip_KS0DDTurbo'       : [MassFilter('D02KshPiPi_DD',inputs=[D02KsPiPi_DD])],
        ## mds          'D02KS0KmPip_KS0LLTurbo'        : [MassFilter('D02KshKPi_LL',inputs=[D02KsKPi_LL])],
        ## mds          'D02KS0KmPip_KS0DDTurbo'        : [MassFilter('D02KshKPi_DD',inputs=[D02KsKPi_DD])],
        ## mds          'D02KS0KmKp_KS0LLTurbo'         : [MassFilter('D02KshKK_LL',inputs=[D02KsKK_LL])],
        ## mds          'D02KS0KmKp_KS0DDTurbo'         : [MassFilter('D02KshKK_DD',inputs=[D02KsKK_DD])],
        stages = {
            'Dstp2D0Pip_D02KS0PimPip_KS0LLTurbo':
            [Dstp2D0Pip_D02KS0PimPip_KS0LL],
            'Dstp2D0Pip_D02KS0PimPip_KS0DDTurbo':
            [Dstp2D0Pip_D02KS0PimPip_KS0DD],
            'Dstp2D0Pip_D02KS0KmPip_KS0LLTurbo':
            [Dstp2D0Pip_D02KS0KmPip_KS0LL],
            'Dstp2D0Pip_D02KS0KmPip_KS0DDTurbo':
            [Dstp2D0Pip_D02KS0KmPip_KS0DD],
            'Dstp2D0Pip_D02KS0KpPim_KS0LLTurbo':
            [Dstp2D0Pip_D02KS0KpPim_KS0LL],
            'Dstp2D0Pip_D02KS0KpPim_KS0DDTurbo':
            [Dstp2D0Pip_D02KS0KpPim_KS0DD],
            'Dstp2D0Pip_D02KS0KmKp_KS0LLTurbo': [Dstp2D0Pip_D02KS0KmKp_KS0LL],
            'Dstp2D0Pip_D02KS0KmKp_KS0DDTurbo': [Dstp2D0Pip_D02KS0KmKp_KS0DD],

            ## and the corresponding LTUNB line
            'Dstp2D0Pip_D02KS0PimPip_KS0LL_LTUNBTurbo':
            [Dstp2D0Pip_D02KS0PimPip_KS0LL_LTUNB],
            'Dstp2D0Pip_D02KS0PimPip_KS0DD_LTUNBTurbo':
            [Dstp2D0Pip_D02KS0PimPip_KS0DD_LTUNB],
            'Dstp2D0Pip_D02KS0KmPip_KS0LL_LTUNBTurbo':
            [Dstp2D0Pip_D02KS0KmPip_KS0LL_LTUNB],
            'Dstp2D0Pip_D02KS0KmPip_KS0DD_LTUNBTurbo':
            [Dstp2D0Pip_D02KS0KmPip_KS0DD_LTUNB],
            'Dstp2D0Pip_D02KS0KpPim_KS0LL_LTUNBTurbo':
            [Dstp2D0Pip_D02KS0KpPim_KS0LL_LTUNB],
            'Dstp2D0Pip_D02KS0KpPim_KS0DD_LTUNBTurbo':
            [Dstp2D0Pip_D02KS0KpPim_KS0DD_LTUNB],
            'Dstp2D0Pip_D02KS0KmKp_KS0LL_LTUNBTurbo': [
                Dstp2D0Pip_D02KS0KmKp_KS0LL_LTUNB
            ],
            'Dstp2D0Pip_D02KS0KmKp_KS0DD_LTUNBTurbo': [
                Dstp2D0Pip_D02KS0KmKp_KS0DD_LTUNB
            ]
        }

        return stages
Ejemplo n.º 8
0
    def locallines(self):
        from Stages import MassFilter
        from Stages import D2HH0_3Body_Combiner
        from Stages import TagDecay, TagDecayWithNeutral
        from Stages import D0_gg_NeutralCombiner, D02_ee_Combiner
        from Stages import D2RhoHG_3Body_Combiner
        from Stages import D2HH_RhoToPipPim
        from Stages import SharedNoPIDDetachedChild_pi
        from Stages import SharedNoPIDDetachedChild_K
        from Stages import SharedNeutralLowPtChild_gamma
        from Stages import SharedNeutralLowPtChild_pi0R
        from Stages import SharedNeutralLowPtChild_pi0M
        from Stages import SharedNeutralLowPtChild_eta
        from Stages import SharedSoftTagChild_pi
        from Stages import Conv_Photon_2EmEp
        from Inputs import Hlt2NoPIDsPions, Hlt2NoPIDsPhotons, Hlt2NoPIDsKaons

        ## D+ -> pi+ pi0, pi0 -> (e- e+) gamma.  (e- e+) labeled KS0.
        D2PiPi0_eegamma = D2HH0_3Body_Combiner(
            'Comb',
            decay="[D+ -> KS0 gamma pi+]cc",
            inputs=[Conv_Photon_2EmEp, Hlt2NoPIDsPhotons, Hlt2NoPIDsPions],
            nickname='D2HPi0',
            shared=False)

        ## D+ -> K+ pi0, pi0 -> (e- e+) gamma.  (e- e+) labeled KS0.
        D2KPi0_eegamma = D2HH0_3Body_Combiner(
            'Comb',
            decay="[D+ -> KS0 gamma K+]cc",
            inputs=[Conv_Photon_2EmEp, Hlt2NoPIDsPhotons, Hlt2NoPIDsKaons],
            nickname='D2HPi0',
            shared=False)

        ## D+ -> pi+ pi0, eta -> (e- e+) gamma.  (e- e+) labeled KS0.
        D2PiEta_eegamma = D2PiPi0_eegamma.clone('Comb', nickname='D2HEta')

        ## D+ -> K+ pi0, eta -> (e- e+) gamma.  (e- e+) labeled KS0.
        D2KEta_eegamma = D2KPi0_eegamma.clone('Comb', nickname='D2HEta')

        ## D*+ -> D0 pi+, D0 -> e+ e-.  Why is this in CharmHad?
        Dstar2PiD0_ee = TagDecay(
            'Dstar2PiD0',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[D02_ee_Combiner('D0_ee'), SharedSoftTagChild_pi])

        ## D*+ -> D0 pi+, D0 -> gamma gamma, one gamma -> e- e+.
        Dstar2PiD0_eegamma = TagDecayWithNeutral(
            'Dstar2PiD0',
            decay=["D*(2010)+ -> D0 pi+", "D*(2010)- -> D0 pi-"],
            inputs=[D0_gg_NeutralCombiner('D0_gg'), SharedSoftTagChild_pi])

        ## D+ -> eta pi+, eta -> (pi+ pi-) gamma, (pi+ pi-) labeled rho(770)0.
        D2EtaPi_hhgamma = D2RhoHG_3Body_Combiner(
            'D2EtaPi_hhgamma',
            decay=["D+ -> rho(770)0 pi+ gamma", "D- -> rho(770)0 pi- gamma"],
            inputs=[
                D2HH_RhoToPipPim, SharedNoPIDDetachedChild_pi,
                SharedNeutralLowPtChild_gamma
            ])

        ## D+ -> eta K+, eta -> (pi+ pi-) gamma, (pi+ pi-) labeled rho(770)0.
        D2EtaK_hhgamma = D2RhoHG_3Body_Combiner(
            'D2EtaK_hhgamma',
            decay=["D+ -> rho(770)0 K+ gamma", "D- -> rho(770)0 K- gamma"],
            inputs=[
                D2HH_RhoToPipPim, SharedNoPIDDetachedChild_K,
                SharedNeutralLowPtChild_gamma
            ])

        ## D+ -> eta' pi+, eta' -> (pi+ pi-) gamma, (pi+ pi-) labeled rho(770)0.
        D2EtaPrimePi_hhgamma = D2EtaPi_hhgamma.clone(
            'D2EtaPrimePi_hhgamma', nickname='D2EtaPrimePi_hhgamma')

        ## D+ -> eta' K+, eta' -> (pi+ pi-) gamma, (pi+ pi-) labeled rho(770)0.
        D2EtaPrimeK_hhgamma = D2EtaK_hhgamma.clone(
            'D2EtaPrimeK_hhgamma', nickname='D2EtaPrimeK_hhgamma')

        ## D+ -> eta pi+, eta -> (pi+ pi-) pi0, (pi+ pi-) labeled rho(770)0.
        D2EtaPi_3hR = D2RhoHG_3Body_Combiner(
            'D2EtaPi_3hR',
            decay=["D+ -> rho(770)0 pi+ pi0", "D- -> rho(770)0 pi- pi0"],
            inputs=[
                D2HH_RhoToPipPim, SharedNoPIDDetachedChild_pi,
                SharedNeutralLowPtChild_pi0R
            ])
        D2EtaPi_3hM = D2EtaPi_3hR.clone('D2EtaPi_3hM',
                                        nickname='D2EtaPi_3hM',
                                        inputs=[
                                            D2HH_RhoToPipPim,
                                            SharedNoPIDDetachedChild_pi,
                                            SharedNeutralLowPtChild_pi0M
                                        ])

        ## D+ -> eta K+, eta -> (pi+ pi-) pi0, (pi+ pi-) labeled rho(770)0.
        D2EtaK_3hR = D2RhoHG_3Body_Combiner(
            'D2EtaK_3hR',
            decay=["D+ -> rho(770)0 K+ pi0", "D- -> rho(770)0 K- pi0"],
            inputs=[
                D2HH_RhoToPipPim, SharedNoPIDDetachedChild_K,
                SharedNeutralLowPtChild_pi0R
            ])
        D2EtaK_3hM = D2EtaK_3hR.clone('D2EtaK_3hM',
                                      nickname='D2EtaK_3hM',
                                      inputs=[
                                          D2HH_RhoToPipPim,
                                          SharedNoPIDDetachedChild_K,
                                          SharedNeutralLowPtChild_pi0M
                                      ])

        ## D+ -> eta' pi+, eta' -> (pi+ pi-) eta, eta -> gamma gamma
        ## (pi+ pi-) labeled rho(770)0.
        D2EtaPrimePi_3h = D2RhoHG_3Body_Combiner(
            'D2EtaPrimePi_3h',
            decay=["D+ -> rho(770)0 pi+ eta", "D- -> rho(770)0 pi- eta"],
            inputs=[
                D2HH_RhoToPipPim, SharedNoPIDDetachedChild_pi,
                SharedNeutralLowPtChild_eta
            ])

        ## D+ -> eta' K+, eta' -> (pi+ pi-) eta, eta -> gamma gamma
        ## (pi+ pi-) labeled rho(770)0.
        D2EtaPrimeK_3h = D2RhoHG_3Body_Combiner(
            'D2EtaPrimeK_3h',
            decay=["D+ -> rho(770)0 K+ eta", "D- -> rho(770)0 K- eta"],
            inputs=[
                D2HH_RhoToPipPim, SharedNoPIDDetachedChild_K,
                SharedNeutralLowPtChild_eta
            ])

        ## The stages dictionary should be a clear two-column list from
        ##   which the lines defined in this module can be directly read.
        stages = {
            'Dp2PipPi0_Pi02EmEpG': [D2PiPi0_eegamma],
            'Dp2KpPi0_Pi02EmEpG': [D2KPi0_eegamma],
            'Dp2EtaPip_Eta2EmEpG': [D2PiEta_eegamma],
            'Dp2EtaKp_Eta2EmEpG': [D2KEta_eegamma],
            'Dstp2D0Pip_D02EmEp': [Dstar2PiD0_ee],
            'Dstp2D0Pip_D02GG_G2EmEp': [Dstar2PiD0_eegamma],
            'Dp2EtaPip_Eta2PimPipG': [D2EtaPi_hhgamma],
            'Dp2EtaKp_Eta2PimPipG': [D2EtaK_hhgamma],
            'Dp2EtapPip_Etap2PimPipG': [D2EtaPrimePi_hhgamma],
            'Dp2EtapKp_Etap2PimPipG': [D2EtaPrimeK_hhgamma],
            'Dp2EtaPip_Eta2PimPipPi0_Pi0R': [D2EtaPi_3hR],
            'Dp2EtaKp_Eta2PimPipPi0_Pi0R': [D2EtaK_3hR],
            'Dp2EtaPip_Eta2PimPipPi0_Pi0M': [D2EtaPi_3hM],
            'Dp2EtaKp_Eta2PimPipPi0_Pi0M': [D2EtaK_3hM],
            'Dp2EtapPip_Etap2EtaPimPip_EtaR': [D2EtaPrimePi_3h],
            'Dp2EtapKp_Etap2EtaPimPip_EtaR': [D2EtaPrimeK_3h]
        }
        return stages