#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include "TFndRawSil.h"

ClassImp(TFndRawSil);

///////////////////////////////////////////////////////////////////////////////
//                                                                           //
//  TFndRawSil is the fundamental class of Finuda Raw                        //
//                                                                           //
/////////////////////////////////////////////////////////////////////////////////
 TFndRawSil::TFndRawSil() {
//
//Class default costructor
//
  memset (fCram, (Int_t)NULL ,sizeof(fCram) );
  memset (fCramLen,(Int_t)0  ,sizeof(fCramLen));
  } 

 TFndRawSil::TFndRawSil(UInt_t *raw, Int_t j) {
//
//Class costructor
//
  memset (fCram, (Int_t)NULL ,sizeof(fCram) );
  memset (fCramLen,(Int_t)0  ,sizeof(fCramLen));
  UInt_t *det = raw[7+j]? raw+raw[7+j] : (UInt_t*) NULL;
  UInt_t sillen = *det;
  Int_t kcram = 0;
  //  cout << "silicon buffer length " << sillen << endl;
  UInt_t scanlen = 2;
  UInt_t hdrlen = 3;
  while(scanlen < sillen-1) {
    UInt_t cramlen = *(det+hdrlen+scanlen) + hdrlen;
    /*
    UInt_t cramsec = *(det+hdrlen+scanlen-1);
    UInt_t cramadr = *(det+hdrlen+scanlen-2);
    printf("CRAM address %X, section %d, length %dn",cramadr,cramsec,cramlen);
    */
    UInt_t *pcram = det+hdrlen+scanlen-2;
    scanlen += cramlen;                  
//
//Fill CRAM 
//
    fCramLen[kcram] = pcram[2] + 3;
    fCram[kcram]    = new UInt_t[fCramLen[kcram]];
    memcpy(fCram[kcram] ,pcram,fCramLen[kcram]*sizeof(UInt_t));

    kcram++;
    }
  }

 TFndRawSil::~TFndRawSil() {
   for(Int_t i=0; i<kNCRAMS; i++) { 
     delete [] fCram[i]; 
     }
 }
  
 void TFndRawSil::PrtCram(Int_t ncram) {

  UInt_t *pcram=0;
  Int_t cramlen=0;
//  cout << "CRAM pointer: "; 
  pcram = this->GetCram(ncram);
//  cout << pcram << endl;
  if(pcram) {
    cramlen = (Int_t) this->GetCramLen(ncram);
    cout << " CRAM " << ncram;
    printf(", Address %X, Section %d, Number of hits %dn",*pcram,*(pcram+1),*(pcram+2));
    for(Int_t i=3;i<cramlen;i++) cout << "channel " << i << " content " << *((pcram++)+3) << endl;
    }
}

 void TFndRawSil::Dump() {
//
//Dump Raw Event
//
  for(Int_t k = 0;k<kNCRAMS; k++) this->PrtCram(k);
}

 void TFndRawSil::Streamer(TBuffer &R__b) {

   if(R__b.IsReading()) { 
      Version_t R__v = R__b.ReadVersion(); if(R__v) {}
      TObject::Streamer(R__b);
      int i;
      R__b >> i;
      while(i) {
        R__b >> fCramLen[--i];
        fCram[i] = new UInt_t[fCramLen[i]];
        for(UInt_t k = 0;k<fCramLen[i];k++) R__b >> fCram[i][k];
        R__b >> i;
        }
      }
   else {
      R__b.WriteVersion(TFndRawSil::IsA());
      TObject::Streamer(R__b);
      for(int i = 0;i<kNCRAMS;i++) if (fCramLen[i]) {
        R__b << i+1;
        R__b << fCramLen[i];
        for(UInt_t k = 0;k<fCramLen[i];k++) R__b<< fCram[i][k];
        }
               }
     R__b <<0;
}
/*
void TFndRawEqp::ShowMembers(TMemberInspector &R__insp, char *R__parent)
{

   TClass *R__cl  = TFndRawEqp::IsA();
   Int_t   R__ncp = strlen(R__parent);
   R__insp.Inspect(R__cl, R__parent, "fEqpLen[30]", fEqpLen);
   R__insp.Inspect(R__cl, R__parent, "*fEqp[30]", &fEqp);
   TObject::ShowMembers(R__insp, R__parent);
}*/













ROOT page - Class index - Top of the page

This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.