18
18
#include "Utils/CppErrorHandler.hh"
19
19
#include "Utils/JsonWrapper.hh"
20
20
#include "Utils/DAQChannelMap.hh"
21
#include "Utils/Exception.hh"
21
22
#include "Interface/dataCards.hh"
22
23
#include "API/PyWrapMapBase.hh"
23
#include "Converter/DataConverters/CppJsonSpillConverter.hh"
24
#include "Converter/DataConverters/JsonCppSpillConverter.hh"
26
25
#include "src/map/MapCppEMRPlaneHits/MapCppEMRPlaneHits.hh"
58
57
_number_of_planes = configJSON["EMRnumberOfPlanes"].asInt();
59
58
_number_of_bars = configJSON["EMRnumberOfBars"].asInt();
61
_tot_noise_low = configJSON["EMRtotNoiseLow"].asInt();
62
_tot_noise_up = configJSON["EMRtotNoiseUp"].asInt();
63
60
_deltat_signal_low = configJSON["EMRdeltatSignalLow"].asInt();
64
61
_deltat_signal_up = configJSON["EMRdeltatSignalUp"].asInt();
65
_deltat_noise_low = configJSON["EMRdeltatNoiseLow"].asInt();
66
_deltat_noise_up = configJSON["EMRdeltatNoiseUp"].asInt();
68
63
// Load EMR channel map
69
64
map_file_name = JsonWrapper::GetProperty(configJSON,
114
109
EMRDaq emr_data = spill->GetDAQData()->GetEMRDaq();
115
110
int nPartEvents = emr_data.GetV1731NumPartEvents();
116
// std::cerr << "nPartEvts: " << nPartEvents << std::endl;
118
// Create DBB and fADC arrays with n+2 events (1 per trigger + noise + decays)
119
EMRDBBEventVector emr_dbb_events_tmp = get_dbb_data_tmp(nPartEvents+2);
120
EMRfADCEventVector emr_fadc_events_tmp = get_fadc_data_tmp(nPartEvents+2);
122
// Fill the fADC and DBB array with DAQ information
112
// Check the Recon event array and EMR Spill Data are initialised, and if not make it so
113
if (!spill->GetReconEvents()) {
114
ReconEventPArray* recEvts = new ReconEventPArray();
115
spill->SetReconEvents(recEvts);
117
if (!spill->GetEMRSpillData()) {
118
EMRSpillData* emrData = new EMRSpillData();
119
spill->SetEMRSpillData(emrData);
122
// Create DBB and fADC arrays with n+1 events (1 per trigger + spill data)
123
EMRDBBEventVector emr_dbb_events_tmp = get_dbb_data_tmp(nPartEvents + 1);
124
EMRfADCEventVector emr_fadc_events_tmp = get_fadc_data_tmp(nPartEvents + 1);
126
// Fill the fADC, DBB and spill array with DAQ information
123
127
processDBB(emr_data, nPartEvents, emr_dbb_events_tmp, emr_fadc_events_tmp);
124
128
processFADC(emr_data, nPartEvents, emr_fadc_events_tmp);
126
// Fill the Recon event array with Spill information (1 per trigger + noise + decays)
127
fill(spill, nPartEvents+2, emr_dbb_events_tmp, emr_fadc_events_tmp);
130
// Fill the Recon event array with Spill information (1 per trigger + decays)
131
fill(spill, nPartEvents, emr_dbb_events_tmp, emr_fadc_events_tmp);
130
134
void MapCppEMRPlaneHits::processDBB(MAUS::EMRDaq EMRdaq,
164
168
int xBar = emr_key->bar();
165
169
// std::cerr << *emr_key << " --> lt: " << lt << " tt: " << tt << endl;
167
// Set the spill number for the noise and decay events
168
if (iHit == 0) { // Set the spill information only when processing the very first hit.
169
emr_fadc_events_tmp[nPartEvents][xPlane]._spill = xSpill;
170
emr_fadc_events_tmp[nPartEvents+1][xPlane]._spill = xSpill;
173
// Loop over the trigger and tries to associate the hit to one of them
171
// Loop over the trigger and try to associate the hit to one of them
174
172
bool matched = false;
175
173
for (int iPe = 0; iPe < nPartEvents; iPe++) {
176
174
DBBHit this_trigger = dbb.GetDBBTriggersArrayElement(iPe);
178
176
// int tr_tt = this_trigger.GetTTime();
179
177
// int xCh = this_trigger.GetChannel();
181
if (iHit == 0) { // Set the plane information only when processing the very first hit.
179
if (iHit == 0) { // Set the spill/trigger only when processing the very first hit
182
180
emr_fadc_events_tmp[iPe][xPlane]._time = tr_lt;
183
181
emr_fadc_events_tmp[iPe][xPlane]._spill = xSpill;
186
int delta_t = lt - tr_lt;
184
int xDeltaT = lt - tr_lt;
193
// Discriminate noise and decays from events signal
194
if (delta_t > _deltat_signal_low && delta_t < _deltat_signal_up) {
195
bHit.SetDeltaT(delta_t - _deltat_signal_low);
192
// Discriminate primary hits (close to the trigger) from the rest
193
if (xDeltaT > _deltat_signal_low && xDeltaT < _deltat_signal_up) {
194
bHit.SetDeltaT(xDeltaT - _deltat_signal_low);
196
195
// std::cerr << "*---> " << *emr_key << " --> trigger_Id: " << iPe
197
196
// << " tot: " << tt-lt
198
197
// << " delta: " << delta_t - _deltat_signal_low
199
198
// << "(" << delta_t << ")" << std::endl;
200
199
emr_dbb_events_tmp[iPe][xPlane][xBar].push_back(bHit);
202
} else if (delta_t > _deltat_noise_low && delta_t < _deltat_noise_up &&
203
tot > _tot_noise_low && tot < _tot_noise_up ) {
204
bHit.SetDeltaT(delta_t - _deltat_signal_low);
201
} else if (iPe == nPartEvents-1 && !matched) {
205
203
emr_dbb_events_tmp[nPartEvents][xPlane][xBar].push_back(bHit);
207
} else if (iPe == nPartEvents-1 && !matched) {
208
bHit.SetDeltaT(0); // tt -lt is irrelevant for decay products
209
emr_dbb_events_tmp[nPartEvents+1][xPlane][xBar].push_back(bHit);
212
}/* else {std::cerr << "WARNING!!! unknow EMR DBB channel " << daq_key << std::endl;}*/
206
} // else {std::cerr << "WARNING!!! unknow EMR DBB channel " << daq_key << std::endl;}
232
226
int xCh = fADChit.GetChannel();
233
227
int xArea = fADChit.GetPulseArea();
234
228
int xPos = fADChit.GetPositionMin();
229
int xEqType = fADChit.GetEquipType();
236
DAQChannelKey daq_key(xLDC, xGeo, xCh, 121, "emr");
231
DAQChannelKey daq_key(xLDC, xGeo, xCh, xEqType, "emr");
237
232
// std::cerr << daq_key << std::endl;
238
233
EMRChannelKey *emr_key = _emrMap.find(&daq_key);
254
249
EMRDBBEventVector emr_dbb_events_tmp,
255
250
EMRfADCEventVector emr_fadc_events_tmp) const {
257
int recPartEvents = spill->GetReconEventSize();
252
// Set the EMR recon events and the spill data
258
253
ReconEventPArray *recEvts = spill->GetReconEvents();
260
// Resize the recon event to harbour all the EMR noise+decays
261
while (recPartEvents < nPartEvents) {
262
recEvts->push_back(new ReconEvent);
266
// std::cerr << spill->GetReconEventSize() << std::endl;
268
for (int iPe = 0; iPe < nPartEvents; iPe++) {
254
EMRSpillData *emrData = spill->GetEMRSpillData();
256
for (int iPe = 0; iPe < nPartEvents + 1; iPe++) {
269
257
EMREvent *evt = new EMREvent;
270
258
EMRPlaneHitArray plArray;
273
261
EMRPlaneHit *plHit = new EMRPlaneHit;
274
262
plHit->SetPlane(iPlane);
275
263
plHit->SetTrigger(iPe);
277
264
fADCdata xPlData = emr_fadc_events_tmp[iPe][iPlane];
278
265
int xOri = xPlData._orientation;
279
266
int xCharge = xPlData._charge;
280
267
int xTime = xPlData._time;
281
268
int xSpill = xPlData._spill;
282
269
int xDeltaT = xPlData._deltat;
284
270
plHit->SetOrientation(xOri);
285
271
plHit->SetCharge(xCharge);
286
272
plHit->SetTime(xTime);
287
273
plHit->SetSpill(xSpill);
288
274
plHit->SetDeltaT(xDeltaT);
290
275
EMRBarArray barArray;
292
277
for (int iBar = 0; iBar < _number_of_bars; iBar++) {
304
289
plHit->SetEMRBarArray(barArray);
305
290
if ( barArray.size() || xCharge ) {
306
291
plArray.push_back(plHit);
307
// std::cerr << "Ev: " << iPe << --> pos: " << xTime << " area: " << xCharge
308
// << " nBarHits: " << barArray.size() << std::endl;
314
evt->SetEMRPlaneHitArray(plArray);
315
recEvts->at(iPe)->SetEMREvent(evt);
316
recEvts->at(iPe)->SetPartEventNumber(iPe);
297
if (iPe < nPartEvents) {
298
evt->SetEMRPlaneHitArray(plArray);
300
int nRecEvents = spill->GetReconEventSize();
301
if (nRecEvents > iPe) {
302
recEvts->at(iPe)->SetEMREvent(evt);
304
ReconEvent *recEvt = new ReconEvent;
305
recEvt->SetPartEventNumber(iPe);
306
recEvt->SetEMREvent(evt);
307
recEvts->push_back(recEvt);
310
emrData->SetEMRPlaneHitArray(plArray);
318
314
spill->SetReconEvents(recEvts);
315
spill->SetEMRSpillData(emrData);
321
318
EMRDBBEventVector MapCppEMRPlaneHits::get_dbb_data_tmp(int nPartEvts) const {