Ejemplo n.º 1
0
def fixup_old_data(data):
    for m in _SCHEMA.model:
        # don't include beamline element models (all uppercase)
        if m != m.upper():
            if m not in data.models:
                data.models[m] = pkcollections.Dict({})
            template_common.update_model_defaults(data.models[m], m, _SCHEMA)
    for m in ('analysisAnimation', 'fitter', 'fitReport'):
        if m in data.models:
            del data.models[m]
    if 'history' not in data.models.analysisReport:
        data.models.analysisReport.history = []
    if 'subreports' not in data.models.hiddenReport:
        data.models.hiddenReport.subreports = []
    if 'beamlines' not in data.models:
        _init_default_beamline(data)
    for el in data.models.elements:
        # create a watchpointReport for each WATCH element
        if el['type'] == 'WATCH':
            name = 'watchpointReport{}'.format(el['_id'])
            if name not in data.models:
                m = pkcollections.Dict({
                    '_id': el['_id'],
                })
                data.models[name] = m
                template_common.update_model_defaults(m, 'watchpointReport',
                                                      _SCHEMA)
    template_common.organize_example(data)
Ejemplo n.º 2
0
def test_model_defaults():
    from sirepo.template import template_common
    from sirepo import simulation_db
    res = template_common.model_defaults('trajectoryReport',
                                         simulation_db.get_schema('srw'))
    assert res == {
        'notes': '',
        'plotAxisY2': 'None',
        'timeMomentEstimation': 'auto',
        'magneticField': '2',
        'initialTimeMoment': 0.0,
        'numberOfPoints': 10000,
        'plotAxisY': 'X',
        'plotAxisX': 'Z',
        'finalTimeMoment': 0.0,
    }
    model = {
        'numberOfPoints': 10,
        'finalTimeMoment': 1.0,
    }
    template_common.update_model_defaults(model, 'trajectoryReport',
                                          simulation_db.get_schema('srw'))
    assert model['numberOfPoints'] == 10
    assert model['finalTimeMoment'] == 1.0
    assert model['plotAxisX'] == 'Z'
Ejemplo n.º 3
0
def fixup_old_data(data):
    for m in [
            'egunCurrentAnimation',
            'fieldReport',
            'impactDensityAnimation',
            'particle3d',
            'particleAnimation',
            'simulation',
            'simulationGrid',
    ]:
        if m not in data['models']:
            data['models'][m] = {}
        template_common.update_model_defaults(data['models'][m], m, _SCHEMA)
    for c in data['models']['conductorTypes']:
        if 'isConductor' not in c:
            c['isConductor'] = '1' if c['voltage'] > 0 else '0'
        if 'permittivity' not in c:
            c['permittivity'] = _DEFAULT_PERMITTIVITY
    if 'fieldComparisonReport' not in data['models']:
        grid = data['models']['simulationGrid']
        data['models']['fieldComparisonReport'] = {
            'dimension': 'x',
            'xCell1': int(grid['num_x'] / 3.),
            'xCell2': int(grid['num_x'] / 2.),
            'xCell3': int(grid['num_x'] * 2. / 3),
            'zCell1': int(grid['num_z'] / 2.),
            'zCell2': int(grid['num_z'] * 2. / 3),
            'zCell3': int(grid['num_z'] * 4. / 5),
        }
Ejemplo n.º 4
0
def fixup_old_data(data):
    for m in [
            'beamEvolutionAnimation',
            'bunch',
            'bunchAnimation',
            'bunchTwiss',
            'simulationSettings',
            'turnComparisonAnimation',
            'twissReport',
            'twissReport2',
    ]:
        if m not in data['models']:
            data['models'][m] = {}
        template_common.update_model_defaults(data['models'][m], m, _SCHEMA)
    if 'bunchReport' in data['models']:
        del data['models']['bunchReport']
        for i in range(4):
            m = 'bunchReport{}'.format(i + 1)
            model = data['models'][m] = {}
            template_common.update_model_defaults(data['models'][m], 'bunchReport', _SCHEMA)
            if i == 0:
                model['y'] = 'xp'
            elif i == 1:
                model['x'] = 'y'
                model['y'] = 'yp'
            elif i == 3:
                model['x'] = 'z'
                model['y'] = 'zp'
