11 #include <svd/modules/svdDQM/SVDDQMInjectionModule.h>
12 #include "TDirectory.h"
31 setDescription(
"Monitor SVD Occupancy after Injection");
32 setPropertyFlags(c_ParallelProcessingCertified);
33 addParam(
"histogramDirectoryName", m_histogramDirectoryName,
"Name of the directory where histograms will be placed",
34 std::string(
"SVDInjection"));
35 addParam(
"ShaperDigits", m_SVDShaperDigitsName,
"Name of SVD ShaperDigits to count occupancy", std::string(
""));
38 void SVDDQMInjectionModule::defineHisto()
40 TDirectory* oldDir = gDirectory;
41 if (m_histogramDirectoryName !=
"") {
42 oldDir->mkdir(m_histogramDirectoryName.c_str());
43 oldDir->cd(m_histogramDirectoryName.c_str());
46 m_hOccAfterInjLER =
new TH1F(
"SVDOccInjLER",
"SVDOccInjLER/Time;Time in #mus;Count/Time (5 #mus bins)", 4000, 0, 20000);
47 m_hOccAfterInjHER =
new TH1F(
"SVDOccInjHER",
"SVDOccInjHER/Time;Time in #mus;Count/Time (5 #mus bins)", 4000, 0, 20000);
48 m_hTrgOccAfterInjLER =
new TH1F(
"SVDTrgOccInjLER",
"SVDTrgOccInjLER/Time;Time in #mus;Triggers/Time (5 #mus bins)", 4000, 0,
50 m_hTrgOccAfterInjHER =
new TH1F(
"SVDTrgOccInjHER",
"SVDTrgOccInjHER/Time;Time in #mus;Triggers/Time (5 #mus bins)", 4000, 0,
52 m_hMaxOccAfterInjLER =
new TH1F(
"SVDMaxOccInjLER",
"SVDMaxOccInjLER/Time;Time in #mus;Triggers/Time (5 #mus bins)", 4000, 0,
54 m_hMaxOccAfterInjHER =
new TH1F(
"SVDMaxOccInjHER",
"SVDMaxOccInjHER/Time;Time in #mus;Triggers/Time (5 #mus bins)", 4000, 0,
56 m_hBunchNumVSNStrips =
new TH2F(
"SVDBunchNumVSNStrips",
"SVDBunchNumVSNStrips;Bunch No.;Number of fired strips", 1280, 0, 1280, 10,
65 void SVDDQMInjectionModule::initialize()
69 m_rawTTD.isOptional();
70 m_digits.isOptional(m_SVDShaperDigitsName);
73 void SVDDQMInjectionModule::beginRun()
76 m_hOccAfterInjLER->Reset();
77 m_hOccAfterInjHER->Reset();
78 m_hTrgOccAfterInjLER->Reset();
79 m_hTrgOccAfterInjHER->Reset();
80 m_hMaxOccAfterInjLER->Reset();
81 m_hMaxOccAfterInjHER->Reset();
82 m_hBunchNumVSNStrips->Reset();
85 void SVDDQMInjectionModule::event()
88 if (!m_rawTTD.isValid()) {
89 B2WARNING(
"Missing RawFTSW, SVDDQMInjection is skipped.");
93 if (!m_digits.isValid()) {
94 B2WARNING(
"Missing " << m_SVDShaperDigitsName <<
", SVDDQMInjection is skipped.");
99 for (
auto& it : m_rawTTD) {
100 B2DEBUG(29,
"TTD FTSW : " << hex << it.GetTTUtime(0) <<
" " << it.GetTTCtime(0) <<
" EvtNr " << it.GetEveNo(0) <<
" Type " <<
101 (it.GetTTCtimeTRGType(0) & 0xF) <<
" TimeSincePrev " << it.GetTimeSincePrevTrigger(0) <<
" TimeSinceInj " <<
102 it.GetTimeSinceLastInjection(0) <<
" IsHER " << it.GetIsHER(0) <<
" Bunch " << it.GetBunchNumber(0));
105 auto difference = it.GetTimeSinceLastInjection(0);
107 if (difference != 0x7FFFFFFF) {
108 unsigned int allV = 0;
109 unsigned int allU = 0;
110 unsigned int nHitsL3v = 0;
111 unsigned int nHitsL3u = 0;
112 for (
auto& p : m_digits) {
113 if (p.isUStrip()) allU++;
116 if (p.getSensorID().getLayerNumber() != 3)
continue;
122 B2DEBUG(29,
"L3 V = " << nHitsL3v <<
", L3 U = " << nHitsL3u <<
", all V = " << allV <<
", all U = " << allU);
125 unsigned int counter = nHitsL3u;
127 float diff2 = difference / 127.;
128 if (it.GetIsHER(0)) {
129 m_hOccAfterInjHER->Fill(diff2, counter);
130 m_hTrgOccAfterInjHER->Fill(diff2);
131 auto bin = m_hMaxOccAfterInjHER->FindBin(diff2);
132 auto value = m_hMaxOccAfterInjHER->GetBinContent(bin);
133 if (counter > value) m_hMaxOccAfterInjHER->SetBinContent(bin, counter);
135 m_hOccAfterInjLER->Fill(diff2, counter);
136 m_hTrgOccAfterInjLER->Fill(diff2);
137 auto bin = m_hMaxOccAfterInjLER->FindBin(diff2);
138 auto value = m_hMaxOccAfterInjLER->GetBinContent(bin);
139 if (counter > value) m_hMaxOccAfterInjLER->SetBinContent(bin, counter);
142 m_hBunchNumVSNStrips->Fill(it.GetBunchNumber(0), allU + allV);