CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/OnlineDB/EcalCondDB/interface/LMFDat.h

Go to the documentation of this file.
00001 #ifndef LMFDAT_H
00002 #define LMFDAT_H
00003 
00004 
00005 /*
00006  Last updated by  Giovanni.Organtini@roma1.infn.it 2010
00007  */
00008 
00009 #include "OnlineDB/EcalCondDB/interface/LMFUnique.h"
00010 #include "OnlineDB/EcalCondDB/interface/LMFRunIOV.h"
00011 #include "OnlineDB/EcalCondDB/interface/EcalLogicID.h"
00012 #include "OnlineDB/EcalCondDB/interface/EcalDBConnection.h"
00013 
00014 #include <map>
00015 
00019 class LMFDat : public LMFUnique {
00020  public:
00021   friend class EcalCondDBInterface;
00022 
00023   LMFDat();
00024   LMFDat(EcalDBConnection *c);
00025   LMFDat(oracle::occi::Environment* env,
00026          oracle::occi::Connection* conn);
00027   ~LMFDat() { }
00028 
00029   virtual std::string foreignKeyName() const;
00030 
00031   LMFDat& setLMFRunIOV(const LMFRunIOV &iov) {
00032     setInt(foreignKeyName(), iov.getID());
00033     attach(foreignKeyName(), (LMFUnique*)&iov);
00034     return *this;
00035   }
00036   LMFRunIOV getLMFRunIOV() const {
00037     LMFRunIOV runiov(m_env, m_conn);
00038     runiov.setByID(getInt(foreignKeyName()));
00039     return runiov;
00040   }
00041 
00042   Tm getSubrunStart() const {
00043     return getLMFRunIOV().getSubRunStart();
00044   }
00045 
00046   void getPrevious(LMFDat *dat) throw(std::runtime_error);
00047   void getNext(LMFDat *dat) throw(std::runtime_error);
00048 
00049   virtual std::string getTableName() const {
00050     return m_tableName;
00051   }
00052   virtual std::string getIovIdFieldName() const ;
00053   int getLMFRunIOVID();
00054 
00055   LMFDat& setData(int logic_id, const std::vector<float> &data) {
00056     m_data[logic_id] = data;
00057     return *this;
00058   }
00059   LMFDat& setData(const EcalLogicID &logic_id, 
00060                   const std::vector<float> &data) {
00061     m_data[logic_id.getLogicID()] = data;
00062     return *this;
00063   }
00064   LMFDat& setData(const EcalLogicID &logic_id, const std::string &key, 
00065                   float v) {
00066     int id = logic_id.getLogicID();
00067     m_data[id].resize(m_keys.size());
00068     m_data[id][m_keys[key]] = v;
00069     return *this;
00070   }
00071   int size() const { return m_data.size(); }
00072   
00073   std::map<unsigned int, std::string> getReverseMap() const;
00074 
00075   /* UNSAFE methods returning data for a given logic_id */
00076   std::vector<float> getData(int id);
00077   std::vector<float> operator[](int id);
00078   std::vector<float> getData(const EcalLogicID &id);
00079 
00080   /* SAFE methods returning data for a given logic_id */
00081   bool getData(int id, std::vector<float> &ret);
00082   bool getData(const EcalLogicID &id, std::vector<float> &ret);
00083 
00084   /* methods returning the whole map between logic_id and data */
00085   std::map<int, std::vector<float> > getData();
00086 
00087   /* UNSAFE methods returning a field of a given logic_id */
00088   float getData(int id, unsigned int k);
00089   float getData(const EcalLogicID &id, unsigned int k);
00090   float getData(const EcalLogicID &id, const std::string &key);
00091   float getData(int id, const std::string &key);
00092 
00093   /* SAFE methods returning a field of a given logic_id */
00094   bool getData(int id, unsigned int k, float &ret);
00095   bool getData(const EcalLogicID &id, unsigned int k, float &ret);
00096   bool getData(int id, const std::string &key, float &ret);
00097   bool getData(const EcalLogicID &id, const std::string &key, float &ret);
00098 
00099   std::list<int> getLogicIds() {
00100     std::list<int> l;
00101     std::map<int, std::vector<float> >::const_iterator i = m_data.begin();
00102     std::map<int, std::vector<float> >::const_iterator e = m_data.end();
00103     while (i != e) {
00104       l.push_back(i->first);
00105       i++;
00106     }
00107     return l;
00108   }
00109 
00110   std::map<std::string, unsigned int> getKeys() {
00111     return m_keys;
00112   }
00113   std::list<std::string> getKeyList() {
00114     std::list<std::string> l;
00115     std::map<std::string, unsigned int>::const_iterator i = m_keys.begin();
00116     std::map<std::string, unsigned int>::const_iterator e = m_keys.end();
00117     while (i != e) {
00118       l.push_back(i->first);
00119       i++;
00120     }
00121     return l;
00122   }
00123   LMFDat& setMaxDataToDump(int n);
00124   void dump() const ;
00125   void dump(int n) const ;
00126   virtual void dump(int n, int max) const ;
00127   std::map<int, std::vector<float> > fetchData() throw(std::runtime_error);
00128   void fetch() throw(std::runtime_error);
00129   void fetch(int logic_id) throw(std::runtime_error);
00130   void fetch(int logic_id, const Tm &tm) throw(std::runtime_error);
00131   void fetch(int logic_id, const Tm *timestamp, int dir) throw(std::runtime_error);
00132   void fetch(const EcalLogicID &id, const Tm &tm) throw(std::runtime_error);
00133   void fetch(const EcalLogicID &id, const Tm &tm, int dir) throw(std::runtime_error);
00134   void fetch(const EcalLogicID &id) 
00135     throw(std::runtime_error);
00136 
00137   virtual bool isValid();
00138   void setWhereClause(std::string w);
00139   void setWhereClause(std::string w, std::vector<std::string> p);
00140  protected:
00141   void getNeighbour(LMFDat *dat, int which) throw(std::runtime_error);
00142   int writeDB() throw(std::runtime_error);
00143   bool check();
00144   void adjustParameters(int n, std::string &sql, Statement *stmt);
00145   std::string buildInsertSql();
00146   std::string buildSelectSql(int logic_id = 0, int direction = 0);
00147   void getKeyTypes() throw(std::runtime_error);
00148 
00149   int m_max;
00150   std::vector<std::string> m_type;
00151   // m_data contains objects like (key, value) where key is the logic_id
00152   // of a channel and value is a vector of values associated to that logic_id
00153   std::map<int, std::vector<float> > m_data;
00154   // m_keys contains the keys to the components of the vector of data
00155   std::map<std::string, unsigned int> m_keys;
00156   std::string m_tableName;
00157   std::string m_Error;
00158   // experts only
00159   std::string _where;
00160   std::vector<std::string> _wherePars;
00161 };
00162 
00163 #endif