PRO TEST_UNIQUENESS
COMPILE_OPT IDL2
!EXCEPT = 0
nspectra = 40
fwhm = 15D
xrange = [15D, 2.5D]
pahdb = OBJ_NEW('AmesPAHdbIDLSuite')
transitions = pahdb->getTransitionsByUID( -1 )
uids = transitions->getUIDs(nuids)
transitions->Cascade,6D * 1.6021765D-12
spectrum = transitions->Convolve( $
Xrange=1D4/xrange, $
FWHM=fwhm, $
/Gaussian)
OBJ_DESTROY,transitions
spectrum_s = spectrum->Get()
niterations = 1000L
store = REPLICATE({norm: 0D, $
anion: 0D, $
neutral: 0D, $
cation:0D, $
small:0D, $
large:0D, $
pure:0D, $
nitrogen: 0D,$
solo: 0D, $
duo: 0D, $
trio: 0D, $
quartet: 0D, $
quintet: 0D}, niterations)
ntags = N_TAGS(store)
selected_weights = REPLICATE({uid:0L, weight:0D}, nspectra)
indices = LONARR(nspectra, /NOZERO)
FOR i = 0, niterations - 1 DO BEGIN
PRINT,"========================================================="
PRINT," ITERATION: " + STRTRIM(STRING(FORMAT='(I0)', i + 1), 2) + "/" + STRTRIM(STRING(FORMAT='(I0)', niterations), 2)
PRINT,"========================================================="
n = nspectra
WHILE n GT 0 DO BEGIN
indices[nspectra - n] = LONG(RANDOMU(seed, n) * nuids)
indices = indices[SORT(indices)]
u = UNIQ(indices)
n = nspectra - N_ELEMENTS(u)
indices[0] = indices[u]
ENDWHILE
selected_uids = uids[indices]
spectrum->Intersect,selected_uids
data = (spectrum->Get()).data
selected_weights.uid = selected_uids
selected_weights.weight = 1D14 * RANDOMU(LONG(SYSTIME(1)), nspectra, /DOUBLE)
coadd = spectrum->Coadd(Weights=selected_weights)
spectrum->Set,spectrum_s
spectrum->Difference,selected_uids
fit = spectrum->Fit((coadd.Get()).data.intensity)
OBJ_DESTROY,coadd
IF OBJ_VALID(fit) THEN BEGIN
bd_fit = fit->getBreakdown()
store[i].norm = fit->getNorm()
FOR j = 0, nspectra - 1 DO BEGIN
sel1 = WHERE(selected_weights.uid EQ selected_uids[j])
sel2 = WHERE(data.uid EQ selected_uids[j])
data[sel2].intensity *= selected_weights[sel1].weight
ENDFOR
fit->Set,Data=data,Weights=selected_weights,UIDs=selected_uids
bd_org = fit->getBreakdown()
FOR j = 0, ntags - 2 DO store[i].(j + 1) = DOUBLE(bd_fit.(j)) / DOUBLE(bd_org.(j))
OBJ_DESTROY,fit
ENDIF
spectrum->Set,spectrum_s
ENDFOR
OBJ_DESTROY,[spectrum, pahdb]
h = HISTOGRAM(store.anion, LOCATIONS=l, BINSIZE=0.05, /NAN)
PLOT,l,h,XTITLE='fraction anion correct',YTITLE='frequency [#]',PSYM=10
key = ''
IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..."
h = HISTOGRAM(store.neutral, LOCATIONS=l, BINSIZE=0.05, /NAN)
PLOT,l,h,XTITLE='fraction neutral correct',YTITLE='frequency [#]',PSYM=10
IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..."
h = HISTOGRAM(store.cation, LOCATIONS=l, BINSIZE=0.05, /NAN)
PLOT,l,h,XTITLE='fraction cation correct',YTITLE='frequency [#]',PSYM=10
IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..."
h = HISTOGRAM(store.small, LOCATIONS=l, BINSIZE=0.05, /NAN)
PLOT,l,h,XTITLE='fraction small correct',YTITLE='frequency [#]',PSYM=10
IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..."
h = HISTOGRAM(store.large, LOCATIONS=l, BINSIZE=0.05, /NAN)
PLOT,l,h,XTITLE='fraction large correct',YTITLE='frequency [#]',PSYM=10
IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..."
h = HISTOGRAM(store.nitrogen, LOCATIONS=l, BINSIZE=0.05, /NAN)
PLOT,l,h,XTITLE='fraction nitrogen correct',YTITLE='frequency [#]',PSYM=10
IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..."
h = HISTOGRAM(store.solo, LOCATIONS=l, BINSIZE=0.05, /NAN)
PLOT,l,h,XTITLE='fraction solo correct',YTITLE='frequency [#]',PSYM=10
IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..."
h = HISTOGRAM(store.duo, LOCATIONS=l, BINSIZE=0.05)
PLOT,l,h,XTITLE='fraction duo correct',YTITLE='frequency [#]',PSYM=10
IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..."
h = HISTOGRAM(store.trio, LOCATIONS=l, BINSIZE=0.05, /NAN)
PLOT,l,h,XTITLE='fraction trio correct',YTITLE='frequency [#]',PSYM=10
IF !D.NAME EQ 'X' THEN READ,key,PROMPT="Press <enter> to continue..."
END