| 135 | } |
| 136 | |
| 137 | G4Track* G4StackManager::PopNextTrack(G4VTrajectory** newTrajectory) |
| 138 | { |
| 139 | #ifdef G4VERBOSE |
| 140 | if( verboseLevel > 1 ) |
| 141 | { |
| 142 | G4cout << "### pop requested out of " |
| 143 | << GetNUrgentTrack() << " stacked tracks." << G4endl; |
| 144 | } |
| 145 | #endif |
| 146 | |
| 147 | while( GetNUrgentTrack() == 0 ) |
| 148 | { |
| 149 | #ifdef G4VERBOSE |
| 150 | if( verboseLevel > 1 ) |
| 151 | { |
| 152 | G4cout << "### " << GetNWaitingTrack() |
| 153 | << " waiting tracks are re-classified to" << G4endl; |
| 154 | } |
| 155 | #endif |
| 156 | waitingStack->TransferTo(urgentStack); |
| 157 | if(numberOfAdditionalWaitingStacks>0) |
| 158 | { |
| 159 | for(G4int i=0; i<numberOfAdditionalWaitingStacks; ++i) |
| 160 | { |
| 161 | if(i==0) |
| 162 | { |
| 163 | additionalWaitingStacks[0]->TransferTo(waitingStack); |
| 164 | } |
| 165 | else |
| 166 | { |
| 167 | additionalWaitingStacks[i]->TransferTo(additionalWaitingStacks[i-1]); |
| 168 | } |
| 169 | } |
| 170 | } |
| 171 | if(userStackingAction != nullptr) |
| 172 | { |
| 173 | userStackingAction->NewStage(); |
| 174 | } |
| 175 | |
| 176 | #ifdef G4VERBOSE |
| 177 | if( verboseLevel > 1 ) |
| 178 | G4cout << " " << GetNUrgentTrack() |
| 179 | << " urgent tracks and " << GetNWaitingTrack() |
| 180 | << " waiting tracks." << G4endl; |
| 181 | #endif |
| 182 | if( ( GetNUrgentTrack()==0 ) && ( GetNWaitingTrack()==0 ) ) |
| 183 | return nullptr; |
| 184 | } |
| 185 | |
| 186 | G4StackedTrack selectedStackedTrack = urgentStack->PopFromStack(); |
| 187 | G4Track * selectedTrack = selectedStackedTrack.GetTrack(); |
| 188 | *newTrajectory = selectedStackedTrack.GetTrajectory(); |
| 189 | |
| 190 | #ifdef G4VERBOSE |
| 191 | if( verboseLevel > 2 ) |
| 192 | { |
| 193 | G4cout << "Selected G4StackedTrack : " << &selectedStackedTrack |
| 194 | << " with G4Track " << selectedStackedTrack.GetTrack() |
no test coverage detected