Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001 #include "CaloPacketContainerv1.h"
0002 #include "CaloPacketv1.h"
0003 
0004 #include <phool/phool.h>
0005 
0006 #include <TClonesArray.h>
0007 
0008 static const int NCALOPACKETS = 128;
0009 
0010 CaloPacketContainerv1::CaloPacketContainerv1()
0011   : CaloPacketsTCArray(new TClonesArray("CaloPacketv1", NCALOPACKETS))
0012 {
0013 }
0014 
0015 CaloPacketContainerv1::~CaloPacketContainerv1()
0016 {
0017   delete CaloPacketsTCArray;
0018 }
0019 
0020 void CaloPacketContainerv1::Reset()
0021 {
0022   CaloPacketsTCArray->Clear();
0023   CaloPacketsTCArray->Expand(NCALOPACKETS);
0024 }
0025 
0026 void CaloPacketContainerv1::identify(std::ostream &os) const
0027 {
0028   os << "CaloPacketContainerv1" << std::endl;
0029   os << "containing " << CaloPacketsTCArray->GetEntriesFast() << " Calo Packets" << std::endl;
0030   for (int i = 0; i <= CaloPacketsTCArray->GetLast(); i++)
0031   {
0032     // TClonesArrays need a static cast, dynamic casts do not work
0033     // NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
0034     CaloPacket *calopkt = static_cast<CaloPacket *>(CaloPacketsTCArray->At(i));
0035     if (calopkt)
0036     {
0037       os << "id: " << calopkt->getIdentifier() << std::endl;
0038       os << "for beam clock: " << std::hex << calopkt->getBCO() << std::dec << std::endl;
0039     }
0040   }
0041 }
0042 
0043 int CaloPacketContainerv1::isValid() const
0044 {
0045   return CaloPacketsTCArray->GetSize();
0046 }
0047 
0048 unsigned int CaloPacketContainerv1::get_npackets()
0049 {
0050   return CaloPacketsTCArray->GetEntriesFast();
0051 }
0052 
0053 CaloPacket *CaloPacketContainerv1::AddPacket()
0054 {
0055   CaloPacket *newhit = new ((*CaloPacketsTCArray)[CaloPacketsTCArray->GetLast() + 1]) CaloPacketv1();
0056   return newhit;
0057 }
0058 
0059 CaloPacket *CaloPacketContainerv1::AddPacket(CaloPacket *calopacket)
0060 {
0061   // need a dynamic cast here to use the default copy ctor for CaloPacketv1
0062   // which copies the std::arrays
0063   CaloPacket *newhit = new ((*CaloPacketsTCArray)[CaloPacketsTCArray->GetLast() + 1]) CaloPacketv1(*(dynamic_cast<CaloPacketv1 *>(calopacket)));
0064   return newhit;
0065 }
0066 
0067 CaloPacket *CaloPacketContainerv1::getPacket(unsigned int index)
0068 {
0069   return (CaloPacket *) CaloPacketsTCArray->At(index);
0070 }
0071 
0072 CaloPacket *CaloPacketContainerv1::getPacketbyId(int id)
0073 {
0074   for (int i = 0; i <= CaloPacketsTCArray->GetLast(); i++)
0075   {
0076     CaloPacket *pkt = (CaloPacket *) CaloPacketsTCArray->At(i);
0077     if (pkt->getIdentifier() == id)
0078     {
0079       return pkt;
0080     }
0081   }
0082   return nullptr;
0083 }
0084 
0085 void CaloPacketContainerv1::deletePacketAt(int index)
0086 {
0087   if (CaloPacketsTCArray->At(index))
0088   {
0089     CaloPacketsTCArray->RemoveAt(index);
0090     CaloPacketsTCArray->Compress();
0091   }
0092 }
0093 
0094 void CaloPacketContainerv1::deletePacket(CaloPacket *packet)
0095 {
0096   if (packet)
0097   {
0098     CaloPacketsTCArray->Remove(packet);
0099     CaloPacketsTCArray->Compress();
0100   }
0101 }