示例#1
0
    def __F2__(self, Rho, conf):
        """
        Make a f_2(1950) -> p pbar
        """
        f2SubMMZAlg = SubPIDMMFilter(self.name+"_F2SubMMZ_Alg", Code= "DECTREE('rho(770)0 -> pi+ pi-')", MinMM=0, MaxMM=6050, PIDs = [ [ 'p+', 'p~-'] ]  )

        f2SubMMPAlg = SubPIDMMFilter(self.name+"_F2SubMMP_Alg", Code= "DECTREE('rho(770)0 -> pi+ pi+')", MinMM=0, MaxMM=6050, PIDs = [ [ 'p+', 'p+'] ]  )     

        f2SubMMMAlg = SubPIDMMFilter(self.name+"_F2SubMMM_Alg", Code= "DECTREE('rho(770)0 -> pi- pi-')", MinMM=0, MaxMM=6050, PIDs = [ [ 'p~-', 'p~-'] ]  )   

        f2SubMMZSel = Selection( self.name+"_F2SubMMZ_Sel", Algorithm = f2SubMMZAlg, RequiredSelections = [ Rho ] )

        f2SubMMPSel = Selection( self.name+"_F2SubMMP_Sel", Algorithm = f2SubMMPAlg, RequiredSelections = [ Rho ] )
        
        f2SubMMMSel = Selection( self.name+"_F2SubMMM_Sel", Algorithm = f2SubMMMAlg, RequiredSelections = [ Rho ] )
        
        f2Merge    = MergedSelection( self.name+"_F2Merge", RequiredSelections = [ f2SubMMZSel, f2SubMMPSel, f2SubMMMSel ] ) 

        f2SubAlg = SubstitutePID( self.name+"_F2Sub_Alg", 
                                   Code = "ALL" , #(DECTREE('rho(770)0 -> p+ p~-')) | (DECTREE('rho(770)0 -> p+ p+')) | (DECTREE('rho(770)0 -> p~- p~-'))",
                                   MaxChi2PerDoF = -666 )
        
        f2SubAlg.Substitutions = {
            'rho(770)0 -> p+ p~-' : 'f_2(1950)' ,
            'rho(770)0 -> p+ p+'   : 'f_2(1950)' ,
            'rho(770)0 -> p~- p~-' : 'f_2(1950)'
            }

        f2SubSel =  Selection( self.name+"_F2Sub_Sel", Algorithm = f2SubAlg, RequiredSelections = [ f2Merge ] )

        f2FilterAlg = FilterDesktop( Code = "(ABSID=='f_2(1950)')" )
        
        f2FilterSel = Selection( self.name + "_F2Filter", Algorithm = f2FilterAlg, RequiredSelections = [ f2SubSel ] )
        
        return f2FilterSel
示例#2
0
def topoSubPID(name, inputs):
    sub = SubstitutePID(name + 'SubPID', Code="DECTREE('X0 -> X X')")
    sub.MaxChi2PerDoF = -666
    sub.Substitutions = {'X0 -> X X': 'B0'}
    sel = Selection(name + 'FinalSel',
                    Algorithm=sub,
                    RequiredSelections=[inputs])
    filter = "INTREE(ID=='B0')"
    return filterSelection(name, filter, [sel])
示例#3
0
    def __Lambdastar__(self, Rho, conf):
        """
        Make a Lambdastar
        """
        lstarChangeAlg1 = SubstitutePID(
            self.name + "lstarChangeAlg1",
            Code=
            "(DECTREE('X0 -> X+ X-')) | (DECTREE('X0 -> X+ X+')) | (DECTREE('X0 -> X- X-')) ",
            Substitutions={
                ' X0 -> ^X+ X- ': 'p+',
                ' X0 -> X+ ^X- ': 'K-',
                ' X0 -> X+ X- ': 'Lambda(1520)0',
                ' X0 -> ^X+ X+ ': 'p+',
                ' X0 -> X+ ^X+ ': 'K+',
                ' X0 -> X+ X+ ': 'Lambda(1520)0',
                ' X0 -> ^X- X- ': 'p~-',
                ' X0 -> X- ^X- ': 'K-',
                ' X0 -> X- X- ': 'Lambda(1520)~0'
            },
            MaxParticles=20000,
            MaxChi2PerDoF=-666)

        lstarChangeAlg2 = SubstitutePID(
            self.name + "lstarChangeAlg2",
            Code=
            "(DECTREE('X0 -> X+ X-')) | (DECTREE('X0 -> X+ X+')) | (DECTREE('X0 -> X- X-')) ",
            Substitutions={
                ' X0 -> X+ ^X- ': 'p~-',
                ' X0 -> ^X+ X- ': 'K+',
                ' X0 -> X+ X- ': 'Lambda(1520)~0',
                ' X0 -> ^X+ X+ ': 'K+',
                ' X0 -> X+ ^X+ ': 'p+',
                ' X0 -> X+ X+ ': 'Lambda(1520)0',
                ' X0 -> ^X- X- ': 'K-',
                ' X0 -> X- ^X- ': 'p~-',
                ' X0 -> X- X- ': 'Lambda(1520)~0'
            },
            MaxParticles=20000,
            MaxChi2PerDoF=-666)

        lsDescr1 = Selection(self.name + "_Lambdastar_SubPIDAlg1",
                             Algorithm=lstarChangeAlg1,
                             RequiredSelections=[Rho])

        lsDescr2 = Selection(self.name + "_Lambdastar_SubPIDAlg2",
                             Algorithm=lstarChangeAlg2,
                             RequiredSelections=[Rho])

        pick = Selection(
            self.name + "_Lambdastar_PickDecay",
            Algorithm=FilterDesktop(
                Code=
                "(DECTREE('Lambda(1520)0 -> p+ K-')) | (DECTREE('Lambda(1520)~0 -> p~- K+')) | (DECTREE('Lambda(1520)0 -> p+ K+')) | (DECTREE('Lambda(1520)~0 -> p~- K-'))"
            ),
            RequiredSelections=[lsDescr1, lsDescr2])

        return pick
def subPID(name,p,d,inputs):
    sub = SubstitutePID(name+'SubPIDBeauty2XGamma',
                        Code="DECTREE('X0 -> X+ X-')")
    sub.MaxChi2PerDoF = -666
    sub.Substitutions = {'X0 -> ^X+ X-' : d[0],'X0 -> X+ ^X-' : d[1],
                         'X0 -> X+ X-'  : p}
    sel = Selection(name+'Beauty2XGammaSel',Algorithm=sub,
                    RequiredSelections=inputs)
    filter = "INTREE(ID=='%s') & INTREE(ID=='%s') & INTREE(ID=='%s')" \
             % (p,d[0],d[1])
    return filterSelection(name,filter,[sel])
