G4QDecayChan.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 //
00027 // $Id$
00028 //
00029 //      ---------------- G4QDecayChan ----------------
00030 //             by Mikhail Kossov, Sept 1999.
00031 //      class for Decay Channels of Hadrons in CHIPS Model
00032 // -------------------------------------------------------------------
00033 // Short description: In the CHIPS World the particles (G4QParticle)
00034 // are defined. For unstable particles there is a G4QDecayChannelVector
00035 // which describes different channels of decay for the particular
00036 // particle. So the G4QDecayChannel class is the class for the description
00037 // of such a decay channel in two or three particles (the secondaries can
00038 // be unstable too and have firther decay).
00039 // -------------------------------------------------------------------
00040  
00041 //#define debug
00042 //#define pdebug
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   //aVecOfSecHadrons (Vector)
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   //aVecOfSecHadrons (Vector)
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   //G4cout<<"G4QDecayChan::Destructor: Before nSH="<<nSH<<G4endl; // TMP
00101   if(nSH)std::for_each(aVecOfSecHadrons.begin(), aVecOfSecHadrons.end(), DeleteQPDGCode());
00102   //G4cout<<"G4QDecayChan::Destructor: After"<<G4endl; // TMP
00103   aVecOfSecHadrons.clear();
00104 }
00105 
00106 // Assignment operator
00107 const G4QDecayChan& G4QDecayChan::operator=(const G4QDecayChan& right)
00108 {
00109   if(this != &right)                          // Beware of self assignment
00110   {
00111     aDecayChanLimit     = right.aDecayChanLimit;
00112     theMinMass          = right.theMinMass;
00113     //aVecOfSecHadrons (Vector)
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 // Standard output for QDecayChan
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 }

Generated on Mon May 27 17:49:31 2013 for Geant4 by  doxygen 1.4.7