9#include <cdc/modules/CDCDedxPID/CDCDedxScanModule.h>
10#include <cdc/modules/CDCDedxPID/LineHelper.h>
12#include <cdc/dataobjects/CDCDedxTrack.h>
13#include <reconstruction/dataobjects/DedxConstants.h>
15#include <cdc/geometry/CDCGeometryPar.h>
16#include <vxd/geometry/GeoCache.h>
18#include <genfit/MaterialEffects.h>
33 setDescription(
"Extract dE/dx and corresponding log-likelihood from fitted tracks and hits in the CDC, SVD and PXD.");
48 if (!genfit::MaterialEffects::getInstance()->isInitialized()) {
49 B2FATAL(
"Need to have SetupGenfitExtrapolationModule in path before this one");
69 for (
int i = 0; i < 56; ++i) {
79 double cellHeight = outer - inner;
80 double topHeight = outer - wirePosF.Rho();
81 double bottomHeight = wirePosF.Rho() - inner;
82 double topHalfWidth = M_PI * outer / nWires;
83 double bottomHalfWidth = M_PI * inner / nWires;
84 double cellHalfWidth = M_PI * wirePosF.Rho() / nWires;
93 for (
int j = 0; j < 100; ++j) {
94 for (
int k = 0; k < 100; ++k) {
95 double doca = j * cellHalfWidth / 50.0 - cellHalfWidth;
96 double entAng = k * M_PI / 100.0 - M_PI_2;
99 double cellR = 2 * cellHalfWidth / cellHeight;
101 if (std::abs(2 *
atan(1) - std::abs(entAng)) < 0.01)tana = 100 * (entAng / std::abs(entAng));
102 else tana = std::tan(entAng);
103 double docaRS = doca * std::sqrt((1 + cellR * cellR * tana * tana) / (1 + tana * tana));
104 double entAngRS = std::atan(tana / cellR);
107 double celldx = c.dx(doca, entAng);
108 if (!c.isValid())
continue;
110 dedxTrack.
addHit(0, 0, i, doca, docaRS, entAng, entAngRS, 0, 0, 0.0, celldx, 0.0, cellHeight, cellHalfWidth, 0, 0.0, 0.0, 1.0, 1.0,
111 1.0, 0, 0.0, 0.0, 0.0);
121 B2INFO(
"CDCDedxScanModule exiting");
virtual void initialize() override
Initialize the module.
virtual void event() override
This method is called for each event.
CDCDedxScanModule()
Default constructor.
StoreArray< CDCDedxTrack > m_dedxArray
array of output dE/dx tracks
virtual void terminate() override
End of the event processing.
virtual ~CDCDedxScanModule()
Destructor.
Debug output for CDCDedxPID module.
void addHit(int lwire, int wire, int layer, double doca, double docaRS, double enta, double entaRS, int adcCount, int adcbaseCount, double dE, double path, double dedx, double cellHeight, double cellHalfWidth, int driftT, double driftD, double driftDRes, double wiregain, double twodcor, double onedcor, int foundByTrackFinder, double weightPionHypo, double weightKaonHypo, double weightProtHypo)
Add a single hit to the object.
The Class for CDC Geometry Parameters.
const B2Vector3D wireForwardPosition(uint layerId, int cellId, EWirePosition set=c_Base) const
Returns the forward position of the input sense wire.
unsigned nWiresInLayer(int layerId) const
Returns wire numbers in a layer.
const double * innerRadiusWireLayer() const
Returns an array of inner radius of wire layers.
static CDCGeometryPar & Instance(const CDCGeometry *=nullptr)
Static method to get a reference to the CDCGeometryPar instance.
const double * outerRadiusWireLayer() const
Returns an array of outer radius of wire layers.
A class to hold the geometry of a cell.
A collection of classes that are useful for making a simple path length correction to the dE/dx measu...
void setDescription(const std::string &description)
Sets the description of the module.
static GeoCache & getInstance()
Return a reference to the singleton instance.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
double atan(double a)
atan for double
Abstract base class for different kinds of events.