Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001 #include "MicromegasRawHitContainerv3.h"
0002 #include "MicromegasRawHitv3.h"
0003 
0004 #include <TClonesArray.h>
0005 
0006 #include <iostream>
0007 
0008 static constexpr int NHITS = 100;
0009 
0010 MicromegasRawHitContainerv3::MicromegasRawHitContainerv3()
0011   : MicromegasRawHitsTCArray(new TClonesArray("MicromegasRawHitv3", NHITS))
0012 {
0013 }
0014 
0015 MicromegasRawHitContainerv3::~MicromegasRawHitContainerv3()
0016 {
0017   MicromegasRawHitsTCArray->Clear("C");
0018   delete MicromegasRawHitsTCArray;
0019 }
0020 
0021 void MicromegasRawHitContainerv3::Reset()
0022 {
0023   MicromegasRawHitsTCArray->Clear("C");
0024   MicromegasRawHitsTCArray->Expand(NHITS);
0025 }
0026 
0027 void MicromegasRawHitContainerv3::identify(std::ostream &os) const
0028 {
0029   os << "MicromegasRawHitContainerv3" << std::endl;
0030   os << "containing " << MicromegasRawHitsTCArray->GetEntriesFast() << " Tpc hits" << std::endl;
0031   // NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
0032   MicromegasRawHit *tpchit = static_cast<MicromegasRawHit *>(MicromegasRawHitsTCArray->At(0));
0033   if (tpchit)
0034   {
0035     os << "for beam clock: " << std::hex << tpchit->get_bco() << std::dec << std::endl;
0036   }
0037 }
0038 
0039 int MicromegasRawHitContainerv3::isValid() const
0040 {
0041   return MicromegasRawHitsTCArray->GetSize();
0042 }
0043 
0044 unsigned int MicromegasRawHitContainerv3::get_nhits()
0045 {
0046   return MicromegasRawHitsTCArray->GetEntriesFast();
0047 }
0048 
0049 MicromegasRawHit *MicromegasRawHitContainerv3::AddHit()
0050 {
0051   auto *newhit = new ((*MicromegasRawHitsTCArray)[MicromegasRawHitsTCArray->GetLast() + 1]) MicromegasRawHitv3();
0052   return newhit;
0053 }
0054 
0055 MicromegasRawHit *MicromegasRawHitContainerv3::AddHit(MicromegasRawHit *rawhit)
0056 {
0057   if (rawhit->IsA() == MicromegasRawHitv3::Class())
0058   {
0059     // fast add with move constructor to avoid ADC data copying
0060     return new ((*MicromegasRawHitsTCArray)[MicromegasRawHitsTCArray->GetLast() + 1])
0061         MicromegasRawHitv3(std::move(*dynamic_cast<MicromegasRawHitv3 *>(rawhit)));
0062   }
0063 
0064   // slow
0065   std::cout << __PRETTY_FUNCTION__ << "WARNING: input hit is not of type MicromegasRawHitv3. This is slow, please avoid." << std::endl;
0066   return new ((*MicromegasRawHitsTCArray)[MicromegasRawHitsTCArray->GetLast() + 1]) MicromegasRawHitv3(rawhit);
0067 }
0068 
0069 MicromegasRawHit *MicromegasRawHitContainerv3::get_hit(unsigned int index)
0070 {
0071   // NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
0072   return static_cast<MicromegasRawHit *>(MicromegasRawHitsTCArray->At(index));
0073 }