R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BNeulandMultiplicityCalorimetric.cxx
Go to the documentation of this file.
2#include "FairLogger.h"
3#include "FairRootManager.h"
4#include "FairRtdbRun.h"
5#include "FairRuntimeDb.h"
6#include <numeric>
7#include <utility>
8
9R3BNeulandMultiplicityCalorimetric::R3BNeulandMultiplicityCalorimetric(std::string_view input, std::string_view output)
10 : FairTask("R3BNeulandMultiplicityCalorimetric")
11 , fClusters(input)
12 , fMultiplicity(std::make_unique<R3BNeulandMultiplicity>())
13 , multiplicity_par_ptr{ fMultiplicity.get() }
14 , fOutputName(output)
15 , fPar(nullptr)
16{
17}
18
20{
21 // Input
22 fClusters.init();
23
24 // Output
25 auto* ioman = FairRootManager::Instance();
26 if (ioman == nullptr)
27 {
28 throw R3B::runtime_error("TCAInputConnector: No FairRootManager");
29 }
30 ioman->RegisterAny(fOutputName, multiplicity_par_ptr, true);
31
32 // Parameter
33 auto* rtdb = FairRuntimeDb::instance();
34 if (rtdb == nullptr)
35 {
36 throw R3B::runtime_error("R3BNeulandMultiplicityCalorimetric::Init: No FairRuntimeDb!");
37 }
38 fPar = dynamic_cast<R3BNeulandMultiplicityCalorimetricPar*>(
39 rtdb->getContainer("R3BNeulandMultiplicityCalorimetricPar"));
40 if (fPar == nullptr)
41 {
42 throw R3B::runtime_error("R3BNeulandMultiplicityCalorimetric::Init: No R3BNeulandMultiplicityCalorimetricPar!");
43 }
44 // FIXME: FairRuntimeDB needs to be forced to load the Data from the second file with Run Id 1
45 rtdb->initContainers(rtdb->getCurrentRun()->getRunId(), 1);
46
47 return kSUCCESS;
48}
49
51{
52 fMultiplicity->m.fill(0.);
53
54 const auto& clusters = fClusters.get();
55 const auto Etot =
56 std::accumulate(clusters.cbegin(),
57 clusters.cend(),
58 0.,
59 [](const double sum, const R3BNeulandCluster& cluster) { return sum + cluster.GetE(); });
60 const auto nClusters = clusters.size();
61
62 // Calorimetric Multiplicity is One-Hot
63 fMultiplicity->m.at(fPar->GetNeutronMultiplicity(Etot, static_cast<double>(nClusters))) = 1.;
64}
65
ClassImp(R3B::Neuland::Cal2HitPar)
R3BNeulandMultiplicityCalorimetric(std::string_view input="NeulandClusters", std::string_view output="NeulandMultiplicity")
NeuLAND number of clusters / energy - neutron multiplicity parameter storage.