8 #include <framework/dataobjects/EventMetaData.h>
10 #include "TDirectory.h"
11 #include <tracking/dataobjects/RecoTrack.h>
12 #include <trg/cdc/modules/dqmneuro/CDCTriggerNeuroDQMOnlineModule.h>
28 setDescription(
"CDC Trigger DQM Online module for HLT/Expressreco");
31 "The name of the StoreArray of the unpacked 2D finder tracks",
32 std::string(
"CDCTrigger2DFinderTracks"));
34 "The name of the StoreArray of the Neurotrigger tracks from HWSIM",
35 std::string(
"TSimNeuroTracks"));
37 "The name of the StoreArray of the unpacked neurotrigger tracks",
38 std::string(
"CDCTriggerNeuroTracks"));
40 "The name of the StoreArray of the neurotrigger input 2d tracks",
41 std::string(
"CDCTriggerNNInput2DFinderTracks"));
43 "The name of the StoreArray of the neurotrigger input segment hits",
44 std::string(
"CDCTriggerNNInputSegmentHits"));
46 "The name of the StoreArray of all segmenthits arriving at the NN boards",
47 std::string(
"CDCTriggerNNInputAllStereoSegmentHits"));
49 "Name of the directory where histograms will be placed",
50 std::string(
"TRGCDCTNN2"));
52 "Name of the RecoTrack StoreArray. Leave empty for skipping them.",
53 std::string(
"RecoTracks"));
55 "switch on to use simulated tracks for plots, error logs and in debug output"
56 "Useful for debugging SW/HW Errors:",
59 "switch on to use recotracks",
76 TDirectory* oldDir = gDirectory;
87 m_neuroHWOutdzall =
new TH1F(
"NeuroHWOutZ-RecoZ",
88 "z Resolution of unpacked and valid neuro tracks; delta z [cm]",
90 m_neuroHWOutdz0 =
new TH1F(
"Q0NeuroHWOutZ-RecoZ",
91 "Quadrant0 z Resolution of unpacked and valid neuro tracks; delta z [cm]",
93 m_neuroHWOutdz1 =
new TH1F(
"Q1NeuroHWOutZ-RecoZ",
94 "Quadrant1 z Resolution of unpacked and valid neuro tracks; delta z [cm]",
96 m_neuroHWOutdz2 =
new TH1F(
"Q2NeuroHWOutZ-RecoZ",
97 "Quadrant2 z Resolution of unpacked and valid neuro tracks; delta z [cm]",
99 m_neuroHWOutdz3 =
new TH1F(
"Q3NeuroHWOutZ-RecoZ",
100 "Quadrant3 z Resolution of unpacked and valid neuro tracks; delta z [cm]",
102 m_neuroHWSimRecodZ =
new TH1F(
"NeuroHWSimZ-RecoZ",
103 "z Resolution of Simulated HW Tracks; delta z [cm]",
108 m_neuroHWOutZ =
new TH1F(
"NeuroHWOutZ",
109 "z distribution of unpacked and valid neuro tracks; z [cm]",
111 m_recoZ =
new TH1F(
"RecoTrackZ",
112 "z distribution of all RecoTracks; z [cm]",
114 m_recoZ_related =
new TH1F(
"RecoTrackZ_related",
115 "z distribution of all related Recotracks; z [cm]",
117 m_neuroHWOutSTTZ =
new TH1F(
"NeuroHWOutSTTZ",
118 "z distribution of unpacked and valid first not updated per event Neurotracks and p<0.7GeV; z [cm]",
120 m_neuroHWOutCosTheta =
new TH1F(
"NeuroHWOutCosTheta",
121 "cos theta distribution of unpacked and valid neuro tracks; cos(#theta) ",
123 m_neuroHWOutPhi0 =
new TH1F(
"NeuroHWOutPhi0",
124 "phi distribution of unpacked and valid neuro tracks; #phi [#circ]",
126 m_neuroHWOutP =
new TH1F(
"NeuroHWOutP",
127 "P distribution of unpacked neuro tracks; p_{T} [GeV]",
129 m_neuroHWOutPt =
new TH1F(
"NeuroHWOutPt",
130 "Pt distribution of unpacked neuro tracks; p_{T} [GeV]",
132 m_neuroHWOutm_time =
new TH1F(
"NeuroHWOutM_time",
"m_time distribution of unpacked neuro tracks; clock cycle",
134 m_neuroHWValTracksNumber =
new TH1F(
"NeuroHWValTracksNumber",
"number of valid neurotracks per event; track count",
136 m_neuroHWSector =
new TH1F(
"NeuroHWExpert",
137 "Expert of unpacked neuro tracks; Expert",
139 m_neuroHWInTSID =
new TH1F(
"NeuroHWInTSID",
"ID of incoming track segments",
141 m_neuroHWInTSIDSel =
new TH1F(
"NeuroHWInSelTSID",
"ID of selected NNT track segments",
143 m_neuroHWInCDCFE =
new TH1F(
"NeuroHWInCDCFE",
"Number of incoming CDCFE board",
145 m_neuroHWInm_time =
new TH1F(
"NeuroHWInM_time",
"m_time distribution from incoming 2dtracks; clock cycle",
147 m_neuroHWIn2DTracksNumber =
new TH1F(
"NeuroHWIn2DTracksNumber",
"number of incoming 2dtracks per event; track count",
152 m_neuroHWOutHwSimdZ =
new TH1F(
"NeuroHWOutZ-NeuroHWSimZ",
153 "dz Distribution of Valid Neuro Tracks and Simulated HW Tracks; z [cm]",
155 m_neuroHWSimZ =
new TH1F(
"NeuroHWSimZ",
156 "z Distribution of Simulated HW Tracks; z [cm]",
158 m_neuroHWSimCosTheta =
new TH1F(
"NeuroHWSimCosTheta",
159 "cos theta Distribution of Simulated HW Tracks; cos(#theta) ",
161 m_neuroErrors =
new TH1F(
"Neurotrigger-Errors",
"Errors in the Neuro Hardware", m_errcount, 0, m_errcount);
219 m_neuroHWOutdzall->Reset();
220 m_neuroHWOutdz0->Reset();
221 m_neuroHWOutdz1->Reset();
222 m_neuroHWOutdz2->Reset();
223 m_neuroHWOutdz3->Reset();
224 m_neuroHWSimRecodZ->Reset();
228 m_neuroHWOutZ->Reset();
230 m_recoZ_related->Reset();
231 m_neuroHWOutSTTZ->Reset();
232 m_neuroHWOutCosTheta->Reset();
233 m_neuroHWOutPhi0->Reset();
234 m_neuroHWOutPt->Reset();
235 m_neuroHWOutP->Reset();
236 m_neuroHWOutm_time->Reset();
237 m_neuroHWValTracksNumber->Reset();
238 m_neuroHWSector->Reset();
239 m_neuroHWInTSID->Reset();
240 m_neuroHWInTSIDSel->Reset();
241 m_neuroHWInCDCFE->Reset();
242 m_neuroHWInm_time->Reset();
243 m_neuroHWIn2DTracksNumber->Reset();
247 m_neuroHWOutHwSimdZ->Reset();
248 m_neuroHWSimZ->Reset();
249 m_neuroHWSimCosTheta->Reset();
250 m_neuroErrors->Reset();
251 for (
unsigned i = 0; i < m_errcount; ++i) {
252 m_neuroErrors->GetXaxis()->SetBinLabel(i + 1, m_errdict[i].c_str());
259 B2DEBUG(150,
"No unpacked TS found, skipping event.");
276 void CDCTriggerNeuroDQMOnlineModule::fillHWPlots()
279 unsigned valtrackcount = 0;
284 m_neuroHWInTSID->Fill(hit.getSegmentID());
285 m_neuroHWInCDCFE->Fill((
int)(std::roundf(hit.getSegmentID()) * 2 + 8));
286 m_neuroHWInCDCFE->Fill((
int)(std::roundf(hit.getSegmentID()) * 2 + 9));
289 m_neuroHWInTSIDSel->Fill(hit.getSegmentID());
295 bool firsttrack =
true;
297 bool valtrack =
false;
299 valtrack = neuroHWTrack.getValidStereoBit();
301 B2WARNING(
"HWTrack doesn't have 'valid bit', get it from relations now ...");
306 m_neuroHWOutZ->Fill(neuroHWTrack.getZ0());
307 m_neuroHWOutCosTheta->Fill(copysign(1.0,
308 neuroHWTrack.getCotTheta()) /
sqrt(1. / (neuroHWTrack.getCotTheta()*neuroHWTrack.getCotTheta())));
309 double phinorm = neuroHWTrack.getPhi0() * 180. / M_PI;
310 if (phinorm < 0.) {phinorm += 360.;}
311 m_neuroHWOutPhi0->Fill(phinorm);
312 m_neuroHWOutPt->Fill(neuroHWTrack.getPt());
313 float momentum = neuroHWTrack.getPt() / sin(acos(neuroHWTrack.getCotTheta() /
sqrt(1 + neuroHWTrack.getCotTheta() *
314 neuroHWTrack.getCotTheta())));
315 m_neuroHWOutP->Fill(momentum);
316 if (momentum < 0.7 && firsttrack && neuroHWTrack.getFoundOldTrack()[0] ==
false) {
317 m_neuroHWOutSTTZ->Fill(neuroHWTrack.getZ0());
321 m_neuroHWOutm_time->Fill(neuroHWTrack.getTime());
326 m_neuroHWInm_time->Fill(twodHWTrack->
getTime());
332 if (!neuroSimTrack) {
333 B2WARNING(
"No Simtrack related to HWTrack! This should not happen!");
335 std::vector<float> unpackedInput =
337 std::vector<float> simInput =
339 bool sameInputId =
true;
340 bool sameInputAlpha =
true;
341 bool scaleErr =
false;
342 bool missingTS =
false;
343 bool timeErr =
false;
344 for (
unsigned ii = 0; ii < unpackedInput.size(); ii += 3) {
346 bool hwSimZero =
false;
347 if (unpackedInput[ii] != simInput[ii]) {sameInputId =
false;}
348 if (unpackedInput[ii + 2] != simInput[ii + 2]) {sameInputAlpha =
false;}
349 if (unpackedInput[ii + 1] != simInput[ii + 1]) {timeErr =
true;}
350 if (unpackedInput[ii + 1] == 0 && fabs(simInput[ii + 1] > 0.99)) {scaleErr =
true;}
351 if (simInput[ii + 1] == 0 && fabs(unpackedInput[ii + 1] > 0.99)) {scaleErr =
true;}
352 if (unpackedInput[ii] == 0 && unpackedInput[ii + 1] == 0 && unpackedInput[ii + 2] == 0) {hwZero =
true;}
353 if (simInput[ii] == 0 && simInput[ii + 1] == 0 && simInput[ii + 2] == 0) {hwSimZero =
true;}
354 if (hwZero != hwSimZero) {missingTS =
true;}
356 double diff = neuroHWTrack.getZ0() - neuroSimTrack->getZ0();
358 if (!sameInputId) {neuroHWTrack.setQualityVector(4);}
359 if (!sameInputAlpha) {neuroHWTrack.setQualityVector(8);}
360 if (scaleErr) {neuroHWTrack.setQualityVector(16);}
361 if (missingTS) {neuroHWTrack.setQualityVector(32);}
362 if (timeErr) {neuroHWTrack.setQualityVector(64);}
365 unsigned qvec = neuroHWTrack.getQualityVector();
367 m_neuroErrors->Fill(8);
368 for (
unsigned k = 0; k < m_errcount; k++) {
369 if (qvec & (1 << k)) {m_neuroErrors->Fill(k);}
376 m_neuroHWValTracksNumber->Fill(valtrackcount);
381 void CDCTriggerNeuroDQMOnlineModule::fillSimPlots()
386 bool valtrack =
false;
390 B2WARNING(
"SimTrack doesn't have 'valid bit', get it from relations now ...");
395 m_neuroHWSimZ->Fill(neuroSimTrack.getZ0());
396 m_neuroHWSimCosTheta->Fill(copysign(1.0,
397 neuroSimTrack.getCotTheta()) /
sqrt(1. / (neuroSimTrack.getCotTheta()*neuroSimTrack.getCotTheta())));
401 bool valhwtrack =
false;
405 B2WARNING(
"HWTrack doesn't have 'valid bit', get it from relations now ...");
409 double diff = neuroHWTrack->getZ0() - neuroSimTrack.getZ0();
410 m_neuroHWOutHwSimdZ->Fill(diff);
423 bool foundValidRep =
false;
433 rep->extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000));
435 zTarget = state.getPos().Z();
440 foundValidRep =
true;
443 if (!foundValidRep) {
444 B2DEBUG(150,
"No valid representation found for RecoTrack, skipping.");
447 m_neuroHWSimRecodZ->Fill(neuroSimTrack.getZ0() - zTarget);
455 void CDCTriggerNeuroDQMOnlineModule::makeDebugOutput()
458 static constexpr std::array<int, 9> nWiresInSuperLayer = {
459 160, 160, 192, 224, 256, 288, 320, 352, 384
464 std::vector<TSLine> hwtsoutput;
466 if (xhit.getISuperLayer() % 2 == 0) {
471 int iSL = xhit.getISuperLayer();
472 int iTS = xhit.getIWire();
473 int nwires = nWiresInSuperLayer[ iSL ];
480 int tsIDInTracker = iTS - nwires * xhit.getQuadrant() / 4;
481 if (tsIDInTracker < 0) {
482 tsIDInTracker += nwires;
486 + padto(std::to_string(xhit.getISuperLayer()), 2) +
", "
487 + padto(std::to_string(xhit.getQuadrant()), 1) +
", "
488 + padto(std::to_string(xhit.getSegmentID()), 4) +
", "
489 + padto(std::to_string(xhit.getIWire()), 5) +
", "
490 + padto(std::to_string(xhit.getPriorityPosition()), 2) +
", "
491 + padto(std::to_string(xhit.getLeftRight()), 2) +
", "
492 + padto(std::to_string(xhit.priorityTime()), 4) +
", "
493 + padto(std::to_string(xhit.foundTime()), 3) +
", "
494 + padto(std::to_string(tsIDInTracker), 4) +
") | ";
496 unsigned count2d = 0;
500 l.strline += std::to_string(count2d);
506 unsigned counthwn = 0;
510 if (track.getValidStereoBit()) {
511 l.strline += std::to_string(counthwn);
521 unsigned countswn = 0;
525 l.strline += std::to_string(countswn);
533 unsigned countreco = 0;
536 bool related =
false;
538 if (&ts == &xhit) {related =
true;}
541 l.strline += std::to_string(countreco);
551 std::string axhw = std::to_string(axhwts) +
" / " + std::to_string(sthwts);
552 std::string hwtsstring =
"(SL, Q, SID , WID , PP, LR, pT , fT , TSID) | HWNNIn2D | HWNeuro | SWNeuro | ";
554 B2DEBUG(10, padright(
" ", 100));
555 B2DEBUG(10,
"----------------------------------------------------------------------------------------------------");
556 B2DEBUG(10, padright(
" ", 100));
557 std::string experimentstring =
"Experiment " + std::to_string(eventMetaData->getExperiment()) +
" Run " +
558 std::to_string(eventMetaData->getRun()) +
" Event " + std::to_string(eventMetaData->getEvent());
559 B2DEBUG(10, padright(experimentstring, 100));
560 B2DEBUG(10, padright(
" ", 100));
561 B2DEBUG(10, padright(
" ", 100));
562 B2DEBUG(10, padright(
"Number of NN HW TS (Axial/Stereo): ", 40) << padright(axhw, 60));
568 std::stringstream strpt;
569 std::stringstream stromega;
570 std::stringstream strphi;
571 strpt << std::fixed << std::setprecision(2) << ltrack.getPt();
572 stromega << std::fixed << std::setprecision(2) << ltrack.getOmega();
573 strphi << std::fixed << std::setprecision(2) << (ltrack.getPhi0() * 180. / M_PI);
574 std::string trs =
" HW2DFinderTrack Nr. " + std::to_string(f2dtrn) +
" (pt, omega, phi) = ";
575 trs += padto(strpt.str(), 6) +
", " + padto(stromega.str(), 6) +
", " + padto(strphi.str(), 6) +
")";
576 B2DEBUG(15, padright(trs, 100));
578 B2DEBUG(10, padright(
"Number of HW NNInput2DFinderTracks: ",
583 std::stringstream strpt;
584 std::stringstream stromega;
585 std::stringstream strphi;
586 strpt << std::fixed << std::setprecision(2) << ltrack.getPt();
587 stromega << std::fixed << std::setprecision(2) << ltrack.getOmega();
588 strphi << std::fixed << std::setprecision(2) << (ltrack.getPhi0() * 180. / M_PI);
589 std::string trs =
" HWNeuroInput2DTrack Nr. " + std::to_string(n2dtrn) +
" (pt, omega, phi) = ";
590 trs += padto(strpt.str(), 6) +
", " + padto(stromega.str(), 6) +
", " + padto(strphi.str(), 6) +
", " +
")";
591 B2DEBUG(15, padright(trs, 100));
593 B2DEBUG(10, padright(
"Number of HW NeuroTracks: ",
598 std::stringstream strpt;
599 std::stringstream stromega;
600 std::stringstream strphi;
601 std::stringstream strtheta;
602 std::stringstream strz;
603 std::stringstream hwomega;
604 std::stringstream hwphi;
605 std::stringstream hwtheta;
606 std::stringstream hwz;
607 strpt << std::fixed << std::setprecision(2) << ltrack.getPt();
608 stromega << std::fixed << std::setprecision(2) << ltrack.getOmega();
609 strphi << std::fixed << std::setprecision(2) << (ltrack.getPhi0() * 180. / M_PI);
610 strtheta << std::fixed << std::setprecision(2) << (ltrack.getDirection().Theta() * 180. / M_PI);
611 strz << std::fixed << std::setprecision(2) << ltrack.getZ0();
612 hwomega << std::fixed << std::setprecision(0) << ltrack.getRawOmega();
613 hwphi << std::fixed << std::setprecision(0) << ltrack.getRawPhi0();
614 hwtheta << std::fixed << std::setprecision(0) << ltrack.getRawTheta();
615 hwz << std::fixed << std::setprecision(0) << ltrack.getRawZ();
616 std::string trs =
" HWNeuroTrack Nr. " + std::to_string(hwntrn) +
" (pt,om,phi,theta,z)=(";
617 trs += padto(strpt.str(), 4) +
"," + padto(stromega.str(), 6) +
"," + padto(strphi.str(), 6) +
"," + padto(strtheta.str(),
618 6) +
"," + padto(strz.str(), 6) +
"),(x," + padto(hwomega.str(), 3) +
"," + padto(hwphi.str(), 3) +
"," + padto(hwtheta.str(),
619 3) +
"," + padto(hwz.str(), 3) +
")";
620 B2DEBUG(15, padright(trs, 100));
621 std::string infostr =
", Found old track: ( ";
622 for (
bool x : ltrack.getFoundOldTrack()) {
623 infostr += std::to_string(x);
626 infostr = padright(infostr, 50);
627 infostr +=
"Drift threshold: ( ";
628 for (
bool x : ltrack.getDriftThreshold()) {
629 infostr += std::to_string(x);
632 infostr += (ltrack.getValidStereoBit()) ?
" valid" :
" NOT valid";
633 B2DEBUG(15, padright(infostr, 100));
634 std::string infostr2 =
" std. ETF vld:";
636 infostr2 +=
", ETFT0: ";
642 infostr2 +=
", ETF in CC: ";
643 infostr2 += std::to_string(ltrack.getETF_unpacked());
644 infostr2 +=
", ETF recalculated: ";
645 infostr2 += std::to_string(ltrack.getETF_recalced());
646 B2DEBUG(15, padright(infostr2, 100));
647 std::string info2str =
" Expert Network Number: " + std::to_string(ltrack.getExpert());
648 info2str +=
", TSVector: (";
649 for (
unsigned x : ltrack.getTSVector()) {
650 info2str += std::to_string(x) +
" ";
653 info2str +=
", Quality=";
654 info2str += std::to_string(ltrack.getQualityVector());
655 B2DEBUG(15, padright(info2str, 100));
659 std::vector<float> unpackedInput =
661 std::vector<float> simInput =
663 B2DEBUG(20, padright(
" Input Vector unpacked (id, t, alpha), sim (id, t, alpha), delta (id, t, alpha):", 100));
664 for (
unsigned ii = 0; ii < unpackedInput.size(); ii += 3) {
665 std::string lla =
" " + std::to_string(ii / 3) +
")";
666 std::string llb =
" " + std::to_string(ii / 3) +
")";
667 lla +=
"(" + padright(std::to_string(unpackedInput[ii]), 8) +
" " + padright(std::to_string(unpackedInput[ii + 1]),
668 8) +
" " + padright(std::to_string(unpackedInput[ii + 2]), 8) +
"),(" + padright(std::to_string(simInput[ii]),
669 8) +
" " + padright(std::to_string(simInput[ii + 1]), 8) +
" " + padright(std::to_string(simInput[ii + 2]),
670 8) +
"),(" + padright(std::to_string(unpackedInput[ii] - simInput[ii]),
671 8) +
" " + padright(std::to_string(unpackedInput[ii + 1] - simInput[ii + 1]),
672 8) +
" " + padright(std::to_string(unpackedInput[ii + 2] - simInput[ii + 2]), 8) +
")";
673 llb +=
" (" + padright(std::to_string(
int(unpackedInput[ii] * 4096)),
674 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 1] * 4096)),
675 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 2] * 4096)),
676 8) +
"),(" + padright(std::to_string(
int(simInput[ii] * 4096)), 8) +
" " + padright(std::to_string(
int(simInput[ii + 1] * 4096)),
677 8) +
" " + padright(std::to_string(
int(simInput[ii + 2] * 4096)),
678 8) +
"),(" + padright(std::to_string(
int(unpackedInput[ii] * 4096 - simInput[ii] * 4096)),
679 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 1] * 4096 - simInput[ii + 1] * 4096)),
680 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 2] * 4096 - simInput[ii + 2] * 4096)), 8) +
")";
682 B2DEBUG(30, padright(lla, 100));
683 B2DEBUG(20, padright(llb, 100));
688 B2DEBUG(10, padright(
"Number of RecoTracks: ", 40) << padright(std::to_string(
m_RecoTracks.
getEntries()), 60));
689 unsigned recotrn = 0;
691 double phi0Target = 0;
692 double invptTarget = 0;
693 double thetaTarget = 0;
696 bool foundValidRep =
false;
698 if (!ltrack.wasFitSuccessful(rep))
704 ltrack.getMeasuredStateOnPlaneClosestTo(ROOT::Math::XYZVector(0, 0, 0), rep);
705 rep->extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000));
714 phi0Target = state.getMom().Phi() * 180. / M_PI ;
715 if (phi0Target < 0.) {phi0Target = phi0Target + 360. ;}
716 invptTarget = state.getCharge() * state.getMom().Pt();
717 thetaTarget = acos(state.getMom().CosTheta()) * 180 / M_PI;
718 zTarget = state.getPos().Z();
719 d0Target = state.getPos().Perp();
724 foundValidRep =
true;
727 if (!foundValidRep) {
728 B2DEBUG(150,
"No valid representation found for RecoTrack, skipping.");
732 std::stringstream strpt;
733 std::stringstream stromega;
734 std::stringstream strphi;
735 std::stringstream strtheta;
736 std::stringstream strz;
737 strpt << std::fixed << std::setprecision(2) << invptTarget;
738 stromega << std::fixed << std::setprecision(2) << d0Target;
739 strphi << std::fixed << std::setprecision(2) << phi0Target;
740 strtheta << std::fixed << std::setprecision(2) << thetaTarget;
741 strz << std::fixed << std::setprecision(2) << zTarget;
742 std::string trs =
" RecoTrack Nr. " + std::to_string(recotrn) +
" (invpt, d0, phi, theta, z) = ";
743 trs += padto(strpt.str(), 6) +
", " + padto(stromega.str(), 6) +
", " + padto(strphi.str(), 6) +
", " + padto(strtheta.str(),
744 6) +
", " + padto(strz.str(), 6) +
")";
745 B2DEBUG(15, padright(trs, 100));
748 B2DEBUG(10, padright(
" ", 100));
749 B2DEBUG(10, padright(
" ", 100));
750 B2DEBUG(15, padright(
"Detailed information about HW TS ", 100));
751 B2DEBUG(15, padright(
" ", 100));
752 B2DEBUG(15, padright(hwtsstring, 100));
753 for (
auto x : hwtsoutput) {
754 B2DEBUG(15, padright(x.strline, 100));
756 B2DEBUG(15, padright(
" ", 100));
762 void CDCTriggerNeuroDQMOnlineModule::fillRecoPlots()
766 bool foundValidRep =
false;
775 rep->extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000));
776 zTarget = state.getPos().Z();
781 foundValidRep =
true;
784 if (!foundValidRep) {
785 B2DEBUG(150,
"No valid representation found for RecoTrack, skipping.");
788 m_recoZ->Fill(zTarget);
792 if (!neuroHWTrack) {
continue;}
793 bool valtrack =
false;
800 B2WARNING(
"HWTrack doesn't have 'valid bit', get it from relations now ...");
803 if (!valtrack) {
continue;}
811 m_recoZ_related->Fill(zTarget);
812 m_neuroHWOutdzall->Fill(neuroHWTrack->getZ0() - zTarget);
815 B2WARNING(
"Neurotrack quadrant was not set!");
818 m_neuroHWOutdz0->Fill(neuroHWTrack->getZ0() - zTarget);
821 m_neuroHWOutdz1->Fill(neuroHWTrack->getZ0() - zTarget);
824 m_neuroHWOutdz2->Fill(neuroHWTrack->getZ0() - zTarget);
827 m_neuroHWOutdz3->Fill(neuroHWTrack->getZ0() - zTarget);
int getBinnedEventT0(const Const::EDetector detector) const
Return the stored binned event t0 for the given detector or 0 if nothing stored.
Combination of several CDCHits to a track segment hit for the trigger.
Track created by the CDC trigger.
float getTime() const
get the track found time
bool getValidStereoBit() const
returns true, if at least 3 stereo ts were found
void setQualityVector(const unsigned newbits)
setter and getter for the quality vector.
short getQuadrant() const
get the quadrant
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
void setDescription(const std::string &description)
Sets the description of the module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
This is the Reconstruction Event-Data Model Track.
bool wasFitSuccessful(const genfit::AbsTrackRep *representation=nullptr) const
Returns true if the last fit with the given representation was successful.
const genfit::MeasuredStateOnPlane & getMeasuredStateOnPlaneClosestTo(const ROOT::Math::XYZVector &closestPoint, const genfit::AbsTrackRep *representation=nullptr)
Return genfit's MasuredStateOnPlane, that is closest to the given point useful for extrapolation of m...
const std::vector< genfit::AbsTrackRep * > & getRepresentations() const
Return a list of track representations. You are not allowed to modify or delete them!
FROM * getRelatedFrom(const std::string &name="", const std::string &namedRelation="") const
Get the object from which this object has a relation.
bool isRequired(const std::string &name="")
Ensure this array/object has been registered previously.
bool isOptional(const std::string &name="")
Tell the DataStore about an optional input.
bool requireRelationTo(const StoreArray< TO > &toArray, DataStore::EDurability durability=DataStore::c_Event, const std::string &namedRelation="") const
Produce error if no relation from this array to 'toArray' has been registered.
int getEntries() const
Get the number of objects in the array.
Type-safe access to single objects in the data store.
bool isValid() const
Check whether the object was created.
StoreArray< CDCTriggerMLPInput > m_simNeuroInputVector
StoreArray for neuro input vector from TSIM.
StoreArray< CDCTriggerTrack > m_unpackedNeuroInput2DTracks
StoreArray for neuro input 2dfinder tracks.
StoreArray< CDCTriggerTrack > m_unpackedNeuroTracks
StoreArray for neuro tracks from unpacker.
std::string m_unpackedNeuroInputSegmentHitsName
Name for neuro input Track segments.
void initialize() override
Module functions.
void event() override
Function to process event record.
std::string m_unpacked2DTracksName
Name for 2D finder tracks from unpacker.
void endRun() override
Function to process end_run record.
bool m_useSimTracks
Switch to turn on use of hw sim tracks.
void terminate() override
Function to terminate module.
std::string m_unpackedNeuroInput2DTracksName
Name for neuro input 2d finder tracks.
StoreArray< CDCTriggerMLPInput > m_unpackedNeuroInputVector
StoreArray for neuro input vector from unpacker.
std::string m_unpackedNeuroInputAllSegmentHitsName
Name for TS hits from unpacker.
StoreArray< CDCTriggerTrack > m_simNeuroTracks
StoreArray for neuro tracks from TSIM.
std::string m_simNeuroInputVectorName
Name for simulated neuro input vector using HW TS, HW 2D.
void beginRun() override
Function to process begin_run record.
std::string m_histogramDirectoryName
Name of the histogram directory in ROOT file.
std::string m_recoTracksName
Name for the RecoTrack array name.
virtual ~CDCTriggerNeuroDQMOnlineModule()
Destructor.
bool m_useRecoTracks
Switch to turn on use of recotracks.
std::string m_simNeuroTracksName
name of the storearray for hwsim tracks
unsigned getPattern(CDCTriggerTrack *track, std::string hitCollectionName)
get pattern of the track
std::string m_unpackedNeuroInputVectorName
Name for neuro input vector from unpacker.
bool isValidPattern(unsigned pattern)
Validity of the pattern.
StoreObjPtr< BinnedEventT0 > m_eventTime
storeobjpointer for event time
StoreArray< CDCTriggerSegmentHit > m_unpackedNeuroInputSegmentHits
StoreArray for neuro input Track segments.
StoreArray< CDCTriggerTrack > m_unpacked2DTracks
StoreArray for 2D finder tracks from unpacker.
std::string m_unpackedNeuroTracksName
Name for neuro tracks from unpacker.
StoreArray< RecoTrack > m_RecoTracks
StoreArray for RecoTracks.
CDCTriggerNeuroDQMOnlineModule()
Constructor.
StoreArray< CDCTriggerSegmentHit > m_unpackedNeuroInputAllSegmentHits
StoreArray for all TS hits from neuro unpacker.
void defineHisto() override
Histogram definitions such as TH1(), TH2(), TNtuple(), TTree()....
Abstract base class for a track representation.
#StateOnPlane with additional covariance matrix.
REG_MODULE(arichBtest)
Register the Module.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
double sqrt(double a)
sqrt for double
Abstract base class for different kinds of events.