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.relpath(self.tmpdir)
     self.framework = fw.Framework(self.dirname, clean=True, verbose=False)
     self.framework.loadSettings('CLA10-BA1_TOMP.def')
     self.framework.change_Lattice_Code('All', 'elegant')
     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.defineElegantCommand(['elegant'])
     self.framework.setElementType('quadrupole', 'k1l', self.parameters)
Пример #2
0
def setOutputs(framework):
    beam = rbf.beam()
    for fileName in os.listdir(framework.subdir):
        if fileName.split('.')[-1] == 'hdf5':
            # load data
            name = fileName.split('.')[0]
            #print name
            beam.read_HDF5_beam_file(framework.subdir + '/' + fileName,
                                     local=True)
            if 'BPM' in fileName:
                pvRoot = 'VM-' + framework.getElement(element=name,
                                                      setting='PV',
                                                      default='Null')
                setBPM(pvRoot, beam)
            elif 'YAG' in fileName or 'SCR' in fileName:
                #print fileName
                pvRoot = 'VM-' + framework.getElement(element=name,
                                                      setting='camera_PV',
                                                      default='Null')
                setCamera(pvRoot, beam)
            elif 'SCOPE' in fileName:
                pvRoot = 'VM-' + framework.getElement(element=name,
                                                      setting='PV',
                                                      default='Null')
                setWCM(pvRoot, beam)
            else:
                print '    Unregcognised output file', fileName
Пример #3
0
    def convert_HDF5_edist(self,
                           inp,
                           filename='CLA-FMS-APER-01.hdf5',
                           center=True):
        from ocelot.adaptors.genesis import GenesisElectronDist
        inp_out = inp
        beam = rbf.beam()
        beam.read_HDF5_beam_file(filename)
        beam.rematchXPlane(beta=3.76, alpha=-0.189)
        # print 'beta_x = ', beam.beta_x
        beam.rematchYPlane(beta=1.45, alpha=0)
        # print 'beta_y = ', beam.beta_y
        edist = GenesisElectronDist()
        edist.x = beam.x
        edist.y = beam.y
        # edist.t = -(adist[:, 2] - np.mean(adist[:, 2])) / speed_of_light  # long position normalized to 0 and converted to time #HMCC add -
        edist.t = -1 * beam.t
        edist.t = edist.t - np.amin(edist.t)
        edist.xp = beam.xp
        edist.yp = beam.yp
        p_tot = beam.p
        edist.g = beam.gamma
        edist.part_charge = 250e-12 / len(beam.x)

        if center:
            edist.x -= np.mean(edist.x)
            edist.y -= np.mean(edist.y)
            edist.xp -= np.mean(edist.xp)
            edist.yp -= np.mean(edist.yp)
        setattr(edist, 'filePath',
                getattr(self, 'file_pout') + 'read_edist_astra')
        setattr(inp_out, 'edist', edist)
        return inp_out, beam
    def convert_HDF5_edist(self, inp, filename='CLA-FMS-APER-02.hdf5', center=True):
        from ocelot.adaptors.genesis import GenesisElectronDist
        inp_out = inp
        beam = rbf.beam()
        beam.read_HDF5_beam_file(filename)
        print 'beta_x = ', beam.beta_x, ' alpha_x = ', beam.alpha_x
        print 'beta_y = ', beam.beta_y, ' alpha_y = ', beam.alpha_y
        beam.rematchXPlane(beta=self.betax, alpha=self.alphax)
        beam.rematchYPlane(beta=self.betay, alpha=self.alphay)
        print 'beta_x = ', beam.beta_x, ' alpha_x = ', beam.alpha_x
        print 'beta_y = ', beam.beta_y, ' alpha_y = ', beam.alpha_y
        edist = GenesisElectronDist()
        edist.x = beam.x
        edist.y = beam.y
        # edist.t = -(adist[:, 2] - np.mean(adist[:, 2])) / speed_of_light  # long position normalized to 0 and converted to time #HMCC add -
        edist.t = beam.t
        edist.t = edist.t - np.mean(edist.t)# - 1.80e-13
        edist.xp = beam.xp
        edist.yp = beam.yp
        edist.cp = beam.cp
        edist.g = beam.gamma - np.mean(beam.gamma) + 1000/0.511
        edist.part_charge = abs(self.startcharge)*1e-12 / len(beam.x)
        print ('self.startcharge = ', self.startcharge)
        self.bunch_length = np.std(beam.t)

        if center:
            edist.x -= np.mean(edist.x)
            edist.y -= np.mean(edist.y)
            edist.xp -= np.mean(edist.xp)
            edist.yp -= np.mean(edist.yp)
        setattr(edist,'filePath',getattr(self,'file_pout')+'read_edist_astra')
        setattr(inp_out,'edist',edist)
        return inp_out, beam
