00001 #ifndef HARDWARECOMPONENT_H
00002 #define HARDWARECOMPONENT_H
00003 #include "Plex/PlexHandle.h"
00004 #include "HardwareType.h"
00005
00006 class HardwareComponent
00007 {
00008 private:
00009 HardwareType::Hardware_t fType;
00010 Int_t fId;
00011
00012 public:
00013 HardwareComponent(HardwareType::Hardware_t type=HardwareType::kUnknown,
00014 Int_t id=0)
00015 : fType(type), fId(id) {};
00016 ~HardwareComponent() {};
00017
00018
00019 void operator=(const HardwareComponent& other) { fType = other.fType; fId = other.fId; };
00020
00021
00022 HardwareComponent(HardwareType::Hardware_t type, RawChannelId rcid);
00023 HardwareComponent(HardwareType::Hardware_t type, PlexPixelSpotId psid);
00024 HardwareComponent(HardwareType::Hardware_t type, PlexStripEndId seid);
00025 HardwareComponent(HardwareType::Hardware_t type, PlexPinDiodeId pdid);
00026 HardwareComponent(HardwareType::Hardware_t type, PlexPlaneId plane);
00027
00028
00029
00030
00031 Bool_t FromString(const char* string);
00032 void SetType(HardwareType::Hardware_t type) { fType = type; };
00033 void SetId(Int_t id) { fId = id; };
00034
00035
00036 HardwareType::Hardware_t GetType() const { return fType; };
00037 Int_t GetId() const { return fId; };
00038 RawChannelId GetRawChannelId() const { return RawChannelId(fId); };
00039 PlexPixelSpotId GetPixelSpotId() const { return PlexPixelSpotId(fId); };
00040 PlexStripEndId GetStripEndId() const { return PlexStripEndId(fId); };
00041 PlexPinDiodeId GetPinDiodeId() const { return PlexPinDiodeId(fId); };
00042 PlexPlaneId GetPlaneId() const { return PlexPlaneId(fId); };
00043
00044 const std::vector<PlexStripEndId>& GetStripEnds(PlexHandle plex);
00045
00046 void Print(Option_t* option="") const;
00047 const char* AsString(Option_t* option="") const;
00048
00049
00050 friend Bool_t operator< (const HardwareComponent &lhs, const HardwareComponent &rhs);
00051 friend Bool_t operator<=(const HardwareComponent &lhs, const HardwareComponent &rhs);
00052 friend Bool_t operator==(const HardwareComponent &lhs, const HardwareComponent &rhs);
00053 friend Bool_t operator!=(const HardwareComponent &lhs, const HardwareComponent &rhs);
00054 friend Bool_t operator> (const HardwareComponent &lhs, const HardwareComponent &rhs);
00055 friend Bool_t operator>=(const HardwareComponent &lhs, const HardwareComponent &rhs);
00056
00057
00058 private:
00059 static std::vector<PlexStripEndId> fEndList;
00060
00061 void GetStripEndsForPixelSpot(PlexPixelSpotId psid, PlexHandle plex);
00062 void GetStripEndsForPixel(PlexPixelSpotId psid, PlexHandle plex);
00063 void GetStripEndsForPmt(PlexPixelSpotId psid, PlexHandle plex);
00064
00065 void GetStripEndsForChannel(RawChannelId rcid, PlexHandle plex);
00066 void GetStripEndsForMinder(RawChannelId rcid, PlexHandle plex);
00067 void GetStripEndsForMaster(RawChannelId rcid, PlexHandle plex);
00068 void GetStripEndsForVaChip(RawChannelId rcid, PlexHandle plex);
00069 void GetStripEndsForVfb(RawChannelId rcid, PlexHandle plex);
00070 void GetStripEndsForVmm(RawChannelId rcid, PlexHandle plex);
00071 void GetStripEndsForVarc(RawChannelId rcid, PlexHandle plex);
00072 void GetStripEndsForCrate(RawChannelId rcid, PlexHandle plex);
00073
00074 void GetStripEndsForPlane(PlexPlaneId plane, PlexHandle plex);
00075 void GetStripEndsForVetoShield(PlexHandle plex);
00076 void GetStripEndsForSupermodule(Int_t sm, PlexHandle plex);
00077 void GetStripEndsForSpectrometer(PlexHandle plex);
00078 void GetStripEndsForCalorimeter(PlexHandle plex);
00079 void GetStripEndsForDetector(PlexHandle plex);
00080
00081 };
00082
00083
00084
00085
00086 inline Bool_t operator< (const HardwareComponent &lhs, const HardwareComponent &rhs)
00087 {
00088 if( lhs.fType==rhs.fType ) return (lhs.fId < rhs.fId);
00089 else return (lhs.fType< rhs.fType);
00090 }
00091 inline Bool_t operator<=(const HardwareComponent &lhs, const HardwareComponent &rhs)
00092 {
00093 if( lhs.fType==rhs.fType ) return (lhs.fId <= rhs.fId);
00094 else return (lhs.fType<= rhs.fType);
00095 }
00096 inline Bool_t operator==(const HardwareComponent &lhs, const HardwareComponent &rhs)
00097 {
00098 if( lhs.fType==rhs.fType ) return (lhs.fId == rhs.fId);
00099 return false;
00100 }
00101 inline Bool_t operator!=(const HardwareComponent &lhs, const HardwareComponent &rhs)
00102 {
00103 if(lhs.fId != rhs.fId) return true;
00104 if( lhs.fType!=rhs.fType ) return true;
00105 return false;
00106 }
00107 inline Bool_t operator> (const HardwareComponent &lhs, const HardwareComponent &rhs)
00108 {
00109 if( lhs.fType==rhs.fType ) return (lhs.fId > rhs.fId);
00110 else return (lhs.fType> rhs.fType);
00111 }
00112 inline Bool_t operator>=(const HardwareComponent &lhs, const HardwareComponent &rhs)
00113 {
00114 if( lhs.fType==rhs.fType ) return (lhs.fId >= rhs.fId);
00115 else return (lhs.fType>= rhs.fType);
00116 }
00117
00118
00119 #endif