Belle II Software  release-08-01-10
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 
22 using namespace std;
23 using boost::format;
24 using namespace Belle2;
25 
26 //-----------------------------------------------------------------
27 // Register the Module
28 //-----------------------------------------------------------------
29 REG_MODULE(PXDRawDQMCorr);
30 
31 
32 //-----------------------------------------------------------------
33 // Implementation
34 //-----------------------------------------------------------------
35 
36 PXDRawDQMCorrModule::PXDRawDQMCorrModule() : HistoModule(), m_storeRawHits()
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.