I wrote a new He I D3 script, now that I understand a bit better the quirks of the scripting.


 


# Script to create a pleasing He I D3 Sun, 
#    from enhancing the weak signal of helium
#    by applying continuum subtraction etc.
# The author fo this script checked these results
#    against the He I 10830 raw reconstructions, 
#    noting that even imaging, with a CMOS, at 1100nm
#    is rather challenging, and the match between 
#    this He I D3 concept, and the raw reconstruction 
#    of He I 10830 was found to be decent.
#
# Adjust the values below
#    The distance between Na I D2 and He I D3, 
#    in a SHG700, at 2um pixel size, is about -142.8
#    Pure coincidence, this is also the distance,
#    in a stock Sol'Ex, between Fe I 5884 and 
#    He I D3, at 2um pixel size

He_offset_px = -142.8
kontinuum_ofHe_offset_px = He_offset_px + 9

# For most spectroheliographs, the values below
#    need no adjustment

He_context_px = 1
He_step_px = 1

kontinuum_ofHe_context_px = 4
kontinuum_ofHe_step_px = 1

kontL = kontinuum_ofHe_offset_px - kontinuum_ofHe_context_px
kontR = kontinuum_ofHe_offset_px + kontinuum_ofHe_context_px

HeL = He_offset_px - He_context_px
HeR = He_offset_px + He_context_px

fixBanding1 = 100
fixBanding2 = 50

lineZero = min(autocrop2(range(-1, 1)))
lineZeroB = fix_banding(lineZero, fixBanding1, fixBanding2)
lineZeroBL = linear_stretch(lineZeroB)
lineZeroL = linear_stretch(lineZero)
lineZeroBLSQ = linear_stretch(pow(lineZeroB, 2))

HeRaw1 = min(autocrop2(range(HeL,HeR,He_step_px)))
HeProm1 = max(autocrop2(range(HeL-1,HeR+1,He_step_px)))
kontinuum_ofHe = avg(autocrop2(range(kontL,kontR, kontinuum_ofHe_step_px)))
deltaHe2 = fix_banding(HeRaw1 - kontinuum_ofHe, fixBanding1, fixBanding2)
divida = fix_banding(HeProm1 / kontinuum_ofHe,  fixBanding1, fixBanding2)

HeLog = pow(log(log(HeRaw1, 2), 2), 8)

dividaBlur = blur(blur(blur(blur(blur(divida)))))
dividaBlurM = dividaBlur * HeLog - kontinuum_ofHe*0.9
deltaHe2Blur = blur(blur(blur(deltaHe2)))

HeLogMulDelta1 = HeLog * pow(deltaHe2Blur, 4)

masterOutput = HeRaw1
   +9  * linear_stretch(HeRaw1)
   -8  * linear_stretch(pow(kontinuum_ofHe, 1/2))
   -1  * linear_stretch(pow(kontinuum_ofHe, 3))
  +25  * linear_stretch(HeRaw1*pow(deltaHe2Blur, 3))
  +15  * linear_stretch(HeRaw1*pow(deltaHe2Blur, 2))
  +20  * linear_stretch(HeLogMulDelta1)
  +30  * linear_stretch(dividaBlurM)



dividaRot = rotate_rad(linear_stretch(divida), angleP)
dividaBlurM1 = linear_stretch(dividaBlurM)
HeRawLog = HeLog
HeLogMulDelta = HeLogMulDelta1
[outputs]

HeRawRot = rotate_rad(linear_stretch(HeRaw1), angleP)
kontinuumOfHeRot = rotate_rad(linear_stretch(kontinuum_ofHe), angleP)
deltaHe2Rot = rotate_rad(linear_stretch(deltaHe2), angleP)
HeSomething3 = rotate_rad(linear_stretch(masterOutput), angleP)