9#include <tracking/modules/roiFinding/svd/SVDROIFinderAnalysisDataModule.h>
10#include <framework/datastore/StoreArray.h>
11#include <framework/logging/Logger.h>
13#include <mdst/dataobjects/Track.h>
14#include <tracking/dataobjects/RecoTrack.h>
15#include <tracking/dataobjects/ROIid.h>
16#include <tracking/dataobjects/SVDIntercept.h>
17#include <svd/dataobjects/SVDShaperDigit.h>
34 , m_recoTrackListName()
35 , m_SVDInterceptListName()
37 , m_rootFilePtr(nullptr)
39 , m_writeToRoot(false)
43 , m_h1Track_pt(nullptr)
44 , m_h1Track_phi(nullptr)
45 , m_h1Track_lambda(nullptr)
46 , m_h1Track_cosTheta(nullptr)
47 , m_h1Track_pVal(nullptr)
49 , m_h1ROItrack(nullptr)
50 , m_h1ROItrack_pt(nullptr)
51 , m_h1ROItrack_phi(nullptr)
52 , m_h1ROItrack_lambda(nullptr)
53 , m_h1ROItrack_cosTheta(nullptr)
54 , m_h1ROItrack_pVal(nullptr)
56 , m_h1GoodROItrack(nullptr)
57 , m_h1GoodROItrack_pt(nullptr)
58 , m_h1GoodROItrack_phi(nullptr)
59 , m_h1GoodROItrack_lambda(nullptr)
60 , m_h1GoodROItrack_cosTheta(nullptr)
61 , m_h1GoodROItrack_pVal(nullptr)
63 , m_h1FullROItrack(nullptr)
64 , m_h1FullROItrack_pt(nullptr)
65 , m_h1FullROItrack_phi(nullptr)
66 , m_h1FullROItrack_lambda(nullptr)
67 , m_h1FullROItrack_cosTheta(nullptr)
68 , m_h1FullROItrack_pVal(nullptr)
72 , m_h2sigmaUphi(nullptr)
73 , m_h2sigmaVphi(nullptr)
78 , m_h1GlobalTime(nullptr)
80 , m_h2ROIuMinMax(nullptr)
81 , m_h2ROIvMinMax(nullptr)
82 , m_h2ROIcenters(nullptr)
83 , m_h2GoodROIcenters(nullptr)
84 , m_h2FullROIcenters(nullptr)
85 , m_h1totROIs(nullptr)
86 , m_h1goodROIs(nullptr)
88 , m_h1effROIs(nullptr)
99 setDescription(
"This module performs the analysis of the SVDROIFinder module output ON DATA");
102 "set true if you want to save the information in a root file named by parameter 'rootFileName'",
bool(
true));
105 "fileName used for . Will be ignored if parameter 'writeToRoot' is false (standard)",
106 std::string(
"svdDataRedAnalysisData"));
109 "name of the input collection of RecoTracks", std::string(
""));
112 "name of the input collection of SVDShaperDigits", std::string(
""));
115 "name of the list of interceptions", std::string(
""));
118 "name of the list of ROIs", std::string(
""));
122 addParam(
"minPVal",
m_minPVal,
"fiducial region: minimum track P-Value",
float(0.001));
153 m_h1GlobalTime =
new TH1F(
"hGlobalTime",
"global time for SVDShaperDigits contained in ROI", 200, -100, 100);
154 m_h1PullU =
new TH1F(
"hPullU",
"U pulls for SVDShaperDigits contained in ROI", 100, -6, 6);
155 m_h1PullV =
new TH1F(
"hPullV",
"V pulls for SVDShaperDigits contained in ROI", 100, -6, 6);
156 m_h2sigmaUphi =
new TH2F(
"hsigmaUvsPhi",
"sigmaU vs phi digits in ROI", 100, -180, 180, 100, 0, 0.35);
157 m_h2sigmaVphi =
new TH2F(
"hsigmaVvsPhi",
"sigmaU vs phi digits in ROI", 100, -180, 180, 100, 0, 0.4);
158 m_h1ResidU =
new TH1F(
"hResidU",
"U resid for SVDShaperDigits contained in ROI", 100, -0.5, 0.5);
159 m_h1ResidV =
new TH1F(
"hResidV",
"V resid for SVDShaperDigits contained in ROI", 100, -0.5, 0.5);
160 m_h1SigmaU =
new TH1F(
"hSigmaU",
"sigmaU for SVDShaperDigits contained in ROI", 100, 0, 0.35);
161 m_h1SigmaV =
new TH1F(
"hSigmaV",
"sigmaV for SVDShaperDigits contained in ROI", 100, 0, 0.35);
173 m_h1totROIs =
new TH1F(
"h1TotNROIs",
"number of all ROIs", 110, 0, 110);
174 m_h1goodROIs =
new TH1F(
"h1GoodNROIs",
"number of ROIs from Good Track", 110, 0, 110);
175 m_h1okROIs =
new TH1F(
"h1OkNROIs",
"number of Good ROIs containing a SVDShaperDigit", 110, 0, 110);
176 m_h1effROIs =
new TH1F(
"h1EffSVD",
"fraction of Good ROIs containing a SVDShaperDigit", 100, 0, 1.1);
182 m_h2ROIuMinMax =
new TH2F(
"h2ROIuMinMax",
"u Min vs Max (all ROIs)", 960, -100, 860, 960, -100, 860);
183 m_h2ROIvMinMax =
new TH2F(
"h2ROIvMinMax",
"v Min vs Max (all ROIs)", 960, -100, 860, 960, -100, 860);
184 m_h2ROIcenters =
new TH2F(
"h2ROIcenters",
"ROI Centers", 768, 0, 768, 512, 0, 512);
185 m_h2GoodROIcenters =
new TH2F(
"h2GoodROIcenters",
"Good ROI Centers", 768, 0, 768, 512, 0, 512);
186 m_h2FullROIcenters =
new TH2F(
"h2FullROIcenters",
"Full ROI Centers", 768, 0, 768, 512, 0, 512);
195 m_h1ROItrack =
new TH1F(
"hROITrack",
"track with an attached Good ROI", 2, 0, 2);
196 m_h1ROItrack_pt =
new TH1F(
"hROITrack_pT",
"Track with an attached Good ROI, Transverse Momentum", 100, 0, 8);
197 m_h1ROItrack_phi =
new TH1F(
"h1ROITrack_phi",
"Track with an attached Good ROI, Momentum Phi", 200, -TMath::Pi() - 0.01,
199 m_h1ROItrack_lambda =
new TH1F(
"h1ROITrack_lambda",
"Track with an attached Good ROI, Lambda", 100, -TMath::Pi() - 0.01,
201 m_h1ROItrack_cosTheta =
new TH1F(
"h1ROITrack_cosTheta",
"Track with an attached Good ROI, Momentum CosTheta", 100, -1 - 0.01, 1.01);
202 m_h1ROItrack_pVal =
new TH1F(
"h1ROITrack_pVal",
"Track with an attached Good ROI, P-Value", 1000, 0, 1 + 0.01);
204 m_h1FullROItrack =
new TH1F(
"hFullROITrack",
"track with an attached Full ROI", 20, 0, 20);
205 m_h1FullROItrack_pt =
new TH1F(
"hFullROITrack_pT",
"Track with an attached Full ROI, Transverse Momentum", 100, 0, 8);
206 m_h1FullROItrack_phi =
new TH1F(
"h1FullROITrack_phi",
"Track with an attached Full ROI, Momentum Phi", 200, -TMath::Pi() - 0.01,
208 m_h1FullROItrack_lambda =
new TH1F(
"h1FullROITrack_lambda",
"Track with an attached Full ROI, Lambda", 100, -TMath::Pi() - 0.01,
210 m_h1FullROItrack_cosTheta =
new TH1F(
"h1FullROITrack_cosTheta",
"Track with an attached Full ROI, Momentum CosTheta", 100,
212 m_h1FullROItrack_pVal =
new TH1F(
"h1FullROITrack_pVal",
"Track with an attached Full ROI, P-Value", 1000, 0, 1 + 0.01);
214 m_h1GoodROItrack =
new TH1F(
"hGoodROITrack",
"track with an attached Good ROI", 20, 0, 20);
215 m_h1GoodROItrack_pt =
new TH1F(
"hGoodROITrack_pT",
"Track with an attached Good ROI, Transverse Momentum", 100, 0, 8);
216 m_h1GoodROItrack_phi =
new TH1F(
"h1GoodROITrack_phi",
"Track with an attached Good ROI, Momentum Phi", 200, -TMath::Pi() - 0.01,
218 m_h1GoodROItrack_lambda =
new TH1F(
"h1GoodROITrack_lambda",
"Track with an attached Good ROI, Lambda", 100, -TMath::Pi() - 0.01,
220 m_h1GoodROItrack_cosTheta =
new TH1F(
"h1GoodROITrack_cosTheta",
"Track with an attached Good ROI, Momentum CosTheta", 100,
222 m_h1GoodROItrack_pVal =
new TH1F(
"h1GoodROITrack_pVal",
"Track with an attached Good ROI, P-Value", 1000, 0, 1 + 0.01);
224 m_h1Track =
new TH1F(
"hTrack",
"Number of Tracks per Event", 20, 0, 20);
225 m_h1Track_pt =
new TH1F(
"hTrack_pT",
"Track Transverse Momentum", 100, 0, 8);
226 m_h1Track_lambda =
new TH1F(
"h1Track_lambda",
"Track Momentum Lambda", 100, -TMath::Pi() + 0.01, TMath::Pi() + 0.01);
227 m_h1Track_phi =
new TH1F(
"h1Track_phi",
"Track momentum Phi", 200, -TMath::Pi() - 0.01, TMath::Pi() + 0.01);
228 m_h1Track_cosTheta =
new TH1F(
"h1Track_cosTheta",
"Track Momentum CosTheta", 100, -1 - 0.01, 1 + 0.01);
229 m_h1Track_pVal =
new TH1F(
"h1Track_pVal",
"Track P-Value", 1000, 0, 1 + 0.01);
237 B2DEBUG(21,
" ++++++++++++++ SVDROIFinderAnalysisDataModule");
244 for (
int i = 0; i < (int)
m_tracks.getEntries(); i++) {
259 for (
int i = 0; i < (int)
m_ROIs.getEntries(); i++) {
261 float centerROIU = (
m_ROIs[i]->getMaxUid() +
m_ROIs[i]->getMinUid()) / 2;
262 float centerROIV = (
m_ROIs[i]->getMaxVid() +
m_ROIs[i]->getMinVid()) / 2;
271 if (!theRC[0]->wasFitSuccessful()) {
296 float nStripsU = 768;
297 float nStripsV = 512;
298 float centerSensorU = nStripsU / 2;
299 float centerSensorV = nStripsV / 2;
300 float pitchU = 0.075;
301 float pitchV = 0.240;
309 float edgeStripsU =
m_edgeU / pitchU;
310 float edgeStripsV =
m_edgeV / pitchV;
311 B2DEBUG(21,
"good U in range " << edgeStripsU <<
", " << nStripsU - edgeStripsU);
312 B2DEBUG(21,
"good V in range " << edgeStripsV <<
", " << nStripsV - edgeStripsV);
314 B2DEBUG(21,
"U check: " << std::abs(centerROIU - centerSensorU) <<
" < (good) " << centerSensorU - edgeStripsU);
315 B2DEBUG(21,
"V check: " << std::abs(centerROIV - centerSensorV) <<
" < (good) " << centerSensorV - edgeStripsV);
317 if ((std::abs(centerROIU - centerSensorU) > centerSensorU - edgeStripsU)
318 || (std::abs(centerROIV - centerSensorV) > centerSensorV - edgeStripsV))
326 ": U side " <<
m_ROIs[i]->getMinUid() <<
"->" <<
m_ROIs[i]->getMaxUid() <<
", V side " <<
m_ROIs[i]->getMinVid() <<
"->" <<
335 for (
int s = 0; s <
m_shapers.getEntries(); s++) {
347 B2RESULT(
" --> is Full");
373 B2RESULT(
" o Good ROIs = " << nGoodROIs <<
", of which Full = " << nOkROIs
374 <<
" --> efficiency = " << (
float)nOkROIs / nGoodROIs);
376 if (nGoodROIs >
m_ROIs.getEntries()) B2RESULT(
" HOUSTON WE HAVE A PROBLEM!");
384 B2RESULT(
" ROI AnalysisData Summary ");
385 B2RESULT(
"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
388 B2RESULT(
" number of tracks = " <<
n_tracks);
390 B2RESULT(
" number of ROIs = " <<
n_rois);
391 B2RESULT(
" number of Good ROIs = " <<
m_nGoodROIs);
393 B2RESULT(
" number of Good ROIs with SVDShaperDigit= " <<
m_nOkROIs);
395 B2RESULT(
" average SVD INefficiency = " << 1 -
m_h1effROIs->GetMean());
404 TDirectory* oldDir = gDirectory;
406 TDirectory* m_alltracks = oldDir->mkdir(
"ALLtracks");
407 TDirectory* m_roitracks = oldDir->mkdir(
"ROItracks");
408 TDirectory* m_goodroitracks = oldDir->mkdir(
"GoodROItracks");
409 TDirectory* m_fullroitracks = oldDir->mkdir(
"FullROItracks");
412 TDirectory* m_ROIDir = oldDir->mkdir(
"roi");
434 m_goodroitracks->cd();
441 m_fullroitracks->cd();
static const ChargedStable pion
charged pion particle
void setDescription(const std::string &description)
Sets the description of the module.
Class for type safe access to objects that are referred to in relations.
std::string m_rootFileName
root file name
TH2F * m_h2FullROIcenters
ROI centers with all SVDShaperDigits inside ROI.
TH1F * m_h1FullROItrack_cosTheta
track with attached ROI - costheta
TH1F * m_h1FullROItrack_phi
track with attached ROI- phi
TH1F * m_h1ResidV
distribution of V resid for SVDShaperDigits contained in a ROI
std::string m_ROIListName
ROI list name.
unsigned int n_intercepts
number of SVDIntercepts
std::string m_recoTrackListName
Track list name.
TH1F * m_h1FullROItrack_pt
track with attached ROI - pT
bool m_writeToRoot
if true, a rootFile named by m_rootFileName will be filled with info
unsigned int n_tracks
number of tracks
TH1F * m_h1FullROItrack_lambda
track with attached ROI - lambda
TH1F * m_h1PullV
distribution of V pulls for PDXDigits contained in a ROI
StoreArray< SVDIntercept > m_SVDIntercepts
svd intercept store array
TH1F * m_h1Track_pt
denominator track pT
TH1F * m_h1GoodROItrack_pVal
track with attached ROI - pVal
void initialize() override
Initializes the Module.
TH1F * m_h1ROItrack
track with attached ROI
int m_rootEvent
event number
TH1F * m_h1Track_pVal
denominator track pVal
TH2F * m_h2GoodROIcenters
ROI centers containing a SVDShaperDigit.
TH1F * m_h1PullU
distribution of U pulls for PDXDigits contained in a ROI
TH1F * m_h1okROIs
distribution of number of ROIs containing a SVDShaperDigit
TH1F * m_h1Track_cosTheta
denominator track cosTheta
StoreArray< SVDShaperDigit > m_shapers
shaper digits store array
TH1F * m_h1GoodROItrack_cosTheta
track with attached ROI - costheta
void event() override
Event loop.
TH1F * m_h1Track_lambda
denominator track lambda
std::string m_SVDInterceptListName
Intercept list name.
TH1F * m_h1Track
denominator track
TH1F * m_h1effROIs
distribution of number of ROIs containing a SVDShaperDigit, DATA
TH1F * m_h1totROIs
distribution of number of all ROIs
TH1F * m_h1goodROIs
distribution of number of ROIs containing a SVDShaperDigit, DATA
void terminate() override
Termination action.
unsigned int m_nGoodROIs
number of ROIs containing a SVDShaperDigit, DATA
TH1F * m_h1GlobalTime
distribution of global time for PDXDigits contained in a ROI
TH1F * m_h1GoodROItrack
track with attached ROI
TH1F * m_h1ROItrack_lambda
track with attached ROI - lambda
TH1F * m_h1SigmaV
distribution of sigmaV for SVDShaperDigits contained in a ROI
float m_edgeV
fiducial region, edge along U
TH1F * m_h1SigmaU
distribution of sigmaU for SVDShaperDigits contained in a ROI
TH1F * m_h1ROItrack_pVal
track with attached ROI - pVal
unsigned int m_nOkROIs
number of ROIs containing a SVDShaperDigit
float m_edgeU
fiducial region, edge along U
TH1F * m_h1GoodROItrack_pt
track with attached ROI - pT
TH1F * m_h1ResidU
distribution of U resid for SVDShaperDigits contained in a ROI
StoreArray< Track > m_tracks
reco track store array
TH1F * m_h1ROItrack_phi
track with attached ROI- phi
TH2F * m_h2ROIcenters
ROI centers.
unsigned int n_rois
number of ROIs
TH1F * m_h1ROItrack_cosTheta
track with attached ROI - costheta
TH2F * m_h2sigmaUphi
distribution of sigmaU VS phi for PDXDigits contained in a ROI
TH2F * m_h2ROIvMinMax
v-coordinate Min vs Max
std::string m_shapersName
SVDShaperDigits name.
StoreArray< RecoTrack > m_recoTracks
reco track store array
float m_minPVal
fiducial region, minimum P value of the tracks
TH1F * m_h1GoodROItrack_phi
track with attached ROI- phi
TH2F * m_h2sigmaVphi
distribution of sigmaV VS phi for PDXDigits contained in a ROI
TH1F * m_h1Track_phi
denominator track phi
TH1F * m_h1FullROItrack
track with attached ROI
TFile * m_rootFilePtr
pointer at root file used for storing infos for debugging and validating purposes
TH2F * m_h2ROIuMinMax
u-coordinate Min vs Max
TH1F * m_h1FullROItrack_pVal
track with attached ROI - pVal
TH1F * m_h1GoodROItrack_lambda
track with attached ROI - lambda
~SVDROIFinderAnalysisDataModule()
Destructor of the module.
SVDROIFinderAnalysisDataModule()
Constructor of the module.
TH1F * m_h1ROItrack_pt
track with attached ROI - pT
StoreArray< ROIid > m_ROIs
rois store array
Values of the result of a track fit with a given particle hypothesis.
double getPValue() const
Getter for Chi2 Probability of the track fit.
ROOT::Math::XYZVector getMomentum() const
Getter for vector of momentum at closest approach of track in r/phi projection.
Class to uniquely identify a any structure of the PXD and SVD.
baseType getSensorNumber() const
Get the sensor id.
baseType getLadderNumber() const
Get the ladder id.
baseType getLayerNumber() const
Get the layer id.
void addParam(const std::string &name, T ¶mVariable, const std::string &description, const T &defaultValue)
Adds a new parameter to the module.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.