File: create_inputfiles.py

package info (click to toggle)
doris 5.0.3~beta%2Bdfsg-16
  • links: PTS, VCS
  • area: contrib
  • in suites: bookworm
  • size: 6,932 kB
  • sloc: cpp: 43,560; python: 8,213; csh: 3,636; sh: 2,527; ansic: 649; makefile: 346; xml: 208
file content (103 lines) | stat: -rw-r--r-- 4,763 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# Function created by Gert Mulder
# Institute TU Delft
# Date 9-11-2016
# Part of Doris 5.0

# This function will create the needed files for a datastack based on input information from the datastack.
import xml.etree.ElementTree as ET
import os
import pickle

# Test data
# settings_table = '/home/gert/software/doris/Doris_s1/sentinel_1/functions/inputfile_template.xml'
# inputfile_folder = '/media/gert/Data/dem/test/'
# sensor = 'sentinel-1'
# dem_info = inputfile_folder + 'output.dem.var'


class CreateInputFiles:
    # Input for the class to create inputfiles are:
    # - dem_info > variable or file with variable with information on the dem.
    # - settings_table > this table includes the general settings for different sensors. You can either choose one of
    #                       the predefined sensors or create a custom one.
    # - sensor > select the predefined sensor of your choice
    # - Other settings are mainly related to how much output information you want from the program. Also you can define
    #   the amount of memory used by the program.


    def __init__(self, dem_info ,settings_table, sensor):
        tree = ET.parse(settings_table)
        settings = tree.getroot()

        self.xml_data = settings.find('.' + sensor)
        self.header_data = self.xml_data.find('.header_settings')
        dem_info = open(dem_info, 'r')
        self.dem_var = pickle.load(dem_info)

        self.inputfilenames = ['coarsecorr', 'coarseorb', 'coherence', 'coherence_network', 'comprefdem', 'comprefpha', 'coregpm',
                          'dembased', 'finecoreg', 'geocode', 'interferogram', 'resample', 'subtrrefdem', 'subtrrefpha',
                          'unwrap', 'phasefilt']
        self.processes = ['coarsecorr', 'coarseorb', 'coherence', 'coherence', 'comprefdem', 'comprefpha', 'coregpm',
                          'dembased', 'finecoreg', 'geocode', 'interferogram', 'resample', 'subtrrefdem', 'subtrrefpha',
                          'unwrap', 'phasefilt']

    def create(self, inputfile_folder):
        for process_name, filename in zip(self.processes, self.inputfilenames):
            # Create file
            inputfilename = os.path.join(inputfile_folder, 'input.' + filename)
            txtfile = open(inputfilename, 'w')

            # Load xml data for processing step
            process = self.xml_data.find('./' + process_name + '/PROCESS')
            process_data = self.xml_data.find('.' + process_name)

            # Write to file
            txtfile = self._header(txtfile, self.header_data, process)
            txtfile = self._create_inputfiles(txtfile, process_data, self.dem_var)

            # Close file
            txtfile.close()

    def _create_inputfiles(self, txtfile, process_data, dem_var):
        # This functions calls the different inputfile creation scripts.

        for node in process_data:
            if not node.tag == 'PROCESS':
                if node.attrib['c'] == 'on':
                    c = 'c '
                else:
                    c = ''

                if 'var' in node.attrib and node.attrib['comment']:
                    txtfile.write(c + node.tag.ljust(20) + '\t' + dem_var[node.attrib['var']].ljust(20) + '\t // ' + node.attrib['comment'] + '\n')
                elif not 'var' in node.attrib and node.attrib['comment']:
                    txtfile.write(c + node.tag.ljust(20) + '\t' + node.text.ljust(20) + '\t // ' + node.attrib['comment'] + '\n')
                elif 'var' in node.attrib and not node.attrib['comment']:
                    txtfile.write(c + node.tag.ljust(20) + '\t' + dem_var[node.attrib['var']].ljust(20) + '\n')
                elif not 'var' in node.attrib and not node.attrib['comment']:
                    txtfile.write(c + node.tag.ljust(20) + '\t' + node.text.ljust(20) + '\n')

        txtfile.write("STOP                          \n")

        return txtfile

    def _header(self, txtfile, header_data, process):
        # Function to write header

        txtfile.write("c Inputfile created by Doris 5.0" + '\n')
        txtfile.write("c         " + "___".ljust(len(process.text) + 3) + "___ \n")
        txtfile.write("comment   ___" + process.text + "___ \n")
        txtfile.write("c                             \n")

        for node in header_data:
            if node.tag == 'PROCESS':
                txtfile.write("c \n")
                txtfile.write("PROCESS ".ljust(15) + process.text + " \n")
                txtfile.write("c \n")
            else:
                if node.attrib['comment']:
                    txtfile.write(node.tag.ljust(20) + '\t' + node.text.ljust(20) + '\t // ' + node.attrib['comment'] + '\n')

        txtfile.write("c                             \n")

        return txtfile