Go to the documentation of this file.00001 #ifndef TRACKERLAYERIDACCESSOR_H
00002 #define TRACKERLAYERIDACCESSOR_H
00003
00004
00005 #include "DataFormats/SiStripDetId/interface/SiStripSubStructure.h"
00006 #include "DataFormats/SiStripDetId/interface/TIBDetId.h"
00007 #include "DataFormats/SiStripDetId/interface/TECDetId.h"
00008 #include "DataFormats/SiStripDetId/interface/TIDDetId.h"
00009 #include "DataFormats/SiStripDetId/interface/TOBDetId.h"
00010 #include "DataFormats/SiPixelDetId/interface/PXBDetId.h"
00011 #include "DataFormats/SiPixelDetId/interface/PXFDetId.h"
00012 #include "DataFormats/DetId/interface/DetId.h"
00013
00014 #include<ext/functional>
00015
00016
00017
00018 class DetIdComparator {
00019 public:
00020 bool operator()( DetId i1, DetId i2 ) const {
00021 return (*this)(i1.rawId(),i2.rawId());
00022 };
00023 virtual bool operator()(uint32_t i1, uint32_t i2 ) const =0;
00024 };
00025
00026 class DetIdTIBSameLayerComparator : public DetIdComparator {
00027 public:
00028 virtual bool operator()(uint32_t i1,uint32_t i2 ) const {
00029 TIBDetId id1(i1);
00030 TIBDetId id2(i2);
00031 if ((id1.det() == id2.det()) &&
00032 (id1.subdetId() == id2.subdetId()) &&
00033 (id1.layer() == id2.layer())) return false;
00034 return (id1<id2);
00035 }
00036 };
00037 class DetIdTOBSameLayerComparator : public DetIdComparator {
00038 public:
00039 virtual bool operator()(uint32_t i1,uint32_t i2 ) const {
00040 TOBDetId id1(i1);
00041 TOBDetId id2(i2);
00042 if ((id1.det() == id2.det()) &&
00043 (id1.subdetId() == id2.subdetId()) &&
00044 (id1.layer() == id2.layer())) return false;
00045 return (id1<id2);
00046 }
00047 };
00048 class DetIdPXBSameLayerComparator : public DetIdComparator {
00049 public:
00050 virtual bool operator()(uint32_t i1,uint32_t i2 ) const {
00051 PXBDetId id1(i1);
00052 PXBDetId id2(i2);
00053 if ((id1.det() == id2.det()) &&
00054 (id1.subdetId() == id2.subdetId()) &&
00055 (id1.layer() == id2.layer())) return false;
00056 return (id1<id2);
00057 }
00058 };
00059 class DetIdPXFSameDiskComparator : public DetIdComparator {
00060 public:
00061 virtual bool operator()(uint32_t i1,uint32_t i2 ) const {
00062 PXFDetId id1(i1);
00063 PXFDetId id2(i2);
00064 if ((id1.det() == id2.det()) &&
00065 (id1.subdetId() == id2.subdetId()) &&
00066 (id1.side() == id2.side()) &&
00067 (id1.disk() == id2.disk())) return false;
00068 return (id1<id2);
00069 }
00070 };
00071 class DetIdTECSameDiskComparator : public DetIdComparator {
00072 public:
00073 virtual bool operator()(uint32_t i1,uint32_t i2 ) const {
00074 TECDetId id1(i1);
00075 TECDetId id2(i2);
00076 if ((id1.det() == id2.det()) &&
00077 (id1.subdetId() == id2.subdetId()) &&
00078 (id1.side() == id2.side()) &&
00079 (id1.wheel() == id2.wheel())) return false;
00080 return (id1<id2);
00081 }
00082 };
00083 class DetIdTIDSameDiskComparator : public DetIdComparator {
00084 public:
00085 virtual bool operator()(uint32_t i1,uint32_t i2 ) const {
00086 TIDDetId id1(i1);
00087 TIDDetId id2(i2);
00088 if ((id1.det() == id2.det()) &&
00089 (id1.subdetId() == id2.subdetId()) &&
00090 (id1.side() == id2.side()) &&
00091 (id1.wheel() == id2.wheel())) return false;
00092 return (id1<id2);
00093 }
00094 };
00095
00096
00097 class TrackerLayerIdAccessor {
00098 public:
00099
00100
00101
00102 typedef std::pair<DetId,DetIdComparator&> returnType;
00103 TrackerLayerIdAccessor();
00104 std::pair<DetId,DetIdPXBSameLayerComparator> pixelBarrelLayer(int layer);
00105 std::pair<DetId,DetIdPXFSameDiskComparator> pixelForwardDisk(int side,int disk);
00106 std::pair<DetId,DetIdTIBSameLayerComparator> stripTIBLayer(int layer);
00107 std::pair<DetId,DetIdTOBSameLayerComparator> stripTOBLayer(int layer);
00108 std::pair<DetId,DetIdTECSameDiskComparator> stripTECDisk(int side,int disk);
00109 std::pair<DetId,DetIdTIDSameDiskComparator> stripTIDDisk(int side,int disk);
00110
00111 private:
00112
00113 };
00114
00115 #endif
00116