[cig-commits] r11740 - in cs/portal/trunk/seismo/SeismoWebPortal: . data sql templates/SeismoWebPortal

leif at geodynamics.org leif at geodynamics.org
Wed Apr 2 19:02:26 PDT 2008


Author: leif
Date: 2008-04-02 19:02:25 -0700 (Wed, 02 Apr 2008)
New Revision: 11740

Added:
   cs/portal/trunk/seismo/SeismoWebPortal/data/
   cs/portal/trunk/seismo/SeismoWebPortal/data/STATIONS_FULL_758
   cs/portal/trunk/seismo/SeismoWebPortal/management.py
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/eventworkspace_form.html
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/folder.html
Removed:
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/home.html
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/trash.html
Modified:
   cs/portal/trunk/seismo/SeismoWebPortal/forms.py
   cs/portal/trunk/seismo/SeismoWebPortal/gui.py
   cs/portal/trunk/seismo/SeismoWebPortal/middleware.py
   cs/portal/trunk/seismo/SeismoWebPortal/models.py
   cs/portal/trunk/seismo/SeismoWebPortal/sql/stationnetwork.sql
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dgloberequest_form.html
   cs/portal/trunk/seismo/SeismoWebPortal/views.py
Log:
More work on Event Viewer -- browsing to an event now creates an
"EventWorkspace".  Generate defaults for Specfem during "syncdb".
Added "Shared" folder.


