Commit 596da00d20ebbf1fb795576ebddbeeff7827a48f

Authored by Goutte
1 parent 284f4688

Add more exceptions for Earth.

CHANGELOG.md
... ... @@ -41,8 +41,8 @@ et prendre aussi
41 41  
42 42 ## 1.3
43 43  
44   -- [ ] Earth pdyn = pv²
45   -- [ ] Earth omnihour B is a Vector3
  44 +- [x] Earth pdyn = pv² (TBD)
  45 +- [x] Earth omnihour B is a Vector3, use the first scalar
46 46 - [ ] Layers
47 47 - SW Catalogs
48 48 - Auroral Emissions
... ...
config.yml
... ... @@ -172,15 +172,17 @@ targets:
172 172 - slug: 'omni_hour_all'
173 173 parameters:
174 174 pdyn: 'RamP'
175   -# btan: ''
176 175 - slug: 'ace_swepam_real'
  176 + # [u'Time', u'Dens', u'Vel', u'Temp', u'flag', u'StartTime', u'StopTime']
177 177 parameters:
178 178 dens: 'Dens'
179 179 vtot: 'Vel'
180 180 temp: 'Temp'
181   - btan: 'Bgsm' # /!. VECTOR2
  181 + #btan: 'Bgsm' # /!. VECTOR2 (actually, does not exist)
182 182 sa:
183 183 - slug: 'omni_hour_all'
  184 + parameters:
  185 + pdyn: 'RamP'
184 186 - slug: 'ace_swepam_real'
185 187 parameters:
186 188 dens: 'Dens'
... ... @@ -188,6 +190,8 @@ targets:
188 190 temp: 'Temp'
189 191 sb:
190 192 - slug: 'omni_hour_all'
  193 + parameters:
  194 + pdyn: 'RamP'
191 195 - slug: 'ace_swepam_real'
192 196 parameters:
193 197 dens: 'Dens'
... ...
web/run.py
... ... @@ -10,7 +10,7 @@ import tarfile
10 10 import time
11 11 import urllib
12 12 from csv import writer as csv_writer
13   -from math import sqrt
  13 +from math import sqrt, isnan
14 14 from os import environ, remove as removefile
15 15 from os.path import isfile, join, abspath, dirname
16 16  
... ... @@ -419,6 +419,51 @@ def retrieve_amda_netcdf(orbiter, what, started_at, stopped_at):
419 419 return list(set(local_netc_files)) # remove possible dupes
420 420  
421 421  
  422 +# class DataParser:
  423 +# """
  424 +# Default data parser
  425 +# A wip to try to handle code exeptions sanely.
  426 +# """
  427 +#
  428 +# # Override these using the model configuration
  429 +# default_nc_keys = {
  430 +# 'hee': 'HEE',
  431 +# 'vtot': 'V',
  432 +# 'magn': 'B',
  433 +# 'temp': 'T',
  434 +# 'dens': 'N',
  435 +# 'pdyn': 'P_dyn',
  436 +# 'atse': 'Delta_angle',
  437 +# }
  438 +#
  439 +# def __init__(self, target, model):
  440 +# self.target = target
  441 +# self.model = model
  442 +# pass
  443 +#
  444 +# def _read_var(self, nc, _keys, _key, mandatory=False):
  445 +# try:
  446 +# return nc.variables[_keys[_key]]
  447 +# except KeyError:
  448 +# pass
  449 +# if mandatory:
  450 +# raise Exception("No variable '%s' found in NetCDF." % _keys[_key])
  451 +# return [None] * len(nc.variables['Time']) # slow -- use numpy?
  452 +#
  453 +# def parse(self, cdf_handle):
  454 +# nc_keys = self.default_nc_keys.copy()
  455 +#
  456 +# times = cdf_handle.variables['Time'] # YYYY DOY HH MM SS .ms
  457 +# data_v = self._read_var(cdf_handle, nc_keys, 'vtot')
  458 +# data_b = self._read_var(cdf_handle, nc_keys, 'magn')
  459 +# data_t = self._read_var(cdf_handle, nc_keys, 'temp')
  460 +# data_n = self._read_var(cdf_handle, nc_keys, 'dens')
  461 +# data_p = self._read_var(cdf_handle, nc_keys, 'pdyn')
  462 +# data_a = self._read_var(cdf_handle, nc_keys, 'atse')
  463 +#
  464 +# return zip()
  465 +
  466 +
