dEmcClusterExtWrapper.C

Go to the documentation of this file.
00001 //INCLUDECHECKER: Removed this line: #include <cstdlib>
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) { // Avoid allocating a space of zero size!
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   // Avoid reallocing a space of zero size!
00058   if (max_rows <= 0) {
00059      return;
00060   }
00061 
00062   // Ensure that the current row count is not out of range.
00063   if (fTableHeader->nok > max_rows) {
00064      fTableHeader->nok = max_rows;
00065   }
00066 
00067   // If table needs to grow, allocate a new area for it.
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    // Stream an object of class dEmcClusterExtWrapper.
00105    // What should be done on output if the table is empty?
00106 
00107    if (b.IsReading()) {
00108      Version_t v = b.ReadVersion();
00109      PHTable::Streamer(b);         // Read the table header.
00110      if (RowSize() != sizeof(DEMCCLUSTEREXT_ST)) {
00111        // Sanity check failed.  Need some error message here.
00112        return;
00113      }
00114 
00115            // Reallocate the table explicitly here; the size of the data array
00116            // may be inconsistent with the max. row count variable in the header
00117            // (since the ROOT I/O default-constructs the former, and reads
00118            // the header for the latter).
00119            size_t max_rows = MaxRowCount();
00120            if (max_rows <= 0) { // Avoid allocating a space of zero size!
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);         // Write the table header.
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