G4ExcitedDeltaConstructor.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 "G4ExcitedDeltaConstructor.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 
00049 G4ExcitedDeltaConstructor::G4ExcitedDeltaConstructor():
00050     G4ExcitedBaryonConstructor(NStates, DeltaIsoSpin)
00051 {
00052 
00053 }
00054 
00055 G4ExcitedDeltaConstructor::~G4ExcitedDeltaConstructor()
00056 {
00057 }
00058 
00059 G4int G4ExcitedDeltaConstructor::GetEncoding(G4int iIsoSpin3, G4int idxState)
00060 {
00061   G4int encoding;
00062   // Delta has exceptinal encoding
00063   if ((idxState==1)||(idxState==3)||(idxState==4)||(idxState==5)||(idxState==7))  {
00064     encoding = GetEncodingOffset(idxState);
00065     if ((iIsoSpin3==3)||(iIsoSpin3==-3)) {
00066       // normal encoding 
00067       encoding += 1000*GetQuarkContents(0, iIsoSpin3);
00068       encoding +=  100*GetQuarkContents(1, iIsoSpin3);
00069       encoding +=   10*GetQuarkContents(2, iIsoSpin3);
00070     } else if (iIsoSpin3== +1){
00071       // 1st <--> 2nd quark 
00072       encoding += 1000*GetQuarkContents(0, iIsoSpin3);
00073       encoding +=   10*GetQuarkContents(1, iIsoSpin3);
00074       encoding +=  100*GetQuarkContents(2, iIsoSpin3);
00075     } else if (iIsoSpin3== -1){
00076       // 1st <--> 0th quark 
00077       encoding +=  100*GetQuarkContents(0, iIsoSpin3);
00078       encoding += 1000*GetQuarkContents(1, iIsoSpin3);
00079       encoding +=   10*GetQuarkContents(2, iIsoSpin3);
00080     }
00081     encoding += GetiSpin(idxState) +1;
00082   } else {
00083     encoding = G4ExcitedBaryonConstructor::GetEncoding(iIsoSpin3, idxState);
00084   }
00085   return encoding;
00086 }
00087 G4DecayTable* G4ExcitedDeltaConstructor::CreateDecayTable(
00088                                                  const G4String&  parentName,  
00089                                                  G4int iIso3, 
00090                                                  G4int iState,
00091                                                  G4bool fAnti)
00092 {
00093   // create decay table
00094   G4DecayTable* decayTable =  new G4DecayTable();
00095 
00096   G4double br;
00097   if ( (br=bRatio[iState][NGamma]) >0.0) {
00098     AddNGammaMode( decayTable, parentName, br, iIso3, fAnti);
00099   }
00100 
00101   if ( (br=bRatio[iState][NPi]) >0.0) {
00102     AddNPiMode( decayTable, parentName, br, iIso3, fAnti);
00103   }
00104 
00105   if ( (br=bRatio[iState][NRho]) >0.0) {
00106     AddNRhoMode( decayTable, parentName, br, iIso3, fAnti);
00107   }
00108 
00109   if ( (br=bRatio[iState][DeltaPi]) >0.0) {
00110     AddDeltaPiMode( decayTable, parentName, br, iIso3, fAnti);
00111   }
00112 
00113   if ( (br=bRatio[iState][NStarPi]) >0.0) {
00114     AddNStarPiMode( decayTable, parentName, br, iIso3, fAnti);
00115   }
00116 
00117   return  decayTable;
00118 }
00119 
00120 G4DecayTable*  G4ExcitedDeltaConstructor::AddNGammaMode( 
00121                                    G4DecayTable* decayTable, const G4String& nameParent,
00122                                     G4double br, G4int iIso3, G4bool fAnti)
00123 {
00124   G4VDecayChannel* mode;
00125 
00126   // 
00127   G4String daughterN;
00128   if (iIso3 == +1) { 
00129     daughterN = "proton";  
00130   } else if (iIso3 == -1) {
00131     daughterN = "neutron"; 
00132   } else {
00133     // can not decay into N+gamma
00134     return decayTable;
00135   }
00136 
00137   if (fAnti) daughterN = "anti_" + daughterN;
00138 
00139   // create decay channel  [parent    BR     #daughters]
00140   mode = new G4PhaseSpaceDecayChannel(nameParent, br, 2,
00141                                            daughterN,"gamma");
00142   // add decay table
00143   decayTable->Insert(mode);
00144 
00145   return decayTable;
00146 }
00147 
00148 G4DecayTable*  G4ExcitedDeltaConstructor::AddNPiMode( 
00149                                     G4DecayTable* decayTable, const G4String& nameParent,
00150                                     G4double br, G4int iIso3, G4bool fAnti)
00151 {
00152   G4VDecayChannel* mode;
00153 
00154   G4String daughterN;
00155   G4String daughterPi;
00156   G4double r = 0.;
00157 
00158   // ------------ N pi0 ------------ 
00159   // determine daughters
00160   if ((iIso3 == +1)||(iIso3 == -1)) {
00161     if (iIso3 == +1) {
00162       daughterN  = "proton";
00163       daughterPi = "pi0";
00164       r = br*2./3.;
00165     } else  if (iIso3 == -1) {
00166       daughterN  = "neutron";
00167       daughterPi = "pi0";
00168       r = br/3.;
00169     } 
00170     if (fAnti) daughterN = "anti_" + daughterN;
00171     // create decay channel  [parent    BR     #daughters]
00172     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00173                                         daughterN,daughterPi);
00174     // add decay table
00175     decayTable->Insert(mode);
00176   }
00177 
00178   // -------------N pi +/- -------------- 
00179   // determine daughters
00180   if (iIso3 == +3) {
00181     daughterN  = "proton";
00182     if (!fAnti) {
00183       daughterPi = "pi+";
00184     } else {
00185       daughterPi = "pi-";
00186     }
00187     r = br;
00188   } else  if (iIso3 == +1) {
00189     daughterN  = "neutron";
00190     if (!fAnti) {
00191       daughterPi = "pi+";
00192     } else {
00193       daughterPi = "pi-";
00194     }
00195     r = br/3.;
00196   } else if (iIso3 == -1) {
00197     daughterN  = "proton";
00198     if (!fAnti) {
00199       daughterPi = "pi-";
00200     } else {
00201       daughterPi = "pi+";
00202     }
00203     r = br*2./3.;
00204   } else if (iIso3 == -3) {
00205     daughterN  = "neutron";
00206     if (!fAnti) {
00207       daughterPi = "pi-";
00208     } else {
00209       daughterPi = "pi+";
00210     }
00211     r = br;
00212   }
00213   if (fAnti) daughterN = "anti_" + daughterN;
00214 
00215   // create decay channel  [parent    BR     #daughters]
00216   mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00217                                            daughterN,daughterPi);
00218   // add decay table
00219   decayTable->Insert(mode);
00220 
00221   return decayTable;
00222 }
00223 
00224 
00225 G4DecayTable*  G4ExcitedDeltaConstructor::AddNRhoMode( 
00226                                     G4DecayTable* decayTable, const G4String& nameParent,
00227                                     G4double br, G4int iIso3, G4bool fAnti)
00228 {
00229   G4VDecayChannel* mode;
00230 
00231   G4String daughterN;
00232   G4String daughterRho;
00233   G4double r = 0.;
00234 
00235   // ------------ N Rho0 ------------ 
00236   // determine daughters
00237   if ((iIso3 == +1)||(iIso3 == -1)) {
00238     if (iIso3 == +1) {
00239       daughterN  = "proton";
00240       daughterRho = "rho0";
00241       r = br*2./3.;
00242     } else  if (iIso3 == -1) {
00243       daughterN  = "neutron";
00244       daughterRho = "rho0";
00245       r = br/3.;
00246     } 
00247     if (fAnti) daughterN = "anti_" + daughterN;
00248     // create decay channel  [parent    BR     #daughters]
00249     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00250                                         daughterN,daughterRho);
00251     // add decay table
00252     decayTable->Insert(mode);
00253   }
00254 
00255   // -------------N Rho +/- -------------- 
00256   // determine daughters
00257   if (iIso3 == +3) {
00258     daughterN  = "proton";
00259     if (!fAnti) {
00260       daughterRho = "rho+";
00261     } else {
00262       daughterRho = "rho-";
00263     }
00264     r = br;
00265   } else  if (iIso3 == +1) {
00266     daughterN  = "neutron";
00267     if (!fAnti) {
00268       daughterRho = "rho+";
00269     } else {
00270       daughterRho = "rho-";
00271     }
00272     r = br/3.;
00273   } else if (iIso3 == -1) {
00274     daughterN  = "proton";
00275     if (!fAnti) {
00276       daughterRho = "rho-";
00277     } else {
00278       daughterRho = "rho+";
00279     }
00280     r = br*2./3.;
00281   } else if (iIso3 == -3) {
00282     daughterN  = "neutron";
00283     if (!fAnti) {
00284       daughterRho = "rho-";
00285     } else {
00286       daughterRho = "rho+";
00287     }
00288     r = br;
00289   }
00290   if (fAnti) daughterN = "anti_" + daughterN;
00291 
00292   // create decay channel  [parent    BR     #daughters]
00293   mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00294                                            daughterN,daughterRho);
00295   // add decay table
00296   decayTable->Insert(mode);
00297 
00298   return decayTable;
00299 }
00300 
00301 G4DecayTable*  G4ExcitedDeltaConstructor::AddNStarPiMode( 
00302                                     G4DecayTable* decayTable, const G4String& nameParent,
00303                                     G4double br, G4int iIso3, G4bool fAnti)
00304 {
00305   G4VDecayChannel* mode;
00306 
00307   G4String daughterN;
00308   G4String daughterPi;
00309   G4double r = 0.;
00310 
00311   // ------------ N pi0 ------------ 
00312   // determine daughters
00313   if ((iIso3 == +1)||(iIso3 == -1)) {
00314     if (iIso3 == +1) {
00315       daughterN  = "N(1440)+";
00316       daughterPi = "pi0";
00317       r = br*2./3.;
00318     } else  if (iIso3 == -1) {
00319       daughterN  = "N(1440)0";
00320       daughterPi = "pi0";
00321       r = br/3.;
00322     } 
00323     if (fAnti) daughterN = "anti_" + daughterN;
00324     // create decay channel  [parent    BR     #daughters]
00325     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00326                                         daughterN,daughterPi);
00327     // add decay table
00328     decayTable->Insert(mode);
00329   }
00330 
00331   // -------------N pi +/- -------------- 
00332   // determine daughters
00333   if (iIso3 == +3) {
00334     daughterN  = "N(1440)+";
00335     if (!fAnti) {
00336       daughterPi = "pi+";
00337     } else {
00338       daughterPi = "pi-";
00339     }
00340     r = br;
00341   } else  if (iIso3 == +1) {
00342     daughterN  = "N(1440)0";
00343     if (!fAnti) {
00344       daughterPi = "pi+";
00345     } else {
00346       daughterPi = "pi-";
00347     }
00348     r = br/3.;
00349   } else if (iIso3 == -1) {
00350     daughterN  = "N(1440)+";
00351     if (!fAnti) {
00352       daughterPi = "pi-";
00353     } else {
00354       daughterPi = "pi+";
00355     }
00356     r = br*2./3.;
00357   } else if (iIso3 == -3) {
00358     daughterN  = "N(1440)0";
00359     if (!fAnti) {
00360       daughterPi = "pi-";
00361     } else {
00362       daughterPi = "pi+";
00363     }
00364     r = br;
00365   }
00366   if (fAnti) daughterN = "anti_" + daughterN;
00367 
00368   // create decay channel  [parent    BR     #daughters]
00369   mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00370                                            daughterN,daughterPi);
00371   // add decay table
00372   decayTable->Insert(mode);
00373 
00374   return decayTable;
00375 }
00376 
00377 G4DecayTable*  G4ExcitedDeltaConstructor::AddDeltaPiMode( 
00378                                     G4DecayTable* decayTable, const G4String& nameParent,
00379                                     G4double br, G4int iIso3, G4bool fAnti)
00380 {
00381   G4VDecayChannel* mode;
00382 
00383   G4String daughterDelta;
00384   G4String daughterPi;
00385   G4double r;
00386 
00387   // ------------ Delta pi +------------ 
00388   // determine daughters
00389   if (iIso3 == +3) {
00390     daughterDelta  = "delta+";
00391     r = br*0.4;
00392   } else  if (iIso3 == +1) {
00393     daughterDelta  = "delta0";
00394     r = br*8./15.0;
00395   } else  if (iIso3 == -1) {
00396     daughterDelta  = "delta-";
00397     r = br*6./15.;
00398   } else {
00399      r  = 0.;
00400   }
00401   if (!fAnti) {
00402     daughterPi = "pi+";
00403   } else {
00404     daughterPi = "pi-";
00405   }
00406    if (fAnti) daughterDelta = "anti_" + daughterDelta;
00407   if (r>0.0) {
00408     // create decay channel  [parent    BR     #daughters]
00409     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00410                                         daughterDelta,daughterPi);
00411     // add decay table
00412     decayTable->Insert(mode);
00413   }
00414 
00415   // ------------ Delta pi0 ------------ 
00416   // determine daughters
00417   if (iIso3 == +3) {
00418     daughterDelta  = "delta++";
00419     r = br*0.6;
00420   } else  if (iIso3 == +1) {
00421     daughterDelta  = "delta+";
00422     r = br*1./15.0;
00423   } else  if (iIso3 == -1) {
00424     daughterDelta  = "delta0";
00425     r = br*1./15.;
00426   } else {
00427     daughterDelta  = "delta-";
00428     r = br*0.6;
00429   }
00430   daughterPi = "pi0";
00431   if (fAnti) daughterDelta = "anti_" + daughterDelta;
00432   
00433   // create decay channel  [parent    BR     #daughters]
00434   mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00435                                       daughterDelta,daughterPi);
00436   // add decay table
00437   decayTable->Insert(mode);
00438 
00439   // ------------ Delta pi - ------------- 
00440   // determine daughters
00441   if (iIso3 == +3) {
00442     r= 0.;
00443   } else  if (iIso3 == +1) {
00444     daughterDelta  = "delta++";
00445     r = br*6./15.0;
00446   } else  if (iIso3 == -1) {
00447     daughterDelta  = "delta+";
00448     r = br*8./15.;
00449   } else {
00450     daughterDelta  = "delta0";
00451     r = br*0.4;
00452   }
00453   if (!fAnti) {
00454     daughterPi = "pi-";
00455   } else {
00456     daughterPi = "pi+";
00457   }
00458    if (fAnti) daughterDelta = "anti_" + daughterDelta;
00459   if (r>0.0) {
00460     // create decay channel  [parent    BR     #daughters]
00461     mode = new G4PhaseSpaceDecayChannel(nameParent, r, 2,
00462                                         daughterDelta,daughterPi);
00463     // add decay table
00464     decayTable->Insert(mode);
00465   }
00466 
00467   return decayTable;
00468 }
00469 
00470 const char* G4ExcitedDeltaConstructor::name[] = 
00471 {
00472   "delta(1600)", "delta(1620)", "delta(1700)", "delta(1900)", "delta(1905)",
00473   "delta(1910)", "delta(1920)", "delta(1930)", "delta(1950)"
00474 };
00475 
00476 const G4double G4ExcitedDeltaConstructor::mass[] = 
00477 {
00478   1.600*GeV, 1.630*GeV, 1.700*GeV, 1.900*GeV,  1.890*GeV, 
00479   1.910*GeV, 1.920*GeV, 1.960*GeV, 1.930*GeV
00480 };
00481 
00482 const G4double G4ExcitedDeltaConstructor::width[] = {
00483   350.0*MeV, 145.0*MeV, 300.0*MeV, 200.0*MeV, 330.0*MeV,
00484   250.0*MeV, 200.0*MeV, 360.0*MeV, 280.0*MeV
00485 };
00486 
00487 const G4int G4ExcitedDeltaConstructor::iSpin[] = 
00488 {
00489     3,   1,   3,   1,   5,
00490     1,   3,   5,   7
00491 };
00492 
00493 const G4int G4ExcitedDeltaConstructor::iParity[] = {
00494   +1,  -1,   -1,  -1,  +1,
00495   +1,  +1,   -1,  +1
00496 };
00497 
00498 const G4int G4ExcitedDeltaConstructor::encodingOffset[] = {
00499   30000,     0, 10000, 10000,     0,
00500   20000, 20000, 10000,     0
00501 };
00502 
00503 const G4double G4ExcitedDeltaConstructor::bRatio[ G4ExcitedDeltaConstructor::NStates ][ G4ExcitedDeltaConstructor::NumberOfDecayModes] = 
00504 {
00505 //   NGamma    Npi     NRho DeltaPi    N*Pi
00506    {    0.0,   0.15,    0.0,   0.55,   0.30 },
00507    {    0.0,   0.25,    0.0,   0.60,   0.15 },
00508    {    0.0,   0.20,   0.10,   0.55,   0.15 },
00509    {    0.0,   0.30,   0.15,   0.30,   0.25 },
00510    {    0.0,   0.20,   0.60,   0.10,   0.10 },
00511    {    0.0,   0.35,   0.40,   0.15,   0.10 },
00512    {    0.0,   0.15,   0.30,   0.30,   0.25 },
00513    {    0.0,   0.20,   0.25,   0.25,   0.30 },
00514    {   0.01,   0.44,   0.15,   0.20,   0.20 }
00515 };
00516 
00517 
00518 
00519 
00520 
00521 
00522 
00523 
00524 
00525 
00526 
00527 
00528 
00529 
00530 
00531 

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