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

configXMLImpl.h

00001 #ifndef SCTAPI_CONFIGURATIONXMLIMPL
00002 #define SCTAPI_CONFIGURATIONXMLIMPL
00003 
00004 #include <libxml/tree.h>
00005 #include <libxml/xpath.h>
00006 #include "../SctApi/log.h"
00007 #include "configuration.h"
00008 
00009 class ConfigurationXMLImpl : public SctConfiguration::Configuration {
00010   ConfigurationXMLImpl(const ConfigurationXMLImpl &);
00011   ConfigurationXMLImpl &operator=(const ConfigurationXMLImpl &);
00012 
00013   static ConfigurationXMLImpl *m_config;
00014 
00015   xmlDocPtr document;
00016   xmlXPathContextPtr xpathContext;
00017 
00018   Log log;
00019 
00020   std::string lastFilename;
00021 public:
00026   ConfigurationXMLImpl();
00030   virtual ~ConfigurationXMLImpl();
00031 
00032   /************* Get physical configuration ****************/
00033 
00038   std::list<unsigned int> listPartitions();
00039 
00044   std::list<unsigned int> listCratesInPartition(unsigned int partition);
00045 
00050   std::list<unsigned int> listRodsInCrate(unsigned int partition, unsigned int crate);
00051 
00058   std::list<unsigned int> listMURSInRod(unsigned int partition, unsigned int crate, unsigned int rod);
00059 
00066   std::list<std::string> listModulesInMUR(unsigned int partition, unsigned int MUR);
00067 
00074   std::list<std::string> listRModulesInMUR(unsigned int partition, unsigned int MUR);
00075 
00081   std::list<std::string> listAllModules();
00082 
00086   std::list<std::string> listUnusedModules();
00087 
00088   /************** Get configurations *****************/
00089 
00095   ABCDModule getModuleConfig(const std::string module);
00096 
00102   SctConfiguration::RodConfig getRodConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00103 
00109   SctConfiguration::BOCChannelConfig getBOCConfig(unsigned int partition, unsigned int crate, unsigned int rod, 
00110                                 unsigned int channel);
00111 
00117   char *getFibreMappings(unsigned int partition, unsigned int crate, unsigned int rod);
00118 
00124   SctConfiguration::TimConfig getTimConfig(unsigned int partition, unsigned int crate);
00125 
00131   void setFibreMapping(unsigned int partition, unsigned int crate, unsigned int rod, 
00132                        unsigned int channel, unsigned int tx, unsigned int rx0, unsigned int rx1);
00133 
00137   void printModuleConfig(const ABCDModule &conf);
00138 
00139   SctConfiguration::MURType getMURType(unsigned int MUR);
00140 
00141   /************** Change indexing schemes ****************/
00142 
00146   void translateToROD(unsigned int MUR, unsigned int module,
00147               unsigned int &partition, unsigned int &crate, 
00148               unsigned int &rod, unsigned int &channel);
00149  
00156   void translateToRROD(unsigned int MUR, unsigned int module,
00157                unsigned int &partition, unsigned int &crate, 
00158                unsigned int &rod, unsigned int &channel);
00159  
00163   void translateToSN(unsigned int MUR, unsigned int module,
00164                      std::string &sn);
00165 
00169   void translateToBarrel(unsigned int MUR, unsigned int module,
00170                          unsigned int &barrel, unsigned int &row, int &number);
00171 
00175   void translateToEndcap(unsigned int MUR, unsigned int module,
00176                          unsigned int &disk, unsigned int &ring, unsigned int &number);
00177 
00181   void translateToPowerSupply(unsigned int MUR, unsigned int module,
00182                               unsigned int &partition, 
00183                               unsigned int &crate, unsigned int &channel);
00184 
00188   void translateFromROD(unsigned int partition, unsigned int crate, 
00189                         unsigned int rod, unsigned int channel,
00190                         unsigned int &MUR, unsigned int &module);
00191 
00198   void translateFromRROD(unsigned int partition, unsigned int crate,
00199                          unsigned int rod, unsigned int channel,
00200                          unsigned int &MUR, unsigned int &module);
00204   void translateFromSN(const std::string sn,
00205                        unsigned int &MUR, unsigned int &module);
00206 
00210   void translateFromBarrel(unsigned int barrel, unsigned int row, int number,
00211                            unsigned int &MUR, unsigned int &module);
00212 
00216   void translateFromEndcap(unsigned int disk, unsigned int ring, unsigned int number,
00217                            unsigned int &MUR, unsigned int &module);
00218 
00222   void translateFromPowerSupply(unsigned int partition, 
00223                                 unsigned int crate, unsigned int channel, 
00224                                 unsigned int &MUR, unsigned int &module);
00225 
00226 
00227   /************** Change configuration ******************/
00228 
00234   void configureModuleFromStructure(const std::string module, const ABCDModule conf);
00235 
00241   void configureModuleFromFile(const std::string filename);
00242 
00251   void configureROD(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00252 
00261   void configureTIM(unsigned int partition, unsigned int crate, SctConfiguration::TimConfig conf);
00262 
00267   void clearAll();
00268 
00282   void namePartition(int partition, const std::string name);
00283 
00284  public:
00288 /*   void setBOCConfig(int partition, int crate, int rod, int channel, const BOCChannelConfig &conf); */
00289   
00293   void configureBOCChannel(int MUR, int position, const SctConfiguration::BOCChannelConfig &conf);
00294 
00298   void mapModuleMUR(int MUR, int order, int RMUR, int rorder, std::string number);
00299 
00303   void mapRODMUR(int partition, int crate, int rod, int order, int number);
00304 
00308   void mapBarrelMUR(int MUR, int barrel, int row, int position);
00309 
00313   void mapEndcapMUR(int MUR, int disk, int quadrant, int position);
00314  
00321   void swapMURNames(int MUR1, int MUR2);
00322 
00326   void mapPowerChannel(int MUR, int number, unsigned int partition, unsigned int crate, unsigned int channel);
00327 
00328   void modifyPowerParam(int MUR, int number, std::string name, float value);
00329 
00333   void modifyDefaultPowerParam(std::string name, float value);
00334 
00338   float getPowerParam(int MUR, int number, std::string name);
00339 
00343   void loadConfiguration(const std::string &filename);
00344 
00345   /************** Save configuration *********************/
00346 
00356   void saveConfiguration(const std::string filename = "");
00357 
00363   void saveModuleConfiguration(const std::string modsn, const std::string filename);
00364 
00368   std::string getModuleConfigurationString(const std::string modsn, const ABCDModule config);
00369 
00373   void writePowerSupplyConfiguration(std::string filename);
00374  protected:
00380   void createPartition(int partition);
00381 
00385   void createCrate(int partition, int crate);
00386 
00390   void createROD(int partition, int crate, int rod);
00391 
00395   void createMUR(int partition, int crate, int rod, int order, int number);
00396 
00400 /*   void createModule(int MUR, int order, int RMUR, int rorder, string number, const ABCDModule &mConf); */
00401 
00405   void createBOCConfig(int MUR, int order, const SctConfiguration::BOCChannelConfig &bConf);
00406 
00407  private:
00414   void updateRodConfig(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00415 
00421   xmlNodePtr getQueryNode(const std::string query, const std::string task);
00422 
00430   int getAttrAsInt(xmlNodePtr node, const char *attr, int base = 0);
00431 
00438   std::string getAttrAsString(xmlNodePtr node, const char *attr);
00439 
00445   xmlNodePtr getChildNode(xmlNodePtr node, const char *name);
00446 
00452   xmlNodePtr getOrNewChildNode(xmlNodePtr node, const char *name);
00453 
00459   void setOrCreateChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00460 
00466   xmlNodePtr getOrNewChildWithIntAttr(xmlNodePtr, const char *name, const char *attr, int integer);
00467 
00471   xmlNodePtr getNodeWithIntAttr(xmlNodePtr node, const char *name, const char *attr, int integer);
00472 
00476   void setIntAttr(xmlNodePtr node, const char *attr, int integer);
00477 
00481   const ABCDModule parseModuleConfig(xmlNodePtr node);
00482 
00486   const SctConfiguration::RodConfig parseRodConfig(xmlNodePtr node);
00487 
00491   const SctConfiguration::TimConfig parseTimConfig(xmlNodePtr node);
00492 
00497   void replaceModuleConfig(xmlNodePtr node, const ABCDModule conf, const std::string name);
00498 };
00499 
00500 #endif

Generated on Tue Dec 9 10:07:35 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3