Changeset 6402
- Timestamp:
- Feb 24, 2009, 5:07:50 PM (16 years ago)
- Location:
- anuga_work/production/australia_ph2
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
anuga_work/production/australia_ph2/ceduna/build_elevation.py
r6359 r6402 24 24 25 25 # Application specific imports 26 import project # Definition of file names and polygons26 from setup_model import project # Definition of file names and polygons 27 27 28 28 … … 50 50 # Create Geospatial data from ASCII files 51 51 geospatial_data = {} 52 ##for filename in project.ascii_grid_filenames: 53 ## absolute_filename = join(project.topographies_folder, filename) 54 ## convert_dem_from_ascii2netcdf(absolute_filename, 55 ## basename_out=absolute_filename, 56 ## use_cache=True, 57 ## verbose=True) 58 ## dem2pts(absolute_filename, use_cache=True, verbose=True) 52 if not project.ascii_grid_filenames == []: 53 for filename in project.ascii_grid_filenames: 54 absolute_filename = join(project.topographies_folder, filename) 55 convert_dem_from_ascii2netcdf(absolute_filename, 56 basename_out=absolute_filename, 57 use_cache=True, 58 verbose=True) 59 dem2pts(absolute_filename, use_cache=True, verbose=True) 59 60 60 ##geospatial_data[filename] = Geospatial_data(file_name=absolute_filename+'.pts',61 ##verbose=True)61 geospatial_data[filename] = Geospatial_data(file_name=absolute_filename+'.pts', 62 verbose=True) 62 63 63 64 # Create Geospatial data from TXT files 64 for filename in project.point_filenames:65 absolute_filename = join(project.topographies_folder, filename)66 geospatial_data[filename] = Geospatial_data(file_name=absolute_filename,67 verbose=True)68 65 if not project.point_filenames == []: 66 for filename in project.point_filenames: 67 absolute_filename = join(project.topographies_folder, filename) 68 geospatial_data[filename] = Geospatial_data(file_name=absolute_filename, 69 verbose=True) 69 70 70 71 #------------------------------------------------------------------------------- -
anuga_work/production/australia_ph2/ceduna/export_results_max.py
r6291 r6402 22 22 directory = project.output_folder 23 23 24 ##time_dir1 = '20081217_101310_run_final_0_27283_250m_none_dt_kvanputt' 25 ##time_dir2 = '20081217_115336_run_final_0_27283_250m_none_dp_kvanputt' 26 ###time_dir1 = '20080924_123626_run_final_0_27283_250m_all_kvanputt' # This uses the 250m bathymetry with all interior polygons 27 ###time_dir2 = '20080912_154716_run_final_0_27283_alpha0.1_kvanputt' # This uses original bathyemetry data 28 ###time_dir3 = '20080924_123601_run_final_0_27283_250m_none_kvanputt' # This uses the 250m bathymetry without any interior polygons 29 ##time_dirs = [time_dir1, time_dir2]#, time_dir3] 30 31 time_dir1 = '20090130_165532_run_final_0.6_27255_extend_dt_kvanputt' 32 ##time_dir2 = '20081211_162311_run_final_0_27255_alpha0.1_kvanputt' 33 ##time_dir3 = '20081211_162346_run_final_0_68693_alpha0.1_kvanputt' 34 ##time_dir4 = '20081211_162433_run_final_0.6_68693_alpha0.1_kvanputt' 35 ##time_dir5 = '20081211_162656_run_final_0.6_27283_alpha0.1_kvanputt' 36 ##time_dir6 = '20081211_162744_run_final_0_27283_alpha0.1_kvanputt' 24 time_dir1 = '20090224_102606_run_trial_0_58362_kvanputt' 25 ##time_dir2 = '' 26 ##time_dir3 = '' 27 ##time_dir4 = '' 28 ##time_dir5 = '' 29 ##time_dir6 = '' 37 30 ## 38 time_dirs = [time_dir1] # 5, time_dir4]# , time_dir4, time_dir5, time_dir6]31 time_dirs = [time_dir1] #time_dir2]# , time_dir4, time_dir5, time_dir6] 39 32 40 33 -
anuga_work/production/australia_ph2/ceduna/file_length.py
r6342 r6402 7 7 Returns: number of lines in file 8 8 """ 9 9 10 def file_length(in_file): 11 '''Function to return the number of lines in a file. 12 13 in_file: Path to the file to get number of lines in. 14 15 Returns: number of lines in file 16 ''' 17 10 18 fid = open(in_file) 11 19 data = fid.readlines() -
anuga_work/production/australia_ph2/ceduna/project.py
r6398 r6402 1 """Common filenames and locations for elevation, meshes and outputs.2 This script is the heart of all scripts in the folder3 1 """ 4 #------------------------------------------------------------------------------ 5 # Import necessary modules 6 #------------------------------------------------------------------------------ 2 This file contains all your file and directory definitions 3 for elevation, meshes and outputs. 4 """ 7 5 8 6 import os 9 from os.path import join 10 from os import sep, getenv 7 from anuga.utilities.system_tools import get_user_name, get_host_name 11 8 from time import localtime, strftime, gmtime 12 from anuga.utilities.polygon import read_polygon, number_mesh_triangles13 from anuga.utilities.system_tools import get_user_name, get_host_name 14 15 #------------------------------------------------------------------------------ 9 from os.path import join, exists 10 11 12 #------------------------------------------------------------------------------- 16 13 # Directory setup 17 #------------------------------------------------------------------------------ 18 # Note: INUNDATIONHOME is the inundation directory, not the data directory. 19 20 home = getenv('INUNDATIONHOME')+sep+'data'+sep # Absolute path for data folder 21 muxhome = getenv('MUXHOME') 22 user = get_user_name() 23 host = get_host_name() 24 25 # determines time for setting up output directories 26 time = strftime('%Y%m%d_%H%M%S',localtime()) 27 gtime = strftime('%Y%m%d_%H%M%S',gmtime()) 28 build_time = time+'_build' 29 run_time = time+'_run' 14 #------------------------------------------------------------------------------- 30 15 31 16 # this section needs to be updated to reflect the modelled community. … … 33 18 state = 'australia_ph2' 34 19 scenario_name = 'ceduna' 35 36 #------------------------------------------------------------------------------ 20 scenario_folder = scenario_name 21 22 #------------------------------------------------------------------------------- 37 23 # Initial Conditions 38 #------------------------------------------------------------------------------ 39 # Model specific parameters. One or all can be changed each time the 40 # run_scenario script is executed 41 tide = 0 42 #event_number = 27255 # Java 9.3 worst case for Perth 43 event_number = 64468 # event for SA coast 24 #------------------------------------------------------------------------------- 25 26 # Model specific parameters. 27 # One or all can be changed each time the run_model script is executed 28 tide = 0 # difference between MSL and HAT 29 zone = 53 # specify zone of model 30 event_number = 64469 # the event number or the mux file name 44 31 alpha = 0.1 # smoothing parameter for mesh 45 friction = 0.01 # manning's friction coefficient 46 starttime = 0 47 finaltime = 1000 #80000 # final time for simulation 48 49 setup = 'trial' # Final can be replaced with trial or basic. 50 # Either will result in a coarser mesh that will allow a 51 # faster, but less accurate, simulation. 52 53 if setup =='trial': 54 print'trial' 55 scale_factor=100 56 time_thinning=96 57 yieldstep=240 58 if setup =='basic': 59 print'basic' 60 scale_factor=4 61 time_thinning=12 62 yieldstep=120 63 if setup =='final': 64 print'final' 65 scale_factor=1 66 time_thinning=4 67 yieldstep=60 68 69 70 #------------------------------------------------------------------------------ 71 # Output Filename 72 #------------------------------------------------------------------------------ 73 # Important to distinguish each run - ensure str(user) is included! 74 # Note, the user is free to include as many parameters as desired 75 output_comment= ('_' + setup + '_' + str(tide)+ '_' + str(event_number) + 76 '_' + str(user)) 77 78 #------------------------------------------------------------------------------ 32 friction=0.01 # manning's friction coefficient 33 starttime=0 # start time for simulation 34 finaltime=1000 # final time for simulation 35 36 setup = 'final' # This can be one of three values 37 # trial - coarsest mesh, fast 38 # basic - coarse mesh 39 # final - fine mesh, slowest 40 41 #------------------------------------------------------------------------------- 42 # Output filename 43 # 44 # Your output filename should be unique between different runs on different data. 45 # The list of items below will be used to create a file in your output directory. 46 # Your user name and time+date will be automatically added. For example, 47 # [setup, tide, event_number] 48 # will result in a filename like 49 # 20090212_091046_run_final_0_27283_rwilson 50 #------------------------------------------------------------------------------- 51 52 output_comment = [setup, tide, event_number] 53 54 #------------------------------------------------------------------------------- 79 55 # Input Data 80 #------------------------------------------------------------------------------ 56 #------------------------------------------------------------------------------- 57 81 58 # ELEVATION DATA 82 59 # Used in build_elevation.py 83 60 # Format for ascii grids, as produced in ArcGIS + a projection file 84 #ascii_grid_filenames = ['grid250m'] # 250m grid 200561 ascii_grid_filenames = [] # 250m grid 2005 85 62 86 63 # Format for point is x,y,elevation (with header) 87 point_filenames = ['grid250m.txt'] 88 89 # BOUNDING POLYGON - for data clipping and estimate of triangles in mesh 64 point_filenames = ['grid250m_pts.txt'] # 250m grid 2005 65 66 ### Add csv header list to all files in point_filenames 67 ##headerlist = ['x', 'y', 'elevation'] 68 ##for f in point_filenames: 69 ## add_csv_header(join(topographies_folder, f), headerlist) 70 71 # BOUNDING POLYGON - for data clipping and estimate of triangles in mesh 90 72 # Used in build_elevation.py 91 73 # Format for points easting,northing (no header) 92 74 bounding_polygon_filename = 'bounding_polygon.csv' 75 bounding_polygon_maxarea = 100000 76 77 # INTERIOR REGIONS - for designing the mesh 78 # Used in run_model.py 79 # Format for points easting,northing (no header) 80 interior_regions_data = [] 81 82 # LAND - used to set the initial stage/water to be offcoast only 83 # Used in run_model.py. Format for points easting,northing (no header) 84 land_initial_conditions_filename = [] 93 85 94 86 # GAUGES - for creating timeseries at a specific point 95 # Used in get_timeseries.py 87 # Used in get_timeseries.py. 96 88 # Format easting,northing,name,elevation (with header) 97 ##gauges_filename = 'gauges.csv' 98 99 # BOUNDING POLYGON 100 # used in build_boundary.py and run_model.py respectively 89 gauges_filename = 'gauges.csv' 90 91 # BUILDINGS EXPOSURE - for identifying inundated houses 92 # Used in run_building_inundation.py 93 # Format latitude,longitude etc (geographic) 94 building_exposure_filename = 'busselton_res_clip.csv' # from NEXIS 95 96 # BOUNDING POLYGON - used in build_boundary.py and run_model.py respectively 101 97 # NOTE: when files are put together the points must be in sequence 102 98 # For ease go clockwise! … … 105 101 # Thinned ordering file from Hazard Map (geographic) 106 102 # Format is index,latitude,longitude (with header) 107 urs_order_filename = 'urs_order _austtg.csv'103 urs_order_filename = 'urs_order.csv' 108 104 109 105 # Landward bounding points … … 111 107 landward_boundary_filename = 'landward_boundary.csv' 112 108 113 #------------------------------------------------------------------------------ 109 # MUX input filename. 110 # If a meta-file from EventSelection is used, set 'multi-mux' to True. 111 # If a single MUX stem filename (*.grd) is used, set 'multi-mux' to False. 112 ##mux_input_filename = event_number # to be found in event_folder 113 # (ie boundaries/event_number/) 114 ##multi_mux = False 115 mux_input_filename = 'event.list' 116 multi_mux = True 117 118 119 ################################################################################ 120 ################################################################################ 121 #### NOTE: NOTHING WOULD NORMALLY CHANGE BELOW THIS POINT. #### 122 ################################################################################ 123 ################################################################################ 124 125 # Get system user and host names. 126 # These values can be used to distinguish between two similar runs by two 127 # different users or runs by the same user on two different machines. 128 user = get_user_name() 129 host = get_host_name() 130 131 # Environment variable names. 132 # The inundation directory, not the data directory. 133 ENV_INUNDATIONHOME = 'INUNDATIONHOME' 134 135 # Path to MUX data 136 ENV_MUXHOME = 'MUXHOME' 137 138 #------------------------------------------------------------------------------- 114 139 # Output Elevation Data 115 #------------------------------------------------------------------------------ 140 #------------------------------------------------------------------------------- 141 116 142 # Output filename for elevation 117 143 # this is a combination of all the data generated in build_elevation.py 118 144 combined_elevation_basename = scenario_name + '_combined_elevation' 119 145 120 #------------------------------------------------------------------------------ 146 #------------------------------------------------------------------------------- 121 147 # Directory Structure 122 #------------------------------------------------------------------------------ 123 anuga_folder = join(home, state, scenario_name, 'anuga') 148 #------------------------------------------------------------------------------- 149 150 # determines time for setting up output directories 151 time = strftime('%Y%m%d_%H%M%S', localtime()) 152 gtime = strftime('%Y%m%d_%H%M%S', gmtime()) 153 build_time = time + '_build' 154 run_time = time + '_run_' 155 156 # create paths generated from environment variables. 157 home = join(os.getenv(ENV_INUNDATIONHOME), 'data') # Absolute path for data folder 158 muxhome = os.getenv(ENV_MUXHOME) 159 160 # check various directories/files that must exist 161 anuga_folder = join(home, state, scenario_folder, 'anuga') 124 162 topographies_folder = join(anuga_folder, 'topographies') 125 163 polygons_folder = join(anuga_folder, 'polygons') 126 164 boundaries_folder = join(anuga_folder, 'boundaries') 127 165 output_folder = join(anuga_folder, 'outputs') 128 gauges_folder = join(anuga_folder, 'gauges')166 gauges_folder = join(anuga_folder, 'gauges') 129 167 meshes_folder = join(anuga_folder, 'meshes') 130 131 #------------------------------------------------------------------------------ 168 event_folder = join(boundaries_folder, str(event_number)) 169 170 # MUX data files 171 # Directory containing the MUX data files to be used with EventSelection. 172 mux_data_folder = join(muxhome, 'mux') 173 174 #------------------------------------------------------------------------------- 132 175 # Location of input and output data 133 #------------------------------------------------------------------------------ 176 #------------------------------------------------------------------------------- 177 178 # Convert the user output_comment to a string for run_model.py 179 output_comment = ('_'.join([str(x) for x in output_comment if x != user]) 180 + '_' + user) 134 181 135 182 # The absolute pathname of the all elevation, generated in build_elevation.py … … 139 186 meshes = join(meshes_folder, scenario_name) + '.msh' 140 187 141 # The absolute pathname for the urs order points, used within build_boundary.py188 # The pathname for the urs order points, used within build_urs_boundary.py 142 189 urs_order = join(boundaries_folder, urs_order_filename) 143 190 … … 147 194 148 195 # The absolute pathname for the .sts file, generated in build_boundary.py 149 event_sts = join(boundaries_folder, str(event_number), scenario_name) 150 151 # The absolute pathname of the event folder 152 event_folder = join(boundaries_folder, str(event_number)) 196 event_sts = join(event_folder, scenario_name) 153 197 154 198 # The absolute pathname for the output folder names … … 162 206 # The absolute pathname for the gauges file 163 207 # Used for get_timeseries.py 164 ##gauges = join(gauges_folder, gauges_filename) 165 166 #------------------------------------------------------------------------------ 167 # Reading polygons and creating interior regions 168 #------------------------------------------------------------------------------ 169 170 # Initial bounding polygon for data clipping 171 bounding_polygon = read_polygon(join(polygons_folder, 172 bounding_polygon_filename)) 173 bounding_maxarea = 100000*scale_factor 174 175 interior_regions = [] 176 177 # Estimate the number of triangles 178 trigs_min = number_mesh_triangles(interior_regions, 179 bounding_polygon, bounding_maxarea) 180 print 'min estimated number of triangles', trigs_min 181 182 208 gauges = join(gauges_folder, gauges_filename) 209 210 # The absolute pathname for the building file 211 # Used for run_building_inundation.py 212 building_exposure = join(gauges_folder, building_exposure_filename) 213 214 # full path to where MUX files (or meta-files) live 215 mux_input = join(event_folder, mux_input_filename) 216 -
anuga_work/production/australia_ph2/ceduna/run_model.py
r6398 r6402 22 22 # Standard modules 23 23 import os 24 import os.path 24 25 import time 26 from time import localtime, strftime, gmtime 25 27 26 28 # Related major packages 29 from Scientific.IO.NetCDF import NetCDFFile 30 import Numeric as num 31 27 32 from anuga.interface import create_domain_from_regions 33 from anuga.interface import Transmissive_stage_zero_momentum_boundary 28 34 from anuga.interface import Dirichlet_boundary 29 35 from anuga.interface import Reflective_boundary … … 35 41 from anuga.shallow_water.data_manager import start_screen_catcher 36 42 from anuga.shallow_water.data_manager import copy_code_files 43 from anuga.shallow_water.data_manager import urs2sts 37 44 from anuga.utilities.polygon import read_polygon, Polygon_function 38 45 39 46 # Application specific imports 40 import project # Definition of file names and polygons 47 from setup_model import project 48 import build_urs_boundary as bub 41 49 42 43 #------------------------------------------------------------------------------ 50 #------------------------------------------------------------------------------- 44 51 # Copy scripts to time stamped output directory and capture screen 45 52 # output to file. Copy script must be before screen_catcher 46 #------------------------------------------------------------------------------ 53 #------------------------------------------------------------------------------- 54 47 55 copy_code_files(project.output_run, __file__, 48 os.path. dirname(project.__file__)+os.sep+\49 project.__name__+'.py')56 os.path.join(os.path.dirname(project.__file__), 57 project.__name__+'.py')) 50 58 start_screen_catcher(project.output_run, 0, 1) 51 59 52 53 #------------------------------------------------------------------------------ 60 #------------------------------------------------------------------------------- 54 61 # Create the computational domain based on overall clipping polygon with 55 62 # a tagged boundary and interior regions defined in project.py along with 56 63 # resolutions (maximal area of per triangle) for each polygon 57 #------------------------------------------------------------------------------ 64 #------------------------------------------------------------------------------- 65 58 66 print 'Create computational domain' 67 68 # Create the STS file 69 print 'project.mux_data_folder=%s' % project.mux_data_folder 70 if not os.path.exists(project.event_sts + '.sts'): 71 bub.build_urs_boundary(project.mux_input_filename, project.event_sts) 59 72 60 73 # Read in boundary from ordered sts file 61 74 event_sts = create_sts_boundary(project.event_sts) 62 print 'HELLO event_sts', event_sts63 75 64 76 # Reading the landward defined points, this incorporates the original clipping 65 77 # polygon minus the 100m contour 66 78 landward_boundary = read_polygon(project.landward_boundary) 67 print 'landward boundary', landward_boundary68 79 69 80 # Combine sts polyline with landward points 70 81 bounding_polygon_sts = event_sts + landward_boundary 71 print 'bounding polygon', bounding_polygon_sts72 82 73 83 # Number of boundary segments 74 N = len(event_sts)-184 num_ocean_segments = len(event_sts) - 1 75 85 # Number of landward_boundary points 76 M= file_length(project.landward_boundary)86 num_land_points = file_length(project.landward_boundary) 77 87 78 88 # Boundary tags refer to project.landward_boundary 79 89 # 4 points equals 5 segments start at N 80 boundary_tags={'back': range(N+1,N+M), 81 'side': [N,N+M], 82 'ocean': range(N)} 90 boundary_tags={'back': range(num_ocean_segments+1, 91 num_ocean_segments+num_land_points), 92 'side': [num_ocean_segments, 93 num_ocean_segments+num_land_points], 94 'ocean': range(num_ocean_segments)} 83 95 84 96 # Build mesh and domain … … 88 100 interior_regions=project.interior_regions, 89 101 mesh_filename=project.meshes, 90 use_cache= False,91 verbose= False)102 use_cache=True, 103 verbose=True) 92 104 print domain.statistics() 93 105 … … 96 108 domain.set_minimum_storable_height(0.01) # Don't store depth less than 1cm 97 109 110 #------------------------------------------------------------------------------- 111 # Setup initial conditions 112 #------------------------------------------------------------------------------- 98 113 99 #------------------------------------------------------------------------------100 # Setup initial conditions101 #------------------------------------------------------------------------------102 114 print 'Setup initial conditions' 103 115 104 116 # Set the initial stage in the offcoast region only 105 ##IC = Polygon_function(project.land_initial_conditions, 106 ## default=project.tide, 107 ## geo_reference=domain.geo_reference) 108 domain.set_quantity('stage', 0, use_cache=True, verbose=True) 117 if project.land_initial_conditions: 118 IC = Polygon_function(project.land_initial_conditions, 119 default=project.tide, 120 geo_reference=domain.geo_reference) 121 else: 122 IC = 0 123 domain.set_quantity('stage', IC, use_cache=True, verbose=True) 109 124 domain.set_quantity('friction', project.friction) 110 125 domain.set_quantity('elevation', … … 114 129 alpha=project.alpha) 115 130 131 #------------------------------------------------------------------------------- 132 # Setup boundary conditions 133 #------------------------------------------------------------------------------- 116 134 117 #------------------------------------------------------------------------------118 # Setup boundary conditions119 #------------------------------------------------------------------------------120 135 print 'Set boundary - available tags:', domain.get_boundary_tags() 121 136 122 137 Br = Reflective_boundary(domain) 123 Bd = Dirichlet_boundary([project.tide,0,0]) 138 Bt = Transmissive_stage_zero_momentum_boundary(domain) 139 Bd = Dirichlet_boundary([project.tide, 0, 0]) 124 140 Bf = Field_boundary(project.event_sts+'.sts', 125 141 domain, mean_stage=project.tide, … … 130 146 verbose=True) 131 147 132 133 148 domain.set_boundary({'back': Br, 134 149 'side': Bd, 135 150 'ocean': Bf}) 136 151 152 #------------------------------------------------------------------------------- 153 # Evolve system through time 154 #------------------------------------------------------------------------------- 137 155 138 #------------------------------------------------------------------------------139 # Evolve system through time140 #------------------------------------------------------------------------------141 156 t0 = time.time() 142 157 for t in domain.evolve(yieldstep=project.yieldstep, … … 146 161 print domain.boundary_statistics(tags='ocean') 147 162 148 print 'Simulation took %.2f seconds' % (time.time()-t0)163 print 'Simulation took %.2f seconds' % (time.time()-t0) -
anuga_work/production/australia_ph2/esperance/project.py
r6399 r6402 27 27 # One or all can be changed each time the run_model script is executed 28 28 tide = 0 # difference between MSL and HAT 29 zone = 5 6# specify zone of model30 event_number = 58362# the event number or the mux file name29 zone = 51 # specify zone of model 30 event_number = 27255 # the event number or the mux file name 31 31 alpha = 0.1 # smoothing parameter for mesh 32 32 friction=0.01 # manning's friction coefficient … … 34 34 finaltime=1000 # final time for simulation 35 35 36 setup = ' trial' # This can be one of three values36 setup = 'final' # This can be one of three values 37 37 # trial - coarsest mesh, fast 38 38 # basic - coarse mesh … … 62 62 63 63 # Format for point is x,y,elevation (with header) 64 point_filenames = ['brisbane_250m.txt', 65 'GBR_250m.txt', 66 'Sydney_250m.txt'] # 250m grid 2005 64 point_filenames = ['grid250m_pts.txt'] # 250m grid 2005 67 65 68 66 ### Add csv header list to all files in point_filenames … … 103 101 # Thinned ordering file from Hazard Map (geographic) 104 102 # Format is index,latitude,longitude (with header) 105 urs_order_filename = 'urs_order .csv'103 urs_order_filename = 'urs_order_austtg.csv' 106 104 107 105 # Landward bounding points -
anuga_work/production/australia_ph2/eucla_motel/project.py
r6399 r6402 27 27 # One or all can be changed each time the run_model script is executed 28 28 tide = 0 # difference between MSL and HAT 29 zone = 5 6# specify zone of model30 event_number = 58362# the event number or the mux file name29 zone = 52 # specify zone of model 30 event_number = 65371 # the event number or the mux file name 31 31 alpha = 0.1 # smoothing parameter for mesh 32 32 friction=0.01 # manning's friction coefficient … … 62 62 63 63 # Format for point is x,y,elevation (with header) 64 point_filenames = ['brisbane_250m.txt', 65 'GBR_250m.txt', 66 'Sydney_250m.txt'] # 250m grid 2005 64 point_filenames = ['grid250m_pts.txt'] # 250m grid 2005 67 65 68 66 ### Add csv header list to all files in point_filenames
Note: See TracChangeset
for help on using the changeset viewer.