Go to the documentation of this file.00001 #include "TrackingTools/RoadSearchHitAccess/interface/DetHitAccess.h"
00002
00004 template<typename T>
00005 inline edmNew::DetSet<T> detSetOrEmpty(const edmNew::DetSetVector<T> &dsv, DetId detid) {
00006 typename edmNew::DetSetVector<T>::const_iterator iter = dsv.find(detid.rawId());
00007 if (iter == dsv.end()) {
00008 return typename edmNew::DetSet<T>(detid.rawId(), static_cast<const T *>(0), size_t(0) );
00009 } else {
00010 return *iter;
00011 }
00012 }
00013
00014
00015 DetHitAccess::DetHitAccess() {
00016
00017 accessMode_ = standard;
00018
00019 use_rphiRecHits_ = true;
00020 use_rphiRecHits_ = true;
00021 }
00022
00023 DetHitAccess::~DetHitAccess(){
00024 }
00025
00026 DetHitAccess::DetHitAccess(const SiStripRecHit2DCollection* rphiRecHits,
00027 const SiStripRecHit2DCollection* stereoRecHits,
00028 const SiStripMatchedRecHit2DCollection* matchedRecHits,
00029 const SiPixelRecHitCollection* pixelRecHits) {
00030
00031
00032 accessMode_ = standard;
00033
00034 use_rphiRecHits_ = true;
00035 use_stereoRecHits_ = true;
00036
00037
00038 setCollections(rphiRecHits,stereoRecHits,matchedRecHits,pixelRecHits);
00039
00040 }
00041
00042 void DetHitAccess::setCollections(const SiStripRecHit2DCollection* rphiRecHits,
00043 const SiStripRecHit2DCollection* stereoRecHits,
00044 const SiStripMatchedRecHit2DCollection* matchedRecHits,
00045 const SiPixelRecHitCollection* pixelRecHits) {
00046
00047 rphiHits_ = rphiRecHits;
00048 stereoHits_ = stereoRecHits;
00049 matchedHits_ = matchedRecHits;
00050 pixelHits_ = pixelRecHits;
00051
00052 }
00053
00054
00055 std::vector<TrackingRecHit*> DetHitAccess::getHitVector(const DetId* detid) {
00056
00057
00058
00059
00060 std::vector<TrackingRecHit*> RecHitVec;
00061
00062 if ( (unsigned int)detid->subdetId() == StripSubdetector::TIB
00063 || (unsigned int)detid->subdetId() == StripSubdetector::TOB
00064 || (unsigned int)detid->subdetId() == StripSubdetector::TID
00065 || (unsigned int)detid->subdetId() == StripSubdetector::TEC ) {
00066
00067 StripSubdetector StripDetId(*detid);
00068
00069
00070 if (accessMode_ == rphi ) {
00071
00072
00073
00074 if( !StripDetId.glued() ) {
00075 if ( rphiHits_ != 0 ) {
00076 SiStripRecHit2DCollection::DetSet rphiDetHits = detSetOrEmpty(*rphiHits_, *detid);
00077 for ( SiStripRecHit2DCollection::DetSet::const_iterator rphiDetHit = rphiDetHits.begin();
00078 rphiDetHit != rphiDetHits.end();
00079 ++rphiDetHit ) {
00080 RecHitVec.push_back((TrackingRecHit*)(&(*rphiDetHit)));
00081 }
00082 } else {
00083 edm::LogWarning("RoadSearch") << "rphi RecHit collection not set properly";
00084 }
00085 } else {
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115 }
00116 } else if (accessMode_ == rphi_stereo ) {
00117
00118
00119
00120 if( !StripDetId.glued() ) {
00121 if ( rphiHits_ != 0 ) {
00122 SiStripRecHit2DCollection::DetSet rphiDetHits = detSetOrEmpty(*rphiHits_, *detid);
00123 for ( SiStripRecHit2DCollection::DetSet::const_iterator rphiDetHit = rphiDetHits.begin();
00124 rphiDetHit != rphiDetHits.end();
00125 ++rphiDetHit ) {
00126 RecHitVec.push_back((TrackingRecHit*)(&(*rphiDetHit)));
00127 }
00128 } else {
00129 edm::LogWarning("RoadSearch") << "rphi RecHit collection not set properly";
00130 }
00131
00132 } else {
00133 DetId rphiDetId(StripDetId.glued()+2);
00134 if ( rphiHits_ != 0 ) {
00135 SiStripRecHit2DCollection::DetSet rphiDetHits = detSetOrEmpty(*rphiHits_, rphiDetId);
00136 for ( SiStripRecHit2DCollection::DetSet::const_iterator rphiDetHit = rphiDetHits.begin();
00137 rphiDetHit != rphiDetHits.end();
00138 ++rphiDetHit ) {
00139 RecHitVec.push_back((TrackingRecHit*)(&(*rphiDetHit)));
00140 }
00141 } else {
00142 edm::LogWarning("RoadSearch") << "rphi RecHit collection not set properly";
00143 }
00144
00145 DetId stereoDetId(StripDetId.glued()+1);
00146 if ( stereoHits_ != 0 ) {
00147 SiStripRecHit2DCollection::DetSet stereoDetHits = detSetOrEmpty(*stereoHits_, stereoDetId);
00148 for ( SiStripRecHit2DCollection::DetSet::const_iterator stereoDetHit = stereoDetHits.begin();
00149 stereoDetHit != stereoDetHits.end();
00150 ++stereoDetHit ) {
00151 RecHitVec.push_back((TrackingRecHit*)(&(*stereoDetHit)));
00152 }
00153 } else {
00154 edm::LogWarning("RoadSearch") << "stereo RecHit collection not set properly";
00155 }
00156 }
00157 } else if (accessMode_ == standard ) {
00158
00159
00160
00161
00162 if( !StripDetId.glued() ) {
00163 if ( rphiHits_ != 0 ) {
00164 SiStripRecHit2DCollection::DetSet rphiDetHits = detSetOrEmpty(*rphiHits_, *detid);
00165 for ( SiStripRecHit2DCollection::DetSet::const_iterator rphiDetHit = rphiDetHits.begin();
00166 rphiDetHit != rphiDetHits.end();
00167 ++rphiDetHit ) {
00168 RecHitVec.push_back((TrackingRecHit*)(&(*rphiDetHit)));
00169 }
00170 } else {
00171 edm::LogWarning("RoadSearch") << "rphi RecHit collection not set properly";
00172 }
00173 } else {
00174 if ( matchedHits_ != 0 ) {
00175 DetId useDetId(StripDetId.glued());
00176 SiStripMatchedRecHit2DCollection::DetSet matchedDetHits = detSetOrEmpty(*matchedHits_, useDetId);
00177 for ( SiStripMatchedRecHit2DCollection::DetSet::const_iterator matchedDetHit = matchedDetHits.begin();
00178 matchedDetHit != matchedDetHits.end(); ++matchedDetHit ) {
00179 RecHitVec.push_back((TrackingRecHit*)(&(*matchedDetHit)));
00180 }
00181 } else {
00182 edm::LogWarning("RoadSearch") << "matched RecHit collection not set properly";
00183 }
00184
00185
00186 if(use_rphiRecHits_) {
00187 DetId rphiDetId(StripDetId.glued()+2);
00188 if ( rphiHits_ != 0 ) {
00189 SiStripRecHit2DCollection::DetSet rphiDetHits = detSetOrEmpty(*rphiHits_, rphiDetId);
00190 for ( SiStripRecHit2DCollection::DetSet::const_iterator rphiDetHit = rphiDetHits.begin();
00191 rphiDetHit != rphiDetHits.end(); ++rphiDetHit ) {
00192 bool use_rphi=true;
00193 DetId useDetId(StripDetId.glued());
00194 SiStripMatchedRecHit2DCollection::DetSet matchedDetHits = detSetOrEmpty(*matchedHits_, useDetId);
00195
00196 for ( SiStripMatchedRecHit2DCollection::DetSet::const_iterator matchedDetHit = matchedDetHits.begin();
00197 matchedDetHit != matchedDetHits.end(); ++matchedDetHit ) {
00198 if (rphiDetHit->sharesInput((TrackingRecHit*)(&(*matchedDetHit)), TrackingRecHit::some)) {
00199 use_rphi=false;
00200 break;
00201 }
00202 }
00203 if(use_rphi) RecHitVec.push_back((TrackingRecHit*)(&(*rphiDetHit)));
00204 }
00205 } else {
00206 edm::LogWarning("RoadSearch") << "rphi RecHit collection not set properly";
00207 }
00208 }
00209
00210
00211 if(use_stereoRecHits_) {
00212 DetId stereoDetId(StripDetId.glued()+1);
00213 if ( stereoHits_ != 0 ) {
00214 SiStripRecHit2DCollection::DetSet stereoDetHits = detSetOrEmpty(*stereoHits_, stereoDetId);
00215 for ( SiStripRecHit2DCollection::DetSet::const_iterator stereoDetHit = stereoDetHits.begin();
00216 stereoDetHit != stereoDetHits.end(); ++stereoDetHit ) {
00217 bool use_stereo=true;
00218 DetId useDetId(StripDetId.glued());
00219 SiStripMatchedRecHit2DCollection::DetSet matchedDetHits = detSetOrEmpty(*matchedHits_, useDetId);
00220
00221 for ( SiStripMatchedRecHit2DCollection::DetSet::const_iterator matchedDetHit = matchedDetHits.begin();
00222 matchedDetHit != matchedDetHits.end(); ++matchedDetHit ) {
00223 if (stereoDetHit->sharesInput((TrackingRecHit*)(&(*matchedDetHit)), TrackingRecHit::some)) {
00224 use_stereo=false;
00225 break;
00226 }
00227 }
00228 if(use_stereo) RecHitVec.push_back((TrackingRecHit*)(&(*stereoDetHit)));
00229 }
00230 } else {
00231 edm::LogWarning("RoadSearch") << "stereo RecHit collection not set properly";
00232 }
00233 }
00234 }
00235 }
00236
00237 } else if ( (unsigned int)detid->subdetId() == PixelSubdetector::PixelBarrel
00238 || (unsigned int)detid->subdetId() == PixelSubdetector::PixelEndcap) {
00239
00240 if ( pixelHits_ != 0 ) {
00241 SiPixelRecHitCollection::DetSet pixelDetHits = detSetOrEmpty(*pixelHits_, *detid);
00242 for ( SiPixelRecHitCollection::DetSet::const_iterator pixelDetHit = pixelDetHits.begin();
00243 pixelDetHit!= pixelDetHits.end(); ++pixelDetHit) {
00244 RecHitVec.push_back((TrackingRecHit*)(&(*pixelDetHit)));
00245 }
00246 } else {
00247 edm::LogWarning("RoadSearch") << "pixel RecHit collection not set properly";
00248 }
00249 } else {
00250
00251 edm::LogError("RoadSearch") << "NEITHER PIXEL NOR STRIP DETECTOR ID";
00252
00253 }
00254
00255
00256 return RecHitVec;
00257 }
00258