Class: NumRu::NetCDFAtt

Inherits:
Object
  • Object
show all
Defined in:
lib/numru/netcdf.rb,
ext/netcdfraw.c

Instance Method Summary collapse

Instance Method Details

#==(Attb) ⇒ Object



1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
# File 'ext/netcdfraw.c', line 1905

VALUE
NetCDF_att_eql(VALUE Atta,VALUE Attb)
{
  struct NetCDFAtt *Netcdf_atta;
  struct NetCDFAtt *Netcdf_attb;
  
  if( rb_obj_is_kind_of(Attb, cNetCDFAtt) ){
      Data_Get_Struct(Atta,struct NetCDFAtt,Netcdf_atta);
      Data_Get_Struct(Attb,struct NetCDFAtt,Netcdf_attb);
  
      if(Netcdf_atta->ncid == Netcdf_atta->ncid && 
	 Netcdf_atta->varid == Netcdf_attb->varid && 
	 strcmp(Netcdf_atta->name,Netcdf_attb->name)==0){
	  return Qtrue;
      } else { 
	  return Qfalse;
      }
  } else {
      return Qfalse;
  }
}

#atttypeObject



1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
# File 'ext/netcdfraw.c', line 1473

VALUE
NetCDF_att_atttype(VALUE Att)
{
  int ncid;
  int varid;
  int status;
  char *att_name;
  const char *Attname;
  struct NetCDFAtt *Netcdf_att;
  nc_type xtypep;

  Data_Get_Struct(Att,struct NetCDFAtt,Netcdf_att);
  ncid = Netcdf_att->ncid;
  varid = Netcdf_att->varid;
  att_name = Netcdf_att->name;

  status = nc_inq_atttype(ncid,varid,att_name,&xtypep);
  if(status != NC_NOERR) NC_RAISE(status);

  Attname = nctype2natype(xtypep);
  return(rb_str_new2(Attname));
}

#cloneObject

The methods of the NetCDFAtt class



532
533
534
535
536
537
538
539
540
541
542
543
# File 'ext/netcdfraw.c', line 532

VALUE
NetCDF_att_clone(VALUE att)
{
    VALUE clone;
    struct NetCDFAtt *na1, *na2;

    Data_Get_Struct(att, struct NetCDFAtt, na1);
    na2 = NetCDF_att_init(na1->ncid, na1->varid, na1->name);
    clone = Data_Wrap_Struct(cNetCDFAtt, 0, Netcdf_att_free, na2);
    CLONESETUP(clone, att);
    return clone;
}

#copy(Var_or_File) ⇒ Object



1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
# File 'ext/netcdfraw.c', line 1437

VALUE
NetCDF_att_copy(VALUE Att,VALUE Var_or_File)
{
  int ncid_in,ncid_out;
  int status;
  int varid_in,varid_out;
  char *att_name;
  struct NetCDFAtt *Netcdf_att;
  struct NetCDFVar *Netcdf_var;
  struct Netcdf    *ncfile;
  struct NetCDFAtt *Netcdf_att_out;

  rb_secure(4);
  Data_Get_Struct(Att,struct NetCDFAtt,Netcdf_att);
  ncid_in=Netcdf_att->ncid;
  varid_in=Netcdf_att->varid;
  att_name=Netcdf_att->name;

  if( rb_obj_is_kind_of(Var_or_File, cNetCDFVar) ){
      Data_Get_Struct(Var_or_File,struct NetCDFVar, Netcdf_var);
      ncid_out=Netcdf_var->ncid;
      varid_out=Netcdf_var->varid;
  } else if ( rb_obj_is_kind_of(Var_or_File, cNetCDF) ){
      Data_Get_Struct(Var_or_File,struct Netcdf, ncfile);
      ncid_out=ncfile->ncid;
      varid_out=NC_GLOBAL;
  } else {
      rb_raise(rb_eNetcdfError,"The argument must be a NetCDFVar or a NetCDF");
  }

  status = nc_copy_att(ncid_in,varid_in,att_name,ncid_out,varid_out);
  if(status != NC_NOERR) NC_RAISE(status);
  Netcdf_att_out = NetCDF_att_init(ncid_out,varid_out,att_name);
  return (Data_Wrap_Struct(cNetCDFAtt,0,Netcdf_att_free,Netcdf_att_out));
}