Ejemplo n.º 5
0
def fixup_old_data(data):
    for m in [
            'bunch',
            'bunchAnimation',
            'bunchAnimation2',
            'energyAnimation',
            'particle',
            'particleCoordinate',
            'simulationSettings',
            'opticsReport',
            'twissReport',
            'twissReport2',
            'twissSummaryReport',
    ]:
        if m not in data.models:
            data.models[m] = pkcollections.Dict({})
        template_common.update_model_defaults(data.models[m], m, _SCHEMA)
    if 'coordinates' not in data.models.bunch:
        data.models.bunch.coordinates = []
    if 'spntrk' in data.models.simulationSettings:
        for f in ('spntrk', 'S_X', 'S_Y', 'S_Z'):
            if f in data.models.simulationSettings:
                data.models.bunch[f] = data.models.simulationSettings[f]
                del data.models.simulationSettings[f]
    template_common.organize_example(data)
Ejemplo n.º 6
0
def fixup_old_data(data):
    for m in ('ring', 'particleAnimation', 'twissReport'):
        if m not in data['models']:
            data['models'][m] = {}
        template_common.update_model_defaults(data['models'][m], m, _SCHEMA)
    if 'coolingRatesAnimation' not in data['models']:
        for m in ('beamEvolutionAnimation', 'coolingRatesAnimation'):
            data['models'][m] = {}
            template_common.update_model_defaults(data['models'][m], m, _SCHEMA)
    if 'beam_type' not in data['models']['ionBeam']:
        ion_beam = data['models']['ionBeam']
        ion_beam['beam_type'] = 'bunched' if ion_beam['rms_bunch_length'] > 0 else 'continuous'
    if 'beam_type' not in data['models']['electronBeam']:
        ebeam = data['models']['electronBeam']
        ebeam['beam_type'] = 'continuous' if ebeam['shape'] == 'dc_uniform' else 'bunched'
        ebeam['rh'] = ebeam['rv'] = 0.004
    settings = data['models']['simulationSettings']
    if settings['model'] == 'model_beam':
        settings['model'] = 'particle'
    if 'ibs' not in settings:
        settings['ibs'] = '1'
        settings['e_cool'] = '1'
    if 'ref_bet_x' not in settings or not settings['ref_bet_x']:
        settings['ref_bet_x'] = settings['ref_bet_y'] = 10
        for f in ('ref_alf_x', 'ref_disp_x', 'ref_disp_dx', 'ref_alf_y', 'ref_disp_y', 'ref_disp_dy'):
            settings[f] = 0
    # if model field value is less than min, set to default value
    for m in data['models']:
        model = data['models'][m]
        if m in _SCHEMA['model']:
            for f in _SCHEMA['model'][m]:
                field_def = _SCHEMA['model'][m][f]
                if len(field_def) > 4 and model[f] < field_def[4]:
                    model[f] = field_def[2]
Ejemplo n.º 7
0
def _import_elegant_file(text):
    elegant_data = elegant_lattice_importer.import_file(text)
    rpn_cache = elegant_data['models']['rpnCache']
    data = simulation_db.default_data(SIM_TYPE)
    element_ids = {}
    for el in elegant_data['models']['elements']:
        if el['type'] not in _ELEGANT_NAME_MAP:
            if 'l' in el:
                el['name'] += '_{}'.format(el['type'])
                el['type'] = 'DRIF'
            else:
                continue
        el['name'] = re.sub(r':', '_', el['name'])
        name = _ELEGANT_NAME_MAP[el['type']]
        schema = _SCHEMA['model'][name]
        m = {
            '_id': el['_id'],
            'type': name,
        }
        for f in el:
            v = el[f]
            if el['type'] in _ELEGANT_FIELD_MAP and f in _ELEGANT_FIELD_MAP[
                    el['type']]:
                f = _ELEGANT_FIELD_MAP[el['type']][f]
            if f in schema:
                if v in rpn_cache:
                    v = rpn_cache[v]
                m[f] = v
        template_common.update_model_defaults(m, name, _SCHEMA)
        data['models']['elements'].append(m)
        element_ids[m['_id']] = True
    beamline_ids = {}
    for bl in elegant_data['models']['beamlines']:
        bl['name'] = re.sub(r':', '_', bl['name'])
        element_ids[bl['id']] = True
        element_ids[-bl['id']] = True
    for bl in elegant_data['models']['beamlines']:
        items = []
        for element_id in bl['items']:
            if element_id in element_ids:
                items.append(element_id)
        data['models']['beamlines'].append({
            'id': bl['id'],
            'items': items,
            'name': bl['name'],
        })
    elegant_sim = elegant_data['models']['simulation']
    if 'activeBeamlineId' in elegant_sim:
        data['models']['simulation']['activeBeamlineId'] = elegant_sim[
            'activeBeamlineId']
        data['models']['simulation']['visualizationBeamlineId'] = elegant_sim[
            'activeBeamlineId']
    data['models']['elements'] = sorted(data['models']['elements'],
                                        key=lambda el: el['type'])
    data['models']['elements'] = sorted(data['models']['elements'],
                                        key=lambda el:
                                        (el['type'], el['name'].lower()))
    return data