Пример #5
0
    def __init__(self,
                 directory='test',
                 master_lattice=None,
                 overwrite=None,
                 runname='CLARA_240',
                 clean=False,
                 verbose=True,
                 sddsindex=0):
        super(Framework, self).__init__()
        # global master_lattice_location
        self.global_parameters = {'beam': rbf.beam(sddsindex=sddsindex)}
        self.verbose = verbose
        self.subdir = directory
        self.clean = clean
        self.elementObjects = OrderedDict()
        self.latticeObjects = OrderedDict()
        self.commandObjects = OrderedDict()
        self.groupObjects = OrderedDict()
        self.progress = 0
        self.basedirectory = os.getcwd()
        self.filedirectory = os.path.dirname(os.path.abspath(__file__))
        self.overwrite = overwrite
        self.runname = runname
        if self.subdir is not None:
            self.setSubDirectory(self.subdir)
        self.setMasterLatticeLocation(master_lattice)

        self.executables = exes.Executables(
            self.global_parameters['master_lattice_location'])
        self.defineASTRACommand = self.executables.define_astra_command
        self.defineElegantCommand = self.executables.define_elegant_command
        self.defineASTRAGeneratorCommand = self.executables.define_ASTRAgenerator_command
        self.defineCSRTrackCommand = self.executables.define_csrtrack_command
        self.define_gpt_command = self.executables.define_gpt_command
 def gaussian_beam_test():
     ## This is for the Gaussian Beam Test!
     master_subdir = 'gaussianBeam'
     beam = rbf.beam()
     elegantbeamfilename = 'CLA-FMS-APER-02.sdds'
     beam.read_SDDS_beam_file(master_subdir + '/' + elegantbeamfilename, charge=250e-12)
     beam.beam['total_charge'] = 250e-12
     HDF5filename = elegantbeamfilename.replace('.sdds','.hdf5').replace('.SDDS','.hdf5').strip('\"')
     beam.write_HDF5_beam_file(master_subdir + '/' + HDF5filename, centered=False, sourcefilename=elegantbeamfilename)
     optfunc(best, dir=os.path.abspath('gaussianBeam'), scaling=6, post_injector=POST_INJECTOR, verbose=True, savestate=False, runGenesis=True, runElegant=False)
 def __init__(self, lattice='Lattices/clara400_v12_v3_elegant_jkj.def'):
     self.CLARA_dir = os.path.relpath(
         os.path.dirname(os.path.dirname(os.path.abspath(
             __file__))))  # if CLARA_dir is None else CLARA_dir
     self.cons = constraintsClass()
     self.beam = rbf.beam()
     self.twiss = rtf.twiss()
     self.lattice_file = lattice
     self.base_files = None
     self.verbose = False
     self.start_lattice = None
     self.scaling = 6
     self.overwrite = True
     self.post_injector = True
     self.startcharge = None
     self.changes = None
     self.sample_interval = 1