示例#5
0
    def __Kstar__(self, Rho, conf):
        """
        Make a kstar
        """
        kstarChangeAlg1 = SubstitutePID(
            self.name + "kstarChangeAlg1",
            Code=
            "(DECTREE('X0 -> X+ X-')) | (DECTREE('X0 -> X+ X+')) | (DECTREE('X0 -> X- X-')) ",
            Substitutions={
                ' X0 -> ^X+ X- ': 'K+',
                ' X0 -> X+ X- ': 'K*(892)0',
                ' X0 -> ^X+ X+ ': 'K+',
                ' X0 -> X+ X+ ': 'K*(892)0',
                ' X0 -> ^X- X- ': 'K-',
                ' X0 -> X- X- ': 'K*(892)~0'
            },
            MaxParticles=20000,
            MaxChi2PerDoF=-666)

        kstarChangeAlg2 = SubstitutePID(
            self.name + "kstarChangeAlg2",
            Code=
            "(DECTREE('X0 -> X+ X-')) | (DECTREE('X0 -> X+ X+')) | (DECTREE('X0 -> X- X-')) ",
            Substitutions={
                ' X0 -> X+ ^X- ': 'K-',
                ' X0 -> X+ X- ': 'K*(892)~0',
                ' X0 -> X+ ^X+ ': 'K+',
                ' X0 -> X+ X+ ': 'K*(892)0',
                ' X0 -> X- ^X- ': 'K-',
                ' X0 -> X- X- ': 'K*(892)~0'
            },
            MaxParticles=20000,
            MaxChi2PerDoF=-666)

        ksDescr1 = Selection(self.name + "_Kstar_SubPIDAlg1",
                             Algorithm=kstarChangeAlg1,
                             RequiredSelections=[Rho])

        ksDescr2 = Selection(self.name + "_Kstar_SubPIDAlg2",
                             Algorithm=kstarChangeAlg2,
                             RequiredSelections=[Rho])

        pick = Selection(
            self.name + "_Kstar_PickDecay",
            Algorithm=FilterDesktop(
                Code=
                "(DECTREE('K*(892)0 -> K+ pi-')) | (DECTREE('K*(892)~0 -> K- pi+')) | (DECTREE('K*(892)0 -> K+ pi+')) | (DECTREE('K*(892)~0 -> K- pi-'))"
            ),
            RequiredSelections=[ksDescr1, ksDescr2])

        return pick
示例#6
0
def makeB2DstarX(sel, uppions, config):
    # change B to something that doesn't fly
    sub = SubstitutePID('SubPID' + sel.name(),
                        Code="DECTREE('Beauty -> Charm ...')")
    sub.MaxChi2PerDoF = -666
    sub.Substitutions = {'Beauty -> Charm ...': 'J/psi(1S)'}
    subsel = Selection(sel.name() + 'DstarUPSel',
                       Algorithm=sub,
                       RequiredSelections=[sel])
    filter = "INTREE(ID=='J/psi(1S)')"
    subsel = filterSelection(sel.name() + 'DstarUPFilter', filter, [subsel])
    # Delta M cut on D* (preambulo is below)
    #dmcut = '((ISD1 & ((MD1PI-MD1) < 180)) | (ISD2 & ((MD2PI-MD2) < 180)))'
    #dmcut = '((MD1PI-MD1) < 180) | ((MD2PI-MD2) < 180)'
    dmcut = "((((IDD1==421)|(IDD1==411)) & ((MD1PI-MD1) < 180)) | (((IDD2==421)|(IDD2==411)) & ((MD2PI-MD2) < 180)))"
    # add UP track
    combConfig = {'AMAXDOCA_MAX': '0.5*mm'}
    comboCuts = [LoKiCuts(['AMAXDOCA'], combConfig).code(), dmcut]
    comboCuts = LoKiCuts.combine(comboCuts)
    momCuts = LoKiCuts(['VCHI2DOF', 'BPVVDCHI2', 'BPVDIRA'], config).code()
    #did = "((ABSID=='D+')|(ABSID=='D0'))"
    preambulo = [
        'PXPI = ACHILD(PX,2)',
        'PYPI = ACHILD(PY,2)',
        'PZPI = ACHILD(PZ,2)',
        'EPI  = ACHILD(E,2)',
        'IDD1 = ACHILD(CHILD(ABSID,1),1)',
        #'ISD1 = ACHILD(CHILD(%s,1),1)' % did,
        'PXD1 = ACHILD(CHILD(PX,1),1)',
        'PYD1 = ACHILD(CHILD(PY,1),1)',
        'PZD1 = ACHILD(CHILD(PZ,1),1)',
        'ED1  = ACHILD(CHILD(E,1),1)',
        'MD1  = ACHILD(CHILD(M,1),1)',
        'MD1PI = sqrt((EPI+ED1)**2 - (PXPI+PXD1)**2 - (PYPI+PYD1)**2 - (PZPI+PZD1)**2)',
        #'ISD2 = ACHILD(CHILD(%s,2),1)' % did,
        'IDD2 = ACHILD(CHILD(ABSID,2),1)',
        'PXD2 = ACHILD(CHILD(PX,2),1)',
        'PYD2 = ACHILD(CHILD(PY,2),1)',
        'PZD2 = ACHILD(CHILD(PZ,2),1)',
        'ED2  = ACHILD(CHILD(E,2),1)',
        'MD2  = ACHILD(CHILD(M,2),1)',
        'MD2PI = sqrt((EPI+ED2)**2 - (PXPI+PXD2)**2 - (PYPI+PYD2)**2 - (PZPI+PZD2)**2)',
    ]
    cp = CombineParticles(CombinationCut=comboCuts,
                          MotherCut=momCuts,
                          Preambulo=preambulo,
                          DecayDescriptor='[B+ -> J/psi(1S) pi+]cc')
    return Selection('DstarUP' + sel.name(),
                     Algorithm=cp,
                     RequiredSelections=[uppions] + [subsel])
    def __K2__(self, A1, conf): 
        """
        SubPID:
            K_2 -> K K K
        """      
        #replace head with K_2(1770)
        _a1k2_SubPID = SubstitutePID(self.name+"_a1k2_SubPID", Code="(DECTREE('a_1(1260)+ -> pi+ pi+ pi-')) | (DECTREE('a_1(1260)- -> pi- pi- pi+'))",
                                      Substitutions={'a_1(1260)+ -> pi+ pi+ pi-' : 'K_2(1770)+', 'a_1(1260)- -> pi- pi- pi+' : 'K_2(1770)-'}, MaxParticles=20000, MaxChi2PerDoF=-666)
        _sel_k2 =  Selection(self.name+"_a1k2_SubPIDAlg",
                             Algorithm = _a1k2_SubPID, RequiredSelections = [A1])
        #replace daughters for K_2(1770)+, order is important for this tool
        _a1k2_SubPIDp = SubPIDMMFilter(self.name+"_a1k2_SubPIDp", Code="DECTREE('K_2(1770)+ -> pi+ pi+ pi-')",
                                       MinMM=0, MaxMM=6050, PIDs = [['K+','K+','K-']] )        
        _sel_k2p =  Selection(self.name+"_a1k2_SubPIDAlgp",
                              Algorithm = _a1k2_SubPIDp, RequiredSelections = [_sel_k2])
        #replace daughters for K_2(1770)-
        _a1k2_SubPIDm = SubPIDMMFilter(self.name+"_a1k2_SubPIDm", Code="DECTREE('K_2(1770)- -> pi- pi- pi+')",
                                       MinMM=0, MaxMM=6050, PIDs = [['K-','K-','K+']] )        
        _sel_k2m =  Selection(self.name+"_a1k2_SubPIDAlgm",
                              Algorithm = _a1k2_SubPIDm, RequiredSelections = [_sel_k2])

        pick = Selection(self.name+"_K2_PickDecay",
                     Algorithm = FilterDesktop( Code = "(DECTREE('K_2(1770)+ -> K- K+ K+')) | (DECTREE('K_2(1770)- -> K+ K- K-'))" ),
                     RequiredSelections = [_sel_k2p, _sel_k2m])

        return pick
