80{
82
83
84 for ( unsigned int astring=0; astring < theStrings->size(); astring++)
85 {
86 KTsum+= theStrings->operator[](astring)->Get4Momentum();
87 }
88
92 G4bool NeedEnergyCorrector=
false;
93 do {
94
96 theResult->clear();
97
98 attempts++;
99
101 NeedEnergyCorrector=false;
102
103 for ( unsigned int astring=0; astring < theStrings->size(); astring++)
104 {
105
106
108 if ( theStrings->operator[](astring)->IsExcited() )
109 {
110
111 generatedKineticTracks=FragmentString(*theStrings->operator[](astring));
112 } else {
114 generatedKineticTracks->push_back(theStrings->operator[](astring)->GetKineticTrack());
115 }
116
117 if (generatedKineticTracks == NULL)
118 {
119 G4cerr <<
"G4VPartonStringModel:No KineticTracks produced" <<
G4endl;
120 continue;
121 }
122
124 for ( unsigned int aTrack=0; aTrack<generatedKineticTracks->size();aTrack++)
125 {
126
127 theResult->push_back(generatedKineticTracks->operator[](aTrack));
128 KTsum1+= (*generatedKineticTracks)[aTrack]->Get4Momentum();
129 }
130 KTsecondaries+=KTsum1;
131
132
133
134 if ( KTsum1.e() > 0 && std::abs((KTsum1.e()-theStrings->operator[](astring)->Get4Momentum().e()) / KTsum1.e()) > perMillion )
135 {
136
137
138 NeedEnergyCorrector=true;
139 }
140
141
142 delete generatedKineticTracks;
143 }
144
145
146 success=true;
147
148 if ( NeedEnergyCorrector ) success=EnergyAndMomentumCorrector(theResult, KTsum);
149
150 } while(!success && (attempts < 10));
151
152
153#ifdef debug_ExcitedStringDecay
155 for ( unsigned int aTrack=0; aTrack<theResult->size();aTrack++)
156 {
157 G4cout <<
" corrected tracks .. " << (*theResult)[aTrack]->GetDefinition()->GetParticleName()
158 <<
" " << (*theResult)[aTrack]->Get4Momentum() <<
G4endl;
159 KTsum1+= (*theResult)[aTrack]->Get4Momentum();
160 }
161
162 G4cout <<
"Needcorrector/success " << NeedEnergyCorrector <<
"/" << success <<
", Corrected total 4 momentum " << KTsum1 <<
G4endl;
163 if ( ! success )
G4cout <<
"failed to correct E/p" <<
G4endl;
164#endif
165
166 return theResult;
167}
G4DLLIMPORT std::ostream G4cerr
G4DLLIMPORT std::ostream G4cout