Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

TemperatureCalScheme.cxx

Go to the documentation of this file.
00001 
00002 // $Id: TemperatureCalScheme.cxx,v 1.10 2006/04/19 18:50:38 rhatcher Exp $
00003 //
00004 // Temperature
00005 // n.tagg1@physics.ox.ac.uk
00007 #include "TemperatureCalScheme.h"
00008 
00009 #include "MessageService/MsgService.h"
00010 #include "Plex/PlexSEIdAltL.h"
00011 #include "Plex/PlexStripEndId.h"
00012 #include "DatabaseInterface/DbiValidityRec.h"
00013 #include "Validity/VldRange.h"
00014 
00015 ClassImp(TemperatureCalScheme)
00016 CVSID("$Id: TemperatureCalScheme.cxx,v 1.10 2006/04/19 18:50:38 rhatcher Exp $");
00017 
00018 //......................................................................
00019 TemperatureCalScheme::TemperatureCalScheme()
00020 {
00024   MSG("Calib",Msg::kVerbose) << "TemperatureCalScheme::TemperatureCalScheme" 
00025                              << endl;
00026   Registry r;
00027   r.Set("DefaultTemp",18.0);
00028   InitializeConfig(r);
00029 }
00030 
00031 //......................................................................
00032 Float_t TemperatureCalScheme::GetTemperature(Int_t whichTemp) const
00033 {
00045 
00047   // MC
00048   // The MC temperature should track the real temp.
00049   // But we are going to opt for the simple 'ideal detector'
00050   if(GetContext().GetSimFlag()==SimFlag::kMC)
00051     return fDefaultTemp;
00052 
00053 
00055   // Far
00056 
00057   Detector::Detector_t det = GetContext().GetDetector();
00058 
00059   if(det == Detector::kFar) {
00060     const Dcs_Env_Far* row = fDcsFarPtr.GetRow(0);
00061     if(!row) {
00062       // This shouldn't ever happen unless the table is empty.
00063       IncrementErrors(kThermometer,kMissingRow);
00064       return fDefaultTemp;
00065     }
00066 
00067     float farenheit = 0;
00068     switch(whichTemp) {
00069     default: 
00070       { MAXMSG("Calib",Msg::kWarning,1) << "There is no thermometer at position " << whichTemp << ". Using 1." << endl; }
00071     case 1: 
00072       farenheit = row->GetTemp1(); break;
00073     case 2: 
00074       farenheit = row->GetTemp2(); break;
00075     }
00076 
00077     // Finally, convert to celcius. (Silly Americans.)
00078     return (farenheit-32.0)/1.8;    
00079   }
00080 
00082   // Near
00083   else if(det==Detector::kNear) {
00084     const Dcs_Env_Near* row = fDcsNearPtr.GetRow(0);
00085     if(!row) {
00086       // This shouldn't ever happen unless the table is empty.
00087       IncrementErrors(kThermometer,kMissingRow);
00088       return fDefaultTemp;
00089     }
00090 
00091     float farenheit = row->GetTemp();
00092 
00093     // Finally, convert to celcius. (Silly Americans.)
00094     return (farenheit-32.0)/1.8;    
00095   }
00096 
00098   // CalDet
00099   else if(det==Detector::kCalDet) {
00100     if(fTempResPtr.GetNumRows()==0) {
00101       // We've already warned the user if this has happened, so just return.
00102       return fDefaultTemp;
00103     }
00104     
00105     const CalTempCalibration* tempcal = fTempResPtr.GetRow(0);
00106     if(tempcal ==0 ) {
00107       MAXMSG("Calib",Msg::kWarning,10) 
00108         << "No Temperature database row " << endl;
00109       IncrementErrors(kThermometer,kMissingRow);
00110       return fDefaultTemp;
00111     }
00112     
00113     MSG("Calib",Msg::kVerbose) << "Got Temperature Correction of: " 
00114                                << tempcal->GetTemp() << endl;
00115     return tempcal->GetTemp();
00116   }
00117 
00118   return fDefaultTemp;
00119 }
00120 
00121 
00122 //......................................................................
00123 void TemperatureCalScheme::DoReset( const VldContext& vc )
00124 {
00125   // Monte Carlo:
00126   if(GetContext().GetSimFlag()==SimFlag::kMC)
00127     return;
00128 
00130   // Caldet:
00131 
00132   if(vc.GetDetector() == Detector::kCalDet) {
00134     //VldTimeStamp v2hour(-7200,0);
00135     //v2hour.Add(vc.GetTimeStamp());
00136     //cout << vc.AsString() << "\t" << v2hour.AsString() << endl;
00137     VldContext newvc(vc.GetDetector(),vc.GetSimFlag(),vc.GetTimeStamp());
00138     fTempResPtr.NewQuery(newvc,0);
00139     if(fTempResPtr.GetNumRows()==0) {
00140       MAXMSG("Calib",Msg::kWarning,1) 
00141         << "No rows in temperature database table CALTEMPCALIBRATION"
00142         << vc.AsString() << ".\n";         
00143       IncrementErrors(kThermometer,kMissingTable);
00144     }  
00145   }
00146 
00148   // FD:
00149   else if(vc.GetDetector() == Detector::kFar) {
00150     fDcsFarPtr.NewQuery(vc);
00151     if(fDcsFarPtr.GetNumRows()==0) {
00152       MAXMSG("Calib",Msg::kWarning,1)
00153         << "No rows in DCS far detector environment database DCS_ENV_FAR. Temperature cal not avalible."
00154         << vc.AsString() << endl;
00155       IncrementErrors(kThermometer,kMissingTable);
00156     }
00157   }
00158 
00160   // Near:
00161   else if(vc.GetDetector() == Detector::kNear) {
00162     fDcsNearPtr.NewQuery(vc);
00163     if(fDcsNearPtr.GetNumRows()==0) {
00164       MAXMSG("Calib",Msg::kWarning,1)
00165         << "No rows in DCS far detector environment database DCS_ENV_NEAR. Temperature cal not avalible."
00166         << vc.AsString() << endl;
00167       IncrementErrors(kThermometer,kMissingTable);
00168     }
00169   }
00170 }
00171 
00172 //......................................................................
00173 void TemperatureCalScheme::ConfigModified()
00174 {
00178   Bool_t ok = true;
00179   ok = ok && GetConfig().Get("DefaultTemp",fDefaultTemp);
00180   if(!ok) MSG("Calib",Msg::kError) << "TemperatureCalScheme had a problem configuring itself!" << endl;  
00181 }
00182 
00183 //......................................................................
00184 void TemperatureCalScheme::PrintConfig( std::ostream& os ) const
00185 {
00186   os << "  Default Temperature = " << fDefaultTemp << endl;
00187 }
00188 
00189 

Generated on Sat Nov 7 01:27:41 2009 for loon by  doxygen 1.3.9.1