コード例 #1
0
#     framework.defineGeneratorCommand(['/opt/ASTRA/generator'])
#     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/clara400_v12_v3.def')
# framework['VBC'].file_block['input']['prefix'] = '../basefiles_5/'
# framework.track(startfile='VBC', endfile='S07')

################################  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)
コード例 #2
0
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
def optimise_Lattice(phase=4, q=70, do_optimisation=False):
    global dir, lattice, scaling, bestdelta
    bestdelta = 1e10
    dir = './SETUP/TOMP_SETUP'
    lattice = Framework(dir, clean=False, verbose=False)
    lattice.loadSettings('CLA10-BA1_TOMP_ASTRA.def')
    lattice.change_Lattice_Code('S02', 'elegant')
    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['L01'].file_block['input']['prefix'] = '../basefiles_' + str(
        scaling) + '_' + str(q) + '/'
    quads = 0.107 * np.array([
        21.11058462, -11.36377551, 24.69336696, -22.63264054, 56.07039682,
        -51.58739658
    ])
    quads = [
        # lattice.getElement('CLA-S02-MAG-QUAD-01', 'k1l'),
        # lattice.getElement('CLA-S02-MAG-QUAD-02', 'k1l'),
        # lattice.getElement('CLA-S02-MAG-QUAD-03', 'k1l'),
        # lattice.getElement('CLA-S02-MAG-QUAD-04', 'k1l'),
        # lattice.getElement('CLA-C2V-MAG-QUAD-01', 'k1l'),
        # lattice.getElement('CLA-C2V-MAG-QUAD-02', 'k1l'),
        lattice.getElement('EBT-INJ-MAG-QUAD-07', 'k1l'),
        lattice.getElement('EBT-INJ-MAG-QUAD-08', 'k1l'),
        lattice.getElement('EBT-INJ-MAG-QUAD-09', 'k1l'),
        lattice.getElement('EBT-INJ-MAG-QUAD-10', 'k1l'),
        lattice.getElement('EBT-INJ-MAG-QUAD-11', 'k1l'),
        lattice.getElement('EBT-INJ-MAG-QUAD-15', 'k1l'),
        lattice.getElement('EBT-BA1-MAG-QUAD-01', 'k1l'),
        lattice.getElement('EBT-BA1-MAG-QUAD-02', 'k1l'),
        lattice.getElement('EBT-BA1-MAG-QUAD-03', 'k1l'),
        lattice.getElement('EBT-BA1-MAG-QUAD-04', 'k1l'),
        lattice.getElement('EBT-BA1-MAG-QUAD-05', 'k1l'),
        lattice.getElement('EBT-BA1-MAG-QUAD-06', 'k1l'),
        lattice.getElement('EBT-BA1-MAG-QUAD-07', 'k1l'),
    ]
    quads = np.array([
        1.813883341270411, -1.657984997152041, 2.436078305927638,
        -1.3805803719324001, 5.757521138743945, -4.774512264530579,
        1.5759640821849459, -1.5658635139945611, 0.4665090704522008,
        -0.3701448642096947, 0.14139459095219498, 0.1294045271940972,
        -0.26170990073523187, -0.972243028906357, 1.2999713197810956,
        1.3880410074706666, 0.043801044316032774, -1.3992446074305926,
        1.3604179976621753
    ])
    quadsCHICANE = quads[:6]
    # quadsCHICANE = np.array([ 1.81966806, -1.60694003,  2.52387281, -1.34318408,  5.75696896,
    #    -4.86231975,])
    lattice['S02'].sample_interval = 2**(3 * 3)
    if do_optimisation:
        if phase is not None:
            lattice['S02'].file_block['input'][
                'prefix'] = '../TOMP_SETUP_' + str(phase) + '_' + str(q) + '/'
        lattice['S02'].file_block['output']['end_element'] = 'CLA-C2V-MARK-02'
        val = optFuncChicane(quadsCHICANE)
        quadsCHICANE = setChicane(quadsCHICANE)
        val = optFuncChicane(quadsCHICANE)
        print val
        print('Chicane = ', quadsCHICANE)
        quads[:6] = quadsCHICANE
        # exit()
        lattice['S02'].file_block['output'][
            'end_element'] = 'EBT-BA1-DIA-FCUP-01'
        val = optFuncVELA(quads)
        while val > 10:
            print('################  CURRENT VALUE OF OPTIMISATION IS ', val,
                  '  ##################')
            quads = setVELA(quads)
            val = optFuncVELA(quads)
    else:
        val = optFuncVELA(quads)
    lattice['S02'].file_block['output']['end_element'] = 'EBT-BA1-DIA-FCUP-01'
    lattice['S02'].sample_interval = 1
    return quads
コード例 #4
0
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')
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.args = args
        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_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 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.post_injector:
                startS = self.framework['POSTINJ'].startObject[
                    'position_start'][2]
                self.framework['POSTINJ'].file_block['input'][
                    'prefix'] = '../basefiles_' + str(self.scaling) + '/'
                self.framework.track(startfile='POSTINJ')
            else:
                self.framework.track()

            # 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 = 100
            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_horizontal_emittance
            emity = 1e6 * self.beam.normalized_horizontal_emittance
            density = self.beam.density
            fitp = 100 * sigmap / meanp
            fhcfield = self.parameters['fhcfield']
            peakI, peakIstd, peakIMomentumSpread, peakIEmittanceX, peakIEmittanceY, peakIMomentum, peakIDensity = self.beam.sliceAnalysis(
            )
            I400Slices = [a for a in self.beam.slice_peak_current if a > 450]
            if len(I400Slices) < 5:
                I400Slices = [0, 1000000]
            chirp = self.beam.chirp
            constraintsList = {
                'peakI_min': {
                    'type': 'greaterthan',
                    'value': abs(peakI),
                    'limit': 450,
                    'weight': 100
                },
                'peakI_max': {
                    'type': 'lessthan',
                    'value': abs(peakI),
                    'limit': 550,
                    'weight': 10
                },
                'peakI_std': {
                    'type': 'equalto',
                    'value': np.std(I400Slices),
                    'limit': 0,
                    'weight': 0.1
                },
                'peakI_len': {
                    'type': 'greaterthan',
                    'value': len(I400Slices),
                    'limit': 25,
                    'weight': 3
                },
                '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': 1},
                # 'vertical emittance': {'type': 'lessthan', 'value': emity, 'limit': 0.75, 'weight': 1},
                'momentum_spread': {
                    'type': 'lessthan',
                    'value': fitp,
                    'limit': 0.1,
                    'weight': 1
                },
                'chirp': {
                    'type': 'equalto',
                    'value': abs(chirp),
                    'limit': 1,
                    '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)
            fitness = 1e6 if np.isnan(fitness) else fitness
            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), np.std(
                I400Slices), len(
                    I400Slices
                ), 1e6 * peakIEmittanceX, 1e6 * peakIEmittanceY, sigmat, chirp
            saveState(self.args, fitness, 1e-6 * peakIMomentum, abs(peakI),
                      np.std(I400Slices), len(I400Slices),
                      1e6 * peakIEmittanceX, 1e6 * peakIEmittanceY, sigmat,
                      chirp)
            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):
        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
コード例 #7
0
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
コード例 #8
0
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