miriad 4.1.0.4 → 4.1.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
- # $Id: Rakefile 18 2008-04-23 17:31:29Z davidm $
1
+ # $Id: Rakefile 23 2008-04-30 21:42:24Z davidm $
2
2
 
3
3
  require 'rubygems'
4
4
  require 'rake/gempackagetask'
@@ -14,7 +14,7 @@ run_swig unless test ?e, 'ext/miriad_wrap.c'
14
14
  spec = Gem::Specification.new do |s|
15
15
  # Basics
16
16
  s.name = 'miriad'
17
- s.version = '4.1.0.4'
17
+ s.version = '4.1.0.6'
18
18
  s.summary = 'Ruby interface to MIRIAD'
19
19
  s.description = <<-EOS
20
20
  The MIRIAD-Ruby package...
data/ext/miriad_ruby.c CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * $Id: miriad_ruby.c 18 2008-04-23 17:31:29Z davidm $
2
+ * $Id: miriad_ruby.c 23 2008-04-30 21:42:24Z davidm $
3
3
  *
4
4
  * This file is just to document the classes/methods from the SWIG wrappers
5
5
  * that we want to document. It is for rdoc, not gcc. At least for now.
@@ -95,10 +95,12 @@ static VALUE uvio_probvr;
95
95
  * +data+. Generally, this works well only for Strings and NArrays, but not
96
96
  * for Numeric types. For full control, specify +type+ as one of...
97
97
  *
98
- * * <tt>?a</tt> - ASCII data
99
- * * <tt>?i</tt> - Integer data
100
- * * <tt>?r</tt> - Single precision real data
101
- * * <tt>?d</tt> - Double precision real data
98
+ * * <tt>'a'</tt> (or <tt>?a</tt>) - ASCII data
99
+ * * <tt>'i'</tt> (or <tt>?i</tt>) - Integer data
100
+ * * <tt>'r'</tt> (or <tt>?r</tt>) - Single precision real data
101
+ * * <tt>'d'</tt> (or <tt>?d</tt>) - Double precision real data
102
+ * * <tt>'c'</tt> (or <tt>?c</tt>) - Single precision complex data [NOT YET
103
+ * SUPPORTED!]
102
104
  */
103
105
  static VALUE uvio_putvr;
104
106
 
@@ -449,7 +451,8 @@ static VALUE uvio_track;
449
451
  *
450
452
  * +object+ can be either <tt>'source'</tt> or <tt>'purpose'</tt>.
451
453
  *
452
- * +datasel+ is either 1 to select or 0 to reject.
454
+ * +datasel+ is either +true+ or <tt>1</tt> to select; +false+ or <tt>0</tt> to
455
+ * reject.
453
456
  *
454
457
  * +value+ is a String that will be used as the search critereon.
455
458
  *
@@ -474,7 +477,8 @@ static VALUE uvio_sela;
474
477
  * +object+ is a String giving the parameter on which a select/discard
475
478
  * criterion is based. See the list below for permissible values for +object+.
476
479
  *
477
- * +datasel+ is either 1 to select or 0 to reject.
480
+ * +datasel+ is either +true+ or <tt>1</tt> to select; +false+ or <tt>0</tt> to
481
+ * reject.
478
482
  *
479
483
  * <tt>p1</tt> and <tt>p2</tt>, both Floats, give added numerical parameters.
480
484
  * Generally <tt>p1</tt> and <tt>p2</tt> give a range of parameter values to
data/ext/miriad_ruby.i CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * $Id: miriad_ruby.i 18 2008-04-23 17:31:29Z davidm $
2
+ * $Id: miriad_ruby.i 23 2008-04-30 21:42:24Z davidm $
3
3
  *
4
4
  * Ruby specific typemaps for MIRIAD Swig wrapper
5
5
  */
@@ -241,7 +241,11 @@ PUTVRX_TYPEMAP(NA_DFLOAT,double,NUM2DBL);
241
241
 
242
242
  // putvr typemap.
243
243
  %typemap(in) (int type) {
244
- $1 = NUM2INT($input);
244
+ if(TYPE($input) == T_STRING) {
245
+ $1 = (int)((RSTRING($input)->ptr)[0]);
246
+ } else {
247
+ $1 = NUM2INT($input);
248
+ }
245
249
  switch($1) {
246
250
  case 'a': $1 = H_BYTE; break;
247
251
  case 'i': $1 = H_INT; break;
@@ -377,6 +381,17 @@ PUTVRX_TYPEMAP(NA_DFLOAT,double,NUM2DBL);
377
381
  }
378
382
  }
