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