ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtClusterizeLine.cxx
Go to the documentation of this file.
1 #include "AtClusterizeLine.h"
2 
3 #include "AtDigiPar.h"
4 #include "AtMCPoint.h"
5 #include "AtSimulatedLine.h"
6 #include "AtSimulatedPoint.h" // for AtSimulatedPoint
7 
8 #include <FairLogger.h>
9 
10 #include <Math/Vector3D.h>
11 #include <Math/Vector3Dfwd.h>
12 #include <TClonesArray.h>
13 #include <TString.h> // for operator!=, TString
14 
15 #include <algorithm> // for max
16 #include <memory>
17 #include <utility> // for move
18 
20 {
22  fTBTime = fPar->GetTBTime() / 1000.; // in us
23  LOG(info) << " TB width: " << fTBTime;
24 }
25 
26 void AtClusterizeLine::FillTClonesArray(TClonesArray &array, std::vector<SimPointPtr> &vec)
27 {
28  for (auto &point : vec) {
29  auto size = array.GetEntriesFast();
30  auto *line = dynamic_cast<AtSimulatedLine *>(point.get());
31  new (array[size]) AtSimulatedLine(std::move(*line)); // NO LINT
32  }
33 }
34 
35 std::vector<AtClusterize::SimPointPtr> AtClusterizeLine::processPoint(AtMCPoint &mcPoint, int pointID)
36 {
37  if (mcPoint.GetVolName() != "drift_volume") {
38  LOG(info) << "Skipping point " << pointID << ". Not in drift volume.";
39  return {};
40  }
41 
42  auto trackID = mcPoint.GetTrackID();
43  XYZPoint currentPoint = getCurrentPointLocation(mcPoint); // [mm, mm, us]
44 
45  // If it is a new track entering the volume or no energy was deposited
46  // record its location and the new track ID
47  if (mcPoint.GetEnergyLoss() == 0 || fTrackID != trackID) {
48  fPrevPoint = currentPoint;
49  fTrackID = mcPoint.GetTrackID();
50  return {};
51  }
52 
53  std::vector<SimPointPtr> ret;
54  ret.push_back(std::make_unique<AtSimulatedLine>());
55 
56  auto simLine = dynamic_cast<AtSimulatedLine *>(ret.back().get());
57 
58  simLine->SetMCPointID(pointID);
59  simLine->SetMCEventID(mcPoint.GetEventID());
60  simLine->SetClusterID(0);
61 
62  simLine->SetInitialPosition(fPrevPoint.x(), fPrevPoint.y(), fPrevPoint.z());
63  simLine->SetFinalPosition(currentPoint.x(), currentPoint.y(), currentPoint.z());
64 
65  simLine->SetCharge(getNumberOfElectronsGenerated(mcPoint));
66 
67  simLine->SetTransverseDiffusion(getTransverseDiffusion(simLine->GetPosition().z()));
68  simLine->SetLongitudinalDiffusion(getLongitudinalDiffusion(simLine->GetPosition().z()));
69 
70  fPrevPoint = currentPoint;
71  return ret;
72 }
AtClusterizeLine::processPoint
virtual std::vector< SimPointPtr > processPoint(AtMCPoint &mcPoint, int pointID) override
Definition: AtClusterizeLine.cxx:35
AtClusterize::getCurrentPointLocation
XYZPoint getCurrentPointLocation(const AtMCPoint &mcPoint)
Definition: AtClusterize.cxx:122
AtClusterize::fPrevPoint
static thread_local XYZPoint fPrevPoint
The previous point we recorded charge.
Definition: AtClusterize.h:37
AtClusterizeLine.h
AtSimulatedLine
Definition: AtSimulatedLine.h:17
AtSimulatedLine.h
AtClusterize::fTrackID
static thread_local int fTrackID
The current track ID.
Definition: AtClusterize.h:38
AtDigiPar::GetTBTime
Int_t GetTBTime() const
returns the time duration of a time bucket in given sampling time in ns.
Definition: AtDigiPar.cxx:17
AtSimulatedPoint.h
AtClusterize::getLongitudinalDiffusion
double getLongitudinalDiffusion(double driftTime)
Definition: AtClusterize.cxx:101
AtDigiPar.h
AtDigiPar
Definition: AtDigiPar.h:14
AtClusterize::GetParameters
virtual void GetParameters(const AtDigiPar *fPar)
Definition: AtClusterize.cxx:22
AtSimulatedPoint::SetMCPointID
void SetMCPointID(std::size_t id)
Definition: AtSimulatedPoint.cxx:33
AtMCPoint.h
AtClusterize::XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtClusterize.h:27
AtMCPoint::GetVolName
TString GetVolName() const
Definition: AtMCPoint.h:68
AtMCPoint
Definition: AtMCPoint.h:26
AtClusterizeLine::GetParameters
virtual void GetParameters(const AtDigiPar *fPar) override
Definition: AtClusterizeLine.cxx:19
AtClusterize::getNumberOfElectronsGenerated
uint64_t getNumberOfElectronsGenerated(const AtMCPoint &mcPoint)
Definition: AtClusterize.cxx:114
AtClusterizeLine::FillTClonesArray
virtual void FillTClonesArray(TClonesArray &array, std::vector< SimPointPtr > &vec) override
Definition: AtClusterizeLine.cxx:26
AtClusterize::getTransverseDiffusion
double getTransverseDiffusion(double driftTime)
Definition: AtClusterize.cxx:109