Analysis Software
Documentation for sPHENIX simulation software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PHG4TpcDirectLaser.h
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file PHG4TpcDirectLaser.h
1 #ifndef G4TPC_PHG4TPCDIRECTLASER_H
2 #define G4TPC_PHG4TPCDIRECTLASER_H
3 
4 #include <fun4all/SubsysReco.h>
5 
6 #include <phparameter/PHParameterInterface.h>
7 
8 #include <TVector3.h>
9 #include <TNtuple.h>
10 
11 #include <cmath>
12 #include <string> // for string, allocator
13 #include <vector> // for vector
14 
15 class PHG4HitContainer;
16 class SvtxTrackMap;
18 class PHCompositeNode;
19 
21 {
22  public:
24  PHG4TpcDirectLaser(const std::string &name = "PHG4TpcDirectLaser");
25 
27  ~PHG4TpcDirectLaser() override = default;
28 
30  int InitRun(PHCompositeNode *) override;
31 
33  int process_event(PHCompositeNode *) override;
34 
36  void SetDefaultParameters() override;
37 
39  void Detector(const std::string &d)
40  {
41  detector = d;
42  }
43 
45  void SetPhiStepping(int n, double min, double max);
46 
48  void SetThetaStepping(int n, double min, double max);
49 
51  void SetFileStepping(int n);
52 
53 
55  int GetNpatternSteps() const
56  {
57  return nPhiSteps * nThetaSteps;
58  };
59 
62  {
64  }
65 
68  {
70  };
71 
74  {
76  };
77 
78  void SetArbitraryThetaPhi(double theta, double phi)
79  {
82  }
83 
84  private:
86  /* by default there are 4 lasers on each side of the TPC */
87  void SetupLasers();
88 
90  void AimToThetaPhi(double theta, double phi);
91 
93  void AimToPatternStep(int n);
94 
96  void AimToPatternStep_File(int n);
97 
98  float theta_p, phi_p;
99  TNtuple *pattern = nullptr;
100 
102  void AimToNextPatternStep();
103 
105  class Laser
106  {
107  public:
109  TVector3 m_position;
110 
112  double m_phi = 0;
113 
115  int m_direction = 1;
116  };
117 
119  void AppendLaserTrack(double theta, double phi, const Laser &);
120 
123 
126 
128  std::vector<Laser> m_lasers;
129 
131  int electrons_per_cm = 300;
132 
133  // number of electrons per deposited GeV in TPC gas
139  double electrons_per_gev = NAN;
140 
141  double arbitrary_theta = -30.0; // degrees
142  double arbitrary_phi = -30.0; // degrees
143 
145 
146  int nPhiSteps = 1;
147  int nThetaSteps = 1;
148  int nTotalSteps = 1;
149  double minPhi = 0;
150  double maxPhi = 0;
151  double minTheta = 0;
152  double maxTheta = 0;
154 
155  // current patter step
157 
160 
162  bool m_steppingpattern = false;
163 
164 
167 
170 
172  std::string m_track_map_name = "SvtxTrackMap";
174 };
175 
176 #endif