[ncl-talk] About trajectories routine

Gustavo Correa gus at ldeo.columbia.edu
Sat Dec 6 18:10:16 MST 2014


Hi Carlos

Binary files are a pain.
You need to know how they were written (Fortran or C, sequential or direct access, the number
type that was written: 4-byte real, 8-byte real, 4-byte integer, etc,  
if there are record separators, etc), then choose the right function to read the file based
on this information.
Better avoid them, use self describing formats like NetCDF, 
or for small amounts of data just plain ascii.

Do you know any of the information above of your data file?
Can you at least do:

ls -l dados.bin

Anyway, do you have a single stream of 250 data points (ie. a single "trajectory")?
If this is the case (and the error message suggests this) you should instruct the
reading function to read only those 250 data points.
It sounds as you have only one trajectory, not 100, but it is hard to tell.
If this is the case, you need to change the example script more than just
the data reading routine, to match the data you have.

In addition, if you don't have the time information written to the file, 
you should not try to read it, ie. remove this: 
>  time= fbinrecread("dados.bin",1,(/ntime/),"float")


Also, the error message suggests that the file was not written by Fortran,
maybe it was written by a C program.
Have you tried cbinread instead?
Say, something like this:

> big = cbinread("dados.bin",(/1,ntime,1/),"float")


I hope this helps,
Gus Correa


On Dec 6, 2014, at 1:26 PM, Carlos Batista wrote:

