emcTofT0FEM.C

Go to the documentation of this file.
00001 #include "emcTofT0FEM.h"
00002 #include "emcTracedValue.h"
00003 #include <string>
00004 #include <cassert>
00005 #include "emcCalFEMFactory.h"
00006 
00007 using namespace std;
00008 
00009 namespace
00010 { 
00011   static string name = "emcTofT0FEM";
00012   static string title = "Tof T0 drift";
00013   string Title(int version)
00014   {
00015     string rv = "ToF T0 Drift ";
00016     if ( version == 1 ) 
00017       {
00018         rv += " (with BBC global T0)";
00019       }
00020     return rv;
00021   }
00022   static string classname = "emcTofT0FEM";
00023 
00024   // Below are the necessary pieces to let the emcCalFEMFactory
00025   // build emcTofT0FEM objects.
00026   emcCalFEM* creator(int absPosition,
00027                      const PHTimeStamp& start,
00028                      const PHTimeStamp& end,
00029                      bool isDefault)
00030   {
00031     if ( isDefault )
00032       {
00033         return emcTofT0FEM::Default(absPosition,start,end,0);
00034       }
00035     else
00036       {
00037         return new emcTofT0FEM(absPosition,start,end,0);
00038       }
00039   }
00040  
00041   emcCalFEM* creatorB(int absPosition,
00042                       const PHTimeStamp& start,
00043                       const PHTimeStamp& end,
00044                       bool isDefault)
00045   {
00046     if ( isDefault )
00047       {
00048         return emcTofT0FEM::Default(absPosition,start,end,1);
00049       }
00050     else
00051       {
00052         return new emcTofT0FEM(absPosition,start,end,1);
00053       }
00054   }
00055 
00056   static bool r = emcCalFEMFactory::registerCreator("TofT0s",
00057                                                     creator);
00058   static bool rB = emcCalFEMFactory::registerCreator("TofT0Bs",
00059                                                      creatorB);
00060 }
00061 
00062 //_____________________________________________________________________________
00063 emcTofT0FEM::emcTofT0FEM(int absPosition, int version)
00064   : emcGainFEM(absPosition), fBBCT0(0)
00065 {
00066   NameIt(name,Title(version),classname);
00067   SetVersion(version);
00068 }
00069 
00070 //_____________________________________________________________________________
00071 emcTofT0FEM::emcTofT0FEM(int absPosition,
00072                          const PHTimeStamp& tStart, const PHTimeStamp& tEnd,
00073                          int version)
00074   : emcGainFEM(absPosition,tStart,tEnd), fBBCT0(0) 
00075 {
00076   NameIt(name,Title(version),classname);
00077   SetVersion(version);
00078 }
00079 
00080 //_____________________________________________________________________________
00081 emcTofT0FEM*
00082 emcTofT0FEM::Default(int absPosition, 
00083                      const PHTimeStamp& tStart, const PHTimeStamp& tEnd,
00084                      int version)
00085 {
00086   emcTofT0FEM* fem = new emcTofT0FEM(absPosition,tStart,tEnd,version);
00087 
00088   if ( version == 0 )
00089     {
00090       fem->SetNumberOfChannels(144);
00091       for ( size_t i = 0; i < fem->size(); i++ ) 
00092         {
00093           fem->AddNewItem(i,new emcTracedValue(0,0,0));
00094         }
00095     }
00096   else
00097     {
00098       fem->SetNumberOfChannels(145);
00099       for ( size_t i = 0; i < fem->size()-1; i++ ) 
00100         {
00101           fem->AddNewItem(i,new emcTracedValue(0,0,0));
00102         }
00103       fem->AddNewItem(144,new emcTracedValue(0,0,0));
00104     }
00105   
00106 
00107   return fem;
00108 
00109 }
00110 
00111 //_____________________________________________________________________________
00112 const char*
00113 emcTofT0FEM::GetCategory(void) const
00114 {
00115   if ( Version() == 0 )
00116     { 
00117       return "TofT0s"; 
00118     }
00119   else
00120     {
00121       return "TofT0Bs";
00122     }
00123 }
00124 
00125 //_____________________________________________________________________________
00126 void
00127 emcTofT0FEM::setBBCT0(float b)
00128 {
00129   if ( Version() == 0 )
00130     {
00131       std::cerr << "<E> emcTofT0FEM::setBBCT0 not implemented for this version"
00132                 << " Using 0."
00133                 << std::endl;
00134     }
00135   else
00136     {
00137       fBBCT0=b;
00138     }
00139 }
00140 
00141 //_____________________________________________________________________________
00142 void 
00143 emcTofT0FEM::writeDataToFile(FILE* fp) const
00144 {
00145   time_t tics = GetStartValTime().getTics(); 
00146   char timeString[25]; 
00147   timeString[24] = '\0'; 
00148   strncpy(timeString, ctime(&tics), 24);   
00149   fprintf(fp,"%s\n",timeString) ;
00150 
00151   size_t i,j ;
00152   int item = 0 ;
00153 
00154   for (i=0;i<fItems.size();i++) {
00155     assert(fItems[i]!=0) ;
00156     emcItemVector& itemVector = *(fItems[i]) ;
00157     for (j=0;j<itemVector.size();j++) {    
00158       fprintf(fp," %5d", item) ;
00159       itemVector[j]->writeData(fp) ;
00160       fprintf(fp,"\n") ;
00161     }
00162     item++ ;
00163   }
00164   fprintf(fp,"144 %ld 0 0\n",GetXmax());
00165   fprintf(fp,"145 %ld 0 0\n",GetXmin());
00166   if ( Version() > 0 ) 
00167     {
00168       fprintf(fp,"146 0 %f 0\n",getBBCT0());
00169     }
00170 }