00001
00002
00003 #ifndef TRIGGERMATCHINGTOOL_MATCHINGIMPLEMENTATION_H
00004 #define TRIGGERMATCHINGTOOL_MATCHINGIMPLEMENTATION_H
00005
00006 #include <map>
00007
00008 #include "TriggerMatchingTool/MatchingTool.h"
00009 #include "TriggerMatchingTool/IAssociationStrategy.h"
00010 #include "AsgTools/AsgMessaging.h"
00011
00012 namespace Trig {
00013
00014
00015 class TrigDecisionTool;
00016
00017
00018 class MatchingTool;
00019
00020 namespace MatchingStrategy {
00021 enum Strategy {
00022 MinimalSum = 0,
00023 MaximalMatched = 1
00024 };
00025 }
00026
00027
00028 class MatchingImplementation : public asg::AsgMessaging {
00029 public:
00030 MatchingImplementation(MatchingTool& mt, double threshold=0.4);
00031 Trig::TrigDecisionTool* tdt();
00032 bool matchDistanceMatrix(const std::vector<std::vector<double> >& matrix, const Trig::MatchingStrategy::Strategy strategy = Trig::MatchingStrategy::MinimalSum);
00033 inline void setThreshold(double in) { m_threshold=in; }
00034 private:
00035 bool assocIsMatched(IAssociationStrategy::index_assignment_t association, const std::vector<std::vector<double> >& matrix);
00036 MatchingTool& m_tool;
00037 std::map<Trig::MatchingStrategy::Strategy,std::unique_ptr<IAssociationStrategy> > m_strategies;
00038 double m_threshold;
00039 };
00040
00041 }
00042
00043 #endif