00001
00002
00003
00004
00005
00006 #ifndef DETECTORS_H
00007 #define DETECTORS_H
00008
00009 #include "Conventions/DetectorId.h"
00010 #include "Conventions/Site.h"
00011
00012 #include <string>
00013 #include <ostream>
00014
00015 namespace DayaBay {
00016
00018 class Detector {
00019 public:
00021 Detector(Site::Site_t site,
00022 DetectorId::DetectorId_t det);
00023
00025 Detector(const Detector& det) { m_data = det.m_data; }
00026
00028 Detector(int data) { m_data = data; }
00029
00031 Detector(short int data) { m_data = data<<16; }
00032
00034 Detector(std::string name) { m_data = (Detector::siteDetPackedFromString(name) << 16); }
00035
00037 Detector();
00038
00039 virtual ~Detector();
00040
00041
00042 Detector& operator=(const Detector& det)
00043 { m_data = det.m_data; return *this; }
00044
00046 void set(Site::Site_t site, DetectorId::DetectorId_t det);
00047
00049 std::string asString() const;
00050
00052 std::string detName() const;
00053
00055 DetectorId::DetectorId_t detectorId() const;
00056
00058 Site::Site_t site() const;
00059
00063 int fullPackedData() const;
00064
00066 short int siteDetPackedData() const;
00067
00068 static short int siteDetPackedFromString(const std::string str);
00069
00071 bool isAD() const { return DetectorId::isAD(this->detectorId()); }
00072
00074 bool isWaterShield() const { return DetectorId::isWaterShield(this->detectorId()); }
00075
00079 virtual bool bogus() const;
00080
00081 bool operator==(const Detector& rhs) const { return this->m_data == rhs.m_data; }
00082 bool operator!=(const Detector& rhs) const { return !(*this == rhs); }
00083
00084 protected:
00085 unsigned int m_data;
00086 };
00087
00089 class DetectorSensor : public Detector {
00090 public:
00091 DetectorSensor() : Detector(0) {}
00092 DetectorSensor(unsigned int sensor_id,
00093 Site::Site_t site,
00094 DetectorId::DetectorId_t det);
00095 DetectorSensor(const DetectorSensor& sensor) : Detector(sensor) {}
00096 DetectorSensor(int data) : Detector(data) {}
00097 virtual ~DetectorSensor();
00098
00099 DetectorSensor& operator=(const DetectorSensor& sensor)
00100 { m_data = sensor.m_data; return *this; }
00101
00103 int sensorId() const;
00104
00106 virtual bool bogus() const;
00107 };
00108
00114 class AdPmtSensor : public DetectorSensor {
00115 public:
00116 AdPmtSensor() : DetectorSensor(0) {}
00117 AdPmtSensor(int ring, int column,
00118 Site::Site_t site, DetectorId::DetectorId_t detid);
00119 AdPmtSensor(int ring, int column,
00120 Site::Site_t site, int ad_number);
00121 AdPmtSensor(const AdPmtSensor& sensor) : DetectorSensor(sensor) {}
00122 AdPmtSensor(int data) : DetectorSensor(data) {}
00123 virtual ~AdPmtSensor();
00124
00125 AdPmtSensor& operator=(const AdPmtSensor& sensor)
00126 { m_data = sensor.m_data; return *this; }
00127
00129 int ring() const;
00130
00132 int column() const;
00133
00135 virtual bool bogus() const;
00136 };
00137
00150 class PoolPmtSensor : public DetectorSensor {
00151 public:
00152 PoolPmtSensor() : DetectorSensor(0) {}
00153 PoolPmtSensor(int wall_number, int wall_spot, bool inward_facing,
00154 Site::Site_t site, DetectorId::DetectorId_t detid);
00155 PoolPmtSensor(const PoolPmtSensor& sensor) : DetectorSensor(sensor) {}
00156 PoolPmtSensor(int data) : DetectorSensor(data) {}
00157 virtual ~PoolPmtSensor();
00158
00159 PoolPmtSensor& operator=(const PoolPmtSensor& sensor)
00160 { m_data = sensor.m_data; return *this; }
00161
00162 int wallNumber() const;
00163 int wallSpot() const;
00164 bool inwardFacing() const;
00165
00167 virtual bool bogus() const;
00168 };
00169
00205 class RpcSensor : public DetectorSensor {
00206 public:
00207 RpcSensor() : DetectorSensor(0) {}
00208 RpcSensor(int panelRow, int panelColumn, int layer, int strip,
00209 Site::Site_t site, DetectorId::DetectorId_t detid);
00210 RpcSensor(const RpcSensor& sensor) : DetectorSensor(sensor) {}
00211 RpcSensor(int data) : DetectorSensor(data) {}
00212 virtual ~RpcSensor();
00213
00214 RpcSensor& operator=(const RpcSensor& sensor)
00215 { m_data = sensor.m_data; return *this; }
00216
00217 int panelRow() const;
00218 int panelColumn() const;
00219 int layer() const;
00220 int strip() const;
00221
00223 virtual bool bogus() const;
00224 };
00225
00226
00227
00228 std::ostream& operator<<(std::ostream& str, const DayaBay::Detector& det);
00229 std::ostream& operator<<(std::ostream& str, const DayaBay::DetectorSensor& detsens);
00230 std::ostream& operator<<(std::ostream& str, const DayaBay::AdPmtSensor& adsens);
00231 std::ostream& operator<<(std::ostream& str, const DayaBay::PoolPmtSensor& adsens);
00232 std::ostream& operator<<(std::ostream& str, const DayaBay::RpcSensor& rpcsens);
00233
00234 bool operator<(const DayaBay::Detector& a, const DayaBay::Detector& b);
00235 }
00236 #endif // DETECTORS_H