00001
00002
00003
00004
00005
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
00048
00049
00050 if(GetContext().GetSimFlag()==SimFlag::kMC)
00051 return fDefaultTemp;
00052
00053
00055
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
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
00078 return (farenheit-32.0)/1.8;
00079 }
00080
00082
00083 else if(det==Detector::kNear) {
00084 const Dcs_Env_Near* row = fDcsNearPtr.GetRow(0);
00085 if(!row) {
00086
00087 IncrementErrors(kThermometer,kMissingRow);
00088 return fDefaultTemp;
00089 }
00090
00091 float farenheit = row->GetTemp();
00092
00093
00094 return (farenheit-32.0)/1.8;
00095 }
00096
00098
00099 else if(det==Detector::kCalDet) {
00100 if(fTempResPtr.GetNumRows()==0) {
00101
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
00126 if(GetContext().GetSimFlag()==SimFlag::kMC)
00127 return;
00128
00130
00131
00132 if(vc.GetDetector() == Detector::kCalDet) {
00134
00135
00136
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
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
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