00001
00012 #ifndef StXiI_hh
00013 #define StXiI_hh
00014
00015 #include "StV0I.hh"
00016 static const Float_t M_OMEGA_2 = ::pow(M_OMEGA_MINUS,2);
00017 static const Float_t M_XI_2 = ::pow(M_XI_MINUS,2);
00018 static const Float_t M_KAON_MINUS_2 = ::pow(M_KAON_MINUS,2);
00019
00021 enum StXiDaughter {bachelor, v0};
00022
00023
00024 class StXiI : public virtual StV0I {
00025 public:
00026 StXiI();
00027 virtual ~StXiI() {}
00028
00029
00031
00032
00034
00035 virtual Int_t charge() const=0;
00037
00039
00040
00041 Float_t decayDistanceV0() const;
00043 virtual Float_t decayLengthV0() const;
00045 Float_t decayLengthXi() const;
00046 virtual Float_t decayVertexXiX() const=0;
00047 virtual Float_t decayVertexXiY() const=0;
00048 virtual Float_t decayVertexXiZ() const=0;
00049 Float_t alphaXi();
00050 Float_t ptArmXi();
00052 Float_t cTauOmega();
00054 Float_t cTauXi();
00056
00058
00059
00060 TVector3 momBachelor();
00061 virtual Float_t momBachelorX() const=0;
00062 virtual Float_t momBachelorY() const=0;
00063 virtual Float_t momBachelorZ() const=0;
00064
00066 virtual TVector3 momXi()=0;
00067 virtual Float_t momXiX()=0;
00068 virtual Float_t momXiY()=0;
00069 virtual Float_t momXiZ()=0;
00070
00072 virtual TVector3 momXiAtPrimVertex()=0;
00073 virtual Float_t momXiAtPrimVertexX()=0;
00074 virtual Float_t momXiAtPrimVertexY()=0;
00075 virtual Float_t momXiAtPrimVertexZ()=0;
00076
00078 Float_t ptXi();
00080 Float_t ptBachelor();
00082 Float_t ptotXi();
00084 Float_t ptotBachelor();
00086
00088
00089
00090 Float_t eOmega();
00092 Float_t eXi();
00094 Float_t eBachelorPion();
00096 Float_t eBachelorKaon();
00098 Float_t massOmega();
00100 Float_t massXi();
00102 Float_t rapOmega();
00104 Float_t rapXi();
00106
00108
00109
00110 Float_t thetaXi();
00112 Float_t thetaBachelor();
00114 Float_t pseudoRapXi();
00116 Float_t pseudoRapBachelor();
00118
00120
00121
00122 Float_t mtOmega();
00124 Float_t mtXi();
00126 Float_t mtm0Omega();
00128 Float_t mtm0Xi();
00130
00132
00133
00134 Float_t eBachelorHyp(Float_t mass);
00136 Float_t massHypXi(Float_t massV0, Float_t massBachelor);
00137 Float_t eHypXi(Float_t mass);
00138 Float_t rapHypXi(Float_t mass);
00139 Float_t mtHypXi(Float_t mass);
00141 Float_t mtm0HypXi(Float_t mass);
00143
00145
00146 Float_t decayCosThetaBachelorXi();
00147 Float_t decayCosThetaV0Xi();
00148 Float_t decayCosThetaBachelorOmega();
00149 Float_t decayCosThetaV0Omega();
00151
00152 Float_t dCTXi(Float_t m1, Float_t m2, StXiDaughter type);
00154
00156
00157 TVector3 momBachelorXi();
00158 TVector3 momV0Xi();
00159 TVector3 momBachelorOmega();
00160 TVector3 momV0Omega();
00163
00164 TVector3 momXiFrame(Float_t m1, Float_t m2, StXiDaughter type);
00166
00167
00169
00170
00172 virtual Int_t V0Index() {return -1;}
00174
00175
00177
00178
00180
00181 virtual Int_t keyBachelor() const {return 0;}
00183 virtual StTrackTopologyMap& topologyMapBachelor() {return (*gFakeTopoPtr);}
00185 virtual Float_t dedxBachelor() const {return 0;}
00187 virtual Float_t errDedxBachelor() const {return 0;}
00189 virtual UShort_t numDedxBachelor() const {return 0;}
00191 virtual Float_t lenDedxBachelor() const {return 0;}
00193
00195
00196
00197 virtual Float_t dcaXiDaughters() const {return 0;}
00199 virtual Float_t dcaBachelorToPrimVertex() const {return -1;}
00201 virtual Float_t dcaXiToPrimVertex() const {return -1;}
00203
00205
00206
00207 virtual Float_t chi2Xi() const {return 0;}
00209 virtual Float_t clXi() const {return 0;}
00211 virtual Float_t chi2Bachelor() const {return 0;}
00213 virtual Float_t clBachelor() const {return 0;}
00215 virtual Long_t detectorIdXi() {return 0;}
00217 virtual Long_t detectorIdPars() {return 0;}
00219 virtual void setBachelorBad() {}
00221 virtual Bool_t bad() const {return (chi2Bachelor()<0 || StV0I::bad());}
00223
00224
00225 protected:
00226 Float_t Ptot2Bachelor();
00227 Float_t Ptot2Xi();
00228 Float_t Pt2Xi();
00229 Float_t MomBachelorAlongXi();
00230 Float_t MomV0AlongXi();
00231 };
00232
00233 inline StXiI::StXiI() : StV0I() {}
00234
00235 inline Float_t StXiI::decayDistanceV0() const {
00236 return StV0I::decayLengthV0();
00237 }
00238
00239 inline Float_t StXiI::decayLengthV0() const {
00240 return ::sqrt(::pow(decayVertexV0X() - decayVertexXiX(),2) +
00241 ::pow(decayVertexV0Y() - decayVertexXiY(),2) +
00242 ::pow(decayVertexV0Z() - decayVertexXiZ(),2));
00243 }
00244
00245 inline Float_t StXiI::decayLengthXi() const {
00246 return ::sqrt(::pow(decayVertexXiX() - mEvent->primaryVertexX(),2) +
00247 ::pow(decayVertexXiY() - mEvent->primaryVertexY(),2) +
00248 ::pow(decayVertexXiZ() - mEvent->primaryVertexZ(),2));
00249 }
00250
00251 inline TVector3 StXiI::momBachelor() {
00252 return TVector3(momBachelorX(), momBachelorY(), momBachelorZ());
00253 }
00254
00255 inline Float_t StXiI::alphaXi() {
00256 Float_t mMomBachelorAlongXi = MomBachelorAlongXi();
00257 Float_t mMomV0AlongXi = MomV0AlongXi();
00258 return (((Float_t) charge()) * (mMomBachelorAlongXi-mMomV0AlongXi)/
00259 (mMomBachelorAlongXi+mMomV0AlongXi));
00260 }
00261
00262 inline Float_t StXiI::ptArmXi() {
00263 Float_t ptarmsq = Ptot2V0() - ::pow(MomV0AlongXi(),2);
00264 return ((ptarmsq > 0.) ? ::sqrt(ptarmsq) : 0.);
00265 }
00266
00267 inline Float_t StXiI::eOmega() {
00268 return ::sqrt(Ptot2Xi()+M_OMEGA_2);
00269 }
00270
00271 inline Float_t StXiI::eXi() {
00272 return ::sqrt(Ptot2Xi()+M_XI_2);
00273 }
00274
00275 inline Float_t StXiI::eHypXi(Float_t mass) {
00276 return ::sqrt(Ptot2Xi()+::pow(mass,2));
00277 }
00278
00279 inline Float_t StXiI::eBachelorHyp(Float_t mass) {
00280 return ::sqrt(Ptot2Bachelor()+::pow(mass,2));
00281 }
00282
00283 inline Float_t StXiI::eBachelorPion() {
00284 return ::sqrt(Ptot2Bachelor()+M_PION_MINUS_2);
00285 }
00286
00287 inline Float_t StXiI::eBachelorKaon() {
00288 return ::sqrt(Ptot2Bachelor()+M_KAON_MINUS_2);
00289 }
00290
00291 inline Float_t StXiI::massHypXi(Float_t massV0, Float_t massBachelor) {
00292 Float_t msq = ::pow(eHypV0(massV0)+eBachelorHyp(massBachelor),2)-Ptot2Xi();
00293 return ((msq > 0.) ? ::sqrt(msq) : 0.);
00294 }
00295
00296 inline Float_t StXiI::massOmega() {
00297 return ::sqrt(::pow(eLambda()+eBachelorKaon(),2)-Ptot2Xi());
00298 }
00299
00300 inline Float_t StXiI::massXi() {
00301 return ::sqrt(::pow(eLambda()+eBachelorPion(),2)-Ptot2Xi());
00302 }
00303
00304 inline Float_t StXiI::rapHypXi(Float_t mass) {
00305 Float_t mMomXiZ = momXiZ();
00306 Float_t eX = eHypXi(mass);
00307 return 0.5*::log((eX+mMomXiZ)/(eX-mMomXiZ));
00308 }
00309
00310 inline Float_t StXiI::rapOmega() {
00311 Float_t mMomXiZ = momXiZ();
00312 Float_t eom = eOmega();
00313 return 0.5*::log((eom+mMomXiZ)/(eom-mMomXiZ));
00314 }
00315
00316 inline Float_t StXiI::rapXi() {
00317 Float_t mMomXiZ = momXiZ();
00318 Float_t exi = eXi();
00319 return 0.5*::log((exi+mMomXiZ)/(exi-mMomXiZ));
00320 }
00321
00322 inline Float_t StXiI::cTauOmega() {
00323 return M_OMEGA_MINUS*decayLengthXi()/::sqrt(Ptot2Xi());
00324 }
00325
00326 inline Float_t StXiI::cTauXi() {
00327 return M_XI_MINUS*decayLengthXi()/::sqrt(Ptot2Xi());
00328 }
00329
00330 inline Float_t StXiI::ptBachelor() {
00331 return ::sqrt(Ptot2Bachelor()-::pow(momBachelorZ(),2));
00332 }
00333
00334 inline Float_t StXiI::ptotBachelor() {
00335 return ::sqrt(Ptot2Bachelor());
00336 }
00337
00338 inline Float_t StXiI::ptXi() {
00339 return ::sqrt(Pt2Xi());
00340 }
00341
00342 inline Float_t StXiI::ptotXi() {
00343 return ::sqrt(Ptot2Xi());
00344 }
00345
00346 inline Float_t StXiI::thetaXi() {
00347 return acos(momXiZ()/ptotXi());
00348 }
00349
00350 inline Float_t StXiI::pseudoRapXi() {
00351 return (-::log(tan(thetaXi()/2.)));
00352 }
00353
00354 inline Float_t StXiI::thetaBachelor() {
00355 return acos(momBachelorZ()/ptotBachelor());
00356 }
00357
00358 inline Float_t StXiI::pseudoRapBachelor() {
00359 return (-::log(tan(thetaBachelor()/2.)));
00360 }
00361
00362 inline Float_t StXiI::mtHypXi(Float_t mass) {
00363 return ::sqrt(Pt2Xi() + ::pow(mass,2));
00364 }
00365
00366 inline Float_t StXiI::mtOmega() {
00367 return ::sqrt(Pt2Xi() + M_OMEGA_2);
00368 }
00369
00370 inline Float_t StXiI::mtXi() {
00371 return ::sqrt(Pt2Xi() + M_XI_2);
00372 }
00373
00374 inline Float_t StXiI::mtm0HypXi(Float_t mass) {
00375 return (mtHypXi(mass) - mass);
00376 }
00377
00378 inline Float_t StXiI::mtm0Omega() {
00379 return (mtOmega() - M_OMEGA_MINUS);
00380 }
00381
00382 inline Float_t StXiI::mtm0Xi() {
00383 return (mtXi() - M_XI_MINUS);
00384 }
00385
00386 inline Float_t StXiI::Ptot2Bachelor () {
00387 return (::pow(momBachelorX(),2) +
00388 ::pow(momBachelorY(),2) + ::pow(momBachelorZ(),2));
00389 }
00390
00391 inline Float_t StXiI::Pt2Xi() {
00392 return (::pow(momXiX(),2) + ::pow(momXiY(),2));
00393 }
00394
00395 inline Float_t StXiI::Ptot2Xi() {
00396 return (Pt2Xi() + ::pow(momXiZ(),2));
00397 }
00398
00399 inline Float_t StXiI::MomBachelorAlongXi() {
00400 Float_t mPtot2Xi = Ptot2Xi();
00401 if (mPtot2Xi)
00402 return (momBachelorX()*momXiX() +
00403 momBachelorY()*momXiY() +
00404 momBachelorZ()*momXiZ()) / ::sqrt(mPtot2Xi);
00405 return 0.;
00406 }
00407
00408 inline Float_t StXiI::MomV0AlongXi() {
00409 Float_t mPtot2Xi = Ptot2Xi();
00410 if (mPtot2Xi)
00411 return (momV0X()*momXiX() +
00412 momV0Y()*momXiY() +
00413 momV0Z()*momXiZ()) / ::sqrt(mPtot2Xi);
00414 return 0.;
00415 }
00416
00417 inline Float_t StXiI::decayCosThetaBachelorXi() {
00418 return dCTXi(M_XI_MINUS,M_PION_MINUS,bachelor);
00419 }
00420
00421 inline Float_t StXiI::decayCosThetaV0Xi() {
00422 return dCTXi(M_XI_MINUS,M_LAMBDA,v0);
00423 }
00424
00425 inline Float_t StXiI::decayCosThetaBachelorOmega() {
00426 return dCTXi(M_OMEGA_MINUS,M_KAON_MINUS,bachelor);
00427 }
00428
00429 inline Float_t StXiI::decayCosThetaV0Omega() {
00430 return dCTXi(M_OMEGA_MINUS,M_LAMBDA,v0);
00431 }
00432
00433 inline Float_t StXiI::dCTXi(Float_t m1, Float_t m2, StXiDaughter type) {
00434 return ( (type == bachelor) ?
00435 StDecayAngle::decayCosTheta(momXiX(),momXiY(),momXiZ(),m1,
00436 momBachelorX(),momBachelorY(),momBachelorZ(),m2) :
00437 StDecayAngle::decayCosTheta(momXiX(),momXiY(),momXiZ(),m1,
00438 momV0X(),momV0Y(),momV0Z(),m2) );
00439 }
00440
00441 inline TVector3 StXiI::momBachelorXi() {
00442 return momXiFrame(M_XI_MINUS,M_PION_MINUS,bachelor);
00443 }
00444
00445 inline TVector3 StXiI::momV0Xi() {
00446 return momXiFrame(M_XI_MINUS,M_LAMBDA,v0);
00447 }
00448
00449 inline TVector3 StXiI::momBachelorOmega() {
00450 return momXiFrame(M_OMEGA_MINUS,M_KAON_MINUS,bachelor);
00451 }
00452
00453 inline TVector3 StXiI::momV0Omega() {
00454 return momXiFrame(M_OMEGA_MINUS,M_LAMBDA,v0);
00455 }
00456
00457 inline TVector3 StXiI::momXiFrame(Float_t m1, Float_t m2, StXiDaughter type) {
00458 return ( (type == bachelor) ?
00459 StDecayAngle::getShiftedDaughter(momXiX(),momXiY(),momXiZ(),m1,
00460 momBachelorX(),momBachelorY(),momBachelorZ(),m2) :
00461 StDecayAngle::getShiftedDaughter(momXiX(),momXiY(),momXiZ(),m1,
00462 momV0X(),momV0Y(),momV0Z(),m2) );
00463 }
00464
00465 #endif
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513