#include #include #include #include #include #include #include #include #include #include //_____________________________________________________________________________ Int_t StntupleInitFwdDetDataBlock(TStnDataBlock* block, AbsEvent* event, int mode) { // initialize Forward 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; TFwdDetDataBlock* fwddet_block = (TFwdDetDataBlock*) block; fwddet_block->Clear(); bool no_bsc_bank = false; bool no_rps_bank = false; bool no_mp_bank = false; int ich, ipot, itype, ifiber, iside, itower, data_adc; // BSC and RPT part EventRecord::ConstIterator iter_fdad(event, "FDAD_StorableBank"); if (! iter_fdad.is_valid()) no_bsc_bank = true; else { ConstHandle fdad(iter_fdad); for (ConstGrandBankIterI2s1 iter_data(fdad); iter_data.is_valid(); ++iter_data) { ich = fdad->get_chid(iter_data); data_adc = fdad->get_data(iter_data); if ((ich >= 0) && (ich < TFwdDetDataBlock::BscNCh)) { fwddet_block->fBscData[ich] = data_adc; if (data_adc > TFwdDetDataBlock::BscThresh) fwddet_block->fNBscHits++; } else if ((ich >= TFwdDetDataBlock::BscNCh) && (ich < TFwdDetDataBlock::BscNCh+ TFwdDetDataBlock::RptNCh)) { fwddet_block-> fRptData[ich-TFwdDetDataBlock::BscNCh] = data_adc; if (data_adc > TFwdDetDataBlock::RptThresh) fwddet_block->fNRptHits++; } } } // RPS part EventRecord::ConstIterator iter_rpad(event, "RPAD_StorableBank"); if (! iter_rpad.is_valid()) no_rps_bank = true; else { ConstHandle rpad(iter_rpad); for (ConstGrandBankIterI2s1 iter_data(rpad); iter_data.is_valid(); ++iter_data) { ipot = rpad->get_roman_pot(iter_data); // Pot 1-3 itype = rpad->get_type(iter_data); // X=0, Y=1 ifiber = rpad->get_fiber(iter_data); // Fiber 0-39 data_adc = rpad->get_data(iter_data); int il; if ((ipot >= 1) && (ipot <= 3) && (itype >= 0) && (itype < 2) && (ifiber >= 0) && (ifiber < TFwdDetDataBlock::RpsNFibers)) { il = itype + 2*(ipot-1); fwddet_block->fRpsData[il][ifiber] = data_adc; if (data_adc > TFwdDetDataBlock::RpsThresh) fwddet_block->fNRpsHits[il]++; } } } // Miniplug part EventRecord::ConstIterator iter_mpad(event, "MPAD_StorableBank"); if (! iter_mpad.is_valid()) no_mp_bank = true; else { ConstHandle mpad(iter_mpad); for (ConstGrandBankIterI2s1 iter_data(mpad); iter_data.is_valid(); ++iter_data) { iside = mpad->get_we(iter_data); itype = mpad->get_type(iter_data); itower = mpad->get_sum_or_tower(iter_data); data_adc = mpad->get_data(iter_data); if ((iside >= 0) && (iside < TFwdDetDataBlock::MpNSides)) { if (itype == 0) { if ((itower >= 0) && (itower < TFwdDetDataBlock::MpNSumTowers)) { fwddet_block->fMpSumTowerData[iside][itower] = data_adc; if (data_adc > TFwdDetDataBlock::MpSumTowerThresh) fwddet_block->fNMpHits[iside][0]++; } } else if (itype == 1) { if ((itower >= 0) && (itower < TFwdDetDataBlock::MpNTowers)) { fwddet_block->fMpTowerData[iside][itower] = data_adc; if (data_adc > TFwdDetDataBlock::MpTowerThresh) fwddet_block->fNMpHits[iside][1]++; } } } } } if (no_bsc_bank && no_rps_bank && no_mp_bank) return -1; fwddet_block->f_EventNumber = ev_number; fwddet_block->f_RunNumber = rn_number; return 0; }