#ifndef PP_SUB_H
#define PP_SUB_H

#define PPSUB_RECIPE "PPSUB"            /// Name of the recipe to use

/// Setup the arguments parsing
bool ppSubArgumentsSetup(int argc, char *argv[], ///< Command-line arguments
                    pmConfig *config    ///< Configuration
    );

/// Parse the arguments
bool ppSubArgumentsParse(pmConfig *config ///< Configuration
    );

/// Parse the camera input
bool ppSubCamera(pmConfig *config       ///< Configuration
    );

/// Loop over the FPA hierarchy
bool ppSubLoop(pmConfig *config         ///< Configuration
    );

/// Perform PSF-matched image subtraction on the readout
bool ppSubReadout(pmConfig *config,     ///< Configuration
                  psMetadata *stats,    ///< Statistics, for output
                  const pmFPAview *view ///< View of readout to subtract
    );

/// Higher-order background subtraction
bool ppSubBackground(pmReadout *ro,     ///< Readout of interest
                     pmConfig *config,  ///< Configuration
                     const pmFPAview *view ///< View to readout
    );

/// Put the program version information into a metadata
void ppSubVersionMetadata(psMetadata *metadata ///< Metadata to populate
    );


#endif
