00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef G4ExcitedMesonConstructor_h
00043 #define G4ExcitedMesonConstructor_h 1
00044
00045 #include "globals.hh"
00046 #include "G4ios.hh"
00047 class G4DecayTable;
00048
00049 class G4ExcitedMesonConstructor
00050 {
00051
00052
00053
00054 public:
00055 G4ExcitedMesonConstructor(G4int nStates = 0, G4int isoSpin=0);
00056 virtual ~G4ExcitedMesonConstructor();
00057
00058 public:
00059 virtual void Construct(G4int indexOfState = -1);
00060
00061 protected:
00062 void ConstructMesons(G4int indexOfState, G4int indexOfType);
00063
00064 G4String GetName(G4int iIso3, G4int iState, G4int idxType);
00065 G4double GetCharge(G4int iIsoSpin3);
00066 G4int GetEncoding(G4int iIsoSpin3, G4int idxState, G4int idxType);
00067 G4int GetQuarkContents(G4int iQ, G4int iIso3, G4int iType);
00068
00069 public:
00070 enum { NMultiplets = 10 };
00071 protected:
00072 enum {
00073 N11P1 = 0, N13P0 = 1, N13P1 = 2, N13P2 = 3,
00074 N11D2 = 4, N13D1 = 5, N13D3 = 6,
00075 N21S0 = 7, N23S1 = 8, N23P2 = 9
00076 };
00077
00078 public:
00079 enum { NMesonTypes = 5 };
00080 protected:
00081 enum { TPi=0, TEta=1, TEtaPrime=2, TK=3, TAntiK=4 };
00082
00083 protected:
00084 const G4String type;
00085 const G4int leptonNumber;
00086 const G4int baryonNumber;
00087
00088 G4bool Exist(G4int idxState, G4int idxType);
00089 G4double GetCharge(G4int iIsoSpin3, G4int idxType);
00090 static const char* name[ NMultiplets ][ NMesonTypes ];
00091 static const G4double mass[ NMultiplets ][ NMesonTypes ];
00092 static const G4double massKdiff[ NMultiplets ];
00093 static const G4double width[ NMultiplets ][ NMesonTypes ];
00094 static const G4double widthKdiff[ NMultiplets ];
00095 static const G4int iIsoSpin[ NMesonTypes ];
00096 static const G4int iSpin[ NMultiplets ];
00097 static const G4int iParity[ NMultiplets ];
00098 static const G4int iGParity[ NMultiplets ][ NMesonTypes ];
00099 static const G4int iChargeConjugation[ NMultiplets ];
00100 static const G4int encodingOffset[ NMultiplets ];
00101
00102 public:
00103 enum { NumberOfDecayModes = 19 };
00104 protected:
00105 enum { MPiGamma = 0, MRhoGamma=1, M2Pi=2, MPiRho=3,
00106 M3Pi= 4, MPiEta=5, M4Pi=6, MKKStar=7,
00107 M2PiEta=8, MRhoEta=9, M2PiRho=10, M2PiOmega=11,
00108 M2Eta=12, M2K=13, M2KPi=14, MPiOmega=15,
00109 MPiF2=16, MPiF0=17, MPiA2=18 };
00110 enum { MKPi = 0, MKStarPi=1, MKRho=2, MKOmega=3,
00111 MKStar2Pi=4, MKTwoPi=5, MKEta=6};
00112
00113
00114 static const G4double bRatio[ NMultiplets ][ NMesonTypes ][ NumberOfDecayModes];
00115
00116 G4DecayTable* CreateDecayTable(const G4String&,
00117 G4int , G4int, G4int);
00118
00119 G4DecayTable* AddKPiMode( G4DecayTable* table, const G4String& name,
00120 G4double br, G4int iIso3, G4int iType);
00121 G4DecayTable* AddKStarPiMode( G4DecayTable* table, const G4String& name,
00122 G4double br, G4int iIso3, G4int iType);
00123 G4DecayTable* AddKStar2PiMode( G4DecayTable* table, const G4String& name,
00124 G4double br, G4int iIso3, G4int iType);
00125 G4DecayTable* AddKRhoMode( G4DecayTable* table, const G4String& name,
00126 G4double br, G4int iIso3, G4int iType);
00127 G4DecayTable* AddKTwoPiMode( G4DecayTable* table, const G4String& name,
00128 G4double br, G4int iIso3, G4int iType);
00129 G4DecayTable* AddKOmegaMode( G4DecayTable* table, const G4String& name,
00130 G4double br, G4int iIso3, G4int iType);
00131 G4DecayTable* AddKEtaMode( G4DecayTable* table, const G4String& name,
00132 G4double br, G4int iIso3, G4int iType);
00133 G4DecayTable* AddPiGammaMode( G4DecayTable* table, const G4String& name,
00134 G4double br, G4int iIso3,G4int iIso);
00135 G4DecayTable* AddRhoGammaMode( G4DecayTable* table, const G4String& name,
00136 G4double br, G4int iIso3, G4int iIso);
00137 G4DecayTable* Add2PiMode( G4DecayTable* table, const G4String& name,
00138 G4double br, G4int iIso3, G4int iIso);
00139 G4DecayTable* AddPiRhoMode( G4DecayTable* table, const G4String& name,
00140 G4double br, G4int iIso3, G4int iIso);
00141 G4DecayTable* AddPiEtaMode( G4DecayTable* table, const G4String& name,
00142 G4double br, G4int iIso3, G4int iIso);
00143 G4DecayTable* AddPiF2Mode( G4DecayTable* table, const G4String& name,
00144 G4double br, G4int iIso3, G4int iIso);
00145 G4DecayTable* AddPiF0Mode( G4DecayTable* table, const G4String& name,
00146 G4double br, G4int iIso3, G4int iIso);
00147 G4DecayTable* AddPiA2Mode( G4DecayTable* table, const G4String& name,
00148 G4double br, G4int iIso3, G4int iIso);
00149 G4DecayTable* Add3PiMode( G4DecayTable* table, const G4String& name,
00150 G4double br, G4int iIso3, G4int iIso);
00151 G4DecayTable* Add4PiMode( G4DecayTable* table, const G4String& name,
00152 G4double br, G4int iIso3, G4int iIso);
00153 G4DecayTable* AddKKStarMode( G4DecayTable* table, const G4String& name,
00154 G4double br, G4int iIso3, G4int iIso);
00155 G4DecayTable* Add2PiEtaMode( G4DecayTable* table, const G4String& name,
00156 G4double br, G4int iIso3, G4int iIso);
00157 G4DecayTable* AddRhoEtaMode( G4DecayTable* table, const G4String& name,
00158 G4double br, G4int iIso3, G4int iIso);
00159 G4DecayTable* Add2PiRhoMode( G4DecayTable* table, const G4String& name,
00160 G4double br, G4int iIso3, G4int iIso);
00161 G4DecayTable* Add2PiOmegaMode( G4DecayTable* table, const G4String& name,
00162 G4double br, G4int iIso3, G4int iIso);
00163 G4DecayTable* AddPiOmegaMode( G4DecayTable* table, const G4String& name,
00164 G4double br, G4int iIso3, G4int iIso);
00165 G4DecayTable* Add2EtaMode( G4DecayTable* table, const G4String& name,
00166 G4double br, G4int iIso3, G4int iIso);
00167 G4DecayTable* Add2KMode( G4DecayTable* table, const G4String& name,
00168 G4double br, G4int iIso3, G4int iIso);
00169 G4DecayTable* Add2KPiMode( G4DecayTable* table, const G4String& name,
00170 G4double br, G4int iIso3, G4int iIso);
00171
00172
00173
00174 };
00175
00176
00177 inline
00178 G4String G4ExcitedMesonConstructor::GetName(G4int iIso3,
00179 G4int iState,
00180 G4int iType)
00181 {
00182 G4String particle = name[iState][iType];
00183 if (iType == TPi) {
00184 if ( iIso3 == +2 ){
00185 particle += "+";
00186 } else if ( iIso3 == -2 ){
00187 particle += "-";
00188 } else {
00189 particle += "0";
00190 }
00191 } else if (iType == TK) {
00192 if ( iIso3 == +1 ){
00193 particle += "+";
00194 } else if ( iIso3 == -1 ){
00195 particle += "0";
00196 }
00197 } else if (iType == TAntiK) {
00198 if ( iIso3 == +1 ){
00199 particle += "0";
00200 particle = "anti_" + particle;
00201 } else if ( iIso3 == -1 ){
00202 particle += "-";
00203 }
00204 }
00205 return particle;
00206 }
00207
00208 #endif