BCkovCalibTable Class Reference

Interface to BCkovCalibTable database table. More...

#include <BCkovCalibTable.h>

List of all members.

Public Member Functions

 ~BCkovCalibTable ()
bool Init (int run)
float Ped (int chan) const
float Width (int chan) const
float TOffset (int chan) const
float Gain (int chan) const
void SetPed (int chan, float ped, float width)
void SetTOffset (int chan, float t)
void SetGain (int chan, float gain)
void SetRunRange (int minrun, int maxrun)
void WriteToXML (const char *fname)
void WriteToDB ()

Static Public Member Functions

static BCkovCalibTableInstance ()

Private Member Functions

 BCkovCalibTable ()

Private Attributes

int fMinRun
int fMaxRun
float fPed [BCkov::kNChan]
 Pedestal (ADC).
float fWidth [BCkov::kNChan]
 Pedestal width (ADC).
float fTOffset [BCkov::kNChan]
 Time offset wrt T0 (in ns).
float fGain [BCkov::kNChan]
 Gain: ADC of 1pe? (placeholder).

Static Private Attributes

static BCkovCalibTablefInstance = 0


Detailed Description

Interface to BCkovCalibTable database table.

Definition at line 16 of file BCkovCalibTable.h.


Constructor & Destructor Documentation

BCkovCalibTable::~BCkovCalibTable (  )  [inline]

Definition at line 19 of file BCkovCalibTable.h.

00019 {;}

BCkovCalibTable::BCkovCalibTable (  )  [private]

Definition at line 28 of file BCkovCalibTable.cxx.

References fPed, and fWidth.

00028                                  :
00029   fMinRun(0),
00030   fMaxRun(0)
00031 {
00032   memset(fPed, 0, sizeof(fPed));
00033   memset(fWidth, 0, sizeof(fWidth));
00034 }


Member Function Documentation

float BCkovCalibTable::Gain ( int  chan  )  const

Definition at line 118 of file BCkovCalibTable.cxx.

References fGain, BCkov::kNChan, and BCkov::kUI.

00119 {
00120   assert((chan >= kUI) && (chan < kNChan));
00121   return fGain[chan];
00122 }

bool BCkovCalibTable::Init ( int  run  ) 

Definition at line 46 of file BCkovCalibTable.cxx.

References fGain, fMaxRun, fMinRun, fPed, fTOffset, fWidth, GET_INT, GET_VEC, MdbTableDict::GetTableRSR(), MdbTableDict::Instance(), BCkov::kNChan, MdbAbsRelDBTable::NumberOfCachedRows(), MXML::ReadFile(), and MdbTableRunSubRun::Select().

Referenced by BCkovReco::NewRun().

00047 {
00048   if (fMinRun <= run && fMaxRun >= run) return true;
00049   
00050   MXML::ReadFile("BCkovCalibTable.xml");
00051   MdbTableRunSubRun* table =
00052     MdbTableDict::Instance()->GetTableRSR("BCkovCalib");
00053   if(!table) {
00054     cout << "Couldn't find BCkovCalib table!" << endl;
00055     return false;
00056   }
00057 
00058   fMinRun = run;
00059   fMaxRun = run;
00060   memset(fPed, 0, sizeof(fPed));
00061   memset(fWidth, 0, sizeof(fWidth));
00062 
00063   vector<string> cols;
00064   MdbAbsRelDBTable* query = table->Select(cols, run);
00065   int nRows = query->NumberOfCachedRows();
00066   if (nRows == 0) {
00067     cout << "BCkovCalibTable: found no rows for run " << run
00068               << endl;
00069     return false;
00070   }
00071 
00072   if (nRows != 1) {
00073     cout << "BCkovCalibTable: found " << nRows << " rows for run " << run
00074      << "; only the first row will be used" << endl;
00075   }
00076 #define GET_INT(name) query->getCachedTableDataPtr(string(name), 0)->valInt()[0]
00077 #define GET_VEC(name) query->getCachedTableDataPtr(string(name), 0)->valFloat()
00078   
00079   fMinRun = GET_INT("runNumMin");
00080   fMaxRun = GET_INT("runNumMax");
00081   for (int i = 0; i < kNChan; ++i) {
00082     fPed[i]     = GET_VEC("ped")[i];
00083     fWidth[i]   = GET_VEC("width")[i];
00084     fTOffset[i] = GET_VEC("toffset")[i];
00085     fGain[i]    = GET_VEC("gain")[i];
00086   }
00087 
00088 #undef GET_VEC  
00089   return true;
00090 } 

