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