00001 #ifndef SCTAPI_OKS_IMPL_CONFIGURATION
00002 #define SCTAPI_OKS_IMPL_CONFIGURATION
00003
00004 #include <list>
00005 #include <string>
00006 #include <stdexcept>
00007
00008 #include <oks/class.h>
00009 #include <oks/object.h>
00010 #include <oks/kernel.h>
00011
00012 #include "RodDaq/Sct/AbcdModule.h"
00013
00014 #include "sctConf/configuration.h"
00015
00019
00020
00021
00022
00023
00024
00025
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00045
00046
00047
00048
00049
00050
00051
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00086
00087
00088
00089
00090
00091
00092
00093
00094
00122 class OksImpl : public SctConfiguration::Configuration {
00123 OksImpl(const OksImpl &);
00124 OksImpl &operator=(const OksImpl &);
00125 public:
00129 OksImpl(bool readOnly = true);
00133 ~OksImpl();
00134
00135
00136
00141 std::list<unsigned int> listPartitions();
00142
00147 std::list<unsigned int> listCratesInPartition(unsigned int partition);
00148
00153 std::list<unsigned int> listRodsInCrate(unsigned int partition, unsigned int crate);
00154
00161 std::list<unsigned int> listMURSInRod(unsigned int partition, unsigned int crate, unsigned int rod);
00162
00169 std::list<std::string> listModulesInMUR(unsigned int partition, unsigned int MUR);
00170
00177 std::list<std::string> listRModulesInMUR(unsigned int partition, unsigned int MUR);
00178
00184 std::list<std::string> listAllModules();
00185
00189 std::list<std::string> listUnusedModules();
00190
00191
00192
00198 ABCDModule getModuleConfig(const std::string module);
00199
00205 SctConfiguration::RodConfig getRodConfig(unsigned int partition, unsigned int crate, unsigned int rod);
00206
00212 SctConfiguration::BOCChannelConfig getBOCConfig(unsigned int partition, unsigned int crate, unsigned int rod,
00213 unsigned int channel);
00214
00220 char *getFibreMappings(unsigned int partition, unsigned int crate, unsigned int rod);
00221
00227 SctConfiguration::TimConfig getTimConfig(unsigned int partition, unsigned int crate);
00228
00234 void setFibreMapping(unsigned int partition, unsigned int crate, unsigned int rod,
00235 unsigned int channel, unsigned int tx, unsigned int rx0, unsigned int rx1);
00236
00240 void printModuleConfig(const ABCDModule &conf);
00241
00242 SctConfiguration::MURType getMURType(unsigned int MUR);
00243
00244
00245
00249 void translateToROD(unsigned int MUR, unsigned int module,
00250 unsigned int &partition, unsigned int &crate,
00251 unsigned int &rod, unsigned int &channel);
00252
00256 void translateToRROD(unsigned int MUR, unsigned int module,
00257 unsigned int &partition, unsigned int &crate,
00258 unsigned int &rod, unsigned int &channel);
00259
00260
00264 void translateToSN(unsigned int MUR, unsigned int module,
00265 std::string &sn);
00266
00270 void translateToBarrel(unsigned int MUR, unsigned int module,
00271 unsigned int &barrel, unsigned int &row, int &number);
00272
00276 void translateToEndcap(unsigned int MUR, unsigned int module,
00277 unsigned int &disk, unsigned int &ring, unsigned int &number);
00278
00282 void translateToPowerSupply(unsigned int MUR, unsigned int module,
00283 unsigned int &partition,
00284 unsigned int &crate, unsigned int &channel);
00285
00289 void translateFromROD(unsigned int partition, unsigned int crate,
00290 unsigned int rod, unsigned int channel,
00291 unsigned int &MUR, unsigned int &module);
00292
00299 void translateFromRROD(unsigned int partition, unsigned int crate,
00300 unsigned int rod, unsigned int channel,
00301 unsigned int &MUR, unsigned int &module);
00302
00306 void translateFromSN(const std::string sn,
00307 unsigned int &MUR, unsigned int &module);
00308
00312 void translateFromBarrel(unsigned int barrel, unsigned int row, int number,
00313 unsigned int &MUR, unsigned int &module);
00314
00318 void translateFromEndcap(unsigned int disk, unsigned int ring, unsigned int number,
00319 unsigned int &MUR, unsigned int &module);
00320
00324 void translateFromPowerSupply(unsigned int partition,
00325 unsigned int crate, unsigned int channel,
00326 unsigned int &MUR, unsigned int &module);
00327
00328
00329
00330
00336 void configureModuleFromStructure(const std::string module, const ABCDModule conf);
00337
00343 void configureModuleFromFile(const std::string filename);
00344
00353 void configureROD(unsigned int partition, unsigned int crate, unsigned int rod, SctConfiguration::RodConfig conf);
00354
00363 void configureTIM(unsigned int partition, unsigned int crate, SctConfiguration::TimConfig conf);
00364
00369 void clearAll();
00370
00384 void namePartition(int partition, const std::string name);
00385
00389 void createPartition(int partition);
00390
00394 void createCrate(int partition, int crate);
00395
00399 void createROD(int partition, int crate, int rod, SctConfiguration::RodConfig conf);
00400
00404 void createMUR(int partition, int crate, int rod, int order, int number);
00405
00409 void createModule(int MUR, int order, int RMUR, int rorder, string number, const ABCDModule &mConf);
00410
00414 void configureBOCChannel(int MUR, int position, const SctConfiguration::BOCChannelConfig &bConf);
00415
00419 void mapModuleMUR(int MUR, int order, int RMUR, int rorder, std::string number);
00420
00424 void mapRODMUR(int partition, int crate, int rod, int order, int number);
00425
00429 void mapBarrelMUR(int MUR, int barrel, int row, int position);
00430
00437 void swapMURNames(int MUR1, int MUR2);
00438
00442 void mapEndcapMUR(int MUR, int disk, int quadrant, int position);
00443
00447 void mapPowerChannel(int MUR, int number, unsigned int partition, unsigned int crate, unsigned int channel);
00448
00452 void modifyPowerParam(int MUR, int number, std::string name, float value);
00453
00457 void modifyDefaultPowerParam(std::string name, float value);
00458
00462 float getPowerParam(int MUR, int number, std::string name);
00463
00467 void loadConfiguration(const std::string &filename);
00468
00469
00470
00480 void saveConfiguration(std::string filename = "");
00481
00487 void saveModuleConfiguration(const std::string modsn, const std::string filename);
00488
00492 std::string getModuleConfigurationString(const std::string modsn, const ABCDModule config);
00493
00497 void writePowerSupplyConfiguration(std::string filename);
00498
00499 private:
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511 private:
00512 OksObject *getPartition(unsigned int p);
00513 OksObject *getCrate(unsigned int p, unsigned int c);
00514 OksObject *getRod(unsigned int p, unsigned int c, unsigned int r);
00515 OksObject *getMUR(unsigned int m);
00516 OksObject *getModule(unsigned short mur, unsigned char position);
00517
00518 OksObject *getObjectFromRelationship(const OksObject *obj, const std::string rel);
00519 unsigned long getULongData(const OksObject *obj, const std::string attr);
00520 unsigned short getUShortData(const OksObject *obj, const std::string attr);
00521 unsigned char getUCharData(const OksObject *obj, const std::string attr);
00522 std::string getStringData(const OksObject *obj, const std::string attr);
00523
00524 OksClass *partClass;
00525 OksClass *crateClass;
00526 OksClass *rodClass;
00527 OksClass *murClass;
00528 OksClass *moduleClass;
00529
00530
00531
00532 OksKernel kernel;
00533 };
00534 #endif