BCkovCalibTable & BCkovCalibTable::Instance (  )  [static]

Definition at line 38 of file BCkovCalibTable.cxx.

References fInstance.

Referenced by DoPeds().

00039 {
00040   if (!fInstance) fInstance = new BCkovCalibTable;
00041   return *fInstance;
00042 }

float BCkovCalibTable::Ped ( int  chan  )  const

Definition at line 94 of file BCkovCalibTable.cxx.

References fPed, BCkov::kNChan, and BCkov::kUI.

Referenced by BCkovReco::EndRun(), and BCkovReco::MakeHit().

00095 {
00096   assert((chan >= kUI) && (chan < kNChan));
00097   return fPed[chan];
00098 }

void BCkovCalibTable::SetGain ( int  chan,
float  gain 
)

Definition at line 144 of file BCkovCalibTable.cxx.

References fGain, BCkov::kNChan, and BCkov::kUI.

00145 {
00146   assert((chan >= kUI) && (chan < kNChan));
00147 
00148   fGain[chan] = gain;
00149 }

void BCkovCalibTable::SetPed ( int  chan,
float  ped,
float  width 
)

Definition at line 126 of file BCkovCalibTable.cxx.

References fPed, fWidth, BCkov::kNChan, and BCkov::kUI.

Referenced by DoPeds().

00127 {
00128   assert((chan >= kUI) && (chan < kNChan));
00129   fPed[chan] = ped;
00130   fWidth[chan] = width;
00131 }

void BCkovCalibTable::SetRunRange ( int  minrun,
int  maxrun 
) [inline]

Definition at line 31 of file BCkovCalibTable.h.

References fMaxRun, and fMinRun.

00031                                            {
00032     fMinRun = minrun; fMaxRun = maxrun;
00033   }

void BCkovCalibTable::SetTOffset ( int  chan,
float  t 
)

Definition at line 135 of file BCkovCalibTable.cxx.

References fTOffset, BCkov::kNChan, and BCkov::kUI.

00136 {
00137   assert((chan >= kUI) && (chan < kNChan));
00138 
00139   fTOffset[chan] = t;
00140 }

float BCkovCalibTable::TOffset ( int  chan  )  const

Definition at line 110 of file BCkovCalibTable.cxx.

References fTOffset, BCkov::kNChan, and BCkov::kUI.

Referenced by BCkovReco::MakeHit().

00111 {
00112   assert((chan >= kUI) && (chan < kNChan));
00113   return fTOffset[chan];
00114 }

float BCkovCalibTable::Width ( int  chan  )  const

Definition at line 102 of file BCkovCalibTable.cxx.

References fWidth, BCkov::kNChan, and BCkov::kUI.

00103 {
00104   assert((chan >= kUI) && (chan < kNChan));
00105   return fWidth[chan];
00106 }

void BCkovCalibTable::WriteToDB (  ) 

Definition at line 183 of file BCkovCalibTable.cxx.

References MdbDatabase::dbVar(), fGain, fMaxRun, fMinRun, fPed, fTOffset, fWidth, MdbTableDict::GetTableRSR(), MdbTableRunSubRun::InsertRow(), MdbDatabase::Instance(), MdbTableDict::Instance(), BCkov::kNChan, ped, MXML::ReadFile(), t0, and width.

