def OptimisingFunction(self, inputargs, **kwargs):
        self.optdir = 'MOGA/iteration_'
        if not self.post_injector:
            parameternames = self.injector_parameter_names + self.parameter_names
        else:
            parameternames = copy(self.parameter_names)

        self.inputlist = list(map(lambda a: a[0]+[a[1]], zip(parameternames, inputargs)))

        self.linac_fields = np.array([i[2] for i in self.inputlist if i[1] == 'field_amplitude'])
        self.linac_phases = np.array([i[2] for i in self.inputlist if i[1] == 'phase'])

        idclient = idn.zmqClient()
        n =  idclient.get_id()
        # print('id n = ', n)
        self.opt_iteration = n

        dir = self.optdir+str(self.opt_iteration)
        if not os.path.exists(dir):
            os.makedirs(dir)
        self.setup_lattice(self.inputlist, dir)
        self.before_tracking()
        fitvalue = self.track()

        if isinstance(self.opt_iteration, int):
            self.opt_iteration += 1

        if e < 0.01:
            print ('e too low! ', e)
            l = 500
        self.resultsDict.update({'e': e, 'b': b, 'ee': ee, 'be': be, 'l': l, 'g': g, 'brightness': (1e-4*e)/(1e-2*b), 'momentum': 1e-6*np.mean(g.momentum)})
        return e, b, ee, be, l, g
예제 #2
0
    def OptimisingFunction(self, inputargs, *args, **kwargs):
        idclient = idn.zmqClient()
        n = idclient.get_id()
        self.opt_iteration = n
        bestcli = bestclient.zmqClient()

        if not self.POST_INJECTOR:
            parameternames = self.injector_parameter_names + self.parameter_names
        else:
            parameternames = copy(self.parameter_names)
        self.inputlist = [
            a[0] + [a[1]] for a in zip(parameternames, inputargs)
        ]

        self.linac_fields = np.array(
            [i[2] for i in self.inputlist if i[1] == 'field_amplitude'])
        self.linac_phases = np.array(
            [i[2] for i in self.inputlist if i[1] == 'phase'])

        if 'dir' in list(kwargs.keys()):
            dir = kwargs['dir']
            del kwargs['dir']
        else:
            dir = self.optdir + str(self.opt_iteration)

        self.fit.setup_lattice(self.inputlist,
                               dir,
                               changes=self.changes,
                               *args,
                               **kwargs)
        fitvalue = self.fit.calculateBeamParameters()
        self.opt_iteration += 1
        constraintsList = self.calculate_constraints()
        fitvalue = self.cons.constraints(constraintsList)
        print('fitvalue[', self.opt_iteration - 1, '] = ', fitvalue)
        saveState(self.subdir, inputargs, self.opt_iteration - 1, fitvalue)
        bestcli.set_best(fitvalue, self.opt_iteration)
        self.bestfit = bestcli.get_best()
        # print('best = ', best)
        if fitvalue <= self.bestfit:
            print(self.cons.constraintsList(constraintsList))
            print('!!!!!!  New best = ', fitvalue, inputargs)
            copyfile(dir + '/changes.yaml', self.best_changes)
            self.bestfit = fitvalue
        return (fitvalue, )
예제 #3
0
    def OptimisingFunction(self, inputargs, **kwargs):
        self.optdir = 'MOGA/iteration_'
        parameternames = [r[:2] for r in self.parameter_names]

        self.inputlist = list(
            map(lambda a: a[0] + [a[1]], zip(parameternames, inputargs)))

        self.linac_fields = np.array(
            [i[2] for i in self.inputlist if i[1] == 'field_amplitude'])
        self.linac_phases = np.array(
            [i[2] for i in self.inputlist if i[1] == 'phase'])

        idclient = idn.zmqClient()
        n = idclient.get_id()
        self.opt_iteration = n

        dir = self.optdir + str(self.opt_iteration)
        if not os.path.exists(dir):
            os.makedirs(dir)
        self.setup_lattice(self.inputlist, dir)
        self.before_tracking()
        fitvalue = self.track(endfile='S07')

        self.beam.read_HDF5_beam_file(self.dirname + '/CLA-S07-MARK-03.hdf5')
        self.beam.slices = 50
        self.beam.bin_time()
        sigmat = 1e12 * np.std(self.beam.t)
        sigmap = np.std(self.beam.cp)
        meanp = np.mean(self.beam.cp)
        emitx = 1e6 * self.beam.normalized_horizontal_emittance
        emity = 1e6 * self.beam.normalized_horizontal_emittance
        fitp = 100 * sigmap / meanp  #percentage energy spread
        peakI, peakIstd, peakIMomentumSpread, peakIEmittanceX, peakIEmittanceY, peakIMomentum, peakIDensity = self.beam.sliceAnalysis(
        )

        self.twiss.read_astra_emit_files([
            self.dirname + '/' + n + '.Zemit.001'
            for n in self.framework.fileSettings.keys()[:-1]
            if self.framework.fileSettings[n]['code'].upper() == 'ASTRA'
        ])
        max_xrms = max(1e3 * self.twiss['sigma_x'])
        if isinstance(self.opt_iteration, int):
            self.opt_iteration += 1

        return fitp, peakI, max_xrms