Belle II Software development
PXDRawDQMCorrModule.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include "pxd/modules/pxdDQM/PXDRawDQMCorrModule.h"
10
11#include <framework/core/HistoModule.h>
12
13#include <framework/datastore/StoreArray.h>
14
15#include <vector>
16#include <boost/format.hpp>
17
18#include "TH1F.h"
19#include "TH2F.h"
20#include "TDirectory.h"
21
22using namespace std;
23using boost::format;
24using namespace Belle2;
25
26//-----------------------------------------------------------------
27// Register the Module
28//-----------------------------------------------------------------
29REG_MODULE(PXDRawDQMCorr);
30
31
32//-----------------------------------------------------------------
33// Implementation
34//-----------------------------------------------------------------
35
37{
38 //Set module properties
39 setDescription("PXD DQM Correlation module");
40 setPropertyFlags(c_ParallelProcessingCertified); // specify this flag if you need parallel processing
41 addParam("PXDRawHitsName", m_storeRawHitsName, "The name of the StoreArray of PXDRawHits to be processed", string(""));
42 addParam("histogramDirectoryName", m_histogramDirectoryName, "Name of the directory where histograms will be placed",
43 std::string("pxdrawcorr"));
44}
45
46
47//------------------------------------------------------------------
48// Function to define histograms
49//-----------------------------------------------------------------
50
52{
53 // Create a separate histogram directory and cd into it.
54 TDirectory* oldDir = gDirectory;
55 if (m_histogramDirectoryName != "") {
56 oldDir->mkdir(m_histogramDirectoryName.c_str());
57 oldDir->cd(m_histogramDirectoryName.c_str());
58 }
59 //----------------------------------------------------------------
60
61 int nPixelsU1 = 0;
62 int nPixelsV1 = 0;
63 int nPixelsU2 = 250;
64 int nPixelsV2 = 768;
65 m_CorrelationU = new TH2F("RawCorrelationU", "Raw Correlation of U;U1/cells;U2/cells", nPixelsU1 + nPixelsU2, nPixelsU1, nPixelsU2,
66 nPixelsU1 + nPixelsU2, nPixelsU1, nPixelsU2);
67 m_CorrelationV = new TH2F("RawCorrelationV", "Raw Correlation of V;V1/cells;V2/cells", nPixelsV1 + nPixelsV2, nPixelsV1, nPixelsV2,
68 nPixelsV1 + nPixelsV2, nPixelsV1, nPixelsV2);
69 m_DeltaU = new TH1F("RawDeltaU", "Raw Correlation of U2-U1;Udiff/cells", 2 * nPixelsU1 + 2 * nPixelsU2, -nPixelsU2 + nPixelsU1,
70 nPixelsU2 - nPixelsU1);
71 m_DeltaV = new TH1F("RawDeltaV", "Raw Correlation of V2-V1;Vdiff/cells", 2 * nPixelsV1 + 2 * nPixelsV2, -nPixelsV2 + nPixelsV1,
72 nPixelsV2 - nPixelsV1);
73
74 m_In1CorrelationU = new TH2F("RawIn1CorrelationU", "Raw In1 Correlation of U;U1/cells;U2/cells", nPixelsU1 + nPixelsU2, nPixelsU1,
75 nPixelsU2, nPixelsU1 + nPixelsU2, nPixelsU1, nPixelsU2);
76 m_In1CorrelationV = new TH2F("RawIn1CorrelationV", "Raw In1 Correlation of V;V1/cells;V2/cells", nPixelsV1 + nPixelsV2, nPixelsV1,
77 nPixelsV2, nPixelsV1 + nPixelsV2, nPixelsV1, nPixelsV2);
78 m_In1DeltaU = new TH1F("RawIn1DeltaU", "Raw In1 Correlation of U2-U1;Udiff/cells", 2 * nPixelsU1 + 2 * nPixelsU2,
79 -nPixelsU2 + nPixelsU1, nPixelsU2 - nPixelsU1);
80 m_In1DeltaV = new TH1F("RawIn1DeltaV", "Raw In1 Correlation of V2-V1;Vdiff/cells", 2 * nPixelsV1 + 2 * nPixelsV2,
81 -nPixelsV2 + nPixelsV1, nPixelsV2 - nPixelsV1);
82
83 m_In2CorrelationU = new TH2F("RawIn2CorrelationU", "Raw In2 Correlation of U;U1/cells;U2/cells", nPixelsU1 + nPixelsU2, nPixelsU1,
84 nPixelsU2, nPixelsU1 + nPixelsU2, nPixelsU1, nPixelsU2);
85 m_In2CorrelationV = new TH2F("RawIn2CorrelationV", "Raw In2 Correlation of V;V1/cells;V2/cells", nPixelsV1 + nPixelsV2, nPixelsV1,
86 nPixelsV2, nPixelsV1 + nPixelsV2, nPixelsV1, nPixelsV2);
87 m_In2DeltaU = new TH1F("RawIn2DeltaU", "Raw In2 Correlation of U2-U1;Udiff/cells", 2 * nPixelsU1 + 2 * nPixelsU2,
88 -nPixelsU2 + nPixelsU1, nPixelsU2 - nPixelsU1);
89 m_In2DeltaV = new TH1F("RawIn2DeltaV", "Raw In2 Correlation of V2-V1;Vdiff/cells", 2 * nPixelsV1 + 2 * nPixelsV2,
90 -nPixelsV2 + nPixelsV1, nPixelsV2 - nPixelsV1);
91
92 // cd back to root directory
93 oldDir->cd();
94}
95
96
98{
99 // Register histograms (calls back defineHisto)
100 REG_HISTOGRAM
101
103}
104
106{
107 // Just to make sure, reset all the histograms.
108 m_CorrelationU->Reset();
109 m_CorrelationV->Reset();
110 m_DeltaU->Reset();
111 m_DeltaV->Reset();
112
113 m_In1CorrelationU->Reset();
114 m_In1CorrelationV->Reset();
115 m_In1DeltaU->Reset();
116 m_In1DeltaV->Reset();
117
118 m_In2CorrelationU->Reset();
119 m_In2CorrelationV->Reset();
120 m_In2DeltaU->Reset();
121 m_In2DeltaV->Reset();
122
123}
124
125
127{
128 for (auto& hit1 : m_storeRawHits) {
129 int iPlane1 = hit1.getSensorID().getLayerNumber();
130 if (iPlane1 == 0) {
131 for (auto& hit2 : m_storeRawHits) {
132 int iPlane2 = hit2.getSensorID().getLayerNumber();
133 if (iPlane2 == 1) {
134 m_CorrelationU->Fill(hit1.getColumn(), hit2.getColumn());
135 m_CorrelationV->Fill(hit1.getRow(), hit2.getRow());
136 m_DeltaU->Fill(hit2.getColumn() - hit1.getColumn());
137 m_DeltaV->Fill(hit2.getRow() - hit1.getRow());
138 } else { // iPlane2=0
139 if (hit1.getColumn() != hit2.getColumn()) {
140 m_In1CorrelationU->Fill(hit1.getColumn(), hit2.getColumn());
141 m_In1DeltaU->Fill(hit2.getColumn() - hit1.getColumn());
142 }
143 if (hit1.getRow() != hit2.getRow()) {
144 m_In1CorrelationV->Fill(hit1.getRow(), hit2.getRow());
145 m_In1DeltaV->Fill(hit2.getRow() - hit1.getRow());
146 }
147 }
148 }
149 } else { // index 1=1
150 for (auto& hit2 : m_storeRawHits) {
151 int iPlane2 = hit2.getSensorID().getLayerNumber();
152 if (iPlane2 == 1) {
153 if (hit1.getColumn() != hit2.getColumn()) {
154 m_In2CorrelationU->Fill(hit1.getColumn(), hit2.getColumn());
155 m_In2DeltaU->Fill(hit2.getColumn() - hit1.getColumn());
156 }
157 if (hit1.getRow() != hit2.getRow()) {
158 m_In2CorrelationV->Fill(hit1.getRow(), hit2.getRow());
159 m_In2DeltaV->Fill(hit2.getRow() - hit1.getRow());
160 }
161 }
162 }
163 }
164 }
165}
HistoModule.h is supposed to be used instead of Module.h for the modules with histogram definitions t...
Definition: HistoModule.h:29
void setDescription(const std::string &description)
Sets the description of the module.
Definition: Module.cc:214
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
Definition: Module.cc:208
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
Definition: Module.h:80
TH2F * m_In1CorrelationU
Correlation Sensor 1 vs 2.
TH2F * m_CorrelationV
Correlation Sensor 1 vs 2.
void initialize() override final
Initialize.
TH1F * m_In1DeltaV
Correlation Sensor 1 vs 2.
TH2F * m_In2CorrelationV
Correlation Sensor 1 vs 2.
TH1F * m_In2DeltaV
Correlation Sensor 1 vs 2.
void defineHisto() override final
Histogram definitions such as TH1(), TH2()TNtuple(), TTree()....
std::string m_storeRawHitsName
PXDRawHits StoreArray name.
void event() override final
Event.
TH2F * m_In1CorrelationV
Correlation Sensor 1 vs 2.
std::string m_histogramDirectoryName
Name of the histogram directory in ROOT file.
TH1F * m_In1DeltaU
Correlation Sensor 1 vs 2.
TH2F * m_CorrelationU
Correlation Sensor 1 vs 2.
TH1F * m_DeltaV
Correlation Sensor 1 vs 2.
void beginRun() override final
Begin run.
TH1F * m_DeltaU
Correlation Sensor 1 vs 2.
StoreArray< PXDRawHit > m_storeRawHits
Storearray for raw pixels
TH2F * m_In2CorrelationU
Correlation Sensor 1 vs 2.
TH1F * m_In2DeltaU
Correlation Sensor 1 vs 2.
void addParam(const std::string &name, T &paramVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
Definition: Module.h:560
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Definition: Module.h:650
Abstract base class for different kinds of events.
STL namespace.