Ejemplo n.º 8
0
def fixup_old_data(data):
    for m in _SCHEMA.model:
        if m not in data.models:
            data.models[m] = pkcollections.Dict({})
        template_common.update_model_defaults(data.models[m], m, _SCHEMA)
    if data.models.simulation.flashType == 'CapLaser':
        io_model = data.models.IO
        io_model.plot_var_5 = 'magz'
        io_model.plot_var_6 = 'depo'
Ejemplo n.º 9
0
def fixup_old_data(data):
    for m in _SCHEMA.model:
        if m not in data.models:
            data.models[m] = pkcollections.Dict({})
        template_common.update_model_defaults(data.models[m], m, _SCHEMA)
    for m in ('analysisAnimation', 'fitter', 'fitReport'):
        if m in data.models:
            del data.models[m]
    if 'history' not in data.models.analysisReport:
        data.models.analysisReport.history = []
    if 'subreports' not in data.models.hiddenReport:
        data.models.hiddenReport.subreports = []
    template_common.organize_example(data)
Ejemplo n.º 10
0
def fixup_old_data(data):
    for m in [
            'bunch',
            'bunchAnimation',
            'bunchAnimation2',
            'particle',
            'simulationSettings',
            'opticsReport',
            'twissReport',
            'twissReport2',
    ]:
        if m not in data.models:
            data.models[m] = pkcollections.Dict({})
        template_common.update_model_defaults(data.models[m], m, _SCHEMA)
Ejemplo n.º 11
0
def fixup_old_data(data):
    for m in [
            'beamEvolutionAnimation',
            'bunch',
            'bunchAnimation',
            'bunchTwiss',
            'simulationSettings',
            'turnComparisonAnimation',
            'twissReport',
            'twissReport2',
    ]:
        if m not in data['models']:
            data['models'][m] = {}
        template_common.update_model_defaults(data['models'][m], m, _SCHEMA)
Ejemplo n.º 12
0
def _import_elegant_file(text):
    elegant_data = elegant_lattice_importer.import_file(text)
    rpn_cache = elegant_data['models']['rpnCache']
    data = simulation_db.default_data(SIM_TYPE)
    element_ids = {}
    for el in elegant_data['models']['elements']:
        if el['type'] not in _ELEGANT_NAME_MAP:
            if 'l' in el:
                el['name'] += '_{}'.format(el['type'])
                el['type'] = 'DRIF'
            else:
                continue
        el['name'] = re.sub(r':', '_', el['name'])
        name = _ELEGANT_NAME_MAP[el['type']]
        schema = _SCHEMA['model'][name]
        m = {
            '_id': el['_id'],
            'type': name,
        }
        for f in el:
            v = el[f]
            if el['type'] in _ELEGANT_FIELD_MAP and f in _ELEGANT_FIELD_MAP[el['type']]:
                f = _ELEGANT_FIELD_MAP[el['type']][f]
            if f in schema:
                if v in rpn_cache:
                    v = rpn_cache[v]
                m[f] = v
        template_common.update_model_defaults(m, name, _SCHEMA)
        data['models']['elements'].append(m)
        element_ids[m['_id']] = True
    beamline_ids = {}
    for bl in elegant_data['models']['beamlines']:
        bl['name'] = re.sub(r':', '_', bl['name'])
        element_ids[bl['id']] = True
        element_ids[-bl['id']] = True
    for bl in elegant_data['models']['beamlines']:
        items = []
        for element_id in bl['items']:
            if element_id in element_ids:
                items.append(element_id)
        data['models']['beamlines'].append({
            'id': bl['id'],
            'items': items,
            'name': bl['name'],
        })
    elegant_sim = elegant_data['models']['simulation']
    if 'activeBeamlineId' in elegant_sim:
        data['models']['simulation']['activeBeamlineId'] = elegant_sim['activeBeamlineId']
        data['models']['simulation']['visualizationBeamlineId'] = elegant_sim['activeBeamlineId']
    return data
