9 #include <pxd/modules/pxdDQM/PXDDQMTrackRawNtupleModule.h>
10 #include <tracking/dataobjects/ROIid.h>
12 #include <pxd/reconstruction/PXDPixelMasker.h>
13 #include <mdst/dataobjects/Track.h>
14 #include <framework/gearbox/Const.h>
16 #include "TMatrixDSym.h"
31 setDescription(
"Create tuple PXD trigger studies");
36 addParam(
"ntupleName", m_ntupleName,
"name of ntuple file", std::string(
"rawhits.root"));
37 addParam(
"pxdHitsName", m_pxdHitsName,
"name of StoreArray with PXD raw hits", std::string(
""));
38 addParam(
"recoTracksName", m_recoTracksName,
"name of StoreArray with RecoTracks", std::string(
""));
39 addParam(
"tracksName", m_tracksName,
"name of StoreArray with Tracks", std::string(
""));
40 addParam(
"PXDInterceptListName", m_PXDInterceptListName,
"name of the list of interceptions", std::string(
""));
41 addParam(
"useAlignment", m_useAlignment,
"if true the alignment will be used",
true);
42 addParam(
"pCut", m_pcut,
"Set a cut on the track fit p-value (0=no cut)",
double(1e-20));
43 addParam(
"minSVDHits", m_minSVDHits,
"Number of SVD hits required in a track to be considered", 5u);
44 addParam(
"momCut", m_momCut,
"Set a cut on the track momentum in GeV/c, 0 disables",
double(0.3));
45 addParam(
"uDist", m_uDist,
"distance in ucell to intercept to accept hit",
int(10));
46 addParam(
"vDist", m_vDist,
"distance in vcell to intercept to accept hit",
int(10));
52 auto dir = gDirectory;
75 m_tuple =
new TNtuple(
"trackraw",
"trackraw",
"vxdid:u:v:p:pt:framenr:triggergate");
90 B2INFO(
"PXDHits array is missing, will not do anything");
94 B2INFO(
"RecoTrack array is missing, will not do anything");
98 B2INFO(
"Track array is missing, will not do anything");
102 B2INFO(
"Intercept array is missing, will not do anything");
106 std::map<unsigned int, int> triggergate;
108 for (
auto& pkt : evt) {
109 for (
auto& dhc : pkt) {
110 for (
auto& dhe : dhc) {
111 triggergate[(
unsigned int)dhe.getSensorID()] = dhe.getTriggerGate();
119 if (!recoTrack.
size())
continue;
121 auto a_track = recoTrack[0];
123 if (!a_track->wasFitSuccessful())
continue;
125 if (a_track->getNumberOfSVDHits() <
m_minSVDHits)
continue;
128 if (!interceptList.
size())
continue;
134 trackstate = a_track->getMeasuredStateOnPlaneFromFirstHit();
135 if (trackstate.getMom().Mag() <
m_momCut)
continue;
136 if (trackstate.getMom().Pt() <
m_pTCut)
continue;
140 B2ERROR(
"expect a track fit result for mass");
146 for (
auto intercept : interceptList) {
147 VxdID aVxdID = intercept.getSensorID();
153 double u_fit = intercept.getCoorU();
154 double v_fit = intercept.getCoorV();
156 int ucell_fit = info.getUCellID(u_fit);
157 int vcell_fit = info.getVCellID(v_fit);
163 VxdID hitID = hit.getSensorID();
171 auto u = hit.getUCellID();
172 auto v = hit.getVCellID();
173 if (abs(ucell_fit - u) <
m_uDist && abs(vcell_fit - v) <
m_vDist) {
175 float fill[7] = {float((
int)aVxdID), float(u), float(v), float(trackstate.getMom().Mag()), float(trackstate.getMom().Pt()), float(hit.getFrameNr()), float(triggergate[hitID])};
static const ChargedStable pion
charged pion particle
Creates Ntuples for PXD Trigger analysis.
StoreArray< PXDRawHit > m_pxdhits
store array of pxd clusters
void initialize() override final
initializes the need store arrays, trees and histograms
StoreObjPtr< PXDDAQStatus > m_storeDAQEvtStats
Input array for DAQ Status.
unsigned int m_minSVDHits
Required hits in SVD strips for tracks.
std::string m_PXDInterceptListName
intercept list name
double m_momCut
Cut on fitted track momentum.
double m_pcut
pValue-Cut for tracks
void terminate() override final
terminate , save tuple to file if needed
void event() override final
main function which fills trees and histograms
StoreArray< Track > m_tracks
store array of tracks
std::string m_recoTracksName
name of the store array of recotracks
TFile * m_file
pointer to opened file
std::string m_pxdHitsName
name of the store array of pxd clusters
double m_pTCut
Cut on fitted track pT.
StoreArray< PXDIntercept > m_intercepts
store array of PXD Intercepts
StoreArray< RecoTrack > m_recoTracks
store array of reco tracks
int m_uDist
distance in ucell to intercept to accept hit
VXD::GeoCache & m_vxdGeometry
the geometry
TNtuple * m_tuple
pointer to opened tuple
std::string m_ntupleName
name output file
int m_vDist
distance in vcell to intercept to accept hit
std::string m_tracksName
name of the store array of tracks
PXDIntercept stores the U,V coordinates and uncertainties of the intersection of a track with an PXD ...
This is the Reconstruction Event-Data Model Track.
Class for type safe access to objects that are referred to in relations.
size_t size() const
Get number of relations.
Values of the result of a track fit with a given particle hypothesis.
const std::vector< VxdID > getListOfSensors() const
Get list of all sensors.
const SensorInfoBase & getSensorInfo(Belle2::VxdID id) const
Return a referecne to the SensorInfo of a given SensorID.
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.
Class where important numbers and properties of a fit can be stored.
virtual double getPVal() const
Get the p value of the fit.
#StateOnPlane with additional covariance matrix.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.