Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // 23 // >> 24 // $Id: G4ExcitedStringDecay.hh,v 1.4 2005/06/04 13:47:01 jwellisc Exp $ >> 25 // GEANT4 tag $Name: geant4-08-00 $ 27 // 26 // 28 #ifndef G4ExcitedStringDecay_h 27 #ifndef G4ExcitedStringDecay_h 29 #define G4ExcitedStringDecay_h 1 28 #define G4ExcitedStringDecay_h 1 30 29 31 #include "globals.hh" 30 #include "globals.hh" 32 #include "G4VStringFragmentation.hh" 31 #include "G4VStringFragmentation.hh" 33 #include "G4ExcitedStringVector.hh" 32 #include "G4ExcitedStringVector.hh" 34 #include "G4KineticTrackVector.hh" 33 #include "G4KineticTrackVector.hh" 35 << 34 #include "G4LundStringFragmentation.hh" 36 class G4VLongitudinalStringDecay; << 37 35 38 class G4ExcitedStringDecay: public G4VStringFr 36 class G4ExcitedStringDecay: public G4VStringFragmentation 39 { 37 { 40 public: 38 public: 41 G4ExcitedStringDecay(G4VLongitudinalStri << 39 G4ExcitedStringDecay(); 42 virtual ~G4ExcitedStringDecay(); << 40 G4ExcitedStringDecay(G4VLongitudinalStringDecay * aStringDecay); >> 41 ~G4ExcitedStringDecay(); 43 42 44 private: 43 private: 45 G4ExcitedStringDecay(const G4ExcitedStri 44 G4ExcitedStringDecay(const G4ExcitedStringDecay &right); 46 const G4ExcitedStringDecay & operator=(c 45 const G4ExcitedStringDecay & operator=(const G4ExcitedStringDecay &right); 47 G4bool operator==(const G4ExcitedStringD << 46 int operator==(const G4ExcitedStringDecay &right) const; 48 G4bool operator!=(const G4ExcitedStringD << 47 int operator!=(const G4ExcitedStringDecay &right) const; 49 48 50 public: 49 public: >> 50 51 virtual G4KineticTrackVector * FragmentS 51 virtual G4KineticTrackVector * FragmentStrings(const G4ExcitedStringVector * theStrings); 52 52 53 private: 53 private: 54 G4KineticTrackVector * FragmentString(co 54 G4KineticTrackVector * FragmentString(const G4ExcitedString &theString); 55 G4bool EnergyAndMomentumCorrector(G4Kine 55 G4bool EnergyAndMomentumCorrector(G4KineticTrackVector* Output, G4LorentzVector& TotalCollisionMom); >> 56 56 G4VLongitudinalStringDecay * theStringDe 57 G4VLongitudinalStringDecay * theStringDecay; >> 58 57 }; 59 }; 58 60 >> 61 inline >> 62 G4KineticTrackVector *G4ExcitedStringDecay:: >> 63 FragmentString(const G4ExcitedString &theString) >> 64 { >> 65 if ( theStringDecay == NULL ) >> 66 theStringDecay=new G4LundStringFragmentation(); >> 67 >> 68 return theStringDecay->FragmentString(theString); >> 69 } >> 70 >> 71 inline >> 72 G4KineticTrackVector *G4ExcitedStringDecay:: >> 73 FragmentStrings(const G4ExcitedStringVector * theStrings) >> 74 { >> 75 G4KineticTrackVector * theResult = new G4KineticTrackVector; >> 76 >> 77 G4LorentzVector KTsum; >> 78 G4bool NeedEnergyCorrector=false; >> 79 >> 80 for ( unsigned int astring=0; astring < theStrings->size(); astring++) >> 81 { >> 82 KTsum+= theStrings->operator[](astring)->Get4Momentum(); >> 83 if( !(KTsum.e()<1) && !(KTsum.e()>-1) ) >> 84 { >> 85 throw G4HadronicException(__FILE__, __LINE__, >> 86 "G4ExcitedStringDecay::FragmentStrings received nan string..."); >> 87 } >> 88 G4KineticTrackVector * generatedKineticTracks = NULL; >> 89 >> 90 if ( theStrings->operator[](astring)->IsExcited() ) >> 91 { >> 92 generatedKineticTracks=FragmentString(*theStrings->operator[](astring)); >> 93 } else { >> 94 generatedKineticTracks = new G4KineticTrackVector; >> 95 generatedKineticTracks->push_back(theStrings->operator[](astring)->GetKineticTrack()); >> 96 } >> 97 >> 98 if (generatedKineticTracks == NULL) >> 99 { >> 100 G4cerr << "G4VPartonStringModel:No KineticTracks produced" << G4endl; >> 101 continue; >> 102 } >> 103 >> 104 G4LorentzVector KTsum1; >> 105 for ( unsigned int aTrack=0; aTrack<generatedKineticTracks->size();aTrack++) >> 106 { >> 107 theResult->push_back(generatedKineticTracks->operator[](aTrack)); >> 108 KTsum1+= (*generatedKineticTracks)[aTrack]->Get4Momentum(); >> 109 } >> 110 >> 111 >> 112 if ( std::abs((KTsum1.e()-theStrings->operator[](astring)->Get4Momentum().e()) / KTsum1.e()) > perMillion ) >> 113 { >> 114 NeedEnergyCorrector=true; >> 115 } >> 116 // clean up >> 117 delete generatedKineticTracks; >> 118 } >> 119 // G4cout << "String total energy and 4 momentum" <<KTsum.t()<<" "<< KTsum << endl; >> 120 >> 121 if ( NeedEnergyCorrector ) EnergyAndMomentumCorrector(theResult, KTsum); >> 122 >> 123 return theResult; >> 124 } >> 125 59 #endif 126 #endif >> 127 60 128 61 129