示例#8
0
    def splitPhiPi(self, name, phiPiSelection):
        """Split the input phi pi+ Selection in to a D+ and D_s+ selection.

        Returns a two-tuple as (D+ Selection, D_s+ Selection).
        Keyword arguments:
        phiPiSelection -- A single Selection instance; output of makeD2PhiPi
        """
        dpFilter = FilterDesktop(
            'FilterDp{0}'.format(name),
            Code="(ADMASS('D+') < {0[Dp_ADAMASS_WIN]})".format(self.config))
        dsFilter = FilterDesktop(
            'FilterDs{0}'.format(name),
            Code="(ADMASS('D_s+') < {0[Ds_ADAMASS_WIN]})".format(self.config))

        dpSel = Selection('SelFilteredDp{0}'.format(name),
                          Algorithm=dpFilter,
                          RequiredSelections=[phiPiSelection])
        dsSel = Selection('SelFilteredDs{0}'.format(name),
                          Algorithm=dsFilter,
                          RequiredSelections=[phiPiSelection])

        # The PhiPi selection is labelled as a D_s+, so rename the candidates
        # in the Dp selection as such
        dpSubPID = SubstitutePID(name='SubPidDp{0}'.format(name),
                                 Code="DECTREE('[D_s+ -> X0 X+]CC')",
                                 Substitutions={
                                     'D_s+ -> X0 X+': 'D+',
                                     'D_s- -> X0 X-': 'D-'
                                 },
                                 MaxChi2PerDoF=-1)
        dpSubPIDSel = Selection('SubPIDDpSel{0}'.format(name),
                                Algorithm=dpSubPID,
                                RequiredSelections=[dpSel])

        return dpSubPIDSel, dsSel
示例#9
0
 def __F2__(self, Rho, conf):
     """
     Make a f_2(1950) -> p pbar
     """
     f2ChangeAlg1 = SubstitutePID(
         self.name + "f2ChangeAlg",
         Code=
         "(DECTREE('X0 -> X+ X-')) | (DECTREE('X0 -> X+ X+')) | (DECTREE('X0 -> X- X-')) ",
         Substitutions={
             ' X0 -> ^X+ X- ': 'p+',
             ' X0 -> X+ ^X- ': 'p~-',
             ' X0 -> X+ X- ': 'f_2(1950)',
             ' X0 -> ^X+ X+ ': 'p+',
             ' X0 -> X+ ^X+ ': 'p+',
             ' X0 -> X+ X+ ': 'f_2(1950)',
             ' X0 -> ^X- X- ': 'p~-',
             ' X0 -> X- ^X- ': 'p~-',
             ' X0 -> X- X- ': 'f_2(1950)'
         },
         MaxParticles=20000,
         MaxChi2PerDoF=-666)
     f2Descr1 = Selection(self.name + "_F2_SubPIDAlg",
                          Algorithm=f2ChangeAlg1,
                          RequiredSelections=[Rho])
     pick = Selection(
         self.name + "_F2_PickDecay",
         Algorithm=FilterDesktop(
             Code=
             "(DECTREE('f_2(1950) -> p+ p~-')) | (DECTREE('f_2(1950) -> p+ p+')) | (DECTREE('f_2(1950) -> p~- p~-'))"
         ),
         RequiredSelections=[f2Descr1])
     return pick
示例#10
0
    def __K1__(self, A1, conf): 
        """
        SubPID:
            K_1 -> K pi pi
        """      
        #replace head with K_1(1270)
        _a1k1_SubPID = SubstitutePID(self.name+"_a1k1_SubPID", Code="(DECTREE('a_1(1260)+ -> pi+ pi+ pi-')) | (DECTREE('a_1(1260)- -> pi- pi- pi+'))",
                                     Substitutions={'a_1(1260)+ -> pi+ pi+ pi-' : 'K_1(1270)+', 'a_1(1260)- -> pi- pi- pi+' : 'K_1(1270)-'}, MaxChi2PerDoF=-666)
        _sel_k1 =  Selection(self.name+"_a1k1_SubPIDAlg",
                             Algorithm = _a1k1_SubPID, RequiredSelections = [A1])
        #replace daughters for K_1(1270)+, order is important for this tool
        _a1k1_SubPIDp = SubPIDMMFilter(self.name+"_a1k1_SubPIDp", Code="DECTREE('K_1(1270)+ -> pi+ pi+ pi-')",
                                       MinMM=0, MaxMM=conf['A1_Comb_MassHigh'], PIDs = [['K+','pi+','pi-'], ['pi+','K+','pi-']] ) 
        _sel_k1p =  Selection(self.name+"_a1k1_SubPIDAlgp",
                              Algorithm = _a1k1_SubPIDp, RequiredSelections = [_sel_k1])
        #replace daughters for K_1(1270)-
        _a1k1_SubPIDm = SubPIDMMFilter(self.name+"_a1k1_SubPIDm", Code="DECTREE('K_1(1270)- -> pi- pi- pi+')",
                                       MinMM=0, MaxMM=conf['A1_Comb_MassHigh'], PIDs = [['K-','pi-','pi+'], ['pi-','K-','pi+']] ) 
        _sel_k1m =  Selection(self.name+"_a1k1_SubPIDAlgm",
                              Algorithm = _a1k1_SubPIDm, RequiredSelections = [_sel_k1])

        pick = Selection(self.name+"_K1_PickDecay",
                     Algorithm = FilterDesktop( Code = "(DECTREE('K_1(1270)+ -> K+ pi+ pi-')) | (DECTREE('K_1(1270)- -> pi+ K- pi-'))" ),
                     RequiredSelections = [_sel_k1p, _sel_k1m])

        return pick
    def __Phi__(self, Rho, conf):
        """
        Make a phi
        """      
        phiChangeAlg1 = SubstitutePID( self.name+"phiChangeAlg",
                                     Code = "(DECTREE('X0 -> X+ X-')) | (DECTREE('X0 -> X+ X+')) | (DECTREE('X0 -> X- X-')) ",
                                     Substitutions = { ' X0 -> ^X+ X- ' : 'K+' ,
                                                       ' X0 -> X+ ^X- ' : 'K-' ,
                                                       ' X0 -> X+ X- ' : 'phi(1020)',
                                                       ' X0 -> ^X+ X+ ' : 'K+',
                                                       ' X0 -> X+ ^X+ ' : 'K+',
                                                       ' X0 -> X+ X+ ' : 'phi(1020)',
                                                       ' X0 -> ^X- X- ' : 'K-',
                                                       ' X0 -> X- ^X- ' : 'K-',
                                                       ' X0 -> X- X- ' : 'phi(1020)' }, 
                                     MaxParticles = 20000,
                                     MaxChi2PerDoF = -666 )

        phiDescr1 =  Selection( self.name+"_Phi_SubPIDAlg",
                                Algorithm = phiChangeAlg1,
                                RequiredSelections = [Rho])
    
        pick = Selection(self.name+"_Phi_PickDecay",
                     Algorithm = FilterDesktop( Code = "(DECTREE('phi(1020) -> K+ K-')) | (DECTREE('phi(1020) -> K+ K+')) | (DECTREE('phi(1020) -> K- K-'))" ),
                     RequiredSelections = [phiDescr1])
    
        return pick
