9 #include <reconstruction/modules/CDCDedxPID/CDCDedxScanModule.h>
10 #include <reconstruction/modules/CDCDedxPID/LineHelper.h>
12 #include <reconstruction/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>
20 #include <boost/shared_ptr.hpp>
21 #include <boost/make_shared.hpp>
36 setDescription(
"Extract dE/dx and corresponding log-likelihood from fitted tracks and hits in the CDC, SVD and PXD.");
45 m_dedxArray.registerInDataStore();
51 if (!genfit::MaterialEffects::getInstance()->isInitialized()) {
52 B2FATAL(
"Need to have SetupGenfitExtrapolationModule in path before this one");
70 boost::shared_ptr<CDCDedxTrack> dedxTrack = boost::make_shared<CDCDedxTrack>();
72 for (
int i = 0; i < 56; ++i) {
78 const TVector3 wireDir = (wirePosB - wirePosF).
Unit();
84 double cellHeight = outer - inner;
85 double topHeight = outer - wirePosF.Perp();
86 double bottomHeight = wirePosF.Perp() - inner;
87 double topHalfWidth = M_PI * outer / nWires;
88 double bottomHalfWidth = M_PI * inner / nWires;
89 double cellHalfWidth = M_PI * wirePosF.Perp() / nWires;
98 for (
int j = 0; j < 100; ++j) {
99 for (
int k = 0; k < 100; ++k) {
100 double doca = j * cellHalfWidth / 50.0 - cellHalfWidth;
101 double entAng = k * 3.14159265 / 100.0 - 3.14159265 / 2.0;
104 double cellR = 2 * cellHalfWidth / cellHeight;
106 if (std::abs(2 * atan(1) - std::abs(entAng)) < 0.01)tana = 100 * (entAng / std::abs(entAng));
107 else tana = std::tan(entAng);
108 double docaRS = doca * std::sqrt((1 + cellR * cellR * tana * tana) / (1 + tana * tana));
109 double entAngRS = std::atan(tana / cellR);
112 double celldx = c.dx(doca, entAng);
113 if (!c.isValid())
continue;
115 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,
116 1.0, 0, 0.0, 0.0, 0.0);
119 m_dedxArray.appendNew(*dedxTrack);
126 B2INFO(
"CDCDedxScanModule exiting");
This class performs the same function as CDCDedxPIDModule, but does so without using real objects fro...
virtual void initialize() override
Initialize the module.
virtual void event() override
This method is called for each event.
virtual void terminate() override
End of the event processing.
virtual ~CDCDedxScanModule()
Destructor.
The Class for CDC Geometry Parameters.
const TVector3 wireBackwardPosition(int layerId, int cellId, EWirePosition set=c_Base) const
Returns the backward position of the input sense wire.
const TVector3 wireForwardPosition(int 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...
static GeoCache & getInstance()
Return a reference to the singleton instance.
#define REG_MODULE(moduleName)
Register the given module (without 'Module' suffix) with the framework.
Abstract base class for different kinds of events.