def test_ASTRA_Elegant_C2V(quads, phase=4, charge=70): global dir, lattice, scaling, bestdelta dir = './SETUP/TOMP_SETUP' lattice = Framework(dir, clean=True, verbose=False) lattice.loadSettings('CLA10-BA1_TOMP_ASTRA.def') lattice.change_Lattice_Code('C2V', 'elegant') scaling = 6 if not os.name == 'nt': lattice.defineASTRACommand(scaling=(scaling)) lattice.defineCSRTrackCommand(scaling=(scaling)) lattice.define_gpt_command(scaling=(scaling)) lattice['S02'].file_block['input'][ 'prefix'] = '../SETUP/TOMP_SETUP_' + str(phase) + '_' + str( charge) + '/' lattice['S02'].sample_interval = 1 #2**(3*2) dir = './test_EleC2V_' + str(phase) + '_' + str(charge) lattice.setSubDirectory(dir) lattices = lattice.latticeObjects.values() # for l in lattices: # if hasattr(l, 'headers'): # if isinstance(l.headers, (dict)): # if 'charge' in l.headers.keys(): # l.headers['charge'].space_charge_mode = False optFuncVELA(quads, track=False) lattice.track(startfile='S02', track=True)
def create_base_files_100pC(scaling, sol=0.34, lsol=0.08, subdir=True): if subdir: dir = 'basefiles_' + str(scaling) + '_100pC/' + str(sol) + '/' + str( lsol) + '/' else: dir = 'basefiles_' + str(scaling) + '_100pC/' framework = Framework(dir, overwrite=True, clean=True) if subdir: framework.loadSettings('Lattices/clara400_v12_v3_elegant.def') else: framework.loadSettings('Lattices/clara400_v12_v3.def') if not os.name == 'nt': framework.defineASTRACommand(scaling=scaling) framework.defineCSRTrackCommand(scaling=scaling) framework.generator.number_of_particles = 2**(3 * scaling) framework.generator.charge = 100e-12 framework['CLA-HRG1-GUN-SOL'].field_amplitude = sol framework['CLA-L01-CAV-SOL-01'].field_amplitude = lsol framework['CLA-L01-CAV-SOL-02'].field_amplitude = -lsol framework['CLA-L02-CAV'].phase = -15 framework['CLA-L03-CAV'].phase = -12 framework['bunch_compressor'].angle = 0.135 # framework['L02'].sample_interval = 2**(3*2) framework.track(endfile="S07") #, startfile='VBC') twiss.read_astra_emit_files(dir + '/injector400.Xemit.001') return twiss['enx'][-1]
def create_base_file(settings='./clara400_v12_v3.def'): cavity_absolute_phases, cavity_absolute_momenta = rcp.get_Cavity_Phases(dir='../basefiles_4', settings='./clara400_v12_v3.def') lattice = Framework('test', clean=False, verbose=False) lattice.loadSettings(settings) if not os.name == 'nt': scaling = 4 lattice.defineASTRACommand(['mpiexec','-np',str(3*scaling),'/opt/ASTRA/astra_MPICH2.sh']) # lattice.defineASTRACommand(['/opt/ASTRA/astra.sh']) lattice.defineGeneratorCommand(['/opt/ASTRA/generator.sh']) lattice.defineCSRTrackCommand(['/opt/OpenMPI-1.4.3/bin/mpiexec','-n',str(3*scaling),'/opt/CSRTrack/csrtrack_openmpi.sh']) lattice.generator.number_of_particles = 2**(3*scaling) else: lattice.generator.number_of_particles = 2**(3*3) lattice.defineElegantCommand(['elegant']) for lat in lattice.latticeObjects: print 'lattice = ', lat if hasattr(lattice[lat], 'headers') and not lat == 'generator': lattice.setSubDirectory('basefiles') lattice[lat].headers['newrun']['auto_phase'] = True lattice[lat].headers['newrun']['Track_All'] = False lattice[lat].file_block['input']['prefix'] = '../test/' lattice.track(files=[lat], postprocess=False) lattice.setSubDirectory('test') cavities = lattice[lat].getElementType('cavity') if len(cavities) > 0: absolute_phases, absolute_momenta = rcp.get_Cavity_Phase('basefiles/'+lat+'.log') print zip(cavities, absolute_phases) for cav, absphase in zip(cavities, absolute_phases): cav['phase'] = absphase + cav['phase'] lattice[lat].headers['newrun']['auto_phase'] = False lattice[lat].headers['newrun']['Track_All'] = True lattice.track(files=[lat], postprocess=True)
def create_base_files(scaling): framework = Framework('basefiles_' + str(scaling), overwrite=True) framework.loadSettings('Lattices/clara400_v12_v3.def') if not os.name == 'nt': framework.defineASTRACommand(scaling=scaling) framework.defineCSRTrackCommand(scaling=scaling) framework.generator.number_of_particles = 2**(3 * scaling) # framework.change_Lattice_Code('VBC', 'ASTRA') framework.track(endfile="S07") #startfile='VBC')
def create_base_files(scaling, changes=None): framework = Framework('basefiles_' + str(scaling), overwrite=True) framework.loadSettings('afterglow.def') framework.generator.number_of_particles = 2**(3 * scaling) if not changes is None: framework.load_changes_file(changes) framework['S02'].prefix = '../../CLARA/basefiles_' + str( int(scaling)) + '/' framework.track(startfile='S02')
def create_base_files(scaling): framework = Framework('basefiles_FEBE_'+str(scaling), overwrite=False) framework.loadSettings('Lattices/claraX400_v12_80MVm.def') if not os.name == 'nt': framework.defineASTRACommand(['mpiexec','-np',str(3*scaling),'/opt/ASTRA/astra_MPICH2.sh']) framework.defineGeneratorCommand(['/opt/ASTRA/generator.sh']) framework.defineCSRTrackCommand(['/opt/OpenMPI-1.4.3/bin/mpiexec','-n',str(3*scaling),'/opt/CSRTrack/csrtrack_openmpi.sh']) framework.generator.number_of_particles = 2**(3*scaling) framework.track(run=True)
def create_base_files(scaling, changes=None): framework = Framework('basefiles_' + str(scaling), overwrite=True) framework.loadSettings('FEBE_Single_L01.def') if not os.name == 'nt': framework.defineASTRACommand(scaling=scaling) framework.generator.number_of_particles = 2**(3 * scaling) if not changes is None: framework.load_changes_file(changes) framework.track()
def create_base_files(scaling): framework = Framework('basefiles_FEBE_'+str(scaling), overwrite=False) framework.loadSettings('Lattices/clara400_v12_FEBE.def') if not os.name == 'nt': framework.defineASTRACommand(['mpiexec','-np',str(3*scaling),'/opt/ASTRA/astra_MPICH2.sh']) framework.defineGeneratorCommand(['/opt/ASTRA/generator.sh']) framework.defineCSRTrackCommand(['/opt/OpenMPI-1.4.3/bin/mpiexec','-n',str(3*scaling),'/opt/CSRTrack/csrtrack_openmpi.sh']) framework.defineElegantCommand(['elegant']) framework['S07'].file_block['input']['prefix'] = '../../basefiles_'+str(scaling)+'/' framework.track(track=True, startfile='S07')
def create_base_files(scaling, charge=70): framework = Framework('basefiles_' + str(scaling) + '_' + str(charge), overwrite=True, clean=True) framework.loadSettings('CLA10-BA1_TOMP_ASTRA.def') if not os.name == 'nt': framework.defineASTRACommand(scaling=(scaling)) framework.defineCSRTrackCommand(scaling=(scaling)) framework.generator.number_of_particles = 2**(3 * scaling) framework.modifyElement('CLA-LRG1-GUN-CAV', 'phase', -5) framework['generator'].charge = charge * 1e-12 # before_tracking() framework.track(files=['generator', 'injector10'])
def create_base_files_20pC(scaling): framework = Framework('basefiles_' + str(scaling) + '_20pC', overwrite=True) framework.loadSettings('Lattices/clara400_v12_v3.def') if not os.name == 'nt': framework.defineASTRACommand(scaling=scaling) framework.defineCSRTrackCommand(scaling=scaling) framework.generator.number_of_particles = 2**(3 * scaling) framework.generator.charge = 20e-12 framework['CLA-HRG1-GUN-SOL'].field_amplitude = 0.322 framework['CLA-L01-CAV-SOL-01'].field_amplitude = 0.08 framework['CLA-L01-CAV-SOL-02'].field_amplitude = -0.08 framework['CLA-L02-CAV'].phase = 20 framework['CLA-L03-CAV'].phase = 30 # framework['bunch_compressor'].angle = 0.1 # framework['L02'].sample_interval = 2**(3*2) framework.track(endfile="S07") #, startfile='VBC')
def create_base_files(scaling): framework = Framework('basefiles_' + str(scaling), overwrite=True, clean=True) framework.loadSettings('CLA10-BA1_TOMP.def') if not os.name == 'nt': framework.defineASTRACommand( ['mpiexec', '-np', str(3 * scaling), '/opt/ASTRA/astra_MPICH2.sh']) framework.defineGeneratorCommand(['/opt/ASTRA/generator.sh']) framework.defineCSRTrackCommand([ '/opt/OpenMPI-1.4.3/bin/mpiexec', '-n', str(3 * scaling), '/opt/CSRTrack/csrtrack_openmpi.sh' ]) framework.generator.number_of_particles = 2**(3 * scaling) framework.modifyElement('CLA-LRG1-GUN-CAV', 'phase', -5) framework.track(files=['generator', 'injector10'])
framework.defineASTRACommand( ['mpiexec', '-np', str(ncpu), '/opt/ASTRA/astra_MPICH2.sh']) framework.defineCSRTrackCommand([ '/opt/OpenMPI-1.4.3/bin/mpiexec', '-n', str(ncpu), '/opt/CSRTrack/csrtrack_openmpi.sh' ]) framework.defineElegantCommand(['elegant']) framework.loadSettings('Lattices/CLA10-BA1.def') framework.change_Lattice_Code('All', 'elegant') framework['S02'].prefix = '../../basefiles_4/' etax = [] etax2 = [] kValues = np.arange(0, 3, 0.1) for k in kValues: #np.arange(0,1,0.1): print('setting k = ', k) framework.modifyElement('EBT-BA1-MAG-QUAD-07', 'k1l', k) framework.track(startfile='S02', endfile='BA1_dipole') twiss.reset_dicts() twiss.read_sdds_file(basedir + '/BA1_dipole.mat') etax.append(twiss.elegant['R16'][-1]) etax2.append(twiss.elegant['T166'][-1]) print(k, twiss.elegant['R16'][-1], twiss.elegant['T166'][-1], twiss.elegant['R16'][-1] / twiss.elegant['T166'][-1]) data = zip(kValues, etax, etax2, np.array(etax) / np.array(etax2)) with open('dispersion.csv', 'w', newline='') as f: writer = csv.writer(f) writer.writerows(data)
class fitnessFunc(): def __init__(self, args, tempdir, scaling=4, overwrite=True, verbose=False, summary=False, post_injector=True): self.cons = constraintsClass() self.beam = rbf.beam() self.twiss = rtf.twiss() self.scaling = scaling self.tmpdir = tempdir self.verbose = verbose self.summary = summary self.overwrite = overwrite self.post_injector = post_injector # print 'self.post_injector = ', self.post_injector ''' if only post-injector optimisation''' if self.post_injector: linac2field, linac2phase, linac3field, linac3phase, fhcfield, fhcphase, linac4field, linac4phase, bcangle = args self.parameters = dict( zip([ 'linac2field', 'linac2phase', 'linac3field', 'linac3phase', 'fhcfield', 'fhcphase', 'linac4field', 'linac4phase', 'bcangle' ], args)) else: ''' including injector parameters ''' gunphase, gunsol, linac1field, linac1phase, linac1sol1, linac1sol2, linac2field, linac2phase, linac3field, linac3phase, fhcfield, fhcphase, linac4field, linac4phase, bcangle = args self.parameters = dict( zip([ 'gunphase', 'gunsol', 'linac1field', 'linac1phase', 'linac1sol1', 'linac1sol2', 'linac2field', 'linac2phase', 'linac3field', 'linac3phase', 'fhcfield', 'fhcphase', 'linac4field', 'linac4phase', 'bcangle' ], args)) self.npart = 2**(3 * scaling) ncpu = scaling * 3 if self.post_injector: self.sbandlinacfields = np.array( [linac2field, linac3field, linac4field]) else: self.sbandlinacfields = np.array( [linac1field, linac2field, linac3field, linac4field]) self.dirname = os.path.basename(self.tmpdir) self.framework = Framework(self.dirname, overwrite=overwrite, verbose=verbose) if not os.name == 'nt': self.framework.defineGeneratorCommand(['/opt/ASTRA/generator']) self.framework.defineASTRACommand( ['mpiexec', '-np', str(ncpu), '/opt/ASTRA/astra_MPICH2.sh']) self.framework.defineCSRTrackCommand([ '/opt/OpenMPI-1.4.3/bin/mpiexec', '-n', str(ncpu), '/opt/CSRTrack/csrtrack_openmpi.sh' ]) self.framework.defineElegantCommand(['elegant']) self.framework.loadSettings('Lattices/clara400_v12_v3.def') if not self.post_injector: self.framework.generator.particles = self.npart self.framework.modifyElement('CLA-HRG1-GUN-CAV', 'phase', gunphase) self.framework.modifyElement('CLA-HRG1-GUN-SOL', 'field_amplitude', gunsol) self.framework.modifyElement('CLA-L01-CAV', 'field_amplitude', abs(linac1field)) self.framework.modifyElement('CLA-L01-CAV', 'phase', linac1phase) self.framework.modifyElement('CLA-L01-CAV-SOL-01', 'field_amplitude', linac1sol1) self.framework.modifyElement('CLA-L01-CAV-SOL-02', 'field_amplitude', linac1sol2) self.framework.modifyElement('CLA-L02-CAV', 'field_amplitude', abs(linac2field)) self.framework.modifyElement('CLA-L02-CAV', 'phase', linac2phase) self.framework.modifyElement('CLA-L03-CAV', 'field_amplitude', abs(linac3field)) self.framework.modifyElement('CLA-L03-CAV', 'phase', linac3phase) self.framework.modifyElement('CLA-L4H-CAV', 'field_amplitude', abs(fhcfield)) self.framework.modifyElement('CLA-L4H-CAV', 'phase', fhcphase) self.framework.modifyElement('CLA-L04-CAV', 'field_amplitude', abs(linac4field)) self.framework.modifyElement('CLA-L04-CAV', 'phase', linac4phase) self.framework['bunch_compressor'].set_angle(abs(bcangle)) def between(self, value, minvalue, maxvalue, absolute=True): if absolute: result = max([minvalue, min([maxvalue, abs(value)])]) else: result = np.sign(value) * max( [minvalue, min([maxvalue, abs(value)])]) return result def calculateBeamParameters(self): bcangle = self.framework['bunch_compressor'].angle # print 'bcangle = ', bcangle try: # if abs(bcangle) < 0.01 or abs(bcangle) > 0.175: # raise ValueError if self.overwrite: startS = self.framework['S02'].startObject['position_start'][2] if self.post_injector: self.framework['S02'].file_block['input'][ 'prefix'] = '../basefiles_' + str(self.scaling) + '/' self.framework.track(startfile='S02', endfile='S07') #startfile='FMS') else: self.framework.track(endfile='S07') # self.beam.read_astra_beam_file(self.dirname+'/S07.4928.001') self.beam.read_HDF5_beam_file(self.dirname + '/CLA-S07-MARK-03.hdf5') self.beam.slices = 10 self.beam.bin_time() sigmat = 1e12 * np.std(self.beam.t) sigmap = np.std(self.beam.p) meanp = np.mean(self.beam.p) emitx = 1e6 * self.beam.normalized_mve_horizontal_emittance emity = 1e6 * self.beam.normalized_mve_horizontal_emittance density = self.beam.density fitp = 100 * sigmap / meanp fhcfield = self.parameters['fhcfield'] peakI, peakIMomentumSpread, peakIEmittanceX, peakIEmittanceY, peakIMomentum, peakIDensity = self.beam.mvesliceAnalysis( ) chirp = self.beam.chirp constraintsList = { 'peakI_min': { 'type': 'greaterthan', 'value': abs(peakI), 'limit': 600, 'weight': 60 }, 'peakI_max': { 'type': 'lessthan', 'value': abs(peakI), 'limit': 750, 'weight': 10 }, # 'peakIMomentumSpread': {'type': 'lessthan', 'value': peakIMomentumSpread, 'limit': 0.1, 'weight': 2}, # 'peakIEmittanceX': {'type': 'lessthan', 'value': 1e6*peakIEmittanceX, 'limit': 0.75, 'weight': 5}, # 'peakIEmittanceY': {'type': 'lessthan', 'value': 1e6*peakIEmittanceY, 'limit': 0.75, 'weight': 5}, 'peakIMomentum': { 'type': 'equalto', 'value': 1e-6 * peakIMomentum, 'limit': 220, 'weight': 20 }, 'sband_linac fields': { 'type': 'lessthan', 'value': 1e-6 * self.sbandlinacfields, 'limit': 32, 'weight': 200 }, # 'xband_linac fields': {'type': 'lessthan', 'value': 1e-6*self.xbandlinacfields, 'limit': 100, 'weight': 100}, '4hc field': { 'type': 'lessthan', 'value': 1e-6 * fhcfield, 'limit': 35, 'weight': 100 }, # 'horizontal emittance': {'type': 'lessthan', 'value': emitx, 'limit': 2, 'weight': 0}, # 'vertical emittance': {'type': 'lessthan', 'value': emity, 'limit': 2, 'weight': 0}, # 'momentum_spread': {'type': 'lessthan', 'value': fitp, 'limit': 0.1, 'weight': 2}, 'chirp': { 'type': 'equalto', 'value': abs(chirp), 'limit': 0.75, 'weight': 5 }, 'correct_chirp': { 'type': 'lessthan', 'value': chirp, 'limit': 0, 'weight': 100 }, 'peakI_volume': { 'type': 'greaterthan', 'value': peakIDensity, 'limit': 1e32, 'weight': 5 }, 'volume': { 'type': 'greaterthan', 'value': density, 'limit': 1e30, 'weight': 5 }, } # self.twiss.read_astra_emit_files(self.dirname+'/S07.Zemit.001') # constraintsList5 = { # 'last_exn_5': {'type': 'lessthan', 'value': 1e6*self.twiss['enx'], 'limit': 0.75, 'weight': 1}, # 'last_eyn_5': {'type': 'lessthan', 'value': 1e6*self.twiss['eny'], 'limit': 0.75, 'weight': 1}, # } # constraintsList = merge_two_dicts(constraintsList, constraintsList5) fitness = self.cons.constraints(constraintsList) if self.verbose: print self.cons.constraintsList(constraintsList) if self.summary: np.save('summary_constraints.txt', self.cons.constraintsList(constraintsList)) # self.astra.createHDF5Summary(reference='Longitudinal_GA') print fitness, 1e-6 * peakIMomentum, abs( peakI ), 1e6 * peakIEmittanceX, 1e6 * peakIEmittanceY, chirp, peakIDensity, density return fitness except Exception as e: print(e) return 1e6
class fitnessFunc(): def __init__(self, args, tempdir, scaling=4, overwrite=True, verbose=False, summary=False, clean=False): global preparameters, variables self.cons = constraintsClass() self.beam = rbf.beam() self.twiss = rtf.twiss() self.tmpdir = tempdir self.scaling = scaling self.verbose = verbose self.summary = summary self.parameters = preparameters + list(args) self.dirname = os.path.basename(self.tmpdir) self.framework = Framework(self.dirname, clean=clean, verbose=False) self.framework.loadSettings('Lattices/clara400_v12_FEBE.def') if not os.name == 'nt': self.framework.defineASTRACommand(['mpiexec','-np',str(3*scaling),'/opt/ASTRA/astra_MPICH2.sh']) self.framework.defineGeneratorCommand(['/opt/ASTRA/generator.sh']) self.framework.defineCSRTrackCommand(['/opt/OpenMPI-1.4.3/bin/mpiexec','-n',str(3*scaling),'/opt/CSRTrack/csrtrack_openmpi.sh']) # self.framework.defineElegantCommand(['mpiexec','-np',str(3*scaling),'Pelegant']) # else: self.framework.defineElegantCommand(['elegant']) # self.framework.setElementType('quadrupole','k1', self.parameters) [setattr(a, 'k1', 2*a['k1']) for a in variables] def between(self, value, minvalue, maxvalue, absolute=True): if absolute: result = max([minvalue,min([maxvalue,abs(value)])]) else: result = np.sign(value)*max([minvalue,min([maxvalue,abs(value)])]) return result def calculateBeamParameters(self): twiss = self.twiss # try: startS = self.framework['S07'].startObject['position_start'][2] self.framework['S07'].file_block['input']['prefix'] = '../../basefiles_'+str(self.scaling)+'/' self.framework.track(track=True, startfile='S07') constraintsList = {} constraintsListQuads = { 'max_k': {'type': 'lessthan', 'value': [abs(p) for p in self.parameters], 'limit': 2.5, 'weight': 10}, } # constraintsList = merge_two_dicts(constraintsList, constraintsListQuads) twiss.reset_dicts() twiss.read_sdds_file( self.dirname+'/'+'FEBE.twi' ) twiss.read_sdds_file( self.dirname+'/'+'FEBE.sig' ) ip_position = self.framework['FEBE'].findS('CLA-FEB-W-FOCUS-01')[0][1] constraintsListS07 = { 'dechirper_sigma_x': {'type': 'lessthan', 'value': 1e3*twiss.interpolate(ip_position, 'betax', index='s'), 'limit': 0.1, 'weight': 10}, 'dechirper_sigma_y': {'type': 'lessthan', 'value': 1e3*twiss.interpolate(ip_position, 'betay', index='s'), 'limit': 0.1, 'weight': 10}, } constraintsList = merge_two_dicts(constraintsList, constraintsListS07) fitness = self.cons.constraints(constraintsList) if self.verbose: print(self.cons.constraintsList(constraintsList)) if self.summary: self.framework.createHDF5Summary(reference='Transverse_GA') return fitness
################################ ELEGANT ###################################### framework = Framework('VBC_Elegant') if not os.name == 'nt': # framework.defineGeneratorCommand(['/opt/ASTRA/generator']) framework.defineASTRACommand(ncpu=ncpu) framework.defineCSRTrackCommand(ncpu=ncpu) framework.loadSettings('Lattices/clara400_v12_v3.def') framework.change_Lattice_Code('VBC', 'elegant') framework.change_Lattice_Code('S06', 'elegant') framework.change_Lattice_Code('L04', 'elegant') framework.change_Lattice_Code('S07', 'elegant') framework['VBC'].file_block['input']['prefix'] = '../basefiles_5/' framework.track(startfile='VBC', endfile='S07') ################################ ASTRA ###################################### framework = Framework('Phase_Comparison_ASTRA') if not os.name == 'nt': # framework.defineGeneratorCommand(ncpu=ncpu) framework.defineASTRACommand(ncpu=ncpu) framework.defineCSRTrackCommand(ncpu=ncpu) framework.loadSettings('Lattices/clara400_v12_v3.def') framework.change_Lattice_Code('VBC', 'ASTRA') framework.change_Lattice_Code('S06', 'ASTRA') framework.change_Lattice_Code('L04', 'ASTRA') framework.change_Lattice_Code('S07', 'ASTRA') framework['VBC'].file_block['input']['prefix'] = '../basefiles_5/'
class fitnessFunc(): def __init__(self, args, tempdir, scaling=5, overwrite=True, verbose=False, summary=False, post_injector=True): self.cons = constraintsClass() self.beam = rbf.beam() self.scaling = scaling self.tmpdir = tempdir self.verbose = verbose self.summary = summary self.overwrite = overwrite self.post_injector = post_injector ''' if only post-injector optimisation''' if self.post_injector: linac2field, linac2phase, linac3field, linac3phase, fhcfield, fhcphase, linac4field, linac4phase, bcangle = args self.parameters = dict( zip([ 'linac2field', 'linac2phase', 'linac3field', 'linac3phase', 'fhcfield', 'fhcphase', 'linac4field', 'linac4phase', 'bcangle' ], args)) else: ''' including injector parameters ''' gunphase, gunsol, linac1field, linac1phase, linac1sol1, linac1sol2, linac2field, linac2phase, linac3field, linac3phase, fhcfield, fhcphase, linac4field, linac4phase, bcangle = args self.parameters = dict( zip([ 'gunphase', 'gunsol', 'linac1field', 'linac1phase', 'linac1sol1', 'linac1sol2', 'linac2field', 'linac2phase', 'linac3field', 'linac3phase', 'fhcfield', 'fhcphase', 'linac4field', 'linac4phase', 'bcangle' ], args)) self.npart = 2**(3 * scaling) ncpu = scaling * 3 if self.post_injector: self.sbandlinacfields = np.array( [linac2field, linac3field, linac4field]) else: self.sbandlinacfields = np.array( [linac1field, linac2field, linac3field, linac4field]) self.dirname = os.path.basename(self.tmpdir) self.framework = Framework(self.dirname, overwrite=overwrite, verbose=verbose) if not os.name == 'nt': self.framework.defineGeneratorCommand(['/opt/ASTRA/generator']) self.framework.defineASTRACommand( ['mpiexec', '-np', str(ncpu), '/opt/ASTRA/astra_MPICH2.sh']) self.framework.defineCSRTrackCommand([ '/opt/OpenMPI-1.4.3/bin/mpiexec', '-n', str(ncpu), '/opt/CSRTrack/csrtrack_openmpi.sh' ]) self.framework.defineElegantCommand(['elegant']) self.framework.loadSettings('Lattices/clara400_v12_v3_elegant.def') if not self.post_injector: self.framework.generator.particles = self.npart self.framework.modifyElement('CLA-HRG1-GUN-CAV', 'phase', gunphase) self.framework.modifyElement('CLA-HRG1-GUN-SOL', 'field_amplitude', gunsol) self.framework.modifyElement('CLA-L01-CAV', 'field_amplitude', abs(linac1field)) self.framework.modifyElement('CLA-L01-CAV', 'phase', linac1phase) self.framework.modifyElement('CLA-L01-CAV-SOL-01', 'field_amplitude', linac1sol1) self.framework.modifyElement('CLA-L01-CAV-SOL-02', 'field_amplitude', linac1sol2) self.framework.modifyElement('CLA-L02-CAV', 'field_amplitude', abs(linac2field)) self.framework.modifyElement('CLA-L02-CAV', 'phase', linac2phase) self.framework.modifyElement('CLA-L03-CAV', 'field_amplitude', abs(linac3field)) self.framework.modifyElement('CLA-L03-CAV', 'phase', linac3phase) self.framework.modifyElement('CLA-L4H-CAV', 'field_amplitude', abs(fhcfield)) self.framework.modifyElement('CLA-L4H-CAV', 'phase', fhcphase) self.framework.modifyElement('CLA-L04-CAV', 'field_amplitude', abs(linac4field)) self.framework.modifyElement('CLA-L04-CAV', 'phase', linac4phase) self.framework['bunch_compressor'].set_angle(abs(bcangle)) def calculateBeamParameters(self): try: if self.post_injector: self.framework['POSTINJ'].file_block['input'][ 'prefix'] = '../basefiles_' + str(self.scaling) + '/' self.framework.track(startfile='POSTINJ') else: self.framework.track() #startfile='FMS') self.beam.read_HDF5_beam_file(self.dirname + '/CLA-FMS-APER-01.hdf5') ## CONVERT THIS TO A DIST FILE!!! except Exception as e: print(e) return 1e6
class fitnessFunc(): def __init__(self, args, tempdir, scaling=4, overwrite=True, verbose=False, summary=False): self.cons = constraintsClass() self.beam = rbf.beam() self.twiss = rtf.twiss() self.tmpdir = tempdir self.verbose = verbose self.summary = summary self.parameters = list(args) self.dirname = os.path.basename(self.tmpdir) self.framework = Framework(self.dirname, clean=False) self.framework.loadSettings('Lattices/clara400_v12_elegant.def') if not os.name == 'nt': self.framework.defineASTRACommand(['mpiexec','-np',str(3*scaling),'/opt/ASTRA/astra_MPICH2.sh']) self.framework.defineGeneratorCommand(['/opt/ASTRA/generator.sh']) self.framework.defineCSRTrackCommand(['/opt/OpenMPI-1.4.3/bin/mpiexec','-n',str(3*scaling),'/opt/CSRTrack/csrtrack_openmpi.sh']) self.framework.generator.number_of_particles = 2**(3*scaling) else: self.framework.generator.number_of_particles = 2**(3*3) self.framework.setElementType('quadrupole','k1', self.parameters) def between(self, value, minvalue, maxvalue, absolute=True): if absolute: result = max([minvalue,min([maxvalue,abs(value)])]) else: result = np.sign(value)*max([minvalue,min([maxvalue,abs(value)])]) return result def calculateBeamParameters(self): twiss = self.twiss try: self.framework.track(run=True) constraintsList = {} constraintsListQuads = { 'max_k': {'type': 'lessthan', 'value': [abs(p) for p in self.parameters], 'limit': 2.5, 'weight': 10}, } constraintsList = merge_two_dicts(constraintsList, constraintsListQuads) twiss.read_astra_emit_files( [ self.dirname+'/'+n+'.Zemit.001' for n in self.framework.fileSettings.keys() if self.framework.fileSettings[n]['code'].upper() == 'ASTRA'] ) constraintsListSigmas = { 'max_xrms': {'type': 'lessthan', 'value': 1e3*twiss['sigma_x'], 'limit': 1, 'weight': 10}, 'max_yrms': {'type': 'lessthan', 'value': 1e3*twiss['sigma_y'], 'limit': 1, 'weight': 10}, 'min_xrms': {'type': 'greaterthan', 'value': 1e3*twiss['sigma_x'], 'limit': 0.1, 'weight': 10}, 'min_yrms': {'type': 'greaterthan', 'value': 1e3*twiss['sigma_y'], 'limit': 0.1, 'weight': 10}, 'last_exn': {'type': 'lessthan', 'value': 1e6*twiss['enx'][-1], 'limit': 0.6, 'weight': 1}, 'last_eyn': {'type': 'lessthan', 'value': 1e6*twiss['eny'][-1], 'limit': 0.6, 'weight': 1}, } constraintsList = merge_two_dicts(constraintsList, constraintsListSigmas) twiss.read_astra_emit_files(self.dirname+'/S07.Zemit.001') tdc_position = self.framework['CLA-S07-TDC-01-R']['position_start'][2] tdc_screen_position = self.framework['CLA-S07-DIA-SCR-03-W']['position_start'][2] dechirper_position = self.framework['CLA-S07-DCP-01']['position_start'][2] constraintsListS07 = { 'tdc_phase_advance': {'type': 'equalto', 'value': twiss.interpolate(tdc_screen_position,'muy') - twiss.interpolate(tdc_position,'muy'), 'limit': 0.25, 'weight': 1}, 'tdc_screen_beta_y': {'type': 'greaterthan', 'value': twiss.extract_values('beta_y', tdc_position, tdc_screen_position), 'limit': 5, 'weight': 1}, 'dechirper_sigma_x': {'type': 'equalto', 'value': 1e3*twiss.interpolate(dechirper_position, 'sigma_x'), 'limit': 0.1, 'weight': 10}, 'dechirper_sigma_y': {'type': 'equalto', 'value': 1e3*twiss.interpolate(dechirper_position, 'sigma_y'), 'limit': 0.1, 'weight': 10}, 'dechirper_sigma_xy': {'type': 'equalto', 'value': 1e3*twiss.interpolate(dechirper_position, 'sigma_y') - 1e3*twiss.interpolate(dechirper_position, 'sigma_x'), 'limit': 0.0, 'weight': 20}, } constraintsList = merge_two_dicts(constraintsList, constraintsListS07) fitness = self.cons.constraints(constraintsList) if self.verbose: print self.cons.constraintsList(constraintsList) if self.summary: self.astra.createHDF5Summary(reference='Transverse_GA') return fitness except: return 1e6
class fitnessFunc(): def __init__(self, args, tempdir, scaling=4, overwrite=True, verbose=False, summary=False, clean=False): self.cons = constraintsClass() self.beam = rbf.beam() self.twiss = rtf.twiss() self.tmpdir = tempdir self.scaling = scaling self.verbose = verbose self.summary = summary self.parameters = list(args) self.dirname = os.path.basename(self.tmpdir) self.framework = Framework(self.dirname, clean=clean, verbose=False) self.framework.loadSettings('Lattices/claraX400_v12_80MVm.def') if not os.name == 'nt': self.framework.defineASTRACommand(['mpiexec','-np',str(3*scaling),'/opt/ASTRA/astra_MPICH2.sh']) self.framework.defineGeneratorCommand(['/opt/ASTRA/generator.sh']) self.framework.defineCSRTrackCommand(['/opt/OpenMPI-1.4.3/bin/mpiexec','-n',str(3*scaling),'/opt/CSRTrack/csrtrack_openmpi.sh']) # self.framework.defineElegantCommand(['mpiexec','-np',str(3*scaling),'Pelegant']) # else: self.framework.defineElegantCommand(['elegant']) self.framework.setElementType('quadrupole','k1', self.parameters) def between(self, value, minvalue, maxvalue, absolute=True): if absolute: result = max([minvalue,min([maxvalue,abs(value)])]) else: result = np.sign(value)*max([minvalue,min([maxvalue,abs(value)])]) return result def calculateBeamParameters(self): twiss = self.twiss # try: startS = self.framework['L02'].startObject['position_start'][2] self.framework['L02'].file_block['input']['prefix'] = '../../basefiles_'+str(self.scaling)+'/' self.framework.track() constraintsList = {} constraintsListQuads = { 'max_k': {'type': 'lessthan', 'value': [abs(p) for p in self.parameters], 'limit': 2.5, 'weight': 10}, } # constraintsList = merge_two_dicts(constraintsList, constraintsListQuads) twiss.reset_dicts() twiss.read_astra_emit_files( self.dirname+'/'+'L04.Xemit.001' ) constraintsListSigmas = { 'max_xrms': {'type': 'lessthan', 'value': 1e3*twiss['sigma_x'], 'limit': 1, 'weight': 10}, 'max_yrms': {'type': 'lessthan', 'value': 1e3*twiss['sigma_y'], 'limit': 1, 'weight': 10}, 'min_xrms': {'type': 'greaterthan', 'value': 1e3*twiss['sigma_x'], 'limit': 0.1, 'weight': 0}, 'min_yrms': {'type': 'greaterthan', 'value': 1e3*twiss['sigma_y'], 'limit': 0.1, 'weight': 0}, 'last_exn': {'type': 'lessthan', 'value': 1e6*twiss['enx'][-1], 'limit': 0.6, 'weight': 1}, 'last_eyn': {'type': 'lessthan', 'value': 1e6*twiss['eny'][-1], 'limit': 0.6, 'weight': 1}, } # constraintsList = merge_two_dicts(constraintsList, constraintsListSigmas) # tdc_position = self.framework['CLA-S07-TDC-01-R']['position_start'][2] # tdc_screen_position = self.framework['CLA-S07-DIA-SCR-03-W']['position_start'][2] # dechirper_position = self.framework['CLA-S07-DCP-01']['position_start'][2] # constraintsListS07 = { # 'tdc_phase_advance': {'type': 'equalto', 'value': (twiss.interpolate(tdc_screen_position,'muy', index='s') - twiss.interpolate(tdc_position,'muy', index='s')) % 0.25, 'limit': 0, 'weight': 1}, # 'tdc_screen_beta_y': {'type': 'greaterthan', 'value': twiss.extract_values('betay', tdc_position, tdc_screen_position), 'limit': 5, 'weight': 1}, # 'dechirper_sigma_x': {'type': 'lessthan', 'value': 1e3*twiss.interpolate(dechirper_position, 'Sx', index='s'), 'limit': 0.1, 'weight': 10}, # 'dechirper_sigma_y': {'type': 'lessthan', 'value': 1e3*twiss.interpolate(dechirper_position, 'Sy', index='s'), 'limit': 0.1, 'weight': 10}, # 'dechirper_sigma_xy': {'type': 'equalto', 'value': 1e3*twiss.interpolate(dechirper_position, 'Sy', index='s'), 'limit': 1e3*twiss.interpolate(dechirper_position, 'Sx', index='s'), 'weight': 35}, # } # constraintsList = merge_two_dicts(constraintsList, constraintsListS07) fitness = self.cons.constraints(constraintsList) if self.verbose: print self.cons.constraintsList(constraintsList) if self.summary: self.framework.createHDF5Summary(reference='Transverse_GA') return fitness
import sys, os sys.path.append('../../../') from SimulationFramework.Framework import * lattice = Framework('./ASTRA', clean=False, verbose=True) lattice.loadSettings('Lattices/CLA10-BA1.def') if not os.name == 'nt': scaling = 5 lattice.defineASTRACommand( ['mpiexec', '-np', str(3 * scaling), '/opt/ASTRA/astra_MPICH2.sh']) # lattice.defineASTRACommand(['/opt/ASTRA/astra.sh']) lattice.defineGeneratorCommand(['/opt/ASTRA/generator.sh']) lattice.defineCSRTrackCommand([ '/opt/OpenMPI-1.4.3/bin/mpiexec', '-n', str(3 * scaling), '/opt/CSRTrack/csrtrack_openmpi.sh' ]) lattice.defineElegantCommand(['elegant']) lattice['S02'].file_block['input']['prefix'] = '../../basefiles_5/' lattice.generator.particles = 2**(3 * 3) lattice.track(startfile='C2V')