R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BNeulandMultiplicityBayes.cxx
Go to the documentation of this file.
2#include "FairRootManager.h"
3#include "FairRtdbRun.h"
4#include "FairRuntimeDb.h"
5#include "R3BNeulandCluster.h"
8#include <FairTask.h>
9#include <Rtypes.h>
10#include <RtypesCore.h>
11#include <cmath>
12#include <fairlogger/Logger.h>
13#include <memory>
14#include <numeric>
15#include <string_view>
16
17R3BNeulandMultiplicityBayes::R3BNeulandMultiplicityBayes(std::string_view input, std::string_view output)
18 : FairTask("R3BNeulandMultiplicityBayes")
19 , fClusters(input)
20 , fMultiplicity{ std::make_unique<R3BNeulandMultiplicity>() }
22 , fOutputName(output)
23{
24}
25
27{
28 // Input
29 fClusters.init();
30
31 // Output
32 auto* ioman = FairRootManager::Instance();
33 if (ioman == nullptr)
34 {
35 LOG(fatal) << "R3BNeulandMultiplicityBayes:Init: No FairRootManager";
36 return kFATAL;
37 }
38 ioman->RegisterAny(fOutputName.c_str(), multiplicity_par_ptr, true);
39
40 return kSUCCESS;
41}
42
44{
45 auto* rtdb = FairRuntimeDb::instance();
46 if (rtdb == nullptr)
47 {
48 LOG(fatal) << "R3BNeulandMultiplicityBayes::SetParContainers: No FairRuntimeDb!";
49 return;
50 }
51
52 fPar = dynamic_cast<R3BNeulandMultiplicityBayesPar*>(rtdb->getContainer("R3BNeulandMultiplicityBayesPar"));
53 if (fPar == nullptr)
54 {
55 LOG(fatal) << "R3BNeulandMultiplicityBayes::SetParContainers: No NeulandMultiplicityBayesPar!";
56 return;
57 }
58
59 // FIXME: FairRuntimeDB needs to be forced to load the Data from the second file with Run Id 1
60 rtdb->initContainers(rtdb->getCurrentRun()->getRunId(), 1);
61}
62
64{
65 const auto& clusters = fClusters.get();
66 const auto nClusters = clusters.size();
67
68 if (nClusters == 0)
69 {
70 fMultiplicity->m.fill(0.);
71 fMultiplicity->m[0] = 1.;
72 return;
73 }
74
75 const auto nHits =
76 std::accumulate(clusters.cbegin(),
77 clusters.cend(),
78 0,
79 [](auto size, const R3BNeulandCluster& cluster) { return size + cluster.GetSize(); });
80 const auto Edep =
81 std::accumulate(clusters.cbegin(),
82 clusters.cend(),
83 0.,
84 [](double energy, const R3BNeulandCluster& cluster) { return energy + cluster.GetE(); });
85
86 fMultiplicity->m = fPar->GetProbabilities(nHits, static_cast<int>(nClusters), static_cast<int>(std::ceil(Edep)));
87}
88
ClassImp(R3B::Neuland::Cal2HitPar)
R3BNeulandMultiplicityBayes(std::string_view input="NeulandClusters", std::string_view output="NeulandMultiplicity")
R3BNeulandMultiplicityBayesPar * fPar
auto Init() -> InitStatus override
R3BNeulandMultiplicity * multiplicity_par_ptr
R3B::InputVectorConnector< R3BNeulandCluster > fClusters
std::unique_ptr< R3BNeulandMultiplicity > fMultiplicity