// PropXYCyl.h #ifndef PropXYCyl_H #define PropXYCyl_H // Propagates tracks from an XYPlane to a Cylinder in a constant field. // // Propagation will fail if either the origin is not an XYPlane // or destination is not a Cylinder. // Propagator works incorrectly for tracks with very small curvatures #include "trfbase/PropDirected.h" #include "trfbase/ObjDoublePtr.h" namespace trf { class PropXYCyl : public PropDirected { private: // attributes // bfield ObjDoublePtr _bfield; private: // output stream void ostr( std::ostream& stream ) const; public: // static methods // Return the type name. static TypeName get_type_name() { return "PropXYCyl"; } // 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. PropXYCyl(ObjDoublePtr bfield); // destructor ~PropXYCyl(); // 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