ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtLineChargeModel.cxx
Go to the documentation of this file.
1 
2 #include "AtLineChargeModel.h"
3 
4 #include "AtDigiPar.h"
5 
6 #include <Math/Point3D.h>
7 #include <Rtypes.h>
8 
9 #include <cmath>
10 
12 using RZPPoint = ROOT::Math::RhoZPhiPoint;
13 namespace {
14 constexpr double eps = 8.85418782E-12; // SI
15 constexpr double pi = 3.14159265358979;
16 } // namespace
17 
19 double AtLineChargeModel::getDist2(double dZ)
20 {
21  double prefactor = fLambda / pi / eps / fField;
22  double dist2 = prefactor * dZ;
23  if (fLinearField)
24  dist2 *= dZ / 2 / fDetectorLength;
25  return dist2;
26 }
27 
29 {
30  auto input = OffsetForBeam(directInputPosition);
31  if (input.Rho() < fBeamRadius * 1000)
32  return directInputPosition;
33 
34  auto delZ = input.Z();
35  double dist2 = getDist2(delZ);
36  double newRho = sqrt(input.Rho() * input.Rho() + dist2);
37 
38  XYZPoint output(RZPPoint(newRho, input.Z(), input.Phi()));
39  return UndoOffsetForBeam(output);
40 }
41 
43 {
44  auto input = OffsetForBeam(reverseInputPosition);
45  if (input.Rho() < fBeamRadius * 1000) {
46  return reverseInputPosition;
47  }
48 
49  auto delZ = input.Z(); // in mm
50  double dist2 = getDist2(delZ); // in mm;
51  double newRho = sqrt(input.Rho() * input.Rho() - dist2);
52 
53  XYZPoint output(RZPPoint(newRho, input.Z(), input.Phi()));
54  return UndoOffsetForBeam(output);
55 }
56 
58 {
59  if (par == nullptr)
60  return;
61 
62  fField = par->GetEField(); // v/m
63  fDetectorLength = par->GetZPadPlane() / 1000;
64 }
65 
XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtLineChargeModel.cxx:11
AtDigiPar::GetZPadPlane
Double_t GetZPadPlane() const
Definition: AtDigiPar.h:50
AtLineChargeModel::LoadParameters
virtual void LoadParameters(const AtDigiPar *par) override
Load common parameters from AtDigiPar.
Definition: AtLineChargeModel.cxx:57
XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtPatternCircle2D.h:18
AtSpaceChargeModel::UndoOffsetForBeam
XYZPoint UndoOffsetForBeam(XYZPoint point)
Definition: AtSpaceChargeModel.cxx:14
AtSpaceChargeModel::XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtSpaceChargeModel.h:11
ClassImp
ClassImp(AtLineChargeModel)
AtSpaceChargeModel::OffsetForBeam
XYZPoint OffsetForBeam(XYZPoint point)
Definition: AtSpaceChargeModel.cxx:8
AtLineChargeModel
Definition: AtLineChargeModel.h:13
AtLineChargeModel.h
AtLineChargeModel::getDist2
double getDist2(double dZ)
Units are m.
Definition: AtLineChargeModel.cxx:19
AtDigiPar.h
AtDigiPar
Definition: AtDigiPar.h:14
AtDigiPar::GetEField
Double_t GetEField() const
Definition: AtDigiPar.h:47
AtLineChargeModel::ApplySpaceCharge
virtual XYZPoint ApplySpaceCharge(const XYZPoint &reverseInputPosition) override
Using model add space charge effect.
Definition: AtLineChargeModel.cxx:42
RZPPoint
ROOT::Math::RhoZPhiPoint RZPPoint
Definition: AtLineChargeModel.cxx:12
AtLineChargeModel::CorrectSpaceCharge
virtual XYZPoint CorrectSpaceCharge(const XYZPoint &directInputPosition) override
Using model correct for space charge.
Definition: AtLineChargeModel.cxx:28