示例#12
0
def filterEE(which,econf,xconf,inputs):
    code = "(ID=='J/psi(1S)') & (PT > %s) & (MINTREE('e+'==ABSID,PIDe) > %s)" \
           % (xconf['PT_MIN'],econf['PIDe_MIN'])
    code += " & (MINTREE('e+'==ABSID,MIPCHI2DV(PRIMARY)) > %s)" \
            % econf['MIPCHI2DV_MIN']
    code += " & (MINTREE('e+'==ABSID,PT) > %s)" % econf['PT_MIN']
    code += " & (MAXTREE('e+'==ABSID,TRGHP) < %s)" % econf['TRGHP_MAX']
    code = LoKiCuts.combine([code,LoKiCuts(['HASVERTEX','BPVVDCHI2','VCHI2DOF'],
                                           xconf).code()])
    #print "filterEE: ", code
    sel = Selection(which+'FilterEEDarkBosonFilter',
                    Algorithm=FilterDesktop(Code=code),
                    RequiredSelections=inputs)
    sub = SubstitutePID(which+'EESubPIDDarkBoson',
                        Code="DECTREE('J/psi(1S) -> e+ e-')")
    sub.MaxChi2PerDoF = -666
    sub.Substitutions = {'J/psi(1S) -> e+ e-'  : 'KS0'}
    return Selection(which+'EESubPIDDarkBosonSel',Algorithm=sub,
                     RequiredSelections=[sel])
示例#13
0
    def __Lambdastar__(self, Rho, conf):
        """
        Make a Lambdastar
        """
        lambdastarSubMMZAlg = SubPIDMMFilter(self.name+"_LambdastarSubMMZ_Alg", Code= "DECTREE('rho(770)0 -> pi+ pi-')", MinMM=0, MaxMM=6050, PIDs = [ [ 'p+', 'K-'], ['K+', 'p~-' ] ])
        
        lambdastarSubMMPAlg = SubPIDMMFilter(self.name+"_LambdastarSubMMP_Alg", Code= "DECTREE('rho(770)0 -> pi+ pi+')", MinMM=0, MaxMM=6050, PIDs = [ [ 'p+', 'K+'], ['K+', 'p+' ] ])     

        lambdastarSubMMMAlg = SubPIDMMFilter(self.name+"_LambdastarSubMMM_Alg", Code= "DECTREE('rho(770)0 -> pi- pi-')", MinMM=0, MaxMM=6050, PIDs = [ [ 'p~-', 'K-'], ['K-', 'p~-' ] ]) 

        lambdastarSubMMZSel = Selection( self.name+"_LambdastarSubMMZ_Sel", Algorithm = lambdastarSubMMZAlg, RequiredSelections = [ Rho ] )

        lambdastarSubMMPSel = Selection( self.name+"_LambdastarSubMMP_Sel", Algorithm = lambdastarSubMMPAlg, RequiredSelections = [ Rho ] )
        
        lambdastarSubMMMSel = Selection( self.name+"_LambdastarSubMMM_Sel", Algorithm = lambdastarSubMMMAlg, RequiredSelections = [ Rho ] )
        
        lambdastarMerge     = MergedSelection( self.name+"_LambdastarMerge", RequiredSelections = [ lambdastarSubMMZSel, lambdastarSubMMPSel, lambdastarSubMMMSel ] )

        lambdastarSubAlg    = SubstitutePID( self.name+"_LambdastarSub_Alg", Code = "ALL", MaxChi2PerDoF = -666 )

        #lambdastarSubAlg.Code = "ALL"
        
        #(DECTREE('rho(770)0 -> p+ K-')) | (DECTREE('rho(770)0 -> K+ p~-')) | (DECTREE('rho(770)0 -> p+ K+')) | (DECTREE('rho(770)0 -> p~- K-'))" 
        
        lambdastarSubAlg.Substitutions = {
            'rho(770)0 -> p+ K-' : 'Lambda(1520)0',
            'rho(770)0 -> p+ K+' : 'Lambda(1520)0',
            'rho(770)0 -> p~- K-' : 'Lambda(1520)~0',
            'rho(770)0 -> K+ p~-' : 'Lambda(1520)~0'
            }
        
        
        lambdastarSubSel =  Selection( self.name+"_LambdastarSub_Sel", Algorithm = lambdastarSubAlg, RequiredSelections = [ lambdastarMerge ] )

        lambdastarFilterAlg = FilterDesktop( Code = "(ABSID=='Lambda(1520)0')" )
          
        lambdastarFilterSel = Selection( self.name + "_LambdastarFilter", Algorithm = lambdastarFilterAlg, RequiredSelections = [ lambdastarSubSel ] )
        
        return lambdastarFilterSel    
示例#14
0
    def __Kstar__(self, Rho, conf):
        """
        Make a kstar
        """
                
        kstarSubMMZAlg = SubPIDMMFilter(self.name+"_KstarSubMMZ_Alg", Code= "DECTREE('rho(770)0 -> pi+ pi-')", MinMM=0, MaxMM=6050, PIDs = [ [ 'K+', 'pi-'], ['pi+', 'K-' ] ])
        
        kstarSubMMPAlg = SubPIDMMFilter(self.name+"_KstarSubMMP_Alg", Code= "DECTREE('rho(770)0 -> pi+ pi+')", MinMM=0, MaxMM=6050, PIDs = [ [ 'K+', 'pi+'], ['pi+', 'K+' ] ])     

        kstarSubMMMAlg = SubPIDMMFilter(self.name+"_KstarSubMMM_Alg", Code= "DECTREE('rho(770)0 -> pi- pi-')", MinMM=0, MaxMM=6050, PIDs = [ [ 'K-', 'pi-'], ['pi-', 'K-' ] ]) 

        kstarSubMMZSel = Selection( self.name+"_KstarSubMMZ_Sel", Algorithm = kstarSubMMZAlg, RequiredSelections = [ Rho ] )

        kstarSubMMPSel = Selection( self.name+"_KstarSubMMP_Sel", Algorithm = kstarSubMMPAlg, RequiredSelections = [ Rho ] )
        
        kstarSubMMMSel = Selection( self.name+"_KstarSubMMM_Sel", Algorithm = kstarSubMMMAlg, RequiredSelections = [ Rho ] )
        
        kstarMerge     = MergedSelection( self.name+"_KstarMerge", RequiredSelections = [ kstarSubMMZSel, kstarSubMMPSel, kstarSubMMMSel ] )

        kstarSubAlg    = SubstitutePID( self.name+"_KstarSub_Alg", Code = "ALL", MaxChi2PerDoF = -666 )

        #kstarSubAlg.Code = "ALL" #(DECTREE('rho(770)0 -> K+ pi-')) | (DECTREE('rho(770)0 -> K- pi+')) | (DECTREE('rho(770)0 -> K+ pi+')) | (DECTREE('rho(770)0 -> K- pi-'))" 
        
        kstarSubAlg.Substitutions = {
            'rho(770)0 -> K+ pi-' : 'K*(892)0',
            'rho(770)0 -> K+ pi+' : 'K*(892)0',
            'rho(770)0 -> pi+ K-' : 'K*(892)~0',
            'rho(770)0 -> K- pi-' : 'K*(892)~0'
            }
        
        
        kstarSubSel =  Selection( self.name+"_KstarSub_Sel", Algorithm = kstarSubAlg, RequiredSelections = [ kstarMerge ] )

        kstarFilterAlg = FilterDesktop( Code = "(ABSID=='K*(892)0')" )
        
        kstarFilterSel = Selection( self.name + "_KstarFilter", Algorithm = kstarFilterAlg, RequiredSelections = [ kstarSubSel ] )
        
        return kstarFilterSel
