Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:20:56

0001 #include "OnlMonDB.h"
0002 #include "OnlMonDBVar.h"
0003 #include "OnlMonDBodbc.h"
0004 
0005 #include <onlmon/OnlMonBase.h>  // for OnlMonBase
0006 #include <onlmon/OnlMonServer.h>
0007 
0008 #include <ctype.h>  // for tolower
0009 #include <algorithm>
0010 #include <cstdio>
0011 #include <iostream>
0012 #include <sstream>
0013 #include <utility>  // for pair
0014 
0015 OnlMonDB::OnlMonDB(const std::string &thisname)
0016   : OnlMonBase(thisname)
0017 {
0018   return;
0019 }
0020 
0021 OnlMonDB::~OnlMonDB()
0022 {
0023   delete db;
0024   while (varmap.begin() != varmap.end())
0025   {
0026     delete varmap.begin()->second;
0027     varmap.erase(varmap.begin());
0028   }
0029 }
0030 
0031 void OnlMonDB::Print() const
0032 {
0033   std::cout << "OnlMonDB Name: " << ThisName << std::endl;
0034   std::map<const std::string, OnlMonDBVar *>::const_iterator iter;
0035   for (iter = varmap.begin(); iter != varmap.end(); ++iter)
0036   {
0037     iter->second->Print();
0038   }
0039   return;
0040 }
0041 
0042 int OnlMonDB::registerVar(const std::string &varname)
0043 {
0044   std::string cpstring = varname;
0045   transform(cpstring.begin(), cpstring.end(), cpstring.begin(), (int (*)(int)) tolower);
0046   std::map<const std::string, OnlMonDBVar *>::const_iterator iter = varmap.find(cpstring);
0047   if (iter != varmap.end())
0048   {
0049     std::cout << "Variable " << varname << " allready registered in DB" << std::endl;
0050     return -1;
0051   }
0052   varmap[cpstring] = new OnlMonDBVar();
0053   return 0;
0054 }
0055 
0056 int OnlMonDB::SetVar(const std::string &varname, const float var, const float varerr, const float varqual)
0057 {
0058   float vararray[3];
0059   vararray[0] = var;
0060   vararray[1] = varerr;
0061   vararray[2] = varqual;
0062   return SetVar(varname, vararray);
0063 }
0064 
0065 int OnlMonDB::SetVar(const std::string &varname, const float var[3])
0066 {
0067   std::string cpstring = varname;
0068   transform(cpstring.begin(), cpstring.end(), cpstring.begin(), (int (*)(int)) tolower);
0069   std::map<const std::string, OnlMonDBVar *>::iterator iter = varmap.find(cpstring);
0070   if (iter != varmap.end())
0071   {
0072     iter->second->SetVar(var);
0073     return 0;
0074   }
0075   std::cout << __PRETTY_FUNCTION__ << " Could not find Variable " << varname << " in DB list" << std::endl;
0076   return -1;
0077 }
0078 
0079 int OnlMonDB::DBInit()
0080 {
0081   if (!db)
0082   {
0083     db = new OnlMonDBodbc(ThisName);
0084   }
0085   db->Verbosity(Verbosity());
0086   db->CheckAndCreateTable(varmap);
0087   return 0;
0088 }
0089 
0090 int OnlMonDB::DBcommit()
0091 {
0092   OnlMonServer *se = OnlMonServer::instance();
0093 
0094   int iret = 0;
0095   if (!db)
0096   {
0097     std::cout << "Data Base not initialized, fix your code." << std::endl;
0098     std::cout << "You need to call DBInit() after you registered your variables" << std::endl;
0099     return -1;
0100   }
0101   iret = db->AddRow(se->CurrentTicks(), se->RunNumber(), varmap);
0102   if (iret)
0103   {
0104     printf("error in dbcommit, ret code %d\n", iret);
0105     return iret;
0106   }
0107   //db->Dump();
0108   std::map<const std::string, OnlMonDBVar *>::iterator iter;
0109   for (iter = varmap.begin(); iter != varmap.end(); ++iter)
0110   {
0111     iter->second->resetupdated();
0112   }
0113   return iret;
0114 }
0115 
0116 int OnlMonDB::DBcommitTest()
0117 {
0118   static int ifirst = 1;
0119   int iret = 0;
0120   static time_t ticks = 0;
0121   static int runnumber = 90000;
0122   if (!db)
0123   {
0124     std::cout << "Data Base not initialized, fix your code." << std::endl;
0125     std::cout << "You need to call DBInit() after you registered your variables" << std::endl;
0126     return -1;
0127   }
0128   if (ifirst)
0129   {
0130     ticks = time(nullptr);
0131     ticks -= 2 * 30 * 24 * 60 * 60;
0132     ifirst = 0;
0133   }
0134   else
0135   {
0136     ticks += 3 * 60;
0137     runnumber += 1;
0138   }
0139   db->AddRow(ticks, runnumber, varmap);
0140   if (iret)
0141   {
0142     std::cout << "error in dbcommit" << std::endl;
0143     return iret;
0144   }
0145   //db->Dump();
0146   std::map<const std::string, OnlMonDBVar *>::iterator iter;
0147   for (iter = varmap.begin(); iter != varmap.end(); ++iter)
0148   {
0149     iter->second->resetupdated();
0150   }
0151   return iret;
0152 }
0153 
0154 int OnlMonDB::GetVar(const time_t begin, const time_t end, const std::string &varname, std::vector<time_t> &timestp, std::vector<int> &runnumber, std::vector<float> &var, std::vector<float> &varerr)
0155 {
0156   if (!db)
0157   {
0158     db = new OnlMonDBodbc(ThisName);
0159   }
0160   int iret = db->GetVar(begin, end, varname, timestp, runnumber, var, varerr);
0161   return iret;
0162 }
0163 
0164 void OnlMonDB::Reset()
0165 {
0166   std::map<const std::string, OnlMonDBVar *>::iterator iter;
0167   for (iter = varmap.begin(); iter != varmap.end(); ++iter)
0168   {
0169     iter->second->resetupdated();
0170   }
0171   return;
0172 }