Пример #8
0
 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 __init__(self,
              args,
              tempdir,
              scaling=4,
              overwrite=True,
              verbose=False,
              summary=False,
              post_injector=True,
              parameterfile=[]):
     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
     self.parameters = list(args)
     self.dirname = os.path.basename(self.tmpdir)
     self.framework = Framework(self.dirname, clean=False)
     self.framework.loadSettings('Lattices/clara400_v12_v3.def')
     if isinstance(parameterfile, (list, tuple)):
         for p in parameterfile:
             self.framework.loadParametersFile(p)
     elif parameterfile is not None:
         self.framework.loadParametersFile(parameterfile)
     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 __init__(self, lattice='Lattices/clara400_v12_v3_elegant_jkj.def'):
     self.CLARA_dir = os.path.relpath(os.path.dirname(os.path.dirname( os.path.abspath(__file__))))# if CLARA_dir is None else CLARA_dir
     self.cons = constraintsClass()
     self.beam = rbf.beam()
     self.twiss = rtf.twiss()
     self.lattice_file = lattice
     self.base_files = None
     self.verbose = False
     self.start_lattice = None
     self.scaling = 6
     self.overwrite = True
     self.clean = False
     self.post_injector = True
     self.startcharge = None
     self.changes = None
     self.sample_interval = 1
     self.npart=2**(3*self.scaling)
     self.ncpu = self.scaling*3
     self.elegant_ncpu = 1
     self.genesis_ncpu = 2
     self.doTracking = True
     self.change_to_elegant = True
     self.framework = fw.Framework('.', clean=False, overwrite=False, verbose=False)
Пример #11
0
def beam_analysis(d):
    beam = rbf.beam()
    print args.filename
    beam.read_HDF5_beam_file(d + '/' + args.filename)
    return beam
Пример #12
0
import os
import sys
sys.path.append(os.path.abspath(__file__ + '/../../../../../'))
from SimulationFramework.Framework import *
import SimulationFramework.Modules.read_beam_file as rbf
import SimulationFramework.Modules.read_twiss_file as rtf
import numpy as np
ncpu = 10
beam = rbf.beam()
twiss = rtf.twiss()
import csv
################################  CSRTrack #####################################

# framework = Framework('VBC_CSRTrack')
# if not os.name == 'nt':
#     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(['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'])
Пример #13
0
def kNN_Volume_File(file):
    beam = rbf.beam()
    beam.read_HDF5_beam_file(file)
    return kNN_Volume_Beam(beam)
