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

UberHeader.cxx

Go to the documentation of this file.
00001 #include <cstdio>
00002 #include <cstdlib>
00003 #include <cstring>
00004 #include <iostream>
00005 //#include <strstream>
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 }//end UberHeader()
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 }//end ~UberHeader()
00050 //_______________________________________________________________________________
00051 void UberHeader::Print(Option_t* /* option */) 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 }//end Print()
00063 //_______________________________________________________________________________
00064 void UberHeader::SetStartTime(time_t t)
00065 {
00066 
00067   //  tstart = mktime(ts);
00068   tstart = t;
00069   struct tm *ts = gmtime(&t);
00070   strftime(tstartchar, 35, "%B %d,%Y %X", ts);
00071 }//end SetStartTime()
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   //  fname.freeze(false);
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 }//end ReadTemperature()
00136 //_______________________________________________________________________________
00137 Float_t UberHeader::ReadBeamMomentum()
00138 {
00139   //parse Gordons kvp files which contain the runlog info
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   //  rlf.freeze(false);
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 }//end ReadBeamMomentum()
00178 //_______________________________________________________________________________
00179 const char* UberHeader::ReadComments()
00180 {
00181   //parse Gordons kvp files which contain the runlog info
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   //  rlf.freeze(false);
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       //      break;
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 }//end ReadComments()
00224 //_______________________________________________________________________________
00225 
00226 // this inline was causing linkage problems -- MAK 25 March, 2003
00227 //inline void UberHeader::SetComments(const char* comm)
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 }//SetComments()
00241 //_______________________________________________________________________________
00242 const char* UberHeader::ReadRunType()
00243 {
00244   //parse Gordons kvp files which contain the runlog info
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   //  rlf.freeze(false);
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 }//end ReadRunType()
00285 //_______________________________________________________________________________
00286 
00287 // this inline was causing linkage problems -- MAK 25 March, 2003
00288 //inline void UberHeader::SetRunType(const char* rt)
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 }//end SetRunType()
00300 //_______________________________________________________________________________
00301 
00302 
00303 
00304 
00305 
00306 
00307 

Generated on Mon Feb 15 11:07:47 2010 for loon by  doxygen 1.3.9.1