def subPID(name, input, mother, plusD, minusD):
    ddChangeAlg = SubstitutePID( name+"SubPIDAlg",
                                 Code = "DECTREE('rho(770)0 -> pi+ pi-')",
                                 Substitutions = { ' rho(770)0 -> ^pi+  X- ' : plusD,
                                                   ' rho(770)0 ->  X+   X- ' : mother},
                                 MaxChi2PerDoF = -666 )    
    
    newDDescr =  Selection( name+"SubPIDSel",
                            Algorithm = ddChangeAlg,
                            RequiredSelections = [input])

    return Selection(name+"pickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('%s -> %s %s')" % (mother, plusD, minusD) ),
                     RequiredSelections = [newDDescr])
示例#16
0
    def __Phi__(self, Rho, conf):
        """
        Make a phi through substitution 
        """      

        phiSubMMZAlg = SubPIDMMFilter(self.name+"_PhiSubMMZ_Alg", Code= "DECTREE('rho(770)0 -> pi+ pi-')", MinMM=0, MaxMM=6050, PIDs = [ [ 'K+', 'K-'] ]  )

        phiSubMMPAlg = SubPIDMMFilter(self.name+"_PhiSubMMP_Alg", Code= "DECTREE('rho(770)0 -> pi+ pi+')", MinMM=0, MaxMM=6050, PIDs = [ [ 'K+', 'K+'] ]  )     

        phiSubMMMAlg = SubPIDMMFilter(self.name+"_PhiSubMMM_Alg", Code= "DECTREE('rho(770)0 -> pi- pi-')", MinMM=0, MaxMM=6050, PIDs = [ [ 'K-', 'K-'] ]  )   

        phiSubMMZSel = Selection( self.name+"_PhiSubMMZ_Sel", Algorithm = phiSubMMZAlg, RequiredSelections = [ Rho ] )

        phiSubMMPSel = Selection( self.name+"_PhiSubMMP_Sel", Algorithm = phiSubMMPAlg, RequiredSelections = [ Rho ] )
        
        phiSubMMMSel = Selection( self.name+"_PhiSubMMM_Sel", Algorithm = phiSubMMMAlg, RequiredSelections = [ Rho ] )

        phiMerge = MergedSelection( self.name+"_PhiMerge", RequiredSelections = [ phiSubMMZSel, phiSubMMPSel, phiSubMMMSel ] ) 
        
        phiSubAlg = SubstitutePID( self.name+"_PhiSub_Alg", Code = "ALL",  MaxChi2PerDoF = -666 )

        #(DECTREE('rho(770)0 -> K+ K-')) | (DECTREE('rho(770)0 -> K+ K+')) | (DECTREE('rho(770)0 -> K- K-'))",
        
        phiSubAlg.Substitutions = {
            'rho(770)0 -> K+ K-' : 'phi(1020)' ,
            'rho(770)0 -> K+ K+' : 'phi(1020)' ,
            'rho(770)0 -> K- K-' : 'phi(1020)'
            }
        
        phiSubSel =  Selection( self.name+"_PhiSub_Sel", Algorithm = phiSubAlg, RequiredSelections = [ phiMerge ] )

        phiFilterAlg = FilterDesktop( Code = "(ABSID=='phi(1020)')" )

        phiFilterSel = Selection( self.name + "_PhiFilter", Algorithm = phiFilterAlg, RequiredSelections = [ phiSubSel ] )
        
        return phiFilterSel
示例#17
0
    def splitHHH(self, name, hhhSelection):
        """Split the input h-h+h+ Selection in to a D+ and D_s+ selection.

        Returns a two-tuple as (D+ Selection, D_s+ Selection).
        Keyword arguments:
        hhhSelection -- A single Selection instance; the output of makeD2HHH
        """
        dpFilter = FilterDesktop(
            'FilterDp{0}'.format(name),
            Code="(ADMASS('D+') < {0[Dp_ADAMASS_WIN]})".format(self.config)
        )
        dsFilter = FilterDesktop(
            'FilterDs{0}'.format(name),
            Code="(ADMASS('D_s+') < {0[Ds_ADAMASS_WIN]})".format(self.config)
        )

        dpSel = Selection(
            'SelFilteredDp{0}'.format(name),
            Algorithm=dpFilter,
            RequiredSelections=[hhhSelection]
        )
        dsSel = Selection(
            'SelFilteredDs{0}'.format(name),
            Algorithm=dsFilter,
            RequiredSelections=[hhhSelection]
        )

        # The HHH selection is labelled as a D+, so rename the candidates in
        # the D_s+ selection as such
        dsSubPID = SubstitutePID(
            name='SubPidDs{0}'.format(name),
            Code="DECTREE('[D+ -> X- X+ X+]CC')",
            Substitutions={
                'D+ -> X- X+ X+': 'D_s+',
                'D- -> X+ X- X-': 'D_s-'

            },
            MaxChi2PerDoF=-1
        )
        dsSubPIDSel = Selection(
            'SubPIDDsSel{0}'.format(name),
            Algorithm=dsSubPID,
            RequiredSelections=[dsSel]
        )

        return dpSel, dsSubPIDSel
