| 99 | }; |
| 100 | |
| 101 | void G4SmartTrackStack::PushToStack( const G4StackedTrack& aStackedTrack ) |
| 102 | { |
| 103 | |
| 104 | G4int iDest = 0; |
| 105 | if (aStackedTrack.GetTrack()->GetParentID() != 0) |
| 106 | { |
| 107 | G4int code = aStackedTrack.GetTrack()->GetDynamicParticle()->GetPDGcode(); |
| 108 | if (code == electronCode) |
| 109 | iDest = 2; |
| 110 | else if (code == gammaCode) |
| 111 | iDest = 3; |
| 112 | else if (code == positronCode) |
| 113 | iDest = 4; |
| 114 | else if (code == neutronCode) |
| 115 | iDest = 1; |
| 116 | } |
| 117 | else |
| 118 | { |
| 119 | // We have a primary track, which should go first. |
| 120 | fTurn = 0; // reseting the turn |
| 121 | } |
| 122 | stacks[iDest]->PushToStack(aStackedTrack); |
| 123 | energies[iDest] += aStackedTrack.GetTrack()->GetDynamicParticle()->GetTotalEnergy(); |
| 124 | ++nTracks; |
| 125 | |
| 126 | G4long dy1 = stacks[iDest]->GetNTrack() - stacks[iDest]->GetSafetyValue1(); |
| 127 | G4long dy2 = stacks[fTurn]->GetNTrack() - stacks[fTurn]->GetSafetyValue2(); |
| 128 | |
| 129 | if (dy1 > 0 || dy1 > dy2 || |
| 130 | (iDest == 2 && |
| 131 | stacks[iDest]->GetNTrack() < 50 && energies[iDest] < energies[fTurn])) |
| 132 | { |
| 133 | fTurn = iDest; |
| 134 | } |
| 135 | |
| 136 | if (nTracks > maxNTracks) maxNTracks = nTracks; |
| 137 | } |
| 138 | |
| 139 | void G4SmartTrackStack::clear() |
| 140 | { |
no test coverage detected