Ejemplo n.º 13
0
def fixup_old_data(data):
    for m in [
            'bunch',
            'bunchAnimation',
            'bunchAnimation2',
            'particle',
            'simulationSettings',
            'opticsReport',
            'twissReport',
            'twissReport2',
    ]:
        if m not in data.models:
            data.models[m] = pkcollections.Dict({})
        template_common.update_model_defaults(data.models[m], m, _SCHEMA)
Ejemplo n.º 14
0
def fixup_old_data(data):
    for m in ('beamAnimation', 'beamHistogramAnimation', 'parameterAnimation', 'particleAnimation'):
        if m not in data.models:
            data.models[m] = pkcollections.Dict({})
        template_common.update_model_defaults(data.models[m], m, _SCHEMA)
    if 'solenoidFile' not in data['models']['solenoid']:
        data['models']['solenoid']['solenoidFile'] = ''
    if 'beamDefinition' not in data['models']['beam']:
        beam = data['models']['beam']
        beam['beamDefinition'] = 'transverse_longitude'
        beam['cstCompress'] = '0'
        beam['transversalFile2d'] = ''
        beam['transversalFile4d'] = ''
        beam['longitudinalFile1d'] = ''
        beam['longitudinalFile2d'] = ''
        beam['cstFile'] = ''
    template_common.organize_example(data)
Ejemplo n.º 15
0
def fixup_old_data(data):
    if (float(data.fixup_old_version) < 20170703.000001
            and 'geometricSource' in data.models):
        g = data.models.geometricSource
        x = g.cone_max
        g.cone_max = g.cone_min
        g.cone_min = x
    for m in [
            'initialIntensityReport',
            'plotXYReport',
    ]:
        if m not in data.models:
            data.models[m] = pkcollections.Dict({})
        template_common.update_model_defaults(data.models[m], m, _SCHEMA)
    for m in data.models:
        if template_common.is_watchpoint(m):
            template_common.update_model_defaults(data.models[m],
                                                  'watchpointReport', _SCHEMA)
    template_common.organize_example(data)
Ejemplo n.º 16
0
def fixup_old_data(data):
    for m in [
            'egunCurrentAnimation',
            'fieldReport',
            'impactDensityAnimation',
            'particle3d',
            'particleAnimation',
            'simulation',
            'simulationGrid',
    ]:
        if m not in data['models']:
            data['models'][m] = {}
        template_common.update_model_defaults(data['models'][m], m, _SCHEMA)
    if 'joinEvery' in data['models']['particle3d']:
        del data['models']['particle3d']['joinEvery']
    for c in data['models']['conductorTypes']:
        if 'isConductor' not in c:
            c['isConductor'] = '1' if c['voltage'] > 0 else '0'
        template_common.update_model_defaults(c, 'box', _SCHEMA)
    for c in data['models']['conductors']:
        template_common.update_model_defaults(c, 'conductorPosition', _SCHEMA)
    if 'fieldComparisonReport' not in data['models']:
        grid = data['models']['simulationGrid']
        data['models']['fieldComparisonReport'] = {
            'dimension': 'x',
            'xCell1': int(grid['num_x'] / 3.),
            'xCell2': int(grid['num_x'] / 2.),
            'xCell3': int(grid['num_x'] * 2. / 3),
            'zCell1': int(grid['num_z'] / 2.),
            'zCell2': int(grid['num_z'] * 2. / 3),
            'zCell3': int(grid['num_z'] * 4. / 5),
        }
