[Thread Prev][Thread Next][Index]

Re: [ferret_users] How to read ASCII data accurately



The following works! It should not, but it does.

!Read only the first column into variable v1. Define the time axis
set data/ez/skip=1/var=v1 "RAW/davis_msm184_30min.dat"
define axis/t/units=day/t0="1-jan-0000 00:00"/from_data time=v1[d=1]
define grid/t=time tgrid
let tdummy = t[gt=tgrid]

!Open the same data set again, now as delimited data set. Now only real*4 accuracy is used set data/ez/columns=28/skip=1/format=deli/del=" " "RAW/davis_msm184_30min.dat"
let v21  = reshape(v2,tdummy)
let v31  = reshape(v3,tdummy)
let v41  = reshape(v4,tdummy)
...
....

!Listing v1 and time gives different results
list/i=1/prec=12 v1
             VARIABLE : V1
             FILENAME : davis_msm184_30min.dat
             FILEPATH : RAW/
             X        : 1
          734707.000000
This is wrong!
yes? list/l=1/prec=12 t[gt=time]
             VARIABLE : T
                        axis TIME
             TIME     : 24-JUL-2011 00:14
          734707.010069
This is correct, but v1 is defined twice! Here the first definition (correct) is used.

list/l=1:10 tair
 24-JUL-2011 00:14:29 /  1:  23.58
 24-JUL-2011 00:45:00 /  2:  23.32
 24-JUL-2011 01:14:59 /  3:  23.22
 24-JUL-2011 01:44:29 /  4:  23.22
 24-JUL-2011 02:15:00 /  5:  23.18
 24-JUL-2011 02:44:59 /  6:  23.12
 24-JUL-2011 03:14:29 /  7:  23.01
 24-JUL-2011 03:45:00 /  8:  22.98
 24-JUL-2011 04:14:59 /  9:  22.80
 24-JUL-2011 04:44:29 / 10:  22.69

gives correct temperature and correct times.

yes? sh/brief data
     currently SET data sets:
    1> RAW/davis_msm184_30min.dat  (default)

The data set is only opened once.

Something is going on in the background, which is not ferret-like. Usually I would expect, changing v1 would imply changes in
the definition of the time axis too.
____________

Nevertheless, I think the fact that a line like
set data/ez/columns=28/skip=1/format=deli/del=" " "RAW/davis_msm184_30min.dat"
truncates the data should be considered as a bug?

Martin

Martin Schmidt wrote:
Thanks Russ and Akshay for the suggestions.

It turns out that I need to be mor specific.

The file contains a space delimited list of 28 variables in 28 columns. The first column is the critical time variable.
My command to open the file is:

set data/ez/format=delimited/col=28/skip=1/del=" " "RAW/davis_msm184_30min.dat"
define axis/t/units=day/t0="1-jan-0000 00:00"/from_data time=v1
 *** NOTE: Axis has repeated values -- micro-adjusting ...

This is from the missing accuracy of the time variable in v1. Adding the /type="numeric" argument does not change this.

Alternatively,

set data/ez/col=28/skip=1/var=v1,v2,v3,v4.v5,v6.v7.v8.v9,v10,v11,v12,v13,v14,v15,v16,v17,v18,v19,v20,v21,v22,v23,v24,v25,v26,v27,v28 "RAW/davis_msm184_30min.dat"
 *** NOTE: attempt to initalize 24 variables
 *** NOTE: maximum allowed is 20 variables
However, reading data this way
define axis/t/units=day/t0="1-jan-0000 00:00"/from_data time=v1

generates the desired time axis. Hence, reading the variables separately without a format specifier gives the correct answer. But now I have to split the file.

Generating a testfile with one column only

set data/ez test.dta

reads data correctly.

So my conclusion is, that the missing precision is coupled to the fact, that I open the file in the delimited format.

Cheers,
Martin





Russ Fiedler wrote:
Hi Martin,

Version 6.82 RH6 reads this to full precision so it looks like a
difference between OS or a bug has crept in.

russ-hf% ferret -nojnl
         NOAA/PMEL TMAP
         FERRET v6.82
         Linux 2.6.32-279.1.1.el6.x86_64 64-bit - 08/03/12
          3-May-13 09:55
yes? file/var=xx dummy
yes? list/prec=10 xx
              VARIABLE : XX
              FILENAME : dummy
              X        : 1
           734707.0101

There also the /TYPE=r8 qualifier which might work or try specifying the
Fortran format explicitly.

Russ

On Thu, 2013-05-02 at 17:50 +0200, Martin Schmidt wrote:
Hi,
I have an ASCII input file. One variable is the Julian day (from 0000)
and looks like

734707.010069

Reading this with set data/ez I find

list/prec=10 v1

1   / 1:  734707.0000

which is not, what I would like to get.

I am using ferret_v6842_rh5, which should use real*8 accuracy for
operations.

Is there a way to read ASCII data with the same accuracy?

I do not know, who had the idea to use this far away time origin, the
data are as they are. Possibly
for compatibility with EXCEL.
For sure, I could edit the input file, remove the first four digits of
the time variable and add this
after reading the data. This workaround is fine for my example, but for
a larger project I am interested in a
more general solution with ferret - if it exists.

Many thanks,
Martin Schmidt





[Thread Prev][Thread Next][Index]
Contact Us
Dept of Commerce / NOAA / OAR / PMEL / Ferret

Privacy Policy | Disclaimer | Accessibility Statement