Skip to content

Commit f6f41aa

Browse files
authored
Merge branch 'RCNPAnalysisBranch' into driftDirectionInversion
2 parents 8397cb4 + a715ed6 commit f6f41aa

67 files changed

Lines changed: 3103 additions & 501 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

AtData/AtBraggFitMetadata.cxx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#include "AtBraggFitMetadata.h"
2+
3+
#include <iostream>
4+
ClassImp(AtBraggFitMetadata);
5+
6+
std::unique_ptr<AtFitTrackMetadata> AtBraggFitMetadata::Clone()
7+
{
8+
return std::make_unique<AtBraggFitMetadata>(*this);
9+
}
10+
11+
void AtBraggFitMetadata::Print() const
12+
{
13+
AtFitTrackMetadata::Print();
14+
15+
std::cout << " Bragg fitting specifics: " << std::endl;
16+
std::cout << " ELoss model name: " << fELossModelName.Data() << std::endl;
17+
std::cout << " Particle: (A, Z) = (" << fA << ", " << fZ << "), mass = " << fMassAmu << " umas" << std::endl;
18+
std::cout << " KineticEnergy = (" << fKineticEnergy << " +- " << fKineticEnergyUncertainty << ") MeV" << std::endl;
19+
std::cout << " AmplitudeFactor = (" << fAmplitudeFactor << " +- " << fAmplitudeFactorUncertainty << ") ADC/MeV" <<std::endl;
20+
}

AtData/AtBraggFitMetadata.h

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#ifndef ATBRAGGFITMETADATA_H
2+
#define ATBRAGGFITMETADATA_H
3+
4+
#include "AtFitTrackMetadata.h"
5+
6+
#include <Rtypes.h> // for Double_t, THashConsistencyHolder, ClassDefOverride
7+
#include <TObject.h>
8+
#include <TString.h>
9+
10+
class TBuffer;
11+
class TClass;
12+
class TMemberInspector;
13+
14+
/**
15+
* Class for storing the result of the fit of an AtTrack from an AtFitter class.
16+
*/
17+
class AtBraggFitMetadata : public AtFitTrackMetadata {
18+
protected:
19+
// Parameters of the fit and name of the ELoss model used.
20+
TString fELossModelName{"none"};
21+
Double_t fKineticEnergy{-1}; // MeV
22+
Double_t fKineticEnergyUncertainty{-1}; // MeV
23+
Double_t fAmplitudeFactor{-1}; // ADC/MeV
24+
Double_t fAmplitudeFactorUncertainty{-1}; // ADC/MeV
25+
26+
// Particle information.
27+
TString fPDGCode{"none"};
28+
Int_t fA{0};
29+
Int_t fZ{0};
30+
Double_t fMassAmu{0};
31+
32+
// The ELoss profile that best fits the experimental Bragg curve. Stored here for quick access on the Bragg curve tab of the viewer for example.
33+
std::vector<std::pair<Double_t, Double_t>> fELossFitValues;
34+
35+
public:
36+
AtBraggFitMetadata() = default;
37+
AtBraggFitMetadata(const AtBraggFitMetadata &) = default;
38+
AtBraggFitMetadata(AtBraggFitMetadata &&) = default;
39+
~AtBraggFitMetadata() = default;
40+
41+
virtual std::unique_ptr<AtFitTrackMetadata> Clone() override;
42+
43+
void SetELossModelName(std::string name) { fELossModelName = TString(name); }
44+
void SetKineticEnergy(Double_t value) { fKineticEnergy = value; }
45+
void SetKineticEnergyUncertainty(Double_t value) { fKineticEnergyUncertainty = value; }
46+
void SetAmplitudeFactor(Double_t value) { fAmplitudeFactor = value; }
47+
void SetAmplitudeFactorUncertainty(Double_t value) { fAmplitudeFactorUncertainty = value; }
48+
void SetPDGCode(std::string value) { fPDGCode = TString(value); }
49+
void SetAtomicMassNumber(Int_t value) { fA = value; }
50+
void SetChargeNumber(Int_t value) { fZ = value; }
51+
void SetMassAmu(Double_t value) { fMassAmu = value; }
52+
void SetELossFitValues(std::vector<std::pair<Double_t, Double_t>> values) { fELossFitValues = values; }
53+
54+
TString GetELossModelName() { return fELossModelName; }
55+
Double_t GetKineticEnergy() { return fKineticEnergy; }
56+
Double_t GetKineticEnergyUncertainty() { return fKineticEnergyUncertainty; }
57+
Double_t GetAmplitudeFactor() { return fAmplitudeFactor; }
58+
Double_t GetAmplitudeFactorUncertainty() { return fAmplitudeFactorUncertainty; }
59+
TString GetPDGCode() { return fPDGCode; }
60+
Int_t GetAtomicMassNumber() { return fA; }
61+
Int_t GetChargeNumber() { return fZ; }
62+
Double_t GetMassAmu() { return fMassAmu; }
63+
std::vector<std::pair<Double_t, Double_t>> GetELossFitValues() { return fELossFitValues; }
64+
65+
virtual void Print() const override;
66+
67+
ClassDefOverride(AtBraggFitMetadata, 1);
68+
};
69+
70+
#endif

