Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:17:14

0001 #include "MicromegasRawHitv3.h"
0002 
0003 #include <algorithm>
0004 #include <cassert>
0005 #include <iostream>
0006 
0007 MicromegasRawHitv3::MicromegasRawHitv3(MicromegasRawHit *source)
0008 {
0009   static bool once = true;
0010   if (once)
0011   {
0012     once = false;
0013     std::cout << "MicromegasRawHitv3::MicromegasRawHitv3(MicromegasRawHit *tpchit) - "
0014               << "WARNING: This moethod is slow and should be avoided as much as possible! Please use the move constructor."
0015               << std::endl;
0016   }
0017 
0018   MicromegasRawHitv3::set_bco(source->get_bco());
0019   MicromegasRawHitv3::set_gtm_bco(source->get_gtm_bco());
0020   MicromegasRawHitv3::set_packetid(source->get_packetid());
0021   MicromegasRawHitv3::set_fee(source->get_fee());
0022   MicromegasRawHitv3::set_channel(source->get_channel());
0023   MicromegasRawHitv3::set_sampaaddress(source->get_sampaaddress());
0024   MicromegasRawHitv3::set_sampachannel(source->get_sampachannel());
0025   MicromegasRawHitv3::set_sample_begin(source->get_sample_begin());
0026   MicromegasRawHitv3::set_sample_end(source->get_sample_end());
0027 
0028   {
0029     adc_list_t values;
0030     for (size_t i = source->get_sample_begin(); i < source->get_sample_end(); ++i)
0031     {
0032       values.push_back(source->get_adc(i));
0033     }
0034 
0035     move_adc_waveform(source->get_sample_begin(), std::move(values));
0036   }
0037 }
0038 
0039 // cppcheck-suppress accessMoved
0040 MicromegasRawHitv3::MicromegasRawHitv3(MicromegasRawHitv3 &&other) noexcept
0041   : MicromegasRawHit(other)
0042   , bco(other.bco)
0043   , packetid(other.packetid)
0044   , fee(other.fee)
0045   , channel(other.channel)
0046   , m_adcData(std::move(other.m_adcData))
0047 {
0048 }
0049 
0050 void MicromegasRawHitv3::identify(std::ostream &os) const
0051 {
0052   os << "BCO: 0x" << std::hex << bco << std::dec << std::endl;
0053   os << "packet id: " << packetid << std::endl;
0054 }
0055 
0056 uint16_t MicromegasRawHitv3::get_adc(const uint16_t sample) const
0057 {
0058   auto iter = std::find_if(m_adcData.begin(), m_adcData.end(), [sample](const waveform_pair_t &pair)
0059                            { return sample >= pair.first && sample < pair.first + pair.second.size(); });
0060   return iter == m_adcData.end() ? 0 : iter->second[sample - iter->first];
0061 }
0062 
0063 void MicromegasRawHitv3::Clear(Option_t * /*unused*/)
0064 {
0065   m_adcData.clear();
0066   m_adcData.shrink_to_fit();
0067 }
0068 
0069 void MicromegasRawHitv3::move_adc_waveform(const uint16_t start_time, std::vector<uint16_t> &&adc)
0070 {
0071   m_adcData.emplace_back(start_time, adc);
0072 }