00184 {
00185   if (strcmp(getenv("PGUSER"), "mippdbwrite") != 0) {
00186     cout << "BCkovCalibTable: asked to write to DB, but PGUSER="
00187      << getenv("PGUSER") << ". Cannot perform task."
00188      << endl;
00189     return;
00190   }
00191 
00192   MXML::ReadFile("BCkovCalibTable.xml");
00193   MdbTableRunSubRun* table =
00194     MdbTableDict::Instance()->GetTableRSR("BCkovCalib");
00195   if (!table) return;
00196 
00197   MdbDatabase* dbFact = MdbDatabase::Instance();
00198   std::vector<MdbAbsRelDBVar*> vars;
00199 
00200   std::vector<float> ped(0);
00201   std::vector<float> width(0);
00202   std::vector<float>   t0(0);
00203   std::vector<float> gain(0);
00204   for (int i = 0; i < kNChan; ++i) {
00205     ped.push_back(fPed[i]);
00206     width.push_back(fWidth[i]);
00207     t0.push_back(fTOffset[i]);
00208     gain.push_back(fGain[i]);
00209   }
00210 
00211   vars.push_back(dbFact->dbVar(ped));
00212   vars.push_back(dbFact->dbVar(width));
00213   vars.push_back(dbFact->dbVar(t0));
00214   vars.push_back(dbFact->dbVar(gain));
00215 
00216   table->InsertRow(vars, fMinRun, 0, fMaxRun, 9999, 1);
00217 }

void BCkovCalibTable::WriteToXML ( const char *  fname  ) 

Definition at line 153 of file BCkovCalibTable.cxx.

References fGain, fMaxRun, fMinRun, fPed, fTOffset, fWidth, and BCkov::kNChan.

00154 {
00155   ofstream ofile(fname, ios::out);
00156   if (!ofile.is_open()) {
00157     cout << "Couldn't open " << fname << " for writing" << endl;
00158     return;
00159   }
00160 
00161   ofile << "<dbTableEntry TableName=\"bckovcalib\"\n"
00162     << "              TableType=\"RunSubRun\"\n"
00163     << "              runNumMin=\"" << fMinRun << "\"\n"
00164     << "              runNumMax=\"" << fMaxRun << "\"\n"
00165     << "              creator=\"" << getenv("USER") << "\"\n\n";
00166 
00167   ofile << "  <dbRow>\n   ";
00168   for (int i = 0; i < kNChan; ++i)  ofile << " " <<fPed[i];
00169   ofile << ",\n   ";
00170   for (int i = 0; i < kNChan; ++i)  ofile << " " << fWidth[i];
00171   ofile << ",\n   ";
00172   for (int i = 0; i < kNChan; ++i)  ofile << " " << fTOffset[i];
00173   ofile << ",\n   ";
00174   for (int i = 0; i < kNChan; ++i)  ofile << " " << fGain[i];
00175   ofile << "\n  </dbRow>\n"
00176     << "</dbTableEntry>";
00177 
00178   ofile.close();
00179 }


Member Data Documentation

float BCkovCalibTable::fGain[BCkov::kNChan] [private]

Gain: ADC of 1pe? (placeholder).

Definition at line 50 of file BCkovCalibTable.h.

Referenced by Gain(), Init(), SetGain(), WriteToDB(), and WriteToXML().

BCkovCalibTable * BCkovCalibTable::fInstance = 0 [static, private]

Definition at line 42 of file BCkovCalibTable.h.

Referenced by Instance().

int BCkovCalibTable::fMaxRun [private]

Definition at line 45 of file BCkovCalibTable.h.

Referenced by Init(), SetRunRange(), WriteToDB(), and WriteToXML().

int BCkovCalibTable::fMinRun [private]

Definition at line 44 of file BCkovCalibTable.h.

Referenced by Init(), SetRunRange(), WriteToDB(), and WriteToXML().

float BCkovCalibTable::fPed[BCkov::kNChan] [private]

Pedestal (ADC).

Definition at line 47 of file BCkovCalibTable.h.

Referenced by BCkovCalibTable(), Init(), Ped(), SetPed(), WriteToDB(), and WriteToXML().

float BCkovCalibTable::fTOffset[BCkov::kNChan] [private]

Time offset wrt T0 (in ns).

Definition at line 49 of file BCkovCalibTable.h.

Referenced by Init(), SetTOffset(), TOffset(), WriteToDB(), and WriteToXML().

float BCkovCalibTable::fWidth[BCkov::kNChan] [private]

Pedestal width (ADC).

Definition at line 48 of file BCkovCalibTable.h.

Referenced by BCkovCalibTable(), Init(), SetPed(), Width(), WriteToDB(), and WriteToXML().


The documentation for this class was generated from the following files:
Generated on Mon Nov 23 08:03:57 2009 for MIPP(E907) by  doxygen 1.4.7