00001
00002 #include "dEmcClusterExtWrapper.h"
00003
00004 ClassImp(dEmcClusterExtWrapper)
00005
00006 dEmcClusterExtWrapper::dEmcClusterExtWrapper(const char* name, const size_t& max_rows)
00007 : PHTable(name,max_rows)
00008 {
00009 size_t rowSize = sizeof(DEMCCLUSTEREXT_ST);
00010 if (max_rows > 0) {
00011 fTableData = new DEMCCLUSTEREXT_ST[max_rows];
00012 SetMaxRowCount(max_rows);
00013 }
00014 else {
00015 fTableData = new DEMCCLUSTEREXT_ST[1];
00016 SetMaxRowCount(1);
00017 }
00018
00019 SetRowSize(rowSize);
00020 SetType("dEmcClusterExt");
00021 fTableHeader->dsl_pointer = (long)this;
00022 fTableHeader->data_pointer = (long)fTableData;
00023 }
00024
00025 dEmcClusterExtWrapper::~dEmcClusterExtWrapper()
00026 {
00027 delete [] fTableData;
00028 }
00029
00030 void*
00031 dEmcClusterExtWrapper::RawTableData()
00032 {
00033 return static_cast<void*>(fTableData);
00034 }
00035
00036 DEMCCLUSTEREXT_ST*
00037 dEmcClusterExtWrapper::TableData()
00038 {
00039 return fTableData;
00040 }
00041
00042 DEMCCLUSTEREXT_ST&
00043 dEmcClusterExtWrapper::operator[](const size_t& row)
00044 {
00045 return fTableData[row];
00046 }
00047
00048 const DEMCCLUSTEREXT_ST&
00049 dEmcClusterExtWrapper::operator[](const size_t& row) const
00050 {
00051 return fTableData[row];
00052 }
00053
00054 void
00055 dEmcClusterExtWrapper::SetMaxRowCount(const size_t& max_rows)
00056 {
00057
00058 if (max_rows <= 0) {
00059 return;
00060 }
00061
00062
00063 if (fTableHeader->nok > max_rows) {
00064 fTableHeader->nok = max_rows;
00065 }
00066
00067
00068 if (max_rows > fTableHeader->maxlen) {
00069 DEMCCLUSTEREXT_ST* newData = new DEMCCLUSTEREXT_ST[max_rows];
00070 if (fTableData) {
00071 for (long i = 0; i < fTableHeader->nok; i++) {
00072 newData[i] = fTableData[i];
00073 }
00074 delete [] fTableData;
00075 }
00076 fTableData = newData;
00077 fTableHeader->data_pointer = (long)fTableData;
00078 }
00079
00080 fTableHeader->maxlen = max_rows;
00081 }
00082 void
00083 dEmcClusterExtWrapper::SetRowCount(const size_t& n)
00084 {
00085 if (n > fTableHeader->maxlen) {
00086 fTableHeader->nok = fTableHeader->maxlen;
00087 }
00088 else if (n >= 0) {
00089 fTableHeader->nok = n;
00090 }
00091 }
00092
00093 void
00094 dEmcClusterExtWrapper::SetRowSize(const size_t& row_size)
00095 {
00096 if (row_size > 0) {
00097 fTableHeader->rbytes = row_size;
00098 }
00099 }
00100
00101 void
00102 dEmcClusterExtWrapper::Streamer(TBuffer& b)
00103 {
00104
00105
00106
00107 if (b.IsReading()) {
00108 Version_t v = b.ReadVersion();
00109 PHTable::Streamer(b);
00110 if (RowSize() != sizeof(DEMCCLUSTEREXT_ST)) {
00111
00112 return;
00113 }
00114
00115
00116
00117
00118
00119 size_t max_rows = MaxRowCount();
00120 if (max_rows <= 0) {
00121 max_rows = 1;
00122 }
00123
00124 delete [] fTableData;
00125 fTableData = new DEMCCLUSTEREXT_ST[max_rows];
00126 fTableHeader->data_pointer = (long)fTableData;
00127
00128 SetMaxRowCount(max_rows);
00129 SetType("dEmcClusterExtWrapper");
00130
00131 for (long i=0; i<RowCount(); i++) {
00132 b >> fTableData[i].id;
00133 b >> fTableData[i].runno;
00134 b >> fTableData[i].evno;
00135 b >> fTableData[i].clusno;
00136 b >> fTableData[i].method;
00137 b >> fTableData[i].type;
00138 b >> fTableData[i].arm;
00139 b >> fTableData[i].sector;
00140 b.ReadStaticArray(fTableData[i].xyz);
00141 b.ReadStaticArray(fTableData[i].dxyz);
00142 b >> fTableData[i].e;
00143 b >> fTableData[i].ecorr;
00144 b >> fTableData[i].de;
00145 b >> fTableData[i].tof;
00146 b >> fTableData[i].ecent;
00147 b >> fTableData[i].tofcorr;
00148 b >> fTableData[i].dtof;
00149 b >> fTableData[i].qual;
00150 b >> fTableData[i].pid;
00151 b >> fTableData[i].prob_photon;
00152 b >> fTableData[i].prob_neuhad;
00153 b >> fTableData[i].chi2;
00154 b >> fTableData[i].nsh;
00155 b >> fTableData[i].chi2_sh;
00156 b >> fTableData[i].prob_photon_sh;
00157 b.ReadStaticArray(fTableData[i].e_sh);
00158 b.ReadStaticArray(fTableData[i].ecorr_sh);
00159 b.ReadStaticArray(fTableData[i].de_sh);
00160 b.ReadStaticArray((float *)fTableData[i].xyz_sh);
00161 b.ReadStaticArray((float *)fTableData[i].dxyz_sh);
00162 b >> fTableData[i].theta;
00163 b >> fTableData[i].phi;
00164 b.ReadStaticArray(fTableData[i].unitv);
00165 b.ReadStaticArray(fTableData[i].ind);
00166 b >> fTableData[i].twrhit;
00167 b >> fTableData[i].tofmin;
00168 b >> fTableData[i].etofmin;
00169 b >> fTableData[i].tofmincorr;
00170 b >> fTableData[i].tofmax;
00171 b >> fTableData[i].etofmax;
00172 b >> fTableData[i].tofmaxcorr;
00173 b >> fTableData[i].tofmean;
00174 b.ReadStaticArray(fTableData[i].disp);
00175 b.ReadStaticArray(fTableData[i].padisp);
00176 b >> fTableData[i].charged;
00177 b.ReadStaticArray(fTableData[i].pc3proj);
00178 b.ReadStaticArray(fTableData[i].partesum);
00179 b.ReadStaticArray(fTableData[i].twrlist);
00180 b.ReadStaticArray(fTableData[i].chglist);
00181 }
00182 }
00183 else {
00184 b.WriteVersion(IsA());
00185 PHTable::Streamer(b);
00186 for (long i=0; i<RowCount(); i++) {
00187 b << fTableData[i].id;
00188 b << fTableData[i].runno;
00189 b << fTableData[i].evno;
00190 b << fTableData[i].clusno;
00191 b << fTableData[i].method;
00192 b << fTableData[i].type;
00193 b << fTableData[i].arm;
00194 b << fTableData[i].sector;
00195 b.WriteArray(fTableData[i].xyz,3);
00196 b.WriteArray(fTableData[i].dxyz,3);
00197 b << fTableData[i].e;
00198 b << fTableData[i].ecorr;
00199 b << fTableData[i].de;
00200 b << fTableData[i].tof;
00201 b << fTableData[i].ecent;
00202 b << fTableData[i].tofcorr;
00203 b << fTableData[i].dtof;
00204 b << fTableData[i].qual;
00205 b << fTableData[i].pid;
00206 b << fTableData[i].prob_photon;
00207 b << fTableData[i].prob_neuhad;
00208 b << fTableData[i].chi2;
00209 b << fTableData[i].nsh;
00210 b << fTableData[i].chi2_sh;
00211 b << fTableData[i].prob_photon_sh;
00212 b.WriteArray(fTableData[i].e_sh,2);
00213 b.WriteArray(fTableData[i].ecorr_sh,2);
00214 b.WriteArray(fTableData[i].de_sh,2);
00215 b.WriteArray((float *)fTableData[i].xyz_sh,6);
00216 b.WriteArray((float *)fTableData[i].dxyz_sh,6);
00217 b << fTableData[i].theta;
00218 b << fTableData[i].phi;
00219 b.WriteArray(fTableData[i].unitv,3);
00220 b.WriteArray(fTableData[i].ind,2);
00221 b << fTableData[i].twrhit;
00222 b << fTableData[i].tofmin;
00223 b << fTableData[i].etofmin;
00224 b << fTableData[i].tofmincorr;
00225 b << fTableData[i].tofmax;
00226 b << fTableData[i].etofmax;
00227 b << fTableData[i].tofmaxcorr;
00228 b << fTableData[i].tofmean;
00229 b.WriteArray(fTableData[i].disp,2);
00230 b.WriteArray(fTableData[i].padisp,2);
00231 b << fTableData[i].charged;
00232 b.WriteArray(fTableData[i].pc3proj,3);
00233 b.WriteArray(fTableData[i].partesum,16);
00234 b.WriteArray(fTableData[i].twrlist,16);
00235 b.WriteArray(fTableData[i].chglist,16);
00236 }
00237 }
00238
00239 }
00240