> Hi Gustavo, How are you?
> 
> My file is in the binary format.
> I have only one variable over time (250 Timesteps).
> 
> In NCl I tried to enter the information by modifying the size of the read data
> ;*******************************************************************
> ; 1 variables x 250 x 100 Timesteps trajectories
> Ntime = 250
> 
> big fbinrecread = ("my_data.bin" 0, (/ 1, Ntime, 100 /), "float")
> time = fbinrecread ("my_data.bin", 1, (/ Ntime /), "float")
> 
> ;*********************************************************************
> 
> Another thing I did not understand is why the existence of only 100 trajectories. If I want more I can change this value?
> 
> **********************************see the error*****************************
> 
> carlos at carlos-Lenovo-IdeaPad-Z400-Touch:~/area/$ ncl
>  Copyright (C) 1995-2013 - All Rights Reserved
>  University Corporation for Atmospheric Research
>  NCAR Command Language Version 6.1.2
>  The use of this software is governed by a License Agreement.
>  See http://www.ncl.ucar.edu/ for more details.
> 
> ncl 0> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
> ncl 1> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
> ncl 2> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
> ncl 3> begin
> ncl 4>  ntime = 250 
> ncl 5> big = fbinrecread("dados.bin",0,(/1,ntime,100/),"float")
> 
> ncl 6>  time= fbinrecread("dados.bin",1,(/ntime/),"float")
> 
> ncl 7>  wks = gsn_open_wks("ps","traj")              
> ncl 8> ;*********************************************
> ncl 9> ; color preps
> ncl 10> ;*********************************************
> ncl 11>   cnLevels=fspan(34.5,34.8,8)
> ncl 12>   cmap = RGBtoCmap ("redyellowblue.rgb")
> ncl 13>   gsn_define_colormap (wks,cmap)
> ncl 14> 
> ncl 15>    res            = True                   
> ncl 16>    res at gsnDraw    = False                 
> ncl 17>    res at gsnFrame   = False                    
> ncl 18>    res at vpWidthF   = 0.80                         
> ncl 19>    res at vpHeightF  = 0.80
> ncl 20>    res at mpMaxLatF  = -20                   
> ncl 21>    res at mpMinLatF  = -60 
> ncl 22>    res at mpMinLonF  = -75
> ncl 23>    res at mpMaxLonF  = -25
> ncl 24> 
> ncl 25> ; label bar resources 
> ncl 26>    res_lb                    = True
> ncl 27>    res_lb at vpWidthF           = 0.60
> ncl 28>    res_lb at vpHeightF          = 0.10
> ncl 29>    res_lb at lbPerimOn          = False            
> ncl 30>    res_lb at lbOrientation      = "Horizontal"   
> ncl 31>    res_lb at lbLabelStride      = 2    
> ncl 32>    res_lb at lbLabelAlignment   = "InteriorEdges"  
> ncl 33>    res_lb at lbFillColors       = cmap(2:,:)      
> ncl 34>    res_lb at lbMonoFillPattern  = True            
> ncl 35>    res_lb at lbLabelFontHeightF = 0.015 
> ncl 36> 
> ncl 37>    res at tiMainString    = "Trajectories colored by salinity (ppt)"  ; title
> ncl 38>   
> ncl 39>    map = gsn_csm_map_ce(wks,res)                         
> ncl 40> ;*********************************************
> ncl 41> ; trajectory parameters
> ncl 42> ;*********************************************
> ncl 43>    xpt = new(ntime,float)           
> ncl 44>    ypt = new(ntime,float)
> ncl 45>    traj = (/1,10,53,67,80/)          
> ncl 46> 
> ncl 47> ;*********************************************
> ncl 48> ; some plot parameters
> ncl 49> ;*********************************************
> ncl 50>    pres                  = True          
> ncl 51>    pres at gsLineThicknessF = 2.0             
> ncl 52> 
> ncl 53>    mres  = True                             
> ncl 54>    first = True                               
> ncl 55> ;********************************
> ncl 56>    do i = 0,dimsizes(traj)-1            
> ncl 57>       ypt = big(2,:,traj(i))                  
> ncl 58>       xpt = big(1,:,traj(i))                
> ncl 59>       sst = big(8,:,traj(i))
> ncl 60> 
> ncl 61>      do j=0,dimsizes(ypt)-2
> ncl 62>         pres at gsLineColor=GetFillColor(cnLevels,cmap,avg( (/sst(j),sst(j+1)/)))
> ncl 63>         gsn_polyline(wks,map,(/xpt(j),xpt(j+1)/),(/ypt(j),ypt(j+1)/),pres) 
> ncl 64>      end do
> ncl 65> 
> ncl 66> 
> ncl 67> ; create a unique marker to indicate the start of the trajectory
> ncl 68> 
> ncl 69>       first at gsMarkerSizeF  = 9.0        
> ncl 70>       first at gsMarkerColor  = "red"    
> ncl 71> 
> ncl 72>       gsn_polymarker(wks,map,xpt(0),ypt(0),first) ; draw start of traj
> ncl 73>       delete(first at gsMarkerColor)
> ncl 74>       delete(first at gsMarkerSizeF)
> ncl 75>    end do 
> ncl 76>    gsn_labelbar_ndc(wks,dimsizes(cnLevels)+1,cnLevels,0.30,0.30,res_lb)  
> ncl 77>    draw(map)                                           
> ncl 78>    frame(wks)                                         
> ncl 79>   
> ncl 80> end
> 
> warning:fbinrecread: size specified is greater than record size, filling with missing values
> fatal:fbinrecread: 0 or less than zero fortran control word, FILE NOT SEQUENTIAL ACCESS!
> fatal:["Execute.c":8126]:Execute: Error occurred at or near line 6
> **************************************************
> 
> Thanks!
> Carlos
> 
> 
> 2014-12-06 16:00 GMT-02:00 Gustavo Correa <gus at ldeo.columbia.edu>:
> Hi Carlos
> 
> I guess it all depends on how your your input data file looks like.
> Is it an ascii, binary, NetCDF, HDF, GRIB file?
> NetCDF, HDF, and to some extent GRIB are self describing, and can be read
> with NCL's "addfile" function:
> 
> http://www.ncl.ucar.edu/Document/Functions/Built-in/addfile.shtml
> 
> Ascii layout is easy to see directly on the file, and can be read with NCL's "asciiread" function:
> 
> http://www.ncl.ucar.edu/Document/Functions/Built-in/asciiread.shtml
> 
> Those above are in general they  easier to read than binary,
> because the latter can vary in layout and record structure in many different ways.
> But you can also read binary, with fbinread, cbinread, fbinrecread, etc,
> although all depends on how it was written/created:
> 
> http://www.ncl.ucar.edu/Document/Functions/io.shtml
> 
> 
> You say
> "I have data with just 1 variable to 250 times."
> 
> Is it a NetCDF or HDF file?
> Is it an ascii column file with 250 lines, one value per line?
> Does it have a column for time also, say one "time value" pair per line?
> Is it binary?  If binary, how is it organized?
> 
> The example traj_1.ncl reads a file with this layout:
> ******
> ; note this trajectory file contains data in the form of
> ; 9 variables x 131 timesteps x 100 trajectories
>    ntime = 131
> 
>    big = fbinrecread("traj.bin",0,(/9,ntime,100/),"float")
>    time= fbinrecread("traj.bin",1,(/ntime/),"float")
> ******
> 
> You can change the two "fbinrecread" commands above and
> adjust them to your input file layout, but you need to know the input file
> type and layout.
> 
> I hope this helps,
> Gus Correa
> 
> 
> On Dec 6, 2014, at 12:09 PM, Carlos Batista wrote:
> 
> > Hi users
> > My name is Carlos and I'm new in the use of NCL...
> > I need to know what the structure of the data read by the routine trajectories. https://www.ncl.ucar.edu/Applications/traj.shtml ... for example: traj_1.ncl
> >
> > I have data with just 1 variable to 250 times. How can I know the number of trajectories of such data?
> >
> > Who has an example with data is read could send for me, please!
> > _______________________________________________
> > ncl-talk mailing list
> > List instructions, subscriber options, unsubscribe:
> > http://mailman.ucar.edu/mailman/listinfo/ncl-talk
> 
> _______________________________________________
> ncl-talk mailing list
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
> 



More information about the ncl-talk mailing list