# [sympy] Rewrite trigonimetric terms like sin(Pi*h/2) for integer h as -(-1^(h-1))*mod(h,2)?

```Dear all,

first, thanks to all the contributors for providing such a great and free
tool.```
```
For x-ray structure factor calculations, I end up with huge sums of
trigonometric terms that I want to simplify knowing that the arguments of
the trigonometric functions contain summands being multiples of Pi and
Pi/2.
In general, the step I am missing is to get from sin(Pi*h/2) for integer h
to -(-1^(h-1))*mod(h,2) with integer h. The simplification should also
simplify sin(Pi*h/2+x) to a sum of sin(x) and cos(x) depending on the phase
Pi*h/2 with h integer. Then I would collect all the sin and cos terms...

Is that doable with sympy? I would be very thankful for a hint how to
proceed...

Below is a working code that results in the following expression (h,k,l)
integer that should be simplified (d real) into something
f1(h,k,l)*sin(2pi(dh-dk))+f2(h,k,l)*sin(2pi(dh+dk))+...

import sympy as sp
from numpy import *
import matplotlib.pyplot as plt

sp.init_printing(use_latex=True)

u=sp.symbols('u',positive=True)
d=sp.symbols('d',positive=True)

h=sp.symbols('h',integer=True)
k=sp.symbols('k',integer=True)
l=sp.symbols('l',integer=True)

#h=sp.Integer(2)
#k=sp.Integer(1)
#l=sp.Integer(1)

onehalf=sp.Integer(1)/sp.Integer(2)

x=sp.symarray('x',8)
y=sp.symarray('y',8)
z=sp.symarray('z',8)

# Wyckoff 8 h sites

x[0:4]=([u,-u,-u+onehalf,u+onehalf])
y[0:4]=([u+onehalf,-u+onehalf,u,-u])
z[0:4]=([0,0,0,0])

[x[4:8],y[4:8],z[4:8]]=[x[0:4]+onehalf,y[0:4]+onehalf,z[0:4]+onehalf]

s=sp.Integer(0)
for j in range (0,8):
s=s+sp.exp(-sp.Integer(2)*sp.I*sp.pi*(x[j]*h+y[j]*k+z[j]*l))

s=s.subs(u,sp.Integer(1)/sp.Integer(4)-d)
s= (sp.expand_complex(s).simplify())

s

Thank you for reading

Best, Michael

--
You received this message because you are subscribed to the Google Groups
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email