379
383
 
384
+ // Typemap for datasel parameter of sela() and select()
385
+ %typemap(in) (int datasel) {
386
+ if($input == Qfalse) {
387
+ $1 = 0;
388
+ } else if($input == Qtrue) {
389
+ $1 = 1;
390
+ } else {
391
+ $1 = NUM2INT($input);
392
+ }
393
+ }
394
+
380
395
  // Make updated() a predicate method
381
396
  %predicate updated();
382
397
 
data/ext/miriad_wrap.c CHANGED
@@ -2517,7 +2517,11 @@ _wrap_Uvio_putvr(int argc, VALUE *argv, VALUE self) {
2517
2517
  }
2518
2518
  if (argc > 2) {
2519
2519
  {
2520
- arg5 = NUM2INT(argv[2]);
2520
+ if(TYPE(argv[2]) == T_STRING) {
2521
+ arg5 = (int)((RSTRING(argv[2])->ptr)[0]);
2522
+ } else {
2523
+ arg5 = NUM2INT(argv[2]);
2524
+ }
2521
2525
  switch(arg5) {
2522
2526
  case 'a': arg5 = H_BYTE; break;
2523
2527
  case 'i': arg5 = H_INT; break;
@@ -3373,8 +3377,6 @@ _wrap_Uvio_sela(int argc, VALUE *argv, VALUE self) {
3373
3377
  int res2 ;
3374
3378
  char *buf2 = 0 ;
3375
3379
  int alloc2 = 0 ;
3376
- int val3 ;
3377
- int ecode3 = 0 ;
3378
3380
  int res4 ;
3379
3381
  char *buf4 = 0 ;
3380
3382
  int alloc4 = 0 ;
@@ -3392,11 +3394,15 @@ _wrap_Uvio_sela(int argc, VALUE *argv, VALUE self) {
3392
3394
  SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char *","sela", 2, argv[0] ));
3393
3395
  }
3394
3396
  arg2 = (char *)(buf2);
3395
- ecode3 = SWIG_AsVal_int(argv[1], &val3);
3396
- if (!SWIG_IsOK(ecode3)) {
3397
- SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "int","sela", 3, argv[1] ));
3398
- }
3399
- arg3 = (int)(val3);
3397
+ {
3398
+ if(argv[1] == Qfalse) {
3399
+ arg3 = 0;
3400
+ } else if(argv[1] == Qtrue) {
3401
+ arg3 = 1;
3402
+ } else {
3403
+ arg3 = NUM2INT(argv[1]);
3404
+ }
3405
+ }
3400
3406
  res4 = SWIG_AsCharPtrAndSize(argv[2], &buf4, NULL, &alloc4);
3401
3407
  if (!SWIG_IsOK(res4)) {
3402
3408
  SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char *","sela", 4, argv[2] ));
@@ -3434,8 +3440,6 @@ _wrap_Uvio_select(int argc, VALUE *argv, VALUE self) {
3434
3440
  int res2 ;
3435
3441
  char *buf2 = 0 ;
3436
3442
  int alloc2 = 0 ;
3437
- int val3 ;
3438
- int ecode3 = 0 ;
3439
3443
  double val4 ;
3440
3444
  int ecode4 = 0 ;
3441
3445
  double val5 ;
@@ -3454,11 +3458,15 @@ _wrap_Uvio_select(int argc, VALUE *argv, VALUE self) {
3454
3458
  SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "char *","select", 2, argv[0] ));
3455
3459
  }
3456
3460
  arg2 = (char *)(buf2);
3457
- ecode3 = SWIG_AsVal_int(argv[1], &val3);
3458
- if (!SWIG_IsOK(ecode3)) {
3459
- SWIG_exception_fail(SWIG_ArgError(ecode3), Ruby_Format_TypeError( "", "int","select", 3, argv[1] ));
3460
- }
3461
- arg3 = (int)(val3);
3461
+ {
3462
+ if(argv[1] == Qfalse) {
3463
+ arg3 = 0;
3464
+ } else if(argv[1] == Qtrue) {
3465
+ arg3 = 1;
3466
+ } else {
3467
+ arg3 = NUM2INT(argv[1]);
3468
+ }
3469
+ }
3462
3470
  if (argc > 2) {
3463
3471
  ecode4 = SWIG_AsVal_double(argv[2], &val4);
3464
3472
  if (!SWIG_IsOK(ecode4)) {
data/lib/miriad.rb CHANGED
@@ -7,12 +7,13 @@
7
7
  # astronomy related methods to Ruby classes.
8
8
  #
9
9
  #--
10
- # $Id: miriad.rb 18 2008-04-23 17:31:29Z davidm $
10
+ # $Id: miriad.rb 23 2008-04-30 21:42:24Z davidm $
11
11
  #++
12
12
 
13
13
  require 'rbconfig'
14
14
  require 'rubygems'
15
15
  require 'date'
16
+ require 'enumerator'
16
17
  require 'narray'
17
18
  miriad_shared_lib = 'miriad.' + Config::CONFIG['DLEXT']
18
19
  require miriad_shared_lib
@@ -126,6 +127,9 @@ class DateTime
126
127
  # The J2000 epoch
127
128
  J2000 = civil(2000,1,1,12)
128
129
 
130
+ # The sidereal rotation rate of Earth in radians per second
131
+ OMEGA = 7.29211538e-5
132
+
129
133
  # Create a +DateTime+ object from a numeric Astronomical Julian Date.
130
134
  def self.ajd(d)
131
135
  J2000 + d - J2000.ajd
@@ -329,7 +333,7 @@ module Miriad
329
333
  # and <tt>xyz2</tt> in the direction of +obsra+, +obsdec+ (i.e. right
330
334
  # ascension and declination in the current epoch) at the local apparent
331
335
  # sidereal time +lst+. <tt>xyz1</tt> and <tt>xyz2</tt> are three element
332
- # arrays containing geocentric coordinates of the baseline endpoints, and
336
+ # arrays containing equitorial coordinates of the baseline endpoints, and
333
337
  # +obsra+, +obsdec+, and +lst+ are all in radians
334
338
  #
335
339
  # The body of this method was transcribed from the MIRIAD source file
@@ -358,7 +362,7 @@ module Miriad
358
362
  # call-seq:
359
363
  # Miriad.neu2xyz(n, e, u, latitude) -> [x, y, z]
360
364
  #
361
- # Convert topoceptric coordinates to geocentric coordinates. If given,
365
+ # Convert topoceptric coordinates to equitorial coordinates. If given,
362
366
  # +latitude+ should be in radians. If +latitude+ is not given, the value
363
367
  # from <tt>ENV['LATITUDE']</tt> (which should be in degrees in
364
368
  # <tt>dd:mm:ss.sss</tt> or <tt>dd.ddd</tt> format) will be used.
@@ -366,7 +370,10 @@ module Miriad
366
370
  # Output coordinates will be in the same units as the input coordinates.
367
371
  #
368
372
  # See also Miriad.xyz2neu
369
- def self.neu2xyz(n, e, u, latitude=String(ENV['LATITUDE']).dms_to_d.d2r)
373
+ def self.neu2xyz(*args)
374
+ n, e, u, latitude, extra = args.flatten!
375
+ latitude ||= ENV.fetch('LATITUDE','0.0').dms_to_d.d2r
376
+
370
377
  sinlat = Math.sin(latitude)
371
378
  coslat = Math.cos(latitude)
372
379
  [
@@ -386,7 +393,7 @@ module Miriad
386
393
  # call-seq:
387
394
  # Miriad.xyz2nue(x, y, z, latitude) -> [n, e, u]
388
395
  #
389
- # Convert geocentric coordinates to topocentric coordinates. If given,
396
+ # Convert equitorial coordinates to topocentric coordinates. If given,
390
397
  # +latitude+ should be in radians. If +latitude+ is not given, the value
391
398
  # from <tt>ENV['LATITUDE']</tt> (which should be in degrees in
392
399
  # <tt>dd:mm:ss.sss</tt> or <tt>dd.ddd</tt> format) will be used.
@@ -446,6 +453,26 @@ module Miriad
446
453
  [az, el]
447
454
  end
448
455
 
456
+ # call-seq: Miriad.fringe_rate(bx, by, obsra, obsdec, lst, freq)
457
+ #
458
+ # Computes the Earth rotation synthesis fringe rate for a source at +obsra+
459
+ # and +obsdec+ at local sidereal time +lst+ and sky frequency +freq+ as seen
460
+ # by a baseline with X and Y equitorial components +bx+ and +by+.
461
+ #
462
+ # The units of the result depends on the the units of the inputs. To get
463
+ # turns per second (i.e. Hz), +bx+ and +by+ should be in nanoseconds and
464
+ # +freq+ should be in GHz (alternatively, +bx+ and +by+ in seconds and +freq+
465
+ # in Hz). To get radians per second, multiply +freq+ by 2*Math::PI. To get
466
+ # degrees per second, multiply +freq+ by 360.
467
+ def self.fringe_rate(bx, by, obsra, obsdec, lst, freq)
468
+ ha = lst - obsra
469
+ cosha = Math.cos(ha)
470
+ sinha = Math.sin(ha)
471
+ cosd = Math.cos(obsdec)
472
+
473
+ -freq * DateTime::OMEGA * (bx*sinha + by*cosha) * cosd
474
+ end
475
+
449
476
  # call-seq: Miriad.parang(obsra, obsdec, lst, latitude) -> parallactic_angle
450
477
  #
451
478
  # Compute parallactic angle of an altitude-azimuth telescope. Accuracy is
@@ -613,8 +640,11 @@ module Miriad
613
640
  # call +to_a+ on the returned value (otherwise your +u+ variable might end
614
641
  # up as a three element NArray and +v+ and +w+ nil.)
615
642
  def coord() preamble[0..2]; end
643
+ # Computes the uv angle (in radians) from this Visibility's preamble using
644
+ # <tt>atan2(v,u)</tt>.
645
+ def uvangle() Math.atan2(preamble[1], preamble[0]); end
616
646
  # Computes the uv distance from this Visibility's preamble.
617
- def uvdist() Math.sqrt(preamble[0]**2+preamble[1]**2); end
647
+ def uvdist() Math.hypot(preamble[0], preamble[1]); end
618
648
  # Returns the Julian date from this Visibility's preamble.
619
649
  def jd() preamble[3]; end
620
650
  # Returns the baseline number from this Visibility's preamble.
@@ -731,9 +761,119 @@ module Miriad
731
761
  vis
732
762
  end
733
763
 
764
+ # call-seq: nants -> Integer
765
+ #
766
+ # Returns the current value of the _nants_ uv variable or zero if it is not
767
+ # (yet) present.
768
+ def nants
769
+ getvr('nants') || 0
770
+ end
771
+
772
+ # call-seq:
773
+ # antpos -> [[0,0,0], [Xa1,Ya1,Za1], ..., [Xan, Yan, Zan]]
774
+ # antpos(a1, a2) -> [[Xa1,Ya1,Za1], [Xa2, Ya2, Za2]]
775
+ # antpos([a1, a2]) -> [[Xa1,Ya1,Za1], [Xa2, Ya2, Za2]]
776
+ # antpos(a) -> [Xa,Ya,Za]
777
+ #
778
+ # If called without a parameter (other than the optional Hash, see below),
779
+ # returns the current value of the _antpos_ uv variable array arranged for
780
+ # convenient indexing by a 1-based antenna number (e.g. as retuned by
781
+ # basant). The 0th position in the array contains a [0,0,0] place holder
782
+ # position.
783
+ #
784
+ # If called with multiple integer parameters or an Array of Integers,
785
+ # returns an array of positions of the specified antennas. In this case,
786
+ # the returned array will not contain a <tt>[0,0,0]</tt> placeholder in the
787
+ # 0th position.
788
+ #
789
+ # If called with a single Integer parameter, returns the position of the
790
+ # specified antenna.
791
+ #
792
+ # An optional Hash can be passed in as the last parameter to specify units
793
+ # and coordinates. The following key/value entries are recognized:
794
+ #
795
+ # :coord => :xyz:: Position(s) in equitorial coordinates (default)
796
+ # :coord => :neu:: Position(s) in topocentric coordinates (uses the
797
+ # _latitude_ uv variable for conversion from XYZ to
798
+ # NEU)
799
+ # :coord => :uvw:: Projection of position in the direction of _obsra_
800
+ # and _obsdec_ at the local apparent sidereal time
801
+ # _lst_
802
+ #
803
+ # :units => :ns:: Position(s) in nanoseconds (default)
804
+ # :units => :meter:: Position(s) in meters
805
+ # :units => :lamda:: Position(s) in wavelengths
806
+ # :units => :klamda:: Position(s) in kilo-wavelengths
807
+ #
808
+ # The following are some examples of common usage:
809
+ #
810
+ # a1xyz_ns, a2xyz_ns = uvio.antpos(uvio.basant)
811
+ #
812
+ # ant5neu_m = uvio.antpos(5, :coord => :neu, :units => :meter)
813
+ def antpos(*args)
814
+ opts = {:coord => :xyz, :units => :ns}
815
+ opts.merge!(args.pop) if Hash === args[-1]
816
+ return nil unless ap = getvr('antpos')
817
+ args.flatten!
818
+ ap = ap.enum_slice(ap.length/3).entries.transpose.unshift([0,0,0])
819
+ ap = ap.values_at(*args.flatten) if args.length > 0
820
+
821
+ # Do units scaling, if requested
822
+ scale = case opts[:units]
823
+ when :ns: nil
824
+ when :meter: Math::CKMS / 1e6
825
+ when :lambda: getvr('freq') || 1.0
826
+ when :klambda: (getvr('freq') || 1.0) / 1000
827
+ else raise "Unrecognized units '#{opts[:units]}'"
828
+ end
829
+ ap.map!{|p| p.map!{|c| c*scale}} if scale
830
+
831
+ # Do coordinate conversion, if requested
832
+ if opts[:coord] == :neu
833
+ latitude = getvr('latitud') || 0.0
834
+ ap.map!{|p| Miriad.xyz2neu(p,latitude)}
835
+ elsif opts[:coord] == :uvw
836
+ obsra = getvr('obsra') || 0.0
837
+ obsdec = getvr('obsdec') || 0.0
838
+ lst = getvr('lst') || 0.0
839
+ ap.map!{|p| Miriad.xyz2uvw([0.0, 0.0, 0.0], p, obsra, obsdec, lst)}
840
+ elsif opts[:coord] != :xyz
841
+ raise "Unrecognized coordinate system '#{opts[:coord]}'"
842
+ end
843
+
844
+ # Return single position if only one was asked for
845
+ args.length == 1 ? ap[0] : ap
846
+ end
847
+
848
+ # call-seq:
849
+ # baseline -> [bx, by, bz]
850
+ # baseline(a1, a2) -> [Xa2-Xa1, Ya2-Ya1, Za2-Za1]
851
+ #
852
+ # If called without a parameter (other than the optional Hash, see below),
853
+ # returns the dimensions of the current baseline.
854
+ #
855
+ # If called with two antenna numbers, returns the dimension of their
856
+ # baseline. The two antenna numbers will be swapped if a1 > a2.
857
+ #
858
+ # In either case, an optional Hash can be passed in. This hash is passed
859
+ # to antpos, so see antpos for a decription of what options are available.
860
+ def baseline(*args)
861
+ opts = (Hash === args[-1]) ? args.pop : {}
862
+ a1, a2 = case args.length
863
+ when 0: basant
864
+ when 2: args
865
+ else raise ArgumentError(
866
+ "wrong number of arguments (#{args.length} for 0 or 2)")
867
+ end
868
+ a1, a2 = a2, a1 if a1 > a2
869
+ p1, p2 = antpos(a1, a2, opts)
870
+ [p2[0]-p1[0], p2[1]-p1[1], p2[2]-p1[2]]
871
+ end
872
+
734
873
  # call-seq: nchan -> Integer
735
874
  #
736
- # Returns the current value of the _nchan_ uv variable or zero if it is not (yet) present.
875
+ # Returns the current value of the _nchan_ uv variable or zero if it is not
876
+ # (yet) present.
737
877
  def nchan
738
878
  getvr('nchan') || 0
739
879
  end
@@ -769,11 +909,19 @@ module Miriad
769
909
  getvr('lst') - getvr('obsra') rescue 0.0
770
910
  end
771
911
 
912
+ # Computes the uv angle (in radians) from the current value of the _coord_
913
+ # uv variable using <tt>atan2(v,u)</tt>. Returns 0.0 if _coord_ is
914
+ # undefined or maldefined.
915
+ def uvangle
916
+ u, v, w = getvr('coord')
917
+ (u && v) ? Math.atan2(v, u) : 0.0
918
+ end
919
+
772
920
  # Computes the uv distance from the current value of the _coord_ uv
773
921
  # variable. Returns 0.0 if _coord_ is undefined or maldefined.
774
922
  def uvdist
775
923
  u, v, w = getvr('coord')
776
- (u && v) ? Math.sqrt(u**2+v**2) : 0.0
924
+ (u && v) ? Math.hypot(u, v) : 0.0
777
925
  end
778
926
 
779
927
  # Computes the azimuth and elevation from the current values of _lst_,
@@ -789,6 +937,25 @@ module Miriad
789
937
  Miriad.azel(obsra, obsdec, lst, latitude)
790
938
  end
791
939
 
940
+ # Computes the Earth rotation synthesis fringe rate in Hz using the current
941
+ # values of the _obsra_, _obsdec_, _lst_, _antpos_, and _baseline_ uv
942
+ # variables. +freq_ghz+ is the sky frequency, in GHz, for which the fringe
943
+ # rate will be determined. If it is not given, the _freq_ uv variable will
944
+ # be used.
945
+ def fringe_hz(freq_ghz = getvr('freq'))
946
+ bx, by, bz = baseline
947
+ obsra = getvr('obsra') || 0.0
948
+ obsdec = getvr('obsdec') || 0.0
949
+ lst = getvr('lst') || 0.0
950
+ freq_ghz ||= 0.0
951
+ Miriad.fringe_rate(bx, by, obsra, obsdec, lst, freq_ghz)
952
+ end
953
+
954
+ # Returns <tt>getvr('inttime')</tt> or 0.0 if it is not (yet) defined.
955
+ def tau
956
+ getvr('inttime') || 0.0
957
+ end
958
+
792
959
  # Computes the current parallactic angle from the current values of _lst_,
793
960
  # _obsra_, _obsdec_, and _latitude_. Missing components are assumed to be
794
961
  # 0.0.
@@ -809,6 +976,31 @@ module Miriad
809
976
  getvr('chi') || (parang + (getvr('evector') || 0.0))
810
977
  end
811
978
 
979
+ # Returns a Hash whose keys are the names of all uv variables present in
980
+ # this dataset, with corresponding values indicating the type code
981
+ # (suitable for passing to getvr()) of the uv variable.
982
+ #
983
+ # This reads the _vartable_ item, thus when using this method on a dataset
984
+ # opened in 'write' mode, you must call flush() before calling this method,
985
+ # otherwise the _vartable_ item will be up to date.
986
+ def vartable
987
+ v = {}
988
+ begin
989
+ item = haccess('vartable','r')
990
+ rescue
991
+ return nil
992
+ end
993
+ begin
994
+ while (line = hreadln(item))
995
+ type, name = line.split
996
+ v[name] = type[0,1]
997
+ end
998
+ ensure
999
+ hdaccess(item)
1000
+ end
1001
+ v
1002
+ end
1003
+
812
1004
  # call-seq:
813
1005
  # uvio['name'] -> value or nil
814
1006
  # uvio[:name] -> value or nil
@@ -834,10 +1026,12 @@ module Miriad
834
1026
  # well only for Strings and NArrays, but not for Numeric types. For full
835
1027
  # control, specify +type+ as one of...
836
1028
  #
837
- # * <tt>?a</tt> - ASCII data
838
- # * <tt>?i</tt> - Integer data
839
- # * <tt>?r</tt> - Single precision real data
840
- # * <tt>?d</tt> - Double precision real data
1029
+ # * <tt>'a'</tt> (or <tt>?a</tt>) - ASCII data
1030
+ # * <tt>'i'</tt> (or <tt>?i</tt>) - Integer data
1031
+ # * <tt>'r'</tt> (or <tt>?r</tt>) - Single precision real data
1032
+ # * <tt>'d'</tt> (or <tt>?d</tt>) - Double precision real data
1033
+ # * <tt>'c'</tt> (or <tt>?c</tt>) - Single precision complex data [NOT YET
1034
+ # SUPPORTED!]
841
1035
  def []=(*args)
842
1036
  n, t, v = case args.length
843
1037
  when 2: [args[0], -1, args[1]]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: miriad
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0.4
4
+ version: 4.1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - David MacMahon
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-04-23 00:00:00 -07:00
12
+ date: 2008-04-30 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -86,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
86
  requirements: []
87
87
 
88
88
  rubyforge_project: miriad
89
- rubygems_version: 1.1.0
89
+ rubygems_version: 1.1.1
90
90
  signing_key:
91
91
  specification_version: 2
92
92
  summary: Ruby interface to MIRIAD