#include "RawDataBanks/CPRD_StorableBank.hh" #include #include #include #include #include "Trybos/TRY_Bank_Number.hh" #include #include #include #include //_____________________________________________________________________________ Int_t StntupleInitCprDataBlock(TStnDataBlock* block, AbsEvent* event, int mode) { int ev_number, rn_number; ev_number = AbsEnv::instance()->trigNumber(); rn_number = AbsEnv::instance()->runNumber(); if (block->Initialized(ev_number,rn_number)) return 0; TCprDataBlock* data = (TCprDataBlock*) block; data->Clear(); //Get the CPRD bank in an event (there should be only one) EventRecord::ConstIterator bankIter(event,"CPRD_StorableBank"); if(bankIter.is_valid() ) { ConstHandle cprdBank(bankIter); for (CPRD_StorableBank::ConstGrandBankIter data_iter(cprdBank); data_iter.is_valid(); data_iter++) { // int blockind = data_iter.block_index(); int wireNo = cprdBank->get_wire(data_iter); int module = cprdBank->get_module(data_iter); int energy = cprdBank->get_data(data_iter); int i_ew = cprdBank->get_we(data_iter); if(energy>=50) { data->fNHitWires[i_ew][module]++; data->fWireData[i_ew][module][wireNo] = energy; } } // set event and run numbers to // mark block as initialized data->f_RunNumber = ev_number; data->f_EventNumber = rn_number; return 0; } else { return 1; } } //_____________________________________________________________________________ Int_t StntupleFillCprd(TCprDataBlock* Block, CPRD_StorableBank*& Cprd) { // CPRD bank is supposed to be created outside // Create a buffer big enough to hold the data uint2* buf = new uint2[CPRD_StorableBank::get_max_size()]; int nwires = 32; int n_blk = CPRD_StorableBank::get_n_blocks(); int ndat = n_blk+2; int block = 0; short adc; uint2 chid; // buf[0] = #of blocks buf[block++] = n_blk; // Loop over 2 sides (East and West) for (int side=0; side<2; side++) { for (int module=0; module<24; module++) { if ((module%3) == 0) { buf[block++] = ndat; // iblk is incremented by 1 every 3 modules } for (int wire=0; wireGetWireData(side,module,wire); if (adc > 0) { chid = CPRD_StorableBank::make_chid(module, wire, side); buf[ndat++] = chid; buf[ndat++] = adc; } } } } // Pointer to end of data buf[block] = ndat; // pass bank number, data length, // and pointer to buffer Cprd = new CPRD_StorableBank(1,ndat,buf); delete [] buf; return 0; }