![]() |
|
|||
File indexing completed on 2025-08-05 08:18:27
0001 /* Copyright 2008-2010, Technische Universitaet Muenchen, 0002 2014 Ludwig-Maximimilians-Universität München 0003 Authors: Tobias Schlüter 0004 0005 This file is part of GENFIT. 0006 0007 GENFIT is free software: you can redistribute it and/or modify 0008 it under the terms of the GNU Lesser General Public License as published 0009 by the Free Software Foundation, either version 3 of the License, or 0010 (at your option) any later version. 0011 0012 GENFIT is distributed in the hope that it will be useful, 0013 but WITHOUT ANY WARRANTY; without even the implied warranty of 0014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0015 GNU Lesser General Public License for more details. 0016 0017 You should have received a copy of the GNU Lesser General Public License 0018 along with GENFIT. If not, see <http://www.gnu.org/licenses/>. 0019 */ 0020 /** @addtogroup genfit 0021 * @{ 0022 */ 0023 0024 #ifndef genfit_WireMeasurementNew_h 0025 #define genfit_WireMeasurementNew_h 0026 0027 #include "AbsMeasurement.h" 0028 #include "AbsHMatrix.h" 0029 #include "MeasurementOnPlane.h" 0030 0031 0032 namespace genfit { 0033 0034 /** @brief Class for measurements in wire detectors (Straw tubes and drift chambers) 0035 * which do not measure the coordinate along the wire. 0036 * 0037 * @author Tobias Schlüter 0038 * 0039 * This is similar to WireMeasurement, but since WireMeasurement 0040 * stores a 7x7 covariance matrix for what is a one-dimensional 0041 * measurement, this class is preferable. Protected inheritance of 0042 * rawHitCoords_ and rawHitCov_ makes it impossible to rewrite 0043 * WireMeasurement, as subclasses will access these members. 0044 * 0045 * This hit class is not valid for arbitrary choices of plane 0046 * orientation: to use it you MUST choose a plane described by u 0047 * and v axes with v coincident with the wire (and u orthogonal 0048 * to it, obviously). 0049 * The hit will be described by 7 coordinates: 0050 * w_x1, w_y1, w_z1, w_x2, w_y2, w_z2, rdrift 0051 * where w_ji (with j = x, y, z and i = 1, 2) are the wire 0052 * extremities coordinates; rdrift = distance from the wire (u 0053 * coordinate in the plane) 0054 * 0055 */ 0056 class WireMeasurementNew : public AbsMeasurement { 0057 0058 public: 0059 WireMeasurementNew(); 0060 WireMeasurementNew(double driftDistance, double driftDistanceError, const TVector3& endPoint1, const TVector3& endPoint2, int detId, int hitId, TrackPoint* trackPoint); 0061 0062 virtual ~WireMeasurementNew() {;} 0063 0064 virtual WireMeasurementNew* clone() const override {return new WireMeasurementNew(*this);} 0065 0066 virtual SharedPlanePtr constructPlane(const StateOnPlane& state) const override; 0067 0068 /** Hits with a small drift distance get a higher weight, whereas hits with 0069 * big drift distances become weighted down. 0070 * When these initial weights are used by the DAF, the smoothed track will be closer to the real 0071 * trajectory than if both sides are weighted with 0.5 regardless of the drift distance. 0072 * This helps a lot when resolving l/r ambiguities with the DAF. 0073 * The idea is that for the first iteration of the DAF, the wire positions are taken. 0074 * For small drift radii, the wire position does not bend the fit away from the 0075 * trajectory, whereas the wire position for hits with large drift radii is further away 0076 * from the trajectory and will therefore bias the fit if not weighted down. 0077 */ 0078 virtual std::vector<MeasurementOnPlane*> constructMeasurementsOnPlane(const StateOnPlane& state) const override; 0079 0080 virtual const AbsHMatrix* constructHMatrix(const AbsTrackRep*) const override; 0081 0082 /** Reset the wire end points. 0083 */ 0084 void setWireEndPoints(const TVector3& endPoint1, const TVector3& endPoint2); 0085 0086 /** Set maximum drift distance. This is used to calculate the start weights of the two 0087 * measurementsOnPlane. 0088 */ 0089 void setMaxDistance(double d){maxDistance_ = d;} 0090 /** 0091 * select how to resolve the left/right ambiguity: 0092 * -1: negative (left) side on vector (wire direction) x (track direction) 0093 * 0: mirrors enter with same weight, DAF will decide. 0094 * 1: positive (right) side on vector (wire direction) x (track direction) 0095 * where the wire direction is pointing from endPoint1 to endPoint2 0096 */ 0097 void setLeftRightResolution(int lr); 0098 0099 virtual bool isLeftRigthMeasurement() const {return true;} 0100 double getMaxDistance(){return maxDistance_;} 0101 int getLeftRightResolution() const override {return leftRight_;} 0102 0103 protected: 0104 0105 double wireEndPoint1_[3]; //! Wire end point 1 (X, Y, Z) 0106 double wireEndPoint2_[3]; //! Wire end point 2 (X, Y, Z) 0107 double maxDistance_; 0108 double leftRight_; 0109 0110 public: 0111 0112 ClassDefOverride(WireMeasurementNew, 1) 0113 0114 }; 0115 0116 } /* End of namespace genfit */ 0117 /** @} */ 0118 0119 #endif // genfit_WireMeasurementNew_h
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |