11#include <framework/core/HistoModule.h>
13#include <framework/datastore/StoreArray.h>
14#include <framework/datastore/StoreObjPtr.h>
15#include <trg/cdc/dataobjects/CDCTriggerTrack.h>
16#include <trg/cdc/dataobjects/CDCTriggerSegmentHit.h>
17#include <trg/cdc/dataobjects/CDCTriggerMLPInput.h>
18#include <tracking/dataobjects/RecoTrack.h>
19#include <framework/dataobjects/BinnedEventT0.h>
51 typedef std::vector<TSLine> TSLines;
56 void event()
override;
61 void makeDebugOutput();
81 unsigned sl = hit.getISuperLayer();
82 if (sl % 2 == 1) pattern |= (1 << ((sl - 1) / 2));
100 std::string padto(std::string s,
unsigned l)
103 s.insert(s.begin(), l - s.size(),
' ');
107 std::string padright(std::string s,
unsigned l)
110 s.insert(s.end(), l - s.size(),
' ');
114 bool have_relation(
const CDCTriggerTrack& track,
const CDCTriggerSegmentHit& hit, std::string& arrayname)
116 bool related =
false;
117 for (
const CDCTriggerSegmentHit& ts : track.getRelationsTo<CDCTriggerSegmentHit>(arrayname)) {
118 if (&ts == &hit) {related =
true;}
122 void sorted_insert(TSLines& lines, TSLine& line, std::string& arrayname, std::string& firstsortarray, std::string& secondsortarray)
124 bool inserted =
false;
125 bool related =
false;
126 TSLines::iterator it = lines.begin();
127 for (
const CDCTriggerTrack& track : line.hit->getRelationsFrom<CDCTriggerTrack>(firstsortarray)) {
129 for (TSLines::iterator i = lines.begin(); i < lines.end(); ++i) {
130 if (i->hit->getISuperLayer() % 2 != line.hit->getISuperLayer() % 2) {
133 if (have_relation(track, *(i->hit), arrayname)) {
136 if (i->hit->getSegmentID() > line.hit->getSegmentID()) {
145 if (!inserted) {++it; }
146 lines.insert(it, line);
148 for (
const CDCTriggerTrack& track : line.hit->getRelationsFrom<CDCTriggerTrack>(secondsortarray)) {
150 for (TSLines::iterator i = it; i < lines.end(); ++i) {
151 if (i->hit->getISuperLayer() % 2 != line.hit->getISuperLayer() % 2) {
154 if (have_relation(track, *(i->hit), arrayname)) {
157 if (i->hit->getSegmentID() > line.hit->getSegmentID()) {
166 if (!inserted) {++it; }
167 lines.insert(it, line);
169 lines.push_back(line);
225 TH1F* m_neuroHWOutdzall =
nullptr;
226 TH1F* m_neuroHWOutdz0 =
nullptr;
227 TH1F* m_neuroHWOutdz1 =
nullptr;
228 TH1F* m_neuroHWOutdz2 =
nullptr;
229 TH1F* m_neuroHWOutdz3 =
nullptr;
230 TH1F* m_neuroHWSimRecodZ =
nullptr;
232 TH1F* m_neuroHWOutZ =
nullptr;
233 TH1F* m_recoZ =
nullptr;
234 TH1F* m_recoZ_related =
nullptr;
235 TH1F* m_neuroHWOutSTTZ =
nullptr;
236 TH1F* m_neuroHWOutCosTheta =
nullptr;
237 TH1F* m_neuroHWOutPhi0 =
nullptr;
238 TH1F* m_neuroHWOutPt =
nullptr;
239 TH1F* m_neuroHWOutP =
nullptr;
240 TH1F* m_neuroHWOutm_time =
nullptr;
241 TH1F* m_neuroHWValTracksNumber =
nullptr;
242 TH1F* m_neuroHWSector =
nullptr;
243 TH1F* m_neuroHWInTSID =
nullptr;
244 TH1F* m_neuroHWInTSIDSel =
nullptr;
245 TH1F* m_neuroHWInCDCFE =
nullptr;
246 TH1F* m_neuroHWInm_time =
nullptr;
247 TH1F* m_neuroHWIn2DTracksNumber =
nullptr;
249 TH1F* m_neuroHWOutHwSimdZ =
nullptr;
250 TH1F* m_neuroHWSimZ =
nullptr;
251 TH1F* m_neuroHWSimCosTheta =
nullptr;
252 TH1F* m_neuroErrors =
nullptr;
253 TH1F* m_neuroHWValTSCountAx =
nullptr;
254 TH1F* m_neuroHWValTSCountSt =
nullptr;
256 unsigned m_errcount = 0;
257 std::vector<std::string> m_errdict{
"Not All HWTrack ATS in 2DInTrack",
"|HW-SW| > 1cm",
"Delta Input IDs not all 0",
"Delta Input Alphas not all 0",
"Drifttime Overflow / Scaling Error",
"TS only in HW",
"TS only in SW",
"Multiple ET per Track",
"<4 related Axial TS",
"<3 related Stereo TS",
"Drift Time diff",
"Eventcounter"};
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 condFill(TH1F *histo, float value)
Fill a histogram only with non-zero values.
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.
Track created by the CDC trigger.
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
Accessor to arrays stored in the data store.
Type-safe access to single objects in the data store.
Abstract base class for different kinds of events.