R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BNeulandOnlineSpectra.cxx
Go to the documentation of this file.
1/******************************************************************************
2 * Copyright (C) 2019 GSI Helmholtzzentrum für Schwerionenforschung GmbH *
3 * Copyright (C) 2019-2025 Members of R3B Collaboration *
4 * *
5 * This software is distributed under the terms of the *
6 * GNU General Public Licence (GPL) version 3, *
7 * copied verbatim in the file "LICENSE". *
8 * *
9 * In applying this license GSI does not waive the privileges and immunities *
10 * granted to it by virtue of its status as an Intergovernmental Organization *
11 * or submit itself to any jurisdiction. *
12 ******************************************************************************/
13
15#include "R3BEventHeader.h"
16#include "R3BShared.h"
17
18#include <FairRunOnline.h>
19
20#include <FairRootManager.h>
21#include <TCanvas.h>
22#include <TFile.h>
23#include <TH1D.h>
24#include <TH2D.h>
25#include <THttpServer.h>
26#include <iostream>
27#include <limits>
28
30 : FairTask("R3BNeulandOnlineSpectra", 0)
31 , fNeulandMappedData("NeulandMappedData")
32 , fNeulandCalData("NeulandCalData")
33 , fNeulandHits("NeulandHits")
34{
35}
36
38{
39 // Initialize random number:
40 std::srand(std::time(0)); // use current time as seed for random generator
41
42 auto run = FairRunOnline::Instance();
43 if (run != nullptr && run->GetHttpServer() != nullptr)
44 {
45 fIsOnline = true;
46 }
47
48 if (fIsOnline)
49 {
50 run->GetHttpServer()->Register("/Tasks", this);
51 run->GetHttpServer()->RegisterCommand("Reset_Neuland", Form("/Tasks/%s/->ResetHistos()", GetName()));
52 run->GetHttpServer()->RegisterCommand("Reset_Neuland_Mapped",
53 Form("/Tasks/%s/->ResetHistosMapped()", GetName()));
54 }
55
56 auto ioman = FairRootManager::Instance();
57 if (ioman == nullptr)
58 {
59 throw std::runtime_error("R3BNeulandOnlineSpectra: No FairRootManager");
60 }
61
62 fEventHeader = dynamic_cast<R3BEventHeader*>(ioman->GetObject("EventHeader."));
63 if (fEventHeader == nullptr)
64 {
65 throw std::runtime_error("R3BNeulandOnlineSpectra: No R3BEventHeader");
66 }
67
68 fNeulandMappedData.Init();
69 fNeulandCalData.Init();
70 fNeulandHits.Init();
71
72 auto canvasMapped = new TCanvas("NeulandMapped", "NeulandMapped", 10, 10, 850, 850);
73 canvasMapped->Divide(1, 2);
74
75 canvasMapped->cd(1);
76 ahMappedBar1[0] = R3B::root_owned<TH1D>("hMappedBar1fLE", "Mapped: Bars fine 1LE", fNBars, 0.5, fNBars + 0.5);
77 ahMappedBar1[0]->Draw();
78 ahMappedBar1[1] = R3B::root_owned<TH1D>("hMappedBar1fTE", "Mapped: Bars fine 1TE", fNBars, 0.5, fNBars + 0.5);
79 ahMappedBar1[1]->SetLineColor(1);
80 ahMappedBar1[1]->Draw("same");
81 ahMappedBar1[2] = R3B::root_owned<TH1D>("hMappedBar1cLE", "Mapped: Bars coarse 1LE", fNBars, 0.5, fNBars + 0.5);
82 ahMappedBar1[2]->SetLineColor(2);
83 ahMappedBar1[2]->Draw("same");
84 ahMappedBar1[3] = R3B::root_owned<TH1D>("hMappedBar1cTE", "Mapped: Bars coarse 1TE", fNBars, 0.5, fNBars + 0.5);
85 ahMappedBar1[3]->SetLineColor(6);
86 ahMappedBar1[3]->Draw("same");
87
88 canvasMapped->cd(2);
89 ahMappedBar2[0] = R3B::root_owned<TH1D>("hMappedBar2fLE", "Mapped: Bars fine 2LE", fNBars, 0.5, fNBars + 0.5);
90 ahMappedBar2[0]->Draw();
91 ahMappedBar2[1] = R3B::root_owned<TH1D>("hMappedBar2fTE", "Mapped: Bars fine 2TE", fNBars, 0.5, fNBars + 0.5);
92 ahMappedBar2[1]->SetLineColor(1);
93 ahMappedBar2[1]->Draw("same");
94 ahMappedBar2[2] = R3B::root_owned<TH1D>("hMappedBar2cLE", "Mapped: Bars coarse 2LE", fNBars, 0.5, fNBars + 0.5);
95 ahMappedBar2[2]->SetLineColor(2);
96 ahMappedBar2[2]->Draw("same");
97 ahMappedBar2[3] = R3B::root_owned<TH1D>("hMappedBar2cTE", "Mapped: Bars coarse 2TE", fNBars, 0.5, fNBars + 0.5);
98 ahMappedBar2[3]->SetLineColor(6);
99 ahMappedBar2[3]->Draw("same");
100
101 canvasMapped->cd(0);
102 if (fIsOnline)
103 {
104 run->AddObject(canvasMapped);
105 }
106
107 hJumpsvsEvnt = R3B::root_owned<TH2D>("hJumpsvsEvnt", "Jumps vs Evnt", 1000, 0, 10000000, 1000, -11000, 11000);
109 R3B::root_owned<TH2D>("hJumpsvsEvntzoom", "Jumps vs Evnt zoomed", 1000, 0, 10000000, 1000, -200, 200);
110
111 auto canvasCal = new TCanvas("NeulandCal", "NeulandCal", 10, 10, 850, 850);
112 canvasCal->Divide(2, 2);
113
114 hTstart = R3B::root_owned<TH1D>("hTstart", "Tstart", 1000, -10000., 50000.);
115 canvasCal->cd(1);
116 hTstart->Draw();
117
118 hNstart = R3B::root_owned<TH1D>("hNstart", "Nstart", 20, 0.5, 20.5);
119 hTestJump = R3B::root_owned<TH2D>("hTestJump", "Test Jump", fNBars, 0.5, fNBars + 0.5, 1000, -11000., 11000.);
120 canvasCal->cd(2);
121 // hNstart->Draw();
122 gPad->SetLogz();
123 hTestJump->Draw("colz");
124
126 "hCalT1vsBar", "CalLevel: Time1 vs Bars ", fNBars, 0.5, fNBars + 0.5, 2000, -5000, 15000);
128 "hCalT2vsBar", "CalLevel: Time2 vs Bars ", fNBars, 0.5, fNBars + 0.5, 2000, -5000, 15000);
129
130 ahCalEvsBar[0] =
131 R3B::root_owned<TH2D>("hCalE1vsBar", "CalLevel: Energy1 vs Bars", fNBars, 0.5, fNBars + 0.5, 600, 0, 600);
132 canvasCal->cd(3);
133 ahCalEvsBar[0]->Draw("colz");
134
135 ahCalEvsBar[1] =
136 R3B::root_owned<TH2D>("hCalE2vsBar", "CalLevel: Energy2 vs Bars", fNBars, 0.5, fNBars + 0.5, 600, 0, 600);
137 canvasCal->cd(4);
138 ahCalEvsBar[1]->Draw("colz");
139
140 canvasCal->cd(0);
141 if (fIsOnline)
142 {
143 run->AddObject(canvasCal);
144 }
145
146 auto canvasHit = new TCanvas("NeulandHit", "NeulandHit", 10, 10, 850, 850);
147 canvasHit->Divide(2, 2);
148
149 hHitEvsBar =
150 R3B::root_owned<TH2D>("hHitEvsBar", "HitLevel: Energy vs Bars ", fNBars, 0.5, fNBars + 0.5, 1000, 0, 60);
151 canvasHit->cd(1);
152 hHitEvsBar->Draw("colz");
153
154 hTdiffvsBar = R3B::root_owned<TH2D>("hTdiffvsBar", "Tdiff vs Bars", fNBars, 0.5, fNBars + 0.5, 1000, -60, 60);
155 canvasHit->cd(2);
156 hTdiffvsBar->Draw("colz");
157
158 hToFvsBar = R3B::root_owned<TH2D>("hTofvsBar", "Tof vs Bars", fNBars, 0.5, fNBars + 0.5, 6000, -100, 400);
159 hToFcvsBar = R3B::root_owned<TH2D>("hTofcvsBar", "Tofc vs Bars", fNBars, 0.5, fNBars + 0.5, 6000, -100, 400);
160 canvasHit->cd(3);
161 // hToFcvsBar->Draw("colz");
162 hToFvsBar->Draw("colz");
163
164 hTofvsEhit = R3B::root_owned<TH2D>("hTofvsEhit", "Tof vs Ehit", 2000, 0, 120, 6000, -100, 400);
165 hTofcvsEhit = R3B::root_owned<TH2D>("hTofcvsEhit", "Tofc vs Ehit", 2000, 0, 120, 6000, -100, 400);
166 canvasHit->cd(4);
167 // hTofcvsEhit->Draw("colz");
168 hTofvsEhit->Draw("colz");
169
170 canvasHit->cd(0);
171 if (fIsOnline)
172 {
173 run->AddObject(canvasHit);
174 }
175
176 auto canvasHitCosmics = new TCanvas("NeulandHitCosmics", "NeulandHitCosmics", 10, 10, 850, 850);
177 canvasHitCosmics->Divide(2, 2);
178
180 "hHitEvsBarCosmics", "HitLevel: Energy vs Bars cosmics", fNBars, 0.5, fNBars + 0.5, 1000, 0, 60);
181 canvasHitCosmics->cd(1);
182 hHitEvsBarCosmics->Draw("colz");
183
185 R3B::root_owned<TH2D>("hTdiffvsBarCosmics", "Tdiff vs Bars cosmics", fNBars, 0.5, fNBars + 0.5, 1000, -60, 60);
186 canvasHitCosmics->cd(2);
187 hTdiffvsBarCosmics->Draw("colz");
188
189 hDT675 =
190 R3B::root_owned<TH2D>("hDT675", "Thit - Thit675 vs Bars cosmics", fNBars, 0.5, fNBars + 0.5, 1000, -20, 20);
191 canvasHitCosmics->cd(3);
192 hDT675->Draw("colz");
193
195 "hDT675c", "Thit - Thit675 vs Bars cosmics corrected", fNBars, 0.5, fNBars + 0.5, 1000, -20, 20);
196
197 hDT625 =
198 R3B::root_owned<TH2D>("hDT625", "Thit - Thit625 vs Bars cosmics", fNBars, 0.5, fNBars + 0.5, 1000, -20, 20);
199 canvasHitCosmics->cd(4);
200 hDT625->Draw("colz");
201
203 "hDT625c", "Thit - Thit625 vs Bars cosmics corrected", fNBars, 0.5, fNBars + 0.5, 1000, -20, 20);
204
205 canvasHitCosmics->cd(0);
206 if (fIsOnline)
207 {
208 run->AddObject(canvasHitCosmics);
209 }
210
211 for (unsigned int i = 0; i < fNPlanes; i++)
212 {
213 ahXYperPlane[i] = R3B::root_owned<TH2D>("hHitXYPlane" + TString::Itoa(i, 10),
214 "Hit XY Plane" + TString::Itoa(i, 10),
215 300,
216 -150,
217 150,
218 300,
219 -150,
220 150);
221 }
222
223 auto canvasPlaneSofia = new TCanvas("Timing", "Timing", 10, 10, 850, 850);
224 canvasPlaneSofia->Divide(2, 2);
225 hTofvsX = R3B::root_owned<TH2D>("hTofvsX", "Tof vs X", 3000, -200., 200., 6000, 0, 300);
226 hTofcvsX = R3B::root_owned<TH2D>("hTofcvsX", "Tofc vs X", 1000, -200., 200., 3000, 0, 300);
227 hTofvsY = R3B::root_owned<TH2D>("hTofvsY", "Tof vs Y", 3000, -200., 200., 6000, 0, 300);
228 hTofcvsY = R3B::root_owned<TH2D>("hTofcvsY", "Tofc vs Y", 3000, -200., 200., 6000, 0, 300);
229 hTofvsZ = R3B::root_owned<TH2D>("hTofvsZ", "Tof vs Z", 26, 0, 26, 3000, 0, 300);
230 hTofcvsZ = R3B::root_owned<TH2D>("hTofcvsZ", "Tofc vs Z", 26, 0, 26, 3000, 0, 300);
231
232 hSofiaTime = R3B::root_owned<TH1D>("hSofiaTime", "hSofiaTime", 50000, 0, 50000);
233 // canvasPlaneSofia->cd(1);
234 // hSofiaTime->Draw();
235
237 R3B::root_owned<TH2D>("hNeuLANDvsStart", "hNeuLANDvsStart", 3000, -10000, 40000, 1000, -10000, 10000);
238 canvasPlaneSofia->cd(1);
239 hNeuLANDvsStart->Draw("colz");
240
241 hTOF = R3B::root_owned<TH1D>("hTOF", "hTOF", 6000, -11000, 11000);
242 hTOFc = R3B::root_owned<TH1D>("hTOFc", "hTOFc", 6000, -100, 500);
243 canvasPlaneSofia->cd(2);
244 gPad->SetLogy();
245 // hTOF->Draw();
246 // hTOFc->SetLineColor(2);
247 hTOFc->Draw("");
248
249 canvasPlaneSofia->cd(3);
250 gPad->SetLogz();
251 hTofcvsX->Draw("colz");
252 // hTofvsX->Draw("colz");
253
254 canvasPlaneSofia->cd(4);
255 gPad->SetLogz();
256 // hTofcvsZ->Draw("colz");
257 hTofvsZ->Draw("colz");
258
259 canvasPlaneSofia->cd(0);
260 if (fIsOnline)
261 {
262 run->AddObject(canvasPlaneSofia);
263 }
264
265 return kSUCCESS;
266}
267
269{
270 const double clight = 29.9792458;
271
272 const double start = fEventHeader->GetTStart();
273
274 /*
275 if (((UInt_t)fEventHeader->GetEventno() % 10000000) < 10000)
276 {
277 hJumpsvsEvnt->Reset();
278 hJumpsvsEvntzoom->Reset();
279 }
280 */
281
282 const auto mappedData = fNeulandMappedData.Retrieve();
283 const auto calData = fNeulandCalData.Retrieve();
284 const auto hits = fNeulandHits.Retrieve();
285
286 for (const auto& mapped : mappedData)
287 {
288 const auto plane = mapped->GetPlaneId();
289 const auto barp = mapped->GetBarId();
290 const auto bar = (plane - 1) * 50 + barp;
291
292 if (mapped->GetFineTime1LE() > 0)
293 ahMappedBar1[0]->Fill(bar);
294 if (mapped->GetFineTime1TE() > 0)
295 ahMappedBar1[1]->Fill(bar);
296 if (mapped->GetCoarseTime1LE() > 0)
297 ahMappedBar1[2]->Fill(bar);
298 if (mapped->GetCoarseTime1TE() > 0)
299 ahMappedBar1[3]->Fill(bar);
300 if (mapped->GetFineTime2LE() > 0)
301 ahMappedBar2[0]->Fill(bar);
302 if (mapped->GetFineTime2TE() > 0)
303 ahMappedBar2[1]->Fill(bar);
304 if (mapped->GetCoarseTime2LE() > 0)
305 ahMappedBar2[2]->Fill(bar);
306 if (mapped->GetCoarseTime2TE() > 0)
307 ahMappedBar2[3]->Fill(bar);
308 }
309
310 for (const auto& data : calData)
311 {
312 const auto side = data->GetSide() - 1; // [1,2] -> [0,1]
313 const auto bar = data->GetBarId();
314 ahCalTvsBar[side]->Fill(bar, data->GetTime());
315 ahCalEvsBar[side]->Fill(bar, data->GetQdc());
316 if (std::isnan(data->GetTriggerTime()))
317 {
318 hNeuLANDvsStart->Fill(start, data->GetTime());
319 }
320 else
321 {
322 hNeuLANDvsStart->Fill(start, data->GetTime() - data->GetTriggerTime());
323 }
324
325 for (const auto& datax : calData)
326 {
327 const auto sidex = datax->GetSide() - 1; // [1,2] -> [0,1]
328 const auto barx = datax->GetBarId();
329
330 if (barx != bar)
331 {
332 hTestJump->Fill(barx, data->GetTime() - datax->GetTime());
333 // hJumpsvsEvnt->Fill((UInt_t)fEventHeader->GetEventno() % 10000000, data->GetTime() -
334 // datax->GetTime()); hJumpsvsEvntzoom->Fill((UInt_t)fEventHeader->GetEventno() % 10000000,
335 // data->GetTime() - datax->GetTime());
336 }
337 }
338 }
339
340 Double_t randx;
341
342 for (const auto& hit : hits)
343 {
344 const auto bar = hit->GetPaddle();
345
346 if (IsBeam())
347 {
348 hTstart->Fill(start);
349 if (std::isnan(hit->GetT()))
350 continue;
351 hHitEvsBar->Fill(bar, hit->GetE());
352 hTdiffvsBar->Fill(bar, hit->GetTdcL() - hit->GetTdcR());
353
354 const Double_t tcorr = hit->GetT() - ((hit->GetPosition().r() - fDistanceToTarget) / clight);
355 const Double_t tadj = hit->GetT();
356
357 if (hit->GetE() > 0.)
358 { // 7.
359 hToFvsBar->Fill(bar, tadj);
360 hToFcvsBar->Fill(bar, tcorr);
361 hTOFc->Fill(tcorr);
362 hTOF->Fill(tadj);
363 }
364
365 hTofvsEhit->Fill(hit->GetE(), tadj);
366 hTofcvsEhit->Fill(hit->GetE(), tcorr);
367
368 randx = (std::rand() / (float)RAND_MAX);
369 const int plane = static_cast<const int>(std::floor((hit->GetPaddle() - 1) / 50)); // ig -1
370 ahXYperPlane[plane]->Fill(hit->GetPosition().X() + (plane % 2) * 5. * (randx - 0.5),
371 hit->GetPosition().Y() + ((plane + 1) % 2) * 5. * (randx - 0.5));
372
373 hTofvsX->Fill(hit->GetPosition().X() + (plane % 2) * 5. * (randx - 0.5), tadj);
374 hTofcvsX->Fill(hit->GetPosition().X() + (plane % 2) * 5. * (randx - 0.5), tcorr);
375 hTofvsY->Fill(hit->GetPosition().Y() + ((plane + 1) % 2) * 5. * (randx - 0.5), tadj);
376 hTofcvsY->Fill(hit->GetPosition().Y() + ((plane + 1) % 2) * 5. * (randx - 0.5), tcorr);
377 hTofvsZ->Fill(plane, tadj);
378 hTofcvsZ->Fill(plane, tcorr);
379 }
380 else
381 {
382 if ((fEventHeader->GetTpat() & fCosmicTpat) == fCosmicTpat)
383 { // 0x2000 before, 0x100 fission 2021
384 hHitEvsBarCosmics->Fill(bar, hit->GetE());
385 hTdiffvsBarCosmics->Fill(bar, hit->GetTdcL() - hit->GetTdcR());
386
387 for (const auto& hitref : hits)
388 {
389 if ((hitref->GetPaddle() == 675) && (bar != 675))
390 {
391 hDT675->Fill(
392 bar, (hit->GetTdcL() + hit->GetTdcR()) / 2. - (hitref->GetTdcL() + hitref->GetTdcR()) / 2.);
393 hDT675c->Fill(bar,
394 (hit->GetTdcL() + hit->GetTdcR()) / 2. -
395 (hitref->GetTdcL() + hitref->GetTdcR()) / 2. +
396 copysign(1., (hit->GetPosition() - hitref->GetPosition()).Y()) *
397 (hit->GetPosition() - hitref->GetPosition()).r() / clight);
398 }
399 if ((hitref->GetPaddle() == 625) && (bar != 625))
400 {
401 hDT625->Fill(
402 bar, (hit->GetTdcL() + hit->GetTdcR()) / 2. - (hitref->GetTdcL() + hitref->GetTdcR()) / 2.);
403 hDT625c->Fill(bar,
404 (hit->GetTdcL() + hit->GetTdcR()) / 2. -
405 (hitref->GetTdcL() + hitref->GetTdcR()) / 2. +
406 copysign(1., (hit->GetPosition() - hitref->GetPosition()).Y()) *
407 (hit->GetPosition() - hitref->GetPosition()).r() / clight);
408 }
409 }
410 }
411 }
412 }
413}
414
416{
417 TDirectory* tmp = gDirectory;
418 FairRootManager::Instance()->GetOutFile()->cd();
419
420 gDirectory->mkdir("R3BNeulandOnlineSpectra");
421 gDirectory->cd("R3BNeulandOnlineSpectra");
422
423 ahMappedBar1[0]->Write();
424 ahMappedBar1[1]->Write();
425 ahMappedBar1[2]->Write();
426 ahMappedBar1[3]->Write();
427 ahMappedBar2[0]->Write();
428 ahMappedBar2[1]->Write();
429 ahMappedBar2[2]->Write();
430 ahMappedBar2[3]->Write();
431
432 hTstart->Write();
433 hNstart->Write();
434
435 hTestJump->Write();
436 // hJumpsvsEvnt->Write();
437 // hJumpsvsEvntzoom->Write();
438
439 ahCalTvsBar[0]->Write();
440 ahCalTvsBar[1]->Write();
441 ahCalEvsBar[0]->Write();
442 ahCalEvsBar[1]->Write();
443
444 hHitEvsBar->Write();
445
446 hHitEvsBarCosmics->Write();
447
448 hTdiffvsBar->Write();
449 hToFvsBar->Write();
450 hTofvsEhit->Write();
451 hToFcvsBar->Write();
452 hTofcvsEhit->Write();
453
454 hTofvsX->Write();
455 hTofcvsX->Write();
456 hTofvsY->Write();
457 hTofcvsY->Write();
458 hTofvsZ->Write();
459 hTofcvsZ->Write();
460
461 hTdiffvsBarCosmics->Write();
462
463 hDT675->Write();
464 hDT625->Write();
465
466 hDT675c->Write();
467 hDT625c->Write();
468
469 for (unsigned int i = 0; i < fNPlanes; i++)
470 {
471 ahXYperPlane[i]->Write();
472 }
473
474 hSofiaTime->Write();
475 hNeuLANDvsStart->Write();
476 hTOF->Write();
477 hTOFc->Write();
478
479 gDirectory = tmp;
480}
481
483{
484 ahMappedBar1[0]->Reset();
485 ahMappedBar1[1]->Reset();
486 ahMappedBar1[2]->Reset();
487 ahMappedBar1[3]->Reset();
488 ahMappedBar2[0]->Reset();
489 ahMappedBar2[1]->Reset();
490 ahMappedBar2[2]->Reset();
491 ahMappedBar2[3]->Reset();
492
493 hTstart->Reset();
494 hNstart->Reset();
495
496 hTestJump->Reset();
497 // hJumpsvsEvnt->Reset();
498 // hJumpsvsEvntzoom->Reset();
499
500 ahCalTvsBar[0]->Reset();
501 ahCalTvsBar[1]->Reset();
502 ahCalEvsBar[0]->Reset();
503 ahCalEvsBar[1]->Reset();
504
505 hHitEvsBar->Reset();
506
507 hHitEvsBarCosmics->Reset();
508
509 hTdiffvsBar->Reset();
510 hToFvsBar->Reset();
511 hTofvsEhit->Reset();
512 hToFcvsBar->Reset();
513 hTofcvsEhit->Reset();
514
515 hTofvsX->Reset();
516 hTofcvsX->Reset();
517 hTofvsY->Reset();
518 hTofcvsY->Reset();
519 hTofvsZ->Reset();
520 hTofcvsZ->Reset();
521
522 hTdiffvsBarCosmics->Reset();
523
524 hDT675->Reset();
525 hDT625->Reset();
526
527 for (unsigned int i = 0; i < fNPlanes; i++)
528 {
529 ahXYperPlane[i]->Reset();
530 }
531
532 hSofiaTime->Reset();
533 hNeuLANDvsStart->Reset();
534 hTOF->Reset();
535 hTOFc->Reset();
536}
537
539{
540 ahMappedBar1[0]->Reset();
541 ahMappedBar1[1]->Reset();
542 ahMappedBar1[2]->Reset();
543 ahMappedBar1[3]->Reset();
544 ahMappedBar2[0]->Reset();
545 ahMappedBar2[1]->Reset();
546 ahMappedBar2[2]->Reset();
547 ahMappedBar2[3]->Reset();
548}
549
550bool R3BNeulandOnlineSpectra::IsBeam() const { return !std::isnan(fEventHeader->GetTStart()); }
551
ClassImp(R3B::Neuland::Cal2HitPar)
TCAInputConnector< R3BPaddleTamexMappedData > fNeulandMappedData
static const unsigned int fNPlanes
static const unsigned int fNBars
std::array< TH2D *, 2 > ahCalTvsBar
TCAInputConnector< R3BNeulandHit > fNeulandHits
std::array< TH1D *, 4 > ahMappedBar1
std::array< TH1D *, 4 > ahMappedBar2
void Exec(Option_t *) override
TCAInputConnector< R3BNeulandCalData > fNeulandCalData
std::array< TH2D *, 2 > ahCalEvsBar
std::array< TH2D *, fNPlanes > ahXYperPlane
auto root_owned(Args &&... args)
Definition R3BShared.h:59