PRO TEST_PCOMP
COMPILE_OPT IDL2
Ein = 6D * 1.6021765D-12
FWHM = 20D
gaussian = 0
wrange = [2.5D, 20D]
npoints = 400L
pahdb = OBJ_NEW('AmesPAHdbIDLSuite')
uids = pahdb->Search("c>20 ch2=0 chx=0 mg=0 fe=0 si=0 o=0", nuids)
transitions = pahdb->getTransitionsByUID(uids)
transitions->Cascade,Ein
spectrum = transitions->Convolve(FWHM=FWHM, Gaussian=gaussian, XRange=1D4/REVERSE(wrange), NPoints=npoints)
frequency = spectrum->getGrid()
spectra = spectrum->get()
OBJ_DESTROY,[spectrum, transitions, pahdb]
select = WHERE(spectra.data.uid EQ uids[0])
wavelength = 1D4/frequency
matrix = DBLARR(nuids, npoints)
FOR i = 0L, nuids - 1 DO BEGIN
select = WHERE(spectra.data.uid EQ uids[i])
matrix[i, *] = 1D14 * spectra.data[select].intensity
ENDFOR
pc = PCOMP(matrix, /COVARIANCE, EIGENVALUES=eigenval, /DOUBLE)
cum = 100E * TOTAL(eigenval, /CUMULATIVE) / TOTAL(eigenval)
PLOT,[0,1],[0,1],XRANGE=MINMAX(wavelength),/XSTYLE,YRANGE=MINMAX(pc),XTITLE='wavelength [micron]',YTITLE='intensity [x10!U??!N erg cm!U-1!N]',/NODATA
FOR i = 0, nuids - 1 DO BEGIN
OPLOT,wavelength,pc[i,*],COLOR=i+2
XYOUTS,0.2,0.85 - FLOAT(i) * 0.05,STRING(FORMAT='(F4.1,"%")', 100E*eigenval[i]/TOTAL(eigenval)),COLOR=i+2,/NORMAL
IF cum[i] GE 60E THEN BREAK
ENDFOR
key = ''
read,key,prompt="Press <enter> to continue..."
PLOT,eigenval,XTITLE="Rank of ordered eigenvalues",YTITLE='Eigenvalues',/NODATA,/YLOG
OPLOT,eigenval,COLOR=4
OPLOT,eigenval,COLOR=2,PSYM=1
read,key,prompt="Press <enter> to continue..."
PLOT,cum,XTITLE="Rank of ordered eigenvalues",YTITLE='Explains [%]',YSTYLE=16,/NODATA
OPLOT,cum,COLOR=4
OPLOT,cum,COLOR=2,PSYM=1
save,filename='~/Desktop/pcom.sav',wavelength,pc
END