Ejemplo n.º 17
0
def _validate_element_names(data, info):
    names = {}
    for idx in range(len(info['ids'])):
        el = info['elements'][idx]
        template_common.update_model_defaults(el, el['type'], _SCHEMA)
        el['_id'] = info['ids'][idx]
        name = info['names'][idx]
        name = re.sub(r'\\', '_', name)
        name = re.sub(r'\d+$', '', name)
        name = re.sub(r'(\_|\#)$', '', name)
        if not name:
            name = el['type'][:2]
        if name in names:
            count = 2
            while True:
                name2 = '{}{}'.format(name, count)
                if name2 not in names:
                    name = name2
                    break
                count += 1
        el['name'] = name
        names[name] = True
        data['models']['elements'].append(el)
Ejemplo n.º 18
0
def _validate_and_dedup_elements(data, elements):
    beamline = []
    current_id = 1
    data['models']['beamlines'] = [
        {
            'name': 'BL1',
            'id': current_id,
            'items': beamline,
        },
    ]
    data['models']['simulation']['activeBeamlineId'] = current_id
    data['models']['simulation']['visualizationBeamlineId'] = current_id
    info = {
        'ids': [],
        'names': [],
        'elements': [],
    }
    for el in elements:
        _validate_model(el)
        if 'name' in el:
            name = el['name']
            #TODO(pjm): don't de-duplicate certain types
            if el['type'] != 'MARKER':
                del el['name']
            if el not in info['elements']:
                current_id += 1
                info['ids'].append(current_id)
                info['names'].append(name)
                info['elements'].append(el)
            beamline.append(info['ids'][info['elements'].index(el)])
        else:
            if el['type'] in data['models']:
                pkdlog('replacing existing {} model', el['type'])
            template_common.update_model_defaults(el, el['type'], _SCHEMA)
            data['models'][el['type']] = el
    return info
Ejemplo n.º 19
0
def fixup_old_data(data):
    for m in [
            'bunchSource',
            'twissReport',
    ]:
        if m not in data['models']:
            data['models'][m] = {}
        template_common.update_model_defaults(data['models'][m], m, _SCHEMA)
    if 'bunchFile' not in data['models']:
        data['models']['bunchFile'] = {
            'sourceFile': None,
        }
    if 'folder' not in data['models']['simulation']:
        data['models']['simulation']['folder'] = '/'
    if 'simulationMode' not in data['models']['simulation']:
        data['models']['simulation']['simulationMode'] = 'parallel'
    if 'rpnVariables' not in data['models']:
        data['models']['rpnVariables'] = []
    if 'commands' not in data['models']:
        data['models']['commands'] = _create_default_commands(data)
        for m in data['models']['elements']:
            model_schema = _SCHEMA['model'][m['type']]
            for k in m:
                if k in model_schema and model_schema[k][
                        1] == 'OutputFile' and m[k]:
                    m[k] = "1"
    for m in data['models']['elements']:
        if m['type'] == 'WATCH':
            m['filename'] = '1'
            if m['mode'] == 'coordinates' or m['mode'] == 'coord':
                m['mode'] = 'coordinate'
        template_common.update_model_defaults(m, m['type'], _SCHEMA)
    if 'centroid' not in data['models']['bunch']:
        bunch = data['models']['bunch']
        for f in ('emit_x', 'emit_y', 'emit_z'):
            if bunch[f] and not isinstance(bunch[f], basestring):
                bunch[f] /= 1e9
        if bunch['sigma_s'] and not isinstance(bunch['sigma_s'], basestring):
            bunch['sigma_s'] /= 1e6
        first_bunch_command = _find_first_bunch_command(data)
        # first_bunch_command may not exist if the elegant sim has no bunched_beam command
        if first_bunch_command:
            first_bunch_command['symmetrize'] = str(
                first_bunch_command['symmetrize'])
            for f in _SCHEMA['model']['bunch']:
                if f not in bunch and f in first_bunch_command:
                    bunch[f] = first_bunch_command[f]
        else:
            bunch['centroid'] = '0,0,0,0,0,0'
    for m in data['models']['commands']:
        template_common.update_model_defaults(m,
                                              'command_{}'.format(m['_type']),
                                              _SCHEMA)
    template_common.organize_example(data)
Ejemplo n.º 20
0
def fixup_old_data(data):
    for m in [
            'bunchSource',
            'twissReport',
    ]:
        if m not in data['models']:
            data['models'][m] = {}
        template_common.update_model_defaults(data['models'][m], m, _SCHEMA)
    if 'bunchFile' not in data['models']:
        data['models']['bunchFile'] = {
            'sourceFile': None,
        }
    if 'folder' not in data['models']['simulation']:
        data['models']['simulation']['folder'] = '/'
    if 'simulationMode' not in data['models']['simulation']:
        data['models']['simulation']['simulationMode'] = 'parallel'
    if 'rpnVariables' not in data['models']:
        data['models']['rpnVariables'] = []
    if 'commands' not in data['models']:
        data['models']['commands'] = _create_default_commands(data)
        for m in data['models']['elements']:
            model_schema = _SCHEMA['model'][m['type']]
            for k in m:
                if k in model_schema and model_schema[k][1] == 'OutputFile' and m[k]:
                    m[k] = "1"
    for m in data['models']['elements']:
        if m['type'] == 'WATCH':
            m['filename'] = '1'
            if m['mode'] == 'coordinates' or m['mode'] == 'coord':
                m['mode'] = 'coordinate'
        template_common.update_model_defaults(m, m['type'], _SCHEMA)
    if 'centroid' not in data['models']['bunch']:
        bunch = data['models']['bunch']
        for f in ('emit_x', 'emit_y', 'emit_z'):
            if bunch[f] and not isinstance(bunch[f], basestring):
                bunch[f] /= 1e9
        if bunch['sigma_s'] and not isinstance(bunch['sigma_s'], basestring):
            bunch['sigma_s'] /= 1e6
        first_bunch_command = _find_first_bunch_command(data)
        # first_bunch_command may not exist if the elegant sim has no bunched_beam command
        if first_bunch_command:
            first_bunch_command['symmetrize'] = str(first_bunch_command['symmetrize'])
            for f in _SCHEMA['model']['bunch']:
                if f not in bunch and f in first_bunch_command:
                    bunch[f] = first_bunch_command[f]
        else:
            bunch['centroid'] = '0,0,0,0,0,0'
    for m in data['models']['commands']:
        template_common.update_model_defaults(m, 'command_{}'.format(m['_type']), _SCHEMA)
Ejemplo n.º 21
0
def fixup_old_data(data):
    if 'optimizer' not in data['models'] or 'enabledFields' not in data[
            'models']['optimizer']:
        data['models']['optimizer'] = {
            'constraints': [],
            'enabledFields': {},
            'fields': [],
        }
    for m in [
            'egunCurrentAnimation',
            'fieldReport',
            'impactDensityAnimation',
            'optimizer',
            'optimizerAnimation',
            'optimizerStatus',
            'particle3d',
            'particleAnimation',
            'simulation',
            'simulationGrid',
    ]:
        if m not in data.models:
            data.models[m] = {}
        template_common.update_model_defaults(data.models[m], m, _SCHEMA)
    if 'joinEvery' in data.models.particle3d:
        del data.models.particle3d['joinEvery']
    types = data.models.conductorTypes if 'conductorTypes' in data.models else {}
    for c in types:
        if c is None:
            continue
        if 'isConductor' not in c:
            c.isConductor = '1' if c.voltage > 0 else '0'
        template_common.update_model_defaults(c,
                                              c.type if 'type' in c else 'box',
                                              _SCHEMA)
    for c in data.models.conductors:
        template_common.update_model_defaults(c, 'conductorPosition', _SCHEMA)
    if 'fieldComparisonReport' not in data.models:
        grid = data.models.simulationGrid
        data.models.fieldComparisonReport = {
            'dimension': 'x',
            'xCell1': int(grid.num_x / 3.),
            'xCell2': int(grid.num_x / 2.),
            'xCell3': int(grid.num_x * 2. / 3),
            'zCell1': int(grid.num_z / 2.),
            'zCell2': int(grid.num_z * 2. / 3),
            'zCell3': int(grid.num_z * 4. / 5),
        }
    template_common.organize_example(data)