AtData/AtDataLinkDef.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,13 @@
4343
#pragma link C++ enum AtPatterns::PatternType;
4444
#pragma link C++ function AtPatterns::CreatePattern;
4545

46+
#pragma link C++ class AtFitMetadata + ;
47+
#pragma link C++ class AtFitTrackMetadata + ;
4648
#pragma link C++ class MCFitter::AtMCResult + ;
49+
#pragma link C++ class AtBraggFitMetadata + ;
50+
51+
#pragma link C++ class AtTrackingEventOld + ;
52+
#pragma link C++ class AtFittedTrackOld + ;
53+
#pragma link C++ class MCFitter::AtMCResultOld + ;
54+
4755
#endif

AtData/AtFitMetadata.cxx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#include "AtFitMetadata.h"
2+
3+
ClassImp(AtFitMetadata);
4+
5+
AtFitMetadata::AtFitMetadata(const AtFitMetadata &copy) : fEventID(copy.fEventID)
6+
{
7+
for (auto const& entry: copy.fMetadatas) {
8+
Int_t trackID = entry.first;
9+
TrackMetadatasVector newMetadatasVector;
10+
for (auto&& metadata: entry.second)
11+
newMetadatasVector.push_back(metadata->Clone());
12+
fMetadatas.insert({trackID, std::move(newMetadatasVector)});
13+
}
14+
}

AtData/AtFitMetadata.h

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#ifndef ATFITMETADATA_H
2+
#define ATFITMETADATA_H
3+
4+
#include "AtFitTrackMetadata.h"
5+
6+
#include <FairLogger.h>
7+
8+
#include <Rtypes.h> // for Double_t, THashConsistencyHolder, ClassDefOverride
9+
#include <TObject.h>
10+
11+
#include <functional>
12+
#include <map>
13+
#include <memory>
14+
#include <utility>
15+
16+
class TBuffer;
17+
class TClass;
18+
class TMemberInspector;
19+
20+
/**
21+
* Class for storing the result of the fit for the entire AtTrackingEvent from an AtFitter class.
22+
*/
23+
class AtFitMetadata : public TObject {
24+
public:
25+
using TrackMetadataPtr = std::unique_ptr<AtFitTrackMetadata>;
26+
using TrackMetadatasVector = std::vector<TrackMetadataPtr>;
27+
using MetadatasMap = std::map<Int_t, TrackMetadatasVector>;
28+
29+
protected:
30+
/**
31+
* Map to store the metadatas for all different fits done to all tracks in the event.
32+
* The Int_t corresponds to the trackID for which the metadatas correspond to.
33+
* The vector of AtFitTrackMetadata contains the different metadatas for all fits
34+
* that have been done for the track (for example, different assumptions for the
35+
* particles of the track, different initial conditions, etc...).
36+
*/
37+
MetadatasMap fMetadatas;
38+
39+
// Event ID for which this fit was done.
40+
ULong_t fEventID;
41+
42+
public:
43+
AtFitMetadata() = default;
44+
AtFitMetadata(const AtFitMetadata &copy);
45+
~AtFitMetadata() = default;
46+
47+
void SetTrackMetadatasVector(Int_t trackID, TrackMetadatasVector metadatas)
48+
{
49+
fMetadatas.insert({trackID, std::move(metadatas)});
50+
}
51+
52+
void SetEventID(ULong_t id) { fEventID = id; }
53+
54+
TrackMetadatasVector &GetTrackMetadatasVector(Int_t trackID) { return fMetadatas.at(trackID); }
55+
ULong_t GetEventID() { return fEventID; }
56+
Int_t GetNumEntries() { return fMetadatas.size(); }
57+
58+
ClassDefOverride(AtFitMetadata, 1);
59+
};
60+
61+
#endif

