#!/bin/env python import sys # Parameters for converting Gap (mm) to Energy par_p = [446.956214989159, -116.181965697312, 16.3673029209249, -1.02639166315795, 0.0375373344653369, -0.000669526419528834, 4.66020024826800e-06] # Parameters for converting Energy to Gap (mm) par_c = [0.375992508974348 , 0.0612960540130145, -8.15556111844620e-05, 7.62290492864854e-08, -4.25411481158259e-11, 1.28281187410429e-14, -1.60238105910946e-18] class Undulator: def read_Position(self, current_gap): current_position = par_p[0] + par_p[1]*current_gap + par_p[2]*pow(current_gap,2) + par_p[3]*pow(current_gap,3) + par_p[4]*pow(current_gap,4) + par_p[5]*pow(current_gap,5) + par_p[6]*pow(current_gap,6) return current_position def calculate_Gap( self, energy): set_gap = par_c[0]+par_c[1]*energy+par_c[2]*pow(energy,2)+par_c[3]*pow(energy,3)+par_c[4]*pow(energy,4)+par_c[5]*pow(energy,5)+par_c[6]*pow(energy,6) return set_gap def main(): if len(sys.argv)<2: print "Usage: python undulator.py [energy (eV)] [gap(mm)]" else: und = Undulator() energy = float(sys.argv[1]) computed_gap = und.calculate_Gap(energy) print "For energy " + str(energy) + " eV computed gap " + str(computed_gap) + " mm" gap = float(sys.argv[2]) computed_energy = und.read_Position(gap) print "For gap " + str(gap) + " mm computed energy " + str(computed_energy) + " eV" if __name__ == "__main__": main()