422 467 def get_data_for_target(target_config, input_slug,
423 468 started_at, stopped_at):
424 469 """
... ... @@ -518,7 +563,9 @@ def get_data_for_target(target_config, input_slug,
518 563 log.debug("%s: opening model NETCDF4 '%s'..." %
519 564 (target_config['name'], model_file))
520 565 cdf_handle = Dataset(model_file, "r", format="NETCDF4")
  566 +
521 567 # log.debug(cdf_handle.variables.keys())
  568 +
522 569 times = cdf_handle.variables['Time'] # YYYY DOY HH MM SS .ms
523 570 data_v = _read_var(cdf_handle, nc_keys, 'vtot')
524 571 data_b = _read_var(cdf_handle, nc_keys, 'magn')
... ... @@ -546,9 +593,17 @@ def get_data_for_target(target_config, input_slug,
546 593 except Exception:
547 594 log.error("Failed to parse time from %s." % ltime)
548 595 raise
  596 +
549 597 if s0 <= dtime <= s1:
550 598 dkey = round_time(dtime, 60*60).strftime(precision)
551 599  
  600 + x_hee = None
  601 + y_hee = None
  602 + if dkey in orbit_data:
  603 + x_hee = orbit_data[dkey][0]
  604 + y_hee = orbit_data[dkey][1]
  605 +
  606 + # First exception: V may be a vector instead of a scalar
552 607 if hasattr(datum_v, '__len__'):
553 608 vrad = datum_v[0]
554 609 vtan = datum_v[1]
... ... @@ -558,14 +613,26 @@ def get_data_for_target(target_config, input_slug,
558 613 vtan = None
559 614 vtot = datum_v
560 615  
561   - x_hee = None
562   - y_hee = None
  616 + # Second exception: Earth is always at (1, 0)
563 617 if target_config['slug'] == 'earth':
564 618 x_hee = 1
565 619 y_hee = 0
566   - if dkey in orbit_data:
567   - x_hee = orbit_data[dkey][0]
568   - y_hee = orbit_data[dkey][1]
  620 +
  621 + # Third exception: B is a Vector3 or a Vector2 for Earth
  622 + if target_config['slug'] == 'earth':
  623 + if model['slug'] == 'omni_hour_all': # Vector3
  624 + datum_b = datum_b[0]
  625 + # if model['slug'] == 'ace_swepam_real': # Vector2
  626 + # datum_b = datum_b[0]
  627 + if model['slug'] == 'omni_hour_all':
  628 + datum_p = datum_n * vtot * vtot
  629 + if model['slug'] == 'ace_swepam_real':
  630 + datum_p = datum_n * vtot * vtot
  631 + if vtot is None or isnan(vtot):
  632 + continue
  633 +
  634 + # Keep adding exceptions here until you can't or become mad
  635 +
569 636 # /!\ MUST be in the same order as PROPERTIES
570 637 all_data[dkey] = (
571 638 dtime.strftime("%Y-%m-%dT%H:%M:%S+00:00"),
... ... @@ -781,7 +848,6 @@ def get_catalog_layers(input_slug, target_slug):
781 848 'start': start_time,
782 849 'stop': stop_time,
783 850 })
784   - #log.debug('Inspect C')
785 851  
786 852 return catalog_layers
787 853  
... ... @@ -1299,6 +1365,7 @@ def cache_warmup():
1299 1365  
1300 1366  
1301 1367 @app.route("/log")
  1368 +@app.route("/log.html")
1302 1369 def log_show():
1303 1370 with open(LOG_FILE, 'r') as f:
1304 1371 contents = f.read()
... ...
web/static/js/swapp.js
... ... @@ -748,7 +748,7 @@
748 748 };
749 749 TimeSeries.prototype.createCatalogLayer = function(started_at, stopped_at){
750 750 var layer_rect;
751   - layer_rect = this.plotWrapper.append("rect").attr('y', 0).attr('height', this.plotHeight).attr('fill', '#FFFD6492');
  751 + layer_rect = this.plotWrapper.append("rect").attr('y', 0).attr('height', this.plotHeight).attr('fill', '#FFFD64C2');
752 752 return layer_rect;
753 753 };
754 754 TimeSeries.prototype.resizeCatalogLayers = function(){
... ...
web/static/js/swapp.ls
... ... @@ -673,7 +673,7 @@ export class TimeSeries
673 673 layer_rect = @plotWrapper.append("rect")
674 674 .attr('y', 0)
675 675 .attr('height', @plotHeight)
676   - .attr('fill', '#FFFD6492')
  676 + .attr('fill', '#FFFD64C2')
677 677 # Not triggered, mouse events are captured before they reach this rect
678 678 #layer_rect.append('svg:title').text("I AM TEXT")
679 679 layer_rect
... ...