AtData/AtFitTrackMetadata.cxx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#include "AtFitTrackMetadata.h"
2+
3+
#include <iostream>
4+
ClassImp(AtFitTrackMetadata);
5+
6+
std::unique_ptr<AtFitTrackMetadata> AtFitTrackMetadata::Clone()
7+
{
8+
return std::make_unique<AtFitTrackMetadata>(*this);
9+
}
10+
11+
void AtFitTrackMetadata::Print() const
12+
13+
{
14+
std::cout << " Fit metadata " << fFitID << " for track with ID " << fTrackID << ":" << std::endl;
15+
16+
std::cout << " Statistics: " << std::endl;
17+
std::cout << " PValue = " << fPValue << std::endl;
18+
std::cout << " Chi2 = " << fChi2 << std::endl;
19+
std::cout << " NDF = " << fNdf << std::endl;
20+
std::cout << " Converged = " << fFitConverged << std::endl;
21+
}

AtData/AtFitTrackMetadata.h

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#ifndef ATFITTRACKMETADATA_H
2+
#define ATFITTRACKMETADATA_H
3+
4+
#include <Rtypes.h> // for Double_t, THashConsistencyHolder, ClassDefOverride
5+
#include <TObject.h>
6+
7+
#include <memory>
8+
class TBuffer;
9+
class TClass;
10+
class TMemberInspector;
11+
12+
/**
13+
* Class for storing the result of the fit of an AtTrack from an AtFitter class.
14+
*/
15+
class AtFitTrackMetadata : public TObject {
16+
protected:
17+
// Statistics parameters of the fit.
18+
Double_t fPValue{0};
19+
Double_t fChi2{0};
20+
Int_t fNdf{0};
21+
Bool_t fFitConverged{false};
22+
23+
// The track ID for which this fit was done for.
24+
Int_t fTrackID{-1};
25+
26+
// More than 1 fit may be done for each track. Adding a fit ID.
27+
Int_t fFitID{-1};
28+
29+
public:
30+
AtFitTrackMetadata() = default;
31+
AtFitTrackMetadata(const AtFitTrackMetadata &) = default;
32+
AtFitTrackMetadata(AtFitTrackMetadata &&) = default;
33+
~AtFitTrackMetadata() = default;
34+
AtFitTrackMetadata &operator=(const AtFitTrackMetadata &) = default;
35+
AtFitTrackMetadata &operator=(AtFitTrackMetadata &&) = default;
36+
37+
virtual std::unique_ptr<AtFitTrackMetadata> Clone();
38+
39+
void SetPValue(Double_t value) { fPValue = value; }
40+
void SetChi2(Double_t value) { fChi2 = value; }
41+
void SetNdf(Int_t value) { fNdf = value; }
42+
void SetFitConverged(Bool_t value) { fFitConverged = value; }
43+
void SetTrackID(Int_t value) { fTrackID = value; }
44+
void SetFitID(Int_t value) { fFitID = value; }
45+
46+
Double_t GetPValue() const { return fPValue; }
47+
Double_t GetChi2() const { return fChi2; }
48+
Int_t GetNdf() const { return fNdf; }
49+
Bool_t GetFitConverged() const { return fFitConverged; }
50+
Int_t GetTrackID() const { return fTrackID; }
51+
Int_t GetFitID() const { return fFitID; }
52+
53+
virtual void Print() const;
54+
55+
ClassDefOverride(AtFitTrackMetadata, 1);
56+
};
57+
58+
#endif

AtData/AtFittedTrack.cxx

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,54 @@
11
#include "AtFittedTrack.h"
22

3-
#include <Rtypes.h>
4-
5-
#include <iterator>
6-
#include <numeric>
7-
83
ClassImp(AtFittedTrack);
94

