#include <StripSrv.h>
Public Types | |
typedef calibUtil::StripSrv::stowerRC | towerRC |
Clients should use as return values for readData. | |
typedef std::vector< unsigned short int > | StripCol |
UNKNOWN_BADTYPE | |
DEAD | |
HOT | |
enum | eBadType { UNKNOWN_BADTYPE, DEAD, HOT } |
Public Member Functions | |
StripSrv (std::string xmlFileName) | |
StripSrv (eBadType badType, const GenericSrv &gen) | |
Constructor to be used when creating new calibrations. | |
~StripSrv () | |
destructor used to deallocate memory | |
eBadType | getBadType () const |
returns the status (Hot or Dead) of the strips | |
void | getBadTowers (std::vector< towerRC > &towerIds) const |
lists all towers with bad strips | |
std::string | getInst () const |
Get instrument name. | |
std::string | getTimestamp () const |
Get timestamp. | |
std::string | getCalType () const |
Get calibration type. | |
std::string | getFmtVer () const |
Get format Version. | |
eVisitorRet | traverseInfo (ClientObject *client) const |
call back method for client to access large data | |
eVisitorRet | writeXml (std::ostream *out) |
Private Types | |
typedef calibUtil::StripSrv::sUniplane | Uniplane |
typedef calibUtil::StripSrv::sTower | Tower |
FROM_PERS | |
BUILDING | |
WRITTEN | |
enum | eState { FROM_PERS, BUILDING, WRITTEN } |
Private Member Functions | |
void | strToNum (std::string strips, std::vector< unsigned short int > &v) |
void | fillUni (const XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *uniElt, Uniplane *uni) |
void | fillStrips (const XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *badElt, StripCol &list) |
Tower * | findTower (towerRC &towerId) |
Internal utility, used when this object must be mutable (e.g. addBad). | |
const Tower * | findTower (const towerRC &towerId) const |
const version of findTower, used by const public methods | |
Private Attributes | |
std::vector< Tower > | m_towers |
eBadType | m_badType |
eState | m_state |
GenericSrv * | m_genSrv |
Classes | |
struct | sTower |
struct | stowerRC |
Clients should use as return values for readData. More... | |
struct | sUniplane |
Definition at line 59 of file StripSrv.h.
typedef std::vector<unsigned short int> calibUtil::StripSrv::StripCol |
Definition at line 71 of file StripSrv.h.
typedef struct calibUtil::StripSrv::sTower calibUtil::StripSrv::Tower [private] |
typedef struct calibUtil::StripSrv::stowerRC calibUtil::StripSrv::towerRC |
Clients should use as return values for readData.
typedef struct calibUtil::StripSrv::sUniplane calibUtil::StripSrv::Uniplane [private] |
enum calibUtil::StripSrv::eState [private] |
Definition at line 138 of file StripSrv.h.
00138 { 00139 FROM_PERS, // read in from persistent form; read-only 00140 BUILDING, // in process of building the list 00141 WRITTEN }; // built and written to persistent form (read-only)
calibUtil::StripSrv::StripSrv | ( | std::string | xmlFileName | ) |
constructor. Initializes strip service by creating a DOM structure out of the XML file and filling in the internal data structures
Definition at line 30 of file StripSrv.cxx.
References DEAD, fillUni(), xmlBase::DomException::getMsg(), HOT, calibUtil::StripSrv::sTower::m_allBad, m_badType, calibUtil::StripSrv::sTower::m_col, m_genSrv, calibUtil::StripSrv::sUniplane::m_howBad, calibUtil::StripSrv::sTower::m_howBad, calibUtil::StripSrv::sTower::m_row, m_towers, calibUtil::StripSrv::sTower::m_uniplanes, xmlBase::XmlParser::parse(), deljobs::string, UNKNOWN_BADTYPE, vCALIBUTIL_nOnbdCalib, vCALIBUTIL_nOnbdData, and vCALIBUTIL_nOnbdTrig.
00030 : m_badType(UNKNOWN_BADTYPE), 00031 m_state(FROM_PERS), 00032 m_genSrv(0) 00033 { 00034 using xmlBase::Dom; 00035 using XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument; 00036 00037 xmlBase::XmlParser* parser = new xmlBase::XmlParser(); 00038 DOMDocument* doc = parser->parse(xmlFileName.c_str()); 00039 00040 if (doc == 0) { 00041 std::cerr << "Error parsing document" << xmlFileName << std::endl; 00042 return; 00043 } 00044 00045 DOMElement* docElt = doc->getDocumentElement(); 00046 m_genSrv = new GenericSrv(docElt); 00047 00048 std::vector<DOMElement *> towers; 00049 00050 Dom::getDescendantsByTagName(docElt, "tower", towers); 00051 unsigned nTower = towers.size(); 00052 00053 m_towers.reserve(nTower); 00054 00055 std::string bString = Dom::getAttribute(docElt,"badType"); 00056 if (!bString.compare("hot")) m_badType = HOT; 00057 else if (!bString.compare("dead")) m_badType = DEAD; 00058 else m_badType = UNKNOWN_BADTYPE; 00059 00060 00061 for (unsigned int iTower = 0; iTower < nTower; iTower++) { 00062 Tower tower; 00063 tower.m_uniplanes.clear(); 00064 try { 00065 tower.m_row = Dom::getIntAttribute(towers[iTower], "row"); 00066 tower.m_col = Dom::getIntAttribute(towers[iTower], "col"); 00067 } 00068 catch (xmlBase::DomException ex) { 00069 std::cerr << "From calibUtil::StripSrv::StripSrv" << std::endl 00070 << ex.getMsg() << std::endl; 00071 throw ex; 00072 } 00073 00074 tower.m_howBad = 0; 00075 tower.m_allBad = 0; 00076 00077 std::string attValue = Dom::getAttribute(towers[iTower], "nOnbdCalib"); 00078 if (attValue.compare("true") == 0) { 00079 tower.m_howBad |= vCALIBUTIL_nOnbdCalib; 00080 } 00081 attValue = Dom::getAttribute(towers[iTower], "nOnbdTrig"); 00082 if (attValue.compare("true") == 0) { 00083 tower.m_howBad |= vCALIBUTIL_nOnbdTrig; 00084 } 00085 attValue = Dom::getAttribute(towers[iTower], "nOnbdData"); 00086 if (attValue.compare("true") == 0) { 00087 tower.m_howBad |= vCALIBUTIL_nOnbdData; 00088 } 00089 if (tower.m_howBad) { 00090 tower.m_allBad = 1; 00091 goto NEXT; 00092 } // otherwise have to process individual uniplane elements 00093 00094 { 00095 DOMElement* uniElt = Dom::getFirstChildElement(towers[iTower]); 00096 00097 while (uniElt != 0) { 00098 Uniplane uni; 00099 uni.m_howBad = 0; 00100 fillUni(uniElt, &uni); 00101 // if bad status, complain and return 00102 00103 tower.m_uniplanes.push_back(uni); 00104 uniElt = Dom::getSiblingElement(uniElt); 00105 } 00106 } 00107 NEXT: 00108 m_towers.push_back(tower); 00109 // towerElt = Dom::getSiblingElement(towerElt); 00110 } 00111 }
calibUtil::StripSrv::StripSrv | ( | eBadType | badType, | |
const GenericSrv & | gen | |||
) |
calibUtil::StripSrv::~StripSrv | ( | ) |
destructor used to deallocate memory
Definition at line 114 of file StripSrv.cxx.
References m_genSrv.
00114 { 00115 delete m_genSrv; 00116 }
void calibUtil::StripSrv::fillStrips | ( | const XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * | badElt, | |
StripCol & | list | |||
) | [private] |
void calibUtil::StripSrv::fillUni | ( | const XERCES_CPP_NAMESPACE_QUALIFIER DOMElement * | uniElt, | |
Uniplane * | uni | |||
) | [private] |
Handles all the messy of details of extracting information about a single unilayer from the XML representation
Referenced by StripSrv().
const StripSrv::Tower * calibUtil::StripSrv::findTower | ( | const towerRC & | towerId | ) | const [private] |
const version of findTower, used by const public methods
Definition at line 309 of file StripSrv.cxx.
References calibUtil::StripSrv::stowerRC::col, m_towers, and calibUtil::StripSrv::stowerRC::row.
00309 { 00310 std::vector<Tower>::const_iterator it = m_towers.begin(); 00311 while(it != m_towers.end() ) { 00312 if ((it->m_row == towerId.row) && (it->m_col == towerId.col)) { 00313 return (&(*it)); 00314 } 00315 ++it; 00316 } 00317 return 0; 00318 }
StripSrv::Tower * calibUtil::StripSrv::findTower | ( | towerRC & | towerId | ) | [private] |
Internal utility, used when this object must be mutable (e.g. addBad).
Definition at line 298 of file StripSrv.cxx.
References calibUtil::StripSrv::stowerRC::col, m_towers, and calibUtil::StripSrv::stowerRC::row.
00298 { 00299 std::vector<Tower>::iterator it = m_towers.begin(); 00300 while(it != m_towers.end() ) { 00301 if ((it->m_row == towerId.row) && (it->m_col == towerId.col)) { 00302 return (&(*it)); 00303 } 00304 ++it; 00305 } 00306 return 0; 00307 }
void calibUtil::StripSrv::getBadTowers | ( | std::vector< towerRC > & | towerIds | ) | const |
lists all towers with bad strips
StripSrv::eBadType calibUtil::StripSrv::getBadType | ( | ) | const |
returns the status (Hot or Dead) of the strips
Definition at line 119 of file StripSrv.cxx.
References m_badType.
00119 { 00120 return m_badType; 00121 }
std::string calibUtil::StripSrv::getCalType | ( | ) | const |
Get calibration type.
Definition at line 151 of file StripSrv.cxx.
References calibUtil::GenericSrv::getCalType(), and m_genSrv.
00151 { 00152 return m_genSrv->getCalType(); 00153 }
std::string calibUtil::StripSrv::getFmtVer | ( | ) | const |
Get format Version.
Definition at line 156 of file StripSrv.cxx.
References calibUtil::GenericSrv::getFmtVer(), and m_genSrv.
00156 { 00157 return m_genSrv->getFmtVer(); 00158 }
std::string calibUtil::StripSrv::getInst | ( | ) | const |
Get instrument name.
Definition at line 141 of file StripSrv.cxx.
References calibUtil::GenericSrv::getInst(), and m_genSrv.
00141 { 00142 return m_genSrv->getInst(); 00143 }
std::string calibUtil::StripSrv::getTimestamp | ( | ) | const |
Get timestamp.
Definition at line 146 of file StripSrv.cxx.
References calibUtil::GenericSrv::getTimestamp(), and m_genSrv.
00146 { 00147 return m_genSrv->getTimestamp(); 00148 }
void calibUtil::StripSrv::strToNum | ( | std::string | strips, | |
std::vector< unsigned short int > & | v | |||
) | [private] |
this function takes in a stripList in string format and fills a vector with corresponding strip numbers
Definition at line 268 of file StripSrv.cxx.
References deljobs::string.
00268 { 00269 00270 std::string::iterator it = s.begin(); 00271 00272 // Maybe add something to be sure all we've got are digits 00273 // and blanks?? 00274 00275 // Skip over leading blanks, if any 00276 while((it != s.end()) && (*it == ' ')) it++; 00277 00278 // save contiguous digits in tempStr 00279 while ((it != s.end()) && (*it >= '0') && (*it <= '9')) { 00280 std::string tempStr; 00281 tempStr += *it; 00282 it++; 00283 00284 while((it != s.end()) && (*it >= '0') && (*it <= '9')){ 00285 tempStr += *it; 00286 it++; 00287 } 00288 00289 // No more contiguous digits; skip over blanks 00290 while((it != s.end()) && (*it == ' ')) it++; 00291 00292 // Save the converted integer 00293 v.push_back(atoi(tempStr.c_str())); 00294 } 00295 00296 }
eVisitorRet calibUtil::StripSrv::traverseInfo | ( | ClientObject * | client | ) | const |
call back method for client to access large data
Definition at line 162 of file StripSrv.cxx.
References calibUtil::ClientObject::badPlane(), calibUtil::ClientObject::badTower(), calibUtil::CONT, calibUtil::DONE, and m_towers.
00162 { 00163 00164 /* NOTE: could also check for empty badLists and only 00165 call back client if nonempty. 00166 */ 00167 std::vector<Tower>::const_iterator iTower = m_towers.begin(); 00168 00169 eVisitorRet ret = DONE; 00170 while (iTower != m_towers.end() ) { 00171 if (iTower->m_allBad) { 00172 ret = client->badTower(iTower->m_row, iTower->m_col, iTower->m_howBad); 00173 if (ret != CONT) return ret; 00174 } 00175 // If tower not all bad, loop over planes within towers 00176 else { 00177 std::vector<Uniplane>::const_iterator iUni = 00178 (iTower->m_uniplanes).begin(); 00179 while (iUni != (iTower->m_uniplanes).end() ) { 00180 ret = client->badPlane(iTower->m_row, iTower->m_col, 00181 iUni->m_tray, iUni->m_top, 00182 iUni->m_howBad, iUni->m_allBad, 00183 (iUni->m_strips)); 00184 if (ret != CONT) return ret; 00185 iUni++; 00186 } 00187 } 00188 ++iTower; 00189 } 00190 // If got to here, traversed the entire data structure without 00191 // a murmur from client 00192 return DONE; 00193 }
eVisitorRet calibUtil::StripSrv::writeXml | ( | std::ostream * | out | ) |
Definition at line 320 of file StripSrv.cxx.
References calibUtil::DONE.
00320 { 00321 return DONE; 00322 }
eBadType calibUtil::StripSrv::m_badType [private] |
GenericSrv* calibUtil::StripSrv::m_genSrv [private] |
Definition at line 146 of file StripSrv.h.
Referenced by getCalType(), getFmtVer(), getInst(), getTimestamp(), StripSrv(), and ~StripSrv().
eState calibUtil::StripSrv::m_state [private] |
Definition at line 143 of file StripSrv.h.
std::vector<Tower> calibUtil::StripSrv::m_towers [private] |
Definition at line 135 of file StripSrv.h.
Referenced by findTower(), StripSrv(), and traverseInfo().