コード例 #1
0
 def _buildVirtualChannels(self):
     assert self._channel.length == 3
     virtualchannels = []
     for index, item in enumerate(self._channel.names):
         output1 = item
         output23 = self._channel.names[:index] + self._channel.names[
             index + 1:]
         virtuallist = self._alldecays.getParticlesfromDecay(output23)
         for item in virtuallist:
             BR1 = item.BR
             virtual = item.name
             if item.BR != 0.0 and not any(obj.particles[1].name == virtual
                                           for obj in virtualchannels):
                 BRW = VirtualParticleChannel.breit_wigner(
                     self._particle.name, virtual)
                 try:
                     BR2 = ParticleDataToolFetcher.getBR(
                         virtual, [
                             self._particle.name,
                             ParticleDataSource.getAnti(output1)
                         ])
                     prob = BR1 * BR2 * BRW
                     mass = ParticleDataSource.getMass(
                         virtual
                     )  #VirtualParticleChannel.totalMass(output23)  #
                     ri = RealInfo(output1)
                     vi = VirtualInfo(virtual, mass, output23)
                     vc = VirtualChannel(prob, [ri, vi])
                     virtualchannels.append(vc)
                 except:
                     pass
     return virtualchannels
コード例 #2
0
    def _buildVirtualChannels(self,decayparticles):
        '''
        0 -> o1+o2+o3; VP, virtual particles
        Create all combinations of o1 & o23
        Look for all VP -> o23
        Set de probability of the process through
         - BR1: the prob of the VP -> o23
         - Look for the BR2 of the process VP -> anti(o1) + 0
         - Set the Breit Wigner mass of the particle

        Set an array of VirtualChannels (namedtuples)
        '''
        assert len(decayparticles) == 3
        VirtualChannels = []
        for index, item in enumerate(decayparticles):
            output1 = item
            output23 = decayparticles[:index]+decayparticles[index+1:]
            virtuallist = ParticleDataToolFetcher.getOriginParticles(output23)
            #if lepton neutrino only accept W+-
            if VirtualParticleChannel.leptonnumber(output23)==0:
                for index, item in enumerate(virtuallist):
                    if item[1][0] in ['W+','W-']:
                        virtuallist = [virtuallist[index]]
                        break

            for item in virtuallist:
                BR1 = item[0]
                virtual = item[1][0]
                if BR1 != 0.0:
                    BRW = VirtualParticleChannel.breit_wigner(self._particle.name, virtual)
                    try:
                        BR2 = ParticleDataToolFetcher.getBR(virtual,[self._particle.name,ParticleDataSource.getAnti(output1)])
                        prob = BR1*BR2*BRW
                        vc = VirtualChannel(output1, virtual, output23, BR1, BR2, BRW, prob)
                        VirtualChannels.append(vc)
                    except:
                        pass
        self._virtualchannels = VirtualChannels