Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:16:49

0001 /*!
0002  * \file PHFieldConfig.h
0003  * \brief
0004  * \author Jin Huang <jhuang@bnl.gov>
0005  * \version $Revision:   $
0006  * \date $Date: $
0007  */
0008 
0009 #ifndef PHFIELD_PHFIELDCONFIG_H
0010 #define PHFIELD_PHFIELDCONFIG_H
0011 
0012 #include <phool/PHObject.h>
0013 
0014 #include <iostream>
0015 #include <limits>
0016 #include <string>
0017 
0018 /*!
0019  * \brief PHFieldConfig store field configuration information */
0020 class PHFieldConfig : public PHObject
0021 {
0022  public:
0023   ~PHFieldConfig() override {}
0024 
0025   /** identify Function from PHObject
0026    @param os Output Stream
0027    */
0028   void identify(std::ostream& os = std::cout) const override;
0029 
0030   enum FieldConfigTypes
0031   {
0032     //! Constant field
0033     kFieldUniform = 0,
0034     //! 2D field map expressed in cylindrical coordinates
0035     kField2D = 2,
0036     //! 3D field map expressed in cylindrical coordinates
0037     kField3DCylindrical = 3,
0038     //! Beast field map from https://github.com/eic/BeastMagneticField
0039     kFieldBeast = 4,
0040     //! Cleo field map from https://gitlab.com/eic/escalate/g4e/-/blob/master/SolenoidMag3D.TABLE
0041     kFieldCleo = 5,
0042     //! 3D field map expressed in Cartesian coordinates
0043     Field3DCartesian = 1,
0044 
0045     //! invalid value
0046     kFieldInvalid = 9999
0047   };
0048 
0049   virtual FieldConfigTypes get_field_config() const { return kFieldInvalid; }
0050 
0051   std::string get_field_config_description() const;
0052 
0053   virtual void set_field_config(FieldConfigTypes /*fieldConfig*/) { return; }
0054 
0055   virtual const std::string& get_filename() const { return kInvalid_FileName; }
0056 
0057   virtual void set_filename(const std::string& /*filename*/) { return; }
0058 
0059   virtual double get_magfield_rescale() const { return std::numeric_limits<double>::signaling_NaN(); }
0060 
0061   virtual void set_magfield_rescale(double /*magfieldRescale*/) { return; }
0062 
0063   //! field value in Tesla for uniform field model ONLY for PHFieldConfig_v2
0064   virtual double get_field_mag_x() const { return std::numeric_limits<double>::signaling_NaN(); }
0065 
0066   //! field value in Tesla for uniform field model ONLY for PHFieldConfig_v2
0067   virtual void set_field_mag_x(double /*fieldMagX*/) { return; }
0068 
0069   //! field value in Tesla for uniform field model ONLY for PHFieldConfig_v2
0070   virtual double get_field_mag_y() const { return std::numeric_limits<double>::signaling_NaN(); }
0071 
0072   //! field value in Tesla for uniform field model ONLY for PHFieldConfig_v2
0073   virtual void set_field_mag_y(double /*fieldMagY*/) { return; }
0074 
0075   //! field value in Tesla for uniform field model ONLY for PHFieldConfig_v2
0076   virtual double get_field_mag_z() const { return std::numeric_limits<double>::signaling_NaN(); }
0077 
0078   //! field value in Tesla for uniform field model ONLY for PHFieldConfig_v2
0079   virtual void set_field_mag_z(double /*fieldMagZ*/) { return; }
0080 
0081   //! equal to operator, to base class
0082   virtual bool operator == (const PHFieldConfig& ) const
0083   { return false; }
0084 
0085  protected:
0086   //! pure virtual interface class. not for direct use
0087   PHFieldConfig() {}
0088 
0089   static const std::string kInvalid_FileName;
0090 
0091   ClassDefOverride(PHFieldConfig, 1)
0092 };
0093 
0094 #endif