00001 #include <cstdio>
00002 #include <cstdlib>
00003 #include <cstring>
00004 #include <iostream>
00005
00006 #include <sstream>
00007 #include <fstream>
00008 #include <string>
00009 #include <iomanip>
00010 #include <dirent.h>
00011 #include <set>
00012 #include "TObject.h"
00013 #include "MessageService/MsgService.h"
00014 #include "CalDetDST/UberHeader.h"
00015 #include "CalDetSI/TempReader.h"
00016
00017 ClassImp(UberHeader)
00018 CVSID("$Id: UberHeader.cxx,v 1.6 2009/02/28 21:46:11 gmieg Exp $");
00019
00020 using namespace std;
00021
00022 UberHeader::UberHeader():
00023 runno(0),
00024 runtype(),
00025 tstart(0),
00026 tmper(0.),
00027 beamp(0.),
00028 comments()
00029 {
00030 tstartchar = new char[36];
00031 }
00032
00033 UberHeader::~UberHeader()
00034 {
00035 MSG("UberHeader",Msg::kDebug)<<"Deleting UberHeader"<<endl;
00036 if(tstartchar!=0){
00037 delete tstartchar;
00038 tstartchar = 0;
00039 }
00040 if(comments!=0){
00041 delete comments;
00042 comments = 0;
00043 }
00044 if(runtype!=0){
00045 delete runtype;
00046 runtype = 0;
00047 }
00048
00049 }
00050
00051 void UberHeader::Print(Option_t* ) const
00052 {
00053
00054 struct tm *t = localtime(&tstart);
00055 char date[33];
00056 strftime(date,32,"%B %d,%Y %X",t);
00057 cout<<"*******UberHeader:"<<endl
00058 <<"Run number "<<runno<<" Run Type "<<runtype<<endl
00059 <<"Start of run "<<date<<endl
00060 <<"Temperature "<<tmper<<" Beam Momentum "<<beamp<<endl
00061 <<"Comments "<<comments<<endl;
00062 }
00063
00064 void UberHeader::SetStartTime(time_t t)
00065 {
00066
00067
00068 tstart = t;
00069 struct tm *ts = gmtime(&t);
00070 strftime(tstartchar, 35, "%B %d,%Y %X", ts);
00071 }
00072
00073 Float_t UberHeader::ReadTemperature()
00074 {
00075 TempReader tr;
00076
00077 char *tempdir = getenv("TEMPERATURE_REPROCESS_PATH");
00078 string tmd;
00079 if(tempdir==NULL){
00080 tmd="/data/0/Temperature/reprocessed/";
00081 }
00082 else{
00083 tmd = tempdir;
00084 }
00085 MSG("UberHeader",Msg::kDebug)<<"About to look for temp files in "<<tmd<<endl;
00086
00087 DIR *dfd;
00088 dirent *dp;
00089 if(!(dfd = opendir(tmd.c_str()))){
00090 MSG("UberHeader",Msg::kError)<<"Could not read directory "
00091 <<tmd<<" for temperature logs"<<endl;
00092 return 0.;
00093 }
00094
00095 set<string> tempnames;
00096 while((dp=readdir(dfd))!=NULL){
00097 if(strstr(dp->d_name,"-reprocessed.txt")!=NULL){
00098 tempnames.insert(dp->d_name);
00099 MSG("UberHeader",Msg::kDebug)<<"Added "<<dp->d_name<<" to set"<<endl;
00100 }
00101 }
00102
00103 stringstream fname;
00104 struct tm *ts = localtime(&(tstart));
00105 fname<<setw(4)<<setfill('0')<<ts->tm_year+1900
00106 <<"-"<<setw(2)<<setfill('0')<<ts->tm_mon+1
00107 <<"-"<<setw(2)<<setfill('0')<<ts->tm_mday<<"-reprocessed.txt"<<'\0';
00108 string filename = fname.str();
00109
00110 MSG("UberHeader",Msg::kDebug)<<"Looking for "<<filename<<endl;
00111
00112 set<string>::iterator it(tempnames.lower_bound(filename));
00113 string firstfile ="";
00114 if(it!=tempnames.end()){
00115 firstfile = tmd+(*it);
00116 }
00117 MSG("UberHeader",Msg::kDebug)<<"firstfile "<<firstfile<<endl;
00118 string secondfile = "";
00119 if(it!=tempnames.begin()){
00120 secondfile = tmd+*(--it);
00121 }
00122 MSG("UberHeader",Msg::kDebug)<<"Current time filename "<<filename<<endl
00123 <<"Lower bound "<<firstfile<<endl
00124 <<"Previous "<<secondfile<<endl;
00125 tr.AddTemps(firstfile);
00126 tr.AddTemps(secondfile);
00127
00128 char date[33];
00129 strftime(date, 32, "%B %d,%Y %X", ts);
00130 MSG("UberHeader",Msg::kDebug)<<"DATE "<<date<<endl;
00131
00132 float temperature = tr.GetTempFromTime(tstart);
00133 MSG("UberHeader",Msg::kDebug)<<"Temperature "<<temperature<<endl;
00134 return temperature;
00135 }
00136
00137 Float_t UberHeader::ReadBeamMomentum()
00138 {
00139
00140
00141 char *rldir = getenv("RUN_LOG_DIR");
00142 string runlogdir;
00143 if(rldir==NULL){
00144 runlogdir ="./";
00145 }
00146 else{
00147 runlogdir = rldir;
00148 }
00149
00150 stringstream rlf;
00151 rlf<<runlogdir<<"run-"<<runno<<".kvp"<<'\0';
00152 string runlogfile = rlf.str();
00153
00154 ifstream runlog(runlogfile.c_str());
00155 if(!runlog){
00156 MSG("UberHeader",Msg::kError)<<"Could not find file "
00157 <<runlogfile<<"Setting beam momentum to 0"<<endl;
00158 return 0.;
00159 }
00160
00161 char buffer[20480];
00162 string b;
00163 runlog.getline(buffer,20480,';');
00164 while(!runlog.eof()){
00165 MSG("UberHeader",Msg::kDebug)<<"buffer "<<buffer<<endl;
00166 b = buffer;
00167 if(b.substr(0,11)=="Beam Energy"){
00168 break;
00169 }
00170 runlog.getline(buffer,20480,';');
00171 }
00172
00173 string be = b.substr(b.find_first_of('=')+1,b.find_first_of('G')-1);
00174 MSG("UberHeader",Msg::kDebug)<<"beam energy "<<atof(be.c_str())<<endl;
00175 return atof(be.c_str());
00176
00177 }
00178
00179 const char* UberHeader::ReadComments()
00180 {
00181
00182
00183 char *rldir = getenv("RUN_LOG_DIR");
00184 string runlogdir;
00185 if(rldir==NULL){
00186 runlogdir ="./";
00187 }
00188 else{
00189 runlogdir = rldir;
00190 }
00191
00192 stringstream rlf;
00193 rlf<<runlogdir<<"run-"<<runno<<".kvp"<<'\0';
00194 string runlogfile = rlf.str();
00195
00196 ifstream runlog(runlogfile.c_str());
00197 if(!runlog){
00198 MSG("UberHeader",Msg::kError)<<"Could not find file "
00199 <<runlogfile
00200 <<"Setting coments to empty string"<<endl;
00201 return ";";
00202 }
00203
00204 char buffer[20480];
00205 string b;
00206 string be="";
00207 runlog.getline(buffer,20480,';');
00208 while(!runlog.eof()){
00209 MSG("UberHeader",Msg::kDebug)<<"buffer "<<buffer<<endl;
00210 b = buffer;
00211 if(b.substr(0,8)=="comments"){
00212
00213 be += b.substr(b.find_first_of('=')+1);
00214 be+=";";
00215 }
00216
00217 runlog.getline(buffer,20480,';');
00218 }
00219
00220 MSG("UberHeader",Msg::kDebug)<<"comments "<<be.c_str()<<endl;
00221 return be.c_str();
00222
00223 }
00224
00225
00226
00227
00228 void UberHeader::SetComments(const char* comm)
00229 {
00230 int i=0;
00231 while(comm[i]!='\0'){
00232 i++;
00233 }
00234 i++;
00235
00236 comments = new char[i];
00237 sprintf(comments, "%s",comm);
00238
00239 MSG("UberHeader",Msg::kDebug)<<"comments from set "<<comments<<endl;
00240 }
00241
00242 const char* UberHeader::ReadRunType()
00243 {
00244
00245
00246 char *rldir = getenv("RUN_LOG_DIR");
00247 string runlogdir;
00248 if(rldir==NULL){
00249 runlogdir ="./";
00250 }
00251 else{
00252 runlogdir = rldir;
00253 }
00254
00255 stringstream rlf;
00256 rlf<<runlogdir<<"run-"<<runno<<".kvp"<<'\0';
00257 string runlogfile = rlf.str();
00258
00259 ifstream runlog(runlogfile.c_str());
00260 if(!runlog){
00261 MSG("UberHeader",Msg::kError)<<"Could not find file "
00262 <<runlogfile
00263 <<"Setting coments to empty string"<<endl;
00264 return "";
00265 }
00266
00267 char buffer[20480];
00268 string b;
00269 runlog.getline(buffer,20480,';');
00270 while(!runlog.eof()){
00271 MSG("UberHeader",Msg::kDebug)<<"buffer "<<buffer<<endl;
00272 b = buffer;
00273 if(b.substr(0,11)=="runTypeName"){
00274 break;
00275 }
00276 runlog.getline(buffer,20480,';');
00277 }
00278
00279 string be = b.substr(b.find_first_of('=')+1);
00280
00281 MSG("UberHeader",Msg::kDebug)<<"RunType "<<(be.c_str())<<endl;
00282 return be.c_str();
00283
00284 }
00285
00286
00287
00288
00289 void UberHeader::SetRunType(const char* rt)
00290 {
00291 int i=0;
00292 while(rt[i]!='\0'){
00293 i++;
00294 }
00295 i++;
00296 runtype = new char[i];
00297 sprintf(runtype, "%s",rt);
00298
00299 }
00300
00301
00302
00303
00304
00305
00306
00307