From 234c04ed0fa8b0b3481be835d55fb22dc251343e Mon Sep 17 00:00:00 2001 From: Sophie Aerdker Date: Fri, 6 Oct 2023 15:30:53 +0200 Subject: [PATCH] removed manual update of serial number and included serial number in splitting test --- src/module/CandidateSplitting.cpp | 6 +----- test/testCandidateSplitting.cpp | 33 +++++++++++++++++++------------ 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/module/CandidateSplitting.cpp b/src/module/CandidateSplitting.cpp index 8e89ed838..c60719555 100644 --- a/src/module/CandidateSplitting.cpp +++ b/src/module/CandidateSplitting.cpp @@ -64,13 +64,9 @@ void CandidateSplitting::process(Candidate *c) const { for (int i = 1; i < nSplit; i++) { ref_ptr 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 diff --git a/test/testCandidateSplitting.cpp b/test/testCandidateSplitting.cpp index 2949dec4b..8eca2cf1f 100644 --- a/test/testCandidateSplitting.cpp +++ b/test/testCandidateSplitting.cpp @@ -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