Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4QCandidate.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// $Id$
28//
29// ---------------- G4QCandidate ----------------
30// by Mikhail Kossov, Sept 1999.
31// class for Quasmon initiated Candidates used by CHIPS Model
32// ------------------------------------------------------------------
33// Short description: A candidate for hadronization. The candidates
34// (hadrons or nuclear fragments) are competative, each quark of a
35// Quasmon select which candidate to use for hadronization
36// ------------------------------------------------------------------
37
38//#define debug
39
40#include "G4QCandidate.hh"
41#include <algorithm>
42
44 G4QHadron(),possible(false),parPossible(false),kMin(0),denseProbability(0.),
45 preProbability(0.),relativeProbability(0.),integralProbability(0.),
46 secondRelProbability(0.),secondIntProbability(0.),EBMass(0.),NBMass(0.)
47
48{
49}
50
52 G4QHadron(PDGcode),possible(false),parPossible(false),kMin(0),denseProbability(0.),
53 preProbability(0.),relativeProbability(0.),integralProbability(0.),
54 secondRelProbability(0.),secondIntProbability(0.),EBMass(0.),NBMass(0.)
55{
56#ifdef debug
57 G4cout<<"G4QCandidate::Constructor: PDG="<<PDGcode<<G4endl;
58#endif
59 G4LorentzVector cur4Mom(0.,0.,0.,0.);
60 G4QPDGCode QPDG(PDGcode);
61#ifdef debug
62 G4cout<<"G4QCandidate::Constructor: QPDG="<<QPDG<<G4endl;
63#endif
64 SetQPDG(QPDG);
65 G4double vacMass=QPDG.GetMass();
66#ifdef debug
67 G4cout<<"G4QCandidate::Constructor: M="<<vacMass<<G4endl;
68#endif
69 cur4Mom.setE(vacMass);
70 Set4Momentum(cur4Mom);
71 SetQC(QPDG.GetQuarkContent());
72}
73
75 G4QHadron(&right)
76{
77 Set4Momentum (right.Get4Momentum());
78 SetQPDG (right.GetQPDG());
79 SetQC (right.GetQC());
81 possible = right.possible;
82 parPossible = right.parPossible;
83 kMin = right.kMin;
84 denseProbability = right.denseProbability;
85 preProbability = right.preProbability;
86 relativeProbability = right.relativeProbability;
87 integralProbability = right.integralProbability;
88 secondRelProbability= right.secondRelProbability;
89 secondIntProbability= right.secondIntProbability;
90 EBMass = right.EBMass;
91 NBMass = right.NBMass;
92 // thePClusters
93 G4int nParCl = right.thePClusters.size();
94 if(nParCl) for(G4int ip=0; ip<nParCl; ip++)
95 {
96 G4QParentCluster* curPC = new G4QParentCluster(right.thePClusters[ip]);
97 thePClusters.push_back(curPC);
98 }
99}
100
102{
103 Set4Momentum (right->Get4Momentum());
104 SetQPDG (right->GetQPDG());
105 SetQC (right->GetQC());
106 SetNFragments (right->GetNFragments());
107 possible = right->possible;
108 parPossible = right->parPossible;
109 kMin = right->kMin;
110 denseProbability = right->denseProbability;
111 preProbability = right->preProbability;
112 relativeProbability = right->relativeProbability;
113 integralProbability = right->integralProbability;
114 secondRelProbability= right->secondRelProbability;
115 secondIntProbability= right->secondIntProbability;
116 EBMass = right->EBMass;
117 NBMass = right->NBMass;
118 // thePClusters
119 G4int nParCl = right->thePClusters.size();
120 if(nParCl) for(G4int ip=0; ip<nParCl; ip++)
121 {
122 G4QParentCluster* curPC = new G4QParentCluster(right->thePClusters[ip]);
123 thePClusters.push_back(curPC);
124 }
125}
126
128{
129#ifdef debug
130 G4cout<<"~G4QCandidate: before thePClusters nC="<<thePClusters.size()<<G4endl;
131#endif
132 std::for_each(thePClusters.begin(), thePClusters.end(), DeleteQParentCluster());
133#ifdef debug
134 G4cout<<"~G4QCandidate: === DONE ==="<<G4endl;
135#endif
136}
137
138// Assignment operator
140{
141 if(this != &right) // Beware of self assignment
142 {
143 Set4Momentum (right.Get4Momentum());
144 SetQPDG (right.GetQPDG());
145 SetQC (right.GetQC());
147 possible = right.possible;
148 parPossible = right.parPossible;
149 kMin = right.kMin;
150 denseProbability = right.denseProbability;
151 preProbability = right.preProbability;
152 relativeProbability = right.relativeProbability;
153 integralProbability = right.integralProbability;
154 secondRelProbability= right.secondRelProbability;
155 secondIntProbability= right.secondIntProbability;
156 EBMass = right.EBMass;
157 NBMass = right.NBMass;
158 // thePClusters (Vector)
159 G4int nParCl = right.thePClusters.size();
160 if(nParCl) for(G4int ip=0; ip<nParCl; ip++)
161 {
162 G4QParentCluster* curPC = new G4QParentCluster(right.thePClusters[ip]);
163 thePClusters.push_back(curPC);
164 }
165 }
166 return *this;
167}
double G4double
Definition: G4Types.hh:64
int G4int
Definition: G4Types.hh:66
#define G4endl
Definition: G4ios.hh:52
G4DLLIMPORT std::ostream G4cout
const G4QCandidate & operator=(const G4QCandidate &right)
G4LorentzVector Get4Momentum() const
Definition: G4QHadron.hh:79
void SetNFragments(const G4int &nf)
Definition: G4QHadron.hh:188
void SetQC(const G4QContent &newQC)
Definition: G4QHadron.hh:186
void SetQPDG(const G4QPDGCode &QPDG)
Definition: G4QHadron.cc:275
G4int GetNFragments() const
Definition: G4QHadron.hh:174
G4QContent GetQC() const
Definition: G4QHadron.hh:173
void Set4Momentum(const G4LorentzVector &aMom)
Definition: G4QHadron.hh:187
G4QPDGCode GetQPDG() const
Definition: G4QHadron.hh:172
G4QContent GetQuarkContent() const
Definition: G4QPDGCode.cc:2057
G4double GetMass()
Definition: G4QPDGCode.cc:693