#include <SiStripQuality.cc>
Public Member Functions | |
void | add (const SiStripDetCabling *) |
void | add (const SiStripBadStrip *) |
void | add (const uint32_t &, const SiStripBadStrip::Range &) |
void | addInvalidConnectionFromCabling () |
void | addNotConnectedConnectionFromCabling () |
bool | cleanUp (bool force=false) |
void | clear () |
void | compact (unsigned int &, std::vector< unsigned int > &) |
void | fillBadComponents () |
short | getBadApvs (const uint32_t &detid) const |
const std::vector< BadComponent > & | getBadComponentList () const |
short | getBadFibers (const uint32_t &detid) const |
edm::FileInPath | getFileInPath () const |
bool | IsApvBad (const uint32_t &detid, const short &apvNb) const |
bool | IsFiberBad (const uint32_t &detid, const short &fiberNb) const |
bool | IsModuleBad (const uint32_t &detid) const |
bool | IsModuleUsable (const uint32_t &detid) const |
bool | IsStripBad (const Range &range, const short &strip) const |
bool | IsStripBad (const uint32_t &detid, const short &strip) const |
int | nBadStripsOnTheLeft (const Range &range, const short &strip) const |
int | nBadStripsOnTheRight (const Range &range, const short &strip) const |
bool | operator!= (const SiStripQuality &) const |
SiStripQuality & | operator+= (const SiStripQuality &) |
const SiStripQuality | operator- (const SiStripQuality &) const |
SiStripQuality & | operator-= (const SiStripQuality &) |
bool | operator== (const SiStripQuality &) const |
void | ReduceGranularity (double) |
SiStripQuality (const SiStripQuality &) | |
SiStripQuality (edm::FileInPath &) | |
SiStripQuality () | |
~SiStripQuality () | |
Private Member Functions | |
void | compact (std::vector< unsigned int > &, std::vector< unsigned int > &, unsigned short &) |
bool | put_replace (const uint32_t &DetId, Range input) |
void | subtract (std::vector< unsigned int > &, const std::vector< unsigned int > &) |
void | subtraction (std::vector< unsigned int > &, const unsigned int &) |
Private Attributes | |
std::vector< BadComponent > | BadComponentVect |
edm::FileInPath | FileInPath_ |
SiStripDetInfoFileReader * | reader |
const SiStripDetCabling * | SiStripDetCabling_ |
bool | toCleanUp |
Classes | |
struct | BadComponent |
class | BadComponentStrictWeakOrdering |
Usage: <usage>
Definition at line 31 of file SiStripQuality.h.
SiStripQuality::SiStripQuality | ( | ) |
Definition at line 9 of file SiStripQuality.cc.
References FileInPath_, edm::FileInPath::fullPath(), and reader.
Referenced by operator-().
00009 : 00010 toCleanUp(false), 00011 FileInPath_("CalibTracker/SiStripCommon/data/SiStripDetInfo.dat"), 00012 SiStripDetCabling_(NULL){ 00013 reader=new SiStripDetInfoFileReader(FileInPath_.fullPath()); 00014 }
SiStripQuality::SiStripQuality | ( | edm::FileInPath & | file | ) |
Definition at line 16 of file SiStripQuality.cc.
References FileInPath_, edm::FileInPath::fullPath(), and reader.
00016 :toCleanUp(false),FileInPath_(file),SiStripDetCabling_(NULL){ 00017 reader=new SiStripDetInfoFileReader(FileInPath_.fullPath()); 00018 }
SiStripQuality::SiStripQuality | ( | const SiStripQuality & | other | ) |
Definition at line 20 of file SiStripQuality.cc.
References BadComponentVect, FileInPath_, SiStripBadStrip::indexes, reader, SiStripDetCabling_, toCleanUp, and SiStripBadStrip::v_badstrips.
00020 { 00021 FileInPath_=other.FileInPath_; 00022 reader=new SiStripDetInfoFileReader(*(other.reader)); 00023 toCleanUp=other.toCleanUp; 00024 indexes=other.indexes; 00025 v_badstrips=other.v_badstrips; 00026 BadComponentVect=other.BadComponentVect; 00027 SiStripDetCabling_=other.SiStripDetCabling_; 00028 }
SiStripQuality::~SiStripQuality | ( | ) | [inline] |
Definition at line 51 of file SiStripQuality.h.
References lat::endl(), LogTrace, and reader.
00051 { 00052 LogTrace("SiStripQuality") << "SiStripQuality destructor" << std::endl; 00053 delete reader; 00054 }
void SiStripQuality::add | ( | const SiStripDetCabling * | cab | ) |
Definition at line 91 of file SiStripQuality.cc.
References addInvalidConnectionFromCabling(), addNotConnectedConnectionFromCabling(), and SiStripDetCabling_.
00091 { 00092 SiStripDetCabling_=cab; 00093 addInvalidConnectionFromCabling(); 00094 addNotConnectedConnectionFromCabling(); 00095 }
void SiStripQuality::add | ( | const SiStripBadStrip * | base | ) |
Definition at line 156 of file SiStripQuality.cc.
References lat::endl(), SiStripBadStrip::getDataVectorBegin(), SiStripBadStrip::getRegistryVectorBegin(), SiStripBadStrip::getRegistryVectorEnd(), and LogTrace.
00156 { 00157 SiStripBadStrip::RegistryIterator basebegin = base->getRegistryVectorBegin(); 00158 SiStripBadStrip::RegistryIterator baseend = base->getRegistryVectorEnd(); 00159 00160 //the Registry already contains data 00161 //Loop on detids 00162 for (SiStripBadStrip::RegistryIterator basep=basebegin; basep != baseend; ++basep) { 00163 uint32_t detid=basep->detid; 00164 LogTrace("SiStripQuality") << "add detid " <<detid << std::endl; 00165 00166 SiStripBadStrip::Range baserange = SiStripBadStrip::Range( base->getDataVectorBegin()+basep->ibegin , base->getDataVectorBegin()+basep->iend ); 00167 00168 add(detid,baserange); 00169 } 00170 }
void SiStripQuality::add | ( | const uint32_t & | detid, | |
const SiStripBadStrip::Range & | baserange | |||
) |
Definition at line 172 of file SiStripQuality.cc.
References compact(), SiStripBadStrip::decode(), lat::endl(), SiStripBadStrip::data::firstStrip, SiStripBadStrip::data::flag, SiStripDetInfoFileReader::getNumberOfApvsAndStripLength(), SiStripBadStrip::getRange(), LogTrace, put_replace(), range, SiStripBadStrip::data::range, reader, and tmp.
00172 { 00173 std::vector<unsigned int> vect, tmp; 00174 00175 unsigned short Nstrips=reader->getNumberOfApvsAndStripLength(detid).first*128; 00176 00177 //Is this detid already in the collections owned by this class? 00178 SiStripBadStrip::Range range = getRange(detid); 00179 00180 //Append bad strips 00181 tmp.clear(); 00182 if (range.first==range.second){ 00183 LogTrace("SiStripQuality") << "new detid" << std::endl; 00184 //It's a new detid 00185 tmp.insert(tmp.end(),baserange.first,baserange.second); 00186 std::stable_sort(tmp.begin(),tmp.end()); 00187 LogTrace("SiStripQuality") << "ordered" << std::endl; 00188 } else { 00189 LogTrace("SiStripQuality") << "already exists" << std::endl; 00190 //alredy existing detid 00191 00192 //if full det is bad go to next detid 00193 SiStripBadStrip::data data_=decode(*(range.first)); 00194 if(range.second-range.first==1 00195 && data_.firstStrip==0 00196 && data_.range>=Nstrips){ 00197 LogTrace("SiStripQuality") << "full det is bad.. " << range.second-range.first << " " << decode(*(range.first)).firstStrip << " " << decode(*(range.first)).range << " " << decode(*(range.first)).flag <<"\n"<< std::endl; 00198 return; 00199 } 00200 00201 tmp.insert(tmp.end(),baserange.first,baserange.second); 00202 tmp.insert(tmp.end(),range.first,range.second); 00203 std::stable_sort(tmp.begin(),tmp.end()); 00204 LogTrace("SiStripQuality") << "ordered" << std::endl; 00205 } 00206 //Compact data 00207 compact(tmp,vect,Nstrips); 00208 SiStripBadStrip::Range newrange(vect.begin(),vect.end()); 00209 if ( ! put_replace(detid,newrange) ) 00210 edm::LogError("SiStripQuality")<<"[" << __PRETTY_FUNCTION__ << "] " << std::endl; 00211 }
void SiStripQuality::addInvalidConnectionFromCabling | ( | ) |
Definition at line 116 of file SiStripQuality.cc.
References SiStripDetCabling::addActiveDetectorsRawIds(), SiStripBadStrip::encode(), lat::endl(), SiStripDetCabling::getConnections(), sistrip::invalid_, LogTrace, SiStripDetCabling::nApvPairs(), range, and SiStripDetCabling_.
Referenced by add().
00116 { 00117 00118 std::vector<uint32_t> connected_detids; 00119 SiStripDetCabling_->addActiveDetectorsRawIds(connected_detids); 00120 std::vector<uint32_t>::const_iterator itdet = connected_detids.begin(); 00121 std::vector<uint32_t>::const_iterator itdetEnd = connected_detids.end(); 00122 for(;itdet!=itdetEnd;++itdet){ 00123 //LogTrace("SiStripQuality") << "[addInvalidConnectionFromCabling] looking at detid " <<*itdet << std::endl; 00124 const std::vector<FedChannelConnection>& fedconns=SiStripDetCabling_->getConnections(*itdet); 00125 std::vector<FedChannelConnection>::const_iterator itconns=fedconns.begin(); 00126 std::vector<FedChannelConnection>::const_iterator itconnsEnd=fedconns.end(); 00127 00128 unsigned short nApvPairs=SiStripDetCabling_->nApvPairs(*itdet); 00129 short ngoodConn=0, goodConn=0; 00130 for(;itconns!=itconnsEnd;++itconns){ 00131 //LogTrace("SiStripQuality") << "[addInvalidConnectionFromCabling] apvpair " << itconns->apvPairNumber() << " napvpair " << itconns->nApvPairs()<< " detid " << itconns->detId() << std::endl; 00132 if(itconns->nApvPairs()==sistrip::invalid_) 00133 continue; 00134 ngoodConn++; 00135 goodConn = goodConn | ( 0x1 << itconns->apvPairNumber() ); 00136 } 00137 00138 if (ngoodConn!=nApvPairs){ 00139 std::vector<unsigned int> vect; 00140 for (size_t idx=0;idx<nApvPairs;++idx){ 00141 if( !(goodConn & ( 0x1 << idx)) ) { 00142 short firstStrip=idx*256; 00143 short range=256; 00144 LogTrace("SiStripQuality") << "[addInvalidConnectionFromCabling] add detid " <<*itdet << "firstStrip " << firstStrip<< std::endl; 00145 vect.push_back(encode(firstStrip,range)); 00146 } 00147 } 00148 if(!vect.empty()){ 00149 SiStripBadStrip::Range Range(vect.begin(),vect.end()); 00150 add(*itdet,Range); 00151 } 00152 } 00153 } 00154 }
void SiStripQuality::addNotConnectedConnectionFromCabling | ( | ) |
Definition at line 97 of file SiStripQuality.cc.
References SiStripBadStrip::encode(), lat::endl(), SiStripDetInfoFileReader::getAllData(), SiStripDetCabling::IsConnected(), iter, LogTrace, range, reader, and SiStripDetCabling_.
Referenced by add().
00097 { 00098 00099 std::map<uint32_t, SiStripDetInfoFileReader::DetInfo > allData = reader->getAllData(); 00100 std::map<uint32_t, SiStripDetInfoFileReader::DetInfo >::const_iterator iter=allData.begin(); 00101 std::map<uint32_t, SiStripDetInfoFileReader::DetInfo >::const_iterator iterEnd=allData.end(); 00102 std::vector<unsigned int> vect; 00103 short firstStrip=0; 00104 short range=0; 00105 for(;iter!=iterEnd;++iter) 00106 if (!SiStripDetCabling_->IsConnected(iter->first)){ 00107 vect.clear(); 00108 range=iter->second.nApvs*128; 00109 LogTrace("SiStripQuality") << "[addNotConnectedConnectionFromCabling] add detid " << iter->first << std::endl; 00110 vect.push_back(encode(firstStrip,range)); 00111 SiStripBadStrip::Range Range(vect.begin(),vect.end()); 00112 add(iter->first,Range); 00113 } 00114 }
Definition at line 372 of file SiStripQuality.cc.
References lat::endl(), SiStripBadStrip::indexes, LogTrace, SiStripBadStrip::put(), range, toCleanUp, and SiStripBadStrip::v_badstrips.
Referenced by operator+=(), operator-=(), and SiStripQualityConfigurableFakeESSource::produce().
00372 { 00373 00374 if (!toCleanUp && !force) 00375 return false; 00376 00377 toCleanUp=false; 00378 00379 std::vector<unsigned int> v_badstrips_tmp=v_badstrips; 00380 std::vector<DetRegistry> indexes_tmp=indexes; 00381 00382 LogTrace("SiStripQuality") << "[SiStripQuality::cleanUp] before cleanUp v_badstrips.size()= " << v_badstrips.size() << " indexes.size()=" << indexes.size() << std::endl; 00383 00384 v_badstrips.clear(); 00385 indexes.clear(); 00386 00387 SiStripBadStrip::RegistryIterator basebegin = indexes_tmp.begin(); 00388 SiStripBadStrip::RegistryIterator baseend = indexes_tmp.end(); 00389 00390 for (SiStripBadStrip::RegistryIterator basep=basebegin; basep != baseend; ++basep) { 00391 if(basep->ibegin!=basep->iend){ 00392 SiStripBadStrip::Range range( v_badstrips_tmp.begin()+basep->ibegin, v_badstrips_tmp.begin()+basep->iend ); 00393 if ( ! put(basep->detid,range) ) 00394 edm::LogError("SiStripQuality")<<"[" << __PRETTY_FUNCTION__ << "] " << std::endl; 00395 } 00396 } 00397 00398 LogTrace("SiStripQuality") << "[SiStripQuality::cleanUp] after cleanUp v_badstrips.size()= " << v_badstrips.size() << " indexes.size()=" << indexes.size() << std::endl; 00399 return true; 00400 }
Definition at line 56 of file SiStripQuality.h.
References BadComponentVect, SiStripBadStrip::indexes, toCleanUp, and SiStripBadStrip::v_badstrips.
Referenced by SiStripHotStripAlgorithmFromClusterOccupancy::extractBadStrips().
00056 { 00057 v_badstrips.clear(); 00058 indexes.clear(); 00059 BadComponentVect.clear(); 00060 toCleanUp=false; 00061 }
void SiStripQuality::compact | ( | std::vector< unsigned int > & | tmp, | |
std::vector< unsigned int > & | vect, | |||
unsigned short & | Nstrips | |||
) | [private] |
Definition at line 295 of file SiStripQuality.cc.
References SiStripBadStrip::decode(), SiStripBadStrip::encode(), SiStripBadStrip::data::firstStrip, it, and SiStripBadStrip::data::range.
00295 { 00296 SiStripBadStrip::data fs_0, fs_1; 00297 vect.clear(); 00298 00299 ContainerIterator it=tmp.begin(); 00300 fs_0=decode(*it); 00301 00302 //Check if at the module end 00303 if (fs_0.firstStrip+fs_0.range>=Nstrips){ 00304 vect.push_back(encode(fs_0.firstStrip,Nstrips-fs_0.firstStrip)); 00305 return; 00306 } 00307 00308 ++it; 00309 for(;it!=tmp.end();++it){ 00310 fs_1=decode(*it); 00311 00312 if (fs_0.firstStrip+fs_0.range>=fs_1.firstStrip+fs_1.range){ 00313 //fs_0 includes fs_1, go ahead 00314 } else if (fs_0.firstStrip+fs_0.range>=fs_1.firstStrip){ 00315 // contiguous or superimposed intervals 00316 //Check if at the module end 00317 if (fs_1.firstStrip+fs_1.range>=Nstrips){ 00318 vect.push_back(encode(fs_0.firstStrip,Nstrips-fs_0.firstStrip)); 00319 return; 00320 }else{ 00321 //create new fs_0 00322 fs_0.range=fs_1.firstStrip+fs_1.range-fs_0.firstStrip; 00323 } 00324 } else{ 00325 //separated intervals 00326 vect.push_back(encode(fs_0.firstStrip,fs_0.range)); 00327 fs_0=fs_1; 00328 } 00329 } 00330 vect.push_back(encode(fs_0.firstStrip,fs_0.range)); 00331 }
Definition at line 213 of file SiStripQuality.cc.
References SiStripDetInfoFileReader::getNumberOfApvsAndStripLength(), reader, and tmp.
Referenced by add(), SiStripCondObjBuilderFromDb::buildStripRelatedObjects(), and SiStripHotStripAlgorithmFromClusterOccupancy::extractBadStrips().
00213 { 00214 std::vector<unsigned int> tmp=vect; 00215 vect.clear(); 00216 std::stable_sort(tmp.begin(),tmp.end()); 00217 unsigned short Nstrips=reader->getNumberOfApvsAndStripLength(detid).first*128; 00218 compact(tmp,vect,Nstrips); 00219 }
void SiStripQuality::fillBadComponents | ( | ) |
Definition at line 402 of file SiStripQuality.cc.
References SiStripQuality::BadComponent::BadApvs, BadComponentVect, SiStripQuality::BadComponent::BadFibers, SiStripQuality::BadComponent::BadModule, SiStripBadStrip::decode(), SiStripQuality::BadComponent::detid, SiStripBadStrip::data::firstStrip, SiStripDetInfoFileReader::getNumberOfApvsAndStripLength(), SiStripBadStrip::indexes, it, range, SiStripBadStrip::data::range, reader, HLT_VtxMuL3::result, and SiStripBadStrip::v_badstrips.
Referenced by SiStripHotStripAlgorithmFromClusterOccupancy::extractBadStrips(), operator+=(), and operator-=().
00402 { 00403 00404 BadComponentVect.clear(); 00405 00406 for (SiStripBadStrip::RegistryIterator basep=indexes.begin(); basep != indexes.end(); ++basep) { 00407 00408 SiStripBadStrip::Range range( v_badstrips.begin()+basep->ibegin, v_badstrips.begin()+basep->iend ); 00409 00410 //Fill BadModules, BadFibers, BadApvs vectors 00411 unsigned short resultA=0, resultF=0; 00412 BadComponent result; 00413 00414 SiStripBadStrip::data fs; 00415 unsigned short Nstrips=reader->getNumberOfApvsAndStripLength(basep->detid).first*128; 00416 00417 //BadModules 00418 fs=decode(*(range.first)); 00419 if (basep->iend - basep->ibegin == 1 && 00420 fs.firstStrip==0 && 00421 fs.range==Nstrips ){ 00422 result.detid=basep->detid; 00423 result.BadModule=true; 00424 result.BadFibers=(1<< (Nstrips/256))-1; 00425 result.BadApvs=(1<< (Nstrips/128))-1; 00426 00427 BadComponentVect.push_back(result); 00428 00429 } else { 00430 00431 //Bad Fibers and Apvs 00432 for(SiStripBadStrip::ContainerIterator it=range.first;it!=range.second;++it){ 00433 fs=decode(*it); 00434 00435 //BadApvs 00436 for(short apvNb=0;apvNb<6;++apvNb){ 00437 if ( fs.firstStrip<=apvNb*128 && (apvNb+1)*128<=fs.firstStrip+fs.range ){ 00438 resultA=resultA | (1<<apvNb); 00439 } 00440 } 00441 //BadFibers 00442 for(short fiberNb=0;fiberNb<3;++fiberNb){ 00443 if ( fs.firstStrip<=fiberNb*256 && (fiberNb+1)*256<=fs.firstStrip+fs.range ){ 00444 resultF=resultF | (1<<fiberNb); 00445 } 00446 } 00447 } 00448 if (resultA!=0){ 00449 result.detid=basep->detid; 00450 result.BadModule=false; 00451 result.BadFibers=resultF; 00452 result.BadApvs=resultA; 00453 BadComponentVect.push_back(result); 00454 } 00455 } 00456 } 00457 }
short SiStripQuality::getBadApvs | ( | const uint32_t & | detid | ) | const |
Definition at line 541 of file SiStripQuality.cc.
References BadComponentVect, and p.
Referenced by SiStripRecHitConverterAlgorithm::fillBad128StripBlocks(), and MeasurementTracker::initializeStripStatus().
00541 { 00542 std::vector<BadComponent>::const_iterator p = std::lower_bound(BadComponentVect.begin(),BadComponentVect.end(),detid,SiStripQuality::BadComponentStrictWeakOrdering()); 00543 if (p!=BadComponentVect.end() && p->detid==detid) 00544 return p->BadApvs; 00545 return 0; 00546 }
const std::vector<BadComponent>& SiStripQuality::getBadComponentList | ( | ) | const [inline] |
Definition at line 111 of file SiStripQuality.h.
References BadComponentVect.
Referenced by SiStripQualityConfigurableFakeESSource::produce().
00111 { return BadComponentVect; }
short SiStripQuality::getBadFibers | ( | const uint32_t & | detid | ) | const |
Definition at line 548 of file SiStripQuality.cc.
References BadComponentVect, and p.
Referenced by SiStripRecHitConverterAlgorithm::fillBad128StripBlocks(), and MeasurementTracker::initializeStripStatus().
00548 { 00549 std::vector<BadComponent>::const_iterator p = std::lower_bound(BadComponentVect.begin(),BadComponentVect.end(),detid,SiStripQuality::BadComponentStrictWeakOrdering()); 00550 if (p!=BadComponentVect.end() && p->detid==detid) 00551 return p->BadFibers; 00552 return 0; 00553 }
edm::FileInPath SiStripQuality::getFileInPath | ( | ) | const [inline] |
bool SiStripQuality::IsApvBad | ( | const uint32_t & | detid, | |
const short & | apvNb | |||
) | const |
Definition at line 490 of file SiStripQuality.cc.
References BadComponentVect, and p.
00490 { 00491 std::vector<BadComponent>::const_iterator p = std::lower_bound(BadComponentVect.begin(),BadComponentVect.end(),detid,SiStripQuality::BadComponentStrictWeakOrdering()); 00492 if (p!=BadComponentVect.end() && p->detid==detid) 00493 return ((p->BadApvs>>apvNb)&0x1); 00494 return false; 00495 }
bool SiStripQuality::IsFiberBad | ( | const uint32_t & | detid, | |
const short & | fiberNb | |||
) | const |
Definition at line 483 of file SiStripQuality.cc.
References BadComponentVect, and p.
00483 { 00484 std::vector<BadComponent>::const_iterator p = std::lower_bound(BadComponentVect.begin(),BadComponentVect.end(),detid,SiStripQuality::BadComponentStrictWeakOrdering()); 00485 if (p!=BadComponentVect.end() && p->detid==detid) 00486 return ((p->BadFibers>>fiberNb)&0x1); 00487 return false; 00488 }
bool SiStripQuality::IsModuleBad | ( | const uint32_t & | detid | ) | const |
Definition at line 475 of file SiStripQuality.cc.
References BadComponentVect, and p.
00475 { 00476 00477 std::vector<BadComponent>::const_iterator p = std::lower_bound(BadComponentVect.begin(),BadComponentVect.end(),detid,SiStripQuality::BadComponentStrictWeakOrdering()); 00478 if (p!=BadComponentVect.end() && p->detid==detid) 00479 return p->BadModule; 00480 return false; 00481 }
bool SiStripQuality::IsModuleUsable | ( | const uint32_t & | detid | ) | const |
Definition at line 461 of file SiStripQuality.cc.
References BadComponentVect, SiStripDetCabling::IsConnected(), NULL, p, and SiStripDetCabling_.
Referenced by MeasurementTracker::initializeStripStatus(), and SiStripRecHitConverterAlgorithm::run().
00461 { 00462 00463 std::vector<BadComponent>::const_iterator p = std::lower_bound(BadComponentVect.begin(),BadComponentVect.end(),detid,SiStripQuality::BadComponentStrictWeakOrdering()); 00464 if (p!=BadComponentVect.end() && p->detid==detid) 00465 if(p->BadModule) 00466 return false; 00467 00468 if (SiStripDetCabling_!=NULL) 00469 if(!SiStripDetCabling_->IsConnected(detid)) 00470 return false; 00471 00472 return true; 00473 }
Definition at line 502 of file SiStripQuality.cc.
References SiStripBadStrip::decode(), SiStripBadStrip::data::firstStrip, it, SiStripBadStrip::data::range, and HLT_VtxMuL3::result.
00502 { 00503 bool result=false; 00504 SiStripBadStrip::data fs; 00505 for(SiStripBadStrip::ContainerIterator it=range.first;it!=range.second;++it){ 00506 fs=decode(*it); 00507 if ( fs.firstStrip<=strip && strip<fs.firstStrip+fs.range ){ 00508 result=true; 00509 break; 00510 } 00511 } 00512 return result; 00513 }
bool SiStripQuality::IsStripBad | ( | const uint32_t & | detid, | |
const short & | strip | |||
) | const |
Definition at line 497 of file SiStripQuality.cc.
References SiStripBadStrip::getRange(), and range.
Referenced by SiStripThreeThresholdAlgo::add().
00497 { 00498 SiStripBadStrip::Range range=getRange(detid); 00499 return IsStripBad(range,strip); 00500 }
Definition at line 515 of file SiStripQuality.cc.
References SiStripBadStrip::decode(), SiStripBadStrip::data::firstStrip, it, SiStripBadStrip::data::range, and HLT_VtxMuL3::result.
00515 { 00516 int result=0; 00517 SiStripBadStrip::data fs; 00518 for(SiStripBadStrip::ContainerIterator it=range.first;it!=range.second;++it){ 00519 fs=decode(*it); 00520 if ( fs.firstStrip<=strip && strip<fs.firstStrip+fs.range ){ 00521 result=strip-fs.firstStrip+1; 00522 break; 00523 } 00524 } 00525 return result; 00526 }
Definition at line 528 of file SiStripQuality.cc.
References SiStripBadStrip::decode(), SiStripBadStrip::data::firstStrip, it, SiStripBadStrip::data::range, and HLT_VtxMuL3::result.
00528 { 00529 int result=0; 00530 SiStripBadStrip::data fs; 00531 for(SiStripBadStrip::ContainerIterator it=range.first;it!=range.second;++it){ 00532 fs=decode(*it); 00533 if ( fs.firstStrip<=strip && strip<fs.firstStrip+fs.range ){ 00534 result=fs.firstStrip+fs.range-strip; 00535 break; 00536 } 00537 } 00538 return result; 00539 }
bool SiStripQuality::operator!= | ( | const SiStripQuality & | other | ) | const |
SiStripQuality & SiStripQuality::operator+= | ( | const SiStripQuality & | other | ) |
Definition at line 31 of file SiStripQuality.cc.
References cleanUp(), and fillBadComponents().
00031 { 00032 this->add(&other); 00033 this->cleanUp(); 00034 this->fillBadComponents(); 00035 return *this; 00036 }
const SiStripQuality SiStripQuality::operator- | ( | const SiStripQuality & | other | ) | const |
Definition at line 80 of file SiStripQuality.cc.
References SiStripQuality().
00080 { 00081 return SiStripQuality(*this) -= other; 00082 }
SiStripQuality & SiStripQuality::operator-= | ( | const SiStripQuality & | other | ) |
Definition at line 38 of file SiStripQuality.cc.
References cleanUp(), SiStripBadStrip::decode(), lat::endl(), fillBadComponents(), SiStripBadStrip::data::firstStrip, SiStripBadStrip::getDataVectorBegin(), SiStripDetInfoFileReader::getNumberOfApvsAndStripLength(), SiStripBadStrip::getRange(), SiStripBadStrip::getRegistryVectorBegin(), SiStripBadStrip::getRegistryVectorEnd(), put_replace(), range, SiStripBadStrip::data::range, reader, and subtract().
00038 { 00039 00040 SiStripBadStrip::RegistryIterator rbegin = other.getRegistryVectorBegin(); 00041 SiStripBadStrip::RegistryIterator rend = other.getRegistryVectorEnd(); 00042 std::vector<unsigned int> ovect,vect; 00043 uint32_t detid; 00044 unsigned short Nstrips; 00045 00046 for (SiStripBadStrip::RegistryIterator rp=rbegin; rp != rend; ++rp) { 00047 00048 detid=rp->detid; 00049 Nstrips=reader->getNumberOfApvsAndStripLength(detid).first*128; 00050 00051 SiStripBadStrip::Range orange = SiStripBadStrip::Range( other.getDataVectorBegin()+rp->ibegin , other.getDataVectorBegin()+rp->iend ); 00052 00053 //Is this detid already in the collections owned by this class? 00054 SiStripBadStrip::Range range = getRange(detid); 00055 if (range.first!=range.second){ //yes, it is 00056 00057 vect.clear(); 00058 ovect.clear(); 00059 00060 //if other full det is bad, remove det from this 00061 SiStripBadStrip::data data_=decode(*(orange.first)); 00062 if(orange.second-orange.first!=1 00063 || data_.firstStrip!=0 00064 || data_.range<Nstrips){ 00065 00066 ovect.insert(ovect.end(),orange.first,orange.second); 00067 vect.insert(vect.end(),range.first,range.second); 00068 subtract(vect,ovect); 00069 } 00070 SiStripBadStrip::Range newrange(vect.begin(),vect.end()); 00071 if ( ! put_replace(detid,newrange) ) 00072 edm::LogError("SiStripQuality")<<"[" << __PRETTY_FUNCTION__ << "] " << std::endl; 00073 } 00074 } 00075 cleanUp(); 00076 fillBadComponents(); 00077 return *this; 00078 }
bool SiStripQuality::operator== | ( | const SiStripQuality & | other | ) | const |
Definition at line 84 of file SiStripQuality.cc.
References a, SiStripBadStrip::getRegistryVectorBegin(), and SiStripBadStrip::getRegistryVectorEnd().
00084 { 00085 SiStripQuality a = (*this) - other ; 00086 return a.getRegistryVectorBegin()==a.getRegistryVectorEnd(); 00087 }
Definition at line 221 of file SiStripQuality.cc.
References SiStripBadStrip::DetRegistry::detid, lat::endl(), SiStripBadStrip::DetRegistry::ibegin, SiStripBadStrip::DetRegistry::iend, SiStripBadStrip::indexes, LogTrace, p, toCleanUp, and SiStripBadStrip::v_badstrips.
Referenced by add(), and operator-=().
00221 { 00222 // put in SiStripQuality::v_badstrips of DetId 00223 Registry::iterator p = std::lower_bound(indexes.begin(),indexes.end(),DetId,SiStripBadStrip::StrictWeakOrdering()); 00224 00225 size_t sd= input.second-input.first; 00226 DetRegistry detregistry; 00227 detregistry.detid=DetId; 00228 detregistry.ibegin=v_badstrips.size(); 00229 detregistry.iend=v_badstrips.size()+sd; 00230 00231 v_badstrips.insert(v_badstrips.end(),input.first,input.second); 00232 00233 if (p!=indexes.end() && p->detid==DetId){ 00234 LogTrace("SiStripQuality") << "[SiStripQuality::put_replace] Replacing SiStripQuality for already stored DetID " << DetId << std::endl; 00235 toCleanUp=true; 00236 *p=detregistry; 00237 } else { 00238 indexes.insert(p,detregistry); 00239 } 00240 00241 return true; 00242 }
void SiStripQuality::ReduceGranularity | ( | double | threshold | ) |
Definition at line 250 of file SiStripQuality.cc.
References SiStripBadStrip::decode(), SiStripBadStrip::encode(), SiStripBadStrip::data::firstStrip, SiStripBadStrip::getDataVectorBegin(), SiStripBadStrip::getRegistryVectorBegin(), SiStripBadStrip::getRegistryVectorEnd(), i, it, LogTrace, max, min, and SiStripBadStrip::data::range.
00250 { 00251 00252 SiStripBadStrip::RegistryIterator rp = getRegistryVectorBegin(); 00253 SiStripBadStrip::RegistryIterator rend = getRegistryVectorEnd(); 00254 SiStripBadStrip::data data_; 00255 uint16_t BadStripPerApv[6], ipos; 00256 std::vector<unsigned int> vect; 00257 00258 for (; rp != rend; ++rp) { 00259 uint32_t detid=rp->detid; 00260 00261 BadStripPerApv[0]=0; BadStripPerApv[1]=0; BadStripPerApv[2]=0; BadStripPerApv[3]=0; BadStripPerApv[4]=0; BadStripPerApv[5]=0; 00262 ipos=0; 00263 00264 SiStripBadStrip::Range sqrange = SiStripBadStrip::Range( getDataVectorBegin()+rp->ibegin , getDataVectorBegin()+rp->iend ); 00265 00266 for(int it=0;it<sqrange.second-sqrange.first;it++){ 00267 00268 data_=decode( *(sqrange.first+it) ); 00269 LogTrace("SiStripQuality") << "[SiStripQuality::ReduceGranularity] detid " << detid << " first strip " << data_.firstStrip << " lastStrip " << data_.firstStrip+data_.range-1 << " range " << data_.range; 00270 ipos= data_.firstStrip/128; 00271 while (ipos<=(data_.firstStrip+data_.range-1)/128){ 00272 BadStripPerApv[ipos]+=std::min(data_.firstStrip+data_.range,(ipos+1)*128)-std::max(data_.firstStrip*1,ipos*128); 00273 LogTrace("SiStripQuality") << "[SiStripQuality::ReduceGranularity] ipos " << ipos << " Counter " << BadStripPerApv[ipos] << " min " << std::min(data_.firstStrip+data_.range,(ipos+1)*128) << " max " << std::max(data_.firstStrip*1,ipos*128) << " added " << std::min(data_.firstStrip+data_.range,(ipos+1)*128)-std::max(data_.firstStrip*1,ipos*128); 00274 ipos++; 00275 } 00276 } 00277 00278 LogTrace("SiStripQuality") << "[SiStripQuality::ReduceGranularity] Total for detid " << detid << " values " << BadStripPerApv[0] << " " << BadStripPerApv[1] << " " << BadStripPerApv[2] << " " <<BadStripPerApv[3] << " " <<BadStripPerApv[4] << " " << BadStripPerApv[5]; 00279 00280 00281 vect.clear(); 00282 for(size_t i=0;i<6;++i){ 00283 if (BadStripPerApv[i]>=threshold*128){ 00284 vect.push_back(encode(i*128,128)); 00285 } 00286 } 00287 if(!vect.empty()){ 00288 SiStripBadStrip::Range Range(vect.begin(),vect.end()); 00289 add(detid,Range); 00290 } 00291 } 00292 }
void SiStripQuality::subtract | ( | std::vector< unsigned int > & | A, | |
const std::vector< unsigned int > & | B | |||
) | [private] |
Definition at line 333 of file SiStripQuality.cc.
References it, and subtraction().
Referenced by operator-=().
00333 { 00334 ContainerIterator it=B.begin(); 00335 ContainerIterator itend=B.end(); 00336 for(;it!=itend;++it){ 00337 subtraction(A,*it); 00338 } 00339 }
void SiStripQuality::subtraction | ( | std::vector< unsigned int > & | A, | |
const unsigned int & | B | |||
) | [private] |
Definition at line 341 of file SiStripQuality.cc.
References SiStripBadStrip::decode(), SiStripBadStrip::encode(), SiStripBadStrip::data::firstStrip, SiStripBadStrip::data::range, and tmp.
Referenced by subtract().
00341 { 00342 SiStripBadStrip::data fs_A, fs_B, fs_m, fs_M; 00343 std::vector<unsigned int> tmp; 00344 00345 fs_B=decode(B); 00346 ContainerIterator jt=A.begin(); 00347 ContainerIterator jtend=A.end(); 00348 for(;jt!=jtend;++jt){ 00349 fs_A=decode(*jt); 00350 if (B<*jt){ 00351 fs_m=fs_B; 00352 fs_M=fs_A; 00353 }else{ 00354 fs_m=fs_A; 00355 fs_M=fs_B; 00356 } 00357 //A) Verify the range to be subtracted crosses the new range 00358 if (fs_m.firstStrip+fs_m.range>fs_M.firstStrip){ 00359 if (*jt<B){ 00360 tmp.push_back(encode(fs_A.firstStrip,fs_B.firstStrip-fs_A.firstStrip)); 00361 } 00362 if (fs_A.firstStrip+fs_A.range>fs_B.firstStrip+fs_B.range){ 00363 tmp.push_back(encode(fs_B.firstStrip+fs_B.range,fs_A.firstStrip+fs_A.range-(fs_B.firstStrip+fs_B.range))); 00364 } 00365 }else{ 00366 tmp.push_back(*jt); 00367 } 00368 } 00369 A=tmp; 00370 }
std::vector<BadComponent> SiStripQuality::BadComponentVect [private] |
Definition at line 126 of file SiStripQuality.h.
Referenced by clear(), fillBadComponents(), getBadApvs(), getBadComponentList(), getBadFibers(), IsApvBad(), IsFiberBad(), IsModuleBad(), IsModuleUsable(), and SiStripQuality().
edm::FileInPath SiStripQuality::FileInPath_ [private] |
Definition at line 123 of file SiStripQuality.h.
Referenced by getFileInPath(), and SiStripQuality().
SiStripDetInfoFileReader* SiStripQuality::reader [private] |
Definition at line 124 of file SiStripQuality.h.
Referenced by add(), addNotConnectedConnectionFromCabling(), compact(), fillBadComponents(), operator-=(), SiStripQuality(), and ~SiStripQuality().
const SiStripDetCabling* SiStripQuality::SiStripDetCabling_ [private] |
Definition at line 128 of file SiStripQuality.h.
Referenced by add(), addInvalidConnectionFromCabling(), addNotConnectedConnectionFromCabling(), IsModuleUsable(), and SiStripQuality().
bool SiStripQuality::toCleanUp [private] |
Definition at line 122 of file SiStripQuality.h.
Referenced by cleanUp(), clear(), put_replace(), and SiStripQuality().