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
0023 CylinderGeom_Mvtx()
0024 : CylinderGeom_Mvtx(
0025 0,
0026 0,
0027 3,
0028 0,
0029 0,
0030 0)
0031 {
0032 }
0033
0034 ~CylinderGeom_Mvtx() override {}
0035
0036
0037 void identify(std::ostream& os = std::cout) const override;
0038
0039
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; }
0045 double get_pixel_z() const override { return pixel_z; }
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);
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 , int ) { return stave; }
0066 int get_ladder_z_index(int , 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
0080 double layer_radius;
0081 double stave_phi_step;
0082 double stave_phi_tilt;
0083 double stave_phi_0;
0084
0085
0086 double loc_sensor_in_chip[3]{};
0087
0088
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