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
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 * )
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 }