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

configXMLImpl.h

Go to the documentation of this file.
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 #include "log.h"
00009 #include "configuration.h"
00010 
00011 class ConfigurationXMLImpl : public SctConfiguration::Configuration {
00012   ConfigurationXMLImpl(const ConfigurationXMLImpl &);
00013   ConfigurationXMLImpl &operator=(const ConfigurationXMLImpl &);
00014 
00015   static ConfigurationXMLImpl *m_config;
00016 
00017   xmlDocPtr document;
00018   xmlXPathContextPtr xpathContext;
00019 
00020   Log log;
00021 
00022   std::string lastFilename;
00023 public:
00028   ConfigurationXMLImpl();
00029 
00033   virtual ~ConfigurationXMLImpl();
00034 
00035   /************* Get physical configuration ****************/
00036 
00041   std::list<unsigned int> listPartitions();
00042 
00047   std::list<unsigned int> listCratesInPartition(unsigned int partition);
00048 
00049   bool isDummyCrate(unsigned int partition, unsigned int crate);
00050 
00055   std::list<unsigned int> listRodsInCrate(unsigned int partition, unsigned int crate);
00056 
00063   std::list<unsigned int> listMURSInRod(unsigned int partition, unsigned int crate, unsigned int rod);
00064 
00071   std::list<std::string> listModulesInMUR(unsigned int partition, unsigned int MUR);
00072 
00079   std::list<std::string> listRModulesInMUR(unsigned int partition, unsigned int MUR);
00080 
00086   std::list<std::string> listAllModules();
00087 
00091   std::list<std::string> listUnusedModules();
00092 
00093   /************** Get configurations *****************/
00094 
00100   ABCDModule getModuleConfig(const std::string module);
00101 
00107   SctConfiguration::RodConfig getRodConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00108 
00114   SctConfiguration::BOCChannelConfig getBOCConfig(unsigned int partition, unsigned int crate, unsigned int rod, 
00115                                 unsigned int channel);
00116 
00117   SctConfiguration::BOCGlobalConfig getBOCGlobalConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00118 
00124   char *getFibreMappings(unsigned int partition, unsigned int crate, unsigned int rod);
00125 
00131   SctConfiguration::TimConfig getTimConfig(unsigned int partition, unsigned int crate);
00132 
00138   void setFibreMapping(unsigned int partition, unsigned int crate, unsigned int rod, 
00139                        unsigned int channel, unsigned int tx, unsigned int rx0, unsigned int rx1);
00140 
00144   void printModuleConfig(const ABCDModule &conf);
00145 
00146   SctConfiguration::MURType getMURType(unsigned int MUR);
00147 
00148   /************** Change indexing schemes ****************/
00149 
00153   void translateToROD(unsigned int MUR, unsigned int module,
00154               unsigned int &partition, unsigned int &crate, 
00155               unsigned int &rod, unsigned int &channel);
00156  
00163   void translateToRROD(unsigned int MUR, unsigned int module,
00164                unsigned int &partition, unsigned int &crate, 
00165                unsigned int &rod, unsigned int &channel);
00166  
00170   void translateToSN(unsigned int MUR, unsigned int module,
00171                      std::string &sn);
00172 
00176   void translateToBarrel(unsigned int MUR, unsigned int module,
00177                          unsigned int &barrel, unsigned int &row, int &number);
00178 
00182   void translateToEndcap(unsigned int MUR, unsigned int module,
00183                          unsigned int &disk, unsigned int &ring, unsigned int &number);
00184 
00188   void translateToPowerSupply(unsigned int MUR, unsigned int module,
00189                               unsigned int &partition, 
00190                               unsigned int &crate, unsigned int &channel);
00191 
00195   void translateFromROD(unsigned int partition, unsigned int crate, 
00196                         unsigned int rod, unsigned int channel,
00197                         unsigned int &MUR, unsigned int &module);
00198 
00205   void translateFromRROD(unsigned int partition, unsigned int crate,
00206                          unsigned int rod, unsigned int channel,
00207                          unsigned int &MUR, unsigned int &module);
00211   void translateFromSN(const std::string sn,
00212                        unsigned int &MUR, unsigned int &module);
00213 
00217   void translateFromBarrel(unsigned int barrel, unsigned int row, int number,
00218                            unsigned int &MUR, unsigned int &module);
00219 
00223   void translateFromEndcap(unsigned int disk, unsigned int ring, unsigned int number,
00224                            unsigned int &MUR, unsigned int &module);
00225 
00229   void translateFromPowerSupply(unsigned int partition, 
00230                                 unsigned int crate, unsigned int channel, 
00231                                 unsigned int &MUR, unsigned int &module);
00232 
00233 
00234   /************** Change configuration ******************/
00235 
00241   void configureModuleFromStructure(const std::string module, const ABCDModule conf);
00242 
00248   void configureModuleFromFile(const std::string filename);
00249 
00258   void configureROD(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00259 
00268   void configureTIM(unsigned int partition, unsigned int crate, SctConfiguration::TimConfig conf);
00269 
00273   void configureBOC(unsigned int partition, unsigned int crate, unsigned int rod, const SctConfiguration::BOCGlobalConfig &conf);
00274 
00279   void clearAll();
00280 
00294   void namePartition(int partition, const std::string name);
00295 
00296  public:
00300 /*   void setBOCConfig(int partition, int crate, int rod, int channel, const BOCChannelConfig &conf); */
00301   
00305   void configureBOCChannel(int MUR, int position, const SctConfiguration::BOCChannelConfig &conf);
00306 
00310   void mapModuleMUR(int MUR, int order, int RMUR, int rorder, std::string number);
00311 
00315   void mapRODMUR(int partition, int crate, int rod, int order, int number);
00316 
00320   void mapBarrelMUR(int MUR, int barrel, int row, int position);
00321 
00325   void mapEndcapMUR(int MUR, int disk, int quadrant, int position);
00326  
00333   void swapMURNames(int MUR1, int MUR2);
00334 
00338   void mapPowerChannel(int MUR, int number, unsigned int partition, unsigned int crate, unsigned int channel);
00339 
00340   void modifyPowerParam(int MUR, int number, std::string name, float value);
00341 
00345   void modifyDefaultPowerParam(std::string name, float value);
00346 
00350   float getPowerParam(int MUR, int number, std::string name);
00351 
00355   void loadConfiguration(const std::string &filename);
00356 
00357   /************** Save configuration *********************/
00358 
00368   void saveConfiguration(const std::string filename = "");
00369 
00375   void saveModuleConfiguration(const std::string modsn, const std::string filename);
00376 
00380   std::string getModuleConfigurationString(const std::string modsn, const ABCDModule config);
00381 
00385   void writePowerSupplyConfiguration(std::string filename);
00386  protected:
00392   void createPartition(int partition);
00393 
00397   void createCrate(int partition, int crate);
00398 
00402   void createROD(int partition, int crate, int rod);
00403 
00407   void createMUR(int partition, int crate, int rod, int order, int number);
00408 
00412 /*   void createModule(int MUR, int order, int RMUR, int rorder, string number, const ABCDModule &mConf); */
00413 
00417   void createBOCConfig(int MUR, int order, const SctConfiguration::BOCChannelConfig &bConf);
00418 
00419  private:
00426   void updateRodConfig(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00427 
00433   xmlNodePtr getQueryNode(const std::string query, const std::string task);
00434 
00442   int getAttrAsInt(xmlNodePtr node, const char *attr, int base = 0);
00443 
00450   std::string getAttrAsString(xmlNodePtr node, const char *attr);
00451 
00457   xmlNodePtr getChildNode(xmlNodePtr node, const char *name);
00458 
00464   xmlNodePtr getOrNewChildNode(xmlNodePtr node, const char *name);
00465 
00471   void setOrCreateChildNodeWithContent(xmlNodePtr node, const char *name, const char *content);
00472 
00478   xmlNodePtr getOrNewChildWithIntAttr(xmlNodePtr, const char *name, const char *attr, int integer);
00479 
00483   xmlNodePtr getNodeWithIntAttr(xmlNodePtr node, const char *name, const char *attr, int integer);
00484 
00488   void setIntAttr(xmlNodePtr node, const char *attr, int integer);
00489 
00493   const ABCDModule parseModuleConfig(xmlNodePtr node);
00494 
00498   const SctConfiguration::RodConfig parseRodConfig(xmlNodePtr node);
00499 
00503   const SctConfiguration::TimConfig parseTimConfig(xmlNodePtr node);
00504 
00509   void replaceModuleConfig(xmlNodePtr node, const ABCDModule conf, const std::string name);
00510 
00515   void writeCSV(std::string filename, 
00516                 std::vector<std::pair<std::string, bool> > headers, 
00517                 std::vector<std::vector<std::string> > body);
00518 };
00519 
00520 #endif

Generated on Mon Dec 15 19:36:00 2003 for SCT DAQ/DCS Software by doxygen1.3-rc3