Skip to content

Commit

Permalink
removed manual update of serial number and included serial number in …
Browse files Browse the repository at this point in the history
…splitting test
  • Loading branch information
Sophie Aerdker authored and Sophie Aerdker committed Oct 6, 2023
1 parent f93baa0 commit 234c04e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 18 deletions.
6 changes: 1 addition & 5 deletions src/module/CandidateSplitting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,9 @@ void CandidateSplitting::process(Candidate *c) const {
for (int i = 1; i < nSplit; i++) {

ref_ptr<Candidate> new_candidate = c->clone(false);
//InteractionTag is PRIM, physically no new particles are created
new_candidate->parent = c;
uint64_t snr = Candidate::getNextSerialNumber();
new_candidate->setSerialNumber(snr);
new_candidate->previous.setEnergy(currE); // so that new candidate is not split again in next step!
//InteractionTag is PRIM, physically no new particles are created
c->addSecondary(new_candidate);
Candidate::setNextSerialNumber(snr + 1);
}
if (j < Ebins.size()-1 && currE < Ebins[j+1]){
// candidate is in energy bin [j, j+1] -> no further splitting
Expand Down
33 changes: 20 additions & 13 deletions test/testCandidateSplitting.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,44 +40,51 @@ TEST(testCandidateSplitting, SimpleTest) {
TEST(testCandidateSplitting, CheckSplits) {
int nSplit = 2;
int nBins = 3;
double Emin = 1*GeV;
double Emax = 10*GeV;
double Emin = 1; // dimensionless for testing
double Emax = 10;
double minWeight = pow(1. / nSplit, 4);

CandidateSplitting splitting(nSplit, Emin, Emax, nBins, minWeight);
Candidate c(nucleusId(1,1),0.5*GeV);
Candidate c(nucleusId(1,1),0.5);
double weight = 1.0;
double serial = c.getSerialNumber();

splitting.process(&c); // no split
EXPECT_DOUBLE_EQ(c.getWeight(), weight);
EXPECT_DOUBLE_EQ(c.getNextSerialNumber(), serial);

c.current.setEnergy(2*GeV);
c.current.setEnergy(2);
splitting.process(&c); // 1. split
weight = weight/nSplit;
EXPECT_DOUBLE_EQ(c.getWeight(), weight);
c.previous.setEnergy(2*GeV);
EXPECT_DOUBLE_EQ(c.getNextSerialNumber(), serial + 1);
c.previous.setEnergy(2);

c.current.setEnergy(6*GeV);
c.current.setEnergy(6);
splitting.process(&c); // 2. split
weight = weight/nSplit;
EXPECT_DOUBLE_EQ(c.getWeight(), weight);
c.previous.setEnergy(6*GeV);
EXPECT_DOUBLE_EQ(c.getNextSerialNumber(), serial + 2);
c.previous.setEnergy(6);

c.current.setEnergy(0.5*GeV);
c.current.setEnergy(0.5);
splitting.process(&c); // no split, cooling
EXPECT_DOUBLE_EQ(c.getWeight(), weight);
c.previous.setEnergy(0.5*GeV);
EXPECT_DOUBLE_EQ(c.getNextSerialNumber(), serial + 2);
c.previous.setEnergy(0.5);

c.current.setEnergy(6*GeV);
c.current.setEnergy(6);
splitting.process(&c); // 3. & 4. split, crosses two boundaries
weight = weight/nSplit/nSplit;
EXPECT_DOUBLE_EQ(c.getWeight(), weight);
c.previous.setEnergy(6*GeV);
EXPECT_DOUBLE_EQ(c.getNextSerialNumber(), serial + 4);
c.previous.setEnergy(6);

c.current.setEnergy(8*GeV);
c.current.setEnergy(8);
splitting.process(&c); // no split, minimal weight reached
EXPECT_DOUBLE_EQ(c.getWeight(), weight);
c.previous.setEnergy(8*GeV);
EXPECT_DOUBLE_EQ(c.getNextSerialNumber(), serial + 4);
c.previous.setEnergy(8);
}

} //namespace crpropa

0 comments on commit 234c04e

Please sign in to comment.