7 #include <FairLogger.h>
8 #include <FairRootManager.h>
10 #include <FairRuntimeDb.h>
13 #include <Math/Point3D.h>
14 #include <Math/Point3Dfwd.h>
15 #include <TClonesArray.h>
27 : fSCModel(std::move(SCModel)), fOutputEventArray(TClonesArray(
"AtEvent", 1)), fInputEventArray(nullptr)
33 if (FairRootManager::Instance() ==
nullptr) {
34 LOG(fatal) <<
"Cannot find RootManager!";
38 fInputEventArray =
dynamic_cast<TClonesArray *
>(FairRootManager::Instance()->GetObject(fInputBranchName.data()));
39 if (fInputEventArray ==
nullptr) {
40 LOG(fatal) <<
"SpaceChargeTask: Cannot find AtEvent array!";
44 FairRootManager::Instance()->Register(fOuputBranchName.data(),
"AtTpc", &fOutputEventArray, fIsPersistent);
46 FairRun *run = FairRun::Instance();
48 LOG(FATAL) <<
"No analysis run!";
50 FairRuntimeDb *db = run->GetRuntimeDb();
52 LOG(FATAL) <<
"No runtime database!";
54 auto fPar = (
AtDigiPar *)db->getContainer(
"AtDigiPar");
55 fSCModel->LoadParameters(fPar);
63 fOutputEventArray.Clear(
"C");
65 if (fInputEventArray->GetEntriesFast() == 0)
68 auto inputEvent =
dynamic_cast<AtEvent *
>(fInputEventArray->At(0));
69 auto outputEvent =
dynamic_cast<AtEvent *
>(fOutputEventArray.ConstructedAt(0));
70 *outputEvent = *inputEvent;
73 for (
auto &inHit : inputEvent->GetHits()) {
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();