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
00025
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 }