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
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