Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Related Pages

configXMLImpl.h

00001 #ifndef SCTAPI_CONFIGURATIONXMLIMPL
00002 #define SCTAPI_CONFIGURATIONXMLIMPL
00003 
00004 #include <utility>
00005 #include <vector>
00006 #include <libxml/tree.h>
00007 #include <libxml/xpath.h>
00008 
00009 #include <is/isinfotmpl.h>
00010 
00011 #include "log.h"
00012 #include "configuration.h"
00013 
00014 #include "timings.h"
00015 
00016 class ConfigurationXMLImpl : public SctConfiguration::Configuration {
00017   ConfigurationXMLImpl(const ConfigurationXMLImpl &);
00018   ConfigurationXMLImpl &operator=(const ConfigurationXMLImpl &);
00019 
00020   static ConfigurationXMLImpl *m_config;
00021 
00022   xmlDocPtr document;
00023   xmlXPathContextPtr xpathContext;
00024 
00025   Log log;
00026 
00027   std::string lastFilename;
00028 
00029   ISInfoDictionary *is_dict;
00030   bool isLookupDone;
00031 
00032   Timings timings;
00033 
00034 public:
00039   ConfigurationXMLImpl();
00040 
00044   virtual ~ConfigurationXMLImpl();
00045 
00046   /************* Get physical configuration ****************/
00047 
00052   std::list<unsigned int> listPartitions();
00053 
00058   std::list<unsigned int> listCratesInPartition(unsigned int partition);
00059 
00060   bool isDummyCrate(unsigned int partition, unsigned int crate);
00061 
00066   std::list<unsigned int> listRodsInCrate(unsigned int partition, unsigned int crate);
00067 
00074   std::list<unsigned int> listMURSInRod(unsigned int partition, unsigned int crate, unsigned int rod);
00075 
00082   std::list<std::string> listModulesInMUR(unsigned int partition, unsigned int MUR);
00083 
00090   std::list<std::string> listRModulesInMUR(unsigned int partition, unsigned int MUR);
00091 
00097   std::list<std::string> listAllModules();
00098 
00102   std::list<std::string> listUnusedModules();
00103 
00104   /************** Get configurations *****************/
00105 
00111   ABCDModule getModuleConfig(const std::string module);
00112 
00116   short getModuleGroup(const std::string module);
00117 
00121   void setModuleGroup(const std::string module, short group);
00122 
00128   SctConfiguration::RodConfig getRodConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00129 
00135   SctConfiguration::SlaveConfig getDefaultSlaveConfig(char type);
00136 
00142   SctConfiguration::BOCChannelConfig getBOCConfig(unsigned int partition, unsigned int crate, unsigned int rod, 
00143                                 unsigned int channel);
00144 
00145   SctConfiguration::BOCGlobalConfig getBOCGlobalConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00146 
00152   char *getFibreMappings(unsigned int partition, unsigned int crate, unsigned int rod);
00153 
00159   SctConfiguration::TimConfig getTimConfig(unsigned int partition, unsigned int crate);
00160 
00166   void setFibreMapping(unsigned int partition, unsigned int crate, unsigned int rod, 
00167                        unsigned int channel, unsigned int tx, unsigned int rx0, unsigned int rx1);
00168 
00172   void printModuleConfig(const ABCDModule &conf);
00173 
00174   SctConfiguration::MURType getMURType(unsigned int MUR);
00175 
00176   unsigned int getFreeMurId();
00177 
00178   /************** Change indexing schemes ****************/
00179 
00183   void translateToROD(unsigned int MUR, unsigned int module,
00184               unsigned int &partition, unsigned int &crate, 
00185               unsigned int &rod, unsigned int &channel);
00186  
00193   void translateToRROD(unsigned int MUR, unsigned int module,
00194                unsigned int &partition, unsigned int &crate, 
00195                unsigned int &rod, unsigned int &channel);
00196  
00200   void translateToSN(unsigned int MUR, unsigned int module,
00201                      std::string &sn);
00202 
00206   void translateToRMUR(unsigned int MUR, unsigned int module,
00207                        unsigned int &RMUR, unsigned int &rmodule);
00208 
00212   void translateToBarrel(unsigned int MUR, unsigned int module,
00213                          unsigned int &barrel, unsigned int &row, int &number);
00214 
00218   void translateToEndcap(unsigned int MUR, unsigned int module,
00219                          int &disk, unsigned int &ring, unsigned int &number);
00220 
00224   void translateToPowerSupply(unsigned int MUR, unsigned int module,
00225                               unsigned int &partition, 
00226                               unsigned int &crate, unsigned int &channel);
00227 
00231   void translateFromROD(unsigned int partition, unsigned int crate, 
00232                         unsigned int rod, unsigned int channel,
00233                         unsigned int &MUR, unsigned int &module);
00234 
00241   void translateFromRROD(unsigned int partition, unsigned int crate,
00242                          unsigned int rod, unsigned int channel,
00243                          unsigned int &MUR, unsigned int &module);
00247   void translateFromSN(const std::string sn,
00248                        unsigned int &MUR, unsigned int &module);
00249 
00253   void translateFromRMUR(unsigned int RMUR, unsigned int rmodule,
00254                          unsigned int &MUR, unsigned int &module);
00255 
00259   void translateFromBarrel(unsigned int barrel, unsigned int row, int number,
00260                            unsigned int &MUR, unsigned int &module);
00261 
00265   void translateFromEndcap(int disk, unsigned int ring, unsigned int number,
00266                            unsigned int &MUR, unsigned int &module);
00267 
00271   void translateFromPowerSupply(unsigned int partition, 
00272                                 unsigned int crate, unsigned int channel, 
00273                                 unsigned int &MUR, unsigned int &module);
00274 
00275 
00276   /************** Change configuration ******************/
00277 
00283   void configureModuleFromStructure(const std::string module, const ABCDModule conf);
00284 
00290   void configureModuleFromFile(const std::string filename);
00291 
00300   void configureROD(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00301 
00310   void configureTIM(unsigned int partition, unsigned int crate, SctConfiguration::TimConfig conf);
00311 
00315   void configureBOC(unsigned int partition, unsigned int crate, unsigned int rod, const SctConfiguration::BOCGlobalConfig &conf);
00316 
00321   void clearAll();
00322 
00336   void namePartition(unsigned int partition, const std::string name);
00337 
00338  public:
00342 /*   void setBOCConfig(int partition, int crate, int rod, int channel, const BOCChannelConfig &conf); */
00343   
00347   void configureBOCChannel(unsigned int MUR, unsigned int position, const SctConfiguration::BOCChannelConfig &conf);
00348 
00352   void mapModuleMUR(unsigned int MUR, unsigned int order, unsigned int RMUR, unsigned int rorder, std::string number);
00353 
00357   void unmapModuleMUR(unsigned int MUR, unsigned int order);
00358 
00362   void mapRODMUR(unsigned int partition, unsigned int crate, unsigned int rod, unsigned int order, unsigned int number);
00363 
00367   void unmapRODMUR(unsigned int number);
00368 
00372   void mapBarrelMUR(unsigned int MUR, unsigned int barrel, unsigned int row, int position);
00373 
00377   void unmapBarrelMUR(unsigned int MUR);
00378 
00382   void getMapMURROD(unsigned int MUR, unsigned int &partition, unsigned int &crate, unsigned int &rod, unsigned int &order);
00383 
00387   void getMapRODMUR(unsigned int partition, unsigned int crate, unsigned int rod, unsigned int order, unsigned int &MUR);
00388 
00389   /*
00390     Get mapping of MUR to physical structure
00391   */
00392   void getMapMURPhysical(unsigned int MUR, SctConfiguration::MURType &type, int &plane, int &section, int &position);
00393 
00397   void mapEndcapMUR(unsigned int MUR, int disk, unsigned int quadrant, unsigned int position);
00398  
00402   void unmapEndcapMUR(unsigned int MUR);
00403 
00410   void swapMURNames(unsigned int MUR1, unsigned int MUR2);
00411 
00415   void mapPowerChannel(unsigned int MUR, unsigned int number, unsigned int partition, unsigned int crate, unsigned int channel);
00416 
00420   void unmapPowerChannel(unsigned int MUR, unsigned int number);
00421 
00425   void modifyDefaultPowerParam(std::string state, std::string name, std::string type, float value);
00426 
00430   void modifyHVCardParam(unsigned int crate, unsigned int card,
00431                          std::string name, std::string type, float value);
00432 
00436   void modifyLVCardParam(unsigned int crate, unsigned int card,
00437                          std::string name, std::string type, float value);
00438 
00442   void modifyPowerParam(unsigned int MUR, unsigned int number,
00443                          std::string state, std::string name, std::string type, float value);
00444 
00448   void modifyPowerParamCC(unsigned int crate, unsigned int channel,
00449           std::string state, std::string name, std::string type, float value);
00450 
00454   float getDefaultPowerParam(std::string state, std::string name, std::string type);
00455 
00459   float getHVCardParam(unsigned int crate, unsigned int card, std::string name, std::string type);
00460 
00464   float getLVCardParam(unsigned int crate, unsigned int card, std::string name, std::string type);
00465 
00469   float getPowerParam(unsigned int MUR, unsigned int number, std::string state, std::string name, std::string type);
00470 
00474   float getPowerParamCC(unsigned int crate, unsigned int channel, std::string state, std::string name, std::string type);
00475 
00479   std::list<std::string> listDefaultPowerParams();
00480 
00484   float getCratePowerParam(unsigned int crate, std::string name);
00485 
00486   std::list<std::string> listDCSChannelParams();
00487 
00488   std::list<std::string> listDCSCardParams();
00489 
00490   std::list<std::string> listDCSCrateParams();
00491 
00495   void loadConfiguration(const std::string &filename);
00496 
00497   /************** Save configuration *********************/
00498 
00508   void saveConfiguration(const std::string filename = "");
00509 
00515   void saveModuleConfiguration(const std::string modsn, const std::string filename);
00516 
00520   std::string getModuleConfigurationString(const std::string modsn, const ABCDModule config);
00521 
00525   void writePowerSupplyConfiguration(std::string filename);
00526 
00527  protected:
00535   void createPartition(unsigned int partition);
00536 
00542   void createCrate(unsigned int partition, unsigned int crate);
00543 
00549   void createROD(unsigned int partition, unsigned int crate, unsigned int rod);
00550 
00551   xmlNodePtr getModuleConfigurationNode(std::string sn, std::string reason);
00552 
00553   void notifyModuleConfChange();
00554 
00555   void notifyModuleMappingChange();
00556 
00557   void notifySystemStructureChange();
00558 
00559  private:
00564   ISInfoDictionary *getISDict();
00565 
00572   void updateRodConfig(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00573 
00579   xmlNodePtr getQueryNode(const std::string query, const std::string task);
00580 
00587   std::list<xmlNodePtr> getQueryNodeList(const std::string query, const std::string task);
00588 
00594   float getAttrAsFloat(xmlNodePtr node, const char *attr);
00595 
00603   int getAttrAsInt(xmlNodePtr node, const char *attr, int base = 0);
00604 
00611   std::string getAttrAsString(xmlNodePtr node, const char *attr);
00612 
00618   xmlNodePtr getChildNode(xmlNodePtr node, const char *name);
00619 
00625   xmlNodePtr getOrNewChildNode(xmlNodePtr node, const char *name);
00626 
00632   void setOrCreateChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00633 
00637   xmlNodePtr getChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00638 
00644   xmlNodePtr getOrNewChildWithIntAttr(xmlNodePtr, const char *name, const char *attr, int integer);
00645 
00651   xmlNodePtr getOrNewChildWithStringAttr(xmlNodePtr parent, const char *name, const char *attr, std::string value);
00652 
00656   xmlNodePtr getNodeWithIntAttr(xmlNodePtr node, const char *name, const char *attr, int integer);
00657 
00661   xmlNodePtr getNodeWithStringAttr(xmlNodePtr node, const char *name, const char *attr, std::string value);
00662 
00666   void setFloatAttr(xmlNodePtr node, const char *attr, float floater);
00667 
00671   void setIntAttr(xmlNodePtr node, const char *attr, int integer);
00672 
00676   void clearAttr(xmlNodePtr node, const char *attr);
00677 
00681   const ABCDModule parseModuleConfig(xmlNodePtr node);
00682 
00686   const SctConfiguration::RodConfig parseRodConfig(xmlNodePtr node);
00687 
00691   const SctConfiguration::TimConfig parseTimConfig(xmlNodePtr node);
00692 
00697   xmlNodePtr replaceModuleConfig(xmlNodePtr node, const ABCDModule conf, const std::string name);
00698 
00699  protected:
00700   std::map<std::string, xmlNodePtr> serialToMurNode;
00701   bool serialToMurNodeBuilt;
00702 
00703   void buildSerialToMurNode();
00704 
00705   std::map<std::string, xmlNodePtr> serialToConfigNode;
00706   bool serialToConfigNodeBuilt;
00707 
00708   void buildSerialToConfigNode();
00709 };
00710 
00711 #endif

Generated on Thu Jul 15 09:50:44 2004 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5