Skip to content

Commit c6af986

Browse files
committed
TRestGeant4ParticleSourceCry. Adding metadata members to setup the CRY generator
1 parent e318c30 commit c6af986

File tree

2 files changed

+94
-62
lines changed

2 files changed

+94
-62
lines changed

inc/TRestGeant4ParticleSourceCry.h

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,29 @@
1111
#include <TRestGeant4ParticleSource.h>
1212

1313
class TRestGeant4ParticleSourceCry : public TRestGeant4ParticleSource {
14+
private:
15+
Int_t fReturnNeutrons = 1;
16+
Int_t fReturnProtons = 1;
17+
Int_t fReturnGammas = 1;
18+
Int_t fReturnElectrons = 1;
19+
Int_t fReturnPions = 1;
20+
Int_t fReturnKaons = 1;
21+
Int_t fReturnMuons = 1;
22+
23+
Int_t fNParticlesMin = 1;
24+
Int_t fNParticlesMax = 1000000;
25+
26+
Double_t fXOffset = 0;
27+
Double_t fYOffset = 0;
28+
Double_t fZOffset = 0;
29+
30+
std::string fDate = "7-1-2012";
31+
32+
Double_t fLatitude = 90.0;;
33+
Double_t fAltitude = 0.0;;
34+
35+
Double_t fSubBoxLength = 100.0;;
36+
1437
protected:
1538
#ifdef USE_CRY
1639
CRYGenerator* fCRYGenerator = nullptr;
@@ -20,7 +43,7 @@ class TRestGeant4ParticleSourceCry : public TRestGeant4ParticleSource {
2043
void Update() override;
2144
void InitFromConfigFile() override;
2245
inline Int_t GetNumberOfParticles() const { return fParticles.size(); }
23-
void PrintParticleSource() override;
46+
void PrintMetadata() override;
2447

2548
TRestGeant4ParticleSourceCry();
2649
~TRestGeant4ParticleSourceCry() {}

src/TRestGeant4ParticleSourceCry.cxx

Lines changed: 70 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -6,72 +6,83 @@ ClassImp(TRestGeant4ParticleSourceCry);
66

77
TRestGeant4ParticleSourceCry::TRestGeant4ParticleSourceCry() {}
88

9-
void TRestGeant4ParticleSourceCry::PrintParticleSource() {
10-
/*
11-
metadata << "---------------------------------------" << endl;
12-
if (!fParticleName.empty() && fParticleName != "NO_SUCH_PARA")
13-
metadata << "Particle Source Name: " << fParticleName << endl;
14-
metadata << "Parent Nuclide: " << fParentName << endl;
15-
metadata << "Decay Mode: " << fDecayType << endl;
16-
metadata << "Daughter Level: " << fDaughterLevel << endl;
17-
metadata << "Seed: " << fSeed << endl;
18-
*/
9+
void TRestGeant4ParticleSourceCry::PrintMetadata() {
10+
11+
TRestGeant4ParticleSource::PrintMetadata();
12+
13+
RESTMetadata << "Return Neutrons : " << fReturnNeutrons << RESTendl;
14+
RESTMetadata << "Return Protons : " << fReturnProtons << RESTendl;
15+
RESTMetadata << "Return Gammas : " << fReturnGammas << RESTendl;
16+
RESTMetadata << "Return Electrons : " << fReturnElectrons << RESTendl;
17+
RESTMetadata << "Return Pions : " << fReturnPions << RESTendl;
18+
RESTMetadata << "Return Kaons : " << fReturnKaons << RESTendl;
19+
RESTMetadata << "Return Muons : " << fReturnMuons << RESTendl;
20+
RESTMetadata << " ======= " << RESTendl;
21+
22+
RESTMetadata << "N particles min : " << fNParticlesMin << RESTendl;
23+
RESTMetadata << "N particles max : " << fNParticlesMax << RESTendl;
24+
RESTMetadata << " ======= " << RESTendl;
25+
26+
RESTMetadata << "X-offset : " << fXOffset << "m" << RESTendl;
27+
RESTMetadata << "Y-offset : " << fYOffset << "m" << RESTendl;
28+
RESTMetadata << "Z-offset : " << fZOffset << "m" << RESTendl;
29+
RESTMetadata << "SubBoxLength : " << fSubBoxLength << "m" << RESTendl;
30+
RESTMetadata << " ======= " << RESTendl;
31+
32+
RESTMetadata << "Date : " << fDate << RESTendl;
33+
RESTMetadata << "Latitude : " << fLatitude << RESTendl;
34+
RESTMetadata << "Altitude : " << fAltitude << RESTendl;
35+
RESTMetadata << "----------------------" << RESTendl;
1936
}
2037

2138
void TRestGeant4ParticleSourceCry::InitFromConfigFile() {
22-
/*
23-
// unsigned int seed = (uintptr_t)this;
24-
// std::default_random_engine generator(seed);
25-
// prng = bxdecay0::std_random(generator);
26-
fParticleName = ((TRestMetadata*)this)->ClassName();
27-
fParentName = GetParameter("particle");
28-
fDecayType = GetParameter("decayMode");
29-
fDaughterLevel = StringToInteger(GetParameter("daughterLevel"));
30-
fSeed = StringToInteger(GetParameter("seed", "0"));
31-
if (fSeed != 0) {
32-
} else {
33-
fSeed = (uintptr_t)this;
34-
}
35-
generator = new std::default_random_engine(fSeed);
36-
prng = new bxdecay0::std_random(*generator);
3739

38-
fDecay0Model->set_decay_category(bxdecay0::decay0_generator::DECAY_CATEGORY_DBD);
40+
fReturnNeutrons = StringToInteger( GetParameter( "returnNeutrons", "1" ) );
41+
fReturnProtons = StringToInteger( GetParameter( "returnProtons", "1" ) );
42+
fReturnGammas = StringToInteger( GetParameter( "returnGammas", "1" ) );
43+
fReturnElectrons = StringToInteger( GetParameter( "returnElectrons", "1" ) );
44+
fReturnPions = StringToInteger( GetParameter( "returnPions", "1" ) );
45+
fReturnKaons = StringToInteger( GetParameter( "returnKaons", "1" ) );
46+
fReturnMuons = StringToInteger( GetParameter( "returnMuons", "1" ) );
3947

40-
if (fParentName != "Xe136") {
41-
ferr << "Only Xe136 double beta decay is supported by restDecay0" << endl;
42-
exit(1);
43-
}
44-
if (fDaughterLevel < 0 || fDaughterLevel > 3) {
45-
ferr << "Supported Ba136 excitation level: 0, 1, 2, 3" << endl;
46-
exit(1);
47-
}
48+
fNParticlesMin = StringToInteger( GetParameter( "nParticlesMin", "1" ) );
49+
fNParticlesMax = StringToInteger( GetParameter( "nParticlesMax", "1000000" ) );
4850

49-
fDecay0Model->set_decay_isotope(fParentName);
51+
fXOffset = StringToDouble( GetParameter( "xoffset", "0.0" ) );
52+
fYOffset = StringToDouble( GetParameter( "yoffset", "0.0" ) );
53+
fZOffset = StringToDouble( GetParameter( "zoffset", "0.0" ) );
54+
fSubBoxLength = StringToDouble( GetParameter( "subBoxLength", "100.0" ) );
5055

51-
fDecay0Model->set_decay_dbd_level(fDaughterLevel);
56+
fDate = GetParameter( "date", "7\\1\\2012" );
57+
fDate = REST_StringHelper::Replace( fDate, "\\", "-" );
58+
fLatitude = StringToDouble( GetParameter( "latitude", "90.0" ) );
59+
fAltitude = StringToDouble( GetParameter( "altitude", "0.0" ) );
5260

53-
if (fDecayType == "2vbb") {
54-
if (fDaughterLevel == 0 || fDaughterLevel == 3) {
55-
fDecay0Model->set_decay_dbd_mode(bxdecay0::DBDMODE_2NUBB_0_2N);
56-
} else if (fDaughterLevel == 1 || fDaughterLevel == 2) {
57-
fDecay0Model->set_decay_dbd_mode(bxdecay0::DBDMODE_2NUBB_2_2N);
58-
}
59-
} else if (fDecayType == "0vbb") {
60-
if (fDaughterLevel == 0 || fDaughterLevel == 3) {
61-
fDecay0Model->set_decay_dbd_mode(bxdecay0::DBDMODE_0NUBB_MN_0_2N);
62-
} else if (fDaughterLevel == 1 || fDaughterLevel == 2) {
63-
fDecay0Model->set_decay_dbd_mode(bxdecay0::DBDMODE_0NUBB_RHC_LAMBDA_2_2N);
64-
}
65-
}
61+
PrintMetadata();
62+
63+
std::string setupString = "";
64+
setupString += "returnNeutrons " + IntegerToString(fReturnNeutrons);
65+
setupString += " returnProtons " + IntegerToString(fReturnProtons);
66+
setupString += " returnGammas " + IntegerToString(fReturnGammas);
67+
setupString += " returnElectrons " + IntegerToString(fReturnElectrons);
68+
setupString += " returnPions " + IntegerToString(fReturnPions);
69+
setupString += " returnKaons " + IntegerToString(fReturnKaons);
70+
setupString += " returnMuons " + IntegerToString(fReturnMuons);
71+
72+
setupString += " xoffset " + DoubleToString(fXOffset);
73+
setupString += " yoffset " + DoubleToString(fYOffset);
74+
setupString += " zoffset " + DoubleToString(fZOffset);
75+
setupString += " subboxLength " + DoubleToString(fSubBoxLength);
76+
77+
setupString += " date " + fDate;
78+
setupString += " latitude " + DoubleToString(fLatitude);
79+
setupString += " altitude " + DoubleToString(fAltitude);
80+
81+
setupString += " nParticlesMin " + IntegerToString(fNParticlesMin);
82+
setupString += " nParticlesMax " + IntegerToString(fNParticlesMax);
6683

67-
fDecay0Model->initialize(*prng);
68-
*/
6984

7085
#ifdef USE_CRY
71-
/// Of course, we should be able to configure this inside InitFromConfigFile
72-
std::string setupString = "returnNeutrons 1";
73-
// std::string setupString = "returnNeutrons 1\nreturnProtons 1\nreturnGammas 1\ndate
74-
// 7-1-2012\nlatitude 90.0\naltitude 0\nsubboxLength 100\n";
7586
CRYSetup* setup = new CRYSetup(setupString, CRY_DATA_PATH);
7687
fCRYGenerator = new CRYGenerator(setup);
7788
#endif
@@ -91,12 +102,10 @@ void TRestGeant4ParticleSourceCry::Update() {
91102
// std::cout << "-----" << std::endl;
92103

93104
for (const auto& cryParticle : *ev) {
94-
/*
95-
std::cout << "id: " << cryParticle->id() << std::endl;
96-
std::cout << "x: " << cryParticle->x() << " y: " << cryParticle->y() << " z: " << cryParticle->z() << std::endl;
97-
std::cout << "u: " << cryParticle->u() << " v: " << cryParticle->v() << " w: " << cryParticle->w() << std::endl;
98-
std::cout << "charge: " << cryParticle->charge() << " energy: " << cryParticle->ke() << std::endl;
99-
*/
105+
// std::cout << "id: " << cryParticle->id() << std::endl;
106+
// std::cout << "x: " << cryParticle->x() << " y: " << cryParticle->y() << " z: " << cryParticle->z() << std::endl;
107+
// std::cout << "u: " << cryParticle->u() << " v: " << cryParticle->v() << " w: " << cryParticle->w() << std::endl;
108+
// std::cout << "charge: " << cryParticle->charge() << " energy: " << cryParticle->ke() << std::endl;
100109

101110
TRestGeant4Particle particle;
102111

0 commit comments

Comments
 (0)