// // ******************************************************************** // * License and Disclaimer * // * * // * The Geant4 software is copyright of the Copyright Holders of * // * the Geant4 Collaboration. It is provided under the terms and * // * conditions of the Geant4 Software License, included in the file * // * LICENSE and available at http://cern.ch/geant4/license . These * // * include a list of copyright holders. * // * * // * Neither the authors of this software system, nor their employing * // * institutes,nor the agencies providing financial support for this * // * work make any representation or warranty, express or implied, * // * regarding this software system or assume any liability for its * // * use. Please see the license in the file LICENSE and URL above * // * for the full disclaimer and the limitation of liability. * // * * // * This code implementation is the result of the scientific and * // * technical work of the GEANT4 collaboration. * // * By using, copying, modifying or distributing the software (or * // * any work based on the software) you agree to acknowledge its * // * use in resulting scientific publications, and indicate your * // * acceptance of all terms of the Geant4 Software license. * // ******************************************************************** // // // $Id: G4QChipolino.cc,v 1.36 2009/08/10 16:36:53 mkossov Exp $ // GEANT4 tag $Name: hadr-chips-V09-03-08 $ // // ---------------- G4QChipolino ---------------- // by Mikhail Kossov, Sept 1999. // class for Quasmon initiated Chipolinos generated by CHIPS Model // -------------------------------------------------------------------- // Short description: In the CHIPS model not only hadrons are considered, // but the di-hadrons, which can not be convereged to the quark content // of only one hadron (e.g. pi+pi+, K+p, Delta++p etc). This kind of // hadronic states, which can be easily decayed in two hadrons, is called // Chipolino-particle in the model. // ---------------------------------------------------------------------- //#define debug //#define pdebug #include "G4QChipolino.hh" #include using namespace std; G4QChipolino::G4QChipolino(G4QContent& QCont) { // @@ Does not work as static const ?? G4QPDGCode Pi0(111); G4double mPi0 = Pi0.GetMass(); G4QContent Pi0QC = Pi0.GetQuarkContent(); G4int ban =QCont.GetBaryonNumber(); G4int tban=abs(3*ban); G4int tot=QCont.GetTot(); // Initial total number of quarks in QC G4int tod=tot%2; // tot is even - meson or dibaryon-nucleus if ( (!tod && (tot < 4 || (ban && tot < tban) ) ) || (tod && tot < tban+2) ) QCont.IncQAQ(1,0.); // Add quark-pair G4QContent rQC=QCont; // Copy for possible reduction ("annihilation" of q-aq pairs) tot=rQC.GetTot(); // New total number of quarks in QC (temporary) if (tot%2)rQC.DecQAQ(-tban-2); // Reduce pairs, keep only 5 quarks (baryon case) else if(ban)rQC.DecQAQ(-tban); // Reduce pairs, keep only 6 quarks (dibaryon case) else rQC.DecQAQ(-4); // Reduce pairs, keep only 4 quarks (meson case) tot=rQC.GetTot(); // Final total number of quarks (updated) #ifdef debug cout<<"G4QChipolino is called with QC="< Anti-fragment { //G4cerr<<"***G4QChipolino: ***Anti-nuclear fragments*** rQC="<=0&&nN>=0)||(nI<0&&nN>=-nI)) // Delta isn't necessary { if(nI>0) // Excess of antiprotons { theQPDG1 = G4QPDGCode(-(90000000+1000*(nN+nI-1)+nN));// A Fragment-AProton theQPDG2 = G4QPDGCode(-2212); // An Anti-Proton } else // Excess of a-neutrons { theQPDG1 = G4QPDGCode(-(90000000+1000*(nN+nI)+nN-1));// A Fragment-ANeutron theQPDG2 = G4QPDGCode(-2112); // An Anti-Neutron } } else if((nI>=0&&nN>-2)||(nI<0&&nN>-nI-2)) // Delta can be a part { if(nI>0) // Excess of au-quarks { theQPDG1=G4QPDGCode(-(90000000+1000*(nN+nI-2)+nN+1));// A Fragment-AProton theQPDG2=G4QPDGCode(-2224); // An Anti-Delta++ } else // Excess of ad-quarks { theQPDG1=G4QPDGCode(-(90000000+1000*(nN+nI+1)+nN-2));// A Fragment-ANeutron theQPDG2=G4QPDGCode(-1114); // An Anti-Delta- } } else { G4cerr<<"***G4QChipolino:**A**IsotopicAsymmetry (without S),rQC="<0) // Excess of au-quarks { nN+=1; theQPDG1 = G4QPDGCode(-(90000000+1000*(nN+nI-1)+nN)); // An Anti-Fragment theQPDG2 = G4QPDGCode(-321); // A K- meson } else { theQPDG1 = G4QPDGCode(-(90000000+1000*(nN+nI+1)+nN)); // An AntiFragment theQPDG2 = G4QPDGCode(-311); // An Anti-K0 meson } } else { G4cerr<<"***G4QChipolino: ***Too many kaons are needed*** rQC="<=0&&nN>=0)||(nI<0&&nN>=-nI)) // Delta isn't necessary { if(nI>0) // Excess of protons { theQPDG1 = G4QPDGCode(-(90000000+1000*(kS*1000+nN+nI-1)+nN));// Fragm-AProton theQPDG2 = G4QPDGCode(-2212); // An Anti-Proton } else // Excess of neutrons { theQPDG1 = G4QPDGCode(-(90000000+1000*(kS*1000+nN+nI)+nN-1));//Fragm-ANeutron theQPDG2 = G4QPDGCode(-2112); // An Anti-Neutron } } else if((nI>=0&&nN>-2)||(nI<0&&nN>-nI-2)) // Delta can be a part { if(nI>0) // Excess of au-quarks { theQPDG1=G4QPDGCode(-(90000000+1000*(kS*1000+nN+nI-2)+nN+1));//Fragm-AProton theQPDG2=G4QPDGCode(-2224); // An Anti-Delta++ } else // Excess of ad-quarks { theQPDG1=G4QPDGCode(-(90000000+1000*(kS*1000+nN+nI+1)+nN-2));//Fragm-ANeutron theQPDG2=G4QPDGCode(-1114); // An Anti-Delta- } } else { G4cerr<<"***G4QChipolino:**A**IsotopicAssimetry (with S)*** rQC="<mD) lam=mD; G4int lD=mD-lam; // Residual ad-quarks G4int lU=mU-lam; // Residual au-quarks G4int lS=mS-lam; // Residual as-quarks if(lD+lU+lS!=3||lD<0||lU<0||lS<0) { G4cerr<<"***G4QChipolino:*AntiFragment* rQC="< Nuclear Fragment { if(!kS) // No strange quarks { G4int nI=kU-kD; // Isotopic shift G4int nN=(kU+kD-nI*3)/6; if(!mS) // No kaons { if((nI>=0&&nN>=0)||(nI<0&&nN>=-nI)) // Delta isn't necessary { if(nI>0) // Excess of protons { theQPDG1 = G4QPDGCode(90000000+1000*(nN+nI-1)+nN); // A Fragment-Proton theQPDG2 = G4QPDGCode(2212); // A Proton } else // Excess of neutrons { theQPDG1 = G4QPDGCode(90000000+1000*(nN+nI)+nN-1); // A Fragment-Neutron theQPDG2 = G4QPDGCode(2112); // A Neutron } } else if((nI>=0&&nN>-2)||(nI<0&&nN>-nI-2)) // Delta can be a part { if(nI>0) // Excess of u-quarks { theQPDG1=G4QPDGCode(90000000+1000*(nN+nI-2)+nN+1); // A Fragment-Proton theQPDG2=G4QPDGCode(2224); // A Delta++ } else // Excess of d-quarks { theQPDG1=G4QPDGCode(90000000+1000*(nN+nI+1)+nN-2); // A Fragment-Neutron theQPDG2=G4QPDGCode(1114); // A Delta- } } else { G4cerr<<"***G4QChipolino:***Isotopic assimetry (without S), rQC="<0) // Excess of u-quarks { nN+=1; theQPDG1 = G4QPDGCode(90000000+1000*(nN+nI-1)+nN); // A Fragment theQPDG2 = G4QPDGCode(321); // A K+ meson } else { theQPDG1 = G4QPDGCode(90000000+1000*(nN+nI+1)+nN); // A Fragment theQPDG2 = G4QPDGCode(311); // A K0 meson } } else { G4cerr<<"***G4QChipolino: ***Too many kaons are needed*** rQC="<=0&&nN>=0)||(nI<0&&nN>=-nI)) // Delta isn't necessary { if(nI>0) // Excess of protons { theQPDG1 = G4QPDGCode(90000000+1000*(kS*1000+nN+nI-1)+nN);// Fragment-Proton theQPDG2 = G4QPDGCode(2212); // A Proton } else // Excess of neutrons { theQPDG1 = G4QPDGCode(90000000+1000*(kS*1000+nN+nI)+nN-1);// Fragment-Neutron theQPDG2 = G4QPDGCode(2112); // A Neutron } } else if((nI>=0&&nN>-2)||(nI<0&&nN>-nI-2)) // Delta can be a part { if(nI>0) // Excess of u-quarks { theQPDG1=G4QPDGCode(90000000+1000*(kS*1000+nN+nI-2)+nN+1);// Fragment-Proton theQPDG2=G4QPDGCode(2224); // A Delta++ } else // Excess of d-quarks { theQPDG1=G4QPDGCode(90000000+1000*(kS*1000+nN+nI+1)+nN-2);// Fragment-Neutron theQPDG2=G4QPDGCode(1114); // A Delta- } } else { G4cerr<<"***G4QChipolino: ***Isotopic assimetry (with S)*** rQC="<kD) lam=kD; G4int lD=kD-lam; // Residual d-quarks G4int lU=kU-lam; // Residual u-quarks G4int lS=kS-lam; // Residual s-quarks if(lD+lU+lS!=3||lD<0||lU<0||lS<0) { G4cerr<<"***G4QChipolino:*Fragment*rQC="<theQPDG1; theQPDG2 = right->theQPDG2; theQCont = right->theQCont; theQCont1 = right->theQCont1; minM = right->minM; } const G4QChipolino& G4QChipolino::operator=(const G4QChipolino &right) { if(this != &right) // Beware of self assignment { theQPDG1 = right.theQPDG1; theQPDG2 = right.theQPDG2; theQCont = right.theQCont; theQCont1 = right.theQCont1; minM = right.minM; } return *this; } G4QChipolino::~G4QChipolino() {} // Standard output for G4QChipolino ostream& operator<<(ostream& lhs, G4QChipolino& rhs) {// =========================================== lhs<<"{1="<