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",
149 m_neuroHWValTSCountAx =
new TH1F(
"NeuroHWValTSCountAx",
"Number of axial TS related to a valid NNTrack", 6, 0, 6);
150 m_neuroHWValTSCountSt =
new TH1F(
"NeuroHWValTSCountSt",
"Number of stereo TS related to a valid NNTrack", 5, 0, 5);
154 m_neuroHWOutHwSimdZ =
new TH1F(
"NeuroHWOutZ-NeuroHWSimZ",
155 "dz Distribution of Valid Neuro Tracks and Simulated HW Tracks; z [cm]",
157 m_neuroHWSimZ =
new TH1F(
"NeuroHWSimZ",
158 "z Distribution of Simulated HW Tracks; z [cm]",
160 m_neuroHWSimCosTheta =
new TH1F(
"NeuroHWSimCosTheta",
161 "cos theta Distribution of Simulated HW Tracks; cos(#theta) ",
163 m_errcount = m_errdict.size();
164 m_neuroErrors =
new TH1F(
"Neurotrigger-Errors",
"Errors in the Neuro Hardware", m_errcount, 0, m_errcount);
222 m_neuroHWOutdzall->Reset();
223 m_neuroHWOutdz0->Reset();
224 m_neuroHWOutdz1->Reset();
225 m_neuroHWOutdz2->Reset();
226 m_neuroHWOutdz3->Reset();
227 m_neuroHWSimRecodZ->Reset();
231 m_neuroHWOutZ->Reset();
233 m_recoZ_related->Reset();
234 m_neuroHWOutSTTZ->Reset();
235 m_neuroHWOutCosTheta->Reset();
236 m_neuroHWOutPhi0->Reset();
237 m_neuroHWOutPt->Reset();
238 m_neuroHWOutP->Reset();
239 m_neuroHWOutm_time->Reset();
240 m_neuroHWValTracksNumber->Reset();
241 m_neuroHWSector->Reset();
242 m_neuroHWInTSID->Reset();
243 m_neuroHWInTSIDSel->Reset();
244 m_neuroHWInCDCFE->Reset();
245 m_neuroHWInm_time->Reset();
246 m_neuroHWIn2DTracksNumber->Reset();
250 m_neuroHWOutHwSimdZ->Reset();
251 m_neuroHWSimZ->Reset();
252 m_neuroHWSimCosTheta->Reset();
253 m_neuroErrors->Reset();
254 for (
unsigned i = 0; i < m_errcount; ++i) {
255 m_neuroErrors->GetXaxis()->SetBinLabel(i + 1, m_errdict[i].c_str());
262 B2DEBUG(150,
"No unpacked TS found, skipping event.");
279void CDCTriggerNeuroDQMOnlineModule::fillHWPlots()
282 unsigned valtrackcount = 0;
287 m_neuroHWInTSID->Fill(hit.getSegmentID());
288 m_neuroHWInCDCFE->Fill((
int)(std::roundf(hit.getSegmentID()) * 2 + 8));
289 m_neuroHWInCDCFE->Fill((
int)(std::roundf(hit.getSegmentID()) * 2 + 9));
292 m_neuroHWInTSIDSel->Fill(hit.getSegmentID());
298 bool firsttrack =
true;
300 bool valtrack =
false;
302 valtrack = neuroHWTrack.getValidStereoBit();
304 B2WARNING(
"HWTrack doesn't have 'valid bit', get it from relations now ...");
311 if (ts.getISuperLayer() % 2 == 0) {
317 m_neuroHWValTSCountAx->Fill(nTsAx);
318 m_neuroHWValTSCountSt->Fill(nTsSt);
320 neuroHWTrack.setQualityVector(256);
323 neuroHWTrack.setQualityVector(512);
326 m_neuroHWOutZ->Fill(neuroHWTrack.getZ0());
327 m_neuroHWOutCosTheta->Fill(copysign(1.0,
328 neuroHWTrack.getCotTheta()) /
sqrt(1. / (neuroHWTrack.getCotTheta()*neuroHWTrack.getCotTheta())));
329 double phinorm = neuroHWTrack.getPhi0() * 180. / M_PI;
330 if (phinorm < 0.) {phinorm += 360.;}
331 m_neuroHWOutPhi0->Fill(phinorm);
332 m_neuroHWOutPt->Fill(neuroHWTrack.getPt());
333 float momentum = neuroHWTrack.getPt() / sin(acos(neuroHWTrack.getCotTheta() /
sqrt(1 + neuroHWTrack.getCotTheta() *
334 neuroHWTrack.getCotTheta())));
335 m_neuroHWOutP->Fill(momentum);
336 if (momentum < 0.7 && firsttrack && neuroHWTrack.getFoundOldTrack()[0] ==
false) {
337 m_neuroHWOutSTTZ->Fill(neuroHWTrack.getZ0());
341 m_neuroHWOutm_time->Fill(neuroHWTrack.getTime());
346 m_neuroHWInm_time->Fill(twodHWTrack->
getTime());
352 if (!neuroSimTrack) {
353 B2WARNING(
"No Simtrack related to HWTrack! This should not happen!");
356 std::vector<float> unpackedInput =
358 std::vector<float> simInput =
360 bool sameInputId =
true;
361 bool sameInputAlpha =
true;
362 bool scaleErr =
false;
363 bool missingHwTS =
false;
364 bool missingSwTS =
false;
365 bool timeErr =
false;
366 for (
unsigned ii = 0; ii < unpackedInput.size(); ii += 3) {
369 if (unpackedInput[ii] != simInput[ii]) {sameInputId =
false;}
370 if (unpackedInput[ii + 2] != simInput[ii + 2]) {sameInputAlpha =
false;}
371 if (unpackedInput[ii + 1] != simInput[ii + 1]) {timeErr =
true;}
372 if (unpackedInput[ii + 1] == 0 && fabs(simInput[ii + 1] > 0.99)) {scaleErr =
true;}
373 if (simInput[ii + 1] == 0 && fabs(unpackedInput[ii + 1] > 0.99)) {scaleErr =
true;}
374 if (unpackedInput[ii] == 0 && unpackedInput[ii + 1] == 0 && unpackedInput[ii + 2] == 0) {hwZero = 1;}
375 if (simInput[ii] == 0 && simInput[ii + 1] == 0 && simInput[ii + 2] == 0) {hwSimZero = 1;}
376 if (hwZero > hwSimZero) {missingSwTS =
true;}
377 if (hwZero < hwSimZero) {missingHwTS =
true;}
379 double diff = neuroHWTrack.getZ0() - neuroSimTrack->getZ0();
381 if (!sameInputId) {neuroHWTrack.setQualityVector(4);}
382 if (!sameInputAlpha) {neuroHWTrack.setQualityVector(8);}
383 if (scaleErr) {neuroHWTrack.setQualityVector(16);}
384 if (missingSwTS) {neuroHWTrack.setQualityVector(32);}
385 if (missingHwTS) {neuroHWTrack.setQualityVector(64);}
386 if (timeErr) {neuroHWTrack.setQualityVector(1024);}
390 unsigned qvec = neuroHWTrack.getQualityVector();
392 m_neuroErrors->Fill(m_errcount - 1);
393 for (
unsigned k = 0; k < m_errcount; k++) {
394 if (qvec & (1 << k)) {m_neuroErrors->Fill(k);}
400 m_neuroHWValTracksNumber->Fill(valtrackcount);
405void CDCTriggerNeuroDQMOnlineModule::fillSimPlots()
410 bool valtrack =
false;
414 B2WARNING(
"SimTrack doesn't have 'valid bit', get it from relations now ...");
419 m_neuroHWSimZ->Fill(neuroSimTrack.getZ0());
420 m_neuroHWSimCosTheta->Fill(copysign(1.0,
421 neuroSimTrack.getCotTheta()) /
sqrt(1. / (neuroSimTrack.getCotTheta()*neuroSimTrack.getCotTheta())));
425 bool valhwtrack =
false;
429 B2WARNING(
"HWTrack doesn't have 'valid bit', get it from relations now ...");
433 double diff = neuroHWTrack->getZ0() - neuroSimTrack.getZ0();
434 m_neuroHWOutHwSimdZ->Fill(diff);
447 bool foundValidRep =
false;
455 genfit::MeasuredStateOnPlane state =
457 rep->extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000));
459 zTarget = state.getPos().Z();
464 foundValidRep =
true;
467 if (!foundValidRep) {
468 B2DEBUG(150,
"No valid representation found for RecoTrack, skipping.");
471 m_neuroHWSimRecodZ->Fill(neuroSimTrack.getZ0() - zTarget);
479void CDCTriggerNeuroDQMOnlineModule::makeDebugOutput()
482 static constexpr std::array<int, 9> nWiresInSuperLayer = {
483 160, 160, 192, 224, 256, 288, 320, 352, 384
488 std::vector<TSLine> hwtsoutput;
490 if (xhit.getISuperLayer() % 2 == 0) {
495 int iSL = xhit.getISuperLayer();
496 int iTS = xhit.getIWire();
497 int nwires = nWiresInSuperLayer[ iSL ];
504 int tsIDInTracker = iTS - nwires * xhit.getQuadrant() / 4;
505 if (tsIDInTracker < 0) {
506 tsIDInTracker += nwires;
510 + padto(std::to_string(xhit.getISuperLayer()), 2) +
", "
511 + padto(std::to_string(xhit.getQuadrant()), 1) +
", "
512 + padto(std::to_string(xhit.getSegmentID()), 4) +
", "
513 + padto(std::to_string(xhit.getIWire()), 5) +
", "
514 + padto(std::to_string(xhit.getPriorityPosition()), 2) +
", "
515 + padto(std::to_string(xhit.getLeftRight()), 2) +
", "
516 + padto(std::to_string(xhit.priorityTime()), 4) +
", "
517 + padto(std::to_string(xhit.foundTime()), 3) +
", "
518 + padto(std::to_string(tsIDInTracker), 4) +
") | ";
520 unsigned count2d = 0;
524 l.strline += std::to_string(count2d);
530 unsigned counthwn = 0;
534 if (track.getValidStereoBit()) {
535 l.strline += std::to_string(counthwn);
545 unsigned countswn = 0;
549 if (track.getValidStereoBit()) {
550 l.strline += std::to_string(countswn);
561 unsigned countreco = 0;
564 bool related =
false;
566 if (&ts == &xhit) {related =
true;}
569 l.strline += std::to_string(countreco);
579 std::string axhw = std::to_string(axhwts) +
" / " + std::to_string(sthwts);
580 std::string hwtsstring =
"(SL, Q, SID , WID , PP, LR, pT , fT , TSID) | HWNNIn2D | HWNeuro | SWNeuro | ";
582 B2DEBUG(10, padright(
" ", 100));
583 B2DEBUG(10,
"----------------------------------------------------------------------------------------------------");
584 B2DEBUG(10, padright(
" ", 100));
585 std::string experimentstring =
"Experiment " + std::to_string(eventMetaData->getExperiment()) +
" Run " +
586 std::to_string(eventMetaData->getRun()) +
" Event " + std::to_string(eventMetaData->getEvent());
587 B2DEBUG(10, padright(experimentstring, 100));
588 B2DEBUG(10, padright(
" ", 100));
589 B2DEBUG(10, padright(
" ", 100));
590 B2DEBUG(10, padright(
"Number of NN HW TS (Axial/Stereo): ", 40) << padright(axhw, 60));
596 std::stringstream strpt;
597 std::stringstream stromega;
598 std::stringstream strphi;
599 strpt << std::fixed << std::setprecision(2) << ltrack.getPt();
600 stromega << std::fixed << std::setprecision(2) << ltrack.getOmega();
601 strphi << std::fixed << std::setprecision(2) << (ltrack.getPhi0() * 180. / M_PI);
602 std::string trs =
" HW2DFinderTrack Nr. " + std::to_string(f2dtrn) +
" (pt, omega, phi) = ";
603 trs += padto(strpt.str(), 6) +
", " + padto(stromega.str(), 6) +
", " + padto(strphi.str(), 6) +
")";
604 B2DEBUG(15, padright(trs, 100));
606 B2DEBUG(10, padright(
"Number of HW NNInput2DFinderTracks: ",
611 std::stringstream strpt;
612 std::stringstream stromega;
613 std::stringstream strphi;
614 strpt << std::fixed << std::setprecision(2) << ltrack.getPt();
615 stromega << std::fixed << std::setprecision(2) << ltrack.getOmega();
616 strphi << std::fixed << std::setprecision(2) << (ltrack.getPhi0() * 180. / M_PI);
617 std::string trs =
" HWNeuroInput2DTrack Nr. " + std::to_string(n2dtrn) +
" (pt, omega, phi) = ";
618 trs += padto(strpt.str(), 6) +
", " + padto(stromega.str(), 6) +
", " + padto(strphi.str(), 6) +
", " +
")";
619 B2DEBUG(15, padright(trs, 100));
621 B2DEBUG(10, padright(
"Number of HW NeuroTracks: ",
626 std::stringstream strpt;
627 std::stringstream stromega;
628 std::stringstream strphi;
629 std::stringstream strtheta;
630 std::stringstream strz;
631 std::stringstream hwomega;
632 std::stringstream hwphi;
633 std::stringstream hwtheta;
634 std::stringstream hwz;
635 strpt << std::fixed << std::setprecision(2) << ltrack.getPt();
636 stromega << std::fixed << std::setprecision(2) << ltrack.getOmega();
637 strphi << std::fixed << std::setprecision(2) << (ltrack.getPhi0() * 180. / M_PI);
638 strtheta << std::fixed << std::setprecision(2) << (ltrack.getDirection().Theta() * 180. / M_PI);
639 strz << std::fixed << std::setprecision(2) << ltrack.getZ0();
640 hwomega << std::fixed << std::setprecision(0) << ltrack.getRawOmega();
641 hwphi << std::fixed << std::setprecision(0) << ltrack.getRawPhi0();
642 hwtheta << std::fixed << std::setprecision(0) << ltrack.getRawTheta();
643 hwz << std::fixed << std::setprecision(0) << ltrack.getRawZ();
644 std::string trs =
" HWNeuroTrack Nr. " + std::to_string(hwntrn) +
" (pt,om,phi,theta,z)=(";
645 trs += padto(strpt.str(), 4) +
"," + padto(stromega.str(), 6) +
"," + padto(strphi.str(), 6) +
"," + padto(strtheta.str(),
646 6) +
"," + padto(strz.str(), 6) +
"),(x," + padto(hwomega.str(), 3) +
"," + padto(hwphi.str(), 3) +
"," + padto(hwtheta.str(),
647 3) +
"," + padto(hwz.str(), 3) +
")";
648 B2DEBUG(15, padright(trs, 100));
649 std::string infostr =
", Found old track: ( ";
650 for (
bool x : ltrack.getFoundOldTrack()) {
651 infostr += std::to_string(x);
654 infostr = padright(infostr, 50);
655 infostr +=
"Drift threshold: ( ";
656 for (
bool x : ltrack.getDriftThreshold()) {
657 infostr += std::to_string(x);
660 infostr += (ltrack.getValidStereoBit()) ?
" valid" :
" NOT valid";
661 B2DEBUG(15, padright(infostr, 100));
662 std::string infostr2 =
" std. ETF vld:";
664 infostr2 +=
", ETFT0: ";
670 infostr2 +=
", ETF in CC: ";
671 infostr2 += std::to_string(ltrack.getETF_unpacked());
672 infostr2 +=
", ETF recalculated: ";
673 infostr2 += std::to_string(ltrack.getETF_recalced());
674 B2DEBUG(15, padright(infostr2, 100));
675 std::string info2str =
" Expert Network Number: " + std::to_string(ltrack.getExpert());
676 info2str +=
", TSVector: (";
677 for (
unsigned x : ltrack.getTSVector()) {
678 info2str += std::to_string(x) +
" ";
681 info2str +=
", Quality=";
682 info2str += std::to_string(ltrack.getQualityVector());
683 B2DEBUG(15, padright(info2str, 100));
687 std::vector<float> unpackedInput =
689 std::vector<float> simInput =
691 B2DEBUG(20, padright(
" Input Vector unpacked (id, t, alpha), sim (id, t, alpha), delta (id, t, alpha):", 100));
692 for (
unsigned ii = 0; ii < unpackedInput.size(); ii += 3) {
693 std::string lla =
" " + std::to_string(ii / 3) +
")";
694 std::string llb =
" " + std::to_string(ii / 3) +
")";
695 lla +=
"(" + padright(std::to_string(unpackedInput[ii]), 8) +
" " + padright(std::to_string(unpackedInput[ii + 1]),
696 8) +
" " + padright(std::to_string(unpackedInput[ii + 2]), 8) +
"),(" + padright(std::to_string(simInput[ii]),
697 8) +
" " + padright(std::to_string(simInput[ii + 1]), 8) +
" " + padright(std::to_string(simInput[ii + 2]),
698 8) +
"),(" + padright(std::to_string(unpackedInput[ii] - simInput[ii]),
699 8) +
" " + padright(std::to_string(unpackedInput[ii + 1] - simInput[ii + 1]),
700 8) +
" " + padright(std::to_string(unpackedInput[ii + 2] - simInput[ii + 2]), 8) +
")";
701 llb +=
" (" + padright(std::to_string(
int(unpackedInput[ii] * 4096)),
702 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 1] * 4096)),
703 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 2] * 4096)),
704 8) +
"),(" + padright(std::to_string(
int(simInput[ii] * 4096)), 8) +
" " + padright(std::to_string(
int(simInput[ii + 1] * 4096)),
705 8) +
" " + padright(std::to_string(
int(simInput[ii + 2] * 4096)),
706 8) +
"),(" + padright(std::to_string(
int(unpackedInput[ii] * 4096 - simInput[ii] * 4096)),
707 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 1] * 4096 - simInput[ii + 1] * 4096)),
708 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 2] * 4096 - simInput[ii + 2] * 4096)), 8) +
")";
710 B2DEBUG(30, padright(lla, 100));
711 B2DEBUG(20, padright(llb, 100));
716 B2DEBUG(10, padright(
"Number of RecoTracks: ", 40) << padright(std::to_string(
m_RecoTracks.
getEntries()), 60));
717 unsigned recotrn = 0;
719 double phi0Target = 0;
720 double invptTarget = 0;
721 double thetaTarget = 0;
724 bool foundValidRep =
false;
725 for (genfit::AbsTrackRep* rep : ltrack.getRepresentations()) {
726 if (!ltrack.wasFitSuccessful(rep))
731 genfit::MeasuredStateOnPlane state =
732 ltrack.getMeasuredStateOnPlaneClosestTo(ROOT::Math::XYZVector(0, 0, 0), rep);
733 rep->extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000));
742 phi0Target = state.getMom().Phi() * 180. / M_PI ;
743 if (phi0Target < 0.) {phi0Target = phi0Target + 360. ;}
744 invptTarget = state.getCharge() * state.getMom().Pt();
745 thetaTarget = acos(state.getMom().CosTheta()) * 180 / M_PI;
746 zTarget = state.getPos().Z();
747 d0Target = state.getPos().Perp();
752 foundValidRep =
true;
755 if (!foundValidRep) {
756 B2DEBUG(150,
"No valid representation found for RecoTrack, skipping.");
760 std::stringstream strpt;
761 std::stringstream stromega;
762 std::stringstream strphi;
763 std::stringstream strtheta;
764 std::stringstream strz;
765 strpt << std::fixed << std::setprecision(2) << invptTarget;
766 stromega << std::fixed << std::setprecision(2) << d0Target;
767 strphi << std::fixed << std::setprecision(2) << phi0Target;
768 strtheta << std::fixed << std::setprecision(2) << thetaTarget;
769 strz << std::fixed << std::setprecision(2) << zTarget;
770 std::string trs =
" RecoTrack Nr. " + std::to_string(recotrn) +
" (invpt, d0, phi, theta, z) = ";
771 trs += padto(strpt.str(), 6) +
", " + padto(stromega.str(), 6) +
", " + padto(strphi.str(), 6) +
", " + padto(strtheta.str(),
772 6) +
", " + padto(strz.str(), 6) +
")";
773 B2DEBUG(15, padright(trs, 100));
776 B2DEBUG(10, padright(
" ", 100));
777 B2DEBUG(10, padright(
" ", 100));
778 B2DEBUG(15, padright(
"Detailed information about HW TS ", 100));
779 B2DEBUG(15, padright(
" ", 100));
780 B2DEBUG(15, padright(hwtsstring, 100));
781 for (
auto x : hwtsoutput) {
782 B2DEBUG(15, padright(x.strline, 100));
784 B2DEBUG(15, padright(
" ", 100));
790void CDCTriggerNeuroDQMOnlineModule::fillRecoPlots()
794 bool foundValidRep =
false;
801 genfit::MeasuredStateOnPlane state =
803 rep->extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000));
804 zTarget = state.getPos().Z();
809 foundValidRep =
true;
812 if (!foundValidRep) {
813 B2DEBUG(150,
"No valid representation found for RecoTrack, skipping.");
816 m_recoZ->Fill(zTarget);
820 if (!neuroHWTrack) {
continue;}
821 bool valtrack =
false;
828 B2WARNING(
"HWTrack doesn't have 'valid bit', get it from relations now ...");
831 if (!valtrack) {
continue;}
839 m_recoZ_related->Fill(zTarget);
840 m_neuroHWOutdzall->Fill(neuroHWTrack->getZ0() - zTarget);
843 B2WARNING(
"Neurotrack quadrant was not set!");
846 m_neuroHWOutdz0->Fill(neuroHWTrack->getZ0() - zTarget);
849 m_neuroHWOutdz1->Fill(neuroHWTrack->getZ0() - zTarget);
852 m_neuroHWOutdz2->Fill(neuroHWTrack->getZ0() - zTarget);
855 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.
const std::vector< genfit::AbsTrackRep * > & getRepresentations() const
Return a list of track representations. You are not allowed to modify or delete them!
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...
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()....
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
double sqrt(double a)
sqrt for double
Abstract base class for different kinds of events.