ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtSpaceChargeCorrectionTask.cxx
Go to the documentation of this file.
2 // IWYU pragma: no_include <ext/alloc_traits.h>
3 #include "AtEvent.h"
4 #include "AtHit.h"
5 #include "AtSpaceChargeModel.h"
6 
7 #include <FairLogger.h>
8 #include <FairRootManager.h>
9 #include <FairRun.h>
10 #include <FairRuntimeDb.h>
11 #include <FairTask.h>
12 
13 #include <Math/Point3D.h>
14 #include <Math/Point3Dfwd.h>
15 #include <TClonesArray.h>
16 #include <TObject.h>
17 
18 #include <utility>
19 #include <vector>
20 
21 class AtDigiPar;
23 
25 
27  : fSCModel(std::move(SCModel)), fOutputEventArray(TClonesArray("AtEvent", 1)), fInputEventArray(nullptr)
28 {
29 }
30 
32 {
33  if (FairRootManager::Instance() == nullptr) {
34  LOG(fatal) << "Cannot find RootManager!";
35  return kFATAL;
36  }
37 
38  fInputEventArray = dynamic_cast<TClonesArray *>(FairRootManager::Instance()->GetObject(fInputBranchName.data()));
39  if (fInputEventArray == nullptr) {
40  LOG(fatal) << "SpaceChargeTask: Cannot find AtEvent array!";
41  return kFATAL;
42  }
43 
44  FairRootManager::Instance()->Register(fOuputBranchName.data(), "AtTpc", &fOutputEventArray, fIsPersistent);
45 
46  FairRun *run = FairRun::Instance();
47  if (!run)
48  LOG(FATAL) << "No analysis run!";
49 
50  FairRuntimeDb *db = run->GetRuntimeDb(); // NOLINT
51  if (!db)
52  LOG(FATAL) << "No runtime database!";
53 
54  auto fPar = (AtDigiPar *)db->getContainer("AtDigiPar"); // NOLINT
55  fSCModel->LoadParameters(fPar);
56  return kSUCCESS;
57 }
58 
60 
62 {
63  fOutputEventArray.Clear("C");
64 
65  if (fInputEventArray->GetEntriesFast() == 0)
66  return;
67 
68  auto inputEvent = dynamic_cast<AtEvent *>(fInputEventArray->At(0));
69  auto outputEvent = dynamic_cast<AtEvent *>(fOutputEventArray.ConstructedAt(0));
70  *outputEvent = *inputEvent;
71  outputEvent->ClearHits();
72 
73  for (auto &inHit : inputEvent->GetHits()) {
74  XYZPoint newPosition;
75  newPosition = fSCModel->CorrectSpaceCharge(inHit->GetPosition());
76  auto &newHit = outputEvent->AddHit(inHit->Clone());
77  newHit.SetPosition(newPosition);
78  LOG(debug) << inHit->GetPosition() << " " << outputEvent->GetHits().back()->GetPosition();
79  }
80 }
XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtSpaceChargeCorrectionTask.cxx:22
AtSpaceChargeCorrectionTask::Init
virtual InitStatus Init() override
Definition: AtSpaceChargeCorrectionTask.cxx:31
AtEvent.h
AtSpaceChargeCorrectionTask
Definition: AtSpaceChargeCorrectionTask.h:25
AtSpaceChargeCorrectionTask::AtSpaceChargeCorrectionTask
AtSpaceChargeCorrectionTask(SCModelPtr &&model)
Definition: AtSpaceChargeCorrectionTask.cxx:26
AtSpaceChargeCorrectionTask::Exec
virtual void Exec(Option_t *opt) override
Definition: AtSpaceChargeCorrectionTask.cxx:61
AtEvent
Definition: AtEvent.h:22
XYZPoint
ROOT::Math::XYZPoint XYZPoint
Definition: AtPatternCircle2D.h:18
AtSpaceChargeModel.h
SCModelPtr
std::unique_ptr< AtSpaceChargeModel > SCModelPtr
Definition: AtSpaceChargeCorrectionTask.h:23
AtHit.h
AtDigiPar
Definition: AtDigiPar.h:14
ClassImp
ClassImp(AtSpaceChargeCorrectionTask)
AtSpaceChargeCorrectionTask::SetParContainers
virtual void SetParContainers() override
Definition: AtSpaceChargeCorrectionTask.cxx:59
AtEvent::ClearHits
void ClearHits()
Definition: AtEvent.h:117
AtSpaceChargeCorrectionTask.h