Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:16:09

0001 #include "TpcDiodeContainerv1.h"
0002 #include "TpcDiodev1.h"
0003 
0004 #include <TClonesArray.h>
0005 
0006 static const int NTPCDIODES = 10000;
0007 
0008 TpcDiodeContainerv1::TpcDiodeContainerv1()
0009   : TpcDiodesTCArray(new TClonesArray("TpcDiodev1", NTPCDIODES))
0010 {
0011 }
0012 
0013 TpcDiodeContainerv1::~TpcDiodeContainerv1()
0014 {
0015   TpcDiodesTCArray->Clear("C");
0016   delete TpcDiodesTCArray;
0017 }
0018 
0019 void TpcDiodeContainerv1::Reset()
0020 {
0021   TpcDiodesTCArray->Clear("C");
0022   TpcDiodesTCArray->Expand(NTPCDIODES);
0023 }
0024 
0025 void TpcDiodeContainerv1::identify(std::ostream &os) const
0026 {
0027   os << "TpcDiodeContainerv1" << std::endl;
0028   os << "containing " << TpcDiodesTCArray->GetEntriesFast() << " Tpc diodes" << std::endl;
0029   // TpcDiode *tpcdiode = static_cast<TpcDiode *>(TpcDiodesTCArray->At(0));
0030   //  if (tpcdiode)
0031   //  {
0032   //    os << "for beam clock: " << std::hex << tpcdiode->get_bco() << std::dec << std::endl;
0033   //  }
0034 }
0035 
0036 int TpcDiodeContainerv1::isValid() const
0037 {
0038   return TpcDiodesTCArray->GetSize();
0039 }
0040 
0041 unsigned int TpcDiodeContainerv1::get_ndiodes()
0042 {
0043   return TpcDiodesTCArray->GetEntriesFast();
0044 }
0045 
0046 TpcDiode *TpcDiodeContainerv1::AddDiode()
0047 {
0048   TpcDiode *newdiode = new ((*TpcDiodesTCArray)[TpcDiodesTCArray->GetLast() + 1]) TpcDiodev1();
0049   return newdiode;
0050 }
0051 
0052 TpcDiode *TpcDiodeContainerv1::AddDiode(TpcDiode *tpcdiode)
0053 {
0054   TpcDiode *newdiode = new ((*TpcDiodesTCArray)[TpcDiodesTCArray->GetLast() + 1]) TpcDiodev1(tpcdiode);
0055   return newdiode;
0056 }
0057 
0058 TpcDiode *TpcDiodeContainerv1::get_diode(unsigned int index)
0059 {
0060   return (TpcDiode *) TpcDiodesTCArray->At(index);
0061 }
0062 
0063 unsigned int TpcDiodeContainerv1::get_Laser()
0064 {
0065   int laser = -1;
0066   std::vector<int> nlasers;
0067   int threshold = 200;
0068   for (int c = 0; c < 32; c++)
0069   {
0070     if ((c > 3 && c < 16) || c > 19)
0071     {
0072       continue;
0073     }
0074     TpcDiode *EMon = get_diode(c);
0075     int maxadc = EMon->get_maxadc();
0076     if (maxadc > threshold)
0077     {
0078       laser = c;
0079       nlasers.push_back(c);
0080     }
0081   }
0082   if (nlasers.size() > 1)
0083   {
0084     std::cout << "More than one laser fired!" << std::endl;
0085     for (int nlaser : nlasers)
0086     {
0087       std::cout << "Laser " << nlaser << " fired" << std::endl;
0088     }
0089     return -1;
0090   }
0091   if (laser < 0)
0092   {
0093     std::cout << "No laser fired!" << std::endl;
0094     return laser;
0095   }
0096   return laser;
0097 }
0098 
0099 // code below this point needs to be rewritten!!!
0100 
0101 std::vector<TpcDiode *> TpcDiodeContainerv1::get_PO1()
0102 {
0103   std::vector<TpcDiode *> PO1;
0104 
0105   unsigned int laser = get_Laser();
0106 
0107   if (laser == 0 || laser == 1 || laser == 2 || laser == 3)
0108   {
0109     PO1.push_back(get_diode(4));
0110     PO1.push_back(get_diode(5));
0111     PO1.push_back(get_diode(6));
0112     PO1.push_back(get_diode(7));
0113   }
0114 
0115   else if (laser == 16 || laser == 17 || laser == 18 || laser == 19)
0116   {
0117     PO1.push_back(get_diode(20));
0118     PO1.push_back(get_diode(21));
0119     PO1.push_back(get_diode(22));
0120     PO1.push_back(get_diode(23));
0121   }
0122   else
0123   {
0124     std::cout << "No laser fired in this event!" << std::endl;
0125   }
0126   return PO1;
0127 }
0128 
0129 std::vector<TpcDiode *> TpcDiodeContainerv1::get_PO2()
0130 {
0131   std::vector<TpcDiode *> PO2;
0132 
0133   unsigned int laser = get_Laser();
0134 
0135   if (laser == 0 || laser == 1 || laser == 2 || laser == 3)
0136   {
0137     PO2.push_back(get_diode(8));
0138     PO2.push_back(get_diode(9));
0139     PO2.push_back(get_diode(10));
0140     PO2.push_back(get_diode(11));
0141   }
0142 
0143   else if (laser == 16 || laser == 17 || laser == 18 || laser == 19)
0144   {
0145     PO2.push_back(get_diode(24));
0146     PO2.push_back(get_diode(25));
0147     PO2.push_back(get_diode(26));
0148     PO2.push_back(get_diode(27));
0149   }
0150   else
0151   {
0152     std::cout << "No laser fired in this event!" << std::endl;
0153   }
0154   return PO2;
0155 }
0156 
0157 std::vector<TpcDiode *> TpcDiodeContainerv1::get_EGG()
0158 {
0159   std::vector<TpcDiode *> EGG;
0160 
0161   unsigned int laser = get_Laser();
0162 
0163   if (laser == 0 || laser == 1 || laser == 2 || laser == 3)
0164   {
0165     EGG.push_back(get_diode(12));
0166     EGG.push_back(get_diode(13));
0167     EGG.push_back(get_diode(14));
0168     EGG.push_back(get_diode(15));
0169   }
0170 
0171   else if (laser == 16 || laser == 17 || laser == 18 || laser == 19)
0172   {
0173     EGG.push_back(get_diode(28));
0174     EGG.push_back(get_diode(29));
0175     EGG.push_back(get_diode(30));
0176     EGG.push_back(get_diode(31));
0177   }
0178   else
0179   {
0180     std::cout << "No laser fired in this event!" << std::endl;
0181   }
0182   return EGG;
0183 }