from random import choice
import os

def rand():
	return choice([-1.0,1.0])

def randIndexString():
	fieldIndex = 0.1058
	return str(round(choice([0.95,1.05])*fieldIndex,10))

print("How many lattice files do you want?")
num_lattice = int(input())

for latticeNum in range(num_lattice):
	directory = 'config' + str(latticeNum+1)
	os.mkdir(directory)
	with open(directory+"/quad_plate_misalign.bmad", "w") as f:
		##quads##
		
		#quad1
		#inner x
		avg = 7.0620-7.06147
		uncertainty = 0.00053
		f.write("quad1_long[grid_field(3)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.0620-7.06158
		uncertainty = 0.00099
		f.write("quad1_short[grid_field(3)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#inner y
		avg = 0.0
		uncertainty = 0.0
		f.write("quad1_long[grid_field(3)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad1_short[grid_field(3)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#bottom x
		avg = 0.0
		uncertainty = 0.0
		f.write("quad1_long[grid_field(4)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad1_short[grid_field(4)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#bottom y
		avg = 7.1620-7.16204 
		uncertainty = 0.00083
		f.write("quad1_long[grid_field(4)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.1620-7.16144 
		uncertainty = 0.00099
		f.write("quad1_short[grid_field(4)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#outer x
		avg = 7.1620-7.16204 
		uncertainty = 0.00083
		f.write("quad1_long[grid_field(5)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.1620-7.16144 
		uncertainty = 0.00099
		f.write("quad1_short[grid_field(5)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#outer y
		avg = 0.0
		uncertainty = 0.0
		f.write("quad1_long[grid_field(5)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad1_short[grid_field(5)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#top x
		avg = 0.0
		uncertainty = 0.0
		f.write("quad1_long[grid_field(6)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad1_short[grid_field(6)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#top y
		avg = 7.0620-7.06147
		uncertainty = 0.00053
		f.write("quad1_long[grid_field(6)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.0620-7.06158
		uncertainty = 0.00099
		f.write("quad1_short[grid_field(6)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		f.write('\n')
		
		#quad2
		#inner x
		avg = 7.0620-7.06206
		uncertainty = 0.00058
		f.write("quad2_long[grid_field(3)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.0620-7.06130
		uncertainty = 0.00050
		f.write("quad2_short[grid_field(3)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#inner y
		avg = 0.0
		uncertainty = 0.0
		f.write("quad2_long[grid_field(3)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad2_short[grid_field(3)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#bottom x
		avg = 0.0
		uncertainty = 0.0
		f.write("quad2_long[grid_field(4)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad2_short[grid_field(4)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#bottom y
		avg = 7.1620-7.16187 
		uncertainty = 0.00071
		f.write("quad2_long[grid_field(4)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.1620-7.16071 
		uncertainty = 0.00070
		f.write("quad2_short[grid_field(4)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#outer x
		avg = 7.1620-7.16187 
		uncertainty = 0.00071
		f.write("quad2_long[grid_field(5)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.1620-7.16071 
		uncertainty = 0.00070
		f.write("quad2_short[grid_field(5)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#outer y
		avg = 0.0
		uncertainty = 0.0
		f.write("quad2_long[grid_field(5)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad2_short[grid_field(5)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#top x
		avg = 0.0
		uncertainty = 0.0
		f.write("quad2_long[grid_field(6)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad2_short[grid_field(6)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#top y
		avg = 7.0620-7.06206
		uncertainty = 0.00058
		f.write("quad2_long[grid_field(6)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.0620-7.06130
		uncertainty = 0.00050
		f.write("quad2_short[grid_field(6)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		f.write('\n')
		
		#quad3
		#inner x
		avg = 7.0620-7.06231
		uncertainty = 0.00051
		f.write("quad3_long[grid_field(3)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.0620-7.06160
		uncertainty = 0.00051
		f.write("quad3_short[grid_field(3)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#inner y
		avg = 0.0
		uncertainty = 0.0
		f.write("quad3_long[grid_field(3)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad3_short[grid_field(3)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#bottom x
		avg = 0.0
		uncertainty = 0.0
		f.write("quad3_long[grid_field(4)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad3_short[grid_field(4)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#bottom y
		avg = 7.1620-7.16192
		uncertainty = 0.00071
		f.write("quad3_long[grid_field(4)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.1620-7.16200 
		uncertainty = 0.00081
		f.write("quad3_short[grid_field(4)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#outer x
		avg = 7.1620-7.16192
		uncertainty = 0.00071
		f.write("quad3_long[grid_field(5)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.1620-7.16200 
		uncertainty = 0.00081
		f.write("quad3_short[grid_field(5)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#outer y
		avg = 0.0
		uncertainty = 0.0
		f.write("quad3_long[grid_field(5)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad3_short[grid_field(5)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#top x
		avg = 0.0
		uncertainty = 0.0
		f.write("quad3_long[grid_field(6)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad3_short[grid_field(6)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#top y
		avg = 7.0620-7.06231
		uncertainty = 0.00051
		f.write("quad3_long[grid_field(6)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.0620-7.06160
		uncertainty = 0.00051
		f.write("quad3_short[grid_field(6)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		f.write('\n')
		
		#quad4
		#inner x
		avg = 7.0620-7.06220
		uncertainty = 0.00067
		f.write("quad4_long[grid_field(3)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.0620-7.06161
		uncertainty = 0.00099
		f.write("quad4_short[grid_field(3)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#inner y
		avg = 0.0
		uncertainty = 0.0
		f.write("quad4_long[grid_field(3)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad4_short[grid_field(3)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#bottom x
		avg = 0.0
		uncertainty = 0.0
		f.write("quad4_long[grid_field(4)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad4_short[grid_field(4)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#bottom y
		avg = 7.1620-7.16170
		uncertainty = 0.00099
		f.write("quad4_long[grid_field(4)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.1620-7.16197 
		uncertainty = 0.00080
		f.write("quad4_short[grid_field(4)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#outer x
		avg = 7.1620-7.16170
		uncertainty = 0.00099
		f.write("quad4_long[grid_field(5)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.1620-7.16197 
		uncertainty = 0.00080
		f.write("quad4_short[grid_field(5)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#outer y
		avg = 0.0
		uncertainty = 0.0
		f.write("quad4_long[grid_field(5)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad4_short[grid_field(5)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#top x
		avg = 0.0
		uncertainty = 0.0
		f.write("quad4_long[grid_field(6)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 0.0
		uncertainty = 0.0
		f.write("quad4_short[grid_field(6)%r0(1)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		#top y
		avg = 7.0620-7.06220
		uncertainty = 0.00067
		f.write("quad4_long[grid_field(6)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		avg = 7.0620-7.06161
		uncertainty = 0.00099
		f.write("quad4_short[grid_field(6)%r0(2)]=" + str(round(avg+rand()*uncertainty,10)))
		f.write('\n')
		f.write('\n')
		
	with open(directory + "/quad_input.dat", "w") as f:
		##Voltages##
		
		f.write("&input")
		f.write('\n')
		f.write("    quad_params =  "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString())		
		f.write('\n')
		#short
		f.write("      quad_params%short_quad_plate_index(1) = "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString())
		f.write('\n')
		f.write("      quad_params%short_quad_plate_index(2) = "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString())
		f.write('\n')
		f.write("      quad_params%short_quad_plate_index(3) = "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString())
		f.write('\n')
		f.write("      quad_params%short_quad_plate_index(4) = "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString())
		f.write('\n')
		#long
		f.write("      quad_params%long_quad_plate_index(1) = "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString())
		f.write('\n')
		f.write("      quad_params%long_quad_plate_index(2) = "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString())
		f.write('\n')
		f.write("      quad_params%long_quad_plate_index(3) = "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString())
		f.write('\n')
		f.write("      quad_params%long_quad_plate_index(4) = "+randIndexString()+" "+randIndexString()+" "+randIndexString()+" "+randIndexString())
		f.write('\n')
		f.write("b_radial = 0")
		f.write('\n')
		f.write('\\')

	with open(directory + "/g2.sh", "w") as f:		
		f.write("#!/bin/bash")
           	f.write('\n')
                f.write("cd /nfs/gm2/data1/dlr10/g-2/mytest/efield_pitch_config_35us_start/"+directory)
           	f.write('\n')
                f.write("DESTINATION_DIR=${JOB_ID}")
           	f.write('\n')
                f.write("mkdir -p ${DESTINATION_DIR}")
           	f.write('\n')
                f.write("/nfs/acc/user/dlr/development9_linux/g-2/softlink_lnx")
           	f.write('\n')
                f.write("ln -s /nfs/gm2/data1/dlr10/g-2/mytest/efield_pitch_config_35us_start/input.dat")
           	f.write('\n')
                f.write("ln -s /nfs/gm2/data1/dlr10/g-2/mytest/efield_pitch_config_35us_start/bmad_esquad_grid.")
           	f.write('\n')
                f.write("/nfs/acc/user/dlr/development9_linux/production/bin/g2_tracking > ${DESTINATION_DIR}/log.dat")


                