Пример #14
0
 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 analyse_image(mw, dir=None):
    dir = str(dir)
    if dir is not None:
        if os.path.isfile(dir + '/' + 'CLA-S07-APER-01.hdf5'):
            args = parser.parse_args()
            beam = rbf.beam()
            twiss = rtf.twiss()
            beam.read_HDF5_beam_file(dir + '/CLA-S07-APER-01.hdf5')
            twiss.read_elegant_twiss_files(dir + '/CLARAX.twi')
            beam.slice_length = 0.01e-12

            t = 1e12 * (beam.t - np.mean(beam.t))
            t_grid = np.linspace(min(t), max(t), 2**8)
            # t_grid = np.arange(min(t), max(t), 0.01)
            peakIPDF = beam.PDFI(t, t_grid, bandwidth=beam.rms(t) /
                                 (2**3)) * 250
            peakICDF = beam.CDF(t, t_grid, bandwidth=beam.rms(t) / (2**3))
            peakIFWHM, indexes = beam.FWHM(t_grid, peakIPDF, frac=0.5)
            peakIFWHM2, indexes2 = beam.FWHM(t_grid, peakIPDF, frac=2)
            stdpeakIPDF = np.std(
                peakIPDF[indexes2]
            )  #(max(peakIPDF[indexes2]) - min(peakIPDF[indexes2]))/np.mean(peakIPDF[indexes2]) # Flat-top in the distribution!
            # print('stdpeakIPDF = ', stdpeakIPDF)
            # print 'Peak Fraction = ', 100*peakICDF[indexes][-1]-peakICDF[indexes][0], stdpeakIPDF
            beam.bin_time()
            t = 1e12 * (beam.t - np.mean(beam.t))
            dt = beam.slice_length * (max(t) - min(t))

            sigmat = np.std(t)
            sigmap = np.std(beam.p)
            meanp = np.mean(beam.p)
            fitp = 100 * sigmap / meanp
            peakI, peakIstd, peakIMomentumSpread, peakIEmittanceX, peakIEmittanceY, peakIMomentum, peakIDensity = beam.sliceAnalysis(
            )
            peakI = max(peakIPDF)
            # chirp = beam.chirp
            chirp = 1e-6 * (max(beam.cp) - min(beam.cp))

            print('bunchlength = ', 1e6 * beam.sigma_z, 'um  chirp = ',
                  -1 * beam.chirp, 'MeV/ps')
            plt.subplots_adjust(left=0.1,
                                bottom=0.1,
                                right=0.9,
                                top=0.9,
                                wspace=0.25,
                                hspace=0.15)

            ax1 = mw.getFigure().add_subplot(321)
            ax2 = mw.getFigure().add_subplot(323)
            ax3 = mw.getFigure().add_subplot(325)
            ax4 = mw.getFigure().add_subplot(322)
            ax5 = mw.getFigure().add_subplot(324)
            ax6 = mw.getFigure().add_subplot(326)

            ax = [[ax1, ax2, ax3], [ax4, ax5, ax6]]

            exponent = np.floor(np.log10(np.abs(beam.slice_length)))
            x = 10**(12) * np.array((beam.slice_bins - np.mean(beam.t)))
            ax[0][0].plot(x, beam.slice_peak_current)
            ax[0][0].set(xlabel='t (ps)', ylabel='I [A]')

            # ax[0][1].plot(t_grid, peakIPDF, color='blue', alpha=0.5, lw=3)
            # ax[0][1].fill_between(t_grid[indexes], peakIPDF[indexes], 0, facecolor='gray', edgecolor='gray', alpha=0.4)

            beam.read_HDF5_beam_file(dir + '/CLA-S07-CAV-04-SCR.hdf5')
            t = 1e12 * (beam.t - np.mean(beam.t))
            dt = beam.slice_length * (max(t) - min(t))
            p = 1e-6 * beam.cp
            ymax = max(p) + 1
            ymin = min(p) - 1
            if ymax - ymin < 5:
                ymax = np.mean(p) + 2.5
                ymin = np.mean(p) - 2.5
            ax[0][1].set_xlim(min(t) - dt, max(t) + dt)
            ax[0][1].hist2d(t,
                            p,
                            bins=(250, 250),
                            cmap=plt.cm.jet,
                            range=[[min(t), max(t)], [ymin, ymax]])
            # ax[0][2].set_ylim(top=ymax, bottom=ymin)
            ax[0][1].set(ylabel='cp [Mev]')

            beam.read_HDF5_beam_file(dir + '/CLA-S07-APER-01.hdf5')
            t = 1e12 * (beam.t - np.mean(beam.t))
            dt = beam.slice_length * (max(t) - min(t))
            p = 1e-6 * beam.cp
            ymax = max(p) + 1
            ymin = min(p) - 1
            if ymax - ymin < 5:
                ymax = np.mean(p) + 2.5
                ymin = np.mean(p) - 2.5
            ax[0][2].set_xlim(min(t) - dt, max(t) + dt)
            ax[0][2].hist2d(t,
                            p,
                            bins=(250, 250),
                            cmap=plt.cm.jet,
                            range=[[min(t), max(t)], [ymin, ymax]])
            # ax[0][2].set_ylim(top=ymax, bottom=ymin)
            ax[0][2].set(ylabel='cp [Mev]')

            ax[1][0].plot(x, 1e6 * beam.slice_normalized_horizontal_emittance)
            ax[1][0].plot(x, 1e6 * beam.slice_normalized_vertical_emittance)
            ax[1][0].set_ylim(top=3, bottom=0)
            ax[1][0].set(ylabel='emit_x / emit_y [m]')
            ax[1][0].grid()

            ax[1][1].plot(twiss.elegant['s'],
                          0.511 * twiss.elegant['pCentral0'])
            # ax[1][1].set_ylim(top=1100, bottom=0)
            ax[1][1].set(ylabel='Momentum [MeV/c]')
            ax[1][1].grid()

            ax[1][2].plot(twiss.elegant['s'], 1e3 * twiss['sigma_x'])
            ax[1][2].plot(twiss.elegant['s'], 1e3 * twiss['sigma_y'])
            ax[1][2].set(ylabel='sigma_x / sigma_y [m]')
            ax[1][2].grid()
Пример #16
0
def beam_analysis(d):
    beam = rbf.beam()
    beam.read_HDF5_beam_file(d + '/CLA-S07-APER-01.hdf5')
    return beam
