00001 /* 00002 * Copyright (c) 2004 CSIRO ICT Centre 00003 * 00004 * $Id: FixedRadiusCrossMatch.h 1192 2005-09-20 15:21:27Z rsc $ 00005 */ 00006 00007 /* 00008 * Implements the Matcher interface for catalogue cross matching, 00009 * using a fixed radius great circle distance between object pairs. 00010 * 00011 * Implements the generic matcher methods required for various filter 00012 * algorithms. Also provides an efficient plane sweep filter. 00013 * 00014 * Two object producers are required, plus two object consumers to report 00015 * those objects that don't match and a pair consumer for those that do. 00016 * 00017 * The active list is required to maintain an efficient set of active 00018 * objects for testing against the test obejcts. 00019 * 00020 * The producers and active list are owned by this class and are deleted 00021 * by the destructor. 00022 */ 00023 00024 #ifndef FIXEDRADIUSCROSSMATCH_DEFINED 00025 #define FIXEDRADIUSCROSSMATCH_DEFINED 00026 00027 #include "String.h" 00028 00029 #include "ActiveList.h" 00030 #include "CrossMatch.h" 00031 #include "ObjectConsumer.h" 00032 00033 class Object; 00034 class ObjectPairConsumer; 00035 class ObjectProducer; 00036 00037 00038 class FixedRadiusCrossMatch : public CrossMatch 00039 { 00040 public: 00041 FixedRadiusCrossMatch(ObjectProducer * activeProd, 00042 ObjectProducer * testProd, 00043 ActiveList * activeList, 00044 ObjectPairConsumer * pairCons, 00045 ObjectConsumer * uActiveCons, 00046 ObjectConsumer * uTestCons, 00047 double maxD); 00048 virtual ~FixedRadiusCrossMatch(); 00049 00050 virtual String const & getName() const { return name(); }; 00051 static String const & name() { return s_name; }; 00052 00053 virtual double getLowerBound(Object const * testObject); 00054 virtual double getUpperBound(Object const * testObject); 00055 00056 protected: 00057 virtual double setAngularUpperLimit(Object const *) const 00058 { return maxDistance; } 00059 00060 private: 00061 static String const s_name; 00062 00063 double maxDistance; 00064 00065 FixedRadiusCrossMatch(); 00066 FixedRadiusCrossMatch(FixedRadiusCrossMatch const &); 00067 FixedRadiusCrossMatch & operator=(FixedRadiusCrossMatch const &); 00068 }; 00069 00070 00071 #endif // ifndef FIXEDRADIUSCROSSMATCH_DEFINED