示例#18
0
    def add_line_tuple_sequence(self, linesettings,
                                toolList = ["TupleToolPropertime",
                                            "TupleToolKinematic",
                                            "TupleToolGeometry",
                                            "TupleToolEventInfo",
                                            "TupleToolPrimaries",
                                            "TupleToolPid",
                                            "TupleToolANNPID",
                                            "TupleToolTrackInfo",
                                            "TupleToolRecoStats",],
                                mcToolList = ['TupleToolMCTruth',
                                              'TupleToolMCBackgroundInfo',
                                              'MCTupleToolPrompt'],
                                L0List = [],
                                HLT1List = [],
                                HLT2List = [],
                                strippingList = [],
                                aliases = {},
                                labXAliases = False,
                                substitutions = {},
                                suffix = '') :
        if not isinstance(linesettings, dict) :
            linesettings = self.get_line_settings(*linesettings)
        isTrigger = is_trigger(linesettings['version'])
        rootInTES = linesettings['rootInTES']
        linename = linesettings['linename']
        version = linesettings['version']
        decayDescs = linesettings['decayDescs']
        inputlocation = linesettings['inputLocation']
        if self.getProp('Simulation') and not isTrigger :
            rootInTES = '/'.join(rootInTES.split('/')[:-1] + ['AllStreams'])
        if self.getProp('InputType').lower() != 'mdst' :
            inputlocation = os.path.join(rootInTES, inputlocation)
            rootInTES = ''

        self.RootInTES = rootInTES
        if isTrigger :
            from Configurables import DstConf
            dstconf = DstConf()
            dstconf.Turbo = True
            self.extraobjs.add(dstconf)

        lineseq = GaudiSequencer(linename + '-Sequence')
        if substitutions :
            subs = {}
            for i, desc in enumerate(decayDescs) :
                descsubs, newdesc = desc.get_substitutions(substitutions)
                subs.update(descsubs)
                decayDescs[i] = newdesc
            newinputlocation = inputlocation.split('/')
            newinputlocation[-2] += '-SubPID'
            newinputlocation = '/'.join(newinputlocation)
            subpid = SubstitutePID(linename + '-SubPID',
                                   Code = 'ALL', 
                                   Substitutions = subs,
                                   Inputs = [inputlocation],
                                   Output = newinputlocation)
            lineseq.Members += [subpid]
            inputlocation = newinputlocation
        for desc in decayDescs :
            if labXAliases :
                desc.set_labX_aliases()
            elif aliases :
                desc.set_aliases(aliases)
            desctuple = DecayTreeTuple(desc.get_full_alias() + suffix + 'Tuple',
                                       ToolList = [])
            desctuple.configure_for_line(desc, inputlocation,
                                         linename, version, 
                                         self.getProp('Simulation'),
                                         toolList, 
                                         mcToolList, 
                                         L0List, HLT1List, HLT2List,
                                         strippingList)
            lineseq.Members.append(desctuple)
        self.UserAlgorithms.append(lineseq)
        return linesettings, lineseq
 def _buildAlgorithmChain(self, name, decayCombos, massLow, massHigh,
                          inputSelection):
     print 'build shit!!!!'
     uniqueCombos = []
     for nominalDecay, validDecays in decayCombos.items():
         uniqueCombos.extend(validDecays)
     uniqueCombos = list(set(uniqueCombos))
     wmSelections = {}
     for combo in uniqueCombos:
         comboName = ''.join(self._unsignDecay(combo))
         functor = self._buildUnsignedWMFunctor({combo: [combo]}, massLow,
                                                massHigh)
         _filter = FilterDesktop("%s_WMFilter_%s" % (name, comboName),
                                 Code=functor)
         print '_filter', _filter
         wmSelections[comboName] = Selection(
             "%s_WMSel_%s" % (name, comboName),
             Algorithm=_filter,
             RequiredSelections=[inputSelection])
     mySelections = {}
     for nominalDecay, validDecays in decayCombos.items():
         nominalDecayName = ''.join(nominalDecay)
         nDaughters = len(nominalDecay)
         algoList = []
         for validDecay in validDecays:
             validDecayName = ''.join(validDecay)
             wmSel = wmSelections[''.join(self._unsignDecay(validDecay))]
             _subsAlgo = SubstitutePID("%s_SubsAlg_%s" %
                                       (name, validDecayName),
                                       Code="DECTREE( 'Charm -> %s' )" %
                                       (' '.join(self.referenceDecay)),
                                       Substitutions={})
             _subsAlgo.MaxChi2PerDoF = -666
             mySubs = {}
             for i, validDaughter in enumerate(validDecay):
                 #if validDaughter == self.referenceDecay[i]:
                 #  continue
                 if not validDaughter in mySubs:
                     mySubs[validDaughter] = self.referenceDecay[:]
                 mySubs[validDaughter][i] = '^' + mySubs[validDaughter][i]
             for sub, descriptor in mySubs.items():
                 subsString = 'Charm -> ' + ' '.join(descriptor)
                 _subsAlgo.Substitutions[subsString] = sub
             #print 'Combo:', 'alg =', _subsAlgo
             print 'subs:', _subsAlgo.Substitutions
             print 'code:', _subsAlgo.Code
             sel = Selection("%sSel_%s" % (name, validDecayName),
                             Algorithm=_subsAlgo,
                             RequiredSelections=[wmSel])
             sel = Selection(name + 'Sel_' + validDecayName + 'Filter',
                             Algorithm=FilterDesktop(
                                 'DummyName',
                                 Code='(in_range(1764.84, MM, 1964.84))'),
                             RequiredSelections=[sel])  # hi
             algoList.append(sel)
             #mySelections[validDecayName] = sel
         print 'algoList', algoList
         mySelections[nominalDecayName] = MergedSelection(
             "%sMSel_%s" % (name, nominalDecayName),
             RequiredSelections=algoList)
     print 'mySelections', mySelections
     return mySelections
示例#20
0
# Stream and stripping line we want to use
stream = 'AllStreams'
line = 'D2hhPromptDst2D2KKLine'
tesLoc = '/Event/{0}/Phys/{1}/Particles'.format(stream, line)

# get the selection(s) created by the stripping
strippingSels = [DataOnDemand(Location=tesLoc)]

# configure an algorithm to substitute the Kaon in the D0-decay by a second
# pion
subs = SubstitutePID(
    'MakeD02pipi',
    Code="DECTREE('[D*(2010)+ -> (D0 -> K- K+) pi+]CC')",
    # note that SubstitutePID can't handle automatic CC
    Substitutions={
        'Charm -> (D0 -> ^K- pi+) Meson': 'pi-',
        'Charm -> (D~0 -> ^K+ pi-) Meson': 'pi+',
        'Charm -> (D0 -> K- ^K+) Meson': 'pi+',
        'Charm -> (D~0 -> K+ ^K-) Meson': 'pi-'
    }
)

# create a selection using the substitution algorithm
selSub = Selection(
    'Dst2D0pi_D02pipi_Sel',
    Algorithm=subs,
    RequiredSelections=strippingSels
)
# in order to add the selection into the program make a sequence
selSeq = SelectionSequence('SelSeq', TopSelection=selSub)
示例#21
0
##### Mass substitution ##########
# ie do the magic
from Configurables import SubstitutePID
from PhysSelPython.Wrappers import DataOnDemand

name      = 'kkpi0RG'
line      = 'Beauty2XGamma2pi_pi0R_Line'
#line      = 'Beauty2XGammaphiOmega_2pipi0R_Line'
particles = '/Event/AllStreams/Phys/'+line+'/Particles'
inputs    = [DataOnDemand(particles)]

b = 'B_s0'
r = ['phi(1680)' ,'phi(1020)']
d = ['K+' ,'K-']

sub = SubstitutePID(name+'Subst', Code="DECTREE('X0 -> (X0 -> (X0 -> X+ X- ) pi0 ) gamma')")
sub.Substitutions[' X0 ->  ( X0 ->  (X0 -> ^X+   X- )  pi0 ) gamma']=  d[0]
sub.Substitutions[' X0 ->  ( X0 ->  (X0 ->  X+  ^X- )  pi0 ) gamma']=  d[1]
sub.Substitutions[' X0 -> ^( X0 ->  (X0 ->  X+   X- )  pi0 ) gamma']=  r[0]
sub.Substitutions[' X0 ->  ( X0 -> ^(X0 ->  X+   X- )  pi0 ) gamma']=  r[1]
sub.Substitutions[' X0 ->  ( X0 ->  (X0 ->  X+  X-  )  pi0 ) gamma']=  b
filter = "INTREE(ID=='%s') & INTREE(ID=='%s') & INTREE(ID=='%s') & INTREE(ID=='%s') & INTREE(ID=='%s')" % (b,r[0],r[1],d[0],d[1]) # why is this needed??
sub.MaxParticles=2000

