9#include <pxd/modules/pxdDQM/PXDDQMTrackRawNtupleModule.h>
10#include <mdst/dataobjects/Track.h>
11#include <tracking/dataobjects/RecoTrack.h>
12#include <tracking/dataobjects/PXDIntercept.h>
14#include <pxd/dataobjects/PXDRawHit.h>
15#include <pxd/dataobjects/PXDDAQStatus.h>
17#include <pxd/reconstruction/PXDPixelMasker.h>
18#include <framework/gearbox/Const.h>
20#include "TMatrixDSym.h"
46 addParam(
"pCut",
m_pcut,
"Set a cut on the track fit p-value (0=no cut)",
double(1e-20));
47 addParam(
"minSVDHits",
m_minSVDHits,
"Number of SVD hits required in a track to be considered", 5u);
48 addParam(
"momCut",
m_momCut,
"Set a cut on the track momentum in GeV/c, 0 disables",
double(0.3));
49 addParam(
"pTCut",
m_pTCut,
"Set a cut on the track transverse momentum (<=0 disable)",
double(0.3));
50 addParam(
"uDist",
m_uDist,
"distance in ucell to intercept to accept hit",
int(10));
51 addParam(
"vDist",
m_vDist,
"distance in vcell to intercept to accept hit",
int(10));
57 auto dir = gDirectory;
80 m_tuple =
new TNtuple(
"trackraw",
"trackraw",
"vxdid:u:v:p:pt:framenr:triggergate");
95 B2INFO(
"PXDHits array is missing, will not do anything");
99 B2INFO(
"RecoTrack array is missing, will not do anything");
103 B2INFO(
"Track array is missing, will not do anything");
107 B2INFO(
"Intercept array is missing, will not do anything");
111 std::map<unsigned int, int> triggergate;
113 for (
auto& pkt : evt) {
114 for (
auto& dhc : pkt) {
115 for (
auto& dhe : dhc) {
116 triggergate[(
unsigned int)dhe.getSensorID()] = dhe.getTriggerGate();
124 if (!recoTrack.
size())
continue;
126 auto a_track = recoTrack[0];
128 if (!a_track->wasFitSuccessful())
continue;
130 if (a_track->getNumberOfSVDHits() <
m_minSVDHits)
continue;
133 if (!interceptList.
size())
continue;
135 const genfit::FitStatus* fitstatus = a_track->getTrackFitStatus();
136 if (fitstatus->getPVal() <
m_pcut)
continue;
138 genfit::MeasuredStateOnPlane trackstate;
139 trackstate = a_track->getMeasuredStateOnPlaneFromFirstHit();
140 if (trackstate.getMom().Mag() <
m_momCut)
continue;
141 if (trackstate.getMom().Pt() <
m_pTCut)
continue;
145 B2ERROR(
"expect a track fit result for mass");
150 std::vector<VxdID> sensors =
m_vxdGeometry.getListOfSensors();
151 for (
auto intercept : interceptList) {
152 VxdID aVxdID = intercept.getSensorID();
158 double u_fit = intercept.getCoorU();
159 double v_fit = intercept.getCoorV();
161 int ucell_fit = info.getUCellID(u_fit);
162 int vcell_fit = info.getVCellID(v_fit);
168 VxdID hitID = hit.getSensorID();
176 auto u = hit.getUCellID();
177 auto v = hit.getVCellID();
178 if (abs(ucell_fit - u) <
m_uDist && abs(vcell_fit - v) <
m_vDist) {
180 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
void setDescription(const std::string &description)
Sets the description of the module.
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
PXDDQMTrackRawNtupleModule()
Constructor: Sets the description, the properties and the parameters of the module.
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
bool m_useAlignment
if true alignment will be used!
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.
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.
Namespace to provide code needed by both Vertex Detectors, PXD and SVD, and also testbeam telescopes.
Abstract base class for different kinds of events.