00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef RECOCOLLECTOR_H
00019 #define RECOCOLLECTOR_H
00020
00021
00022 #include "step.h"
00023
00035 class RecoCollectorBase : public RecoStep {
00036
00037 protected:
00038
00039 RecoCollectorBase() {}
00040 ~RecoCollectorBase();
00041
00042
00050 bool completed(const RecoCoord& coord, unsigned int custom_count);
00051
00056 bool calculate_count(RecoQueryContext& context, const RecoCoord& inmask, const RecoCoord& outmask);
00057
00058
00059 private:
00060
00061 CoordCountMap todo;
00062 Mutex todomutex;
00063
00064 unsigned int count;
00065
00066 STD_string label_cache;
00067 };
00068
00069
00070
00071
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 template<unsigned int Nin, class In, unsigned int Ncoll, class Coll, bool use_numof=false>
00086 class RecoCollector : public RecoCollectorBase, public Labeled {
00087
00088 public:
00089 RecoCollector(const STD_string& coll_label) : Labeled(coll_label) {}
00090
00091 private:
00092
00093
00094 STD_string label() const {return get_label();}
00095 STD_string description() const {return "Collect data in one or more dimensions";}
00096 bool process(RecoData& rd, RecoController& controller);
00097 RecoCoord input_coord() const {return In::preset_coord(RecoIndex::collected);}
00098 void modify_coord(RecoCoord& coord) const {Coll::modify(RecoIndex::collected,coord);}
00099 bool query(RecoQueryContext& context);
00100 RecoStep* allocate() const {return new RecoCollector(get_label());}
00101 void init() {}
00102
00103
00104 typedef STD_map<RecoCoord, ComplexData<Nin+Ncoll> > DataMap;
00105 DataMap datamap;
00106 Mutex mutex;
00107
00108 };
00109
00110
00114 #endif
00115