;+ ; NAME: ; SPINMODEL_INTERP_N.PRO ; ; PURPOSE: ; Given a spin model and spin count (or array of counts), calculate ; the sun pulse time and spin period at each input count. ; ; CATEGORY: ; TDAS ; ; CALLING SEQUENCE: ; spinmodel->interp_n,count=input_counts,$ ; time=output_times, spinper=output_spinper ; ; INPUTS: ; Count: A long integer (or long integer array) specifying the spin ; count to use. If the input is a scalar, all outputs ; will be scalars; otherwise, all outputs are arrays having ; the same size as the input counts. ; ; OUTPUTS: ; spinper: Optional keyword parameter to receive spin period values. ; time: Optional keyword parameter to receive sun pulse time ; of each input count. ; ; KEYWORDS: ; ; /COUNT: Required input keyword argument specifying a time or array of times. ; /SPINPER: Optional keyword argument to receive spin period values. ; /TIME: Optional keyword argument to receive sun pulse times. ; ; PROCEDURE: ; Find the spinmodel segment containing the input spin count. ; Invert phi(t) function to find time corresponding to this count. ; Use b and c segment parameters to determine the spin period ; at the sunpulse time. ; ; EXAMPLE: ; ; Retrieve first 100 sun pulse times included in model for THA: ; modelptr=spinmodel_get_ptr('a') ; spinmodel_interp_n,model=modelptr,count=lindgen(100),time=output_times ; ;- pro thm_spinmodel::interp_n,count=count,time=time,spinper=spinper if (keyword_set(count) NE 1) then begin message,'Required input keyword parameter COUNT not present.' end n=count sp = self.segs_ptr if (ptr_valid(sp) NE 1) then begin message,'Spinmodel segment pointer is invalid' end inp_count=n_elements(count) if (inp_count EQ 1) then begin seg_index = self->findseg_n(count) seg = (*sp)[seg_index] segment_interp_n,seg,count,my_time,my_spinper if (arg_present(time) EQ 1) then time=my_time if (arg_present(spinper) EQ 1) then spinper=my_spinper endif else begin my_time=dblarr(inp_count) my_spinper=dblarr(inp_count) for i=0L,inp_count-1L do begin seg_index = self->findseg_n(count[i]) seg = (*sp)[seg_index] segment_interp_n,seg,count[i],tl,spper my_time[i]=tl my_spinper[i]=spper endfor if (arg_present(time) EQ 1) then time=my_time if (arg_present(spinper) EQ 1) then spinper=my_spinper endelse end