15 std::sort(vSig.begin(), vSig.end());
88 if (
neighbour[id1][i] == id2)
return true;
94 DoT2Pmts(
const std::vector<signals>& vSig, std::vector<triggeredSignals>& vTrig)
98 for (
unsigned int i = 0; i < (vSig.size() - 1); ++i) {
99 const long long int stop1 = vSig[i].GetStop();
100 const long long int start2 = vSig[i + 1].GetStart();
101 if (stop1 > start2) {
105 vTrig.push_back(tSig);
112 DoT2Pmts(
const std::vector<signals>& vSig, std::vector<triggeredSignals>& vTrig,
113 const int coincWindow)
117 for (
unsigned int i = 0; i < (vSig.size() - 2); ++i) {
118 const int dom1 = vSig[i].GetDomId();
119 const int dom2 = vSig[i + 1].GetDomId();
120 const int dom3 = vSig[i + 2].GetDomId();
121 if (dom1 != dom2)
continue;
122 const long long int start1 = vSig[i].GetStart();
123 const long long int start2 = vSig[i + 1].GetStart();
124 const long long int start3 = vSig[i + 2].GetStart();
125 if (start2 > start1 + coincWindow) {
131 vTrig.push_back(tSig1);
132 if (dom1 != dom3)
continue;
133 if (start3 > start1 + coincWindow) {
140 vTrig.push_back(tSig2);
144 vTrig.push_back(tSig3);
154 DoT2Pmts(
const std::vector<signals>& vSig, std::vector<triggeredSignals>& vTrig,
155 const int coincWindow,
const int refId)
159 for (
unsigned int i = 0; i < (vSig.size() - 1); ++i) {
160 const long long int start1 = vSig[i].GetStart();
161 const long long int start2 = vSig[i + 1].GetStart();
162 if (start2 > start1 + coincWindow) {
165 const int id1 = vSig[i].GetPmtId();
166 const int id2 = vSig[i + 1].GetPmtId();
167 if ((id1 == refId) || (id2 == refId)) {
171 vTrig.push_back(tSig);
179 DoSlidingT(
const std::vector<signals>& vSig, std::vector<triggeredSignals>& vTrig)
181 if (vSig.size() < 2) {
184 bool trigger =
false;
186 for (
unsigned int i = 0; i < (vSig.size() - 1); ++i) {
187 const long long int stop1 = vSig[i].GetStop();
188 const long long int start2 = vSig[i + 1].GetStart();
189 if (stop1 > start2) {
190 if (trigger ==
false) {
198 if (trigger ==
true) {
200 vTrig.push_back(tSig);
209 DoTmultiPmts(
const std::vector<signals>& vSig, std::vector<triggeredSignals>& vTrig,
210 const int coincWindow)
216 for (
unsigned int i = 0; i < (vSig.size() - 1); ++i) {
223 long long int start1 = vSig[i].GetStart();
225 int domId1 = vSig[i].GetDomId();
226 int coincCounter = 0;
227 bool hasTrigger =
false;
228 for (
unsigned int j = i + 1; j < vSig.size(); ++j) {
229 const long long int start2 = vSig[j].GetStart();
230 const int domId2 = vSig[j].GetDomId();
231 if (domId2 != domId1)
continue;
232 if (start2 > start1 + coincWindow) {
233 if (hasTrigger ==
true) vTrig.push_back(tSig);
237 }
else if (start2 < start1) {
246 if (hasTrigger ==
true) vTrig.push_back(tSig);
254 std::vector<triggeredSignals>& vTrigFinal,
const int multiplicity)
256 for (
unsigned int ev = 0; ev < vTrigInit.size(); ++ev) {
257 const std::vector<signals> vSig = vTrigInit[ev].GetSignals();
258 if (vSig.size() >= unsigned(multiplicity)) vTrigFinal.push_back(vTrigInit[ev]);
bool AreNeighbours(const int id1, const int id2)
Check if 2 pmts are close enough (neighbours)
void SortSignals(std::vector< signals > &vSig)
bool DoT2Pmts(const std::vector< signals > &vSig, std::vector< triggeredSignals > &vTrig)
define the 31 pmt signals of an dom for an event
bool SelectingMultiplicity(std::vector< triggeredSignals > &vTrigInit, std::vector< triggeredSignals > &vTrigFinal, const int multiplicity)
remove all dom events with a multiplicity lower than the chosen one
const int neighbour[pmtNb][neighbourNb]
void FillSignals(const signals sig, std::vector< signals > &vSig)
Merging of the signals of all the pmts of the dom.
bool DoSlidingT(const std::vector< signals > &vSig, std::vector< triggeredSignals > &vTrig)
bool DoTmultiPmts(const std::vector< signals > &vSig, std::vector< triggeredSignals > &vTrig, const int coincWindow)
make the DOM trigger (coincidence between pmts)
void AddSignal(const signals sig)