Ejemplo n.º 22
0
def fixup_old_data(data):
    for m in _SCHEMA.model:
        if m not in data.models:
            data.models[m] = pkcollections.Dict({})
        template_common.update_model_defaults(data.models[m], m, _SCHEMA)
Ejemplo n.º 23
0
def fixup_old_data(data):
    if 'laserPreviewReport' not in data['models']:
        data['models']['laserPreviewReport'] = {}
    if 'particleAnimation' not in data['models']:
        data['models']['particleAnimation'] = {
            'x': 'z',
            'y': 'x',
            'histogramBins': 100,
        }
    if 'simulationStatus' not in data['models']:
        data['models']['simulationStatus'] = {}
    if 'histogramBins' not in data['models']['particleAnimation']:
        data['models']['particleAnimation']['histogramBins'] = 100
    if 'framesPerSecond' not in data['models']['fieldAnimation']:
        data['models']['fieldAnimation']['framesPerSecond'] = 20
        data['models']['particleAnimation']['framesPerSecond'] = 20
    if 'rScale' not in data['models']['simulationGrid']:
        grid = data['models']['simulationGrid']
        grid['rScale'] = 4
        grid['rLength'] = '20.324980154380'
        grid['rMin'] = 0
        grid['rMax'] = '20.324980154380'
        grid['rCellsPerSpotSize'] = 8
        grid['rCount'] = 32
        grid['zScale'] = 2
        grid['zLength'] = '20.324980154631'
        grid['zMin'] = '-20.324980154631'
        grid['zMax'] = '1.60'
        grid['zCellsPerWavelength'] = 8
        grid['zCount'] = 214
        del grid['xMin']
        del grid['xMax']
        del grid['xCount']
        del grid['zLambda']
    if 'rParticlesPerCell' not in data['models']['simulationGrid']:
        data['models']['simulationGrid']['rParticlesPerCell'] = 1
        data['models']['simulationGrid']['zParticlesPerCell'] = 2
    if 'field' not in data['models']['laserPreviewReport']:
        laserPreview = data['models']['laserPreviewReport']
        laserPreview['field'] = 'E'
        laserPreview['coordinate'] = 'y'
        laserPreview['mode'] = '1'
    if 'sourceType' not in data['models']['simulation']:
        data['models']['simulation']['sourceType'] = 'laserPulse'
    if 'electronBeam' not in data['models']:
        data['models']['electronBeam'] = {
            'charge': 1.0e-08,
            'energy': 23,
        }
    if 'beamPreviewReport' not in data['models']:
        data['models']['beamPreviewReport'] = {
            'x': 'z',
            'y': 'x',
            'histogramBins': 100
        }
    if 'beamAnimation' not in data['models']:
        data['models']['beamAnimation'] = data['models']['particleAnimation'].copy()
    if 'rCellResolution' not in data['models']['simulationGrid']:
        grid = data['models']['simulationGrid']
        grid['rCellResolution'] = 40
        grid['zCellResolution'] = 40
    if 'rmsLength' not in data['models']['electronBeam']:
        beam = data['models']['electronBeam']
        beam['rmsLength'] = 0
        beam['rmsRadius'] = 0
        beam['bunchLength'] = 0
        beam['transverseEmittance'] = 0
    if 'xMin' not in data['models']['particleAnimation']:
        animation = data['models']['particleAnimation']
        for v in ('x', 'y', 'z'):
            animation['{}Min'.format(v)] = 0
            animation['{}Max'.format(v)] = 0
            animation['u{}Min'.format(v)] = 0
            animation['u{}Max'.format(v)] = 0
    if 'beamRadiusMethod' not in data['models']['electronBeam']:
        beam = data['models']['electronBeam']
        beam['beamRadiusMethod'] = 'a'
        beam['transverseEmittance'] = 0.00001
        beam['rmsRadius'] = 15
        beam['beamBunchLengthMethod'] = 's'
    if 'folder' not in data['models']['simulation']:
        data['models']['simulation']['folder'] = '/'
    for m in ('beamAnimation', 'fieldAnimation', 'particleAnimation'):
        template_common.update_model_defaults(data['models'][m], m, _SCHEMA)
