#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.