9#include "cdc/modules/cdcCalibrationCollector/CDCT0CalibrationCollector.h"
11#include <framework/datastore/RelationArray.h>
13#include <genfit/TrackPoint.h>
14#include <genfit/KalmanFitterInfo.h>
15#include <genfit/MeasuredStateOnPlane.h>
16#include <cdc/dataobjects/WireID.h>
17#include <cdc/geometry/CDCGeometryPar.h>
19#include <Math/ProbFuncMathCore.h>
25using namespace genfit;
34 addParam(
"BField",
m_BField,
"If true -> #Params ==5 else #params ==4 for calculate P-Val",
false);
36 addParam(
"MinimumPt",
m_MinimumPt,
"Tracks whose Pt lower than this value will not be recoreded", 0.);
37 addParam(
"PvalCut",
m_PvalCut,
"Tracks which Pval small than this will not be recoreded", 0.);
38 addParam(
"NDFCut",
m_ndfCut,
"Tracks which NDF small than this will not be recoreded", 0.);
56 auto m_hNDF =
new TH1D(
"hNDF",
"NDF of fitted track;NDF;Tracks", 71, -1, 70);
57 auto m_hPval =
new TH1D(
"hPval",
"p-values of tracks;pVal;Tracks", 1000, 0, 1);
63 for (
int i = 0; i < 56; ++i) {
69 auto m_hTotal =
new TH1F(
"hTotal",
"hTotal", 30, -15, 15);
74 for (
int il = 0; il < 56; il++) {
76 for (
int ic = 0; ic < nW; ++ic) {
77 m_h1[il][ic] =
new TH1F(Form(
"hdT_lay%d_cell%d", il, ic), Form(
"Lay%d_cell%d", il, ic), 30, -15, 15);
82 for (
int ib = 0; ib < 300; ++ib) {
83 m_hT0b[ib] =
new TH1F(Form(
"hT0b%d", ib), Form(
"boardID_%d", ib), 100, -20, 20);
98 for (
int i = 0; i < nTr; ++i) {
100 if (track->getDirtyFlag())
continue;
101 const genfit::FitStatus* fs = track->getTrackFitStatus();
102 if (!fs || !fs->isFitted())
continue;
103 if (!fs->isFitConverged())
continue;
107 B2DEBUG(99,
"No relation found");
114 B2WARNING(
"track was fitted but Relation not found");
122 Pval = fs->getPVal();
124 ndf = fs->getNdf() + 1;
125 double Chi2 = fs->getChi2();
126 Pval = std::max(0., ROOT::Math::chisquared_cdf_c(Chi2, ndf));
145 B2DEBUG(99,
"start collect hit");
149 const genfit::TrackPoint* tp = track->getCreatedTrackPoint(track->getRecoHitInformation(hit));
150 int lay = hit->getICLayer();
151 int IWire = hit->getIWire();
152 unsigned short tdc = hit->getTDCCount();
153 unsigned short adc = hit->getADCCount();
154 WireID wireid(lay, IWire);
155 const genfit::KalmanFitterInfo* kfi = tp->getKalmanFitterInfo();
156 if (!kfi) {B2DEBUG(199,
"No Fitter Info: Layer " << hit->getICLayer());
continue;}
157 for (
unsigned int iMeas = 0; iMeas < kfi->getNumMeasurements(); ++iMeas) {
158 if ((kfi->getWeights().at(iMeas)) > 0.5) {
160 const genfit::MeasuredStateOnPlane& mop = kfi->getFittedState();
161 const B2Vector3D pocaOnWire = mop.getPlane()->getO();
164 double alpha = cdcgeo.
getAlpha(pocaOnWire, pocaMom) ;
165 double theta = cdcgeo.
getTheta(pocaMom);
166 double x_u = kfi->getFittedState(
false).getState()(3);
170 if ((fabs(x_u) <
m_xmin) || (fabs(x_u) > xmax))
continue;
177 if (fabs(alpha) > M_PI / 2) {
185 double t_fit = cdcgeo.
getDriftTime(std::abs(x_u), lay, lr, alpha, theta);
190 dt_flight = mop.getTime();
191 if (dt_flight < 50) {
197 double z = pocaOnWire.
Z();
199 double z_prop = z - m_backWirePos.
Z();
200 B2DEBUG(99,
"z_prop = " << z_prop <<
" |z " << z <<
" |back wire poss: " << m_backWirePos.
Z());
DataType Z() const
access variable Z (= .at(2) without boundary check)
The Class for CDC Geometry Parameters.
double getTimeWalk(const WireID &wID, unsigned short adcCount) const
Returns time-walk.
double getTheta(const B2Vector3D &momentum) const
Returns track incident angle (theta in rad.).
unsigned short getBoardID(const WireID &wID) const
Returns frontend board id. corresponding to the wire id.
double getAlpha(const B2Vector3D &posOnWire, const B2Vector3D &momentum) const
Returns track incident angle in rphi plane (alpha in rad.).
const B2Vector3D wireBackwardPosition(uint layerId, int cellId, EWirePosition set=c_Base) const
Returns the backward position of the input sense wire.
double getTdcBinWidth() const
Return TDC bin width (nsec).
double getOutgoingAlpha(const double alpha) const
Converts incoming- to outgoing-alpha.
float getT0(const WireID &wireID) const
Returns t0 parameter of the specified sense wire.
unsigned short getOutgoingLR(const unsigned short lr, const double alpha) const
Converts incoming-lr to outgoing-lr.
double getOutgoingTheta(const double alpha, const double theta) const
Converts incoming- to outgoing-theta.
unsigned nWiresInLayer(int layerId) const
Returns wire numbers in a layer.
double getPropSpeedInv(const unsigned int layerID) const
Get the inversel of propagation speed in the sense wire.
double getDriftTime(double dist, unsigned short layer, unsigned short lr, double alpha, double theta) const
Return the drift time to the sense wire.
static CDCGeometryPar & Instance(const CDCGeometry *=nullptr)
Static method to get a reference to the CDCGeometryPar instance.
double senseWireR(int layerId) const
Returns radius of sense wire in each layer.
bool m_BField
fit in case no magnetic field or not, if false, NDF=4 in cal P-value
StoreObjPtr< EventT0 > m_eventTimeStoreObject
Event t0 object.
std::string m_recoTrackArrayName
Belle2::RecoTrack StoreArray name.e.
double m_MinimumPt
minimum pt required for track
double m_xmin
Min drift length.
double m_PvalCut
minimum pt required for track
StoreArray< TrackFitResult > m_TrackFitResults
Track fit results.
std::string m_cdcHitArrayName
Belle2::CDCHit StoreArray name.
CDCT0CalibrationCollectorModule()
Constructor.
std::string m_relRecoTrackTrackName
Relation between RecoTrack and Belle2:Track.
void collect() override
Event action, collect information for calibration.
virtual ~CDCT0CalibrationCollectorModule()
Destructor.
std::string m_trackArrayName
Belle2::Track StoreArray name.
void prepare() override
Initializes the Module.
void finish() override
Termination action.
std::string m_trackFitResultArrayName
Belle2::TrackFitResult StoreArray name.
double halfCSize[56]
Half cell size.
StoreArray< RecoTrack > m_RecoTracks
Tracks.
StoreArray< Track > m_Tracks
Tracks.
double m_ndfCut
minimum pt required for track
bool m_EventT0Extraction
use Event T0 extraction or not.
StoreArray< CDCHit > m_CDCHits
CDC hits.
void registerObject(std::string name, T *obj)
Register object with a name, takes ownership, do not access the pointer beyond prepare()
CalibrationCollectorModule()
Constructor. Sets the default prefix for calibration dataobjects.
T * getObjectPtr(std::string name)
Calls the CalibObjManager to get the requested stored collector data.
static const ChargedStable muon
muon particle
void setDescription(const std::string &description)
Sets the description of the module.
void setPropertyFlags(unsigned int propertyFlags)
Sets the flags for the module properties.
@ c_ParallelProcessingCertified
This module can be run in parallel processing mode safely (All I/O must be done through the data stor...
This is the Reconstruction Event-Data Model Track.
Low-level class to create/modify relations between StoreArrays.
const std::string & getName() const
Return name under which the object is saved in the DataStore.
Values of the result of a track fit with a given particle hypothesis.
ROOT::Math::XYZVector getMomentum() const
Getter for vector of momentum at closest approach of track in r/phi projection.
Class that bundles various TrackFitResults.
const TrackFitResult * getTrackFitResult(const Const::ChargedStable &chargedStable) const
Default Access to TrackFitResults.
Class to identify a wire inside the CDC.
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.
B2Vector3< double > B2Vector3D
typedef for common usage with double
Abstract base class for different kinds of events.