8#include <framework/dataobjects/EventMetaData.h>
10#include <tracking/dataobjects/RecoTrack.h>
11#include <trg/cdc/modules/dqmneuro/CDCTriggerNeuroDQMOnlineModule.h>
13#include <TDirectory.h>
30 setDescription(
"CDC Trigger DQM Online module for HLT/Expressreco");
33 "The name of the StoreArray of the unpacked 2D finder tracks",
34 std::string(
"CDCTrigger2DFinderTracks"));
36 "The name of the StoreArray of the Neurotrigger tracks from HWSIM",
37 std::string(
"TSimNeuroTracks"));
39 "The name of the StoreArray of the unpacked neurotrigger tracks",
40 std::string(
"CDCTriggerNeuroTracks"));
42 "The name of the StoreArray of the neurotrigger input 2d tracks",
43 std::string(
"CDCTriggerNNInput2DFinderTracks"));
45 "The name of the StoreArray of the neurotrigger input segment hits",
46 std::string(
"CDCTriggerNNInputSegmentHits"));
48 "The name of the StoreArray of all segmenthits arriving at the NN boards",
49 std::string(
"CDCTriggerNNInputAllStereoSegmentHits"));
51 "Name of the directory where histograms will be placed",
52 std::string(
"TRGCDCTNN2"));
54 "Name of the RecoTrack StoreArray. Leave empty for skipping them.",
55 std::string(
"RecoTracks"));
57 "switch on to use simulated tracks for plots, error logs and in debug output"
58 "Useful for debugging SW/HW Errors:",
61 "switch on to use recotracks",
78 TDirectory* oldDir = gDirectory;
89 m_neuroHWOutdzall =
new TH1F(
"NeuroHWOutZ-RecoZ",
90 "z Resolution of unpacked and valid neuro tracks; delta z [cm]",
92 m_neuroHWOutdz0 =
new TH1F(
"Q0NeuroHWOutZ-RecoZ",
93 "Quadrant0 z Resolution of unpacked and valid neuro tracks; delta z [cm]",
95 m_neuroHWOutdz1 =
new TH1F(
"Q1NeuroHWOutZ-RecoZ",
96 "Quadrant1 z Resolution of unpacked and valid neuro tracks; delta z [cm]",
98 m_neuroHWOutdz2 =
new TH1F(
"Q2NeuroHWOutZ-RecoZ",
99 "Quadrant2 z Resolution of unpacked and valid neuro tracks; delta z [cm]",
101 m_neuroHWOutdz3 =
new TH1F(
"Q3NeuroHWOutZ-RecoZ",
102 "Quadrant3 z Resolution of unpacked and valid neuro tracks; delta z [cm]",
104 m_neuroHWSimRecodZ =
new TH1F(
"NeuroHWSimZ-RecoZ",
105 "z Resolution of Simulated HW Tracks; delta z [cm]",
110 m_neuroHWOutZ =
new TH1F(
"NeuroHWOutZ",
111 "z distribution of unpacked and valid neuro tracks; z [cm]",
113 m_recoZ =
new TH1F(
"RecoTrackZ",
114 "z distribution of all RecoTracks; z [cm]",
116 m_recoZ_related =
new TH1F(
"RecoTrackZ_related",
117 "z distribution of all related Recotracks; z [cm]",
119 m_neuroHWOutSTTZ =
new TH1F(
"NeuroHWOutSTTZ",
120 "z distribution of unpacked and valid first not updated per event Neurotracks and p<0.7GeV; z [cm]",
122 m_neuroHWOutCosTheta =
new TH1F(
"NeuroHWOutCosTheta",
123 "cos theta distribution of unpacked and valid neuro tracks; cos(#theta) ",
125 m_neuroHWOutPhi0 =
new TH1F(
"NeuroHWOutPhi0",
126 "phi distribution of unpacked and valid neuro tracks; #phi [#circ]",
128 m_neuroHWOutP =
new TH1F(
"NeuroHWOutP",
129 "P distribution of unpacked neuro tracks; p_{T} [GeV]",
131 m_neuroHWOutPt =
new TH1F(
"NeuroHWOutPt",
132 "Pt distribution of unpacked neuro tracks; p_{T} [GeV]",
134 m_neuroHWOutm_time =
new TH1F(
"NeuroHWOutM_time",
"m_time distribution of unpacked neuro tracks; clock cycle",
136 m_neuroHWValTracksNumber =
new TH1F(
"NeuroHWValTracksNumber",
"number of valid neurotracks per event; track count",
138 m_neuroHWSector =
new TH1F(
"NeuroHWExpert",
139 "Expert of unpacked neuro tracks; Expert",
141 m_neuroHWInTSID =
new TH1F(
"NeuroHWInTSID",
"ID of incoming track segments",
143 m_neuroHWInTSIDSel =
new TH1F(
"NeuroHWInSelTSID",
"ID of selected NNT track segments",
145 m_neuroHWInCDCFE =
new TH1F(
"NeuroHWInCDCFE",
"Number of incoming CDCFE board",
147 m_neuroHWInm_time =
new TH1F(
"NeuroHWInM_time",
"m_time distribution from incoming 2dtracks; clock cycle",
149 m_neuroHWIn2DTracksNumber =
new TH1F(
"NeuroHWIn2DTracksNumber",
"number of incoming 2dtracks per event; track count",
151 m_neuroHWValTSCountAx =
new TH1F(
"NeuroHWValTSCountAx",
"Number of axial TS related to a valid NNTrack", 6, 0, 6);
152 m_neuroHWValTSCountSt =
new TH1F(
"NeuroHWValTSCountSt",
"Number of stereo TS related to a valid NNTrack", 5, 0, 5);
156 m_neuroHWOutHwSimdZ =
new TH1F(
"NeuroHWOutZ-NeuroHWSimZ",
157 "dz Distribution of Valid Neuro Tracks and Simulated HW Tracks; z [cm]",
159 m_neuroHWSimZ =
new TH1F(
"NeuroHWSimZ",
160 "z Distribution of Simulated HW Tracks; z [cm]",
162 m_neuroHWSimCosTheta =
new TH1F(
"NeuroHWSimCosTheta",
163 "cos theta Distribution of Simulated HW Tracks; cos(#theta) ",
165 m_errcount = m_errdict.size();
166 m_neuroErrors =
new TH1F(
"Neurotrigger-Errors",
"Errors in the Neuro Hardware", m_errcount, 0, m_errcount);
224 m_neuroHWOutdzall->Reset();
225 m_neuroHWOutdz0->Reset();
226 m_neuroHWOutdz1->Reset();
227 m_neuroHWOutdz2->Reset();
228 m_neuroHWOutdz3->Reset();
229 m_neuroHWSimRecodZ->Reset();
233 m_neuroHWOutZ->Reset();
235 m_recoZ_related->Reset();
236 m_neuroHWOutSTTZ->Reset();
237 m_neuroHWOutCosTheta->Reset();
238 m_neuroHWOutPhi0->Reset();
239 m_neuroHWOutPt->Reset();
240 m_neuroHWOutP->Reset();
241 m_neuroHWOutm_time->Reset();
242 m_neuroHWValTracksNumber->Reset();
243 m_neuroHWSector->Reset();
244 m_neuroHWInTSID->Reset();
245 m_neuroHWInTSIDSel->Reset();
246 m_neuroHWInCDCFE->Reset();
247 m_neuroHWInm_time->Reset();
248 m_neuroHWIn2DTracksNumber->Reset();
252 m_neuroHWOutHwSimdZ->Reset();
253 m_neuroHWSimZ->Reset();
254 m_neuroHWSimCosTheta->Reset();
255 m_neuroErrors->Reset();
256 for (
unsigned i = 0; i < m_errcount; ++i) {
257 m_neuroErrors->GetXaxis()->SetBinLabel(i + 1, m_errdict[i].c_str());
264 B2DEBUG(150,
"No unpacked TS found, skipping event.");
281void CDCTriggerNeuroDQMOnlineModule::fillHWPlots()
284 unsigned valtrackcount = 0;
289 m_neuroHWInTSID->Fill(hit.getSegmentID());
290 m_neuroHWInCDCFE->Fill((
int)(std::roundf(hit.getSegmentID()) * 2 + 8));
291 m_neuroHWInCDCFE->Fill((
int)(std::roundf(hit.getSegmentID()) * 2 + 9));
294 m_neuroHWInTSIDSel->Fill(hit.getSegmentID());
300 bool firsttrack =
true;
302 bool valtrack =
false;
304 valtrack = neuroHWTrack.getValidStereoBit();
306 B2WARNING(
"HWTrack doesn't have 'valid bit', get it from relations now ...");
313 if (ts.getISuperLayer() % 2 == 0) {
319 m_neuroHWValTSCountAx->Fill(nTsAx);
320 m_neuroHWValTSCountSt->Fill(nTsSt);
322 neuroHWTrack.setQualityVector(256);
325 neuroHWTrack.setQualityVector(512);
328 m_neuroHWOutZ->Fill(neuroHWTrack.getZ0());
329 m_neuroHWOutCosTheta->Fill(copysign(1.0,
330 neuroHWTrack.getCotTheta()) /
sqrt(1. / (neuroHWTrack.getCotTheta()*neuroHWTrack.getCotTheta())));
331 double phinorm = neuroHWTrack.getPhi0() * 180. / M_PI;
332 if (phinorm < 0.) {phinorm += 360.;}
333 m_neuroHWOutPhi0->Fill(phinorm);
334 m_neuroHWOutPt->Fill(neuroHWTrack.getPt());
335 float momentum = neuroHWTrack.getPt() / sin(acos(neuroHWTrack.getCotTheta() /
sqrt(1 + neuroHWTrack.getCotTheta() *
336 neuroHWTrack.getCotTheta())));
337 m_neuroHWOutP->Fill(momentum);
338 if (momentum < 0.7 && firsttrack && neuroHWTrack.getFoundOldTrack()[0] ==
false) {
339 m_neuroHWOutSTTZ->Fill(neuroHWTrack.getZ0());
343 m_neuroHWOutm_time->Fill(neuroHWTrack.getTime());
348 m_neuroHWInm_time->Fill(twodHWTrack->
getTime());
353 CDCTriggerTrack* neuroSimTrack = neuroHWTrack.getRelatedTo<CDCTriggerTrack>(
m_simNeuroTracksName);
354 if (!neuroSimTrack) {
355 B2WARNING(
"No Simtrack related to HWTrack! This should not happen!");
358 std::vector<float> unpackedInput =
360 std::vector<float> simInput =
362 bool sameInputId =
true;
363 bool sameInputAlpha =
true;
364 bool scaleErr =
false;
365 bool missingHwTS =
false;
366 bool missingSwTS =
false;
367 bool timeErr =
false;
368 for (
unsigned ii = 0; ii < unpackedInput.size(); ii += 3) {
371 if (unpackedInput[ii] != simInput[ii]) {sameInputId =
false;}
372 if (unpackedInput[ii + 2] != simInput[ii + 2]) {sameInputAlpha =
false;}
373 if (unpackedInput[ii + 1] != simInput[ii + 1]) {timeErr =
true;}
374 if (unpackedInput[ii + 1] == 0 && simInput[ii + 1] > 0.99) {scaleErr =
true;}
375 if (simInput[ii + 1] == 0 && unpackedInput[ii + 1] > 0.99) {scaleErr =
true;}
376 if (unpackedInput[ii] == 0 && unpackedInput[ii + 1] == 0 && unpackedInput[ii + 2] == 0) {hwZero = 1;}
377 if (simInput[ii] == 0 && simInput[ii + 1] == 0 && simInput[ii + 2] == 0) {hwSimZero = 1;}
378 if (hwZero > hwSimZero) {missingSwTS =
true;}
379 if (hwZero < hwSimZero) {missingHwTS =
true;}
381 double diff = neuroHWTrack.getZ0() - neuroSimTrack->getZ0();
382 if (std::abs(diff) > 1.) {neuroHWTrack.setQualityVector(2);}
383 if (!sameInputId) {neuroHWTrack.setQualityVector(4);}
384 if (!sameInputAlpha) {neuroHWTrack.setQualityVector(8);}
385 if (scaleErr) {neuroHWTrack.setQualityVector(16);}
386 if (missingSwTS) {neuroHWTrack.setQualityVector(32);}
387 if (missingHwTS) {neuroHWTrack.setQualityVector(64);}
388 if (timeErr) {neuroHWTrack.setQualityVector(1024);}
392 unsigned qvec = neuroHWTrack.getQualityVector();
394 m_neuroErrors->Fill(m_errcount - 1);
395 for (
unsigned k = 0; k < m_errcount; k++) {
396 if (qvec & (1 << k)) {m_neuroErrors->Fill(k);}
402 m_neuroHWValTracksNumber->Fill(valtrackcount);
407void CDCTriggerNeuroDQMOnlineModule::fillSimPlots()
411 CDCTriggerTrack* neuroHWTrack =
nullptr;
412 bool valtrack =
false;
416 B2WARNING(
"SimTrack doesn't have 'valid bit', get it from relations now ...");
421 m_neuroHWSimZ->Fill(neuroSimTrack.getZ0());
422 m_neuroHWSimCosTheta->Fill(copysign(1.0,
423 neuroSimTrack.getCotTheta()) /
sqrt(1. / (neuroSimTrack.getCotTheta()*neuroSimTrack.getCotTheta())));
427 bool valhwtrack =
false;
431 B2WARNING(
"HWTrack doesn't have 'valid bit', get it from relations now ...");
435 double diff = neuroHWTrack->getZ0() - neuroSimTrack.getZ0();
436 m_neuroHWOutHwSimdZ->Fill(diff);
446 RecoTrack* recoTrack = neuroSimTrack.getRelatedFrom<RecoTrack>(
m_recoTracksName);
449 bool foundValidRep =
false;
457 genfit::MeasuredStateOnPlane state =
459 rep->extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000));
461 zTarget = state.getPos().Z();
466 foundValidRep =
true;
469 if (!foundValidRep) {
470 B2DEBUG(150,
"No valid representation found for RecoTrack, skipping.");
473 m_neuroHWSimRecodZ->Fill(neuroSimTrack.getZ0() - zTarget);
481void CDCTriggerNeuroDQMOnlineModule::makeDebugOutput()
483 StoreObjPtr<EventMetaData> eventMetaData;
484 static constexpr std::array<int, 9> nWiresInSuperLayer = {
485 160, 160, 192, 224, 256, 288, 320, 352, 384
490 std::vector<TSLine> hwtsoutput;
492 if (xhit.getISuperLayer() % 2 == 0) {
497 int iSL = xhit.getISuperLayer();
498 int iTS = xhit.getIWire();
499 int nwires = nWiresInSuperLayer[ iSL ];
506 int tsIDInTracker = iTS - nwires * xhit.getQuadrant() / 4;
507 if (tsIDInTracker < 0) {
508 tsIDInTracker += nwires;
512 + padto(std::to_string(xhit.getISuperLayer()), 2) +
", "
513 + padto(std::to_string(xhit.getQuadrant()), 1) +
", "
514 + padto(std::to_string(xhit.getSegmentID()), 4) +
", "
515 + padto(std::to_string(xhit.getIWire()), 5) +
", "
516 + padto(std::to_string(xhit.getPriorityPosition()), 2) +
", "
517 + padto(std::to_string(xhit.getLeftRight()), 2) +
", "
518 + padto(std::to_string(xhit.priorityTime()), 4) +
", "
519 + padto(std::to_string(xhit.foundTime()), 3) +
", "
520 + padto(std::to_string(tsIDInTracker), 4) +
") | ";
522 unsigned count2d = 0;
526 l.strline += std::to_string(count2d);
532 unsigned counthwn = 0;
536 if (track.getValidStereoBit()) {
537 l.strline += std::to_string(counthwn);
547 unsigned countswn = 0;
551 if (track.getValidStereoBit()) {
552 l.strline += std::to_string(countswn);
563 unsigned countreco = 0;
566 bool related =
false;
568 if (&ts == &xhit) {related =
true;}
571 l.strline += std::to_string(countreco);
581 std::string axhw = std::to_string(axhwts) +
" / " + std::to_string(sthwts);
582 std::string hwtsstring =
"(SL, Q, SID , WID , PP, LR, pT , fT , TSID) | HWNNIn2D | HWNeuro | SWNeuro | ";
584 B2DEBUG(10, padright(
" ", 100));
585 B2DEBUG(10,
"----------------------------------------------------------------------------------------------------");
586 B2DEBUG(10, padright(
" ", 100));
587 std::string experimentstring =
"Experiment " + std::to_string(eventMetaData->getExperiment()) +
" Run " +
588 std::to_string(eventMetaData->getRun()) +
" Event " + std::to_string(eventMetaData->getEvent());
589 B2DEBUG(10, padright(experimentstring, 100));
590 B2DEBUG(10, padright(
" ", 100));
591 B2DEBUG(10, padright(
" ", 100));
592 B2DEBUG(10, padright(
"Number of NN HW TS (Axial/Stereo): ", 40) << padright(axhw, 60));
593 B2DEBUG(10, padright(
"Number of HW 2DFinderTracks: ", 40) << padright(std::to_string(
m_unpacked2DTracks.getEntries()),
598 std::stringstream strpt;
599 std::stringstream stromega;
600 std::stringstream strphi;
601 strpt << std::fixed << std::setprecision(2) << ltrack.getPt();
602 stromega << std::fixed << std::setprecision(2) << ltrack.getOmega();
603 strphi << std::fixed << std::setprecision(2) << (ltrack.getPhi0() * 180. / M_PI);
604 std::string trs =
" HW2DFinderTrack Nr. " + std::to_string(f2dtrn) +
" (pt, omega, phi) = ";
605 trs += padto(strpt.str(), 6) +
", " + padto(stromega.str(), 6) +
", " + padto(strphi.str(), 6) +
")";
606 B2DEBUG(15, padright(trs, 100));
608 B2DEBUG(10, padright(
"Number of HW NNInput2DFinderTracks: ",
613 std::stringstream strpt;
614 std::stringstream stromega;
615 std::stringstream strphi;
616 strpt << std::fixed << std::setprecision(2) << ltrack.getPt();
617 stromega << std::fixed << std::setprecision(2) << ltrack.getOmega();
618 strphi << std::fixed << std::setprecision(2) << (ltrack.getPhi0() * 180. / M_PI);
619 std::string trs =
" HWNeuroInput2DTrack Nr. " + std::to_string(n2dtrn) +
" (pt, omega, phi) = ";
620 trs += padto(strpt.str(), 6) +
", " + padto(stromega.str(), 6) +
", " + padto(strphi.str(), 6) +
", " +
")";
621 B2DEBUG(15, padright(trs, 100));
623 B2DEBUG(10, padright(
"Number of HW NeuroTracks: ",
628 std::stringstream strpt;
629 std::stringstream stromega;
630 std::stringstream strphi;
631 std::stringstream strtheta;
632 std::stringstream strz;
633 std::stringstream hwomega;
634 std::stringstream hwphi;
635 std::stringstream hwtheta;
636 std::stringstream hwz;
637 strpt << std::fixed << std::setprecision(2) << ltrack.getPt();
638 stromega << std::fixed << std::setprecision(2) << ltrack.getOmega();
639 strphi << std::fixed << std::setprecision(2) << (ltrack.getPhi0() * 180. / M_PI);
640 strtheta << std::fixed << std::setprecision(2) << (ltrack.getDirection().Theta() * 180. / M_PI);
641 strz << std::fixed << std::setprecision(2) << ltrack.getZ0();
642 hwomega << std::fixed << std::setprecision(0) << ltrack.getRawOmega();
643 hwphi << std::fixed << std::setprecision(0) << ltrack.getRawPhi0();
644 hwtheta << std::fixed << std::setprecision(0) << ltrack.getRawTheta();
645 hwz << std::fixed << std::setprecision(0) << ltrack.getRawZ();
646 std::string trs =
" HWNeuroTrack Nr. " + std::to_string(hwntrn) +
" (pt,om,phi,theta,z)=(";
647 trs += padto(strpt.str(), 4) +
"," + padto(stromega.str(), 6) +
"," + padto(strphi.str(), 6) +
"," + padto(strtheta.str(),
648 6) +
"," + padto(strz.str(), 6) +
"),(x," + padto(hwomega.str(), 3) +
"," + padto(hwphi.str(), 3) +
"," + padto(hwtheta.str(),
649 3) +
"," + padto(hwz.str(), 3) +
")";
650 B2DEBUG(15, padright(trs, 100));
651 std::string infostr =
", Found old track: ( ";
652 for (
bool x : ltrack.getFoundOldTrack()) {
653 infostr += std::to_string(x);
656 infostr = padright(infostr, 50);
657 infostr +=
"Drift threshold: ( ";
658 for (
bool x : ltrack.getDriftThreshold()) {
659 infostr += std::to_string(x);
662 infostr += (ltrack.getValidStereoBit()) ?
" valid" :
" NOT valid";
663 B2DEBUG(15, padright(infostr, 100));
664 std::string infostr2 =
" std. ETF vld:";
666 infostr2 +=
", ETFT0: ";
668 infostr2 += std::to_string(
m_eventTime->getBinnedEventT0(Const::CDC));
672 infostr2 +=
", ETF in CC: ";
673 infostr2 += std::to_string(ltrack.getETF_unpacked());
674 infostr2 +=
", ETF recalculated: ";
675 infostr2 += std::to_string(ltrack.getETF_recalced());
676 B2DEBUG(15, padright(infostr2, 100));
677 std::string info2str =
" Expert Network Number: " + std::to_string(ltrack.getExpert());
678 info2str +=
", TSVector: (";
679 for (
unsigned x : ltrack.getTSVector()) {
680 info2str += std::to_string(x) +
" ";
683 info2str +=
", Quality=";
684 info2str += std::to_string(ltrack.getQualityVector());
685 B2DEBUG(15, padright(info2str, 100));
689 std::vector<float> unpackedInput =
691 std::vector<float> simInput =
693 B2DEBUG(20, padright(
" Input Vector unpacked (id, t, alpha), sim (id, t, alpha), delta (id, t, alpha):", 100));
694 for (
unsigned ii = 0; ii < unpackedInput.size(); ii += 3) {
695 std::string lla =
" " + std::to_string(ii / 3) +
")";
696 std::string llb =
" " + std::to_string(ii / 3) +
")";
697 lla +=
"(" + padright(std::to_string(unpackedInput[ii]), 8) +
" " + padright(std::to_string(unpackedInput[ii + 1]),
698 8) +
" " + padright(std::to_string(unpackedInput[ii + 2]), 8) +
"),(" + padright(std::to_string(simInput[ii]),
699 8) +
" " + padright(std::to_string(simInput[ii + 1]), 8) +
" " + padright(std::to_string(simInput[ii + 2]),
700 8) +
"),(" + padright(std::to_string(unpackedInput[ii] - simInput[ii]),
701 8) +
" " + padright(std::to_string(unpackedInput[ii + 1] - simInput[ii + 1]),
702 8) +
" " + padright(std::to_string(unpackedInput[ii + 2] - simInput[ii + 2]), 8) +
")";
703 llb +=
" (" + padright(std::to_string(
int(unpackedInput[ii] * 4096)),
704 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 1] * 4096)),
705 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 2] * 4096)),
706 8) +
"),(" + padright(std::to_string(
int(simInput[ii] * 4096)), 8) +
" " + padright(std::to_string(
int(simInput[ii + 1] * 4096)),
707 8) +
" " + padright(std::to_string(
int(simInput[ii + 2] * 4096)),
708 8) +
"),(" + padright(std::to_string(
int(unpackedInput[ii] * 4096 - simInput[ii] * 4096)),
709 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 1] * 4096 - simInput[ii + 1] * 4096)),
710 8) +
" " + padright(std::to_string(
int(unpackedInput[ii + 2] * 4096 - simInput[ii + 2] * 4096)), 8) +
")";
712 B2DEBUG(30, padright(lla, 100));
713 B2DEBUG(20, padright(llb, 100));
718 B2DEBUG(10, padright(
"Number of RecoTracks: ", 40) << padright(std::to_string(
m_RecoTracks.getEntries()), 60));
719 unsigned recotrn = 0;
721 double phi0Target = 0;
722 double invptTarget = 0;
723 double thetaTarget = 0;
726 bool foundValidRep =
false;
727 for (genfit::AbsTrackRep* rep : ltrack.getRepresentations()) {
728 if (!ltrack.wasFitSuccessful(rep))
733 genfit::MeasuredStateOnPlane state =
734 ltrack.getMeasuredStateOnPlaneClosestTo(ROOT::Math::XYZVector(0, 0, 0), rep);
735 rep->extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000));
744 phi0Target = state.getMom().Phi() * 180. / M_PI ;
745 if (phi0Target < 0.) {phi0Target = phi0Target + 360. ;}
746 invptTarget = state.getCharge() * state.getMom().Pt();
747 thetaTarget = acos(state.getMom().CosTheta()) * 180 / M_PI;
748 zTarget = state.getPos().Z();
749 d0Target = state.getPos().Perp();
754 foundValidRep =
true;
757 if (!foundValidRep) {
758 B2DEBUG(150,
"No valid representation found for RecoTrack, skipping.");
762 std::stringstream strpt;
763 std::stringstream stromega;
764 std::stringstream strphi;
765 std::stringstream strtheta;
766 std::stringstream strz;
767 strpt << std::fixed << std::setprecision(2) << invptTarget;
768 stromega << std::fixed << std::setprecision(2) << d0Target;
769 strphi << std::fixed << std::setprecision(2) << phi0Target;
770 strtheta << std::fixed << std::setprecision(2) << thetaTarget;
771 strz << std::fixed << std::setprecision(2) << zTarget;
772 std::string trs =
" RecoTrack Nr. " + std::to_string(recotrn) +
" (invpt, d0, phi, theta, z) = ";
773 trs += padto(strpt.str(), 6) +
", " + padto(stromega.str(), 6) +
", " + padto(strphi.str(), 6) +
", " + padto(strtheta.str(),
774 6) +
", " + padto(strz.str(), 6) +
")";
775 B2DEBUG(15, padright(trs, 100));
778 B2DEBUG(10, padright(
" ", 100));
779 B2DEBUG(10, padright(
" ", 100));
780 B2DEBUG(15, padright(
"Detailed information about HW TS ", 100));
781 B2DEBUG(15, padright(
" ", 100));
782 B2DEBUG(15, padright(hwtsstring, 100));
783 for (
auto x : hwtsoutput) {
784 B2DEBUG(15, padright(x.strline, 100));
786 B2DEBUG(15, padright(
" ", 100));
792void CDCTriggerNeuroDQMOnlineModule::fillRecoPlots()
796 bool foundValidRep =
false;
803 genfit::MeasuredStateOnPlane state =
805 rep->extrapolateToLine(state, TVector3(0, 0, -1000), TVector3(0, 0, 2000));
806 zTarget = state.getPos().Z();
811 foundValidRep =
true;
814 if (!foundValidRep) {
815 B2DEBUG(150,
"No valid representation found for RecoTrack, skipping.");
818 m_recoZ->Fill(zTarget);
822 if (!neuroHWTrack) {
continue;}
823 bool valtrack =
false;
830 B2WARNING(
"HWTrack doesn't have 'valid bit', get it from relations now ...");
833 if (!valtrack) {
continue;}
841 m_recoZ_related->Fill(zTarget);
842 m_neuroHWOutdzall->Fill(neuroHWTrack->getZ0() - zTarget);
845 B2WARNING(
"Neurotrack quadrant was not set!");
848 m_neuroHWOutdz0->Fill(neuroHWTrack->getZ0() - zTarget);
851 m_neuroHWOutdz1->Fill(neuroHWTrack->getZ0() - zTarget);
854 m_neuroHWOutdz2->Fill(neuroHWTrack->getZ0() - zTarget);
857 m_neuroHWOutdz3->Fill(neuroHWTrack->getZ0() - zTarget);
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()....
Combination of several CDCHits to a track segment hit for the trigger.
float getTime() const
get the track found time
bool getValidStereoBit() const
returns true, if at least 3 stereo ts were found
short getQuadrant() const
get the quadrant
HistoModule()
Constructor.
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...
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.
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.