[cig-commits] r11879 - in cs/portal/trunk/northridge/SeismoWebPortal: . templates/SeismoWebPortal
leif at geodynamics.org
leif at geodynamics.org
Wed Apr 30 21:11:44 PDT 2008
Author: leif
Date: 2008-04-30 21:11:44 -0700 (Wed, 30 Apr 2008)
New Revision: 11879
Added:
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_list.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalogs.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_list.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_upload.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodels.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_list.html
Modified:
cs/portal/trunk/northridge/SeismoWebPortal/forms.py
cs/portal/trunk/northridge/SeismoWebPortal/models.py
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/events.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/home.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/meshes.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/models.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/settings.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/simulation_form.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/simulations.html
cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stations.html
cs/portal/trunk/northridge/SeismoWebPortal/urls.py
cs/portal/trunk/northridge/SeismoWebPortal/views.py
Log:
Separated Mineos parameters from Specfem parameters; factored-out the
concept of a "mode catalog" (cf. r11272). Added the ability to upload
Mineos model files (cf. r11629).
Modified: cs/portal/trunk/northridge/SeismoWebPortal/forms.py
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/forms.py 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/forms.py 2008-05-01 04:11:44 UTC (rev 11879)
@@ -3,10 +3,9 @@
from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
from django.core import validators
-from models import Mesh, Model, Simulation, Event, DataSource, Region, Source
-from models import UserInfo, Invite
-from cmt import CMTSolution
+import cmt
+import models
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Simulation
@@ -54,30 +53,30 @@
return
-class MeshAddManipulator(Mesh.AddManipulator, MeshManipulator):
+class MeshAddManipulator(models.Mesh.AddManipulator, MeshManipulator):
def __init__(self, nchunks):
- Mesh.AddManipulator.__init__(self)
+ models.Mesh.AddManipulator.__init__(self)
MeshManipulator.__init__(self, nchunks)
def save(self, new_data):
MeshManipulator.save(self, new_data)
- return Mesh.AddManipulator.save(self, new_data)
+ return models.Mesh.AddManipulator.save(self, new_data)
-class MeshChangeManipulator(Mesh.ChangeManipulator, MeshManipulator):
+class MeshChangeManipulator(models.Mesh.ChangeManipulator, MeshManipulator):
def __init__(self, nchunks, object_id):
- Mesh.ChangeManipulator.__init__(self, object_id)
+ models.Mesh.ChangeManipulator.__init__(self, object_id)
MeshManipulator.__init__(self, nchunks)
def flatten_data(self):
- new_data = Mesh.ChangeManipulator.flatten_data(self)
+ new_data = models.Mesh.ChangeManipulator.flatten_data(self)
new_data['nproc'] = self.original_object.nproc_xi
new_data['nex_c'] = self.original_object.nex_xi_c
return new_data
def save(self, new_data):
MeshManipulator.save(self, new_data)
- return Mesh.ChangeManipulator.save(self, new_data)
+ return models.Mesh.ChangeManipulator.save(self, new_data)
class RunStatusManipulator(forms.Manipulator):
@@ -115,8 +114,8 @@
def isValidInvitationCode(field_data, all_data):
try:
- invite = Invite.objects.get(code = field_data)
- except Invite.DoesNotExist:
+ invite = models.Invite.objects.get(code = field_data)
+ except models.Invite.DoesNotExist:
raise validators.ValidationError, "Invalid invitation code."
if invite.hasExpired():
raise validators.ValidationError, "This invitation code has expired."
@@ -163,7 +162,7 @@
invite = None
inviteCode = new_data['invite']
if inviteCode:
- invite = Invite.objects.get(code = inviteCode)
+ invite = models.Invite.objects.get(code = inviteCode)
approved = True
user, created = User.objects.get_or_create(
@@ -178,7 +177,7 @@
# Now we're committed to creating the user account.
user.set_password(new_data['password1'])
user.save()
- UserInfo.objects.create(
+ models.UserInfo.objects.create(
user = user,
institution = new_data['institution'],
address1 = new_data['address1'],
@@ -231,7 +230,7 @@
new_data.update(self.user.__dict__)
try:
userInfo = self.user.userinfo
- except UserInfo.DoesNotExist:
+ except models.UserInfo.DoesNotExist:
pass
else:
new_data.update(userInfo.__dict__)
@@ -242,8 +241,8 @@
user = self.user
try:
userInfo = user.userinfo
- except UserInfo.DoesNotExist:
- userInfo = UserInfo()
+ except models.UserInfo.DoesNotExist:
+ userInfo = models.UserInfo()
user.userinfo = userInfo
# Save the new user.
user.first_name = new_data['first_name']
@@ -273,7 +272,7 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-class SingleSourceEventAddManipulator(Source.AddManipulator):
+class SingleSourceEventAddManipulator(models.Source.AddManipulator):
def __init__(self):
super(SingleSourceEventAddManipulator, self).__init__()
@@ -292,12 +291,12 @@
from datetime import datetime
# Create the new Event.
- event = Event.objects.create(user = user,
- name = new_data['name'])
+ event = models.Event.objects.create(user = user,
+ name = new_data['name'])
# Create the DataSource and Region.
- dataSource, created = DataSource.objects.get_or_create(name = new_data['dataSource'])
- region, created = Region.objects.get_or_create(name = new_data['region'])
+ dataSource, created = models.DataSource.objects.get_or_create(name = new_data['dataSource'])
+ region, created = models.Region.objects.get_or_create(name = new_data['region'])
# Add the Source.
args = {}
@@ -310,12 +309,12 @@
del args['name']
del args['when_date']
del args['when_time']
- source = Source.objects.create(**args)
+ source = models.Source.objects.create(**args)
return event
-class SingleSourceEventChangeManipulator(Source.ChangeManipulator):
+class SingleSourceEventChangeManipulator(models.Source.ChangeManipulator):
def __init__(self, event):
self.event = event
@@ -347,8 +346,8 @@
event.save()
# Create the DataSource and Region.
- dataSource, created = DataSource.objects.get_or_create(name = new_data['dataSource'])
- region, created = Region.objects.get_or_create(name = new_data['region'])
+ dataSource, created = models.DataSource.objects.get_or_create(name = new_data['dataSource'])
+ region, created = models.Region.objects.get_or_create(name = new_data['region'])
source = event.singleSource
source.dataSource = dataSource
@@ -376,7 +375,7 @@
if not errors.get('cmtsolution'):
try:
cmtSolution = new_data['cmtsolution']['content']
- CMTSolution.parse(cmtSolution)
+ cmt.CMTSolution.parse(cmtSolution)
except Exception, e:
errors['cmtsolution'] = ['Please select a file in CMTSOLUTION format.']
@@ -386,18 +385,143 @@
# Parse the uploaded CMTSOLUTION file.
cmtSolution = new_data['cmtsolution']['content']
- cmtSolutionList = CMTSolution.parse(cmtSolution)
+ cmtSolutionList = cmt.CMTSolution.parse(cmtSolution)
# Create the new event.
- event = Event.objects.create(user = user,
- name = new_data['name'])
+ event = models.Event.objects.create(user = user,
+ name = new_data['name'])
# Add each source.
for cmtSolution in cmtSolutionList:
- Source.saveSource(event, cmtSolution)
+ models.Source.saveSource(event, cmtSolution)
return event
+models.Event.UploadManipulator = UploadEventManipulator
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# Stations
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+class UploadStationListManipulator(forms.Manipulator):
+
+ def __init__(self):
+ super(UploadStationListManipulator, self).__init__()
+ self.fields = [
+ forms.TextField('name', maxlength=100, is_required=True),
+ forms.FileUploadField(field_name='stations', is_required=True),
+ ]
+
+ def get_validation_errors(self, new_data):
+ from StringIO import StringIO
+
+ errors = super(UploadStationListManipulator, self).get_validation_errors(new_data)
+
+ if not errors.get('stations'):
+ try:
+ stations = new_data['stations']['content']
+ stream = StringIO(stations)
+ parse_station_list(None, stream)
+ except Exception:
+ errors['stations'] = ['Please select a file in STATIONS format.']
+
+ return errors
+
+ def save(self, new_data, user):
+ from StringIO import StringIO
+
+ # Create the new station list.
+ stationList = models.StationList.objects.create(
+ user = user,
+ name = new_data['name'],
+ )
+
+ # Parse the uploaded STATIONS file.
+ stations = new_data['stations']['content']
+ stream = StringIO(stations)
+ parse_station_list(stationList, stream)
+
+ return stationList
+
+
+models.StationList.UploadManipulator = UploadStationListManipulator
+
+
+def parse_station_list(stationList, stream):
+
+ for line in stream:
+
+ # parse the line
+ code, network, latitude, longitude, elevation, bur = line.split()
+ latitude, longitude = float(latitude), float(longitude)
+ elevation, bur = float(elevation), float(bur)
+
+ if stationList is None:
+ continue
+
+ # get/create the network entry
+ network, created = models.StationNetwork.objects.get_or_create(code = network, defaults = { 'name': "" })
+
+ # create the station
+ station = models.Station.objects.create(
+ stationList = stationList,
+ code = code,
+ name = "",
+ network = network,
+ status = 1,
+ latitude = latitude,
+ longitude = longitude,
+ elevation = elevation,
+ bur = bur,
+ )
+ return
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# Mineos
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+class UploadMineosModelManipulator(forms.Manipulator):
+
+ def __init__(self):
+ super(UploadMineosModelManipulator, self).__init__()
+ self.fields = [
+ forms.FileUploadField(field_name='model', is_required=True),
+ ]
+
+ def get_validation_errors(self, new_data):
+
+ errors = super(UploadMineosModelManipulator, self).get_validation_errors(new_data)
+
+ if not errors.get('model'):
+ try:
+ content = new_data['model']['content']
+ #stream = StringIO(content)
+ #parseMineosModel(None, stream)
+ except Exception:
+ errors['model'] = ['Please select a file in XXX format.']
+
+ return errors
+
+ def save(self, new_data, user):
+
+ # Parse the uploaded MODEL file.
+ content = new_data['model']['content']
+ #stream = StringIO(content)
+ #parseMineosModel(None, stream)
+
+ # Create the new model.
+ model = models.MineosModel.objects.create(data = content)
+ #name = new_data['model']['filename']
+
+ return model
+
+
+models.MineosModel.UploadManipulator = UploadMineosModelManipulator
+
+
# end of file
Modified: cs/portal/trunk/northridge/SeismoWebPortal/models.py
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/models.py 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/models.py 2008-05-01 04:11:44 UTC (rev 11879)
@@ -6,7 +6,6 @@
from managers import CurrentUser, CurrentUserManager
from middleware import get_current_user
-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Events
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -495,17 +494,12 @@
class Admin:
pass
-
- # ~~~~~~ #
- # Mineos #
- # ~~~~~~ #
- # jcom
- radial = models.BooleanField(default=True)
- toroidal = models.BooleanField(default=True)
- spheroidal = models.BooleanField(default=True)
- ictoroidal = models.BooleanField(default=True)
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# Mineos
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+class MineosModeCatalog(models.Model):
#------------------------------------------------------------------------
# minos_bran
@@ -530,9 +524,36 @@
# eigcon
max_depth = models.FloatField(max_digits=19, decimal_places=10, default=1000.0) # km
-
#------------------------------------------------------------------------
+ # managers
+ objects = models.Manager()
+ user_objects = objects #CurrentUserManager()
+
+
+class MineosModel(models.Model):
+
+ # A Mineos model is a small (15-20K) text file.
+ data = models.TextField()
+
+ #------------------------------------------------------------------------
+ # managers
+ objects = models.Manager()
+ user_objects = objects #CurrentUserManager()
+
+
+class MineosParameters(models.Model):
+
+ catalog = models.ForeignKey(MineosModeCatalog)
+ model = models.ForeignKey(MineosModel)
+
+ # jcom
+ radial = models.BooleanField(default=True)
+ toroidal = models.BooleanField(default=True)
+ spheroidal = models.BooleanField(default=True)
+ ictoroidal = models.BooleanField(default=True)
+
+ #------------------------------------------------------------------------
# green
fmin = models.FloatField(max_digits=19, decimal_places=10, default=10.0) # mHz
@@ -543,9 +564,10 @@
step = models.FloatField(max_digits=19, decimal_places=10, default=1.0) # seconds
- def nsamples(self):
- from math import ceil
- return int(ceil(self.record_length * 60.0 / self.step))
+ #------------------------------------------------------------------------
+ # managers
+ objects = models.Manager()
+ user_objects = objects #CurrentUserManager()
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/events.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/events.html 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/events.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -6,7 +6,10 @@
<div class=taskbar>
<ul>
<li class=first><a href="/specfem3dglobe/">home</a>
- <li><a href="/specfem3dglobe/simulations/">simulations</a>
+ <li><a href="/specfem3dglobe/simulations/">3D</a>
+ <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
+ <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
+ <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
<li class=selected><a href="/specfem3dglobe/events/">events</a>
<li><a href="/specfem3dglobe/stations/">stations</a>
<li><a href="/specfem3dglobe/meshes/">meshes</a>
Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/home.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/home.html 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/home.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -6,7 +6,10 @@
<div class=taskbar>
<ul>
<li class="first selected"><a href="/specfem3dglobe/">home</a>
- <li><a href="/specfem3dglobe/simulations/">simulations</a>
+ <li><a href="/specfem3dglobe/simulations/">3D</a>
+ <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
+ <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
+ <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
<li><a href="/specfem3dglobe/events/">events</a>
<li><a href="/specfem3dglobe/stations/">stations</a>
<li><a href="/specfem3dglobe/meshes/">meshes</a>
Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/meshes.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/meshes.html 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/meshes.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -6,7 +6,10 @@
<div class=taskbar>
<ul>
<li class=first><a href="/specfem3dglobe/">home</a>
- <li><a href="/specfem3dglobe/simulations/">simulations</a>
+ <li><a href="/specfem3dglobe/simulations/">3D</a>
+ <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
+ <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
+ <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
<li><a href="/specfem3dglobe/events/">events</a>
<li><a href="/specfem3dglobe/stations/">stations</a>
<li class=selected><a href="/specfem3dglobe/meshes/">meshes</a>
Added: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html (rev 0)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_form.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -0,0 +1,77 @@
+
+{% extends "SeismoWebPortal/mineosmodecatalogs.html" %}
+
+{% block content %}
+
+<h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} Mineos mode catalog</h2>
+
+<div class=toolbar>
+ <form method="post" action="/specfem3dglobe/help/toggle/">
+ <input type="hidden" name="post_toggle_redirect" value="{{ action }}">
+ {% if help_visible %}
+ <input type="submit" name="hide_help" value="Hide Help" />
+ {% else %}
+ <input type="submit" name="show_help" value="Show Help" />
+ {% endif %}
+ </form>
+
+ {% if object %}
+ <form action="../delete/" method="get"><input type="submit" value="Delete" /></form>
+ {% endif %}
+
+</div>
+
+<form method="post" action=".">
+
+ {% if form.has_errors %}
+ <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
+ {% endif %}
+
+ <div class=tab30ex>
+
+ <div>
+ <label for="id_eps" class=before>eps</label>
+ {{ form.eps }}
+ {% if form.eps.errors %}<span class=error>{{ form.eps.errors|join:", " }}</span>{% endif %}
+ {% if help_visible %}<span class=help>The parameter <code>eps</code> controls the accuracy of the Runge-Kutta integration scheme. The relative accuracy
+of an eigenfrequency is a factor 2 to 3 times <code>eps</code>. Parameter <code>eps</code> also controls the precision with which
+a root is found and the minimum relative separation of two roots with the same angular order. It is
+safe to set eps = 10<span style="vertical-align: super">-7</span> for periods greater than 10 seconds. For periods between 5 and 10 seconds, it
+has to be set to 10<span style="vertical-align: super">-12</span>—10<span style="vertical-align: super">-10</span>.</span>{% endif %}
+ </div>
+
+ <p><label for="id_max_depth" class=before>maximum depth</label> {{ form.max_depth }} km
+ {% if form.max_depth.errors %}<span class=error>{{ form.max_depth.errors|join:", " }}</span>{% endif %}
+ {% if help_visible %}<span class=help>Maximum depth, d<span style="vertical-align: sub">max</span>, to cut all output eigenfunctions (in km). All output values exist in the interval
+(r<span style="vertical-align: sub">n</span>, r<span style="vertical-align: sub">n</span> - d<span style="vertical-align: sub">max</span>) only, where r<span style="vertical-align: sub">n</span> is the radius of the free surface in km.</span>{% endif %}
+
+ </div> <!-- tab30ex -->
+
+
+ <p>Neglect gravitational terms above {{ form.wgrav }} mHz. {% if form.wgrav.errors %}<span class=error>{{ form.wgrav.errors|join:", " }}</span>{% endif %}
+ {% if help_visible %}<span class=help>This gives about a factor of 3 increase in speed.</span>{% endif %}
+
+ <p><label for="id_lmin" class=before>angular orders</label> {{ form.lmin }} <= l < {{ form.lmax }}
+ {% if form.lmin.errors %}<span class=error>{{ form.lmin.errors|join:", " }}</span>{% endif %}
+ {% if form.lmax.errors %}<span class=error>{{ form.lmax.errors|join:", " }}</span>{% endif %}
+ {% if help_visible %}<span class=help>The range of angular orders l to be computed. For radial modes, this range is not used.</span>{% endif %}
+
+ <p><label for="id_wmin" class=before>compute frequency range</label> {{ form.wmin }} <= w < {{ form.wmax }} mHz
+ {% if form.wmin.errors %}<span class=error>{{ form.wmin.errors|join:", " }}</span>{% endif %}
+ {% if form.wmax.errors %}<span class=error>{{ form.wmax.errors|join:", " }}</span>{% endif %}
+ {% if help_visible %}<span class=help>The frequency range to be computed (in millihertz).</span>{% endif %}
+
+ <p><label for="id_nmin" class=before>dispersion branch numbers</label> {{ form.nmin }} <= n < {{ form.nmax }}
+ {% if form.nmin.errors %}<span class=error>{{ form.nmin.errors|join:", " }}</span>{% endif %}
+ {% if form.nmax.errors %}<span class=error>{{ form.nmax.errors|join:", " }}</span>{% endif %}
+ {% if help_visible %}<span class=help>The range of dispersion branch numbers n to be computed; n = 0 is the fundamental mode.</span>{% endif %}
+
+
+ <div class=tab30ex>
+
+ <div><input class=submit type="submit" name="save" value="Save" />
+ </div>
+
+</form>
+
+{% endblock %}
Added: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_list.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_list.html (rev 0)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalog_list.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -0,0 +1,51 @@
+
+{% extends "SeismoWebPortal/mineosmodecatalogs.html" %}
+
+{% block content %}
+
+<div class=toolbar>
+ <form action="create/" method="get"><input type="submit" value="New..." /></form>
+</div>
+
+{% if object_list %}
+
+<table rules=cols class=cool width="100%">
+ <thead>
+ <tr>
+ <th rowspan=2 valign=bottom>eps</th>
+ <th rowspan=2 valign=bottom>wgrav<br><small>(mHz)</small></th>
+ <th colspan=2 valign=bottom><center>angular<br>orders</center></th>
+ <th colspan=2 valign=bottom><center>compute<br>frequency<br>range<br><small>(mHz)</small></center></th>
+ <th colspan=2 valign=bottom><center>dispersion<br>branch<br>numbers</center></th>
+ </tr>
+ <tr>
+ <th valign=bottom><small>min</small></th>
+ <th valign=bottom><small>max</small></th>
+ <th valign=bottom><small>min</small></th>
+ <th valign=bottom><small>max</small></th>
+ <th valign=bottom><small>min</small></th>
+ <th valign=bottom><small>max</small></th>
+ </tr>
+ </thead>
+
+ <tbody>
+ {% for object in object_list %}
+ <tr class="{% cycle odd,even %}">
+ <td>{{ object.eps }}</td>
+ <td>{{ object.wgrav }}</td>
+ <td>{{ object.lmin }}</td>
+ <td>{{ object.lmax }}</td>
+ <td>{{ object.wmin }}</td>
+ <td>{{ object.wmax }}</td>
+ <td>{{ object.nmin }}</td>
+ <td>{{ object.nmax }}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+</table>
+
+{% else %}
+ <p>You have no Mineos mode catalogs.
+{% endif %}
+
+{% endblock %}
Added: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalogs.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalogs.html (rev 0)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodecatalogs.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -0,0 +1,26 @@
+
+{% extends "SeismoWebPortal/base.html" %}
+
+{% block desktop %}
+
+<div class=taskbar>
+ <ul>
+ <li class=first><a href="/specfem3dglobe/">home</a>
+ <li><a href="/specfem3dglobe/simulations/">3D</a>
+ <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
+ <li class=selected><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
+ <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
+ <li><a href="/specfem3dglobe/events/">events</a>
+ <li><a href="/specfem3dglobe/stations/">stations</a>
+ <li><a href="/specfem3dglobe/meshes/">meshes</a>
+ <li><a href="/specfem3dglobe/models/">models</a>
+ <li><a href="/specfem3dglobe/registration/">profile</a>
+ </ul>
+</div>
+
+<h1 class=titlebar>mineos mode catalogs</h1>
+
+{% block content %}
+{% endblock %}
+
+{% endblock %}
Added: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_list.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_list.html (rev 0)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_list.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -0,0 +1,32 @@
+
+{% extends "SeismoWebPortal/mineosmodels.html" %}
+
+{% block content %}
+
+<div class=toolbar>
+ <form action="upload/" method="get"><input type="submit" value="Upload..." /></form>
+</div>
+
+{% if object_list %}
+
+<table rules=cols class=cool width="100%">
+ <thead>
+ <tr>
+ <th>name</th>
+ </tr>
+ </thead>
+
+ <tbody>
+ {% for object in object_list %}
+ <tr class="{% cycle odd,even %}">
+ <td>{{ object }}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+</table>
+
+{% else %}
+ <p>You have no Mineos models.
+{% endif %}
+
+{% endblock %}
Copied: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_upload.html (from rev 11876, cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_upload.html)
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_upload.html (rev 0)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodel_upload.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -0,0 +1,30 @@
+
+{% extends "SeismoWebPortal/mineosmodels.html" %}
+
+{% block content %}
+
+<h2 class=titlebar>upload mineos model</h2>
+
+<form action="/specfem3dglobe/mineosmodels/upload/" method="POST" enctype="multipart/form-data">
+
+ {% if form.has_errors %}
+ <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
+ {% endif %}
+
+ <div class=tab30ex>
+
+ <div>
+ <label for="id_model" class=before>local file to upload</label>
+ {{ form.model }} {{ form.model_file }}
+ {% if form.model.errors %}<span class=error>{{ form.model.errors|join:", " }}</span>{% endif %}
+ </div>
+
+ <div>
+ <input class=submit type="submit" value="Upload">
+ </div>
+
+ </div> <!-- tab30ex -->
+
+</form>
+
+{% endblock %}
Added: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodels.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodels.html (rev 0)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosmodels.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -0,0 +1,26 @@
+
+{% extends "SeismoWebPortal/base.html" %}
+
+{% block desktop %}
+
+<div class=taskbar>
+ <ul>
+ <li class=first><a href="/specfem3dglobe/">home</a>
+ <li><a href="/specfem3dglobe/simulations/">3D</a>
+ <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
+ <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
+ <li class=selected><a href="/specfem3dglobe/mineosmodels/">1D models</a>
+ <li><a href="/specfem3dglobe/events/">events</a>
+ <li><a href="/specfem3dglobe/stations/">stations</a>
+ <li><a href="/specfem3dglobe/meshes/">meshes</a>
+ <li><a href="/specfem3dglobe/models/">models</a>
+ <li><a href="/specfem3dglobe/registration/">profile</a>
+ </ul>
+</div>
+
+<h1 class=titlebar>mineos models</h1>
+
+{% block content %}
+{% endblock %}
+
+{% endblock %}
Added: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters.html (rev 0)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -0,0 +1,26 @@
+
+{% extends "SeismoWebPortal/base.html" %}
+
+{% block desktop %}
+
+<div class=taskbar>
+ <ul>
+ <li class=first><a href="/specfem3dglobe/">home</a>
+ <li><a href="/specfem3dglobe/simulations/">3D</a>
+ <li class=selected><a href="/specfem3dglobe/mineosparameters/">1D</a>
+ <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
+ <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
+ <li><a href="/specfem3dglobe/events/">events</a>
+ <li><a href="/specfem3dglobe/stations/">stations</a>
+ <li><a href="/specfem3dglobe/meshes/">meshes</a>
+ <li><a href="/specfem3dglobe/models/">models</a>
+ <li><a href="/specfem3dglobe/registration/">profile</a>
+ </ul>
+</div>
+
+<h1 class=titlebar>mineos parameters</h1>
+
+{% block content %}
+{% endblock %}
+
+{% endblock %}
Added: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html (rev 0)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -0,0 +1,95 @@
+
+{% extends "SeismoWebPortal/mineosparameters.html" %}
+
+{% block content %}
+
+<h2 class=titlebar>{% if object %}edit{% else %}new{% endif %} Mineos parameters</h2>
+
+<div class=toolbar>
+ <form method="post" action="/specfem3dglobe/help/toggle/">
+ <input type="hidden" name="post_toggle_redirect" value="{{ action }}">
+ {% if help_visible %}
+ <input type="submit" name="hide_help" value="Hide Help" />
+ {% else %}
+ <input type="submit" name="show_help" value="Show Help" />
+ {% endif %}
+ </form>
+
+ {% if object %}
+ <form action="../delete/" method="get"><input type="submit" value="Delete" /></form>
+ {% endif %}
+
+</div>
+
+<form method="post" action=".">
+
+ {% if form.has_errors %}
+ <p><span class=error>Please correct the following error{{ form.error_dict|pluralize }}.</span>
+ {% endif %}
+
+ <div class=tab30ex>
+
+ <div>
+ <label for="id_catalog" class=before>catalog</label>
+ {{ form.catalog }}
+ {% if form.catalog.errors %}<span class=error>{{ form.catalog.errors|join:", " }}</span>{% endif %}
+ </div>
+
+ <div>
+ <label for="id_model" class=before>model</label>
+ {{ form.model }}
+ {% if form.model.errors %}<span class=error>{{ form.model.errors|join:", " }}</span>{% endif %}
+ </div>
+
+ <fieldset><legend>oscillations</legend>
+
+ <div class=checkbox>
+ {{ form.radial }}
+ <label for="id_radial" class=after>radial</label>
+ {% if form.radial.errors %}<span class=error>{{ form.radial.errors|join:", " }}</span>{% endif %}
+ </div>
+
+ <div class=checkbox>
+ {{ form.toroidal }}
+ <label for="id_toroidal" class=after>toroidal</label>
+ {% if form.toroidal.errors %}<span class=error>{{ form.toroidal.errors|join:", " }}</span>{% endif %}
+ </div>
+
+ <div class=checkbox>
+ {{ form.spheroidal }}
+ <label for="id_spheroidal" class=after>spheroidal</label>
+ {% if form.spheroidal.errors %}<span class=error>{{ form.spheroidal.errors|join:", " }}</span>{% endif %}
+ </div>
+
+ <div class=checkbox>
+ {{ form.ictoroidal }}
+ <label for="id_ictoroidal" class=after>inner core toroidal</label>
+ {% if form.ictoroidal.errors %}<span class=error>{{ form.ictoroidal.errors|join:", " }}</span>{% endif %}
+ </div>
+
+ </fieldset> <!-- oscillations -->
+
+ </div> <!-- tab30ex -->
+
+ <p><label for="id_fmin" class=before>select frequency range</label> {{ form.fmin }} <= f < {{ form.fmax }} mHz
+ {% if form.fmin.errors %}<span class=error>{{ form.fmin.errors|join:", " }}</span>{% endif %}
+ {% if form.fmax.errors %}<span class=error>{{ form.fmax.errors|join:", " }}</span>{% endif %}
+ {% if help_visible %}<span class=help>The frequency range to be selected from the input eigenfunction databases. All
+modes with frequencies out of this range are rejected.</span>{% endif %}
+
+ <p><label for="id_step" class=before>sampling period</label> {{ form.step }} s
+ {% if form.step.errors %}<span class=error>{{ form.step.errors|join:", " }}</span>{% endif %}
+ {% if help_visible %}<span class=help>This determines the number of samples in the synthetic seismograms. All synthetic seismograms start from the
+source time.</span>{% endif %}
+
+
+ <div class=tab30ex>
+
+ <div><input class=submit type="submit" name="save" value="Save" />
+ </div>
+
+ </div> <!-- tab30ex -->
+
+</form>
+
+{% endblock %}
Added: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_list.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_list.html (rev 0)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_list.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -0,0 +1,55 @@
+
+{% extends "SeismoWebPortal/mineosparameters.html" %}
+
+{% block content %}
+
+<div class=toolbar>
+ <form action="create/" method="get"><input type="submit" value="New..." /></form>
+</div>
+
+{% if object_list %}
+
+<table rules=cols class=cool width="100%">
+ <thead>
+ <tr>
+ <th rowspan=3 valign=bottom>model</th>
+ <th rowspan=3 valign=bottom>mode catalog</th>
+ <th colspan=4 valign=bottom>oscillations</th>
+ <th colspan=2 rowspan=2 valign=bottom><center>select<br>frequency<br>range<br><small>(mHz)</small></center></th>
+ <th rowspan=3 valign=bottom>sampling<br>period</th>
+ </tr>
+ <tr>
+ <th valign=bottom rowspan=2>radial</th>
+ <th valign=bottom rowspan=2>toroidal</th>
+ <th valign=bottom rowspan=2>spheroidal</th>
+ <th valign=bottom rowspan=2>ictoroidal</th>
+ </tr>
+ <tr>
+ <th valign=bottom><small>min</small></th>
+ <th valign=bottom><small>max</small></th>
+ </tr>
+ </thead>
+
+ <tbody>
+ {% for object in object_list %}
+ <tr class="{% cycle odd,even %}">
+ <td>{{ object.model }}</td>
+ <td>{{ object.catalog }}</td>
+ <td><img src="{{ root }}/pics/icon-{% if object.radial %}yes{% else %}no{% endif %}.gif" alt="{{ object.radial }}"></td>
+ <td><img src="{{ root }}/pics/icon-{% if object.toroidal %}yes{% else %}no{% endif %}.gif" alt="{{ object.toroidal }}"></td>
+ <td><img src="{{ root }}/pics/icon-{% if object.spheroidal %}yes{% else %}no{% endif %}.gif" alt="{{ object.spheroidal }}"></td>
+ <td><img src="{{ root }}/pics/icon-{% if object.ictoroidal %}yes{% else %}no{% endif %}.gif" alt="{{ object.ictoroidal }}"></td>
+ <td>{{ object.fmin }}</td>
+ <td>{{ object.fmax }}</td>
+ <td>{{ object.step }}</td>
+ </tr>
+ {% endfor %}
+ </tbody>
+</table>
+
+{% else %}
+ <p>You have no Mineos parameters.
+{% endif %}
+
+{% endblock %}
+
Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/models.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/models.html 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/models.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -6,7 +6,10 @@
<div class=taskbar>
<ul>
<li class=first><a href="/specfem3dglobe/">home</a>
- <li><a href="/specfem3dglobe/simulations/">simulations</a>
+ <li><a href="/specfem3dglobe/simulations/">3D</a>
+ <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
+ <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
+ <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
<li><a href="/specfem3dglobe/events/">events</a>
<li><a href="/specfem3dglobe/stations/">stations</a>
<li><a href="/specfem3dglobe/meshes/">meshes</a>
Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/settings.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/settings.html 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/settings.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -6,7 +6,10 @@
<div class=taskbar>
<ul>
<li class=first><a href="/specfem3dglobe/">home</a>
- <li><a href="/specfem3dglobe/simulations/">simulations</a>
+ <li><a href="/specfem3dglobe/simulations/">3D</a>
+ <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
+ <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
+ <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
<li><a href="/specfem3dglobe/events/">events</a>
<li><a href="/specfem3dglobe/stations/">stations</a>
<li><a href="/specfem3dglobe/meshes/">meshes</a>
Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/simulation_form.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/simulation_form.html 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/simulation_form.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -138,90 +138,7 @@
<input type="hidden" name="hdur_movie" value="0">
{% endif %}
- </div> <!-- tab30ex -->
- <fieldset><legend>1D synthetics</legend>
-
- <p>1D synthetics are generated using the PREM earth model, both with and without an ocean.
-
- <fieldset><legend>oscillations</legend>
-
- <div class=checkbox>
- {{ form.radial }}
- <label for="id_radial" class=after>radial</label>
- {% if form.radial.errors %}<span class=error>{{ form.radial.errors|join:", " }}</span>{% endif %}
- </div>
-
- <div class=checkbox>
- {{ form.toroidal }}
- <label for="id_toroidal" class=after>toroidal</label>
- {% if form.toroidal.errors %}<span class=error>{{ form.toroidal.errors|join:", " }}</span>{% endif %}
- </div>
-
- <div class=checkbox>
- {{ form.spheroidal }}
- <label for="id_spheroidal" class=after>spheroidal</label>
- {% if form.spheroidal.errors %}<span class=error>{{ form.spheroidal.errors|join:", " }}</span>{% endif %}
- </div>
-
- <div class=checkbox>
- {{ form.ictoroidal }}
- <label for="id_ictoroidal" class=after>inner core toroidal</label>
- {% if form.ictoroidal.errors %}<span class=error>{{ form.ictoroidal.errors|join:", " }}</span>{% endif %}
- </div>
-
- </fieldset> <!-- oscillations -->
-
- <div>
- <label for="id_eps" class=before>eps</label>
- {{ form.eps }}
- {% if form.eps.errors %}<span class=error>{{ form.eps.errors|join:", " }}</span>{% endif %}
- {% if help_visible %}<span class=help>The parameter <code>eps</code> controls the accuracy of the Runge-Kutta integration scheme. The relative accuracy
-of an eigenfrequency is a factor 2 to 3 times <code>eps</code>. Parameter <code>eps</code> also controls the precision with which
-a root is found and the minimum relative separation of two roots with the same angular order. It is
-safe to set eps = 10<span style="vertical-align: super">-7</span> for periods greater than 10 seconds. For periods between 5 and 10 seconds, it
-has to be set to 10<span style="vertical-align: super">-12</span>—10<span style="vertical-align: super">-10</span>.</span>{% endif %}
- </div>
-
- <p>Neglect gravitational terms above {{ form.wgrav }} mHz. {% if form.wgrav.errors %}<span class=error>{{ form.wgrav.errors|join:", " }}</span>{% endif %}
- {% if help_visible %}<span class=help>This gives about a factor of 3 increase in speed.</span>{% endif %}
-
- <p><label for="id_lmin" class=before>angular orders</label> {{ form.lmin }} <= l < {{ form.lmax }}
- {% if form.lmin.errors %}<span class=error>{{ form.lmin.errors|join:", " }}</span>{% endif %}
- {% if form.lmax.errors %}<span class=error>{{ form.lmax.errors|join:", " }}</span>{% endif %}
- {% if help_visible %}<span class=help>The range of angular orders l to be computed. For radial modes, this range is not used.</span>{% endif %}
-
- <p><label for="id_wmin" class=before>compute frequency range</label> {{ form.wmin }} <= w < {{ form.wmax }} mHz
- {% if form.wmin.errors %}<span class=error>{{ form.wmin.errors|join:", " }}</span>{% endif %}
- {% if form.wmax.errors %}<span class=error>{{ form.wmax.errors|join:", " }}</span>{% endif %}
- {% if help_visible %}<span class=help>The frequency range to be computed (in millihertz).</span>{% endif %}
-
- <p><label for="id_nmin" class=before>dispersion branch numbers</label> {{ form.nmin }} <= n < {{ form.nmax }}
- {% if form.nmin.errors %}<span class=error>{{ form.nmin.errors|join:", " }}</span>{% endif %}
- {% if form.nmax.errors %}<span class=error>{{ form.nmax.errors|join:", " }}</span>{% endif %}
- {% if help_visible %}<span class=help>The range of dispersion branch numbers n to be computed; n = 0 is the fundamental mode.</span>{% endif %}
-
- <p><label for="id_max_depth" class=before>maximum depth</label> {{ form.max_depth }} km
- {% if form.max_depth.errors %}<span class=error>{{ form.max_depth.errors|join:", " }}</span>{% endif %}
- {% if help_visible %}<span class=help>Maximum depth, d<span style="vertical-align: sub">max</span>, to cut all output eigenfunctions (in km). All output values exist in the interval
-(r<span style="vertical-align: sub">n</span>, r<span style="vertical-align: sub">n</span> - d<span style="vertical-align: sub">max</span>) only, where r<span style="vertical-align: sub">n</span> is the radius of the free surface in km.</span>{% endif %}
-
- <p><label for="id_fmin" class=before>select frequency range</label> {{ form.fmin }} <= f < {{ form.fmax }} mHz
- {% if form.fmin.errors %}<span class=error>{{ form.fmin.errors|join:", " }}</span>{% endif %}
- {% if form.fmax.errors %}<span class=error>{{ form.fmax.errors|join:", " }}</span>{% endif %}
- {% if help_visible %}<span class=help>The frequency range to be selected from the input eigenfunction databases. All
-modes with frequencies out of this range are rejected.</span>{% endif %}
-
- <p><label for="id_step" class=before>sampling period</label> {{ form.step }} s
- {% if form.step.errors %}<span class=error>{{ form.step.errors|join:", " }}</span>{% endif %}
- {% if help_visible %}<span class=help>This determines the number of samples in the synthetic seismograms. All synthetic seismograms start from the
-source time.</span>{% endif %}
-
- </fieldset> <!-- 1D synthetics -->
-
-
- <div class=tab30ex>
-
<div><input class=submit type="submit" name="save" value="Save" />
<input class=submit type="submit" name="save_and_run" value="Save & Run" {% if not user.userinfo.approved %}DISABLED{% endif %} />
</div>
Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/simulations.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/simulations.html 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/simulations.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -6,7 +6,10 @@
<div class=taskbar>
<ul>
<li class=first><a href="/specfem3dglobe/">home</a>
- <li class=selected><a href="/specfem3dglobe/simulations/">simulations</a>
+ <li class=selected><a href="/specfem3dglobe/simulations/">3D</a>
+ <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
+ <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
+ <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
<li><a href="/specfem3dglobe/events/">events</a>
<li><a href="/specfem3dglobe/stations/">stations</a>
<li><a href="/specfem3dglobe/meshes/">meshes</a>
Modified: cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stations.html
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stations.html 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/templates/SeismoWebPortal/stations.html 2008-05-01 04:11:44 UTC (rev 11879)
@@ -6,7 +6,10 @@
<div class=taskbar>
<ul>
<li class=first><a href="/specfem3dglobe/">home</a>
- <li><a href="/specfem3dglobe/simulations/">simulations</a>
+ <li><a href="/specfem3dglobe/simulations/">3D</a>
+ <li><a href="/specfem3dglobe/mineosparameters/">1D</a>
+ <li><a href="/specfem3dglobe/mineosmodecatalogs/">modes</a>
+ <li><a href="/specfem3dglobe/mineosmodels/">1D models</a>
<li><a href="/specfem3dglobe/events/">events</a>
<li class=selected><a href="/specfem3dglobe/stations/">stations</a>
<li><a href="/specfem3dglobe/meshes/">meshes</a>
Modified: cs/portal/trunk/northridge/SeismoWebPortal/urls.py
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/urls.py 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/urls.py 2008-05-01 04:11:44 UTC (rev 11879)
@@ -2,58 +2,44 @@
import os
from django.conf.urls.defaults import *
-from models import Mesh, Model, Simulation, UserInfo
-from models import Event, Source
-from models import Station, StationList, StationNetwork
-from models import Run, Job, OutputFile
+import models
# Static Paths
-static_media_root = os.environ.get("WEBPORTAL_MEDIA_ROOT")+'/static'
+STATIC_ROOT = os.path.join(os.path.dirname(__file__), "static")
-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# Meshes, Models, Simulations
+# Generic
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-# Mesh
+def list_detail_args(ModelClass):
+ if hasattr(ModelClass, 'user_objects'):
+ queryset = ModelClass.user_objects.all()
+ else:
+ queryset = ModelClass.objects.all()
+ return dict(
+ queryset = queryset,
+ allow_empty = True,
+ )
+def cu_args(ModelClass, subdir):
+ return dict(
+ model = ModelClass,
+ post_save_redirect = ('/specfem3dglobe/%s/' % subdir),
+ )
-mesh_list_detail_args = {
- 'queryset': Mesh.user_objects.all(),
- 'allow_empty': True,
-}
+def delete_args(ModelClass, subdir):
+ return dict(
+ model = ModelClass,
+ post_delete_redirect = ('/specfem3dglobe/%s/' % subdir),
+ )
-mesh_delete_args = {
- 'model': Mesh,
- 'post_delete_redirect': '/specfem3dglobe/meshes/',
-}
+def upload_args(ModelClass):
+ return dict(
+ model = ModelClass,
+ )
-
-
-# Model
-
-model_list_detail_args = {
- 'queryset': Model.user_objects.all(),
- 'allow_empty': True,
-}
-
-model_delete_args = {
- 'model': Model,
- 'post_delete_redirect': '/specfem3dglobe/models/',
-}
-
-
-
-# Simulation
-
-simulation_delete_args = {
- 'model': Simulation,
- 'post_delete_redirect': '/specfem3dglobe/simulations/',
-}
-
-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Registration
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -70,49 +56,28 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-event_list_detail_args = {
- 'queryset': Event.user_objects.all(),
- 'allow_empty': True,
-}
-
event_detail_args = {
- 'queryset': Event.user_objects.all(),
- 'extra_context': { 'object_list': Event.user_objects.all() },
+ 'queryset': models.Event.user_objects.all(),
+ 'extra_context': { 'object_list': models.Event.user_objects.all() },
}
-event_delete_args = {
- 'model': Event,
- 'post_delete_redirect': '/specfem3dglobe/events/',
- }
-
source_detail_args = {
- 'queryset': Source.objects.all(),
+ 'queryset': models.Source.objects.all(),
}
source_create_update_args = {
- 'model': Source,
+ 'model': models.Source,
'post_save_redirect': '/specfem3dglobe/events/',
}
-source_delete_args = {
- 'model': Source,
- 'post_delete_redirect': '/specfem3dglobe/events/',
- }
-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Stations
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-stationlist_delete_args = {
- 'model': StationList,
- 'post_delete_redirect': '/specfem3dglobe/stations/',
- }
-
-
stationlist_create_update_args = {
- 'model': StationList,
+ 'model': models.StationList,
'post_save_redirect': '/specfem3dglobe/stations/',
'follow': { 'user': False },
}
@@ -123,10 +88,6 @@
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-run_list_detail_args = {
- 'queryset': Run.objects.all(),
- 'allow_empty': True,
-}
@@ -145,22 +106,22 @@
(r'^registration/$', 'SeismoWebPortal.views.registration'),
(r'^registration/password/$', 'SeismoWebPortal.views.password_change', password_change_args),
- (r'^meshes/$', 'django.views.generic.list_detail.object_list', mesh_list_detail_args),
+ (r'^meshes/$', 'django.views.generic.list_detail.object_list', list_detail_args(models.Mesh)),
(r'^meshes/create/$', 'SeismoWebPortal.views.create_mesh'),
(r'^meshes/create/(?P<nchunks>\d+)/$', 'SeismoWebPortal.views.manipulate_mesh', dict(action='create')),
(r'^meshes/(?P<object_id>\d+)/$', 'SeismoWebPortal.views.manipulate_mesh', dict(action='edit')),
- (r'^meshes/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', mesh_delete_args),
+ (r'^meshes/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', delete_args(models.Mesh, 'meshes')),
- (r'^models/$', 'django.views.generic.list_detail.object_list', model_list_detail_args),
+ (r'^models/$', 'django.views.generic.list_detail.object_list', list_detail_args(models.Model)),
(r'^models/create/$', 'SeismoWebPortal.views.create_model'),
(r'^models/(?P<object_id>\d+)/$', 'SeismoWebPortal.views.update_model'),
- (r'^models/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', model_delete_args),
+ (r'^models/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', delete_args(models.Model, 'models')),
(r'^simulations/$', 'SeismoWebPortal.views.simulation_index'),
(r'^simulations/create/$', 'SeismoWebPortal.views.create_simulation'),
(r'^simulations/(?P<object_id>\d+)/$', 'SeismoWebPortal.views.simulation_detail'),
(r'^simulations/(?P<object_id>\d+)/edit/$', 'SeismoWebPortal.views.update_simulation'),
- (r'^simulations/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', simulation_delete_args),
+ (r'^simulations/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', delete_args(models.Simulation, 'simulations')),
(r'^simulations/(?P<object_id>\d+)/run/$', 'SeismoWebPortal.views.run_simulation'),
(r'^simulations/(?P<sim_id>\d+)/par_file\.txt$', 'SeismoWebPortal.views.par_file'),
(r'^simulations/(?P<sim_id>\d+)/parameters\.pml$', 'SeismoWebPortal.views.parameters_pml'),
@@ -171,35 +132,50 @@
(r'^simulations/(?P<sim_id>\d+)/mineos/stations\.site$', 'SeismoWebPortal.views.mineos_stations_site'),
(r'^simulations/(?P<sim_id>\d+)/mineos/stations\.sitechan$', 'SeismoWebPortal.views.mineos_stations_sitechan'),
+ (r'^mineosparameters/$', 'django.views.generic.list_detail.object_list', list_detail_args(models.MineosParameters)),
+ (r'^mineosparameters/create/$', 'django.views.generic.create_update.create_object', cu_args(models.MineosParameters, 'mineosparameters')),
+ (r'^mineosparameters/(?P<object_id>\d+)/$', 'django.views.generic.create_update.update_object', cu_args(models.MineosParameters, 'mineosparameters')),
+ (r'^mineosparameters/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', delete_args(models.MineosParameters, 'mineosparameters')),
+
+ (r'^mineosmodecatalogs/$', 'django.views.generic.list_detail.object_list', list_detail_args(models.MineosModeCatalog)),
+ (r'^mineosmodecatalogs/create/$', 'django.views.generic.create_update.create_object', cu_args(models.MineosModeCatalog, 'mineosmodecatalogs')),
+ (r'^mineosmodecatalogs/(?P<object_id>\d+)/$', 'django.views.generic.create_update.update_object', cu_args(models.MineosModeCatalog, 'mineosmodecatalogs')),
+ (r'^mineosmodecatalogs/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', delete_args(models.MineosModeCatalog, 'mineosmodecatalogs')),
+
+ (r'^mineosmodels/$', 'django.views.generic.list_detail.object_list', list_detail_args(models.MineosModel)),
+ (r'^mineosmodels/upload/$', 'SeismoWebPortal.views.upload', upload_args(models.MineosModel)),
+ (r'^mineosmodels/(?P<object_id>\d+)/$', 'django.views.generic.create_update.update_object', cu_args(models.MineosModel, 'mineosmodels')),
+ (r'^mineosmodels/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', delete_args(models.MineosModel, 'mineosmodels')),
+
# events
- (r'^events/$', 'django.views.generic.list_detail.object_list', event_list_detail_args),
+ (r'^events/$', 'django.views.generic.list_detail.object_list', list_detail_args(models.Event)),
(r'^events/search/$', 'SeismoWebPortal.views.event_search'),
(r'^events/create/$', 'SeismoWebPortal.views.manipulate_event', dict(action='create')),
- (r'^events/upload/$', 'SeismoWebPortal.views.upload_event'),
+ (r'^events/upload/$', 'SeismoWebPortal.views.upload', upload_args(models.Event)),
(r'^events/sources/(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', source_detail_args),
(r'^events/sources/(?P<object_id>\d+)/edit/$', 'django.views.generic.create_update.update_object', source_create_update_args),
- (r'^events/sources/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', source_delete_args),
+ (r'^events/sources/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', delete_args(models.Source, 'events')),
(r'^events/sources/(?P<object_id>\d+)/CMTSOLUTION\.txt$', 'SeismoWebPortal.views.cmtsolution_txt'),
(r'^events/sources/(?P<object_id>\d+)/beachball\.gif$', 'SeismoWebPortal.views.beachball_gif'),
(r'^events/(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', event_detail_args),
(r'^events/(?P<object_id>\d+)/edit/$', 'SeismoWebPortal.views.manipulate_event', dict(action='edit')),
- (r'^events/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', event_delete_args),
+ (r'^events/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', delete_args(models.Event, 'events')),
(r'^events/(?P<object_id>\d+)/CMTSOLUTION\.txt$','SeismoWebPortal.views.event_detail_cmtsolution_txt'),
(r'^events/(?P<object_id>\d+)/gearth\.kml$','SeismoWebPortal.views.event_detail_gearth'),
# stations
(r'^stations/$', 'SeismoWebPortal.views.station_index'),
- (r'^stations/upload/$', 'SeismoWebPortal.views.upload_station_list'),
- (r'^stations/(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', {'queryset': StationList.user_objects.all()}),
+ (r'^stations/upload/$', 'SeismoWebPortal.views.upload', upload_args(models.StationList)),
+ (r'^stations/(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', {'queryset': models.StationList.user_objects.all()}),
(r'^stations/(?P<object_id>\d+)/edit/$', 'django.views.generic.create_update.update_object', stationlist_create_update_args),
- (r'^stations/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', stationlist_delete_args),
+ (r'^stations/(?P<object_id>\d+)/delete/$', 'django.views.generic.create_update.delete_object', delete_args(models.StationList, 'stations')),
(r'^stations/(?P<object_id>\d+)/stations\.txt$','SeismoWebPortal.views.stationlist_detail_txt'),
(r'^stations/(?P<object_id>\d+)/gearth\.kml$','SeismoWebPortal.views.stationlist_detail_gearth'),
# runs
- (r'^runs/list\.py$', 'django.views.generic.list_detail.object_list', dict(run_list_detail_args,
- template_name='SeismoWebPortal/run_list.py',
- mimetype='text/plain')),
+ (r'^runs/list\.py$', 'django.views.generic.list_detail.object_list', dict(list_detail_args(models.Run),
+ template_name='SeismoWebPortal/run_list.py',
+ mimetype='text/plain')),
(r'^runs/(?P<object_id>\d+)/status/$', 'SeismoWebPortal.views.update_run_status'),
# jobs
@@ -212,7 +188,7 @@
# help
(r'^help/toggle/$', 'SeismoWebPortal.views.help_toggle'),
- (r'^(.*)', 'django.views.static.serve', {'document_root':static_media_root}),
+ (r'^(.*)', 'django.views.static.serve', {'document_root': STATIC_ROOT}),
)
Modified: cs/portal/trunk/northridge/SeismoWebPortal/views.py
===================================================================
--- cs/portal/trunk/northridge/SeismoWebPortal/views.py 2008-05-01 00:51:25 UTC (rev 11878)
+++ cs/portal/trunk/northridge/SeismoWebPortal/views.py 2008-05-01 04:11:44 UTC (rev 11879)
@@ -685,11 +685,10 @@
manipulate_event = login_required(manipulate_event)
-def upload_event(request):
- from forms import UploadEventManipulator
+def upload(request, model):
from os.path import dirname
- manipulator = UploadEventManipulator()
+ manipulator = model.UploadManipulator()
help_visible = get_help_visible(request)
if request.method == 'POST':
@@ -706,16 +705,18 @@
errors = manipulator.get_validation_errors(new_data)
if not errors:
manipulator.do_html2python(new_data)
- new_event = manipulator.save(new_data, request.user)
- url = "%s/%i/" % (dirname(dirname(request.path)), new_event.id)
+ obj = manipulator.save(new_data, request.user)
+ url = "%s/%i/" % (dirname(dirname(request.path)), obj.id)
return HttpResponseRedirect(url)
else:
errors = new_data = {}
form = forms.FormWrapper(manipulator, new_data, errors)
- return render_to_response('SeismoWebPortal/event_upload.html',
+ template_name = "%s/%s_upload.html" % (model._meta.app_label, model._meta.object_name.lower())
+ return render_to_response(template_name,
{'form': form, 'help_visible': help_visible},
RequestContext(request, {}))
+upload = login_required(upload)
def event_detail_gearth(request, object_id):
@@ -803,39 +804,6 @@
station_index = login_required(station_index)
-def upload_station_list(request):
- from os.path import dirname
-
- manipulator = UploadStationListManipulator()
- help_visible = get_help_visible(request)
-
- if request.method == 'POST':
- new_data = request.POST.copy()
- errors = {}
- if new_data.has_key('show_help'):
- help_visible = True
- request.session['help_visible'] = help_visible
- elif new_data.has_key('hide_help'):
- help_visible = False
- request.session['help_visible'] = help_visible
- else:
- new_data.update(request.FILES)
- errors = manipulator.get_validation_errors(new_data)
- if not errors:
- manipulator.do_html2python(new_data)
- stationList = manipulator.save(new_data, request.user)
- url = "%s/%i/" % (dirname(dirname(request.path)), stationList.id)
- return HttpResponseRedirect(url)
- else:
- errors = new_data = {}
-
- form = forms.FormWrapper(manipulator, new_data, errors)
- return render_to_response('SeismoWebPortal/stationlist_upload.html',
- {'form': form, 'help_visible': help_visible},
- RequestContext(request, {}))
-upload_station_list = login_required(upload_station_list)
-
-
def stationlist_detail_gearth(request, object_id):
stationList = get_object_or_404(StationList, id=object_id)
kwds = dict(queryset = stationList.station_set.all(),
@@ -847,73 +815,6 @@
# support code
-def parse_station_list(stationList, stream):
-
- for line in stream:
-
- # parse the line
- code, network, latitude, longitude, elevation, bur = line.split()
- latitude, longitude = float(latitude), float(longitude)
- elevation, bur = float(elevation), float(bur)
-
- if stationList is None:
- continue
-
- # get/create the network entry
- network, created = StationNetwork.objects.get_or_create(code = network, defaults = { 'name': "" })
-
- # create the station
- station = Station.objects.create(stationList = stationList,
- code = code,
- name = "",
- network = network,
- status = 1,
- latitude = latitude,
- longitude = longitude,
- elevation = elevation,
- bur = bur)
- return
-
-
-class UploadStationListManipulator(forms.Manipulator):
-
- def __init__(self):
- super(UploadStationListManipulator, self).__init__()
- self.fields = [
- forms.TextField('name', maxlength=100, is_required=True),
- forms.FileUploadField(field_name='stations', is_required=True),
- ]
-
- def get_validation_errors(self, new_data):
- from StringIO import StringIO
-
- errors = super(UploadStationListManipulator, self).get_validation_errors(new_data)
-
- if not errors.get('stations'):
- try:
- stations = new_data['stations']['content']
- stream = StringIO(stations)
- parse_station_list(None, stream)
- except Exception:
- errors['stations'] = ['Please select a file in STATIONS format.']
-
- return errors
-
- def save(self, new_data, user):
- from StringIO import StringIO
-
- # Create the new station list.
- stationList = StationList.objects.create(user = user,
- name = new_data['name'])
-
- # Parse the uploaded STATIONS file.
- stations = new_data['stations']['content']
- stream = StringIO(stations)
- parse_station_list(stationList, stream)
-
- return stationList
-
-
# move to shared location
def gearth_object_list(request, **kwds):
from django.views.generic.list_detail import object_list
More information about the cig-commits
mailing list