calibUtil::StripSrv Class Reference

#include <StripSrv.h>

List of all members.

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)
TowerfindTower (towerRC &towerId)
 Internal utility, used when this object must be mutable (e.g. addBad).
const TowerfindTower (const towerRC &towerId) const
 const version of findTower, used by const public methods

Private Attributes

std::vector< Towerm_towers
eBadType m_badType
eState m_state
GenericSrvm_genSrv

Classes

struct  sTower
struct  stowerRC
 Clients should use as return values for readData. More...
struct  sUniplane


Detailed Description

Definition at line 59 of file StripSrv.h.


Member Typedef Documentation

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]


Member Enumeration Documentation

enum calibUtil::StripSrv::eBadType

Enumerator:
UNKNOWN_BADTYPE 
DEAD 
HOT 

Definition at line 64 of file StripSrv.h.

enum calibUtil::StripSrv::eState [private]

Enumerator:
FROM_PERS 
BUILDING 
WRITTEN 

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)


Constructor & Destructor Documentation

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 
)

Constructor to be used when creating new calibrations.

Definition at line 24 of file StripSrv.cxx.

References m_genSrv.

00025     : m_badType(badType), m_state(BUILDING) {
00026     m_genSrv = new GenericSrv(gen);
00027   }

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   }


Member Function Documentation

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   }


Member Data Documentation

eBadType calibUtil::StripSrv::m_badType [private]

Definition at line 136 of file StripSrv.h.

Referenced by getBadType(), and StripSrv().

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().


Generated on Tue Nov 29 23:36:25 2016 for BOSS_7.0.2 by  doxygen 1.4.7