PPM-DU analysis  2.3
conversion and analysis of the PPM-DU data
 All Classes Files Functions Variables Pages
/home/alex/Work/Research/Km3NeT/PPM-DU/ppm-du-v2.3/triggeringDOM.cc
Go to the documentation of this file.
1 #include "triggeringDOM.h"
2 
3 #include <algorithm>
4 #include <iostream>
5 
6 void
7 FillSignals(const signals sig, std::vector<signals>& vSig)
8 {
9  vSig.push_back(sig);
10 }
11 
12 void
13 SortSignals(std::vector<signals>& vSig)
14 {
15  std::sort(vSig.begin(), vSig.end());
16 }
17 /*
18 bool
19 FindNeighbours(const int id1, std::vector<int>& id2) {
20  int ring = 0;
21  int position = 0;
22  int offset = 1;
23  id2.resize(neighbourNb);
24  if (id1 > 0) {
25  ring = int((id1 - 1)/6) + 1;
26  position = id1 - (ring - 1)*6 - 1;
27  }
28  if (ring%2) offset = 0;
29 
30  int nextPosition = position;
31  if (ring == 0) {
32  id2[0] = -1;
33  id2[1] = -1;
34  } else {
35  nextPosition = position - 1 + offset;
36  if (nextPosition < 0) nextPosition = 5;
37  id2[0] = pmtMap[ring - 1][nextPosition];
38  nextPosition = position + offset;
39  if (nextPosition > 5) nextPosition = 0;
40  id2[1] = pmtMap[ring - 1][nextPosition];
41  }
42  nextPosition = position - 1;
43  if (nextPosition < 0) nextPosition = 5;
44  id2[2] = pmtMap[ring][nextPosition];
45  nextPosition = position + 1;
46  if (nextPosition > 5) nextPosition = 0;
47  id2[3] = pmtMap[ring][nextPosition];
48  if (ring == 5) {
49  id2[4] = -1;
50  id2[5] = -1;
51  } else {
52  nextPosition = position - 1 + offset;
53  if (nextPosition < 0) nextPosition = 5;
54  id2[4] = pmtMap[ring + 1][nextPosition];
55  nextPosition = position + offset;
56  if (nextPosition > 5) nextPosition = 0;
57  id2[5] = pmtMap[ring + 1][nextPosition];
58  }
59  return true;
60 }
61 
62 bool
63 AreNeighbours(const int id1, const int id2)
64 {
65  std::vector<int> neighbourList1;
66  std::vector<int> neighbourList2;
67  neighbourList1.resize(neighbourNb);
68  neighbourList2.resize(neighbourNb);
69  for (int i = 0; i < neighbourNb; ++i) {
70  neighbourList1[i] = 0;
71  neighbourList2[i] = 0;
72  }
73  FindNeighbours(id1, neighbourList1);
74  FindNeighbours(id2, neighbourList2);
75  for (int i = 0; i < neighbourNb; ++i) {
76  if ((neighbourList1[i] == id2) || (neighbourList2[i] == id1)) {
77  return true;
78  }
79  }
80  return false;
81 }
82 */
83 
84 bool
85 AreNeighbours(const int id1, const int id2)
86 {
87  for (int i = 0; i < neighbourNb; ++i) {
88  if (neighbour[id1][i] == id2) return true;
89  }
90  return false;
91 }
92 
93 bool
94 DoT2Pmts(const std::vector<signals>& vSig, std::vector<triggeredSignals>& vTrig)
95 {
96  if (vSig.size() < 2)
97  return false;
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) {
102  triggeredSignals tSig("T2Pmts");
103  tSig.AddSignal(vSig[i]);
104  tSig.AddSignal(vSig[i + 1]);
105  vTrig.push_back(tSig);
106  }
107  }
108  return true;
109 }
110 
111 bool
112 DoT2Pmts(const std::vector<signals>& vSig, std::vector<triggeredSignals>& vTrig,
113  const int coincWindow)
114 {
115  if (vSig.size() < 2)
116  return false;
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) {
126  continue;
127  } else {
128  triggeredSignals tSig1("T2Pmts");
129  tSig1.AddSignal(vSig[i]);
130  tSig1.AddSignal(vSig[i + 1]);
131  vTrig.push_back(tSig1);
132  if (dom1 != dom3) continue;
133  if (start3 > start1 + coincWindow) {
134  ++i;
135  continue;
136  } else {
137  triggeredSignals tSig2("T2Pmts");
138  tSig2.AddSignal(vSig[i + 1]);
139  tSig2.AddSignal(vSig[i + 2]);
140  vTrig.push_back(tSig2);
141  triggeredSignals tSig3("T2Pmts");
142  tSig3.AddSignal(vSig[i]);
143  tSig3.AddSignal(vSig[i + 2]);
144  vTrig.push_back(tSig3);
145  ++i;
146  ++i;
147  }
148  }
149  }
150  return true;
151 }
152 
153 bool
154 DoT2Pmts(const std::vector<signals>& vSig, std::vector<triggeredSignals>& vTrig,
155  const int coincWindow, const int refId)
156 {
157  if (vSig.size() < 2)
158  return false;
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) {
163  continue;
164  } else {
165  const int id1 = vSig[i].GetPmtId();
166  const int id2 = vSig[i + 1].GetPmtId();
167  if ((id1 == refId) || (id2 == refId)) {
168  triggeredSignals tSig("T2Pmts");
169  tSig.AddSignal(vSig[i]);
170  tSig.AddSignal(vSig[i + 1]);
171  vTrig.push_back(tSig);
172  }
173  }
174  }
175  return true;
176 }
177 
178 bool
179 DoSlidingT(const std::vector<signals>& vSig, std::vector<triggeredSignals>& vTrig)
180 {
181  if (vSig.size() < 2) {
182  return false;
183  }
184  bool trigger = false;
185  triggeredSignals tSig("SlidingT");
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) {
191  trigger = true;
192  tSig.AddSignal(vSig[i]);
193  tSig.AddSignal(vSig[i + 1]);
194  } else {
195  tSig.AddSignal(vSig[i + 1]);
196  }
197  } else {
198  if (trigger == true) {
199  trigger = false;
200  vTrig.push_back(tSig);
201  tSig.Clear();
202  }
203  }
204  }
205  return true;
206 }
207 
208 bool
209 DoTmultiPmts(const std::vector<signals>& vSig, std::vector<triggeredSignals>& vTrig,
210  const int coincWindow)
211 {
212  if (vSig.size() < 2)
213  return false;
214  //bool endTrigger = false;
215  triggeredSignals tSig("TmultiPmts");
216  for (unsigned int i = 0; i < (vSig.size() - 1); ++i) {
217  //if (endTrigger == true) {
218  // if (tSig.GetTriggeredPmt() > 1) {
219  // vTrig.push_back(tSig);
220  // }
221  //}
222  tSig.Clear();
223  long long int start1 = vSig[i].GetStart();
224  tSig.AddSignal(vSig[i]);
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);
234  hasTrigger = false;
235  //endTrigger = true;
236  break;
237  } else if (start2 < start1) {
238  //endTrigger = true;
239  break;
240  } else {
241  hasTrigger = true;
242  ++coincCounter;
243  tSig.AddSignal(vSig[j]);
244  }
245  }
246  if (hasTrigger == true) vTrig.push_back(tSig);
247  i += coincCounter;
248  }
249  return true;
250 }
251 
252 bool
253 SelectingMultiplicity(std::vector<triggeredSignals>& vTrigInit,
254  std::vector<triggeredSignals>& vTrigFinal, const int multiplicity)
255 {
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]);
259  }
260  return true;
261 }
262 
bool AreNeighbours(const int id1, const int id2)
Check if 2 pmts are close enough (neighbours)
const int neighbourNb
Definition: constants.h:7
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
Definition: signals.h:31
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]
Definition: constants.h:14
void FillSignals(const signals sig, std::vector< signals > &vSig)
Merging of the signals of all the pmts of the dom.
Definition: triggeringDOM.cc:7
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)
data of triggered pmt
void AddSignal(const signals sig)