00001
00002
00003
00004
00005
00006
00007 #include "StDecayMode.hh"
00008
00009 StDecayMode* StDecayMode::mInstance = 0;
00010
00011 ClassImp(StDecayMode)
00012
00013 StDecayMode::StDecayMode() {}
00014 StDecayMode::~StDecayMode() { mInstance=0; }
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
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 Int_t StDecayMode::Process(StMcVertex* mcVertex)
00085 {
00086 Int_t ID = 0;
00087 Int_t ID2 = 1;
00088 if (!mcVertex->numberOfDaughters()) return kWrongDecay;
00089 if (mcVertex->geantProcess() != 5) return kWrongDecay;
00090 const StMcTrack* parent = mcVertex->parent();
00091
00092 if (parent) {
00093 Int_t parentId = parent->geantId();
00094 StSPtrVecMcTrack& Daughters = mcVertex->daughters();
00095
00096 for (StMcTrackIterator DTrackIt = Daughters.begin();
00097 DTrackIt != Daughters.end(); DTrackIt++) {
00098 Int_t daughterId = (*DTrackIt)->geantId();
00099 if (daughterId == 1) daughterId = -1;
00100 ID += daughterId;
00101 ID2 *= daughterId;
00102 }
00103
00104 switch (parentId) {
00105 case ( 5) : return MuPlusProcess(ID);
00106 case ( 6) : return MuMinusProcess(ID);
00107 case ( 8) : return PiPlusProcess(ID);
00108 case ( 9) : return PiMinusProcess(ID);
00109 case (10) : return KLongProcess(ID,ID2);
00110 case (11) : return KPlusProcess(ID2);
00111 case (12) : return KMinusProcess(ID2);
00112 case (16) : return KShortProcess(ID);
00113 case (18) : return LambdaProcess(ID2);
00114 case (26) : return AntiLambdaProcess(ID,ID2);
00115 case (23) : return XiProcess(ID);
00116 case (31) : return AntiXiProcess(ID);
00117 case (24) : return OmegaProcess(ID2);
00118 case (32) : return AntiOmegaProcess(ID2);
00119 }
00120 }
00121 return kWrongDecay;
00122 }
00123
00124 Int_t StDecayMode::KPlusProcess(Int_t ID)
00125 {
00126 switch (ID) {
00127 case ( 5) :
00128 case ( 20) : return kKPlus2MuNu;
00129 case ( 56) : return kKPlus2PiPlusPiZero;
00130 case (576) : return kKPlus2PiPlusPiPlusPiMinus;
00131 case ( 14) :
00132 case ( 42) : return kKPlus2ENuPiZero;
00133 case ( 35) :
00134 case (140) : return kKPlus2MuNuPiZero;
00135 case (392) : return kKPlus2PiPlusPiZeroPiZero;
00136 default : return kWrongDecay;
00137 }
00138 }
00139
00140
00141 Int_t StDecayMode::KMinusProcess(Int_t ID)
00142 {
00143 switch (ID) {
00144 case ( 6) :
00145 case ( 24) : return kKMinus2MuNu;
00146 case ( 63) : return kKMinus2PiMinusPiZero;
00147 case (648) : return kKMinus2PiPlusPiMinusPiMinus;
00148 case ( 21) :
00149 case ( 84) : return kKMinus2ENuPiZero;
00150 case ( 42) :
00151 case (168) : return kKMinus2MuNuPiZero;
00152 case (441) : return kKMinus2PiMinusPiZeroPiZero;
00153 default : return kWrongDecay;
00154 }
00155 }
00156
00157
00158 Int_t StDecayMode::KLongProcess(Int_t ID, Int_t ID2)
00159 {
00160 switch (ID2) {
00161 case (504) : return kKLong2PiPlusPiZeroPiMinus;
00162 case ( 48) :
00163 case (192) : return kKLong2PiPlusMuNu;
00164 case ( 45) :
00165 case (180) : return kKLong2PiMinusMuNu;
00166 case ( 24) :
00167 case ( 96) : return kKLong2PiMinusENu;
00168 case ( 18) :
00169 case ( 72) : return ((ID==17) ? kKLong2PiPlusPiMinus : kKLong2PiPlusENu);
00170 default : return kWrongDecay;
00171 }
00172 }
00173
00174 Int_t StDecayMode::KShortProcess(Int_t ID)
00175 {
00176 switch (ID) {
00177 case (17) : return kKShort2PiPlusPiMinus;
00178 case (14) : return kKShort2PiZeroPiZero;
00179 case (16) : return kKShort2PiPlusPiMinusGamma;
00180 default : return kWrongDecay;
00181 }
00182 }
00183
00184 Int_t StDecayMode::PiPlusProcess(Int_t ID)
00185 {
00186 switch (ID) {
00187 case (5) :
00188 case (9) : return kPiPlus2MuNu;
00189 case (4) :
00190 case (8) : return kPiPlus2MuNuGamma;
00191 case (2) :
00192 case (6) : return kPiPlus2ENu;
00193 default : return kWrongDecay;
00194 }
00195 }
00196
00197 Int_t StDecayMode::PiMinusProcess(Int_t ID)
00198 {
00199 switch (ID) {
00200 case ( 6) :
00201 case (10) : return kPiMinus2MuNu;
00202 case ( 5) :
00203 case ( 9) : return kPiMinus2MuNuGamma;
00204 case ( 3) :
00205 case ( 7) : return kPiMinus2ENu;
00206 default : return kWrongDecay;
00207 }
00208 }
00209
00210 Int_t StDecayMode::MuPlusProcess(Int_t ID)
00211 {
00212 switch (ID) {
00213 case ( 2) :
00214 case ( 6) :
00215 case (10) : return kMuPlus2ENuNu;
00216 case ( 1) :
00217 case ( 5) :
00218 case ( 9) : return kMuPlus2ENuNuGamma;
00219 default : return kWrongDecay;
00220 }
00221 }
00222
00223 Int_t StDecayMode::MuMinusProcess(Int_t ID)
00224 {
00225 switch (ID) {
00226 case ( 3) :
00227 case ( 7) :
00228 case (11) : return kMuMinus2ENuNu;
00229 case ( 2) :
00230 case ( 6) :
00231 case (10) : return kMuMinus2ENuNuGamma;
00232 default : return kWrongDecay;
00233 }
00234 }
00235
00236 Int_t StDecayMode::LambdaProcess(Int_t ID)
00237 {
00238 switch (ID) {
00239 case ( 126) : return kLambda2ProtonPiMinus;
00240 case ( 91) : return kLambda2NeutronPiZero;
00241 case ( -13) : return kLambda2NeutronGamma;
00242 case (-126) : return kLambda2ProtonPiMinusGamma;
00243 case ( 42) :
00244 case ( 168) : return kLambda2ProtonENu;
00245 case ( 84) :
00246 case ( 336) : return kLambda2ProtonMuNu;
00247 default : return kWrongDecay;
00248 }
00249 }
00250
00251 Int_t StDecayMode::AntiLambdaProcess(Int_t ID, Int_t ID2)
00252 {
00253 switch (ID) {
00254 case (23) : return kAntiLambda2AntiProtonPiPlus;
00255 case (32) : return kAntiLambda2AntiNeutronPiZero;
00256 case (24) : if (ID2 == -25) return kAntiLambda2AntiNeutronGamma;
00257 case (20) : return kAntiLambda2AntiProtonMuNu;
00258 case (22) : return kAntiLambda2AntiProtonPiPlusGamma;
00259 case (17) :
00260 case (21) : return kAntiLambda2AntiProtonENu;
00261 default : return kWrongDecay;
00262 }
00263 }
00264
00265
00266 Int_t StDecayMode::XiProcess(Int_t ID)
00267 {
00268 switch (ID) {
00269 case (27) : return kCascade2LambdaPiMinus;
00270 default : return kWrongDecay;
00271 }
00272 }
00273
00274 Int_t StDecayMode::AntiXiProcess(Int_t ID)
00275 {
00276 switch (ID) {
00277 case (34) : return kAntiCascade2AntiLambdaPiPlus;
00278 default : return kWrongDecay;
00279 }
00280 }
00281
00282 Int_t StDecayMode::OmegaProcess(Int_t ID)
00283 {
00284 switch (ID) {
00285 case (216) : return kOmega2LambdaKMinus;
00286 case (198) : return kOmega2CascadePiMinus;
00287 case (161) : return kOmega2CascadePiZero;
00288 default : return kWrongDecay;
00289 }
00290 }
00291
00292 Int_t StDecayMode::AntiOmegaProcess(Int_t ID)
00293 {
00294 switch (ID) {
00295 case (286) : return kAntiOmega2AntiLambdaKPlus;
00296 case (240) : return kAntiOmega2AntiCascadePiPlus;
00297 case (217) : return kAntiOmega2AntiCascadePiZero;
00298 default : return kWrongDecay;
00299 }
00300 }
00301
00302 Int_t StDecayMode::ParentCharge(Int_t mode)
00303 {
00304 switch (mode) {
00305 case (kKPlus2MuNu) :
00306 case (kKPlus2PiPlusPiZero) :
00307 case (kKPlus2PiPlusPiPlusPiMinus) :
00308 case (kKPlus2ENuPiZero) :
00309 case (kKPlus2MuNuPiZero) :
00310 case (kKPlus2PiPlusPiZeroPiZero) :
00311 case (kPiPlus2MuNu) :
00312 case (kPiPlus2MuNuGamma) :
00313 case (kPiPlus2ENu) :
00314 case (kMuPlus2ENuNu) :
00315 case (kMuPlus2ENuNuGamma) :
00316 case (kAntiCascade2AntiLambdaPiPlus) :
00317 case (kAntiOmega2AntiLambdaKPlus) :
00318 case (kAntiOmega2AntiCascadePiPlus) : return 1;
00319 case (kKMinus2MuNu) :
00320 case (kKMinus2PiMinusPiZero) :
00321 case (kKMinus2PiPlusPiMinusPiMinus) :
00322 case (kKMinus2ENuPiZero) :
00323 case (kKMinus2MuNuPiZero) :
00324 case (kKMinus2PiMinusPiZeroPiZero) :
00325 case (kPiMinus2MuNu) :
00326 case (kPiMinus2MuNuGamma) :
00327 case (kPiMinus2ENu) :
00328 case (kMuMinus2ENuNu) :
00329 case (kMuMinus2ENuNuGamma) :
00330 case (kCascade2LambdaPiMinus) :
00331 case (kOmega2LambdaKMinus) :
00332 case (kOmega2CascadePiMinus) : return -1;
00333 default : {}
00334 }
00335 return 0;
00336 }
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360