Changeset 149


Ignore:
Timestamp:
09/09/2009 04:26:54 PM (13 years ago)
Author:
marcus
Message:
  • support for setting time info entries (epoch seconds and ms)
  • more tests
Location:
SHX/trunk/src/SeismicHandler
Files:
9 added
3 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/src/SeismicHandler/core/shheaders.py

    r139 r149  
    33# Copyright (C) 2008-2010 Marcus Walther (walther@szgrf.bgr.de) 
    44# 
    5 # This file is part of Seismic Handler eXtended (SHX)  
     5# This file is part of Seismic Handler eXtended (SHX) 
    66# Full details can be found at project website http://www.seismic-handler.org/ 
    7 #  
     7# 
    88# SHX is free software; you can redistribute it and/or modify 
    99# it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE as published by 
     
    5353              "char": 40, 
    5454              "time": 15, 
    55               "pointer": 8                           
     55              "pointer": 8 
    5656} 
    5757 
    5858class PARAM(C.Structure): 
    5959    """Command parameter structure 
    60      
     60 
    6161    originally defined in cpusrdef.h as 
    6262 
     
    6464    #define CPC_MAXQUAL  5 
    6565    #define CPC_LINELTH  2048 
    66      
     66 
    6767    typedef struct param { 
    6868       int    pno;                            /* number of parameters */ 
     
    8585class TIME(C.Structure): 
    8686    """Time structure 
    87    
     87 
    8888    originally defined in tcusrdef.h as 
    89      
     89 
    9090    typedef struct timblc { 
    9191       unsigned long     hi; 
    9292       unsigned int      lo; 
    9393    } TIME;""" 
    94      
     94 
    9595    _fields_ = [ 
    9696        ("hi", C.c_ulong), 
  • SHX/trunk/src/SeismicHandler/core/shlib.py

    r146 r149  
    146146               "flag": "db_setf", # XXX  
    147147               "pointer": "db_setp", # XXX not needed (still unchangeable) 
    148                "time": "db_sett", # XXX 
     148               "time": "db_sett", 
    149149               } 
    150150 
     
    160160            value = vmap(value) 
    161161 
    162         fct(trc, ientry, value, C.byref(status)) 
     162        if dattype == "time": 
     163            fct(trc, ientry, C.byref(value), C.byref(status)) 
     164        else: 
     165            fct(trc, ientry, value, C.byref(status)) 
    163166 
    164167        if status.value: 
  • SHX/trunk/src/SeismicHandler/tests/test_commands.py

    r148 r149  
    66from SeismicHandler.core.modules.Tools import convertFilename 
    77from SeismicHandler.core.commands import Run 
     8from SeismicHandler.core.shheaders import TIME 
    89 
    910import pickle 
     
    292293#        self.traces[1].plot() 
    293294        self.checkTraceData(self.traces[1], cmpindex="fft") 
    294          
     295 
    295296    def testFilter(self): 
    296297        Run("create spike 0.05 50 20 20") 
    297298        Run("fili f BP_2S_10HZ_4") 
    298299        Run("filter f 1") 
    299          
     300 
    300301        self.checkTraceData(self.traces[1], cmpindex="filter", digits=5) 
    301      
     302 
    302303    testFili = testFilter 
    303      
     304 
    304305    def testFold(self): 
    305         Run("cresharp")         
    306         Run("cresharp") 
    307         Run("fold 1 10 20 2")         
    308          
     306        Run("cresharp") 
     307        Run("cresharp") 
     308        Run("fold 1 10 20 2") 
     309 
    309310        self.checkTraceData(self.traces[2], cmpindex="fold", digits=5) 
    310          
     311 
    311312    def testGoto(self): 
    312313        # This command is already replaced by python 
    313314        pass 
    314      
     315 
    315316    def testHc(self): 
    316317        # This function is not useful in python context. 
    317318        pass 
    318      
     319 
    319320    def testHelp(self): 
    320321        # This function is not useful in python context. 
    321322        pass 
    322      
     323 
    323324    def testHide(self): 
    324325        # XXX Commands for visualisation are not tested yet. 
    325326        pass 
    326      
     327 
    327328    def testIf(self): 
    328329        # This command is already replaced by python 
    329330        pass 
    330      
     331 
    331332    def testInt(self): 
    332333        Run("cresharp") 
    333334        Run("int 1") 
    334          
     335 
    335336        self.checkTraceData(self.traces[1], cmpindex="int", digits=5) 
    336          
     337 
    337338    def testLocate(self): 
    338         # XXX not tested since it depends on AL command  
    339         pass 
    340      
     339        # XXX not tested since it depends on AL command 
     340        pass 
     341 
    341342    def testMark(self): 
    342343        # XXX Commands for visualisation are not tested yet. 
    343344        pass 
    344      
     345 
    345346    def testMaxAmpl(self): 
    346347        Run("cresharp") 
     
    348349        Run("maxampl 1 35") 
    349350        self.checkTraceData(self.traces[0], cmpindex="maxampl", digits=5) 
    350          
     351 
    351352    def testMaximum(self): 
    352353        Run("cresharp") 
     
    356357        self.checkTraceData(self.traces[2], cmpindex="maximum1") 
    357358        self.checkTraceData(self.traces[3], cmpindex="maximum2") 
    358          
    359     def test2Mdir(self): 
    360         for i in range(3): 
     359 
     360    def testMdir(self): 
     361        for _ in range(3): 
    361362            Run("cresharp") 
    362363 
    363364        Run("mirror 2") 
    364          
     365 
    365366        Symbol.azi = 0. 
    366367        Symbol.inci = 0. 
    367          
     368 
    368369        Run("mdir 1,2 10. 20. &azi") 
    369370        self.assertAlmostEqual(Symbol.azi, 6.271768) 
    370          
     371 
    371372        Run("mdir 1-3 10. 20. &azi &inci") 
    372373        self.assertAlmostEqual(Symbol.azi, 263.763123, 4) 
    373374        self.assertAlmostEqual(Symbol.inci, 45.170059, 5) 
    374          
     375 
    375376        Symbol.azi = None 
    376         Symbol.inci = None         
    377          
     377        Symbol.inci = None 
     378 
     379    def testMend(self): 
     380        Run("cresharp") 
     381        Run("mend 1 6 10 30") 
     382        self.checkTraceData(self.traces[0], cmpindex="mend") 
     383 
     384    def testMerge(self): 
     385        Run("cresharp") 
     386        Run("cresharp") 
     387 
     388        # shift trace #2 by 21 seconds 
     389        t = TIME() 
     390        t.hi = self.traces[1].start.hi + 21 
     391        t.lo = 0 
     392        self.traces[1].start = t 
     393 
     394        Run("merge 2 1") 
     395 
     396        self.checkTraceData(self.traces[2], cmpindex="merge") 
     397 
     398    def testMergePair(self): 
     399        # create three traces of which two are "mergeable" (identical source) 
     400        for _ in range(3): 
     401            Run("cresharp") 
     402 
     403        trc1 = self.traces.get(1) 
     404        trc2 = self.traces.get(2) 
     405        trc3 = self.traces.get(3) 
     406 
     407        trc1.comp = trc2.comp = trc3.comp = "Z" 
     408        trc1.station = trc3.station = "TST" 
     409        trc2.station = "TTT" 
     410        trc1.chan1 = trc2.chan1 = trc3.chan1 = "B" 
     411        trc1.chan2 = trc2.chan2 = trc3.chan2 = "H" 
     412 
     413        Symbol.one = 0 
     414        Symbol.two = 0 
     415 
     416        Run("merge_pair &one &two") 
     417 
     418        self.assertEqual(Symbol.one, 1) 
     419        self.assertEqual(Symbol.two, 3) 
     420 
     421    def testMirror(self): 
     422        Run("cresharp") 
     423        Run("mirror 1") 
     424 
     425        check = self.loadCompare("cresharp")[::-1] 
     426        self.checkTraceData(self.traces[0], cmp=check) 
     427 
     428    def testNorm(self): 
     429        # XXX Commands for visualisation are not tested yet. 
     430        pass 
     431 
     432    def testNr(self): 
     433        # XXX Commands for visualisation are not tested yet. 
     434        pass 
     435 
     436    def testOverlay(self): 
     437        # XXX Commands for visualisation are not tested yet. 
     438        pass 
     439 
    378440    def testPick(self): 
    379441        # read real world data (@ = don't convert case of this command) 
     
    381443        # create symbol 
    382444        Symbol.x = "" 
    383          
     445 
    384446        Run("pick 1 0 200 &x") 
    385447        self.assertEqual(Symbol.x, " 2-NOV-2003_02:26:43.500") 
    386          
     448 
    387449        # delete symbol 
    388450        Symbol.x = None 
    389      
     451 
     452    def testPmch(self): 
     453        # XXX Commands for visualisation are not tested yet. 
     454        pass 
     455 
     456    def testPm(self): 
     457        # XXX Commands for visualisation are not tested yet. 
     458        pass 
     459 
     460    def testPolFil(self): 
     461        self.fail("no test case created") 
     462 
     463    def testQuit(self): 
     464        # no need to test this 
     465        pass 
     466 
     467    def testRd(self): 
     468        # XXX Commands for visualisation are not tested yet. 
     469        pass 
     470 
     471    def testRead(self): 
     472        Run("@READ %s 1" % convertFilename("data/cresharp")) 
     473        self.checkTraceData(self.traces[0], cmpindex="cresharp") 
     474 
     475    def testReada(self): 
     476        Run("@READA %s" % convertFilename("data/CRESHARP.asc")) 
     477        self.checkTraceData(self.traces[0], cmpindex="cresharp") 
     478 
     479        # I set a comment containing recipe how the trace was compiled. 
     480        self.assertEqual(self.traces[0].comment, "CRESHARP") 
     481 
     482    def testReadf(self): 
     483        # Just test for GSE2 format 
     484        Run("@READF/FMT=5 %s ALL" % convertFilename("data/GRF_031102_0225.GSE")) 
     485        self.assertEqual(int(System.tottrcs), 19) 
     486 
     487    def testReads(self): 
     488        self.fail("no test created yet!") 
     489 
     490    def testResample(self): 
     491        Run("cresharp") 
     492        Run("resample 1 .01") 
     493 
     494        # resample does not trigger redraw 
     495        EventManager.trigger(Event(EventManager.TRACEUPDATE)) 
     496 
     497        self.assertAlmostEqual(self.traces[-1].delta, 0.01) 
     498        self.assertAlmostEqual(self.traces[-1].length, 5000) 
     499        self.assertAlmostEqual(self.traces[-1].alloc, 5000) 
     500 
     501    def testReturn(self): 
     502        # This function is not useful in python context. 
     503        pass 
     504 
     505    def testRms(self): 
     506        Run("cresharp") 
     507        Symbol.rms = 0. 
     508        Run("rms 1 ;;; &rms") 
     509 
     510        self.assertAlmostEqual(Symbol.rms, 0.2942311) 
     511 
     512        Symbol.rms = None 
     513 
     514    def testRot(self): 
     515        Run("cresharp") 
     516        Run("cresharp") 
     517        Run("rot 1,2 45") 
     518 
     519        # Trace 3 now contains only zeros, while trace 4 holds all energy. 
     520        self.checkTraceData(self.traces[2], cmp=[0.]*self.traces[-2].length) 
     521        self.checkTraceData(self.traces[3], cmpindex="rot", digits=6) 
     522 
     523    def testSdef(self): 
     524        # This function is not useful in python context. 
     525        pass 
     526 
     527    def testSdel(self): 
     528        # This function is not useful in python context. 
     529        pass 
     530 
     531    def testSet(self): 
     532        # This function is not useful in python context. 
     533        pass 
     534 
     535    def testShift(self): 
     536        # XXX Commands for visualisation are not tested yet. 
     537        pass 
     538 
     539    def testSpecDiv(self): 
     540        self.fail("no test created!") 
     541 
     542    def testSpectrogram(self): 
     543        import tempfile 
     544        tmp = tempfile.mktemp() 
     545        del tempfile 
     546 
     547        Run("cresharp") 
     548        Run("@SPECTROGRAM 1 ;;; 128 2 %s" % convertFilename(tmp)) 
     549 
     550        self.assertEqual(open(tmp).readlines(), open("data/spectrogram.out").readlines()) 
     551 
     552        os.remove(tmp) 
     553 
     554    def testSpectrum(self): 
     555        self.fail("no test created!") 
     556 
    390557    def testSum(self): 
    391558        # this test fails for some reason 
     
    399566 
    400567        # create 2 identical synthetics with "seconds" length, 1/"delta" Hz 
    401         for i in xrange(2): 
     568        for _ in xrange(2): 
    402569            Run("CREATE SHARP %.2f %u 1. 15. .1 .5" % (delta, seconds)) 
    403570 
Note: See TracChangeset for help on using the changeset viewer.