#deleteObject



1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
# File 'ext/netcdfraw.c', line 1517

VALUE
NetCDF_att_delete(VALUE Att)
{
  int ncid;
  int status;
  int varid;
  char *c_att_name;
  struct NetCDFAtt *Netcdf_att;

  rb_secure(4);
  Data_Get_Struct(Att,struct NetCDFAtt,Netcdf_att);

  ncid=Netcdf_att->ncid;
  varid=Netcdf_att->varid;
  c_att_name=Netcdf_att->name;

  status = nc_del_att(ncid,varid,c_att_name);
  if(status != NC_NOERR) NC_RAISE(status);
  
  return Qnil;
}

#getObject



1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
# File 'ext/netcdfraw.c', line 1554

VALUE
NetCDF_att_get(VALUE Att)
{
  int ncid;
  int varid;
  char *c_attname;
  int status;
  struct NetCDFAtt *Netcdf_att;
  nc_type xtypep;
  size_t lenp;
  int attlen[1];    /* NArray uses int instead of size_t */
  char *tp;
  unsigned char *up;
  short *sp;
  int *ip;
  float *fp;
  double *dp;
  VALUE NArray;
  VALUE str;

  Data_Get_Struct(Att,struct NetCDFAtt,Netcdf_att);
  ncid = Netcdf_att->ncid;
  varid = Netcdf_att->varid;
  c_attname = Netcdf_att->name;

  status = nc_inq_atttype(ncid,varid,c_attname,&xtypep);
  if(status != NC_NOERR) NC_RAISE(status);

  switch(xtypep){
  case NC_CHAR:
    status = nc_inq_attlen(ncid,varid,c_attname,&lenp);
    if(status != NC_NOERR) NC_RAISE(status);
    tp = ALLOCA_N(char,lenp+1);
    tp[lenp]= '\0';
    status = nc_get_att_text(ncid,varid,c_attname,tp);
    if(status != NC_NOERR) NC_RAISE(status);
    str = rb_str_new2(tp);
    OBJ_TAINT(str);
    return(str);
    break;
  case NC_BYTE:
    status = nc_inq_attlen(ncid,varid,c_attname,&lenp);
    if(status != NC_NOERR) NC_RAISE(status);

    attlen[0]=lenp;
    Cbyte_to_NArray(NArray,1,attlen,up);
  
    status = nc_get_att_uchar(ncid,varid,c_attname,up);
    if(status != NC_NOERR) NC_RAISE(status);

    OBJ_TAINT(NArray);
    return NArray;
    break;
  case NC_SHORT:
    status = nc_inq_attlen(ncid,varid,c_attname,&lenp);
    if(status != NC_NOERR) NC_RAISE(status);

    attlen[0]=lenp;
    Csint_to_NArray(NArray,1,attlen,sp);
    
    status = nc_get_att_short(ncid,varid,c_attname,sp);
    if(status != NC_NOERR) NC_RAISE(status);
    OBJ_TAINT(NArray);
    return NArray;
    break;
  case NC_INT:
    status = nc_inq_attlen(ncid,varid,c_attname,&lenp);
    if(status != NC_NOERR) NC_RAISE(status);
    
    attlen[0]=lenp;
    Clint_to_NArray(NArray,1,attlen,ip);
    
    status = nc_get_att_int(ncid,varid,c_attname,ip);
    if(status != NC_NOERR) NC_RAISE(status);

    OBJ_TAINT(NArray);
    return NArray;
    break;
  case NC_FLOAT:
    status = nc_inq_attlen(ncid,varid,c_attname,&lenp);
    if(status != NC_NOERR) NC_RAISE(status);

    attlen[0]=lenp;
    Cfloat_to_NArray(NArray,1,attlen,fp);
    
    status = nc_get_att_float(ncid,varid,c_attname,fp);
    if(status != NC_NOERR) NC_RAISE(status);

    OBJ_TAINT(NArray);
    return NArray;
    break;
  case NC_DOUBLE:
    status = nc_inq_attlen(ncid,varid,c_attname,&lenp);
    if(status != NC_NOERR) NC_RAISE(status);

    attlen[0]=lenp;
    Cdouble_to_NArray(NArray,1,attlen,dp);
    
    status = nc_get_att_double(ncid,varid,c_attname,dp);
    if(status != NC_NOERR) NC_RAISE(status);
    OBJ_TAINT(NArray);
    return NArray;
    break;
  default:
    rb_raise(rb_eNetcdfError,"atttype isn't supported in netCDF");
  }
  return Qnil;
}

