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 
00126   unsigned int getModuleErrorMask(unsigned int partition, unsigned int crate, unsigned int rod,
00127                                   unsigned int channel, unsigned int link);
00128 
00132   void setModuleErrorMask(unsigned int partition, unsigned int crate, unsigned int rod,
00133                           unsigned int channel, unsigned int link, unsigned int mask);
00134 
00138   void setDefaultModuleErrorMask(unsigned int mask);
00139 
00145   SctConfiguration::RodConfig getRodConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00146 
00152   SctConfiguration::SlaveConfig getDefaultSlaveConfig(char type);
00153 
00159   SctConfiguration::BOCChannelConfig getBOCConfig(unsigned int partition, unsigned int crate, unsigned int rod, 
00160                                 unsigned int channel);
00161 
00162   SctConfiguration::BOCGlobalConfig getBOCGlobalConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00163 
00169   unsigned char *getFibreMappings(unsigned int partition, unsigned int crate, unsigned int rod);
00170 
00176   SctConfiguration::TimConfig getTimConfig(unsigned int partition, unsigned int crate);
00177 
00183   void setFibreMapping(unsigned int partition, unsigned int crate, unsigned int rod, 
00184                        unsigned int channel, unsigned int tx, unsigned int rx0, unsigned int rx1);
00185 
00189   void printModuleConfig(const ABCDModule &conf);
00190 
00191   SctConfiguration::MURType getMURType(unsigned int MUR);
00192 
00193   unsigned int getFreeMurId();
00194 
00195   /************** Change indexing schemes ****************/
00196 
00200   void translateToROD(unsigned int MUR, unsigned int module,
00201               unsigned int &partition, unsigned int &crate, 
00202               unsigned int &rod, unsigned int &channel);
00203  
00210   void translateToRROD(unsigned int MUR, unsigned int module,
00211                unsigned int &partition, unsigned int &crate, 
00212                unsigned int &rod, unsigned int &channel);
00213  
00217   void translateToSN(unsigned int MUR, unsigned int module,
00218                      std::string &sn);
00219 
00223   void translateToRMUR(unsigned int MUR, unsigned int module,
00224                        unsigned int &RMUR, unsigned int &rmodule);
00225 
00229   void translateToBarrel(unsigned int MUR, unsigned int module,
00230                          unsigned int &barrel, unsigned int &row, int &number);
00231 
00235   void translateToEndcap(unsigned int MUR, unsigned int module,
00236                          int &disk, unsigned int &ring, unsigned int &number);
00237 
00241   void translateToPowerSupply(unsigned int MUR, unsigned int module,
00242                               unsigned int &partition, 
00243                               unsigned int &crate, unsigned int &channel);
00244 
00248   void translateFromROD(unsigned int partition, unsigned int crate, 
00249                         unsigned int rod, unsigned int channel,
00250                         unsigned int &MUR, unsigned int &module);
00251 
00258   void translateFromRROD(unsigned int partition, unsigned int crate,
00259                          unsigned int rod, unsigned int channel,
00260                          unsigned int &MUR, unsigned int &module);
00264   void translateFromSN(const std::string sn,
00265                        unsigned int &MUR, unsigned int &module);
00266 
00270   void translateFromRMUR(unsigned int RMUR, unsigned int rmodule,
00271                          unsigned int &MUR, unsigned int &module);
00272 
00276   void translateFromBarrel(unsigned int barrel, unsigned int row, int number,
00277                            unsigned int &MUR, unsigned int &module);
00278 
00282   void translateFromEndcap(int disk, unsigned int ring, unsigned int number,
00283                            unsigned int &MUR, unsigned int &module);
00284 
00288   void translateFromPowerSupply(unsigned int partition, 
00289                                 unsigned int crate, unsigned int channel, 
00290                                 unsigned int &MUR, unsigned int &module);
00291 
00292 
00293   /************** Change configuration ******************/
00294 
00300   void configureModuleFromStructure(const std::string module, const ABCDModule conf);
00301 
00307   void configureModuleFromFile(const std::string filename);
00308 
00317   void configureROD(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00318 
00327   void configureTIM(unsigned int partition, unsigned int crate, SctConfiguration::TimConfig conf);
00328 
00332   void configureBOC(unsigned int partition, unsigned int crate, unsigned int rod, const SctConfiguration::BOCGlobalConfig &conf);
00333 
00338   void clearAll();
00339 
00353   void namePartition(unsigned int partition, const std::string name);
00354 
00355  public:
00359 /*   void setBOCConfig(int partition, int crate, int rod, int channel, const BOCChannelConfig &conf); */
00360   
00364   void configureBOCChannel(unsigned int MUR, unsigned int position, const SctConfiguration::BOCChannelConfig &conf);
00365 
00369   void mapModuleMUR(unsigned int MUR, unsigned int order, unsigned int RMUR, unsigned int rorder, std::string number);
00370 
00374   void unmapModuleMUR(unsigned int MUR, unsigned int order);
00375 
00379   void mapRODMUR(unsigned int partition, unsigned int crate, unsigned int rod, unsigned int order, unsigned int number);
00380 
00384   void unmapRODMUR(unsigned int number);
00385 
00389   void mapBarrelMUR(unsigned int MUR, unsigned int barrel, unsigned int row, int position);
00390 
00394   void unmapBarrelMUR(unsigned int MUR);
00395 
00399   void getMapMURROD(unsigned int MUR, unsigned int &partition, unsigned int &crate, unsigned int &rod, unsigned int &order);
00400 
00404   void getMapRODMUR(unsigned int partition, unsigned int crate, unsigned int rod, unsigned int order, unsigned int &MUR);
00405 
00406   /*
00407     Get mapping of MUR to physical structure
00408   */
00409   void getMapMURPhysical(unsigned int MUR, SctConfiguration::MURType &type, int &plane, int &section, int &position);
00410 
00414   void mapEndcapMUR(unsigned int MUR, int disk, unsigned int quadrant, unsigned int position);
00415  
00419   void unmapEndcapMUR(unsigned int MUR);
00420 
00427   void swapMURNames(unsigned int MUR1, unsigned int MUR2);
00428 
00432   void mapPowerChannel(unsigned int MUR, unsigned int number, unsigned int partition, unsigned int crate, unsigned int channel);
00433 
00437   void unmapPowerChannel(unsigned int MUR, unsigned int number);
00438 
00442   void modifyDefaultPowerParam(std::string state, std::string name, std::string type, float value);
00443 
00447   void modifyHVCardParam(unsigned int crate, unsigned int card,
00448                          std::string name, std::string type, float value);
00449 
00453   void modifyLVCardParam(unsigned int crate, unsigned int card,
00454                          std::string name, std::string type, float value);
00455 
00459   void modifyPowerParam(unsigned int MUR, unsigned int number,
00460                          std::string state, std::string name, std::string type, float value);
00461 
00465   void modifyPowerParamCC(unsigned int crate, unsigned int channel,
00466           std::string state, std::string name, std::string type, float value);
00467 
00471   float getDefaultPowerParam(std::string state, std::string name, std::string type);
00472 
00476   float getHVCardParam(unsigned int crate, unsigned int card, std::string name, std::string type);
00477 
00481   float getLVCardParam(unsigned int crate, unsigned int card, std::string name, std::string type);
00482 
00486   float getPowerParam(unsigned int MUR, unsigned int number, std::string state, std::string name, std::string type);
00487 
00491   float getPowerParamCC(unsigned int crate, unsigned int channel, std::string state, std::string name, std::string type);
00492 
00496   std::list<std::string> listDefaultPowerParams();
00497 
00501   float getCratePowerParam(unsigned int crate, std::string name);
00502 
00503   std::list<std::string> listDCSChannelParams();
00504 
00505   std::list<std::string> listDCSCardParams();
00506 
00507   std::list<std::string> listDCSCrateParams();
00508 
00512   void loadConfiguration(const std::string &filename);
00513 
00517   std::string getConfigurationFileName();
00518 
00519   /************** Save configuration *********************/
00520 
00530   void saveConfiguration(const std::string filename = "");
00531 
00537   void saveModuleConfiguration(const std::string modsn, const std::string filename);
00538 
00542   std::string getModuleConfigurationString(const std::string modsn, const ABCDModule config);
00543 
00547   void writePowerSupplyConfiguration(std::string filename);
00548 
00549  protected:
00557   void createPartition(unsigned int partition);
00558 
00564   void createCrate(unsigned int partition, unsigned int crate);
00565 
00571   void createROD(unsigned int partition, unsigned int crate, unsigned int rod);
00572 
00573   xmlNodePtr getModuleConfigurationNode(std::string sn, std::string reason);
00574 
00575   void notifyModuleConfChange();
00576 
00577   void notifyModuleMappingChange();
00578 
00579   void notifySystemStructureChange();
00580 
00581  public:
00582   // Methods only in ConfigurationXMLImpl
00583   void setIsDictionary(ISInfoDictionary *dict);
00584 
00585  private:
00590   ISInfoDictionary *getIsDict();
00591 
00598   void updateRodConfig(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00599 
00605   xmlNodePtr getQueryNode(const std::string query, const std::string task);
00606 
00613   std::list<xmlNodePtr> getQueryNodeList(const std::string query, const std::string task);
00614 
00620   float getAttrAsFloat(xmlNodePtr node, const char *attr);
00621 
00629   int getAttrAsInt(xmlNodePtr node, const char *attr, int base = 0);
00630 
00637   std::string getAttrAsString(xmlNodePtr node, const char *attr);
00638 
00644   xmlNodePtr getChildNode(xmlNodePtr node, const char *name);
00645 
00651   xmlNodePtr getOrNewChildNode(xmlNodePtr node, const char *name);
00652 
00658   void setOrCreateChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00659 
00663   xmlNodePtr getChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00664 
00670   xmlNodePtr getOrNewChildWithIntAttr(xmlNodePtr, const char *name, const char *attr, int integer);
00671 
00677   xmlNodePtr getOrNewChildWithStringAttr(xmlNodePtr parent, const char *name, const char *attr, std::string value);
00678 
00682   xmlNodePtr getNodeWithIntAttr(xmlNodePtr node, const char *name, const char *attr, int integer);
00683 
00687   xmlNodePtr getNodeWithStringAttr(xmlNodePtr node, const char *name, const char *attr, std::string value);
00688 
00692   void setFloatAttr(xmlNodePtr node, const char *attr, float floater);
00693 
00697   void setIntAttr(xmlNodePtr node, const char *attr, int integer);
00698 
00702   void clearAttr(xmlNodePtr node, const char *attr);
00703 
00707   const ABCDModule parseModuleConfig(xmlNodePtr node);
00708 
00712   const SctConfiguration::RodConfig parseRodConfig(xmlNodePtr node);
00713 
00717   const SctConfiguration::TimConfig parseTimConfig(xmlNodePtr node);
00718 
00723   xmlNodePtr replaceModuleConfig(xmlNodePtr node, const ABCDModule conf, const std::string name);
00724 
00725  protected:
00726   std::map<std::string, xmlNodePtr> serialToMurNode;
00727   bool serialToMurNodeBuilt;
00728 
00729   void buildSerialToMurNode();
00730 
00731   std::map<std::string, xmlNodePtr> serialToConfigNode;
00732   bool serialToConfigNodeBuilt;
00733 
00734   void buildSerialToConfigNode();
00735 };
00736 
00737 #endif

Generated on Fri Sep 16 18:01:49 2005 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5