Please come all to AstroFest in London to ask us (Mabula & Vincent) questions and to see live demos of APP!
2023-01-19: APP 2.0.0-beta13 has been released !
!!! Big performance increase due to optimizations in integration !!!
and upgraded development platform to GraalVM 22.3 based on openJDK19
We are very close now to releasing APP 2.0.0 stable with a complete printable manual...
[Solved] Feature request for flat frame stacking
I am doing flats with a flat-box with NINA's flat wizard for all filters sequencially. It would be very handy, if APP could process all the flat frames in one cycle. That means, if it could detect the different filters from the fits headers and the different exposure times and create the apropriate flats and dark flats accordingly. For the darks it already recognizes the different exposure times, which is great.
But for flats, you have to load every filter separately and stack it separately. Afterwards there is no information available from what filter the master flat (or master dark flat) was created wether in the fits header nor in the filename. It would be very helpful, if the filter was written in the fits header of the master files (and in the file name).
@chris_16 Chris, I am really surprised by this request, particularly when you write that "you have to load every filter separately and stack it separately". I shoot with a mono camera myself and have no issues loading flats for different filters and the master flat names contain the filter which they were created for.
What version of APP do you use? I don't think that really matters since according to my memory APP has been doing this correctly since 1.078 and maybe even before.
Do you take flats with different exposure times for the same filter or is your request for that related to the fact that APP doesn't seem to recognize the filters for you?
I can't find any filter name in the file name nor in the fits header of flat masters. I am on 1.082
If I load all the flat sub frames from all filters, APP doesn't recognize that they could be grouped by filter or exposure time and therefore it stacks all sub frames to one single master flat. If you feed dark sub frames with different exposure times, APP take care of it and stacks masters for every exposure time. This would be a little bit more effective for the master flat process.
@chris_16 Hi Chris,
Would you mind uploading a set of files so I can try this myself? Like I said, I haven't had any such issues with APP at all. I think you're familiar with uploading files but all the same, please use upload4 for both username and password and create a directory called chris_16_flats on
@chris_16 Thanks for the data Chris. It would have helped if you had indicated that you are shooting with a color camera 😉 I asked Mabula if flats for mono and color cameras are treated differently because I could easily reproduce the error that you reported. I'll let you know once I get an answer.
@chris_16 Chris, you can load the flats filter for filter and create custom channels for them. Then APP will process them separately. I agree, however, that it would be great if APP did this automatically.
Thanks, Wouter for your investigation! Well, yes, I shoot with OSC ASI1600MCC, sorry if I did not mention. Technically, there should be no difference between the flat files from a, let say, R, G or B filter to a L-Pro, L-eXtreme and UV-IR filter which I use in my FW. I guess Mabula will fix this easily!
I think something odd is happening here, because this should already work properly for OSC camera's. The assignment of filters is independent whether it concerns a mono or OSC camera.
If the flats shot with the OSC have the proper filter tag, then it should simply work as expected. If the flats do not have the filter tag in the fits header, then there is only 1 solution. The user should load the flats per filter and each time inform APP for which filter the flats are. Then all should work as expected.
My suspicion is that the flats don't contain the appropriate fitler header tag, so APP can never know automatically how to assign them.
Chris, we don't seem to have your data anymore. Could you supply us with some of the flats for both filters and then I will investigate 😉
username & password: upload4
Hi Chris @chris_16,
Apologies that it took a while, I have now checked your flats concerning the fitler assignment.
I downloaded your 6 flats, 3 for the L-Pro and 3 for the UV-IR filter.
I started APP and loaded your flats and created the flat masters.
All worked as expected in APP 1.082, your fits frames do have the FITS "FILTER" header tag:
FITS HDUs: 1
HDU1 - SIMPLE = T / C# FITS
HDU1 - BITPIX = 16
HDU1 - NAXIS = 2 / Dimensionality
HDU1 - NAXIS1 = 4656
HDU1 - NAXIS2 = 3520
HDU1 - BZERO = 32768
HDU1 - EXTEND = T / Extensions are permitted
HDU1 - IMAGETYP= 'FLAT ' / Type of exposure
HDU1 - FWHEEL = 'ZWO FilterWheel (1' / Filter Wheel name
HDU1 - FILTER = 'L-Pro ' / Active filter name
HDU1 - OBJECT = 'FlatWizard' / Name of the object of interest
HDU1 - FOCNAME = 'ZWO Focuser (1)' / Focusing equipment name
HDU1 - FOCPOS = 13444 / [step] Focuser position
HDU1 - FOCUSPOS= 13444 / [step] Focuser position
HDU1 - FOCTEMP = 17.1100006103516 / [degC] Focuser temperature
HDU1 - FOCUSTEM= 17.1100006103516 / [degC] Focuser temperature
HDU1 - ROWORDER= 'TOP-DOWN' / FITS Image Orientation
HDU1 - EQUINOX = 2000.0 / Equinox of celestial coordinate system
HDU1 - SWCREATE= 'N.I.N.A. 220.127.116.11' / Software that created this file
HDU1 - END
And thus APP detects this, so there is no need to assign the filters manually. Just make sure that when you load the frames:
- APP is working in Multi-Channel/Filter mode to be set in 1) LOAD (on by default)
- And when you load the frames, that you let APP check the FITS "header" tag
Then after creation of the Masters, APP ends up with 2 FlatMasters (1 for each filter) that have the Filter tag in the header and in the file name as well, so all as expected.
And the FITS header of 1 of the masters:
FITS HDUs: 1
HDU1 - SIMPLE = T / Java FITS: Thu May 27 1112 CEST 2021
HDU1 - BITPIX = 16 / bits per data value
HDU1 - NAXIS = 2 / number of axes
HDU1 - NAXIS1 = 4656 / size of the n'th axis
HDU1 - NAXIS2 = 3520 / size of the n'th axis
HDU1 - EXTEND = T / Extensions are permitted
HDU1 - BSCALE = 1.0 / scaling to 16bit
HDU1 - BZERO = 32768.0 / offset data range to that of unsigned short
HDU1 - DATE = '2021-05-27T0956' / creation date of MasterFlat
HDU1 - SOFTWARE= 'Astro Pixel Processor by Aries Productions' / software
HDU1 - VERSION = '1.082 ' / Astro Pixel Processor version
HDU1 - CALFRAME= 'MasterFlat' / master flat frame
HDU1 - INSTRUME= 'ZWO ASI1600MC-Cool' / instrument name
HDU1 - CFAIMAGE= 'GRBG ' / Color Filter Array pattern
HDU1 - NOTE-1 = 'INTEGRATION METADATA'
HDU1 - EXPTIME = 2.48 / exposure time (s)
HDU1 - GAIN = 139.0 / gain or ISO depending on instrument
HDU1 - NORMMETH= 'multiply-scale' / normalization method
HDU1 - NORMSCAL= 'BWMV ' / normalization scale/dispersion calculation
HDU1 - FLATBLUR= 'no blur ' / blur method of masterflat
HDU1 - INT-METH= 'median ' / integration method
HDU1 - OUTL-REJ= 'no rejection' / outlier rejection filter
HDU1 - LNC-DEG = 'noLNC ' / Local Normalization Correction not applied
HDU1 - AD-PED = 0.0 / adaptive pedestal from data calibration
HDU1 - FILTNUM = 1 / data combined from 1 filter
HDU1 - FILT-1 = 'L-Pro ' / filter used
HDU1 - SESSNUM = 1 / data combined from 1 session
HDU1 - SESS-1 = 'session 1' / capture session
HDU1 - CALIB-1 = 25936.0 / calibration value of channel 1
HDU1 - CALIB-2 = 26616.0 / calibration value of channel 2
HDU1 - CALIB-3 = 19600.0 / calibration value of channel 3
HDU1 - LOK-R = ' 2,4928E+04' / lokation of channel-R
HDU1 - LOK-G1 = ' 2,6808E+04' / lokation of channel-G1
HDU1 - LOK-G2 = ' 2,6784E+04' / lokation of channel-G2
HDU1 - LOK-B = ' 1,8728E+04' / lokation of channel-B
HDU1 - SCALE-R = ' 5,8336E+02' / dispersion/scale of channel-R
HDU1 - SCALE-G1= ' 6,3942E+02' / dispersion/scale of channel-G1
HDU1 - SCALE-G2= ' 6,4284E+02' / dispersion/scale of channel-G2
HDU1 - SCALE-B = ' 4,9265E+02' / dispersion/scale of channel-B
HDU1 - NOISE-R = ' 6,4354E+02' / MRS gaussian noise estimate of channel-R
HDU1 - NOISE-G1= ' 6,6420E+02' / MRS gaussian noise estimate of channel-G1
HDU1 - NOISE-G2= ' 6,6363E+02' / MRS gaussian noise estimate of channel-G2
HDU1 - NOISE-B = ' 5,5737E+02' / MRS gaussian noise estimate of channel-B
HDU1 - NUMFRAME= 3 / # number of frames used in MasterFlat creation
HDU1 - END
Chris, could it be the case, that it was not working for you, because you disabled the Multi-Channel/Filter mode in 1) LOAD perhaps?
Thanks Mabula to have a look at my flats! You are right, I just disabled filter mode causing APP to not include the filter name in the file name. I was thinking it should work like if you have darks from different exposure times because my flats do have different exp. times also, but I did not realize the filter names provide a differentiation, too.