#inspectObject



773
774
775
# File 'lib/numru/netcdf.rb', line 773

def inspect
  'NetCDFAtt:'+name
end

#nameObject



1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
# File 'ext/netcdfraw.c', line 1251

VALUE
NetCDF_att_inq_name(VALUE Att)
{
  char *c_att_name;
  struct NetCDFAtt *Netcdf_att;
  VALUE str;

  Data_Get_Struct(Att,struct NetCDFAtt,Netcdf_att);
  c_att_name=Netcdf_att->name;
  
  str = rb_str_new2(c_att_name);
  OBJ_TAINT(str);
  return(str);
}

#name=(new_att_name) ⇒ Object



1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
# File 'ext/netcdfraw.c', line 1266

VALUE
NetCDF_att_rename(VALUE Att,VALUE new_att_name)
{
  int ncid;
  int status;
  int varid;
  char *c_att_name;
  char *c_new_att_name;
  struct NetCDFAtt *Netcdf_att;
  Data_Get_Struct(Att,struct NetCDFAtt,Netcdf_att);
  ncid=Netcdf_att->ncid;
  varid=Netcdf_att->varid;
  
  c_att_name=Netcdf_att->name;
  
  Check_Type(new_att_name,T_STRING);
  SafeStringValue(new_att_name);
  c_new_att_name=StringValueCStr(new_att_name);
  
  status = nc_rename_att(ncid,varid,c_att_name,c_new_att_name);
  if(status != NC_NOERR) NC_RAISE(status);
  
  strcpy(Netcdf_att->name,c_new_att_name);
  return Qnil;
}

#put(val, atttype = nil) ⇒ Object



769
770
771
# File 'lib/numru/netcdf.rb', line 769

def put(val,atttype=nil)
   putraw(val,atttype)
end

#putrawObject

atttype: nil or a String (“string”,“int”,etc). If nil,

the type of attribute is determined from the type of value


1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
# File 'ext/netcdfraw.c', line 1539

VALUE
NetCDF_att_put(VALUE Att,VALUE value,VALUE atttype)
     /*
      * atttype: nil or a String ("string","int",etc). If nil,
      *          the type of attribute is determined from the type of value
      */
{
  struct NetCDFAtt *ncatt;
 
  rb_secure(4);
  Data_Get_Struct(Att,struct NetCDFAtt,ncatt);
  return( NetCDF_put_att__(ncatt->ncid, ncatt->name, value, 
			   atttype, ncatt->varid) );
}

#typecodeObject



1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
# File 'ext/netcdfraw.c', line 1496

VALUE
NetCDF_att_typecode(VALUE Att)
{
  int ncid;
  int varid;
  int status;
  char *att_name;
  struct NetCDFAtt *Netcdf_att;
  nc_type xtypep;

  Data_Get_Struct(Att,struct NetCDFAtt,Netcdf_att);
  ncid = Netcdf_att->ncid;
  varid = Netcdf_att->varid;
  att_name = Netcdf_att->name;

  status = nc_inq_atttype(ncid,varid,att_name,&xtypep);
  if(status != NC_NOERR) NC_RAISE(status);
  
  return(INT2NUM(nctype2natypecode(xtypep)));
}