00001
00002
00003
00004
00005
00006
00007 #ifndef TCU_2009_HH
00008 #define TCU_2009_HH
00009
00010 class DSMLayer_LD301_2009;
00011
00012 #include <string>
00013 #include <vector>
00014 #include <map>
00015
00016 using namespace std;
00017
00018 #ifdef __ROOT__
00019 #include "RTS/trg/include/trgDataDefs.h"
00020 #include "RTS/trg/include/trgConfNum.h"
00021 #else
00022 #include "trgDataDefs.h"
00023 #include "trgConfNum.h"
00024 #endif
00025
00026 class TCU_2009 {
00027 public:
00028 TCU_2009();
00029
00030 unsigned short bits() const { return mDSMInput; }
00031 void read(const TriggerDataBlk& event);
00032 void read(const DSMLayer_LD301_2009& layer);
00033 void update();
00034 bool isTrigger(int triggerId) const;
00035 int numberOfTriggers() const;
00036 string triggerName(int triggerId) const;
00037 void getTriggerMasks(int triggerId, vector<int>& masks) const;
00038 int barrelJetPatchBits(int triggerId) const;
00039 int endcapJetPatchBits(int triggerId) const;
00040 int emcJetPatchBits(int triggerId) const;
00041 void dump() const;
00042
00043 private:
00044 typedef map<int, pair<string, int> >::const_iterator MapIterator;
00045
00046 void defineTrigger(const char* name, int id, int mask);
00047 int triggerId(const MapIterator& i) const { return i->first; }
00048 string triggerName(const MapIterator& i) const { return i->second.first; }
00049 int triggerMask(const MapIterator& i) const { return i->second.second; }
00050 bool isTrigger(const MapIterator& i) const;
00051
00052 unsigned short mDSMInput;
00053 unsigned short mTCUInput;
00054 multimap<int, pair<string, int> > mTriggers;
00055 };
00056
00057 inline bool TCU_2009::isTrigger(const MapIterator& i) const
00058 {
00059 int mask = triggerMask(i);
00060 return (mTCUInput & mask) == mask;
00061 }
00062
00063 #endif // TCU_2009_HH