// PropCylXY.h #ifndef PropCylXY_H #define PropCylXY_H // Propagates tracks from a Cylinder to a XYPlane in a constant field. // // Propagation will fail if either the origin is not a Cylinder // or destination is not a XYPlane. // Propagator works incorrectly for tracks with very small curvatures #include "trfbase/PropDirected.h" #include "trfxyp/PropXYXY.h" #include "trfbase/ObjDoublePtr.h" namespace trf { class PropCylXY : public PropDirected { private: // attributes ObjDoublePtr _bfield; PropXYXY _propxyxy; private: // output stream void ostr( std::ostream& stream ) const; public: // static methods // Return the type name. static TypeName get_type_name() { return "PropCylXY"; } // Return the creator. static ObjCreator get_creator(); // Return the type. static Type get_static_type() { return get_creator(); } public: // constructor from magnetic field in Tesla. PropCylXY(ObjDoublePtr bfield); // destructor ~PropCylXY(); // Clone. Propagator* new_propagator( ) const; // propagate a track without error in the specified direction PropStat vec_dir_prop( VTrack& trv, const Surface& srf, PropDir dir, TrackDerivative* pder =0 ) const; // return the magnetic field double get_bfield() const; // Return the type. Type get_type() const { return get_static_type(); } // Write the object data. ObjData write_data() const; }; } #endif