12 #include <klm/bklm/modules/bklmSimHistogrammer/BKLMSimHistogrammerModule.h>
15 #include <klm/dataobjects/bklm/BKLMSimHit.h>
16 #include <klm/dataobjects/KLMDigit.h>
19 #include <framework/dataobjects/EventMetaData.h>
20 #include <framework/datastore/StoreArray.h>
21 #include <framework/datastore/StoreObjPtr.h>
42 m_hSimHitPerChannelLayer(
nullptr),
44 m_hSimHitPhiRPC(
nullptr),
45 m_bgSourcePerLayer(
nullptr),
46 m_bgSourcePerLayer2D(
nullptr),
47 m_bgSourceVsPhi(
nullptr),
48 m_bgSourceVsTheta(
nullptr),
50 m_bgSource2D(
nullptr),
51 m_hSimHitPhiScinti(
nullptr),
52 m_hSimHitThetaRPC(
nullptr),
53 m_hSimHitThetaScinti(
nullptr),
54 m_hSimHit_layer(
nullptr),
55 m_hSimHit_layer2D(
nullptr),
56 m_hSimHitThetaPhiRPC(
nullptr),
57 m_hSimHitThetaPhiScinti(
nullptr),
62 setDescription(
"Analyzes bg");
64 addParam(
"filename", m_filename,
"Output root filename",
string(
"bg_output.root"));
65 addParam(
"realTime", m_realTime,
"Time the simulation corresponds to",
float(1.0));
70 BKLMSimHistogrammerModule::~BKLMSimHistogrammerModule()
74 void BKLMSimHistogrammerModule::initialize()
81 m_file =
new TFile(m_filename.c_str(),
"recreate");
83 m_hEvt =
new TH1D(
"hEvts",
"hEvts", 10001, -1, 10000);
85 m_hSimHitPhiRPC =
new TH1D(
"simhitPhiRPC",
"simHitPhiRPC", 100, -1 * TMath::Pi(), 1 * TMath::Pi());
86 m_hSimHitPhiScinti =
new TH1D(
"simhitPhiScinti",
"simHitPhiScinti", 100, -1 * TMath::Pi(), 1 * TMath::Pi());
87 m_hSimHitThetaRPC =
new TH1D(
"simhitThetaRPC",
"simHitThetaRPC", 100, 0, 1 * TMath::Pi());
88 m_hSimHitThetaScinti =
new TH1D(
"simhitThetaScinti",
"simHitThetaScinti", 100, 0, 1 * TMath::Pi());
90 m_hSimHit_layer =
new TH1I(
"simHitLayer",
"simHitLayer", 16, 0, 15);
91 m_hSimHit_layer2D =
new TH1I(
"simHitLayer2D",
"simHitLayer2D", 16, 0, 15);
93 m_bgSourcePerLayer =
new TH2D(
"bgSourcPerLayer",
"bgSourcePerLayer", 21, 0, 20, 16, 0, 15);
94 m_bgSourcePerLayer2D =
new TH2D(
"bgSourcPerLayer2D",
"bgSourcePerLayer2D", 21, 0, 20, 16, 0, 15);
95 m_bgSourceVsPhi =
new TH2D(
"bgSourceVsPhi",
"bgSourceVsPhi", 100, -1 * TMath::Pi(), TMath::Pi(), 21, 0, 20);
96 m_bgSourceVsTheta =
new TH2D(
"bgSourceVsTheta",
"bgSourceVsTheta", 100, 0, TMath::Pi(), 21, 0, 20);
98 m_bgSource =
new TH1D(
"bgSource",
"bgSource", 21, 0, 20);
99 m_bgSource2D =
new TH1D(
"bgSource2D",
"bgSource2D", 21, 0, 20);
101 m_hSimHitPerChannelLayer =
new TH2D(
"posPerChannelLayer",
"posPerChannelLayer", 5000, 0, 5000, 16, 0, 15);
107 void BKLMSimHistogrammerModule::beginRun()
110 B2INFO(
"BKLMSimHistogrammer: Experiment " << evtMetaData->getExperiment() <<
" run " << evtMetaData->getRun());
113 void BKLMSimHistogrammerModule::event()
119 int nSimHit = simHits.getEntries();
127 m_weight = 1.0 / m_realTime;
129 cout <<
"real time " << m_realTime <<
" weight: " << m_weight << endl;
131 int n2DHits = hits2D.getEntries();
132 int n1DHits = hits1D.getEntries();
133 cout <<
"we have " << nSimHit <<
" sim hits " << n1DHits <<
" 1D hits " << n2DHits <<
" 2D hits " << endl;
137 m_hEvt->Fill(n2DHits, m_weight);
138 for (
int i = 0; i < hits1D.getEntries(); i++) {
139 cout <<
"looking at 1DHit " << i << endl;
142 for (
const auto& bklmDigit : bklmDigits) {
144 for (
const auto& simHit : relatedSimHits) {
150 cout <<
"scaledTag: " << scaledTag << endl;
228 int channel = hits1D[i]->getSection() * 840 + hits1D[i]->getSector() * 105 + hits1D[i]->isPhiReadout() * 1680 +
229 hits1D[i]->getStripAve();
230 m_hSimHitPerChannelLayer->Fill(channel, hits1D[i]->getLayer(), m_weight);
231 m_bgSource->Fill(scaledTag, m_weight);
232 m_bgSourcePerLayer->Fill(scaledTag, hits1D[i]->getLayer(), m_weight);
233 cout <<
"filling layer with tag: " << scaledTag <<
" and layer " << hits1D[i]->getLayer() << endl;
236 for (
int i = 0; i < hits2D.getEntries(); i++) {
238 TVector3 gHitPos = hits2D[i]->getGlobalPosition();
240 for (
const auto& hit1d : related1DHits) {
242 for (
const auto& bklmDigit : bklmDigits) {
244 for (
const auto& simHit : relatedSimHits) {
252 m_bgSourcePerLayer2D->Fill(scaledTag, hits2D[i]->getLayer(), m_weight);
253 m_bgSource2D->Fill(scaledTag, m_weight);
254 m_bgSourceVsTheta->Fill(gHitPos.Theta(), scaledTag, m_weight);
255 m_bgSourceVsPhi->Fill(gHitPos.Phi(), scaledTag, m_weight);
290 if (nSimHit == 0)
return;
291 for (
int i = 0; i < n2DHits; i++) {
294 if (hit2D->
inRPC()) {
295 m_hSimHitPhiRPC->Fill(gHitPos.Phi(), m_weight);
296 m_hSimHitThetaRPC->Fill(gHitPos.Theta(), m_weight);
298 m_hSimHitPhiScinti->Fill(gHitPos.Phi(), m_weight);
299 m_hSimHitThetaScinti->Fill(gHitPos.Theta(), m_weight);
306 for (
int h = 0; h < nSimHit; ++h) {
311 if (bklmMCParticles.
size() > 0) {
312 cout <<
"found MC particle!" << endl;
314 cout <<
"got " << bklmMCParticlesTo.
size() <<
" as relation to " << endl;
373 void BKLMSimHistogrammerModule::endRun()
377 void BKLMSimHistogrammerModule::terminate()