Copied: cs/portal/trunk/seismo/SeismoWebPortal/data/STATIONS_FULL_758 (from rev 11739, seismo/3D/SPECFEM3D_GLOBE/trunk/DATA/STATIONS_FULL_758)
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/data/STATIONS_FULL_758	                        (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/data/STATIONS_FULL_758	2008-04-03 02:02:25 UTC (rev 11740)
@@ -0,0 +1,758 @@
+MCK   AK   63.7323  -148.9349  618.0    0.0
+CTAO  AS  -20.0882   146.2545  357.0    0.0
+KONO  AS   59.6491     9.5982  216.0    0.0
+MAJO  AS   36.5409   138.2083  431.0    0.0
+ZOBO  AS  -16.2700   -68.1250 4450.0    0.0
+ASBS  AZ   33.6208  -116.4664 1400.0    0.0
+BZN   AZ   33.4915  -116.6670 1301.0    0.0
+CRY   AZ   33.5654  -116.7373 1128.0    0.0
+ELKS  AZ   33.5813  -116.4496 1169.0    0.0
+FRD   AZ   33.4947  -116.6022 1164.0    0.0
+GLA   AZ   33.0512  -114.8270  579.0    0.0
+GLAC  AZ   33.6014  -116.4781 1169.0    0.0
+KNW   AZ   33.7141  -116.7119 1507.0    0.0
+LVA2  AZ   33.3516  -116.5615 1435.0    0.0
+MONP  AZ   32.8927  -116.4225 1920.0    0.0
+PFO   AZ   33.6117  -116.4594 1259.0    0.0
+RDM   AZ   33.6300  -116.8478 1365.0    0.0
+SHUM  AZ   33.6327  -116.4445 1195.0    0.0
+SMTC  AZ   32.9449  -115.7999  100.0    0.0
+SND   AZ   33.5519  -116.6129 1358.0    0.0
+SOL   AZ   32.8410  -117.2480  245.0    0.0
+TRO   AZ   33.5234  -116.4257 2628.0    0.0
+WMC   AZ   33.5736  -116.6747 1271.0    0.0
+YAQ   AZ   33.1666  -116.3539  430.0    0.0
+BFO   BF   48.3319     8.3311  739.0    0.0
+CMB   BK   38.0350  -120.3850  719.0    0.0
+BJI   CD   40.0403   116.1750   43.0    0.0
+ENH   CD   30.2718   109.4868  487.0    0.0
+HIA   CD   49.2667   119.7417  610.0    0.0
+KMI   CD   25.1233   102.7400 1975.0    0.0
+LSA   CD   29.7000    91.1500 3789.0    0.0
+LZH   CD   36.0867   103.8444 1560.0    0.0
+MDJ   CD   44.6164   129.5919  250.0    0.0
+QIZ   CD   19.0294   109.8433  230.0    0.0
+SSE   CD   31.0956   121.1867   15.0    0.0
+WMQ   CD   43.8211    87.6950  903.0    0.0
+DRLN  CN   49.2560   -57.5042  238.0    0.0
+FRB   CN   63.7467   -68.5467   18.0    0.0
+GAC   CN   45.7033   -75.4783   62.0    0.0
+INK   CN   68.3067  -133.5200   40.0    0.0
+LLLB  CN   50.6090  -121.8815  700.0    0.0
+MBC   CN   76.2417  -119.3600   15.0    0.0
+PMB   CN   50.5188  -123.0765  400.0    0.0
+RES   CN   74.6870   -94.9000   15.0    0.0
+SCHQ  CN   54.8319   -66.8336  501.0    0.0
+WHY   CN   60.6597  -134.8806 1292.0    0.0
+YKW1  CN   62.4931  -114.5086  204.9    0.0
+YKW3  CN   62.5608  -114.6164  200.0    0.0
+FERN  CT   37.1526  -121.8123  518.0    0.0
+ICAN  CT   37.5049  -121.3278  312.0    0.0
+SAVY  CT   37.3889  -121.4956  600.0    0.0
+BTO   CU   42.5060   -71.5580  180.0    0.0
+GUYA  CU   42.5060   -71.5580  180.0    0.0
+NJ2   CU   42.5060   -71.5580  180.0    0.0
+TIA   CU   42.5060   -71.5580  180.0    0.0
+TIL   CU   42.5060   -71.5580  180.0    0.0
+TIY   CU   42.5060   -71.5580  180.0    0.0
+DPC   CZ   50.3583    16.4111  760.0    0.0
+AFI   DW  -13.9093  -171.7773  706.0    0.0
+BDF   DW  -15.6639   -47.9033 1260.0    0.0
+CMB   DW   38.0350  -120.3850  719.0    0.0
+COL   DW   64.9000  -147.7933  320.0    0.0
+GDH   DW   69.2500   -53.5333   23.0    0.0
+HON   DW   21.3217  -158.0083    2.0    0.0
+KEV   DW   69.7553    27.0067   80.0    0.0
+LON   DW   46.7500  -121.8100  854.0    0.0
+SCP   DW   40.7949   -77.8650  352.0    0.0
+SLR   DW  -25.7349    28.2816 1348.0    0.0
+TAU   DW  -42.9099   147.3204  132.0    0.0
+TOL   DW   39.8814    -4.0485  480.0    0.0
+APE   GE   37.1454    25.5230  615.0    0.0
+APEZ  GE   34.9777    24.8859  435.0    0.0
+BGIO  GE   31.7219    35.0877  752.0    0.0
+BOA   GE   12.4493   -85.6659  380.0    0.0
+BRNL  GE   52.4278    13.3580   42.0    0.0
+CART  GE   37.5868    -1.0012   65.0    0.0
+CSS   GE   34.9611    33.3310  396.0    0.0
+DAG   GE   76.7713   -18.6550   23.0    0.0
+DSB   GE   53.2452    -6.3762  236.0    0.0
+EIL   GE   29.6699    34.9512  210.0    0.0
+FODE  GE   35.3797    24.9576   50.0    0.0
+GHAR  GE   32.1220    13.0864  675.0    0.0
+GVD   GE   34.8392    24.0873  180.0    0.0
+IBBN  GE   52.3072     7.7566  140.0    0.0
+ISP   GE   37.8433    30.5093 1100.0    0.0
+JER   GE   31.7719    35.1972  770.0    0.0
+KBS   GE   78.9256    11.9417   77.0    0.0
+KMBO  GE   -1.1268    37.2523 1960.0    0.0
+KRIS  GE   35.1780    25.5030  850.0    0.0
+KWP   GE   49.6305    22.7078  463.0    0.0
+LID   GE   54.5481    13.3664    1.0    0.0
+LVC   GE  -22.6182   -68.9113 2915.0    0.0
+MAHO  GE   39.8959     4.2665   15.0    0.0
+MALT  GE   38.3134    38.4273 1120.0    0.0
+MAUI  GE   20.7668  -156.2448 2060.0    0.0
+MELI  GE   35.2900    -2.9380   20.0    0.0
+MHV   GE   54.9595    37.7664  150.0    0.0
+MLR   GE   45.4912    25.9456 1378.0    0.0
+MORC  GE   49.7766    17.5428  740.0    0.0
+MRNI  GE   33.1178    35.3920  918.0    0.0
+MTE   GE   40.3997    -7.5442  815.0    0.0
+NAI   GE   -1.2739    36.8037 1692.0    0.0
+PMG   GE   -9.4092   147.1539   67.0    0.0
+PSZ   GE   47.9190    19.8940  549.0    0.0
+PUL   GE   59.7670    30.3170   65.0    0.0
+RGN   GE   54.5477    13.3214   15.0    0.0
+RIOB  GE  -10.1501   -67.7470    0.0    0.0
+RUE   GE   52.4759    13.7800   40.0    0.0
+SANT  GE   36.3710    25.4590  540.0    0.0
+SELV  GE   37.2383    -3.7277  650.0    0.0
+SFJ   GE   66.9967   -50.6156  365.0    0.0
+SFS   GE   36.4656    -6.2055   21.0    0.0
+SFUC  GE   36.6370    -6.1750   88.0    0.0
+SKD   GE   35.4120    23.9280  306.0    0.0
+SNAA  GE  -71.6707    -2.8379  846.0    0.0
+STU   GE   48.7719     9.1950  360.0    0.0
+SUW   GE   54.0125    23.1808  152.0    0.0
+TRTE  GE   58.3786    26.7205    0.0    0.0
+UGM   GE   -7.9125   110.5231  350.0    0.0
+WLF   GE   49.6646     6.1526  295.0    0.0
+GRA1  GR   49.6919    11.2217  499.5    0.0
+AIS   G   -37.7970    77.5690   35.0    0.0
+ATD   G    11.5300    42.8470  610.0    0.0
+BNG   G     4.4350    18.5470  378.0    0.0
+CAN   G   -35.3210   148.9990  650.0    0.0
+CRZF  G   -46.4300    51.8610  140.0    0.0
+DRV   G   -66.6650   140.0100   40.0    0.0
+ECH   G    48.2160     7.1580  580.0    0.0
+EVO   G    38.5320    -8.0130    0.0    0.0
+FDF   G    14.7350   -61.1430  467.0    0.0
+HDC   G    10.0000   -84.1120 1150.0    0.0
+HYB   G    17.4170    78.5530  510.0    0.0
+INU   G    35.3500   137.0290  132.0    0.0
+KIP   G    21.4230  -158.0150   70.0    0.0
+KOG   G     5.2070   -52.7320   10.0    0.0
+NOUC  G   -22.1010   166.3030  112.0    0.0
+PAF   G   -49.3510    70.2130   17.0    0.0
+PEL   G   -33.1460   -70.6750  660.0    0.0
+PPT   G   -17.5690  -149.5760  340.0    0.0
+PVC   G   -17.7400   168.3120   80.0    0.0
+RER   G   -21.1590    55.7460  834.0    0.0
+SCZ   G    36.5980  -121.4030  261.0    0.0
+SEY   G    62.9330   152.3730  206.0    0.0
+SPB   G   -23.5920   -47.4320   85.0    0.0
+SSB   G    45.2790     4.5420  700.0    0.0
+SSB2  G    45.2790     4.5420  700.0    0.0
+SSB3  G    45.2790     4.5420  700.0    0.0
+TAM   G    22.7910     5.5270 1377.0    0.0
+UNM   G    19.3290   -99.1780 2280.0    0.0
+WUS   G    41.1990    79.2180 1457.0    0.0
+BDFB  GT  -15.6418   -48.0148 1195.0    0.0
+BGCA  GT    5.1764    18.4242  676.0    0.0
+BOSA  GT  -28.6141    25.2555 1280.0    0.0
+CPUP  GT  -26.3306   -57.3309  105.0    0.0
+DBIC  GT    6.6702    -4.8566  125.0    0.0
+LBTB  GT  -25.0151    25.5967 1128.0    0.0
+LPAZ  GT  -16.2879   -68.1307 4769.0    0.0
+PLCA  GT  -40.7328   -70.5508 1050.0    0.0
+SBA   GT  -77.8491   166.7573   20.0    0.0
+VNDA  GT  -77.5172   161.8528  151.0    0.0
+H2O   H2   27.8819  -141.9917 -4947.0    0.
+BJT   IC   40.0183   116.1679  197.0    0.0
+ENH   IC   30.2718   109.4868  487.0    0.0
+HIA   IC   49.2667   119.7417  610.0    0.0
+KMI   IC   25.1233   102.7400 1975.0    0.0
+LSA   IC   29.7000    91.1500 3789.0    0.0
+MDJ   IC   44.6164   129.5919  250.0    0.0
+QIZ   IC   19.0294   109.8433  230.0    0.0
+SSE   IC   31.0951   121.1859   15.0    0.0
+WMQ   IC   43.8211    87.6950  903.0    0.0
+XAN   IC   34.0313   108.9237  630.0    0.0
+AAK   II   42.6390    74.4940 1645.0    0.0
+ABKT  II   37.9304    58.1189  678.0    0.0
+ALE   II   82.5033   -62.3500   60.0    0.0
+ARU   II   56.4302    58.5625  250.0    0.0
+ASCN  II   -7.9327   -14.3601  173.0    0.0
+BFO   II   48.3319     8.3311  589.0    0.0
+BORG  II   64.7474   -21.3268  110.0    0.0
+BRVK  II   53.0581    70.2828  330.0    0.0
+CMLA  II   37.7637   -25.5243  429.0    0.0
+COCO  II  -12.1901    96.8349    1.0    0.0
+EFI   II  -51.6753   -58.0637  110.0    0.0
+ERM   II   42.0150   143.1572   40.0    0.0
+ESK   II   55.3167    -3.2050  242.0    0.0
+FFC   II   54.7250  -101.9783  338.0    0.0
+GAR   II   39.0000    70.3167 1300.0    0.0
+HOPE  II  -54.2836   -36.4879   20.0    0.0
+JTS   II   10.2908   -84.9525  340.0    0.0
+KAPI  II   -5.0142   119.7517   30.0    0.0
+KDAK  II   57.7828  -152.5835  152.0    0.0
+KIV   II   43.9562    42.6888 1210.0    0.0
+KURK  II   50.7154    78.6202  184.0    0.0
+KWAJ  II    8.8019   167.6130    0.0    0.0
+LVZ   II   67.8979    34.6514  630.0    0.0
+MBAR  II   -0.6019    30.7382 1390.0    0.0
+MSEY  II   -4.6737    55.4792  475.0    0.0
+MSVF  II  -17.7333   178.0500  783.0    0.0
+NIL   II   33.6506    73.2686  629.0    0.0
+NNA   II  -11.9875   -76.8422  575.0    0.0
+NRIL  II   69.5049    88.4414   92.0    0.0
+NVS   II   54.8404    83.2346  150.0    0.0
+OBN   II   55.1138    36.5687  160.0    0.0
+PALK  II    7.2728    80.7022  460.0    0.0
+PFO   II   33.6092  -116.4553 1280.0    0.0
+RAYN  II   23.5225    45.5032  631.0    0.0
+RPN   II  -27.1267  -109.3344  110.0    0.0
+SACV  II   14.9702   -23.6085  387.0    0.0
+SHEL  II  -15.9588    -5.7457  537.0    0.0
+SUR   II  -32.3797    20.8117 1770.0    0.0
+TAU   II  -42.9099   147.3204  132.0    0.0
+TLY   II   51.6807   103.6438  579.0    0.0
+WRAB  II  -19.9336   134.3600  366.0    0.0
+XPF   II   33.6092  -116.4533 1280.0    0.0
+ATTU  IM   52.8821   173.1643  250.0    0.0
+IL31  IM   64.7714  -146.8866  419.0    0.0
+PD31  IM   42.7672  -109.5581 2219.0    0.0
+TX00  IM   29.3338  -103.6670 1013.0    0.0
+TX31  IM   29.3342  -103.6678 1025.0    0.0
+TX32  IM   29.3338  -103.6670 1013.0    0.0
+VNDA  IM  -77.5139   161.8456   98.0    0.0
+WCI   IU   38.2290   -86.2940  638.0    0.0
+WVT   IU   36.1300   -87.8300  157.0    0.0
+XMAS  IU    2.0448  -157.4453    2.0    0.0
+YAK   IU   62.0308   129.6812  105.0    0.0
+YSS   IU   46.9583   142.7610  100.0    0.0
+BTDF  MS    1.3608   103.7729   64.0    0.0
+TIXI  IU   71.6490   128.8665   50.0    0.0
+SBA   IU  -77.8491   166.7573   20.0    0.0
+SDV   IU    8.8790   -70.6330 1550.0    0.0
+SFJ   IU   66.9967   -50.6156  365.0    0.0
+SJG   IU   18.1117   -66.1500  457.0    0.0
+SNZO  IU  -41.3103   174.7046   62.0    0.0
+SPA   IU  -89.9954   115.0000 2927.0    0.0
+SSPA  IU   40.6401   -77.8914  352.0    0.0
+TATO  IU   24.9754   121.4881   53.0    0.0
+TBT   IU   28.6794   -17.9145  180.0    0.0
+TEIG  IU   20.2264   -88.2766   69.0    0.0
+TOL   IU   39.8814    -4.0485  480.0    0.0
+TRQA  IU  -38.0567   -61.9795  602.0    0.0
+TSUM  IU  -19.2022    17.5838 1240.0    0.0
+TUC   IU   32.3096  -110.7846  874.0    0.0
+ULN   IU   47.8652   107.0528 1615.0    0.0
+WAKE  IU   19.2833   166.6536    1.0    0.0
+MSKU  IU   -1.6557    13.6116  312.0    0.0
+HNR   IU   -9.4322   159.9471   72.0    0.0
+ANTO  SR   39.8689    32.7936  883.0    0.0
+BCAO  SR    4.4335    18.5354  336.0    0.0
+CHTO  SR   18.7900    98.9769  316.0    0.0
+GUMO  SR   13.5878   144.8662   14.0    0.0
+NWAO  SR  -32.9266   117.2333  265.0    0.0
+SNZO  SR  -41.3103   174.7046   62.0    0.0
+TATO  SR   24.9754   121.4881   53.0    0.0
+BAR   TS   32.6800  -116.6720  548.0    0.0
+CALB  TS   34.1430  -118.6270    0.0    0.0
+CWC   TS   36.4399  -118.0802 1553.0    0.0
+DGR   TS   33.6500  -117.0090  700.0    0.0
+GLA   TS   33.0520  -114.8270  627.0    0.0
+GPO   TS   35.6494  -117.6619  735.0    0.0
+GSC   TS   35.3028  -116.8083  990.0    0.0
+ISA   TS   35.6630  -118.4733  835.0    0.0
+MLAC  TS   37.6310  -118.8340 2170.0    0.0
+NEE   TS   34.8230  -114.5960  139.0    0.0
+OSI   TS   34.6145  -118.7235  706.0    0.0
+PAS   TS   34.1483  -118.1717  295.0    0.0
+PFO   TS   33.6092  -116.4553 1280.0    0.0
+RPV   TS   33.7438  -118.4035  115.0    0.0
+SBC   TS   34.4417  -119.7133   90.0    0.0
+SMTC  TS   32.9490  -115.7200  -50.0    0.0
+SNCC  TS   33.2480  -119.5240  227.0    0.0
+SVD   TS   34.1045  -117.0970  600.0    0.0
+USC   TS   34.0210  -118.2870   60.0    0.0
+VTV   TS   34.5670  -117.3330  847.0    0.0
+GRFO  SR   49.6919    11.2217  425.0    0.0
+AAE   IU    9.0292    38.7656 2442.0    0.0
+ADK   IU   51.8837  -176.6844  116.0    0.0
+AFI   IU  -13.9093  -171.7773  706.0    0.0
+ANMO  IU   34.9462  -106.4567 1840.0    0.0
+ANTO  IU   39.8689    32.7936  883.0    0.0
+BILL  IU   68.0651   166.4524  299.0    0.0
+BOCO  IU    4.5869   -74.0432 3160.0    0.0
+CASY  IU  -66.2792   110.5364  159.0    0.0
+CCM   IU   38.0557   -91.2446  222.0    0.0
+CHTO  IU   18.7900    98.9769  316.0    0.0
+COL   IU   64.9000  -147.7933  320.0    0.0
+COLA  IU   64.8738  -147.8511  194.0    0.0
+COR   IU   44.5857  -123.3032  121.0    0.0
+CTAO  IU  -20.0882   146.2545  357.0    0.0
+DAV   IU    7.0878   125.5747   85.0    0.0
+DWPF  IU   28.1102   -81.4327   20.0    0.0
+FURI  IU    8.9030    38.6883 2545.0    0.0
+GNI   IU   40.1480    44.7410 1609.0    0.0
+GRFO  IU   49.6919    11.2217  425.0    0.0
+GUMO  IU   13.5878   144.8662   14.0    0.0
+HKT   IU   29.9618   -95.8384 -413.0    0.0
+HRV   IU   42.5060   -71.5580  180.0    0.0
+INCN  IU   37.4833   126.6333  420.0    0.0
+JOHN  IU   16.7329  -169.5292    2.0    0.0
+KBS   IU   78.9256    11.9417   77.0    0.0
+KEV   IU   69.7553    27.0067   80.0    0.0
+KIEV  IU   50.6944    29.2083  163.0    0.0
+KIP   IU   21.4233  -158.0150   70.0    0.0
+KMBO  IU   -1.1268    37.2523 1960.0    0.0
+KONO  IU   59.6491     9.5982  216.0    0.0
+KOWA  IU   14.4967    -4.0140  321.0    0.0
+LCO   IU  -29.0111   -70.7010 2299.0    0.0
+LSZ   IU  -15.2766    28.1882 1184.0    0.0
+LVC   IU  -22.6128   -68.9113 2195.0    0.0
+MA2   IU   59.5756   150.7700  339.0    0.0
+MAJO  IU   36.5425   138.2073  405.0    0.0
+MAKZ  IU   46.8080    81.9770  600.0    0.0
+MBWA  IU  -21.1590   119.7312  194.0    0.0
+MIDW  IU   28.2157  -177.3697   18.0    0.0
+NAI   IU   -1.2739    36.8037 1692.0    0.0
+NWAO  IU  -32.9266   117.2333  265.0    0.0
+OTAV  IU    0.2376   -78.4508 3507.0    0.0
+PAB   IU   39.5458    -4.3483  925.0    0.0
+PAYG  IU   -0.6741   -90.2863  295.0    0.0
+PET   IU   53.0235   158.6498  150.0    0.0
+PMG   IU   -9.4092   147.1539   67.0    0.0
+PMSA  IU  -64.7742   -64.0490   10.0    0.0
+POHA  IU   19.7575  -155.5325 1967.0    0.0
+PTCN  IU  -25.0728  -130.0947  195.0    0.0
+PTGA  IU   -0.7308   -59.9666  237.0    0.0
+QSPA  IU   34.9502  -106.4602 1839.0    0.0
+RAIO  IU   46.0403  -122.8851    1.0    0.0
+RAR   IU  -21.2125  -159.7733   28.0    0.0
+RCBR  IU   -5.8275   -35.9014  409.0    0.0
+RSSD  IU   44.1204  -104.0362 2060.0    0.0
+AAK   KN   42.6333    74.4944 1680.0    0.0
+AML   KN   42.1311    73.6941 3400.0    0.0
+BGK2  KN   42.6451    74.2274 1640.0    0.0
+CHM   KN   42.9986    74.7513  655.0    0.0
+EKS2  KN   42.6615    73.7772 1360.0    0.0
+ERPT  KN   42.6011    76.0735 3790.0    0.0
+KBK   KN   42.6564    74.9478 1760.0    0.0
+KZA   KN   42.0778    75.2496 3520.0    0.0
+NRPT  KN   42.6011    76.0735 3790.0    0.0
+TKM   KN   42.8601    75.3184  960.0    0.0
+TKM2  KN   42.9208    75.5966 2020.0    0.0
+UCH   KN   42.2275    74.5134 3850.0    0.0
+ULHL  KN   42.2456    76.2417 2040.0    0.0
+USP   KN   43.2669    74.4997  740.0    0.0
+AKT   KZ   50.4348    58.0167  360.0    0.0
+AKTK  KZ   50.4348    58.0167  360.0    0.0
+BRVK  KZ   53.0580    70.2828  315.0    0.0
+CHK   KZ   53.6762    70.6152  240.0    0.0
+CHKZ  KZ   53.6762    70.6152  120.0    0.0
+KUR   KZ   50.7149    78.6208  240.0    0.0
+KURK  KZ   50.7149    78.6208  240.0    0.0
+MAK   KZ   46.8075    81.9774  600.0    0.0
+MAKZ  KZ   46.8080    81.9770  600.0    0.0
+PDG   KZ   43.3275    79.4850 1277.0    0.0
+TLG   KZ   43.2330    77.2250 1120.0    0.0
+VOS   KZ   52.7232    70.9797  450.0    0.0
+ZRN   KZ   52.9510    69.0043  420.0    0.0
+ZRNK  KZ   52.9510    69.0043  380.0    0.0
+BMN   LB   40.4314  -117.2210 1500.0    0.0
+DAC   LB   36.2770  -117.5937 1813.0    0.0
+LDS   LB   37.2425  -113.3514 1101.0    0.0
+MVU   LB   38.5037  -112.2123 2239.0    0.0
+TPH   LB   38.0750  -117.2225 1883.0    0.0
+NCB   LD   43.9734   -74.2229  469.0    0.0
+PAL   LD   41.0057   -73.9071   91.0    0.0
+CDRO  LX   38.6292   -28.6992  195.0    0.0
+AQU   MN   42.3540    13.4050  710.0    0.0
+BGY   MN   44.8026    20.5158  250.0    0.0
+BNI   MN   45.0520     6.6780 1395.0    0.0
+CII   MN   41.7230    14.3050  910.0    0.0
+CLTB  MN   37.5780    13.2160  949.0    0.0
+GFA   MN   34.3380     9.0730  250.0    0.0
+IDI   MN   35.2880    24.8900  750.0    0.0
+ISP   MN   37.8430    30.5090 1100.0    0.0
+KEG   MN   29.9275    31.8292  460.0    0.0
+MDT   MN   32.8170    -4.6140 1200.0    0.0
+MEB   MN   36.3030     2.7300  500.0    0.0
+TIR   MN   41.3477    19.8650  198.0    0.0
+TNV   MN  -74.7000   164.1200   40.0    0.0
+TRI   MN   45.7090    13.7640  161.0    0.0
+TTE   MN   45.6600    13.7900   92.0    0.0
+VLC   MN   44.1594    10.3864  555.0    0.0
+VSL   MN   39.4960     9.3780  370.0    0.0
+VTS   MN   42.6180    23.2350 1490.0    0.0
+WDD   MN   35.8670    14.5230   41.0    0.0
+HGN   NL   50.7640     5.9317  135.0    0.0
+BLO   NM   39.1719   -86.5222  246.0    0.0
+MPH   NM   35.1230   -89.9320   93.0    0.0
+PLAL  NM   34.9824   -88.0755  165.0    0.0
+SIUC  NM   37.7148   -89.2174  120.0    0.0
+SLM   NM   38.6361   -90.2364  186.0    0.0
+UALR  NM   34.7753   -92.3436  138.0    0.0
+UTMT  NM   36.3423   -88.6642  120.0    0.0
+BAG   PS   16.4108   120.5797 1507.0    0.0
+MCSJ  PS   24.2900   153.9780   10.0    0.0
+OGS   PS   27.0570   142.2030   20.0    0.0
+PATS  PS    6.8367   158.3152   10.0    0.0
+PSI   PS    2.6938    98.9237  987.0    0.0
+SYO   PS  -69.0067    39.5850   20.0    0.0
+TGY   PS   14.1000   120.9400    0.0    0.0
+TSK   PS   36.2108   140.1097  350.0    0.0
+ANPB  TW   25.1865   121.5202  825.0    0.0
+HWAB  TW   23.9800   121.6000    0.0    0.0
+KMNB  TW   24.4638   118.3884   43.0    0.0
+LYUB  TW   22.0017   121.5840   40.0    0.0
+MATB  TW   26.1515   119.9456   75.1    0.0
+NACB  TW   24.1738   121.5947  130.0    0.0
+SSLB  TW   23.7875   120.9540  450.0    0.0
+TATO  TW   24.9754   121.4881   53.0    0.0
+TDCB  TW   24.2574   121.2550 1280.0    0.0
+TPUB  TW   23.3005   120.6296  370.0    0.0
+TWGB  TW   22.8176   121.0799  195.0    0.0
+TWKB  TW   21.9406   120.8125   90.0    0.0
+WFSB  TW   25.0710   121.7810  100.0    0.0
+YULB  TW   23.3924   121.2971  294.7    0.0
+DBO   UO   43.1192  -123.2428  980.0    0.0
+EUO   UO   44.0294  -123.0689  160.0    0.0
+PIN   UO   43.8111  -120.8719 1860.0    0.0
+AAM   US   42.3012   -83.6567  172.0    0.0
+ACSO  US   40.2319   -82.9820  288.0    0.0
+AHID  US   42.7654  -111.1004 1960.0    0.0
+BINY  US   42.1993   -75.9861  498.0    0.0
+BLA   US   37.2113   -80.4210  634.0    0.0
+BMN   US   40.4315  -117.2218 1500.0    0.0
+BOZ   US   45.6470  -111.6296 1589.0    0.0
+BW06  US   42.7667  -109.5583 2224.0    0.0
+CBKS  US   38.8140   -99.7374  677.0    0.0
+CBM   US   46.9325   -68.1208  250.0    0.0
+CEH   US   35.8908   -79.0928  152.0    0.0
+DUG   US   40.1950  -112.8133 1477.0    0.0
+ELK   US   40.7448  -115.2388 2210.0    0.0
+EYMN  US   47.9462   -91.4950  475.0    0.0
+GOGA  US   33.4112   -83.4666  150.0    0.0
+GOL   US   39.7003  -105.3711 2359.0    0.0
+GWDE  US   38.8256   -75.6171   19.0    0.0
+HAWA  US   46.3925  -119.5326  364.0    0.0
+HLID  US   43.5625  -114.4138 1772.0    0.0
+HWUT  US   41.6069  -111.5652 1830.0    0.0
+ISCO  US   39.7997  -105.6134 2743.0    0.0
+JCT   US   30.4794   -99.8022  591.0    0.0
+JFWS  US   42.9143   -90.2481  335.0    0.0
+KNB   US   37.0166  -112.8224 1715.0    0.0
+LBNH  US   44.2401   -71.9259  367.0    0.0
+LKWY  US   44.5652  -110.4000 2424.0    0.0
+LSCT  US   41.6784   -73.2244  318.0    0.0
+LTX   US   29.3339  -103.6669 1013.0    0.0
+MCWV  US   39.6581   -79.8456  280.0    0.0
+MIAR  US   34.5454   -93.5765  207.0    0.0
+MNV   US   38.4328  -118.1531 1524.0    0.0
+MYNC  US   35.0739   -84.1279  550.0    0.0
+NCB   US   43.9708   -74.2236  500.0    0.0
+NEW   US   48.2633  -117.1200  760.0    0.0
+NHSC  US   33.1067   -80.1778   11.0    0.0
+OCWA  US   47.7489  -124.1781  671.0    0.0
+OXF   US   34.5118   -89.4092  101.0    0.0
+RSNY  US   44.5483   -74.5300  396.0    0.0
+RSSD  US   44.1204  -104.0362 2060.0    0.0
+TPNV  US   36.9488  -116.2495 1600.0    0.0
+WMOK  US   34.7379   -98.7810  486.0    0.0
+WUAZ  US   35.5169  -111.3739 1592.0    0.0
+WVOR  US   42.4340  -118.6367 1344.0    0.0
+YSNY  US   42.4758   -78.5375  628.0    0.0
+CHE   UW   45.3544  -122.9886  430.0    0.0
+DBO   UW   43.1192  -123.2428  980.0    0.0
+GNW   UW   47.5644  -122.8253  160.0    0.0
+HEBO  UW   45.2137  -123.7542  100.0    0.0
+LON   UW   46.7500  -121.8100  850.0    0.0
+LTY   UW   47.2559  -120.6648  970.0    0.0
+MEGW  UW   46.2659  -123.8773  100.0    0.0
+OFR   UW   47.9333  -124.3947  150.0    0.0
+OPC   UW   48.1003  -123.4116   90.0    0.0
+PIN   UW   43.8111  -120.8719 1860.0    0.0
+RWW   UW   46.9639  -123.5433   10.0    0.0
+SQM   UW   48.0775  -123.0456   30.0    0.0
+SSW   UW   46.9723  -123.4338  120.0    0.0
+TAKO  UW   43.7433  -124.0822  100.0    0.0
+TOLO  UW   44.6219  -123.9225  100.0    0.0
+TTW   UW   47.6946  -121.6889  540.0    0.0
+AZ01  XA   37.0430  -113.1280 1514.8    0.0
+AZ02  XA   37.0370  -113.3130 1066.8    0.0
+AZ03  XA   37.0270  -113.5760  868.6    0.0
+AZ04  XA   37.0270  -113.8680 1060.7    0.0
+AZ05  XA   37.1800  -114.1320 1133.8    0.0
+AZ06  XA   37.0730  -114.3420  957.0    0.0
+AZ07  XA   37.1310  -114.7130  987.5    0.0
+AZ08  XA   37.0800  -114.8420 1072.8    0.0
+AZ09  XA   37.2390  -115.1980 1094.2    0.0
+AZ10  XA   37.3300  -115.3100 1889.7    0.0
+MM01  XA   42.3175   -72.7117  122.0    0.0
+MM02  XA   42.1660   -73.7187  134.0    0.0
+MM03  XA   42.0388   -74.8462  670.5    0.0
+MM04  XA   41.8530   -76.1980  473.0    0.0
+MM05  XA   41.6530   -76.9220  701.0    0.0
+MM06  XA   41.3915   -78.1262  647.0    0.0
+MM07  XA   41.2571   -79.1350  518.0    0.0
+MM08  XA   41.1095   -80.0682  381.0    0.0
+MM09  XA   40.7911   -81.2056  357.0    0.0
+MM10  XA   40.6147   -82.3031  346.0    0.0
+MM11  XA   40.2214   -83.1947  283.0    0.0
+MM12  XA   40.0439   -84.3725  305.0    0.0
+MM13  XA   39.8317   -85.3114  337.0    0.0
+MM14  XA   39.5494   -86.3948  290.0    0.0
+MM15  XA   39.2945   -87.3135  190.6    0.0
+MM16  XA   38.9219   -88.3046  165.0    0.0
+MM17  XA   38.6694   -89.3255  143.8    0.0
+MM18  XA   38.5287   -90.5686  185.6    0.0
+MO18  XA   38.5144   -90.5644  161.0    0.0
+SA01  XA  -34.2945    19.2460  220.0    0.0
+SA02  XA  -33.7351    20.2663  500.0    0.0
+SA03  XA  -33.6619    21.3354  500.0    0.0
+SA04  XA  -32.8505    19.6206 1200.0    0.0
+SA05  XA  -32.6050    21.5346  800.0    0.0
+SA07  XA  -31.9776    20.2262 1277.0    0.0
+SA08  XA  -31.9103    22.0729 1387.0    0.0
+SA09  XA  -30.9221    22.9861 1200.0    0.0
+SA10  XA  -30.9724    23.9136 1400.0    0.0
+SA11  XA  -29.9650    20.9466 1066.0    0.0
+SA12  XA  -29.8486    22.2533 1125.0    0.0
+SA13  XA  -29.9788    23.1396 1047.0    0.0
+SA139 XA  -25.8519    26.2662 1600.0    0.0
+SA14  XA  -29.8682    24.0226 1200.0    0.0
+SA15  XA  -29.9038    25.0323 1400.0    0.0
+SA155 XA  -22.8786    28.3402  900.0    0.0
+SA16  XA  -28.9503    22.1951 1026.0    0.0
+SA169 XA  -22.2623    29.2134  618.0    0.0
+SA17  XA  -28.9321    23.2257 1249.0    0.0
+SA18  XA  -28.6328    24.3056 1102.0    0.0
+SA19  XA  -28.9056    24.8328 1200.0    0.0
+SA20  XA  -29.0221    26.1953 1400.0    0.0
+SA22  XA  -27.9662    22.0091 1076.0    0.0
+SA23  XA  -27.9304    23.4046 1612.0    0.0
+SA24  XA  -27.8833    24.2365 1244.0    0.0
+SA25  XA  -27.8459    25.1259 1253.0    0.0
+SA26  XA  -27.5456    26.1803 1300.0    0.0
+SA27  XA  -27.8625    27.2943 1400.0    0.0
+SA28  XA  -27.8982    28.0656 1600.0    0.0
+SA29  XA  -26.9317    23.0349 1120.0    0.0
+SA30  XA  -27.0715    24.1651 1361.0    0.0
+SA31  XA  -26.9952    25.0209 1348.0    0.0
+SA32  XA  -26.8655    26.2845 1380.0    0.0
+SA33  XA  -26.8986    27.1793 1400.0    0.0
+SA34  XA  -26.8000    28.1000 1500.0    0.0
+SA35  XA  -27.0183    29.0883 1600.0    0.0
+SA36  XA  -26.8771    30.1249 1600.0    0.0
+SA37  XA  -25.9705    23.7212 1142.0    0.0
+SA38  XA  -25.9334    25.0846 1219.0    0.0
+SA39  XA  -25.8952    26.1514 1545.0    0.0
+SA40  XA  -25.8981    27.1490 1512.0    0.0
+SA42  XA  -25.6650    29.2223 1500.0    0.0
+SA43  XA  -25.7868    30.0669 1800.0    0.0
+SA44  XA  -26.0321    30.9022 1000.0    0.0
+SA45  XA  -24.8792    26.1644 1015.0    0.0
+SA46  XA  -24.8382    27.1092 1037.0    0.0
+SA47  XA  -24.8469    28.1618 1153.0    0.0
+SA48  XA  -24.8948    29.2163 1000.0    0.0
+SA49  XA  -24.9597    30.3091    0.0    0.0
+SA50  XA  -23.8722    27.1662  976.0    0.0
+SA51  XA  -23.8628    28.1567 1233.0    0.0
+SA52  XA  -23.7983    28.8975 1321.0    0.0
+SA53  XA  -24.1134    29.3328 1300.0    0.0
+SA54  XA  -23.7288    30.6680  500.0    0.0
+SA55  XA  -22.9800    28.2981  918.0    0.0
+SA56  XA  -23.0059    29.0743  909.0    0.0
+SA57  XA  -22.9811    30.0202  787.0    0.0
+SA58  XA  -23.5179    31.3973  356.0    0.0
+SA59  XA  -24.8373    24.4640 1137.0    0.0
+SA60  XA  -23.8519    24.9594 1043.0    0.0
+SA61  XA  -23.9481    24.0220 1069.0    0.0
+SA62  XA  -24.8505    25.1350 1214.0    0.0
+SA63  XA  -23.6583    26.0820 1008.0    0.0
+SA64  XA  -22.9694    26.2017 1151.0    0.0
+SA65  XA  -22.8183    27.2218  907.0    0.0
+SA66  XA  -21.9005    26.3727 1057.0    0.0
+SA67  XA  -21.8859    27.2736  913.0    0.0
+SA68  XA  -21.9504    28.1878  737.0    0.0
+SA69  XA  -22.3048    29.2661  651.0    0.0
+SA70  XA  -21.0883    26.3352  990.0    0.0
+SA71  XA  -20.9258    27.1408 1072.0    0.0
+SA72  XA  -20.1430    28.6113 1337.0    0.0
+SA73  XA  -21.8537    30.2776  590.0    0.0
+SA74  XA  -21.9230    30.9357  487.0    0.0
+SA75  XA  -20.8601    28.9991  971.0    0.0
+SA76  XA  -20.6361    29.8464  978.0    0.0
+SA77  XA  -20.7557    30.9191  576.0    0.0
+SA78  XA  -19.4671    30.7723 1401.0    0.0
+SA79  XA  -20.0211    30.5173 1078.0    0.0
+SA80  XA  -19.9593    31.3179 1064.0    0.0
+SA81  XA  -30.9251    21.2681 1270.0    0.0
+SA82  XA  -30.9771    22.2466 1452.0    0.0
+ADO   CI   34.5505  -117.4339    0.0    0.0
+AGA   CI   33.6384  -116.4011    0.0    0.0
+ALP   CI   34.6871  -118.2995    0.0    0.0
+BAK   CI   35.3441  -119.1043    0.0    0.0
+BAR   CI   32.6800  -116.7220    0.0    0.0
+BBR   CI   34.2623  -116.9208    0.0    0.0
+BBS   CI   33.9214  -116.9809    0.0    0.0
+BC3   CI   33.6548  -115.4531    0.0    0.0
+BCC   CI   33.5751  -117.2612    0.0    0.0
+BEL   CI   34.0006  -115.9982    0.0    0.0
+BFS   CI   34.2370  -117.6582    0.0    0.0
+BKR   CI   35.2693  -116.0703    0.0    0.0
+BOR   CI   33.2682  -116.4172    0.0    0.0
+BRE   CI   33.8100  -117.9817    0.0    0.0
+BTC   CI   33.0126  -115.2199    0.0    0.0
+BTP   CI   34.6833  -118.5750    0.0    0.0
+CALA  CI   34.1430  -118.6270    0.0    0.0
+CALB  CI   34.1430  -118.6270    0.0    0.0
+CAP   CI   33.3885  -117.1905    0.0    0.0
+CCC   CI   35.5247  -117.3646    0.0    0.0
+CHF   CI   34.3334  -118.0260    0.0    0.0
+CHN   CI   33.9988  -117.6804    0.0    0.0
+CIA   CI   33.4020  -118.4152    0.0    0.0
+CIU   CI   33.4458  -118.4830    0.0    0.0
+CLC   CI   35.8158  -117.5975    0.0    0.0
+CLT   CI   34.0932  -117.3167    0.0    0.0
+COO   CI   33.8960  -118.2164    0.0    0.0
+CPP   CI   34.0602  -117.8090    0.0    0.0
+CTC   CI   33.6546  -115.9899    0.0    0.0
+CWC   CI   36.4400  -118.0800    0.0    0.0
+DAN   CI   34.6371  -115.3805    0.0    0.0
+DEV   CI   33.9350  -116.5770    0.0    0.0
+DGR   CI   33.6500  -117.0090    0.0    0.0
+DJJ   CI   34.1058  -118.4538    0.0    0.0
+DJJB  CI   34.1058  -118.4538    0.0    0.0
+DLA   CI   33.8482  -118.0962    0.0    0.0
+DPP   CI   32.9986  -116.9415    0.0    0.0
+DRC   CI   32.8054  -115.4465    0.0    0.0
+DVT   CI   32.6591  -116.1006    0.0    0.0
+EDW   CI   34.8830  -117.9911    0.0    0.0
+EML   CI   32.8913  -116.8460    0.0    0.0
+ERR   CI   33.1168  -115.8227    0.0    0.0
+FIG   CI   34.7321  -119.9841    0.0    0.0
+FMP   CI   33.7126  -118.2938    0.0    0.0
+FPC   CI   35.0820  -117.5827    0.0    0.0
+FUR   CI   36.4667  -116.8635    0.0    0.0
+GLA   CI   33.0510  -114.8280    0.0    0.0
+GOR   CI   33.1600  -117.2300    0.0    0.0
+GPO   CI   35.6490  -117.6620    0.0    0.0
+GR2   CI   34.1183  -118.2994    0.0    0.0
+GRA   CI   36.9833  -117.3592    0.0    0.0
+GSC   CI   35.3020  -116.8050    0.0    0.0
+HEC   CI   34.8294  -116.3350    0.0    0.0
+HLL   CI   34.1764  -118.3598    0.0    0.0
+ISA   CI   35.6630  -118.4730    0.0    0.0
+JCS   CI   33.0859  -116.5959    0.0    0.0
+JRC   CI   35.9825  -117.8081    0.0    0.0
+JVA   CI   34.3662  -116.6127    0.0    0.0
+LAF   CI   33.8693  -118.3311    0.0    0.0
+LCG   CI   34.0003  -118.3779    0.0    0.0
+LDF   CI   35.0781  -115.1096    0.0    0.0
+LFP   CI   34.3050  -118.4879    0.0    0.0
+LGB   CI   33.9756  -118.1491    0.0    0.0
+LGU   CI   34.1082  -119.0659    0.0    0.0
+LKL   CI   34.6160  -117.8245    0.0    0.0
+LLS   CI   33.6847  -117.9429    0.0    0.0
+LRL   CI   35.4794  -117.6821    0.0    0.0
+LTP   CI   33.8811  -118.1757    0.0    0.0
+LUG   CI   34.3661  -117.3658    0.0    0.0
+MAG   CI   35.3616  -118.9228    0.0    0.0
+MCT   CI   34.2264  -116.0408    0.0    0.0
+MGE   CI   33.8184  -116.3687    0.0    0.0
+MIK   CI   34.1370  -118.1260    0.0    0.0
+MLA   CI   37.6310  -118.8340    0.0    0.0
+MLAC  CI   37.6310  -118.8340    0.0    0.0
+MLS   CI   34.0046  -117.5609    0.0    0.0
+MOP   CI   34.2808  -118.9049    0.0    0.0
+MPM   CI   36.0580  -117.4890    0.0    0.0
+MSJ   CI   33.8084  -116.9680    0.0    0.0
+MTL   CI   34.2688  -118.2374    0.0    0.0
+MTP   CI   35.4848  -115.5533    0.0    0.0
+MWC   CI   34.2233  -118.0583    0.0    0.0
+NEE   CI   34.8230  -114.5960    0.0    0.0
+NSS   CI   33.5561  -115.9465    0.0    0.0
+OLI   CI   33.9455  -117.9237    0.0    0.0
+OLP   CI   32.6077  -116.9304    0.0    0.0
+OSI   CI   34.6150  -118.7240    0.0    0.0
+PAS   CI   34.1484  -118.1711  295.0    0.0
+PDE   CI   34.4421  -118.5823    0.0    0.0
+PDR   CI   33.9627  -118.4370    0.0    0.0
+PDU   CI   34.1208  -117.6379    0.0    0.0
+PFO   CI   33.6120  -116.4590    0.0    0.0
+PHL   CI   35.4082  -120.5455    0.0    0.0
+PLC   CI   33.8243  -116.5121    0.0    0.0
+PLM   CI   33.3537  -116.8627    0.0    0.0
+PLS   CI   33.7953  -117.6091    0.0    0.0
+QUG   CI   34.3959  -118.4985    0.0    0.0
+RCT   CI   36.3052  -119.2438    0.0    0.0
+RIN   CI   34.2820  -118.4792    0.0    0.0
+RIO   CI   34.1047  -117.9796    0.0    0.0
+RPV   CI   33.7440  -118.4030    0.0    0.0
+RRX   CI   34.9000  -117.0300    0.0    0.0
+RSS   CI   33.9733  -117.3267    0.0    0.0
+RUS   CI   34.0505  -118.0799    0.0    0.0
+RVR   CI   33.9935  -117.3755    0.0    0.0
+SAL   CI   33.2799  -115.9862    0.0    0.0
+SBC   CI   34.4420  -119.7130    0.0    0.0
+SBPX  CI   34.2322  -117.2348    0.0    0.0
+SCI   CI   32.9800  -118.5467    0.0    0.0
+SDD   CI   33.5531  -117.6618    0.0    0.0
+SDR   CI   32.6080  -116.9290    0.0    0.0
+SES   CI   34.4367  -119.1382    0.0    0.0
+SHO   CI   35.9000  -116.2760    0.0    0.0
+SLA   CI   35.8908  -117.2834    0.0    0.0
+SMM   CI   35.3142  -119.9958    0.0    0.0
+SMS   CI   34.0147  -118.4562    0.0    0.0
+SMTC  CI   32.9490  -115.7200    0.0    0.0
+SNCC  CI   33.2480  -119.5240    0.0    0.0
+SOT   CI   34.4165  -118.4493    0.0    0.0
+SPF   CI   34.0593  -118.6461    0.0    0.0
+SPG   CI   36.1356  -118.8112    0.0    0.0
+SRN   CI   33.8284  -117.7894    0.0    0.0
+SSM   CI   35.3142  -119.9958    0.0    0.0
+SSN   CI   33.2480  -119.5240    0.0    0.0
+SSW   CI   33.1766  -115.6024    0.0    0.0
+STC   CI   34.3027  -119.1870    0.0    0.0
+STG   CI   33.6640  -117.7686    0.0    0.0
+STS   CI   33.7902  -118.1985    0.0    0.0
+SVD   CI   34.1040  -117.0970    0.0    0.0
+SWS   CI   32.9448  -115.8000    0.0    0.0
+SYP   CI   34.5278  -119.9783    0.0    0.0
+TA2   CI   34.3820  -117.6781    0.0    0.0
+TEH   CI   35.2913  -118.4208    0.0    0.0
+THX   CI   33.6348  -116.1640    0.0    0.0
+TIN   CI   37.0542  -118.2301    0.0    0.0
+TOV   CI   34.1560  -118.8190    0.0    0.0
+USC   CI   34.0190  -118.2850    0.0    0.0
+VCS   CI   34.4900  -118.1180    0.0    0.0
+VES   CI   35.8409  -119.0847    0.0    0.0
+VTV   CI   34.5670  -117.3330    0.0    0.0
+WES   CI   32.7590  -115.7315    0.0    0.0
+WGR   CI   34.5108  -119.2741    0.0    0.0
+WLT   CI   34.0097  -117.9508    0.0    0.0
+WNS   CI   34.1150  -118.3800    0.0    0.0
+WSS   CI   34.1717  -118.6497    0.0    0.0
+WTT   CI   33.9490  -118.2553    0.0    0.0
+BCAO  GB    4.4336    18.5355    0.0    0.0
+BDF   GB  -15.6639   -47.9033    0.0    0.0
+BGY   GB   44.8026    20.5158    0.0    0.0
+BJI   GB   40.0403   116.1750    0.0    0.0
+BNI   GB   45.0520     6.6780    0.0    0.0
+BOCO  GB    4.6167   -74.1167    0.0    0.0
+BTDF  GB    1.3608   103.7729    0.0    0.0
+COL   GB   64.8999  -147.7932    0.0    0.0
+DPC   GB   50.3583    16.4111    0.0    0.0
+DSB   GB   53.2452    -6.3762    0.0    0.0
+GDH   GB   69.2500   -53.5333    0.0    0.0
+GFA   GB   34.5000     8.5000    0.0    0.0
+HON   GB   21.3217  -158.0083    0.0    0.0
+LON   GB   46.7500  -121.8100    0.0    0.0
+MSKU  GB   -1.6557    13.6116    0.0    0.0
+NAI   GB   -1.2739    36.8037    0.0    0.0
+NOU   GB  -22.1010   166.3030    0.0    0.0
+PFOT  GB   33.6090  -116.4553    0.0    0.0
+SCP   GB   40.7950   -77.8650    0.0    0.0
+SLR   GB  -25.7349    28.2816    0.0    0.0
+TOL   GB   39.8814    -4.0485    0.0    0.0
+ZOBO  GB  -16.2700   -68.1250    0.0    0.0
+DGAR  II   -7.4121    72.4525    1.0    2.0
+FUNA  IU    8.5300   179.2000   -1.0    1.0
+TRIS  IU  -37.0578   -12.3159   -2.0    2.0

Modified: cs/portal/trunk/seismo/SeismoWebPortal/forms.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/forms.py	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/forms.py	2008-04-03 02:02:25 UTC (rev 11740)
@@ -5,6 +5,7 @@
 from django.core import validators
 from models import Specfem3DGlobeMesh, Event, DataSource, Region, Source
 from models import UserInfo, Invite, Folder
+from models import EventWorkspace, StationList
 from cmt import CMTSolution
 
 
@@ -313,15 +314,25 @@
         del args['when_time']
         source = Source.objects.create(**args)
 
-        return event
+        # Create a new workspace for this event.
+        workspace = EventWorkspace(event = event,
+                                   stations = StationList.favorite(),
+                                   )
+        workspace.save()
+        
+        workspace.fsNode.name = source.eventName
+        workspace.fsNode.save()
 
+        return workspace
 
+
 class SingleSourceEventChangeManipulator(Source.ChangeManipulator):
 
-    def __init__(self, event):
-        self.event = event
+    def __init__(self, workspace):
+        self.workspace = workspace
+        self.event = workspace.event
         
-        object_id = event.singleSource.id
+        object_id = self.event.singleSource.id
         super(SingleSourceEventChangeManipulator, self).__init__(object_id)
         
         # replace generic fields with custom fields
@@ -352,7 +363,7 @@
         new_data['event'] = event.id
         super(SingleSourceEventChangeManipulator, self).save(new_data)
         
-        return event
+        return self.workspace
 
 
 class UploadEventManipulator(forms.Manipulator):
@@ -381,17 +392,26 @@
         cmtSolution = new_data['cmtsolution']['content']
         cmtSolutionList = CMTSolution.parse(cmtSolution)
 
+        filename = new_data['cmtsolution']['filename']
+
         # Create the new event.
-        event = Event.objects.create()
-        event.fsNode.name = new_data['cmtsolution']['filename']
-        event.fsNode.save()
+        event = Event.objects.create(name = filename)
 
         # Add each source.
         for cmtSolution in cmtSolutionList:
             Source.saveSource(event, cmtSolution)
 
-        return event
+        # Create a new workspace for this event.
+        workspace = EventWorkspace(event = event,
+                                   stations = StationList.favorite(),
+                                   )
+        workspace.save()
+        
+        workspace.fsNode.name = filename
+        workspace.fsNode.save()
 
+        return workspace
 
 
+
 # end of file

Modified: cs/portal/trunk/seismo/SeismoWebPortal/gui.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/gui.py	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/gui.py	2008-04-03 02:02:25 UTC (rev 11740)
@@ -218,9 +218,9 @@
 
 class EventViewer(Navigator):
     
-    def __init__(self, url, title, root, event):
+    def __init__(self, url, title, root, workspace):
         Navigator.__init__(self, url, title, root)
-        self.event = event
+        self.workspace = workspace
 
     def icon(self):
-        return self.event.icon()
+        return self.workspace.icon()

Added: cs/portal/trunk/seismo/SeismoWebPortal/management.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/management.py	                        (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/management.py	2008-04-03 02:02:25 UTC (rev 11740)
@@ -0,0 +1,115 @@
+
+from django.dispatch import dispatcher
+from django.db.models import signals
+import models
+
+
+def createSpecfem3DGlobeModels():
+    for type, name in models.MODEL_TYPES:
+        model = models.Specfem3DGlobeModel.objects.create(
+            type = type,
+            oceans = True,
+            gravity = True,
+            attenuation = True,
+            topography = True,
+            rotation = True,
+            ellipticity = True)
+        model.fsNode.name = name
+        model.fsNode.save()
+        print "Adding Specfem3DGlobeModel '%s'" % model
+    return
+
+
+def createSpecfem3DGlobeMeshes():
+    
+    m = {}
+    
+    # Iterate through every mesh that could possibly be created using
+    # the global mesh form.  Partition them according to 'Nex', which
+    # determines the shortest period (which is all anyone really cares
+    # about).
+    for nproc in xrange(1, 10):
+        for nex_c in xrange(1, 10):
+            nex = 8 * nex_c * nproc
+            l = m.setdefault(nex, [])
+            l.append((nex_c, nproc))
+
+    # Generate every possible global mesh...
+    nexs = m.keys()
+    nexs.sort()
+    nexs.reverse()
+    lastSP = 0
+    for nex in nexs:
+        # ...rejecting those below Nex = 160 (27s)...
+        if nex < 160:
+            break
+        # ...selecting those variants that use the fewest processors...
+        nex_c, nproc = m[nex][0]
+        mesh = models.Specfem3DGlobeMesh(
+            nchunks = 6,
+            nproc_xi = nproc,
+            nproc_eta = nproc,
+            nex_xi_c = nex_c,
+            nex_eta_c = nex_c,
+            angular_width_eta = 90.0,
+            angular_width_xi = 90.0,
+            center_latitude = 0.0,
+            center_longitude = 0.0,
+            gamma_rotation_azimuth = 0.0,
+            )
+        sp = "%.0f" % mesh.shortestPeriod()
+        # ...rejecting those that look the same when rounded to the
+        # nearest second.
+        if sp == lastSP:
+            continue
+        mesh.save()
+        lastSP = sp
+        mesh.fsNode.name = "global %ss Nex=%d" % (sp, mesh.nex_xi())
+        mesh.fsNode.save()
+        print "Adding Specfem3DGlobeMesh '%s'" % mesh
+
+    return
+
+
+def createStationList():
+    from views import parse_station_list
+    from os.path import dirname, join
+    
+    filename = "STATIONS_FULL_758"
+    pathname = join(dirname(__file__), "data", filename)
+
+    print "Adding StationList '%s'" % filename
+
+    stationList = models.StationList.objects.create()
+    stationList.fsNode.name = filename
+    stationList.fsNode.save()
+        
+    stream = open(pathname, 'r')
+    parse_station_list(stationList, stream)
+
+    return
+
+
+def createSpecfem3DGlobeParameters():
+    # Create a parameter set for every mesh/model combination.
+    for model in models.Specfem3DGlobeModel.objects.all():
+        for mesh in models.Specfem3DGlobeMesh.objects.all():
+            parameters = models.Specfem3DGlobeParameters.objects.create(
+                model = model,
+                mesh = mesh,
+                receivers_can_be_buried = True,
+                )
+            parameters.fsNode.name = str(model) + ' ' + str(mesh)
+            parameters.fsNode.save()
+            print "Adding Specfem3DGlobeParameters '%s'" % parameters
+    return
+
+
+def createDefaults(app, created_models):
+    createSpecfem3DGlobeModels()
+    createSpecfem3DGlobeMeshes()
+    createSpecfem3DGlobeParameters()
+    createStationList()
+
+
+dispatcher.connect(createDefaults, sender=models, signal=signals.post_syncdb)

Modified: cs/portal/trunk/seismo/SeismoWebPortal/middleware.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/middleware.py	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/middleware.py	2008-04-03 02:02:25 UTC (rev 11740)
@@ -16,10 +16,8 @@
 
 _thread_locals = local()
 
-class You_need_to_add_ThreadLocals_to_MIDDLEWARE_CLASSES(object): pass
-
 def get_current_user():
-    return getattr(_thread_locals, 'user', You_need_to_add_ThreadLocals_to_MIDDLEWARE_CLASSES())
+    return getattr(_thread_locals, 'user', None)
 
 # Add this to MIDDLEWARE_CLASSES.
 class ThreadLocals(object):

Modified: cs/portal/trunk/seismo/SeismoWebPortal/models.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/models.py	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/models.py	2008-04-03 02:02:25 UTC (rev 11740)
@@ -41,6 +41,10 @@
     @classmethod
     def newNode(cls, contents):
         owner = get_current_user()
+        if owner is None:
+            parent = Folder.sharedFolder().fsNode
+        else:
+            parent = Folder.homeFolder(owner).fsNode
         name = "untitled"
         number = 1
         while True:
@@ -51,7 +55,7 @@
             name = "untitled %d" % number
         fsNode = FSNode(name = name,
                         owner = owner,
-                        parent = Folder.homeFolder(owner).fsNode,
+                        parent = parent,
                         contents = contents)
         fsNode.save()
         return fsNode
@@ -71,6 +75,13 @@
         return userInfo.trash
 
     @classmethod
+    def sharedFolder(cls):
+        q = cls.objects.filter(fsNode__owner__isnull = True)
+        if q.count() == 0:
+            return cls.newFolder("Shared", None)
+        return q.get()
+
+    @classmethod
     def newFolder(cls, name, owner):
         folder = Folder()
         folder.save()
@@ -105,8 +116,8 @@
 
 class Event(models.Model):
 
-    fsNode = models.ForeignKey(FSNode, null=True)
-    
+    name = models.CharField(maxlength=100)
+
     def _getSingleSource(self):
         if not hasattr(self, '_singleSource'):
             if self.source_set.count() == 1:
@@ -119,21 +130,12 @@
     def sources(self):
         return self.source_set.order_by('timeShift')
 
-    def __str__(self): return self.fsNode.name
+    def __str__(self): return self.name
 
     def icon(self):
         ss = self.singleSource
         return ss and ss.beachball() or '<img class="icon" src="/specfem3dglobe/icons/document.gif">'
 
-    def save(self):
-        super(Event, self).save()
-        if self.fsNode is None:
-            self.fsNode = FSNode.newNode(self)
-            super(Event, self).save()
-        else:
-            self.fsNode.save() # touch
-        return
-
     def delete(self):
         self.source_set.all().delete()
         super(Event, self).delete()
@@ -286,7 +288,12 @@
         self.station_set.all().delete()
         super(StationList, self).delete()
 
+    @classmethod
+    def favorite(self):
+        # NYI
+        return StationList.objects.get()
 
+
 class Station(models.Model):
     
     stationList = models.ForeignKey(StationList)
@@ -447,9 +454,6 @@
     movie_surface = models.BooleanField(core=True)
     movie_volume = models.BooleanField(core=True)
 
-    # STATIONS
-    stations = models.ForeignKey(StationList, limit_choices_to = userFSChoices)
-
     # hdur_movie:
     hdur_movie = models.FloatField(max_digits=19, decimal_places=10, core=True, default=0.0, blank=True)
     # absorbing_conditions: set to true for regional, and false for global
@@ -594,7 +598,6 @@
 
     catalog = models.ForeignKey(MineosModeCatalog, limit_choices_to = userFSChoices)
     model = models.ForeignKey(MineosModel, limit_choices_to = userFSChoices)
-    stations = models.ForeignKey(StationList, limit_choices_to = userFSChoices)
 
     # jcom
     radial = models.BooleanField(default=True)
@@ -631,6 +634,38 @@
 
 
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# Event Workspaces
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+class EventWorkspace(models.Model):
+
+    fsNode = models.ForeignKey(FSNode, null=True)
+
+    event = models.ForeignKey(Event)
+    stations = models.ForeignKey(StationList, limit_choices_to = userFSChoices)
+    record_length = models.FloatField(max_digits=19, decimal_places=10, core=True, default=20.0,
+                                      validator_list=[isValidRecordLength])
+
+    follow = dict(fsNode = False,
+                  event = False)
+    
+    def __str__(self): return self.fsNode.name
+
+    def icon(self):
+        return self.event.icon()
+
+    def save(self):
+        super(EventWorkspace, self).save()
+        if self.fsNode is None:
+            self.fsNode = FSNode.newNode(self)
+            super(EventWorkspace, self).save()
+        else:
+            self.fsNode.save() # touch
+        return
+
+
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 # Status
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

Modified: cs/portal/trunk/seismo/SeismoWebPortal/sql/stationnetwork.sql
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/sql/stationnetwork.sql	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/sql/stationnetwork.sql	2008-04-03 02:02:25 UTC (rev 11740)
@@ -8,7 +8,7 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ALQ', 'USGS Albuquerque Seismological Laboratory, Albuquerque, New Mexico, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ANZA', 'Anza Seismic Network, IGPP, UC San Diego, La Jolla, Calif, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ARO', 'Observatoire Ghysique d''Arta, Djibouti');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('AS', 'Modified High Gain Long Period Network (ASRO), Albuquerque, USA');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'Modified High Gain Long Period Network (ASRO), Albuquerque, USA' WHERE code = 'AS';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ASRS', 'GSRAS Siberian Branch, Altay-Sayan Reg. Seis. Ctr., Novosibirsk, Russia');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ATH', 'National Observatory of Athens, Greece');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ATL', 'Georgia Institute of Technology, Atlanta, USA');
@@ -28,7 +28,7 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('BHKY', 'University of Kentucky, Lexington, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('BHL', 'Conseil National de la Recherche Scientifique, Beirut, Lebanon');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('BJI', 'Institute of Geophysics, China Earthquake Administration, Beijing');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('BK', 'Berkeley Digital Seismograph Network, California, USA');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'Berkeley Digital Seismograph Network, California, USA' WHERE code = 'BK';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('BKK', 'Meteorological Department, Bangkok, Thailand');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('BKN', 'Procurement Executive, Ministry of Defence, Blacknest, England, UK');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('BLA', 'Virginia Polytechnic Institute and State University, Blacksburg, USA');
@@ -54,7 +54,7 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CAN', 'Australian National University, Canberra, ACT, Australia');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CAR', 'FUNVISIS, Caracas, Venezuela');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CAT', 'Istituto Scienze della Terra, Catania, Italy');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CD', 'China Digital Broadband Seismic Network (CDSN), Beijing, China');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'China Digital Broadband Seismic Network (CDSN), Beijing, China' WHERE code = 'CD';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CDMG', 'California Division of Mines and Geology, Sacramento, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CDPJ', 'Nat. Research Ctr for Disaster Prevention, Ibaraki-ken, Japan--now NIED');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CDR', 'Commissariat a l''Energie Atomique (CEA), Fontenay aux Roses, France');
@@ -66,7 +66,7 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CIG', 'Cen. de Investigaciones Geotecnicas, San Salvador, El Salvador (closed)');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CLE', 'John Carroll University, Cleveland, Ohio, USA (closed)');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CLTN', 'GSC Charlevoix Local Telemetered Network, Ottawa, Canada');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CN', 'Canadian National Seismic Network (CNSN) BB stations, Ottawa, Canada');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'Canadian National Seismic Network (CNSN) BB stations, Ottawa, Canada' WHERE code = 'CN';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CNRM', 'Centre National de la Recherche Scient. et Tech., Rabat, Morocco');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('COR', 'College of Oceanography, Oregon State University, Corvallis, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('CRT', 'Instituto Andaluz de Geofca, Universidad de Granada, Spain');
@@ -86,7 +86,7 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('DSIT', 'State Water Works Division (DSI), Ankara, Turkey');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('DTM', 'Carnegie Institution of Washington, Washington DC, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('DUKE', 'Duke Power Company, South Carolina, USA');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('DW', 'Digital Worldwide Std. Seismograph Network (DWSSN), Albuquerque, USA');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'Digital Worldwide Std. Seismograph Network (DWSSN), Albuquerque, USA' WHERE code = 'DW';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ECTN', 'GSC Eastern Canada Telemetered Network, Ottawa, Canada');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ECX', 'RESNOM, CICESE, Ensenada, Baja California, Mexico');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('EDM', 'University of Alberta, Edmonton, Canada');
@@ -106,7 +106,7 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GAR', 'Complex Seismological Expedition, Garm, Tajikistan');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GBZT', 'TUBITAK, Marmara Research Center, Gebze, Turkey');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GCG', 'INSIVUMEH, Guatemala City, Guatemala');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GE', 'GEOFON (GeoForschungsNetz) Program, Potsdam, Germany');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'GEOFON (GeoForschungsNetz) Program, Potsdam, Germany' WHERE code = 'GE';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GEN', 'Dipart. Studio del Territorio e Risorse, Universiti Genova, Italy');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GEOS', 'Programme GEOSCOPE, Paris, France');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GEOT', 'Teledyne Geotech Corporation, Garland, Texas, USA');
@@ -115,11 +115,11 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GII', 'Geophysical Institute of Israel, Lod, Israel');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GOL', 'Geophysics Department, Colorado School of Mines, Golden, Colorado, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GOM', 'Observatoire Volcanologique de Goma, Goma, Dem. Republic of the Congo');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GR', 'German Regional Seismic Network (GRSN), Hannover, Germany');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'German Regional Seismic Network (GRSN), Hannover, Germany' WHERE code = 'GR';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GRF', 'BGR, Zentralobservatorium Grnberg, Erlangen, Germany');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GRN', 'Lab. de Ghysique Interne et de Tectonophysique, Grenoble, France');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GSDM', 'Geological Survey Department of Malawi, Zomba, Malawi');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GT', 'Global Telemetered Seismic Network (GTSN), Albuquerque, USA');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'Global Telemetered Seismic Network (GTSN), Albuquerque, USA' WHERE code = 'GT';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GUC', 'Departamento de Geofca, Universidad de Chile, Santiago, Chile');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('GUV', 'CVG Electrificacion del CaronEDELCA), Guri, Venezuela');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('HACU', 'Hacettepe University, Ankara, Turkey');
@@ -137,12 +137,12 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('HSS', 'Inst. of Seismology and Volcanology, Hokkaido Univ., Sapporo, Japan');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('HVO', 'USGS Hawaiian Volcano Observatory, Hawaii, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('HYB', 'National Geophysical Research Institute, Hyderabad, India');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('IC', 'IRIS/USGS China Digital Broadband Seismic Network, Beijing, China');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'IRIS/USGS China Digital Broadband Seismic Network, Beijing, China' WHERE code = 'IC';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ICE', 'Instituto Costariccense de Electricidad, San JosCosta Rica');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ID', 'Project IDA (Intl. Deployment of Accelerometers), San Diego, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('IGIL', 'Inst. Geofco do Infante D. Luis, Univ. de Lisboa, Lisbon, Portugal');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('IGSN', 'IRIS Global Seismograph Network miscellaneous stations, Seattle, USA');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('II', 'IRIS/IDA Global Seismograph Network, Seattle and San Diego, USA');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'IRIS/IDA Global Seismograph Network, Seattle and San Diego, USA' WHERE code = 'II';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('IIM', 'Instituto de Ingenier UNAM, Mexico City, Mexico');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('INDR', 'Inst. Nacional de Recursos Hidraulicos, Santo Domingo, Dominican Rep.');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('INEL', 'Idaho Nat. Engineering and Environmental Lab., Idaho Falls, Idaho, USA');
@@ -156,7 +156,7 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ISK', 'Kandilli Observatory and Earthquake Research Inst., Istanbul, Turkey');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('IST', 'Istanbul Technical University, Maslak, Istanbul, Turkey');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('ISTP', 'Instituto Superior Tecnico, Lisbon, Portugal');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('IU', 'IRIS/USGS Global Seismograph Network, Seattle and Albuquerque, USA');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'IRIS/USGS Global Seismograph Network, Seattle and Albuquerque, USA' WHERE code = 'IU';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('JCK', 'Geologisches Landesamt Nordrhein-Westfalen, Krefeld, Germany');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('JEN', 'Inst. fwissenschaften, Friedrich-Schiller-Univ., Jena, Germany');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('JHI', 'Regional Research Laboratory, Jorhat, India');
@@ -204,7 +204,7 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('MERI', 'Maharashtra Engineering Research Institute, Nashik, Maharashtra, India');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('MES', 'Istituto Geofisico e Geodetico, Messina, Italy');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('MEX', 'RESMAC, IIMAS-UNAM, Mexico City, Mexico (now part of UNM network)');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('MN', 'Mediterranean Very Broadband Seismograph Network (MedNet), Rome, Italy');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'Mediterranean Very Broadband Seismograph Network (MedNet), Rome, Italy' WHERE code = 'MN';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('MNLO', 'USGS National Center for Earthquake Research, Menlo Park, Calif, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('MNM', 'University of Minnesota, Minneapolis, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('MOLD', 'Institute of Geophysics and Geology, Chisinau, Moldova');
@@ -258,7 +258,7 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('PPT', 'Laboratoire de Ghysique, Papeete, French Polynesia');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('PRE', 'Council for Geoscience, Pretoria, South Africa');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('PRT', 'Osservatorio San Domenico, Prato, Italy');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('PS', 'Ocean Hemisphere Project (formerly POSEIDON), Tokyo, Japan');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'Ocean Hemisphere Project (formerly POSEIDON), Tokyo, Japan' WHERE code = 'PS';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('PSNT', 'Public Seismic Network - PSN (homepage: www.seismicnet.com)');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('PTN', 'State University of New York, Potsdam, New York, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('QCP', 'Manila Observatory, Ateneo de Manila University, Manila, Philippines');
@@ -303,7 +303,7 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('SOF', 'Section of Seismology, Bulgarian Academy of Sciences, Sofia, Bulgaria');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('SORS', 'Republic Hydrometeorological Institute, Banja Luka, Bosnia-Herzegovina');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('SPGM', 'Service de Physique du Globe, Rabat Agdal, Morocco');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('SR', 'Seismic Research Observatory Network (SRO), Albuquerque, USA');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'Seismic Research Observatory Network (SRO), Albuquerque, USA' WHERE code = 'SR';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('SRPD', 'Savannah River Laboratory, Aiken, South Carolina, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('SSNC', 'Centro Nacional de Investigaciones Sismolas, Santiago de Cuba, Cuba');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('SSO', 'Osservatorio Geofisico Sperimentale, Macerata, Italy');
@@ -326,10 +326,10 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('TRI', 'Ist. Nazle. di Oceanografia e di Geofisica Sperimentale, Trieste, Italy');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('TRKM', 'Institute of Seismology, Turkmenistan Academy of Science, Ashgabat');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('TRN', 'University of the West Indies, St. Augustine, Trinidad');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('TS', 'TERRAscope Network, Pasadena, USA');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'TERRAscope Network, Pasadena, USA' WHERE code = 'TS';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('TUL', 'Oklahoma Geological Survey, Leonard, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('TVA', 'Tennessee Valley Authority, Knoxville, Tennessee, USA');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('TW', 'Broadband Array in Taiwan for Seismology (BATS), Taipei, Taiwan');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'Broadband Array in Taiwan for Seismology (BATS), Taipei, Taiwan' WHERE code = 'TW';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('TZN', 'University of Dar es Salaam, Tanzania');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('UAV', 'Laboratorio de Geofca, Universidad de los Andes, Mda, Venezuela');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('UBC', 'University of British Columbia, Vancouver, B.C., Canada');
@@ -343,7 +343,7 @@
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('UPA', 'Instituto de Geociencias, Universidad de PanamPanama');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('UPP', 'Seismological Institute, Uppsala, Sweden');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('URS', 'Kochi University, Kochi, Japan');
-INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('US', 'United States National Seismic Network (USNSN), Golden USA');
+UPDATE SeismoWebPortal_stationnetwork SET name = 'United States National Seismic Network (USNSN), Golden USA' WHERE code = 'US';
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('USAF', 'US Air Force Technical Applications Center, Melbourne, Florida, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('USAV', 'USGS Alaska Volcano Observatory, Anchorage, USA');
 INSERT INTO SeismoWebPortal_stationnetwork (code, name) VALUES ('USBR', 'US Bureau of Reclamation, Denver, Colorado, USA');

Added: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/eventworkspace_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/eventworkspace_form.html	                        (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/eventworkspace_form.html	2008-04-03 02:02:25 UTC (rev 11740)
@@ -0,0 +1,30 @@
+
+<h2>settings</h2>
+
+<form method="post" action="{{ 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_stations" class=before>station list</label>
+        {{ form.stations }}
+        {% if form.stations.errors %}<span class=error>{{ form.stations.errors|join:", " }}</span>{% endif %}
+    </div>
+
+    <div>
+        <label for="id_record_length" class=before>record length</label>
+        {{ form.record_length }} minutes
+        {% if form.record_length.errors %}<span class=error>{{ form.record_length.errors|join:", " }}</span>{% endif %}
+        {% if help_visible %}<span class=help>Choose the desired record length of the synthetic seismograms (in minutes). This controls the length of the numerical simulation, i.e., twice the record length requires twice as much CPU time. This must be 100 minutes or less for simulations run via the web.</span>{% endif %}
+    </div>
+
+    <div><input class=submit type="submit" name="save" value="Save" />
+    </div>
+
+    </div> <!-- tab30ex -->
+
+</form>

Copied: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/folder.html (from rev 11624, cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/home.html)
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/folder.html	                        (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/folder.html	2008-04-03 02:02:25 UTC (rev 11740)
@@ -0,0 +1,8 @@
+
+<h2>{{ name }}</h2>
+
+<div class=icon>
+{% for item in items %}
+    <table><tr><td><a href="{{item.url}}">{{ item.icon }}</a></td></tr><tr><td><a href="{{item.url}}">{{ item.name }}</a></td></tr></table>
+{% endfor %}
+</ul>

Deleted: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/home.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/home.html	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/home.html	2008-04-03 02:02:25 UTC (rev 11740)
@@ -1,8 +0,0 @@
-
-<h2>Home</h2>
-
-<div class=icon>
-{% for item in folder %}
-    <table><tr><td><a href="{{item.url}}">{{ item.icon }}</a></td></tr><tr><td><a href="{{item.url}}">{{ item.name }}</a></td></tr></table>
-{% endfor %}
-</ul>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html	2008-04-03 02:02:25 UTC (rev 11740)
@@ -21,12 +21,6 @@
         {% if form.model.errors %}<span class=error>{{ form.model.errors|join:", " }}</span>{% endif %}
     </div>
 
-    <div>
-        <label for="id_stations" class=before>station list</label>
-        {{ form.stations }}
-        {% if form.stations.errors %}<span class=error>{{ form.stations.errors|join:", " }}</span>{% endif %}
-    </div>
-
     </div> <!-- tab30ex -->
 
     <fieldset><legend>oscillations</legend>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_detail.html	2008-04-03 02:02:25 UTC (rev 11740)
@@ -3,25 +3,12 @@
 
 <div class=properties>
 
-    <div class=box>
-    <h3>general</h3>
-
     <dl>
         <dt>type</dt><dd>{% ifequal object.mesh.nchunks 6 %}global{% else %}regional{% endifequal %}</dd>
         <dt>mesh</dt><dd><a href="../../meshes/{{ object.mesh.id }}/">{{ object.mesh }}</a></dd>
         <dt>model</dt><dd><a href="../../models/{{ object.model.id }}/">{{ object.model }}</a></dd>
-        <dt>record length</dt><dd>{{ object.record_length }} minutes</dd>
-    </dl>
-    </div>
-
-    <div class=box>
-    <h3>stations</h3>
-
-    <dl>
-        <dt>station list</dt><dd><a href="../../../stations/{{ object.stations.id }}/">{{ object.stations }}</a></dd>
         <dt>receivers at depth</dt><dd>{{ object.receivers_can_be_buried }}</dd>
     </dl>
-    </div>
 
     {% if 0 %}
     <div class=box>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html	2008-04-03 02:02:25 UTC (rev 11740)
@@ -24,12 +24,6 @@
     </div>
 
 
-    <div>
-        <label for="id_stations" class=before>station list</label>
-        {{ form.stations }}
-        {% if form.stations.errors %}<span class=error>{{ form.stations.errors|join:", " }}</span>{% endif %}
-    </div>
-
     <div class=checkbox>
         {{ form.receivers_can_be_buried }}
         <label for="id_receivers_can_be_buried" class=after>receivers at depth</label>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dgloberequest_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dgloberequest_form.html	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dgloberequest_form.html	2008-04-03 02:02:25 UTC (rev 11740)
@@ -8,11 +8,3 @@
     {% if help_visible %}
     <dl class=help><dt>zero half duration</dt><dd>For point-source simulations, we recommend setting the source half-duration parameter <code>half duration</code> equal to zero, which corresponds to simulating a step source-time function, i.e., a moment-rate function that is a delta function. If <code>half duration</code> is not set to zero, the code will use a Gaussian (i.e., a signal with a shape similar to a 'smoothed triangle', as explained in Komatitsch and Tromp [2002a]) source-time function with half-width <code>half duration</code>. We prefer to run the solver with <code>half duration</code> set to zero and convolve the resulting synthetic seismograms in post-processing after the run, because this way it is easy to use a variety of source-time functions. Komatitsch and Tromp [2002a] determined that the noise generated in the simulation by using a step source time function may be safely filtered out afterward based upon a convolution with the desired source time function and/or low-pass filtering. Use the script <code>process_syn.pl</code> for this purpose by specifying the <code>-h</code> option (the <code>process_syn.pl</code> script can be found in the <a href="/specfem3dglobe/samples/UTILS.tar.gz">utilities package</a>). Alternatively, use signal-processing software packages such as <a href="http://www.llnl.gov/sac/">SAC</a>.<p>For finite fault simulations, it is usually not advisable to use a zero half duration and convolve afterwards, since the half duration is generally fixed by the finite fault model.</dd></dl>
     {% endif %}
-
-
-    <div>
-        <label for="id_record_length" class=before>record length</label>
-        {{ form.record_length }} minutes
-        {% if form.record_length.errors %}<span class=error>{{ form.record_length.errors|join:", " }}</span>{% endif %}
-        {% if help_visible %}<span class=help>Choose the desired record length of the synthetic seismograms (in minutes). This controls the length of the numerical simulation, i.e., twice the record length requires twice as much CPU time. This must be 100 minutes or less for simulations run via the web.</span>{% endif %}
-    </div>

Deleted: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/trash.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/trash.html	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/trash.html	2008-04-03 02:02:25 UTC (rev 11740)
@@ -1,8 +0,0 @@
-
-<h2>Trash</h2>
-
-<ul>
-{% for item in folder %}
-    <li><a href="{{item.url}}">{{ item.icon }} {{ item.name }}</a></li>
-{% endfor %}
-</ul>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/views.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/views.py	2008-04-02 20:13:07 UTC (rev 11739)
+++ cs/portal/trunk/seismo/SeismoWebPortal/views.py	2008-04-03 02:02:25 UTC (rev 11740)
@@ -16,6 +16,7 @@
 from models import MineosModeCatalog, MineosModel, MineosParameters
 from models import Run, Job, OutputFile
 from models import FSNode, Folder
+from models import EventWorkspace
 from cmt import CMTSolution
 import gui
 
@@ -102,6 +103,7 @@
 
     index = Index({
         "home": homeFolder,
+        "shared": sharedFolder,
         "trash": trashFolder,
         "config": config,
         "events": event_search,
@@ -147,6 +149,7 @@
 def openFileBrowser(desktop):
     navtree = gui.Directory("desktop", "Desktop", [
         gui.Directory("home", "Home", []),
+        gui.Directory("shared", "Shared", []),
         gui.Directory("trash", "Trash", []),
         gui.Search("events", "Event Finder", url = "/specfem3dglobe/events/"),
         ])
@@ -185,13 +188,21 @@
 
 
 def trashFolder(request, path, desktop):
+    return folderView(Folder.trashFolder(request.user), "trash", "/specfem3dglobe/trash/", request, path, desktop)
+
+
+def sharedFolder(request, path, desktop):
+    return folderView(Folder.sharedFolder(), "shared", "/specfem3dglobe/shared/", request, path, desktop)
+
+
+def folderView(folder, slug, url, request, path, desktop):
     fileBrowser = desktop.windowList[0]
-    trashFolder = fileBrowser.root.index["trash"]
-    fileBrowser.path.append(trashFolder)
-    trash = Folder.trashFolder(request.user)
-    child = gui.ChildWindow("/specfem3dglobe/trash/", "View")
-    child.content = gui.StaticContent(loader.render_to_string('SeismoWebPortal/trash.html',
-                                                              {'folder': FSNode.objects.filter(parent=trash.fsNode)}))
+    folderIcon = fileBrowser.root.index[slug]
+    fileBrowser.path.append(folderIcon)
+    child = gui.ChildWindow(url, "View")
+    child.content = gui.StaticContent(loader.render_to_string('SeismoWebPortal/folder.html',
+                                                              {'name': folder.fsNode.name,
+                                                               'items': FSNode.objects.filter(parent=folder.fsNode)}))
     desktop.activeWindow.selectWindow(child)
     return desktop
 
@@ -263,8 +274,10 @@
     fileBrowser = desktop.windowList[0]
     if fsNode.inTrash:
         folderName = "trash"
+    elif fsNode.owner:
+        folderName = "home"
     else:
-        folderName = "home"
+        folderName = "shared"
     folder = fileBrowser.root.index[folderName]
     fileBrowser.path.append(folder)
     item = gui.File(name, fsNode.name, url = url)
@@ -276,7 +289,7 @@
     ModelClass = obj.__class__
 
     specialClasses = {
-        Event: eventViewer,
+        EventWorkspace: eventViewer,
         StationList: configStationList,
         Specfem3DGlobeMesh: configSpecfem3DGlobeMesh,
         Specfem3DGlobeParameters: configSpecfem3DGlobeParameters,
@@ -355,9 +368,9 @@
                  )
         ]
     home = Folder.homeFolder(request.user)
-    trash = Folder.trashFolder(request.user)
-    child.content = gui.StaticContent(loader.render_to_string('SeismoWebPortal/home.html',
-                                                              {'folder': FSNode.objects.filter(parent=home.fsNode)}))
+    child.content = gui.StaticContent(loader.render_to_string('SeismoWebPortal/folder.html',
+                                                              {'name': home.fsNode.name,
+                                                               'items': FSNode.objects.filter(parent=home.fsNode)}))
     desktop.activeWindow.selectWindow(child)
     return desktop
     
@@ -1081,8 +1094,11 @@
         fsNode.parent = Folder.trashFolder(request.user).fsNode
         fsNode.save()
     return HttpResponseRedirect(postTrashRedirect)
-    
 
+
+def img(src):
+    return '<img src="%s">' % src
+
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 # Events
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1113,41 +1129,46 @@
     return view, edit
 
 
-def eventViewer(event, url, request, path, desktop):
-    from list_detail import object_detail
+def eventViewer(workspace, url, request, path, desktop):
 
-    objId = event.id # Ouch!
-
-    eventName = event.fsNode.name
+    workspaceName = workspace.fsNode.name
+    event = workspace.event
     
     if event.singleSource:
-        zero = gui.File("mechanism", "Source Mechanism", url = url)
+        sources = gui.File("mechanism", "Source Mechanism", url = url + "sources/")
     else:
-        zero = gui.Directory("sources", "Sources", [], url = url)
+        sources = gui.Directory("sources", "Sources", [], url = url + "sources/")
     navtree = gui.Directory("events", "Events", [
-        zero,
+        gui.Directory("seismograms", "Seismograms", [], url = url),
+        sources,
+        gui.File("settings", "Settings", url = url + "settings/"),
         gui.File("properties", "Properties", url = url + "properties/"),
         ])
-    appWindow = gui.EventViewer(url, eventName + " - Event Viewer", navtree, event)
+    appWindow = gui.EventViewer(url, workspaceName + " - Event Viewer", navtree, workspace)
     desktop.insertWindow(appWindow)
     desktop.selectWindow(appWindow)
-    
+
     if not path:
-        appWindow.path.append(zero)
-        view, edit = eventWindows(event, url, desktop)
-        return object_detail(
-            request,
-            desktop,
-            view,
-            object_id = objId,
-            queryset = Event.objects.filter(fsNode__owner=request.user),
-            )
+        return seismogramTable(workspace, url, request, path, appWindow, desktop)
 
     name = path.pop(0)
-    if name == "edit":
-        appWindow.path.append(zero)
-        view, edit = eventWindows(event, url, desktop)
-        return manipulate_event(request, path, desktop, object_id = objId, action = 'edit', window = edit)
+
+    if name == "sources":
+        return configSources(workspace, url, request, path, appWindow, desktop)
+
+    if name == "settings":
+        appWindow.path.append(navtree.index['settings'])
+        settings = gui.ChildWindow(url + "settings/", "Settings")
+        settings.buttons.append(helpButton(request))
+        desktop.activeWindow.insertWindow(settings)
+        return update_object(request,
+                             desktop,
+                             settings,
+                             EventWorkspace,
+                             workspace.id, # Ouch!
+                             post_save_redirect = url,
+                             follow = EventWorkspace.follow,
+                             )
     if name == "properties":
         appWindow.path.append(navtree.index['properties'])
         menuBar = [
@@ -1159,20 +1180,122 @@
         properties = gui.ChildWindow(url + "properties/", "Properties")
         properties.menuBar = menuBar
         desktop.activeWindow.insertWindow(properties)
-        return manipulate_event(request, path, desktop, object_id = objId, action = 'properties', window = properties)
+        return update_object(request,
+                             desktop,
+                             properties,
+                             FSNode,
+                             workspace.fsNode.id, # Ouch!
+                             post_save_redirect = '/specfem3dglobe/home/',
+                             follow = FSNode.follow,
+                             )
     if name == "delete":
-        return moveObjectToTrash(event, request, "/specfem3dglobe/home/")
+        return moveObjectToTrash(workspace, request, "/specfem3dglobe/home/")
 
+    response = eventFiles(name, event, request)
+    if response:
+        return response
+
+    raise Http404
+
+
+
+def seismogramTable(workspace, url, request, path, appWindow, desktop):
+    from StringIO import StringIO
+
+    event = workspace.event
+    seismogramsIcon = appWindow.root.contents[0]
+    appWindow.path.append(seismogramsIcon)
+
+    window = gui.ChildWindow(url, "Seismograms")
+    desktop.activeWindow.insertWindow(window)
+
+    html = StringIO()
+    print >>html, '<h2>%s - Seismograms</h2>' % workspace
+
+    # 1D Synthetics
+    print >>html, '<h3>1D Synthetics</h3>'
+    print >>html, '<table rules="groups" class="cool">'
+    print >>html, '<thead>'
+    print >>html, '<tr><th>model</th><th>catalog</th><th>status</th></tr>'
+    print >>html, '</thead>'
+    print >>html, '<tbody>'
+    print >>html, '</tbody>'
+    print >>html, '</table>'
+
+    print >>html, "<p></p>"
+
+    # 3D Synthetics
+    table = {}
+    for ps in Specfem3DGlobeParameters.objects.all():
+        modelGroup = table.setdefault(ps.model.id, {})
+        meshGroup = modelGroup.setdefault(ps.mesh.id, [])
+        meshGroup.append(ps)
+    
+    print >>html, '<h3>3D Synthetics</h3>'
+    print >>html, '<table rules=groups class=cool>'
+    print >>html, '<thead>'
+    print >>html, '<tr><th>model</th><th>mesh</th><th>shortest period (s)</th><th>receivers at depth</th><th>parameter set</th><th>status</th></tr>'
+    print >>html, '</thead>'
+    
+    for i, modelGroup in enumerate(table.itervalues()):
+        print >>html, '<tbody class=%s>' % (i % 2 and 'even' or 'odd')
+        for meshGroup in modelGroup.itervalues():
+            for ps in meshGroup:
+                atDepth = img("/specfem3dglobe/pics/icon-%s.gif" % (ps.receivers_can_be_buried and "yes" or "no"))
+                print >>html, ('<tr><td>%s</td><td>%s</td><td>%.0f</td><td>%s</td><td>%s</td><td>unavailable</td></tr>' %
+                               (ps.model, ps.mesh, ps.mesh.shortestPeriod(), atDepth, ps)
+                               )
+        print >>html, '</tbody>'
+    
+    print >>html, '</table>'
+    
+    window.content = gui.StaticContent(html.getvalue())
+    desktop.activeWindow.selectWindow(window)
+    
+    return desktop
+
+
+def eventFiles(name, event, request):
     index = Index({
-        "CMTSOLUTION.txt": (event_detail_cmtsolution_txt, (), dict(object_id = objId)),
-        "beachball.gif": (beachball_gif, (), dict(event_id = objId)),
-        "gearth.kml": (event_detail_gearth, (), dict(object_id = objId)),
+        "CMTSOLUTION.txt": (event_detail_cmtsolution_txt, (), dict(object_id = event.id)),
+        "beachball.gif": (beachball_gif, (), dict(event_id = event.id)),
+        "gearth.kml": (event_detail_gearth, (), dict(object_id = event.id)),
         })
     call = index.get(name)
     if call:
         view, args, kwds = call
         return view(request, *args, **kwds)
 
+    return None
+
+
+def configSources(workspace, url, request, path, appWindow, desktop):
+    from list_detail import object_detail
+
+    event = workspace.event
+    sourcesIcon = appWindow.root.contents[1]
+    appWindow.path.append(sourcesIcon)
+    url += "sources/"
+
+    if not path:
+        view, edit = eventWindows(event, url, desktop)
+        return object_detail(
+            request,
+            desktop,
+            view,
+            object_id = event.id,
+            queryset = Event.objects.all(),
+            )
+
+    name = path.pop(0)
+    if name == "edit":
+        view, edit = eventWindows(event, url, desktop)
+        return manipulate_event(request, path, desktop, workspace = workspace, action = 'edit', window = edit)
+
+    response = eventFiles(name, event, request)
+    if response:
+        return response
+
     return configSource(name, event, url, request, path, desktop)
 
 
@@ -1187,10 +1310,10 @@
     url = eventUrl + "%d/" % objId
 
     source = get_object_or_404(Source, id=objId) # Ouch!
-    sourcesFolder = appWindow.root.contents[0]
+    sourcesFolder = appWindow.root.contents[1]
     navIcon = gui.File(name, source.eventName, url = url)
     sourcesFolder.appendNode(navIcon)
-    appWindow.path.extend([sourcesFolder, navIcon])
+    appWindow.path.append(navIcon)
     
     view = gui.ChildWindow(url, "View")
     edit = gui.ChildWindow(url + "edit/", "Edit")
@@ -1305,7 +1428,7 @@
     return desktop
 
 
-def manipulate_event(request, path, desktop, action=None, object_id=None, window=None):
+def manipulate_event(request, path, desktop, action=None, workspace=None, window=None):
     from forms import SingleSourceEventAddManipulator, SingleSourceEventChangeManipulator
 
     if path: raise Http404
@@ -1316,19 +1439,9 @@
         window = gui.ChildWindow("/specfem3dglobe/config/events/new/", "New")
         desktop.activeWindow.insertWindow(window)
     elif action == "edit":
-        event = get_object_or_404(Event, id=object_id)
+        event = workspace.event
         if not event.singleSource: raise Http404
-        manipulator = SingleSourceEventChangeManipulator(event)
-    elif action == "properties":
-        objId = get_object_or_404(Event, id=object_id).fsNode.id # Ouch!
-        return update_object(request,
-                             desktop,
-                             window,
-                             FSNode,
-                             objId,
-                             post_save_redirect = '/specfem3dglobe/home/',
-                             follow = FSNode.follow,
-                             )
+        manipulator = SingleSourceEventChangeManipulator(workspace)
     else:
         raise Http404
     
@@ -1340,11 +1453,11 @@
             name = new_data.get('name')
             if name:
                 del new_data['name']
-            new_event = manipulator.save(new_data, request.user)
+            obj = manipulator.save(new_data, request.user)
             if name:
-                new_event.fsNode.name = name
-                new_event.fsNode.save()
-            url = "/specfem3dglobe/%i/" % new_event.fsNode.id
+                obj.fsNode.name = name
+                obj.fsNode.save()
+            url = "/specfem3dglobe/%i/" % obj.fsNode.id
             return HttpResponseRedirect(url)
     else:
         new_data = manipulator.flatten_data()
@@ -1538,7 +1651,7 @@
                              )
     
     if name == "map":
-        map.content = gui.StaticContent('<img src="%s">' %  (url + "map.jpg"))
+        map.content = gui.StaticContent(img(url + "map.jpg"))
         desktop.activeWindow.selectWindow(map)
         return desktop
 



More information about the cig-commits mailing list