//----------------------------------------------------------------------------- // Oct 18, 2003 RLC: EMT data block: CSPD and EMTD //----------------------------------------------------------------------------- #include "TBuffer.h" #include #include ClassImp(TEmtDataBlock) //_____________________________________________________________________________ TEmtDataBlock::TEmtDataBlock() : fEmtd(100) { } //_____________________________________________________________________________ TEmtDataBlock::~TEmtDataBlock() { } //______________________________________________________________________________ void TEmtDataBlock::Streamer(TBuffer &R__b) { // Stream an object of class TEmtDataBlock. if (R__b.IsReading()) { Clear(); Version_t R__v = R__b.ReadVersion(); if (R__v) { } fEmtd.Streamer(R__b); InitTdcChannels(); } else { R__b.WriteVersion(TEmtDataBlock::IsA()); fEmtd.Streamer(R__b); } } //_____________________________________________________________________________ Int_t TEmtDataBlock::InitTdcChannels() { // update transient data members int nw, loc, nw_total, itdc; fNEmtdHits = 0; nw_total = fEmtd.NDataWords(); loc = 0; itdc = 0; while (loc < nw_total) { fEmtTdc[itdc++].SetData(fEmtd.GetArray()+loc); TEmtTdcHeader header = (TEmtTdcHeader) fEmtd[loc]; nw = header.NDataWords(); fNEmtdHits += nw; // n(data words) + header loc += nw+1; } return 0; } //_____________________________________________________________________________ // i is the TDC number TEmtTdcHeader& TEmtDataBlock::GetEmtTdcHeader(Int_t i) { return *((TEmtTdcHeader*)fEmtTdc[i].Header()); } //_____________________________________________________________________________ // i is the TDC number. j=hit number TEmtTdcWord& TEmtDataBlock::GetEmtTdcWord(Int_t i, Int_t j) { return *((TEmtTdcWord*)fEmtTdc[i].Data(j)); } //_____________________________________________________________________________ // get eta and phi indicies from header and word // this returns 0->23 in phi even in the plug region with 48 towers // since those towers are ganged by 2 Int_t TEmtDataBlock::GetEtaPhi(TEmtTdcHeader& h, TEmtTdcWord& w, Int_t& phi, Int_t& eta) { phi = (h.LowWedge() + w.Wedge())%24; int rBit = h.RapidityBit(); int rSeg = w.RapiditySeg(); if(rBit==1 || (rBit==3 && rSeg!=9) ) { eta = rSeg+10; } else { eta = rSeg; } eta = (h.Side()==0? 25-eta : eta+26 ); return 0; } //_____________________________________________________________________________ // get data for eta and phi indicies // user must check return value to see if the hit was present // this returns 0->23 in phi even in the plug region with 48 towers // since those towers are ganged by 2 Int_t TEmtDataBlock::GetDataEtaPhi(TEmtTdcHeader& h, TEmtTdcWord& w, Int_t phi, Int_t eta) { h.Clear(); w.Clear(); int ip,ie; for(int m=0; mEmtTdc(itdc); int nhits = tdc.NDataWords(); if (nhits > 0) { printf(" %3i %7i\n",itdc, nhits); TEmtTdcHeader* header = (TEmtTdcHeader*) tdc.Header(); for (int i=0; iLeadingEdge(), data->Width(), data->First(), data->ChannelId(), header->RapidityBit(), header->Side(), header->LowWedge(), data->RapiditySeg(), data->Wedge() ); } } } } //_____________________________________________________________________________ int TEmtDataBlock::ReadCalibrations(int run_number) { return 0; }