Ejemplo n.º 24
0
def fixup_old_data(data):
    if 'laserPreviewReport' not in data['models']:
        data['models']['laserPreviewReport'] = {}
    if 'particleAnimation' not in data['models']:
        data['models']['particleAnimation'] = {
            'x': 'z',
            'y': 'x',
            'histogramBins': 100,
        }
    if 'simulationStatus' not in data['models']:
        data['models']['simulationStatus'] = {}
    if 'histogramBins' not in data['models']['particleAnimation']:
        data['models']['particleAnimation']['histogramBins'] = 100
    if 'framesPerSecond' not in data['models']['fieldAnimation']:
        data['models']['fieldAnimation']['framesPerSecond'] = 20
        data['models']['particleAnimation']['framesPerSecond'] = 20
    if 'rScale' not in data['models']['simulationGrid']:
        grid = data['models']['simulationGrid']
        grid['rScale'] = 4
        grid['rLength'] = '20.324980154380'
        grid['rMin'] = 0
        grid['rMax'] = '20.324980154380'
        grid['rCellsPerSpotSize'] = 8
        grid['rCount'] = 32
        grid['zScale'] = 2
        grid['zLength'] = '20.324980154631'
        grid['zMin'] = '-20.324980154631'
        grid['zMax'] = '1.60'
        grid['zCellsPerWavelength'] = 8
        grid['zCount'] = 214
        del grid['xMin']
        del grid['xMax']
        del grid['xCount']
        del grid['zLambda']
    if 'rParticlesPerCell' not in data['models']['simulationGrid']:
        data['models']['simulationGrid']['rParticlesPerCell'] = 1
        data['models']['simulationGrid']['zParticlesPerCell'] = 2
    if 'field' not in data['models']['laserPreviewReport']:
        laserPreview = data['models']['laserPreviewReport']
        laserPreview['field'] = 'E'
        laserPreview['coordinate'] = 'y'
        laserPreview['mode'] = '1'
    if 'sourceType' not in data['models']['simulation']:
        data['models']['simulation']['sourceType'] = 'laserPulse'
    if 'electronBeam' not in data['models']:
        data['models']['electronBeam'] = {
            'charge': 1.0e-08,
            'energy': 23,
        }
    if 'beamPreviewReport' not in data['models']:
        data['models']['beamPreviewReport'] = {
            'x': 'z',
            'y': 'x',
            'histogramBins': 100
        }
    if 'beamAnimation' not in data['models']:
        data['models']['beamAnimation'] = data['models'][
            'particleAnimation'].copy()
    if 'rCellResolution' not in data['models']['simulationGrid']:
        grid = data['models']['simulationGrid']
        grid['rCellResolution'] = 40
        grid['zCellResolution'] = 40
    if 'rmsLength' not in data['models']['electronBeam']:
        beam = data['models']['electronBeam']
        beam['rmsLength'] = 0
        beam['rmsRadius'] = 0
        beam['bunchLength'] = 0
        beam['transverseEmittance'] = 0
    if 'xMin' not in data['models']['particleAnimation']:
        animation = data['models']['particleAnimation']
        for v in ('x', 'y', 'z'):
            animation['{}Min'.format(v)] = 0
            animation['{}Max'.format(v)] = 0
            animation['u{}Min'.format(v)] = 0
            animation['u{}Max'.format(v)] = 0
    if 'beamRadiusMethod' not in data['models']['electronBeam']:
        beam = data['models']['electronBeam']
        beam['beamRadiusMethod'] = 'a'
        beam['transverseEmittance'] = 0.00001
        beam['rmsRadius'] = 15
        beam['beamBunchLengthMethod'] = 's'
    if 'folder' not in data['models']['simulation']:
        data['models']['simulation']['folder'] = '/'
    for m in ('beamAnimation', 'fieldAnimation', 'particleAnimation'):
        template_common.update_model_defaults(data['models'][m], m, _SCHEMA)