Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PHG4EtaPhiParameterization.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PHG4EtaPhiParameterization.h
1 // Tell emacs that this is a C++ source
2 // -*- C++ -*-.
3 #ifndef G4MAIN_PHG4ETAPHIPARAMETERIZATION_H
4 #define G4MAIN_PHG4ETAPHIPARAMETERIZATION_H
5 
6 #include <Geant4/G4Types.hh> // for G4int
7 #include <Geant4/G4VPVParameterisation.hh>
8 
9 #include <iostream> // for cout, ostream
10 #include <vector>
11 
12 class G4Tubs;
13 class G4VPhysicalVolume;
14 
15 // Parameterization to define rings whose size changes with Z to
16 // correspond to fixed width in eta.
17 
18 class PHG4EtaPhiParameterization : public G4VPVParameterisation
19 {
20 public:
21 
23  unsigned int neta, // Binning in eta
24  double minEta, // "
25  double maxEta, // "
26  unsigned int nphi,
27  double startPhi,
28  double deltaPhi,
29  double radiusIn, // Radius of inner face of cylinder
30  double radiusOut, // Radius of outer face of cylinder
31  double centerZ // overall Z of center of rings
32  );
33 
34  ~PHG4EtaPhiParameterization() override;
35 
36  virtual void Print(std::ostream& os = std::cout) const;
37  void ComputeTransformation(const G4int copyNo,
38  G4VPhysicalVolume* physVol) const override;
39 
40  using G4VPVParameterisation::ComputeDimensions; // avoid warning for not implemented ComputeDimension methods
41  void ComputeDimensions(G4Tubs& ring, const G4int copyNo,
42  const G4VPhysicalVolume* physVol) const override;
43 
44  int GetIEta(int copyNo) const { return _ieta.at(copyNo); }
45  int GetIPhi(int copyNo) const { return _iphi.at(copyNo); }
46 
47 private: // Dummy declarations to get rid of warnings ...
48 
49 // void ComputeDimensions(G4Trd&,const G4int,const G4VPhysicalVolume*) const {}
50 // void ComputeDimensions(G4Trap&,const G4int,const G4VPhysicalVolume*) const {}
51 // void ComputeDimensions(G4Cons&,const G4int,const G4VPhysicalVolume*) const {}
52 // void ComputeDimensions(G4Sphere&,const G4int,const G4VPhysicalVolume*) const {}
53 // void ComputeDimensions(G4Orb&,const G4int,const G4VPhysicalVolume*) const {}
54 // void ComputeDimensions(G4Torus&,const G4int,const G4VPhysicalVolume*) const {}
55 // void ComputeDimensions(G4Para&,const G4int,const G4VPhysicalVolume*) const {}
56 // void ComputeDimensions(G4Hype&,const G4int,const G4VPhysicalVolume*) const {}
57 // void ComputeDimensions(G4Box&,const G4int,const G4VPhysicalVolume*) const {}
58 // void ComputeDimensions(G4Polycone&,const G4int,const G4VPhysicalVolume*) const {}
59 // void ComputeDimensions(G4Polyhedra&,const G4int,const G4VPhysicalVolume*) const {}
60 
61 private:
62 
63  unsigned int _neta;
64  double _minEta;
65  double _maxEta;
66  unsigned int _nphi;
67  double _startPhi;
68  double _deltaPhi;
69  double _radiusIn;
70  double _radiusOut;
71  double _centerZ;
72  std::vector<double> _zpos; // Z positions of the rings
73  std::vector<double> _zhalf; // Z half-widths of the rings
74  std::vector<double> _phi0; // Lower edge of phi bins
75  std::vector<double> _phi1; // Upper edge of phi bins
76  std::vector<int> _ieta;
77  std::vector<int> _iphi;
78 };
79 
80 
81 #endif