Пример #17
0
    def __init__(self, directory='.', **kwargs):
        super(astraPlotWidget, self).__init__(**kwargs)
        self.beam = raf.beam()
        self.twiss = rtf.twiss()
        self.directory = directory
        ''' twissPlotWidget '''
        self.twissPlotView = GraphicsView(useOpenGL=True)
        self.twissPlotWidget = GraphicsLayout()
        self.twissPlotView.setCentralItem(self.twissPlotWidget)

        # self.latticePlotData = imageio.imread(os.path.dirname( os.path.abspath(__file__))+'/lattice_plot.png')
        self.latticePlots = {}
        self.twissPlots = {}
        i = -1
        for entry in self.twissplotLayout:
            if entry == 'next_row':
                self.twissPlotWidget.nextRow()
            else:
                i += 1
                p = self.twissPlotWidget.addPlot(title=entry['name'])
                p.showGrid(x=True, y=True)
                vb = p.vb
                vb.setYRange(*entry['range'])
                # latticePlot = ImageItem(self.latticePlotData)
                # latticePlot.setOpts(axisOrder='row-major')
                # vb.addItem(latticePlot)
                # latticePlot.setZValue(-1)  # make sure this image is on top
                # latticePlot.setOpacity(0.5)
                self.twissPlots[entry['name']] = p.plot(
                    pen=mkPen('b', width=3))
                # self.latticePlots[p.vb] = latticePlot
                p.vb.sigRangeChanged.connect(self.scaleLattice)
        ''' beamPlotWidget '''
        self.beamPlotWidget = QWidget()
        self.beamPlotLayout = QVBoxLayout()
        # self.item = ImageItem()
        self.beamPlotWidget.setLayout(self.beamPlotLayout)
        # self.beamPlotView = ImageView(imageItem=self.item)
        # self.rainbow = rainbow()
        # self.item.setLookupTable(self.rainbow)
        # self.item.setLevels([0,1])
        #     # self.beamPlotWidgetGraphicsLayout = GraphicsLayout()
        #     # p = self.beamPlotWidgetGraphicsLayout.addPlot(title='beam')
        #     # p.showGrid(x=True, y=True)
        #     # self.beamPlot = p.plot(pen=None, symbol='+')
        #     # self.beamPlotView.setCentralItem(self.beamPlotWidgetGraphicsLayout)
        self.beamPlotXAxisCombo = QComboBox()
        self.beamPlotXAxisDict = OrderedDict()
        self.beamPlotXAxisDict['x'] = {'scale': 1e3, 'axis': 'x [mm]'}
        self.beamPlotXAxisDict['y'] = {'scale': 1e3, 'axis': 'y [mm]'}
        self.beamPlotXAxisDict['z'] = {
            'scale': 1e6,
            'axis': 'z [micron]',
            'norm': True
        }
        self.beamPlotXAxisDict['t'] = {
            'scale': 1e12,
            'axis': 't [ps]',
            'norm': True
        }
        self.beamPlotXAxisDict['cpx'] = {'scale': 1e3, 'axis': 'cpx [keV]'}
        self.beamPlotXAxisDict['cpy'] = {'scale': 1e3, 'axis': 'cpy [keV]'}
        self.beamPlotXAxisDict['BetaGamma'] = {
            'scale': 0.511,
            'axis': 'cp [MeV]'
        }
        self.beamPlotXAxisCombo.addItems(list(self.beamPlotXAxisDict.keys()))
        self.beamPlotXAxisCombo.setCurrentIndex(2)
        self.beamPlotYAxisCombo = QComboBox()
        self.beamPlotYAxisCombo.addItems(list(self.beamPlotXAxisDict.keys()))
        self.beamPlotXAxisCombo.setCurrentIndex(6)
        self.beamPlotNumberBins = QSpinBox()
        self.beamPlotNumberBins.setRange(10, 500)
        self.beamPlotNumberBins.setSingleStep(10)
        self.histogramBins = 100
        self.beamPlotNumberBins.setValue(self.histogramBins)
        self.beamPlotAxisWidget = QWidget()
        self.beamPlotAxisWidget.setMaximumHeight(100)
        self.beamPlotAxisLayout = QHBoxLayout()
        self.beamPlotAxisWidget.setLayout(self.beamPlotAxisLayout)
        self.beamPlotAxisLayout.addWidget(self.beamPlotXAxisCombo)
        self.beamPlotAxisLayout.addWidget(self.beamPlotYAxisCombo)
        self.beamPlotAxisLayout.addWidget(self.beamPlotNumberBins)
        self.beamPlotXAxisCombo.currentIndexChanged.connect(self.plotDataBeam)
        self.beamPlotYAxisCombo.currentIndexChanged.connect(self.plotDataBeam)
        self.beamPlotNumberBins.valueChanged.connect(self.plotDataBeam)
        self.beamPlotXAxisCombo.setCurrentIndex(2)
        self.beamPlotYAxisCombo.setCurrentIndex(6)
        self.canvasWidget = QWidget()
        l = QVBoxLayout(self.canvasWidget)
        self.sc = MyStaticMplCanvas(self.canvasWidget,
                                    width=1,
                                    height=1,
                                    dpi=150)
        l.addWidget(self.sc)
        self.beamPlotLayout.addWidget(self.beamPlotAxisWidget)
        self.beamPlotLayout.addWidget(self.canvasWidget)
        ''' slicePlotWidget '''
        self.sliceParams = [
            {
                'name': 'slice_normalized_horizontal_emittance',
                'units': 'm-rad',
                'text': 'enx'
            },
            {
                'name': 'slice_normalized_vertical_emittance',
                'units': 'm-rad',
                'text': 'eny'
            },
            {
                'name': 'slice_peak_current',
                'units': 'A',
                'text': 'PeakI'
            },
            {
                'name': 'slice_relative_momentum_spread',
                'units': '%',
                'text': 'sigma-p'
            },
        ]
        self.slicePlotWidget = QWidget()
        self.slicePlotLayout = QVBoxLayout()
        self.slicePlotWidget.setLayout(self.slicePlotLayout)
        # self.slicePlotView = GraphicsView(useOpenGL=True)
        self.slicePlotWidgetGraphicsLayout = GraphicsLayoutWidget()
        # self.slicePlots = {}
        self.slicePlotCheckbox = {}
        self.curve = {}
        self.sliceaxis = {}
        self.slicePlotCheckboxWidget = QWidget()
        self.slicePlotCheckboxLayout = QVBoxLayout()
        self.slicePlotCheckboxWidget.setLayout(self.slicePlotCheckboxLayout)
        self.slicePlot = self.slicePlotWidgetGraphicsLayout.addPlot(
            title='Slice', row=0, col=50)
        self.slicePlot.showAxis('left', False)
        self.slicePlot.showGrid(x=True, y=True)
        i = -1
        colors = ['b', 'r', 'g', 'k']
        for param in self.sliceParams:
            i += 1
            axis = AxisItem("left")
            labelStyle = {'color': '#' + colorStr(mkColor(colors[i]))[0:-2]}
            axis.setLabel(text=param['text'],
                          units=param['units'],
                          **labelStyle)
            viewbox = ViewBox()
            axis.linkToView(viewbox)
            viewbox.setXLink(self.slicePlot.vb)
            self.sliceaxis[param['name']] = [axis, viewbox]
            self.curve[param['name']] = PlotDataItem(pen=colors[i], symbol='+')
            viewbox.addItem(self.curve[param['name']])
            col = self.findFirstEmptyColumnInGraphicsLayout()
            self.slicePlotWidgetGraphicsLayout.ci.addItem(axis,
                                                          row=0,
                                                          col=col,
                                                          rowspan=1,
                                                          colspan=1)
            self.slicePlotWidgetGraphicsLayout.ci.addItem(viewbox,
                                                          row=0,
                                                          col=50)
            p.showGrid(x=True, y=True)
            # self.slicePlots[param] = self.slicePlot.plot(pen=colors[i], symbol='+')
            self.slicePlotCheckbox[param['name']] = QCheckBox(param['text'])
            self.slicePlotCheckboxLayout.addWidget(
                self.slicePlotCheckbox[param['name']])
            self.slicePlotCheckbox[param['name']].stateChanged.connect(
                self.plotDataSlice)
        # self.slicePlotView.setCentralItem(self.slicePlotWidgetGraphicsLayout)
        self.slicePlotSliceWidthWidget = QSpinBox()
        self.slicePlotSliceWidthWidget.setMaximum(100)
        self.slicePlotSliceWidthWidget.setValue(20)
        self.slicePlotSliceWidthWidget.setSingleStep(1)
        self.slicePlotSliceWidthWidget.setSuffix(" slices")
        self.slicePlotSliceWidthWidget.setSpecialValueText('Automatic')
        self.slicePlotAxisWidget = QWidget()
        self.slicePlotAxisLayout = QHBoxLayout()
        self.slicePlotAxisWidget.setLayout(self.slicePlotAxisLayout)
        self.slicePlotAxisLayout.addWidget(self.slicePlotCheckboxWidget)
        self.slicePlotAxisLayout.addWidget(self.slicePlotSliceWidthWidget)
        # self.slicePlotXAxisCombo.currentIndexChanged.connect(self.plotDataSlice)
        self.slicePlotSliceWidthWidget.valueChanged.connect(
            self.changeSliceLength)
        # self.beamPlotXAxisCombo.setCurrentIndex(2)
        # self.beamPlotYAxisCombo.setCurrentIndex(5)
        self.slicePlotLayout.addWidget(self.slicePlotAxisWidget)
        self.slicePlotLayout.addWidget(self.slicePlotWidgetGraphicsLayout)

        self.layout = QVBoxLayout()
        self.setLayout(self.layout)

        self.tabWidget = QTabWidget()

        self.folderButton = QPushButton('Select Directory')
        self.folderLineEdit = QLineEdit()
        self.folderLineEdit.setReadOnly(True)
        self.folderLineEdit.setText(self.directory)
        self.reloadButton = QPushButton()
        self.reloadButton.setIcon(qApp.style().standardIcon(
            QStyle.SP_BrowserReload))
        self.folderWidget = QGroupBox()
        self.folderLayout = QHBoxLayout()
        self.folderLayout.addWidget(self.folderButton)
        self.folderLayout.addWidget(self.folderLineEdit)
        self.folderLayout.addWidget(self.reloadButton)
        self.folderWidget.setLayout(self.folderLayout)
        self.folderWidget.setMaximumWidth(800)
        self.reloadButton.clicked.connect(
            lambda: self.changeDirectory(self.directory))
        self.folderButton.clicked.connect(self.changeDirectory)

        self.fileSelector = QComboBox()
        self.fileSelector.currentIndexChanged.connect(self.updateScreenCombo)
        self.screenSelector = QComboBox()
        self.screenSelector.currentIndexChanged.connect(self.changeScreen)
        self.beamWidget = QGroupBox()
        self.beamLayout = QHBoxLayout()
        self.beamLayout.addWidget(self.fileSelector)
        self.beamLayout.addWidget(self.screenSelector)
        self.beamWidget.setLayout(self.beamLayout)
        self.beamWidget.setMaximumWidth(800)
        self.beamWidget.setVisible(False)

        self.folderBeamWidget = QWidget()
        self.folderBeamLayout = QHBoxLayout()
        self.folderBeamLayout.setAlignment(Qt.AlignLeft)
        self.folderBeamWidget.setLayout(self.folderBeamLayout)
        self.folderBeamLayout.addWidget(self.folderWidget)
        self.folderBeamLayout.addWidget(self.beamWidget)

        self.tabWidget.addTab(self.twissPlotView, 'Twiss Plots')
        self.tabWidget.addTab(self.beamPlotWidget, 'Beam Plots')
        self.tabWidget.addTab(self.slicePlotWidget, 'Slice Beam Plots')
        self.tabWidget.currentChanged.connect(self.changeTab)
        self.layout.addWidget(self.folderBeamWidget)
        self.layout.addWidget(self.tabWidget)

        self.plotType = 'Slice'
Пример #18
0
def beam_analysis(d, filename):
    beam = rbf.beam()
    beam.read_HDF5_beam_file(d + '/' + filename)
    return beam