#include #include #include #include #include #include #include #include //_____________________________________________________________________________ Int_t StntupleInitTofDataBlock(TStnDataBlock* block, AbsEvent* event, int mode) { // initialize TOF Detector data block with the `event' data // return -1, if bank doesn't exist, 0, if everything is OK int ev_number, rn_number; // check if block has already been initialized ev_number = AbsEnv::instance()->trigNumber(); rn_number = AbsEnv::instance()->runNumber(); if (block->Initialized(ev_number,rn_number)) return 0; TTofDataBlock* tof_block = (TTofDataBlock*) block; tof_block->Clear(); bool no_tofd_bank = false; int moduleID, channel, pmtNum, charge, time; // check if bank is valid and loop over data in bank EventRecord::ConstIterator tofd_iter(event, "TOFD_StorableBank"); if (! tofd_iter.is_valid()) no_tofd_bank = true; else { ConstHandle tofd_handle(tofd_iter); channel = 0; for (TOFD_StorableBank::ConstGrandBankIter data_iter(tofd_handle); data_iter.is_valid(); ++data_iter){ moduleID = tofd_handle->get_module_ID (data_iter); charge = tofd_handle->get_charge (data_iter); time = tofd_handle->get_time (data_iter); //you need to get the pmt number from the moduleID and channel number pmtNum = moduleID*9 + channel; if ((pmtNum >= 0) && (pmtNum < TTofDataBlock::TofNumPmt)) { tof_block->fTofCharge[pmtNum] = charge; tof_block->fTofTime[pmtNum] = time; } channel = (channel+1)%9; } } if (no_tofd_bank) return -1; tof_block->f_EventNumber = ev_number; tof_block->f_RunNumber = rn_number; return 0; }