class SpatialModelCell: {
        
    public:
        SpatialModelCell(std::vector<lsst::afw::image::Footprint::PtrType> fpList,
                         std::vector<modelQA> modelList);
        virtual ~SpatialModelCell() {};

        void orderFootprints();       /* based upon brightness/proximity */
        void orderModels();           /* based upon modelQA quality metric */

        void fixEntry();              /* call orderModels(), set _isFixed = True */

        lsst::detection::Footprint::PtrType getCurrentFootprint();
        modelQA                             getCurrentModel();

        void setCurrentEntry(int id); /* choose a particular entry */
        void incrementCurrentEntry(); /* go to the next one in the list */
      

    private:
        /* position of the grid point */
        int _colC;
        int _rowC;

        /* synchronized lists of footprints and models */
        /* should this be a whole another class ?      */
        std::vector<lsst::detection::Footprint::PtrType> _fpList;
        std::vector<modelQA> _modelList;

        /* number of entries; len(_fpList) */
        int _nEntries;

        /* which entry we are using; 0 <= _entryID < _nEntries */
        int _entryID;

        /* we are using _entryID no matter what */
        bool _isFixed = False;

    };

    /* This class should be associated with each object you are building your
       model around.  I currently have something called (badly)
       DifferenceImageFootprintInformation for image subtraction; this class
       coulld/should be merged with or derived from a QA class and used here */
   

    class ModelQA: {
    public: 
        double (?) returnQAMetric();
    private: 
        
    }