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
0030
0031
0032
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
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 }