Array subscript for VECTOR must have same size as source expression [message #76661] |
Fri, 24 June 2011 08:27  |
Rohit Deshpande
Messages: 6 Registered: June 2011
|
Junior Member |
|
|
Hello Everyone,
I am a beginner in IDL and I have been working on a project. I explain
it below:
1. The Idea: Read a bunch of FITS files in IDL. They have structure so
I use MRDFITS. I would like to read each one of them in a separate
variable and plot them. Given that each file has X by Y dimension,
where X is always = 19 while Y changes but is mostly 1636.
2. The Code:
im = fltarr(n)
all_barytimes = dblarr(19,4000)
all_normflux = dblarr(19,4000)
FOR i = 0, n-1 DO BEGIN
; where filenames are the list of fits files I am reading
it.
im = mrdfits(file+'raw_test/'+string(filenames[i]),1,head)
all_barytimes[i,*] = im.BARYTIME
all_normflux[i,*] = im.AP_CORR_FLUX
ENDFOR
3. The Error:
IDL> lcs1
% READCOL: 21 valid lines read
MRDFITS: Binary table. 19 columns by 1639 rows.
% Array subscript for ALL_BARYTIMES must have same size as source
expression.
% Execution halted at: LCS1
Please let me know how to make it work.
Thanks!
|
|
|
Re: Array subscript for VECTOR must have same size as source expression [message #76745 is a reply to message #76661] |
Sun, 26 June 2011 07:22  |
Rohit Deshpande
Messages: 6 Registered: June 2011
|
Junior Member |
|
|
On Jun 24, 3:27 pm, Paolo <pgri...@gmail.com> wrote:
> Well,
>
> this is a typical errors that you will encounter many times
> in your idl career.
>
> The line
>
> all_barytimes[i,*] = im.BARYTIME
>
> tries to assign a variable im.BARYTIME into an array all_barytimes,
> specifically into a particular column of the array.
>
> The error specifies that im.BARYTIME does not fit into
> all_barytimes[i,*]
> (likely because it has a different number of elements and/or
> dimensions).
>
> Here's an example showing the problem
>
> IDL> a=fltarr(4,4)
> IDL> b=fltarr(5)
> IDL> a[1,*]=b
> % Array subscript for A must have same size as source expression.
> % Execution halted at: $MAIN$
>
> see? can't fit the 5 elements of b into a column of a.
>
> Ciao,
> Paolo
>
> On Jun 24, 11:27 am, Rohit Deshpande <singlebin...@gmail.com> wrote:
>
>
>
>
>
>
>
>> Hello Everyone,
>
>> I am a beginner in IDL and I have been working on a project. I explain
>> it below:
>
>> 1. The Idea: Read a bunch of FITS files in IDL. They have structure so
>> I use MRDFITS. I would like to read each one of them in a separate
>> variable and plot them. Given that each file has X by Y dimension,
>> where X is always = 19 while Y changes but is mostly 1636.
>
>> 2. The Code:
>
>> im = fltarr(n)
>> all_barytimes = dblarr(19,4000)
>> all_normflux = dblarr(19,4000)
>
>> FOR i = 0, n-1 DO BEGIN
>> ; where filenames are the list of fits files I am reading
>> it.
>> im = mrdfits(file+'raw_test/'+string(filenames[i]),1,head)
>> all_barytimes[i,*] = im.BARYTIME
>> all_normflux[i,*] = im.AP_CORR_FLUX
>> ENDFOR
>
>> 3. The Error:
>
>> IDL> lcs1
>> % READCOL: 21 valid lines read
>> MRDFITS: Binary table. 19 columns by 1639 rows.
>> % Array subscript for ALL_BARYTIMES must have same size as source
>> expression.
>> % Execution halted at: LCS1
>
>> Please let me know how to make it work.
>
>> Thanks!
Thank you so much. I have now created a double array outside the FOR
loop in the following way. This help and I have no errors:
all_barytimes = dblarr(n,4450)
all_normflux = dblarr(n,4450)
FOR i = 0, n-1 DO BEGIN
im = mrdfits(file+'raw_test/'+string(filenames[i]+'.fits'),1,head )
arrayend=n_elements(im.BARYTIME)-1
all_barytimes[i,0:arrayend] = im.BARYTIME
all_normflux[i,0:arrayend] = im.AP_CORR_FLUX
|
|
|
Re: Array subscript for VECTOR must have same size as source expression [message #76756 is a reply to message #76661] |
Fri, 24 June 2011 12:27  |
pgrigis
Messages: 436 Registered: September 2007
|
Senior Member |
|
|
Well,
this is a typical errors that you will encounter many times
in your idl career.
The line
all_barytimes[i,*] = im.BARYTIME
tries to assign a variable im.BARYTIME into an array all_barytimes,
specifically into a particular column of the array.
The error specifies that im.BARYTIME does not fit into
all_barytimes[i,*]
(likely because it has a different number of elements and/or
dimensions).
Here's an example showing the problem
IDL> a=fltarr(4,4)
IDL> b=fltarr(5)
IDL> a[1,*]=b
% Array subscript for A must have same size as source expression.
% Execution halted at: $MAIN$
see? can't fit the 5 elements of b into a column of a.
Ciao,
Paolo
On Jun 24, 11:27 am, Rohit Deshpande <singlebin...@gmail.com> wrote:
> Hello Everyone,
>
> I am a beginner in IDL and I have been working on a project. I explain
> it below:
>
> 1. The Idea: Read a bunch of FITS files in IDL. They have structure so
> I use MRDFITS. I would like to read each one of them in a separate
> variable and plot them. Given that each file has X by Y dimension,
> where X is always = 19 while Y changes but is mostly 1636.
>
> 2. The Code:
>
> im = fltarr(n)
> all_barytimes = dblarr(19,4000)
> all_normflux = dblarr(19,4000)
>
> FOR i = 0, n-1 DO BEGIN
> ; where filenames are the list of fits files I am reading
> it.
> im = mrdfits(file+'raw_test/'+string(filenames[i]),1,head)
> all_barytimes[i,*] = im.BARYTIME
> all_normflux[i,*] = im.AP_CORR_FLUX
> ENDFOR
>
> 3. The Error:
>
> IDL> lcs1
> % READCOL: 21 valid lines read
> MRDFITS: Binary table. 19 columns by 1639 rows.
> % Array subscript for ALL_BARYTIMES must have same size as source
> expression.
> % Execution halted at: LCS1
>
> Please let me know how to make it work.
>
> Thanks!
|
|
|