def test_set_wavefunctions(self): """Test wavefunction dictionary in HelasModel""" wavefunctions = {} # IXXXXXX.Key: (spin, state) key1 = ((-2, 0), ('', )) wavefunctions[key1] = \ lambda wf: 'CALL IXXXXX(P(0,%d),%s,NHEL(%d),%d*IC(%d),W(1,%d))' % \ (wf.get('number_external'), wf.get('mass'), wf.get('number_external'), -(-1) ** wf.get_with_flow('is_part'), wf.get('number_external'), wf.get('number')) # OXXXXXX.Key: (spin, state) key2 = ((2, 0), ('', )) wavefunctions[key2] = \ lambda wf: 'CALL OXXXXX(P(0,%d),%s,NHEL(%d),%d*IC(%d),W(1,%d))' % \ (wf.get('number_external'), wf.get('mass'), wf.get('number_external'), 1 ** wf.get_with_flow('is_part'), wf.get('number_external'), wf.get('number')) self.assert_(self.mymodel.set('wavefunctions', wavefunctions)) wf = helas_objects.HelasWavefunction() wf.set('particle', -2, self.mybasemodel) wf.set('state', 'incoming') wf.set('interaction_id', 0) wf.set('number_external', 1) wf.set('lorentz', ['']) wf.set('number', 40) self.assertEqual(wf.get_call_key(), key1) goal = 'CALL IXXXXX(P(0,1),mu,NHEL(1),-1*IC(1),W(1,40))' self.assertEqual(self.mymodel.get_wavefunction_call(wf), goal) wf.set('fermionflow', -1) self.assertEqual(wf.get_call_key(), key2) goal = 'CALL OXXXXX(P(0,1),mu,NHEL(1),1*IC(1),W(1,40))' self.assertEqual(self.mymodel.get_wavefunction_call(wf), goal) del wavefunctions[key1] del wavefunctions[key2]
def test_w_and_z_amplitudes(self): """Test wavefunction and amplitude calls for W and Z""" goal = [ \ 'CALL JWWWXX(W(1,2),W(1,3),W(1,4),MGVX6,wmas,wwid,W(1,1))', 'CALL JWWWXX(W(1,1),W(1,3),W(1,4),MGVX6,wmas,wwid,W(1,2))', 'CALL JWWWXX(W(1,1),W(1,2),W(1,4),MGVX6,wmas,wwid,W(1,3))', 'CALL JWWWXX(W(1,1),W(1,2),W(1,3),MGVX6,wmas,wwid,W(1,4))', '# Amplitude(s) for diagram number 1', 'CALL WWWWXX(W(1,1),W(1,2),W(1,3),W(1,4),MGVX6,AMP(1))', 'CALL JW3WXX(W(1,2),W(1,3),W(1,4),MGVX8,wmas,wwid,W(1,1))', 'CALL JW3WXX(W(1,1),W(1,3),W(1,4),MGVX8,wmas,wwid,W(1,2))', 'CALL JW3WXX(W(1,1),W(1,2),W(1,4),MGVX8,zmas,zwid,W(1,3))', 'CALL JW3WXX(W(1,1),W(1,2),W(1,3),MGVX8,zmas,zwid,W(1,4))', '# Amplitude(s) for diagram number 1', 'CALL W3W3XX(W(1,1),W(1,2),W(1,3),W(1,4),MGVX8,AMP(1))'] goal_counter = 0 myleglist = base_objects.LegList() myleglist.append( base_objects.Leg({ 'id': 24, 'number': 1, 'state': False })) myleglist.append( base_objects.Leg({ 'id': -24, 'number': 2, 'state': False })) myleglist.append( base_objects.Leg({ 'id': 24, 'number': 3, 'state': False })) myleglist.append( base_objects.Leg({ 'id': -24, 'number': 4, 'state': False })) wfs = helas_objects.HelasWavefunctionList(\ [ helas_objects.HelasWavefunction(leg, 8, self.mybasemodel) \ for leg in myleglist ]) fortran_model = helas_call_writers.FortranHelasCallWriter() for wf in wfs: mothers = copy.copy(wfs) mothers.remove(wf) wf.set('mothers', mothers) # Not yet implemented special wavefunctions for W/Z #self.assertEqual(fortran_model.get_wavefunction_call(wf), # goal[goal_counter]) goal_counter = goal_counter + 1 amplitude = helas_objects.HelasAmplitude({\ 'mothers': wfs, 'number': 1}) amplitude.set('interaction_id', 8, self.mybasemodel) # Not yet implemented special wavefunctions for W/Z #self.assertEqual(fortran_model.get_amplitude_call(amplitude), # goal[goal_counter]) goal_counter = goal_counter + 1 myleglist = base_objects.LegList() myleglist.append( base_objects.Leg({ 'id': 24, 'number': 1, 'state': False })) myleglist.append( base_objects.Leg({ 'id': -24, 'number': 2, 'state': False })) myleglist.append( base_objects.Leg({ 'id': 23, 'number': 3, 'state': False })) myleglist.append( base_objects.Leg({ 'id': 23, 'number': 4, 'state': False })) wfs = helas_objects.HelasWavefunctionList(\ [ helas_objects.HelasWavefunction(leg, 9, self.mybasemodel) \ for leg in myleglist ]) fortran_model = helas_call_writers.FortranHelasCallWriter() for wf in wfs: mothers = copy.copy(wfs) mothers.remove(wf) wf.set('mothers', mothers) # Not yet implemented special wavefunctions for W/Z # self.assertEqual(fortran_model.get_wavefunction_call(wf), # goal[goal_counter]) goal_counter = goal_counter + 1 amplitude = helas_objects.HelasAmplitude({\ 'mothers': wfs, 'number': 1}) amplitude.set('interaction_id', 9, self.mybasemodel) # Not yet implemented special wavefunctions for W/Z #self.assertEqual(fortran_model.get_amplitude_call(amplitude), # goal[goal_counter]) goal_counter = goal_counter + 1
def test_generate_wavefunctions_and_amplitudes(self): """Test automatic generation of wavefunction and amplitude calls""" goal = [ \ 'CALL IXXXXX(P(0,1),me,NHEL(1),+1*IC(1),W(1,1))', 'CALL OXXXXX(P(0,2),me,NHEL(2),-1*IC(2),W(1,2))', 'CALL VXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,3))', 'CALL FVOXXX(W(1,2),W(1,3),MGVX12,me,zero,W(1,1))', 'CALL FVIXXX(W(1,1),W(1,3),MGVX12,me,zero,W(1,2))', 'CALL JIOXXX(W(1,1),W(1,2),MGVX12,zero,zero,W(1,3))', 'CALL IOVXXX(W(1,1),W(1,2),W(1,3),MGVX12,AMP(1))', 'CALL VXXXXX(P(0,1),zero,NHEL(1),-1*IC(1),W(1,1))', 'CALL VXXXXX(P(0,2),zero,NHEL(2),-1*IC(2),W(1,2))', 'CALL TXXXXX(P(0,3),zero,NHEL(3),-1*IC(3),W(1,3))', 'CALL JVTAXX(W(1,2),W(1,3),MGVX2,zero,zero,W(1,1))', 'CALL JVTAXX(W(1,1),W(1,3),MGVX2,zero,zero,W(1,2))', 'CALL UVVAXX(W(1,1),W(1,2),MGVX2,zero,zero,zero,W(1,3))', 'CALL VVTAXX(W(1,1),W(1,2),W(1,3),MGVX2,zero,AMP(2))', 'CALL VXXXXX(P(0,1),zero,NHEL(1),-1*IC(1),W(1,1))', 'CALL VXXXXX(P(0,2),zero,NHEL(2),-1*IC(2),W(1,2))', 'CALL SXXXXX(P(0,3),-1*IC(3),W(1,3))', 'CALL SXXXXX(P(0,4),-1*IC(4),W(1,4))', 'CALL JVSSXX(W(1,2),W(1,3),W(1,4),MGVX89,zero,zero,W(1,1))', 'CALL JVSSXX(W(1,1),W(1,3),W(1,4),MGVX89,zero,zero,W(1,2))', 'CALL HVVSXX(W(1,2),W(1,1),W(1,4),MGVX89,Musq2,Wusq2,W(1,3))', 'CALL HVVSXX(W(1,2),W(1,1),W(1,3),MGVX89,Musq2,Wusq2,W(1,4))', 'CALL VVSSXX(W(1,2),W(1,1),W(1,3),W(1,4),MGVX89,AMP(1))'] myleglist = base_objects.LegList() myleglist.append( base_objects.Leg({ 'id': 11, 'number': 1, 'state': False })) myleglist.append( base_objects.Leg({ 'id': -11, 'number': 2, 'state': False })) myleglist.append( base_objects.Leg({ 'id': 22, 'number': 3, 'state': False })) wfs = helas_objects.HelasWavefunctionList(\ [ helas_objects.HelasWavefunction(leg, 7, self.mybasemodel) \ for leg in myleglist ]) fortran_model = helas_call_writers.FortranHelasCallWriter() goal_counter = 0 for wf in wfs: self.assertEqual(fortran_model.get_wavefunction_call(wf), goal[goal_counter]) goal_counter = goal_counter + 1 for wf in wfs: mothers = copy.copy(wfs) mothers.remove(wf) wf.set('mothers', mothers) if not wf.get('self_antipart'): wf.flip_part_antipart() self.assertEqual(fortran_model.get_wavefunction_call(wf), goal[goal_counter]) if not wf.get('self_antipart'): wf.flip_part_antipart() goal_counter = goal_counter + 1 amplitude = helas_objects.HelasAmplitude({\ 'mothers': wfs, 'number': 1}) amplitude.set('interaction_id', 7, self.mybasemodel) self.assertEqual(fortran_model.get_amplitude_call(amplitude), goal[goal_counter]) goal_counter = goal_counter + 1 myleglist = base_objects.LegList() myleglist.append( base_objects.Leg({ 'id': 21, 'number': 1, 'state': False })) myleglist.append( base_objects.Leg({ 'id': 21, 'number': 2, 'state': False })) myleglist.append( base_objects.Leg({ 'id': 8000002, 'number': 3, 'state': False })) wfs = helas_objects.HelasWavefunctionList(\ [ helas_objects.HelasWavefunction(leg, 5, self.mybasemodel) \ for leg in myleglist ]) fortran_model = helas_call_writers.FortranHelasCallWriter() for wf in wfs: self.assertEqual(fortran_model.get_wavefunction_call(wf), goal[goal_counter]) goal_counter = goal_counter + 1 for wf in wfs: mothers = copy.copy(wfs) mothers.remove(wf) wf.set('mothers', mothers) self.assertEqual(fortran_model.get_wavefunction_call(wf), goal[goal_counter]) goal_counter = goal_counter + 1 amplitude = helas_objects.HelasAmplitude({\ 'mothers': wfs, 'number': 2}) amplitude.set('interaction_id', 5, self.mybasemodel) self.assertEqual(fortran_model.get_amplitude_call(amplitude), goal[goal_counter]) goal_counter = goal_counter + 1