# define selection and sequence
from PhysSelPython.Wrappers import Selection, SelectionSequence
from Configurables import FilterDesktop, GaudiSequencer
sel_sub = Selection(name+'SubSel', Algorithm=sub, RequiredSelections=inputs)
filt    = FilterDesktop(name+'Filt', Code=filter)
sel_filt= Selection(name+'FiltSel', Algorithm=filt, RequiredSelections=[sel_sub])
    def __Lambdastar__(self, Rho, conf):
        """
        Make a Lambda* 
        """
        
        ddksrsChangeAlg = SubstitutePID( self.name+"LSrsSubPIDAlg",
                                     Code = "DECTREE('X0 -> X+ X-')",
                                     Substitutions = { ' X0 -> ^X+ X- ' : 'p+' ,
                                                       ' X0 -> X+ ^X- ' : 'K-' , 
                                                       ' X0 -> X+ X- ' : 'Lambda(1520)0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newDksrsDescr =  Selection( self.name+"_Lambdastar_rsSubPIDSel",
                                Algorithm = ddksrsChangeAlg,
                                RequiredSelections = [Rho])

        srsPick = Selection(self.name+"_Lambdastar_rsPickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('Lambda(1520)0 -> p+ K-')" ),
                     RequiredSelections = [newDksrsDescr])

        ddaksrsChangeAlg = SubstitutePID( self.name+"LSarsSubPIDAlg",
                                     Code = "DECTREE('X0 -> X+ X-')",
                                     Substitutions = { ' X0 -> X+ ^X- ' : 'p~-' ,
                                                       ' X0 -> ^X+ X- ' : 'K+' , 
                                                       ' X0 -> X+ X- ' : 'Lambda(1520)~0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newDaksrsDescr =  Selection( self.name+"_aLambdastar_rsSubPIDSel",
                                Algorithm = ddaksrsChangeAlg,
                                RequiredSelections = [Rho])

        asrsPick = Selection(self.name+"_Lambdastar_arsPickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('Lambda(1520)~0 -> p~- K+')" ),
                     RequiredSelections = [newDaksrsDescr])

        ddkswsChangeAlg = SubstitutePID( self.name+"LSwsSubPIDAlg",
                                     Code = "DECTREE('X0 -> X+ X+')",
                                     Substitutions = { ' X0 -> ^X+ X+ ' : 'p+' ,
                                                       ' X0 -> X+ ^X+ ' : 'K+' , 
                                                       ' X0 -> X+ X+ ' : 'Lambda(1520)0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newDkswsDescr =  Selection( self.name+"_Lambdastar_wsSubPIDSel",
                                Algorithm = ddkswsChangeAlg,
                                RequiredSelections = [Rho])

        dd2kswsChangeAlg = SubstitutePID( self.name+"LSws2SubPIDAlg",
                                     Code = "DECTREE('X0 -> X+ X+')",
                                     Substitutions = { ' X0 -> X+ ^X+ ' : 'p+' ,
                                                       ' X0 -> ^X+ X+ ' : 'K+' , 
                                                       ' X0 -> X+ X+ ' : 'Lambda(1520)0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newD2kswsDescr =  Selection( self.name+"_Lambdastar_ws2SubPIDSel",
                                Algorithm = dd2kswsChangeAlg,
                                RequiredSelections = [Rho])

        swsPick = Selection(self.name+"_Lambdastar_wsPickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('Lambda(1520)0 -> p+ K+')" ),
                     RequiredSelections = [newDkswsDescr, newD2kswsDescr])

        ddakswsChangeAlg = SubstitutePID( self.name+"LSawsSubPIDAlg",
                                     Code = "DECTREE('X0 -> X- X-')",
                                     Substitutions = { ' X0 -> ^X- X- ' : 'p~-' ,
                                                       ' X0 -> X- ^X- ' : 'K-' , 
                                                       ' X0 -> X- X- ' : 'Lambda(1520)~0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newDakswsDescr =  Selection( self.name+"_Lambdastar_awsSubPIDSel",
                                Algorithm = ddakswsChangeAlg,
                                RequiredSelections = [Rho])

        dd2akswsChangeAlg = SubstitutePID( self.name+"LSaws2SubPIDAlg",
                                     Code = "DECTREE('X0 -> X- X-')",
                                     Substitutions = { ' X0 -> X- ^X- ' : 'p~-' ,
                                                       ' X0 -> ^X- X- ' : 'K-' , 
                                                       ' X0 -> X- X- ' : 'Lambda(1520)~0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newD2akswsDescr =  Selection( self.name+"_Lambdastar_aws2SubPIDSel",
                                Algorithm = dd2akswsChangeAlg,
                                RequiredSelections = [Rho])

        aswsPick = Selection(self.name+"_Lambdastar_awsPickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('Lambda(1520)~0 -> p~- K-')" ),
                     RequiredSelections = [newDakswsDescr, newD2akswsDescr])


        _selLAMBDASTAR2PK = MergedSelection("Selection_"+self.name+"_Lambdastar",
                                         RequiredSelections = [srsPick, asrsPick, swsPick, aswsPick])

        return _selLAMBDASTAR2PK
    def __Phi__(self, Rho, conf):
        """
        Make a phi
        """      
#        _phi2kk = CombineParticles()
#        _phi2kk.DecayDescriptors = [ "phi(1020) -> K+ K-", "phi(1020) -> K+ K+", "phi(1020) -> K- K-" ]
#        _phi2kk.MotherCut = self.__KpiCuts__(conf)
#
#        _selPHI2KK = Selection( "Selection_"+self.name+"_Phi",
#                                     Algorithm = _phi2kk,
#                                     RequiredSelections = [ Kaons ] )
        ddksrsChangeAlg = SubstitutePID( self.name+"PhirsSubPIDAlg",
                                     Code = "DECTREE('X0 -> X+ X-')",
                                     Substitutions = { ' X0 -> ^X+ X- ' : 'K+' ,
                                                       ' X0 -> X+ ^X- ' : 'K-' , 
                                                       ' X0 -> X+ X- ' : 'phi(1020)'}, 
                                     MaxChi2PerDoF = -666 )
    
        newDksrsDescr =  Selection( self.name+"_Phi_rsSubPIDSel",
                                Algorithm = ddksrsChangeAlg,
                                RequiredSelections = [Rho])

        srsPick = Selection(self.name+"_Phi_rsPickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('phi(1020) -> K+ K-')" ),
                     RequiredSelections = [newDksrsDescr])

        ddkswsChangeAlg = SubstitutePID( self.name+"PhiwsSubPIDAlg",
                                     Code = "DECTREE('X0 -> X+ X+')",
                                     Substitutions = { ' X0 -> ^X+ X+ ' : 'K+' ,
                                                       ' X0 -> X+ ^X+ ' : 'K+' ,
                                                       ' X0 -> X+ X+ ' : 'phi(1020)'}, 
                                     MaxChi2PerDoF = -666 )
    
        newDkswsDescr =  Selection( self.name+"_Phi_wsSubPIDSel",
                                Algorithm = ddkswsChangeAlg,
                                RequiredSelections = [Rho])

        swsPick = Selection(self.name+"_Phi_wsPickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('phi(1020) -> K+ K+')" ),
                     RequiredSelections = [newDkswsDescr])

        ddakswsChangeAlg = SubstitutePID( self.name+"PhiawsSubPIDAlg",
                                     Code = "DECTREE('X0 -> X- X-')",
                                     Substitutions = { ' X0 -> X- ^X- ' : 'K-' ,
                                                       ' X0 -> ^X- X- ' : 'K-' ,
                                                       ' X0 -> X- X- ' : 'phi(1020)'}, 
                                     MaxChi2PerDoF = -666 )
    
        newDakswsDescr =  Selection( self.name+"_Phi_awsSubPIDSel",
                                Algorithm = ddakswsChangeAlg,
                                RequiredSelections = [Rho])

        aswsPick = Selection(self.name+"_Phi_awsPickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('phi(1020) -> K- K-')" ),
                     RequiredSelections = [newDakswsDescr])


        _selPHI2KK = MergedSelection("Selection_"+self.name+"_Phi",
                                         RequiredSelections = [srsPick, swsPick, aswsPick])


        return _selPHI2KK
    def __Kstar__(self, Rho, conf):
        """
        Make a kstar
        """      
        ddksrsChangeAlg = SubstitutePID( self.name+"rsSubPIDAlg",
                                     Code = "DECTREE('X0 -> X+ X-')",
                                     Substitutions = { ' X0 -> ^X+ X- ' : 'K+' ,
                                                       ' X0 -> X+ X- ' : 'K*(892)0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newDksrsDescr =  Selection( self.name+"_Kstar_rsSubPIDSel",
                                Algorithm = ddksrsChangeAlg,
                                RequiredSelections = [Rho])

        srsPick = Selection(self.name+"_Kstar_rsPickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('K*(892)0 -> K+ pi-')" ),
                     RequiredSelections = [newDksrsDescr])

        ddaksrsChangeAlg = SubstitutePID( self.name+"arsSubPIDAlg",
                                     Code = "DECTREE('X0 -> X+ X-')",
                                     Substitutions = { ' X0 -> X+ ^X- ' : 'K-' ,
                                                       ' X0 -> X+ X- ' : 'K*(892)~0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newDaksrsDescr =  Selection( self.name+"_aKstar_rsSubPIDSel",
                                Algorithm = ddaksrsChangeAlg,
                                RequiredSelections = [Rho])

        asrsPick = Selection(self.name+"_Kstar_arsPickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('K*(892)~0 -> K- pi+')" ),
                     RequiredSelections = [newDaksrsDescr])

        ddkswsChangeAlg = SubstitutePID( self.name+"wsSubPIDAlg",
                                     Code = "DECTREE('X0 -> X+ X+')",
                                     Substitutions = { ' X0 -> ^X+ X+ ' : 'K+' ,
                                                       ' X0 -> X+ X+ ' : 'K*(892)0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newDkswsDescr =  Selection( self.name+"_Kstar_wsSubPIDSel",
                                Algorithm = ddkswsChangeAlg,
                                RequiredSelections = [Rho])

        dd2kswsChangeAlg = SubstitutePID( self.name+"ws2SubPIDAlg",
                                     Code = "DECTREE('X0 -> X+ X+')",
                                     Substitutions = { ' X0 -> X+ ^X+ ' : 'K+' ,
                                                       ' X0 -> X+ X+ ' : 'K*(892)0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newD2kswsDescr =  Selection( self.name+"_Kstar_ws2SubPIDSel",
                                Algorithm = dd2kswsChangeAlg,
                                RequiredSelections = [Rho])

        swsPick = Selection(self.name+"_Kstar_wsPickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('K*(892)0 -> K+ pi+')" ),
                     RequiredSelections = [newDkswsDescr, newD2kswsDescr])

        ddakswsChangeAlg = SubstitutePID( self.name+"awsSubPIDAlg",
                                     Code = "DECTREE('X0 -> X- X-')",
                                     Substitutions = { ' X0 -> ^X- X- ' : 'K-' ,
                                                       ' X0 -> X- X- ' : 'K*(892)~0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newDakswsDescr =  Selection( self.name+"_aKstar_wsSubPIDSel",
                                Algorithm = ddakswsChangeAlg,
                                RequiredSelections = [Rho])

        dd2akswsChangeAlg = SubstitutePID( self.name+"aws2SubPIDAlg",
                                     Code = "DECTREE('X0 -> X- X-')",
                                     Substitutions = { ' X0 -> X- ^X- ' : 'K-' ,
                                                       ' X0 -> X- X- ' : 'K*(892)~0'}, 
                                     MaxChi2PerDoF = -666 )
    
        newD2akswsDescr =  Selection( self.name+"_aKstar_ws2SubPIDSel",
                                Algorithm = dd2akswsChangeAlg,
                                RequiredSelections = [Rho])

        aswsPick = Selection(self.name+"_Kstar_awsPickDecay",
                     Algorithm = FilterDesktop( Code = "DECTREE('K*(892)~0 -> K- pi-')" ),
                     RequiredSelections = [newDakswsDescr, newD2akswsDescr])


        _selKSTAR2KPI = MergedSelection("Selection_"+self.name+"_Kstar",
                                         RequiredSelections = [srsPick, asrsPick, swsPick, aswsPick])

#        _kstar2kpi.DecayDescriptors = [ "[K*(892)0 -> K+ pi-]cc", "[K*(892)0 -> K+ pi+]cc" ]
#
        return _selKSTAR2KPI
示例#25
0
HighQ2MuonsOnDemand = DataOnDemand(
    Location="Phys/B2XMuMuInclusive_InclDiMuHighQ2Line/Particles")

bothstripping = MergedSelection(
    "Selection_mergeddaughters",
    RequiredSelections=[LowQ2MuonsOnDemand, HighQ2MuonsOnDemand])

_filterDimuons = FilterDesktop(
    Code="ABSID==511")  # Dimuons from B0--> mu mu stripping selection
_selDimuons = Selection("_selDimuons",
                        Algorithm=_filterDimuons,
                        RequiredSelections=[bothstripping])

from Configurables import SubstitutePID
subalg = SubstitutePID("_B2Jpsi_SubPID",
                       Code="(DECTREE('B0 -> mu+ mu-'))",
                       Substitutions={'B0 -> mu+ mu-': 'J/psi(1S)'},
                       MaxChi2PerDoF=-666)
subsel = Selection("subsel",
                   Algorithm=subalg,
                   RequiredSelections=[_selDimuons])

# Try and make B->J/psi K
_B = CombineParticles()
_B.DaughtersCuts = {"K+": "PT>500*MeV"}
_B.MotherCut = "(DMASS('B+')<5000*MeV) & (VFASPF(VCHI2)<25.0)"  #need to check these cuts
_B.DecayDescriptors = ["[B+ -> J/psi(1S) K+]cc"]

_BdecaySelection = Selection("TurboB",
                             Algorithm=_B,
                             RequiredSelections=[subsel, kaons])
SeqB = SelectionSequence('SeqB', TopSelection=_BdecaySelection)