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