10-
using XYZVector = ROOT::Math::XYZVector;
11-
12-
const std::tuple<Float_t, Float_t, Float_t, Float_t, Float_t, Float_t, Float_t> AtFittedTrack::GetEnergyAngles()
5+
AtFittedTrack::AtFittedTrack(const AtFittedTrack &copy) : fTrackID(copy.fTrackID), fKinematics(copy.fKinematics), fKinematicsXtr(copy.fKinematicsXtr), fParticleInfo(copy.fParticleInfo), fVertex(copy.fVertex), fTrackProperties(copy.fTrackProperties)
136
{
14-
return std::forward_as_tuple(fEnergy, fEnergyXtr, fTheta, fPhi, fEnergyPRA, fThetaPRA, fPhiPRA);
7+
fTrackMetadata = copy.fTrackMetadata->Clone();
158
}
169

17-
const std::tuple<XYZVector, XYZVector, XYZVector> AtFittedTrack::GetVertices()
10+
void AtFittedTrack::SetKinematics(int particleIdx, Double_t energy, Double_t theta, Double_t phi)
1811
{
19-
return std::forward_as_tuple(fInitialPos, fInitialPosPRA, fInitialPosXtr);
12+
while (particleIdx >= fKinematics.size()) {
13+
Kinematics newKinematics;
14+
fKinematics.push_back(newKinematics);
15+
}
16+
17+
fKinematics[particleIdx].kineticEnergy = energy;
18+
fKinematics[particleIdx].theta = theta;
19+
fKinematics[particleIdx].phi = phi;
2020
}
2121

22-
const std::tuple<Float_t, Float_t, Float_t, Float_t, Float_t, Bool_t> AtFittedTrack::GetStats()
22+
void AtFittedTrack::SetKinematicsXtr(int particleIdx, Double_t energyxtr, Double_t thetaxtr, Double_t phixtr)
2323
{
24-
return std::forward_as_tuple(fPValue, fChi2, fBChi2, fNdf, fBNdf, fFitConverged);
24+
while (particleIdx >= fKinematicsXtr.size()) {
25+
Kinematics newKinematics;
26+
fKinematicsXtr.push_back(newKinematics);
27+
}
28+
29+
fKinematicsXtr[particleIdx].kineticEnergy = energyxtr;
30+
fKinematicsXtr[particleIdx].theta = thetaxtr;
31+
fKinematicsXtr[particleIdx].phi = phixtr;
2532
}
2633

27-
const std::tuple<Int_t, Float_t, Float_t, Float_t, std::string, Int_t> AtFittedTrack::GetTrackProperties()
34+
void AtFittedTrack::SetParticleInfo(int particleIdx, std::string pdg, Int_t charge, Double_t mass)
2835
{
29-
return std::forward_as_tuple(fCharge, fBrho, fELossADC, fDEdxADC, fPDG, fTrackPoints);
36+
while (particleIdx >= fParticleInfo.size()) {
37+
ParticleInfo newParticleInfo;
38+
fParticleInfo.push_back(newParticleInfo);
39+
}
40+
41+
fParticleInfo[particleIdx].idPDG = TString(pdg);
42+
fParticleInfo[particleIdx].charge = charge;
43+
fParticleInfo[particleIdx].mass = mass;
3044
}
3145

32-
const std::tuple<Float_t, Float_t> AtFittedTrack::GetIonChamber()
46+
void AtFittedTrack::SetVertex(int particleIdx, XYZVector point)
3347
{
34-
return std::forward_as_tuple(fIonChamberEnergy, fIonChamberTime);
35-
}
48+
while (particleIdx >= fVertex.size()) {
49+
XYZVector newVertex;
50+
fVertex.push_back(newVertex);
51+
}
3652

37-
const std::tuple<Float_t, Float_t> AtFittedTrack::GetExcitationEnergy()
38-
{
39-
return std::forward_as_tuple(fExcitationEnergy, fExcitationEnergyXtr);
53+
fVertex[particleIdx] = point;
4054
}
41-
42-
const std::tuple<Float_t, Float_t, Float_t> AtFittedTrack::GetDistances()
43-
{
44-
return std::forward_as_tuple(fDistanceXtr, fTrackLength, fPOCAXtr);
45-
}

0 commit comments

Comments
 (0)