00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #include "G4QDecayChanVector.hh"
00045 #include <algorithm>
00046
00047 G4QDecayChan::G4QDecayChan():aDecayChanLimit(0.),theMinMass(0.)
00048 {}
00049
00050 G4QDecayChan::G4QDecayChan(G4double pLev, G4int PDG1, G4int PDG2, G4int PDG3):
00051 aDecayChanLimit(pLev)
00052 {
00053 G4QPDGCode* firstPDG = new G4QPDGCode(PDG1);
00054 theMinMass =firstPDG->GetMass();
00055 aVecOfSecHadrons.push_back(firstPDG);
00056 G4QPDGCode* secondPDG = new G4QPDGCode(PDG2);
00057 theMinMass+=secondPDG->GetMass();
00058 aVecOfSecHadrons.push_back(secondPDG);
00059 if(PDG3)
00060 {
00061 G4QPDGCode* thirdPDG = new G4QPDGCode(PDG3);
00062 theMinMass+=thirdPDG->GetMass();
00063 aVecOfSecHadrons.push_back(thirdPDG);
00064 }
00065 #ifdef debug
00066 G4cout<<"G4QDecayChan is defined with pL="<<pLev<<",1="<<PDG1<<",2="<<PDG2<<",3="<<PDG3
00067 <<",m1="<<firstPDG->GetMass()<<",m2="<<secondPDG->GetMass()<<",minM="<<theMinMass<<G4endl;
00068 #endif
00069 }
00070
00071 G4QDecayChan::G4QDecayChan(const G4QDecayChan& right)
00072 {
00073 aDecayChanLimit = right.aDecayChanLimit;
00074 theMinMass = right.theMinMass;
00075
00076 G4int nSH = right.aVecOfSecHadrons.size();
00077 if(nSH) for(G4int ih=0; ih<nSH; ih++)
00078 {
00079 G4QPDGCode* curPC = new G4QPDGCode(right.aVecOfSecHadrons[ih]);
00080 aVecOfSecHadrons.push_back(curPC);
00081 }
00082 }
00083
00084 G4QDecayChan::G4QDecayChan(G4QDecayChan* right)
00085 {
00086 aDecayChanLimit = right->aDecayChanLimit;
00087 theMinMass = right->theMinMass;
00088
00089 G4int nSH = right->aVecOfSecHadrons.size();
00090 if(nSH) for(G4int ih=0; ih<nSH; ih++)
00091 {
00092 G4QPDGCode* curPC = new G4QPDGCode(right->aVecOfSecHadrons[ih]);
00093 aVecOfSecHadrons.push_back(curPC);
00094 }
00095 }
00096
00097 G4QDecayChan::~G4QDecayChan()
00098 {
00099 G4int nSH=aVecOfSecHadrons.size();
00100
00101 if(nSH)std::for_each(aVecOfSecHadrons.begin(), aVecOfSecHadrons.end(), DeleteQPDGCode());
00102
00103 aVecOfSecHadrons.clear();
00104 }
00105
00106
00107 const G4QDecayChan& G4QDecayChan::operator=(const G4QDecayChan& right)
00108 {
00109 if(this != &right)
00110 {
00111 aDecayChanLimit = right.aDecayChanLimit;
00112 theMinMass = right.theMinMass;
00113
00114 G4int iSH = aVecOfSecHadrons.size();
00115 if(iSH) for(G4int ii=0; ii<iSH; ii++) delete aVecOfSecHadrons[ii];
00116 aVecOfSecHadrons.clear();
00117 G4int nSH = right.aVecOfSecHadrons.size();
00118 if(nSH) for(G4int ih=0; ih<nSH; ih++)
00119 {
00120 G4QPDGCode* curPC = new G4QPDGCode(right.aVecOfSecHadrons[ih]);
00121 aVecOfSecHadrons.push_back(curPC);
00122 }
00123 }
00124 return *this;
00125 }
00126
00127
00128 std::ostream& operator<<(std::ostream& lhs, G4QDecayChan& rhs)
00129 {
00130 lhs << "[L=" << rhs.GetDecayChanLimit();
00131 G4QPDGCodeVector VSH = rhs.GetVecOfSecHadrons();
00132 G4int n = VSH.size();
00133 lhs << ", N=" << n << ": ";
00134 for (int i=0; i<n; i++)
00135 {
00136 if(!i) lhs << ":";
00137 else lhs << ",";
00138 lhs << VSH[i]->GetPDGCode();
00139 }
00140 lhs << "]";
00141 return lhs;
00142 }