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
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
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
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
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
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
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
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