G4ExcitedSigmaConstructor.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 // 
00030 // --------------------------------------------------------------
00031 //      GEANT 4 class implementation file 
00032 //
00033 //      History: first implementation, based on object model of
00034 //      10 oct 1998  H.Kurashige
00035 // ---------------------------------------------------------------
00036 
00037 
00038 #include "G4ExcitedSigmaConstructor.hh"
00039 
00040 #include "G4SystemOfUnits.hh"
00041 #include "G4ParticleDefinition.hh"
00042 #include "G4ParticleTable.hh"
00043 #include "G4ShortLivedTable.hh"
00044 #include "G4PhaseSpaceDecayChannel.hh"
00045 #include "G4VDecayChannel.hh"
00046 #include "G4DecayTable.hh"
00047 
00048 G4ExcitedSigmaConstructor::G4ExcitedSigmaConstructor():
00049     G4ExcitedBaryonConstructor(NStates, SigmaIsoSpin)
00050 {
00051 
00052 }
00053 
00054 G4ExcitedSigmaConstructor::~G4ExcitedSigmaConstructor()
00055 {
00056 }
00057 
00058 G4DecayTable* G4ExcitedSigmaConstructor::CreateDecayTable(
00059                                                  const G4String&  parentName,  
00060                                                  G4int iIso3, 
00061                                                  G4int iState,
00062                                                  G4bool fAnti)
00063 {
00064 
00065   // create decay table
00066   G4DecayTable* decayTable =  new G4DecayTable();
00067 
00068   G4double br;
00069   if ( (br=bRatio[iState][NK]) >0.0) {
00070     AddNKMode( decayTable, parentName, br, iIso3, fAnti);
00071   }
00072 
00073   if ( (br=bRatio[iState][NKStar]) >0.0) {
00074     AddNKStarMode( decayTable, parentName, br, iIso3, fAnti);
00075   }
00076 
00077   if ( (br=bRatio[iState][SigmaPi]) >0.0) {
00078     AddSigmaPiMode( decayTable, parentName, br, iIso3, fAnti);
00079   }
00080 
00081   if ( (br=bRatio[iState][SigmaStarPi]) >0.0) {
00082     AddSigmaStarPiMode( decayTable, parentName, br, iIso3, fAnti);
00083   }
00084 
00085   if ( (br=bRatio[iState][LambdaPi]) >0.0) {
00086     AddLambdaPiMode( decayTable, parentName, br, iIso3, fAnti);
00087   }
00088 
00089   if ( (br=bRatio[iState][SigmaEta]) >0.0) {
00090     AddSigmaEtaMode( decayTable, parentName, br, iIso3, fAnti);
00091   }
00092 
00093   if ( (br=bRatio[iState][LambdaStarPi]) >0.0) {
00094     AddLambdaStarPiMode( decayTable, parentName, br, iIso3, fAnti);
00095   }
00096 
00097   if ( (br=bRatio[iState][DeltaK]) >0.0) {
00098     AddDeltaKMode( decayTable, parentName, br, iIso3, fAnti);
00099   }
00100 
00101   return  decayTable;
00102 }
00103 
00104 G4DecayTable*  G4ExcitedSigmaConstructor::AddSigmaEtaMode( 
00105                                    G4DecayTable* decayTable, const G4String& nameParent,
00106                                     G4double br, G4int iIso3, G4bool fAnti)
00107 {
00108   G4VDecayChannel* mode;
00109   // 
00110   G4String daughterH;  
00111   if (iIso3== +2) {
00112      daughterH = "sigma+";
00113    } else if (iIso3== 0) {
00114      daughterH = "sigma0";
00115    } else if (iIso3== -2) {
00116      daughterH = "sigma-";
00117    }
00118   if (fAnti) daughterH = "anti_" + daughterH;
00119 
00120   // create decay channel  [parent    BR     #daughters]
00121   mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
00122                                            daughterH,"eta");
00123   // add decay table
00124   decayTable->Insert(mode);
00125 
00126   return decayTable;
00127 }
00128 
00129 G4DecayTable*  G4ExcitedSigmaConstructor::AddNKMode( 
00130                                     G4DecayTable* decayTable, const G4String& nameParent,
00131                                     G4double br, G4int iIso3, G4bool fAnti)
00132 
00133 
00134 {
00135   G4VDecayChannel* mode;
00136 
00137   G4String daughterN;
00138   G4String daughterK;
00139   G4double r = 0.;
00140 
00141   // ------------ N K- ------------ 
00142   // determine daughters
00143   if (iIso3== +2) {
00144     r=0.;
00145   } else if (iIso3== 0) {
00146     daughterN  = "proton";
00147     r = br/2.;
00148   } else if (iIso3== -2) {
00149     daughterN  = "neutron";
00150     r = br;
00151   }
00152   if (!fAnti) {
00153     daughterK = "kaon-";
00154   } else {
00155     daughterK = "kaon+";
00156   }  
00157   if (fAnti) daughterN = "anti_" + daughterN;
00158   if (r>0.) {
00159     // create decay channel  [parent    BR     #daughters]
00160     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00161                                         daughterN,daughterK);
00162     // add decay table
00163     decayTable->Insert(mode);
00164   }
00165 
00166   // ------------ N K0 ------------ 
00167   // determine daughters
00168   if (iIso3== +2) {
00169     daughterN  = "proton";
00170     r=br;
00171   } else if (iIso3== 0) {
00172     daughterN  = "neutron";
00173      r = br/2.;
00174   } else if (iIso3== -2) {
00175     r = 0.;
00176   }
00177   if (!fAnti) {
00178     daughterK = "anti_kaon0";
00179   } else {
00180 
00181     daughterK = "kaon0";
00182   }
00183   if (fAnti) daughterN = "anti_" + daughterN;
00184   if (r>0.) {
00185     // create decay channel  [parent    BR     #daughters]
00186     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00187                                         daughterN,daughterK);
00188     // add decay table
00189     decayTable->Insert(mode);
00190   }
00191 
00192   return decayTable;
00193 }
00194 
00195 G4DecayTable*  G4ExcitedSigmaConstructor::AddDeltaKMode( 
00196                                     G4DecayTable* decayTable, const G4String& nameParent,
00197                                     G4double br, G4int iIso3, G4bool fAnti)
00198 {
00199   G4VDecayChannel* mode;
00200 
00201   G4String daughterN;
00202   G4String daughterK;
00203   G4double r = 0.;
00204 
00205   // ------------ N K- ------------ 
00206   // determine daughters
00207   if (iIso3== +2) {
00208     daughterN  = "delta++";
00209     r=0.75*br;
00210   } else if (iIso3== 0) {
00211     daughterN  = "delta+";
00212     r = br/2.;
00213   } else if (iIso3== -2) {
00214     daughterN  = "delta0";
00215     r = 0.25*br;
00216   }
00217   if (!fAnti) {
00218     daughterK = "kaon-";
00219   } else {
00220     daughterK = "kaon+";
00221   }
00222   if (fAnti) daughterN = "anti_" + daughterN;
00223   if (r>0.) {
00224     // create decay channel  [parent    BR     #daughters]
00225     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00226                                         daughterN,daughterK);
00227     // add decay table
00228     decayTable->Insert(mode);
00229   }
00230 
00231   // ------------ N K0 ------------ 
00232   // determine daughters
00233   if (iIso3== +2) {
00234     daughterN  = "delta+";
00235     r=0.25*br;
00236   } else if (iIso3== 0) {
00237     daughterN  = "delta0";
00238      r = br/2.;
00239   } else if (iIso3== -2) {
00240     daughterN  = "delta-";
00241     r=0.75*br;
00242   }
00243   if (!fAnti) {
00244     daughterK = "anti_kaon0";
00245   } else {
00246     daughterK = "kaon0";
00247   }
00248   if (fAnti) daughterN = "anti_" + daughterN;
00249   if (r>0.) {
00250 
00251 
00252     // create decay channel  [parent    BR     #daughters]
00253     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00254                                         daughterN,daughterK);
00255     // add decay table
00256     decayTable->Insert(mode);
00257   }
00258 
00259   return decayTable;
00260 }
00261 
00262 
00263 G4DecayTable*  G4ExcitedSigmaConstructor::AddNKStarMode( 
00264                                     G4DecayTable* decayTable, const G4String& nameParent,
00265                                     G4double br, G4int iIso3, G4bool fAnti)
00266 {
00267   G4VDecayChannel* mode;
00268 
00269   G4String daughterN;
00270   G4String daughterK;
00271   G4double r = 0.;
00272 
00273   // ------------ N K- ------------ 
00274   // determine daughters
00275   if (iIso3== +2) {
00276 
00277     r=0.;
00278   } else if (iIso3== 0) {
00279     daughterN  = "proton";
00280     r = br/2.;
00281   } else if (iIso3== -2) {
00282     daughterN  = "neutron";
00283     r = br;
00284   }
00285   if (!fAnti) {
00286     daughterK = "k_star-";
00287   } else {
00288     daughterK = "k_star+";
00289   }
00290   if (fAnti) daughterN = "anti_" + daughterN;
00291   if (r>0.) {
00292     // create decay channel  [parent    BR     #daughters]
00293     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00294                                         daughterN,daughterK);
00295     // add decay table
00296     decayTable->Insert(mode);
00297   }
00298 
00299   // ------------ N K0 ------------ 
00300 
00301   // determine daughters
00302   if (iIso3== +2) {
00303     daughterN  = "proton";
00304     r=br;
00305   } else if (iIso3== 0) {
00306     daughterN  = "neutron";
00307     r = br/2.;
00308   } else if (iIso3== -2) {
00309     r = 0.;
00310   }
00311   if (!fAnti) {
00312     daughterK = "anti_k_star0";
00313   } else {
00314     daughterK = "k_star0";
00315   }
00316   if (fAnti) daughterN = "anti_" + daughterN;
00317   // create decay channel  [parent    BR     #daughters]
00318   if (r>0.) {
00319     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00320                                            daughterN,daughterK);
00321     // add decay table
00322     decayTable->Insert(mode);
00323   }
00324 
00325   return decayTable;
00326 }
00327 
00328 G4DecayTable*  G4ExcitedSigmaConstructor::AddSigmaPiMode( 
00329                                     G4DecayTable* decayTable, const G4String& nameParent,
00330                                     G4double br, G4int iIso3, G4bool fAnti)
00331 {
00332   G4VDecayChannel* mode;
00333 
00334   G4String daughterSigma;
00335   G4String daughterPi;
00336   G4double r = 0.;
00337 
00338   // ------------ Sigma+ pi - ------------ 
00339   // determine daughters
00340   if (iIso3== +2) {
00341     r = 0.;
00342   } else if (iIso3== 0) {
00343     daughterSigma = "sigma+";
00344     r = br/2.;
00345   } else if (iIso3== -2) {
00346     daughterSigma = "sigma0";
00347     r = br/2.;
00348   }
00349   if (!fAnti) {
00350     daughterPi = "pi-";
00351   } else {
00352     daughterPi = "pi+";
00353   }
00354   if (fAnti) daughterSigma = "anti_" + daughterSigma;
00355   if (r>0.) {
00356     // create decay channel  [parent    BR     #daughters]
00357     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00358                                         daughterSigma,daughterPi);
00359     // add decay table
00360     decayTable->Insert(mode);
00361   }
00362   // ------------ Sigma0 Pi0 ------------ 
00363   // determine daughters
00364   if (iIso3== +2) {
00365     daughterSigma = "sigma+";
00366     r = br/2.;
00367   } else if (iIso3== 0) {
00368     r = 0.;
00369   } else if (iIso3== -2) {
00370     daughterSigma = "sigma-";
00371 
00372 
00373     r = br/2.;
00374   }
00375   daughterPi = "pi0";
00376   if (fAnti) daughterSigma = "anti_" + daughterSigma;
00377   if (r>0.) {
00378     // create decay channel  [parent    BR     #daughters]
00379     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00380                                         daughterSigma,daughterPi);
00381     // add decay table
00382     decayTable->Insert(mode);
00383   }
00384 
00385   // ------------ Sigma- pi + ------------ 
00386   // determine daughters
00387   if (iIso3== +2) {
00388     daughterSigma = "sigma0";
00389     r = br/2.;
00390   } else if (iIso3== 0) {
00391     daughterSigma = "sigma-";
00392     r = br/2.;
00393   } else if (iIso3== -2) {
00394     r = 0.;
00395   }
00396   if (!fAnti) {
00397     daughterPi = "pi+";
00398   } else {
00399     daughterPi = "pi-";
00400   }
00401   if (fAnti) daughterSigma = "anti_" + daughterSigma;
00402   if (r>0.) {
00403     // create decay channel  [parent    BR     #daughters]
00404     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00405                                         daughterSigma,daughterPi);
00406     // add decay table
00407     decayTable->Insert(mode);
00408   }
00409 
00410   return decayTable;
00411 }
00412 
00413 
00414 G4DecayTable*  G4ExcitedSigmaConstructor::AddSigmaStarPiMode( 
00415                                     G4DecayTable* decayTable, const G4String& nameParent,
00416                                     G4double br, G4int iIso3, G4bool fAnti)
00417 {
00418   G4VDecayChannel* mode;
00419 
00420 
00421   G4String daughterSigma;
00422   G4String daughterPi;
00423   G4double r = 0.;
00424 
00425   // ------------ Sigma+ pi - ------------ 
00426   // determine daughters
00427   if (iIso3== +2) {
00428     r = 0.;
00429   } else if (iIso3== 0) {
00430     daughterSigma = "sigma(1385)+";
00431     r = br/2.;
00432   } else if (iIso3== -2) {
00433     daughterSigma = "sigma(1385)0";
00434     r = br/2.;
00435   }
00436   if (!fAnti) {
00437     daughterPi = "pi-";
00438   } else {
00439     daughterPi = "pi+";
00440   }
00441   if (fAnti) daughterSigma = "anti_" + daughterSigma;
00442   if (r>0.) {
00443     // create decay channel  [parent    BR     #daughters]
00444     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00445                                         daughterSigma,daughterPi);
00446     // add decay table
00447     decayTable->Insert(mode);
00448   }
00449   // ------------ Sigma0 Pi0 ------------ 
00450   // determine daughters
00451   if (iIso3== +2) {
00452     daughterSigma = "sigma(1385)+";
00453     r = br/2.;
00454   } else if (iIso3== 0) {
00455     r = 0.;
00456   } else if (iIso3== -2) {
00457     daughterSigma = "sigma(1385)-";
00458     r = br/2.;
00459   }
00460   daughterPi = "pi0";
00461   if (fAnti) daughterSigma = "anti_" + daughterSigma;
00462   if (r>0.) {
00463     // create decay channel  [parent    BR     #daughters]
00464     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00465                                         daughterSigma,daughterPi);
00466 
00467     // add decay table
00468     decayTable->Insert(mode);
00469   }
00470 
00471   // ------------ Sigma- pi + ------------ 
00472   // determine daughters
00473   if (iIso3== +2) {
00474     daughterSigma = "sigma(1385)0";
00475     r = br/2.;
00476   } else if (iIso3== 0) {
00477     daughterSigma = "sigma(1385)-";
00478     r = br/2.;
00479   } else if (iIso3== -2) {
00480     r = 0.;
00481   }
00482   if (!fAnti) {
00483     daughterPi = "pi+";
00484   } else {
00485     daughterPi = "pi-";
00486   }
00487   if (fAnti) daughterSigma = "anti_" + daughterSigma;
00488   if (r>0.) {
00489     // create decay channel  [parent    BR     #daughters]
00490 
00491     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00492                                         daughterSigma,daughterPi);
00493     // add decay table
00494     decayTable->Insert(mode);
00495   }
00496 
00497   return decayTable;
00498 }
00499 
00500 G4DecayTable*  G4ExcitedSigmaConstructor::AddLambdaPiMode( 
00501                                     G4DecayTable* decayTable, const G4String& nameParent,
00502                                     G4double br, G4int iIso3, G4bool fAnti)
00503 {
00504   G4VDecayChannel* mode;
00505 
00506   G4String daughterLambda = "lambda";
00507   G4String daughterPi;
00508 
00509   // determine daughters
00510   if (iIso3== +2) {
00511     if (!fAnti) {
00512       daughterPi = "pi+";
00513     } else {
00514       daughterPi = "pi-";
00515     }
00516   } else if (iIso3== 0) {
00517     daughterPi = "pi0";
00518   } else if (iIso3== -2) {
00519     if (!fAnti) {
00520       daughterPi = "pi-";
00521     } else {
00522       daughterPi = "pi+";
00523     }
00524   }
00525   if (fAnti) daughterLambda = "anti_" + daughterLambda;
00526   // create decay channel  [parent    BR     #daughters]
00527   mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
00528                                            daughterLambda, daughterPi);
00529   // add decay table
00530   decayTable->Insert(mode);
00531 
00532   return decayTable;
00533 }
00534 
00535 G4DecayTable*  G4ExcitedSigmaConstructor::AddLambdaStarPiMode( 
00536                                     G4DecayTable* decayTable, const G4String& nameParent,
00537                                     G4double br, G4int iIso3, G4bool fAnti)
00538 {
00539   G4VDecayChannel* mode;
00540 
00541   G4String daughterLambda = "lambda(1405)";
00542   G4String daughterPi;
00543 
00544   // determine daughters
00545   if (iIso3== +2) {
00546     if (!fAnti) {
00547       daughterPi = "pi+";
00548     } else {
00549       daughterPi = "pi-";
00550     }
00551   } else if (iIso3== 0) {
00552     daughterPi = "pi0";
00553   } else if (iIso3== -2) {
00554     if (!fAnti) {
00555       daughterPi = "pi-";
00556     } else {
00557       daughterPi = "pi+";
00558     }
00559   }
00560 
00561   if (fAnti) daughterLambda = "anti_" + daughterLambda;
00562   // create decay channel  [parent    BR     #daughters]
00563   mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
00564                                            daughterLambda,daughterPi);
00565   // add decay table
00566   decayTable->Insert(mode);
00567 
00568   return decayTable;
00569 }
00570 
00571 
00572 G4double G4ExcitedSigmaConstructor::GetMass(G4int iState, G4int iso3)
00573 { 
00574   G4double fmass = mass[iState];
00575   if (iState == 0 ) {
00576     if (iso3== +2)       fmass -= 0.9*MeV;  // sigma+
00577     else if (iso3== -2) fmass += 3.5*MeV;  // sigma-
00578   }
00579   return fmass;
00580 }
00581 
00582 G4double G4ExcitedSigmaConstructor::GetWidth(G4int iState, G4int iso3)
00583 {
00584   G4double fw=width[iState];
00585   if (iState == 0 ) {
00586     if (iso3== +2)       fw = 35.8*MeV;  // sigma+
00587     else if (iso3== -2)  fw = 39.4*MeV;  // sigma-
00588   }
00589   return fw;
00590 }
00591 
00592 const char* G4ExcitedSigmaConstructor::name[] = {
00593   "sigma(1385)","sigma(1660)","sigma(1670)","sigma(1750)","sigma(1775)",
00594   "sigma(1915)","sigma(1940)","sigma(2030)"
00595 };
00596 
00597 const G4double G4ExcitedSigmaConstructor::mass[] = {
00598  1.3837*GeV, 1.660*GeV, 1.670*GeV, 1.750*GeV,  1.775*GeV, 
00599   1.915*GeV, 1.940*GeV, 2.030*GeV
00600 };
00601 
00602 const G4double G4ExcitedSigmaConstructor::width[] = {
00603    36.0*MeV, 100.0*MeV,  60.0*MeV,  90.0*MeV, 120.0*MeV,
00604   120.0*MeV, 220.0*MeV, 180.0*MeV
00605 };
00606 
00607 const G4int G4ExcitedSigmaConstructor::iSpin[] = {
00608     3,   1,   3,   1,   5,
00609     5,   3,   7
00610 };
00611 
00612 const G4int G4ExcitedSigmaConstructor::iParity[] = {
00613   +1,  +1,   -1,  -1,  -1,
00614   +1,  -1,   +1
00615 };
00616 
00617 
00618 const G4int G4ExcitedSigmaConstructor::encodingOffset[] = {
00619       0, 10000, 10000, 20000,     0,
00620   10000, 20000,     0
00621 };
00622 
00623 const G4double G4ExcitedSigmaConstructor::bRatio[ G4ExcitedSigmaConstructor::NStates ][ G4ExcitedSigmaConstructor::NumberOfDecayModes] = 
00624 {
00625    {   0.0,  0.0, 0.12,  0.0, 0.88,   0.0,   0.0,   0.0}, 
00626    {  0.30,  0.0, 0.35,  0.0, 0.35,   0.0,   0.0,   0.0}, 
00627    {  0.15,  0.0, 0.70,  0.0, 0.15,   0.0,   0.0,   0.0}, 
00628    {  0.40,  0.0, 0.05,  0.0,  0.0,  0.55,   0.0,   0.0}, 
00629    {  0.40,  0.0, 0.04, 0.10, 0.23,   0.0,  0.23,   0.0}, 
00630    {  0.15,  0.0, 0.40, 0.05, 0.40,   0.0,   0.0,   0.0}, 
00631    {  0.10, 0.15, 0.15, 0.15, 0.15,   0.0,  0.15,  0.15}, 
00632    {  0.20, 0.04, 0.10, 0.10, 0.20,   0.0,  0.18,  0.18} 
00633 
00634 };
00635 
00636 
00637 
00638 
00639 
00640 
00641 
00642 
00643 
00644 
00645 

Generated on Mon May 27 17:48:14 2013 for Geant4 by  doxygen 1.4.7