Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001 #ifndef MVTX_CYLINDERGEOMMVTX_H
0002 #define MVTX_CYLINDERGEOMMVTX_H
0003 
0004 #include <g4detectors/PHG4CylinderGeom.h>
0005 #include <trackbase/TrkrDefs.h>
0006 
0007 #include <TVector3.h>
0008 
0009 #include <iostream>
0010 
0011 class CylinderGeom_Mvtx : public PHG4CylinderGeom
0012 {
0013  public:
0014   CylinderGeom_Mvtx(
0015       int layer,
0016       int in_Nstaves,
0017       double in_layer_nominal_radius,
0018       double in_phistep,
0019       double in_phitilt,
0020       double in_phi0);
0021 
0022   //! default ctor to allow ROOT stream of this class. Implemented using c++11 feature of delegating constructors
0023   CylinderGeom_Mvtx()
0024     : CylinderGeom_Mvtx(
0025           /*int layer*/ 0,
0026           /*int in_Nstaves*/ 0,
0027           /*double in_layer_nominal_radius*/ 3,
0028           /*double in_phistep*/ 0,
0029           /*double in_phitilt*/ 0,
0030           /*double in_phi0*/ 0)
0031   {
0032   }
0033 
0034   ~CylinderGeom_Mvtx() override {}
0035 
0036   // from PHObject
0037   void identify(std::ostream& os = std::cout) const override;
0038 
0039   // from base class
0040   void set_layer(const int i) override { layer = i; }
0041   int get_layer() const override { return layer; }
0042   double get_radius() const override { return layer_radius; }
0043 
0044   double get_pixel_x() const override { return pixel_x; }  // pitch
0045   double get_pixel_z() const override { return pixel_z; }  // length
0046   double get_pixel_thickness() const override { return pixel_thickness; }
0047 
0048   void get_sensor_indices_from_world_coords(std::vector<double>& world, unsigned int& stave, unsigned int& chip);
0049 
0050   bool get_pixel_from_local_coords(TVector3 sensor_local, int& iRow, int& iCol);
0051   int get_pixel_from_local_coords(const TVector3& sensor_local);
0052 
0053   TVector3 get_local_coords_from_pixel(int NXZ);
0054   TVector3 get_local_coords_from_pixel(int iRow, int iCol);
0055 
0056   int get_pixel_X_from_pixel_number(int NXZ);
0057 
0058   int get_pixel_Z_from_pixel_number(int NXZ);
0059 
0060   int get_pixel_number_from_xbin_zbin(int xbin, int zbin);  // obsolete
0061 
0062   double get_stave_phi_tilt() const { return stave_phi_tilt; }
0063   double get_stave_phi_0() const { return stave_phi_0; }
0064 
0065   int get_ladder_phi_index(int stave, int /*half_stave*/, int /*chip*/) { return stave; }
0066   int get_ladder_z_index(int /*module*/, int chip) { return chip; }
0067 
0068   int get_N_staves() const { return N_staves; }
0069   int get_N_half_staves() const { return N_half_staves; }
0070 
0071   int get_NZ() const;
0072   int get_NX() const;
0073 
0074  protected:
0075   int layer;
0076   int N_staves;
0077   int N_half_staves;
0078 
0079   // finding the center of a stave
0080   double layer_radius;
0081   double stave_phi_step;
0082   double stave_phi_tilt;
0083   double stave_phi_0;
0084 
0085   // for all layers
0086   double loc_sensor_in_chip[3]{};
0087 
0088   // inner barrel layers stave construction
0089   double inner_loc_chip_in_module[9][3]{};
0090   double inner_loc_module_in_halfstave[3]{};
0091   double inner_loc_halfstave_in_stave[3]{};
0092 
0093   double pixel_x;
0094   double pixel_z;
0095   double pixel_thickness;
0096 
0097   ClassDefOverride(CylinderGeom_Mvtx, 2)
0098 };
0099 
0100 #endif