00001 #include "ModuleDefectList.h"
00002 #include "ModuleDefect.h"
00003 #include <iomanip>
00004
00005 namespace SctData {
00006
00007 ModuleDefectList::ModuleDefectList() throw() {}
00008
00009
00010 ModuleDefectList::~ModuleDefectList() throw() {}
00011
00012 void ModuleDefectList::addDefect(const ModuleDefect& defect, const ModuleElement& element) throw() {
00013 defectList.push_back(shared_ptr<const ModuleDefect>(new ModuleDefect(defect, element)));
00014 }
00015
00016 void ModuleDefectList::add( shared_ptr<const ModuleDefect> defect) throw() {
00017 defectList.push_back(defect);
00018 }
00019
00020 ModuleDefectList& ModuleDefectList::operator+=(const ModuleDefectList& toadd) throw() {
00021 for (unsigned i=0; i<toadd.defectList.size(); ++i) {
00022 this->add(toadd.defectList[i]);
00023 }
00024 return *this;
00025 }
00026
00027 ostream& ModuleDefectList::print(ostream& out) const throw() {
00028 for (unsigned int i=0; i<defectList.size(); ++i) {
00029 out << setfill(' ') << setw(20) << defectList[i]->getName()
00030 << "\tStart channel: " << defectList[i]->getModuleElement().getFirst()
00031 << "\t# of channels: " << defectList[i]->getModuleElement().getNChannels()
00032 << "\t" << defectList[i]->getDescription() << endl;
00033 }
00034 out << "[ total number of defects = " << defectList.size() << " ]" << endl;
00035 out << endl;
00036 return out;
00037 }
00038
00039 const vector< shared_ptr<const ModuleDefect> >& ModuleDefectList::getAllDefects() const throw() {
00040 return defectList;
00041 }
00042
00043 int ModuleDefectList::getNDefectsAffectingElement(const ModuleElement& el) const throw(Sct::LogicError) {
00044 int count = 0;
00045 for (unsigned i=0; i<defectList.size(); ++i) {
00046 if (defectList[i]->getModuleElement().overlaps(el)) count++;
00047 }
00048 return count;
00049 }
00050 int ModuleDefectList::getNDefectsEncompassingElement(const ModuleElement& el) const throw(Sct::LogicError) {
00051 int count = 0;
00052 for (unsigned i=0; i<defectList.size(); ++i) {
00053 if (defectList[i]->getModuleElement().contains(el)) count++;
00054 }
00055 return count;
00056 }
00057
00058 bool ModuleDefectList::severeDefectAffectingElement(const ModuleElement& el) const throw(Sct::LogicError) {
00059 for (unsigned int i=0; i<defectList.size(); ++i) {
00060 if (defectList[i]->getModuleElement().overlaps(el) && defectList[i]->isSevere()) return true;
00061 }
00062 return false;
00063 }
00064
00065 bool ModuleDefectList::severeDefectEncompassingElement(const ModuleElement& el) const throw(Sct::LogicError) {
00066 for (unsigned int i=0; i<defectList.size(); ++i) {
00067 if (defectList[i]->getModuleElement().contains(el) && defectList[i]->isSevere()) return true;
00068 }
00069 return false;
00070 }
00071
00072 bool ModuleDefectList::defectAffectingElement(const ModuleElement& el, const ModuleDefect& defect) const throw(Sct::LogicError) {
00073 for (unsigned int i=0; i<defectList.size(); ++i) {
00074 if ( defectList[i]->isOfTheSameTypeAs(defect) &&
00075 defectList[i]->getModuleElement().overlaps(el) ) return true;
00076 }
00077 return false;
00078 }
00079
00080 bool ModuleDefectList::defectEncompassingElement(const ModuleElement& el, const ModuleDefect& defect) const throw(Sct::LogicError) {
00081 for (unsigned int i=0; i<defectList.size(); ++i) {
00082 if ( defectList[i]->isOfTheSameTypeAs(defect) &&
00083 defectList[i]->getModuleElement().contains(el) ) return true;
00084 }
00085 return false;
00086 }
00087
00088 bool ModuleDefectList::defectAffectingElement(const ModuleElement& el) const throw(Sct::LogicError) {
00089 for (unsigned int i=0; i<defectList.size(); ++i) {
00090 if ( defectList[i]->getModuleElement().overlaps(el) ) return true;
00091 }
00092 return false;
00093 }
00094
00095 bool ModuleDefectList::defectEncompassingElement(const ModuleElement& el) const throw(Sct::LogicError) {
00096 for (unsigned int i=0; i<defectList.size(); ++i) {
00097 if ( defectList[i]->getModuleElement().contains(el) ) return true;
00098 }
00099 return false;
00100 }
00101
00102 shared_ptr<ModuleDefectList> ModuleDefectList::getDefectsAffectingElement(const ModuleElement& el) const throw(Sct::LogicError) {
00103 shared_ptr<ModuleDefectList> newDefects(new ModuleDefectList());
00104 for (unsigned int i=0; i<defectList.size(); ++i) {
00105 if (defectList[i]->getModuleElement().overlaps(el)) newDefects->add(defectList[i]);
00106 }
00107 return newDefects;
00108 }
00109
00110 shared_ptr<ModuleDefectList> ModuleDefectList::getDefectsEncompassingElement(const ModuleElement& el) const throw(Sct::LogicError) {
00111 shared_ptr<ModuleDefectList> newList(new ModuleDefectList()) ;
00112 for (unsigned int i=0; i<defectList.size(); ++i) {
00113 if (defectList[i]->getModuleElement().contains(el)) newList->add(defectList[i]);
00114 }
00115 return newList;
00116 }
00117
00118 string ModuleDefectList::getClassName() const throw() {
00119 return "SctData::ModuleDefectList";
00120 }
00121
00122
00123 }