📄 pent.pro
字号:
function pent,p,t,x,m,n;+; NAME:; PENT; PURPOSE:; Return the information entropy of a time series; EXPLANATION:; This function will return S, the information entropy of a time series; for a set of trial periods ;; CATEGORY:; Time series analysis, period finding, astronomical utilities.;; CALLING SEQUENCE:; Result = PENT(P, T, X, [N, M ] );; INPUTS:; P - array of trial period values.; T - array of observation times (same units as P).; X - array of observations.;; OPTIONAL INPUTS:; N - If four parameters are given then the 4th parameter is assumed; to be N. Then NxN boxes are used to calculate S.; M,N - If five parameters are given then parameter 4 is M and parameter; 5 is N. S is then calculated using MxN boxes - M partitions for the; phase and N partitions for the data.; ; OUTPUTS:; This function returns S, the information entropy of the time series for; the periods given in P as defined by Cincotta, Me'ndez & Nu'n~ez; (Astrophysical Journal 449, 231-235, 1995). The minima of S occur at; values of P where X shows periodicity.; ; PROCEDURE:; The procedure involves dividing the phase space into N^2 partitions ; (NxN boxes) and then calculating:; ; __ N^2; S = - \ mu_i . ln(mu_i) for all mu_i <> 0; /_ ; i = 1 ;; where mu_i is the number of data points in partition i normalised by ; the number of partitions.;; The option of using MxN boxes is an additional feature of this routine.;; EXAMPLE:;; To generate a similar sythetic data set to Cincotta et al. we; do the following:;; IDL> P0 = 173.015 ; Fundamental period; IDL> T = randomu(seed,400)*15000 ; 400 random observation times; IDL> A0 = 14.0 ; Mean magnitude; IDL> M0 = -0.5 * sin(2*!pi*T/P0) ; Fundamental mode; IDL> M1 = -0.15 * sin(4*!pi*T/P0) ; 1st harmonic; IDL> M2 = -0.05 * sin(6*!pi*T/P0) ; 2nd harmonic; IDL> sig = randomu(seed,400)*0.03 ; noise; IDL> U = A0 + M0 + M1 + M2 + sig ; Synthetic data; IDL> Ptest = 100. + findgen(2000)/2. ; Trial periods ; IDL> S = pent(Ptest,T,U) ; Calculate S; ... this takes a few seconds ...; IDL> plot,Ptest,S,xtitle="P",ytitle="S" ; plot S v. P; IDL> print,Ptest(where(S eq min(S))) ; Print best period (+/- 0.5);; The plot produced should be similar to Fig. 2 of Cincotta et al.;; RESTRICTIONS:;; My own (limited) experience with this routine suggests that it is not; as good as other techniques for finding weak, multi-periodic signals in ; poorly sampled data, but is good for establishing periods of eclipsing; binary stars when M is quite large (try MxN = 64x16, 128x16 or even ; 256x16). This suggests it may be good for other periodic light curves ; (Cepheids, RR Lyrae etc.).; I would be glad to receive reports of other peoples experience with; this technique (e-mail pflm@bro730.astro.ku.dk).;; MODIFICATION HISTORY:; Written by: Pierre Maxted, 14Sep95; Modifications:; Normalisation of S corrected, T-min(T) taken out of loop.; - Pierre Maxted, 15Sep95; Converted to IDL V5.0 W. Landsman September 1997;- on_error,2 ; return to caller; Check suitable no. of parameters have been entered. case N_params() of 3 : begin n = 8.0 m = 8.0 end 4 : begin n = float(fix(m)) m = n end 5 : begin m = float(fix(m)) n = float(fix(n)) end else : message,/noname,' Syntax - Result = ( P, T, X [ [,M ] ,N ])' endcase nbox = m*n np = n_elements(p) npts = n_elements(x) if n_elements(t) ne npts then message , $ 'Input arrays T and X must have same number of elements' if npts lt 3 then message,' Insufficient data in input arrays' npts = float(npts) S = fltarr(np) norm = (X - min(X))/(max(x) - min(x)) ; normalised data norm = norm - (norm eq 1.0)*(0.1/n) ; norm = 1 -> norm = 0.99.. ni = 1 + n*(floor(norm*n)) Tplus = T-min(T) ; take this operation out of the loop for j = 0l,np - 1l do begin phi = ( Tplus / P[j] ) mod 1.0 mu = histogram(floor(phi*m) + ni,max=nbox,min=0.0)/(npts) mu = mu[where(mu gt 0.0)] S[j] = -total(mu*alog(mu)) endfor S = S/alog(nbox) ; normalise S return,Send ; That's all folks
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -