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
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
00085
00086
00087
00088
00089
00090 #ifndef ST_HBT_PAIR_HH
00091 #define ST_HBT_PAIR_HH
00092
00093 #include <utility>
00094
00095 #include "StHbtMaker/Infrastructure/StHbtParticle.hh"
00096 #include "StHbtMaker/Infrastructure/StHbtTypes.hh"
00097
00098 class StHbtPair {
00099 public:
00100 StHbtPair();
00101 StHbtPair(StHbtParticle*, StHbtParticle*);
00102
00103
00104 ~StHbtPair();
00105
00106
00107
00108
00109 StHbtParticle* track1() const;
00110 StHbtParticle* track2() const;
00111
00112 void SetTrack1(const StHbtParticle* trkPtr);
00113 void SetTrack2(const StHbtParticle* trkPtr);
00114
00115 StHbtLorentzVector fourMomentumDiff() const;
00116 StHbtLorentzVector fourMomentumSum() const;
00117 double qInv() const;
00118 double kT() const;
00119 double mInv() const;
00120
00121 double rap() const;
00122 double emissionAngle() const;
00123
00124
00125 double qSidePf() const;
00126 double qOutPf() const;
00127 double qLongPf() const;
00128
00129
00130
00131 double qSideCMS() const;
00132 double qOutCMS() const;
00133 double qLongCMS() const;
00134
00135 double dKSide() const;
00136 double dKOut() const;
00137 double dKLong() const;
00138
00139
00140
00141
00142 double qSideBf(double beta=0.0) const;
00143 double qOutBf(double beta=0.0) const;
00144 double qLongBf(double beta=0.0) const;
00145
00146
00147
00148 void qYKPCMS(double& qP, double& qT, double& q0) const ;
00149
00150 void qYKPLCMS(double& qP, double& qT, double& q0) const ;
00151
00152 void qYKPPF(double& qP, double& qT, double& q0) const ;
00153
00154
00155 double quality() const;
00156
00157
00158
00159
00160
00161
00162 double NominalTpcExitSeparation() const;
00163 double NominalTpcEntranceSeparation() const;
00164 double NominalTpcAverageSeparation() const;
00165
00166 double TpcExitSeparationTrackV0Pos() const;
00167 double TpcEntranceSeparationTrackV0Pos() const;
00168 double TpcAverageSeparationTrackV0Pos() const;
00169
00170 double TpcExitSeparationTrackV0Neg() const;
00171 double TpcEntranceSeparationTrackV0Neg() const;
00172 double TpcAverageSeparationTrackV0Neg() const;
00173
00174 double TpcExitSeparationV0PosV0Pos() const;
00175 double TpcEntranceSeparationV0PosV0Pos() const;
00176 double TpcAverageSeparationV0PosV0Pos() const;
00177
00178 double TpcExitSeparationV0PosV0Neg() const;
00179 double TpcEntranceSeparationV0PosV0Neg() const;
00180 double TpcAverageSeparationV0PosV0Neg() const;
00181
00182 double TpcExitSeparationV0NegV0Pos() const;
00183 double TpcEntranceSeparationV0NegV0Pos() const;
00184 double TpcAverageSeparationV0NegV0Pos() const;
00185
00186 double TpcExitSeparationV0NegV0Neg() const;
00187 double TpcEntranceSeparationV0NegV0Neg() const;
00188 double TpcAverageSeparationV0NegV0Neg() const;
00189
00190 double pInv() const;
00191 double KStar() const;
00192 double KStarFlipped() const;
00193 double CVK() const;
00194 double CVKFlipped() const;
00195 double qInvFlippedXY() const;
00196
00197 double OpeningAngle() const;
00198
00199
00200 double KStarSide() const;
00201 double KStarOut() const;
00202 double KStarLong() const;
00203
00204 float PionPairProbability() const;
00205 float ElectronPairProbability() const;
00206 float KaonPairProbability() const;
00207 float ProtonPairProbability() const;
00208 float KaonPionPairProbability() const;
00209
00210 double dcaInsideTpc() const;
00211 double quality2() const;
00212
00213 double KStarGlobal() const;
00214 double CVKGlobal() const;
00215 double KStarSideGlobal() const;
00216 double KStarOutGlobal() const;
00217 double KStarLongGlobal() const;
00218
00219 void setMergingPar(double aMaxDuInner, double aMaxDzInner,
00220 double aMaxDuOuter, double aMaxDzOuter);
00221 void setDefaultHalfFieldMergingPar();
00222 void setDefaultFullFieldMergingPar();
00223 double getFracOfMergedRow() const;
00224 double getClosestRowAtDCA() const;
00225 double getWeightedAvSep() const;
00226
00227 double getFracOfMergedRowTrkV0Pos() const;
00228 double getClosestRowAtDCATrkV0Pos() const;
00229
00230 double getFracOfMergedRowTrkV0Neg() const;
00231 double getClosestRowAtDCATrkV0Neg() const;
00232
00233 double getFracOfMergedRowV0PosV0Neg() const;
00234 double getFracOfMergedRowV0NegV0Pos() const;
00235 double getFracOfMergedRowV0PosV0Pos() const;
00236 double getFracOfMergedRowV0NegV0Neg() const;
00237
00238 private:
00239 StHbtParticle* mTrack1;
00240 StHbtParticle* mTrack2;
00241
00242 mutable short mNonIdParNotCalculated;
00243 mutable double mDKSide;
00244 mutable double mDKOut;
00245 mutable double mDKLong;
00246 mutable double mCVK;
00247 mutable double kStarCalc;
00248 void calcNonIdPar() const;
00249
00250 mutable short mNonIdParNotCalculatedGlobal;
00251 mutable double mDKSideGlobal;
00252 mutable double mDKOutGlobal;
00253 mutable double mDKLongGlobal;
00254 mutable double kStarCalcGlobal;
00255 mutable double mCVKGlobal;
00256 void calcNonIdParGlobal() const;
00257
00258 mutable short mMergingParNotCalculated;
00259 mutable double mWeightedAvSep;
00260 mutable double mFracOfMergedRow;
00261 mutable double mClosestRowAtDCA;
00262
00263 mutable short mMergingParNotCalculatedTrkV0Pos;
00264 mutable double mFracOfMergedRowTrkV0Pos;
00265 mutable double mClosestRowAtDCATrkV0Pos;
00266
00267 mutable short mMergingParNotCalculatedTrkV0Neg;
00268 mutable double mFracOfMergedRowTrkV0Neg;
00269 mutable double mClosestRowAtDCATrkV0Neg;
00270
00271 mutable short mMergingParNotCalculatedV0PosV0Neg;
00272 mutable double mFracOfMergedRowV0PosV0Neg;
00273 mutable double mClosestRowAtDCAV0PosV0Neg;
00274
00275 mutable short mMergingParNotCalculatedV0NegV0Pos;
00276 mutable double mFracOfMergedRowV0NegV0Pos;
00277 mutable double mClosestRowAtDCAV0NegV0Pos;
00278
00279 mutable short mMergingParNotCalculatedV0PosV0Pos;
00280 mutable double mFracOfMergedRowV0PosV0Pos;
00281 mutable double mClosestRowAtDCAV0PosV0Pos;
00282
00283 mutable short mMergingParNotCalculatedV0NegV0Neg;
00284 mutable double mFracOfMergedRowV0NegV0Neg;
00285 mutable double mClosestRowAtDCAV0NegV0Neg;
00286
00287 static double mMaxDuInner;
00288 static double mMaxDzInner;
00289 static double mMaxDuOuter;
00290 static double mMaxDzOuter;
00291 void calcMergingPar() const;
00292
00293 void CalcMergingParFctn(short* tmpMergingParNotCalculatedFctn,
00294 float* tmpZ1,float* tmpU1,
00295 float* tmpZ2,float* tmpU2,
00296 int *tmpSect1,int *tmpSect2,
00297 double* tmpFracOfMergedRow,
00298 double* tmpClosestRowAtDCA
00299 ) const;
00300
00301 void resetParCalculated();
00302 };
00303
00304 inline void StHbtPair::resetParCalculated(){
00305 mNonIdParNotCalculated=1;
00306 mNonIdParNotCalculatedGlobal=1;
00307 mMergingParNotCalculated=1;
00308 mMergingParNotCalculatedTrkV0Pos=1;
00309 mMergingParNotCalculatedTrkV0Neg=1;
00310 mMergingParNotCalculatedV0PosV0Pos=1;
00311 mMergingParNotCalculatedV0NegV0Pos=1;
00312 mMergingParNotCalculatedV0PosV0Neg=1;
00313 mMergingParNotCalculatedV0NegV0Neg=1;
00314 }
00315
00316 inline void StHbtPair::SetTrack1(const StHbtParticle* trkPtr){
00317 mTrack1=(StHbtParticle*)trkPtr;
00318 resetParCalculated();
00319 }
00320 inline void StHbtPair::SetTrack2(const StHbtParticle* trkPtr){
00321 mTrack2=(StHbtParticle*)trkPtr;
00322 resetParCalculated();
00323 }
00324
00325 inline StHbtParticle* StHbtPair::track1() const {return mTrack1;}
00326 inline StHbtParticle* StHbtPair::track2() const {return mTrack2;}
00327
00328 inline double StHbtPair::dKSide() const{
00329 if(mNonIdParNotCalculated) calcNonIdPar();
00330 return mDKSide;
00331 }
00332 inline double StHbtPair::dKOut() const{
00333 if(mNonIdParNotCalculated) calcNonIdPar();
00334 return mDKOut;
00335 }
00336 inline double StHbtPair::dKLong() const{
00337 if(mNonIdParNotCalculated) calcNonIdPar();
00338 return mDKLong;
00339 }
00340 inline double StHbtPair::KStar() const{
00341 if(mNonIdParNotCalculated) calcNonIdPar();
00342 return kStarCalc;
00343 }
00344 inline double StHbtPair::qInv() const {
00345 StHbtLorentzVector tDiff = (mTrack1->FourMomentum()-mTrack2->FourMomentum());
00346 return ( -1.* tDiff.m());
00347 }
00348
00349
00350 inline double StHbtPair::KStarSide() const{
00351 if(mNonIdParNotCalculated) calcNonIdPar();
00352 return mDKSide;
00353 }
00354 inline double StHbtPair::KStarOut() const{
00355 if(mNonIdParNotCalculated) calcNonIdPar();
00356 return mDKOut;
00357 }
00358 inline double StHbtPair::KStarLong() const{
00359 if(mNonIdParNotCalculated) calcNonIdPar();
00360 return mDKLong;
00361 }
00362 inline double StHbtPair::CVK() const{
00363 if(mNonIdParNotCalculated) calcNonIdPar();
00364 return mCVK;
00365 }
00366
00367 inline double StHbtPair::KStarGlobal() const{
00368 if(mNonIdParNotCalculatedGlobal) calcNonIdParGlobal();
00369 return kStarCalcGlobal;
00370 }
00371 inline double StHbtPair::KStarSideGlobal() const{
00372 if(mNonIdParNotCalculatedGlobal) calcNonIdParGlobal();
00373 return mDKSideGlobal;
00374 }
00375 inline double StHbtPair::KStarOutGlobal() const{
00376 if(mNonIdParNotCalculatedGlobal) calcNonIdParGlobal();
00377 return mDKOutGlobal;
00378 }
00379 inline double StHbtPair::KStarLongGlobal() const{
00380 if(mNonIdParNotCalculatedGlobal) calcNonIdParGlobal();
00381 return mDKLongGlobal;
00382 }
00383 inline double StHbtPair::CVKGlobal() const{
00384 if(mNonIdParNotCalculatedGlobal) calcNonIdParGlobal();
00385 return mCVKGlobal;
00386 }
00387
00388
00389 inline float StHbtPair::PionPairProbability() const{
00390 return (mTrack1->Track()->PidProbPion()) *
00391 (mTrack2->Track()->PidProbPion());
00392 }
00393 inline float StHbtPair::ElectronPairProbability() const{
00394 return (mTrack1->Track()->PidProbElectron()) *
00395 (mTrack2->Track()->PidProbElectron());
00396 }
00397 inline float StHbtPair::KaonPairProbability() const{
00398 return (mTrack1->Track()->PidProbKaon()) *
00399 (mTrack2->Track()->PidProbKaon());
00400 }
00401 inline float StHbtPair::ProtonPairProbability() const{
00402 return (mTrack1->Track()->PidProbProton()) *
00403 (mTrack2->Track()->PidProbProton());
00404 }
00405 inline float StHbtPair::KaonPionPairProbability() const{
00406 return (mTrack1->Track()->PidProbKaon()) *
00407 (mTrack2->Track()->PidProbPion());
00408 }
00409
00410 inline double StHbtPair::getFracOfMergedRow() const{
00411 if(mMergingParNotCalculated) calcMergingPar();
00412 return mFracOfMergedRow;
00413 }
00414 inline double StHbtPair::getClosestRowAtDCA() const {
00415 if(mMergingParNotCalculated) calcMergingPar();
00416 return mClosestRowAtDCA;
00417 }
00418 inline double StHbtPair::getWeightedAvSep() const {
00419 if(mMergingParNotCalculated) calcMergingPar();
00420 return mWeightedAvSep;
00421 }
00422
00423
00424 inline double StHbtPair::getFracOfMergedRowTrkV0Pos() const{
00425 if(mMergingParNotCalculatedTrkV0Pos)
00426 CalcMergingParFctn(&mMergingParNotCalculatedTrkV0Pos,
00427 &(mTrack1->mZ[0]),&(mTrack1->mU[0]),
00428 &(mTrack2->mZ[0]),&(mTrack2->mU[0]),
00429 &(mTrack1->mSect[0]),&(mTrack2->mSect[0]),
00430 &(mFracOfMergedRowTrkV0Pos),&(mClosestRowAtDCATrkV0Pos)
00431 );
00432 return mFracOfMergedRowTrkV0Pos;
00433 }
00434 inline double StHbtPair::getClosestRowAtDCATrkV0Pos() const{
00435 if(mMergingParNotCalculatedTrkV0Pos)
00436 CalcMergingParFctn(&mMergingParNotCalculatedTrkV0Pos,
00437 &(mTrack1->mZ[0]),&(mTrack1->mU[0]),
00438 &(mTrack2->mZ[0]),&(mTrack2->mU[0]),
00439 &(mTrack1->mSect[0]),&(mTrack2->mSect[0]),
00440 &mFracOfMergedRowTrkV0Pos,&mClosestRowAtDCATrkV0Pos
00441 );
00442 return mClosestRowAtDCATrkV0Pos;
00443 }
00444 inline double StHbtPair::getFracOfMergedRowTrkV0Neg() const{
00445 if(mMergingParNotCalculatedTrkV0Neg)
00446 CalcMergingParFctn(&mMergingParNotCalculatedTrkV0Neg,
00447 &(mTrack1->mZ[0]),&(mTrack1->mU[0]),
00448 &(mTrack2->mV0NegZ[0]),&(mTrack2->mV0NegU[0]),
00449 &(mTrack1->mSect[0]),&(mTrack2->mV0NegSect[0]),
00450 &(mFracOfMergedRowTrkV0Neg),&(mClosestRowAtDCATrkV0Neg)
00451 );
00452 return mFracOfMergedRowTrkV0Neg;
00453 }
00454 inline double StHbtPair::getClosestRowAtDCATrkV0Neg() const{
00455 if(mMergingParNotCalculatedTrkV0Neg)
00456 CalcMergingParFctn(&mMergingParNotCalculatedTrkV0Neg,
00457 &(mTrack1->mZ[0]),&(mTrack1->mU[0]),
00458 &(mTrack2->mV0NegZ[0]),&(mTrack2->mV0NegU[0]),
00459 &(mTrack1->mSect[0]),&(mTrack2->mV0NegSect[0]),
00460 &mFracOfMergedRowTrkV0Neg,&mClosestRowAtDCATrkV0Neg
00461 );
00462 return mClosestRowAtDCATrkV0Neg;
00463 }
00464 inline double StHbtPair::getFracOfMergedRowV0PosV0Neg() const{
00465 if(mMergingParNotCalculatedV0PosV0Neg)
00466 CalcMergingParFctn(&mMergingParNotCalculatedV0PosV0Neg,
00467 &(mTrack1->mZ[0]),&(mTrack1->mU[0]),
00468 &(mTrack2->mV0NegZ[0]),&(mTrack2->mV0NegU[0]),
00469 &(mTrack1->mSect[0]),&(mTrack2->mV0NegSect[0]),
00470 &(mFracOfMergedRowV0PosV0Neg),
00471 &(mClosestRowAtDCAV0PosV0Neg)
00472 );
00473 return mFracOfMergedRowV0PosV0Neg;
00474 }
00475 inline double StHbtPair::getFracOfMergedRowV0NegV0Pos() const{
00476 if(mMergingParNotCalculatedV0NegV0Pos)
00477 CalcMergingParFctn(&mMergingParNotCalculatedV0NegV0Pos,
00478 &(mTrack1->mV0NegZ[0]),&(mTrack1->mV0NegU[0]),
00479 &(mTrack2->mZ[0]),&(mTrack2->mU[0]),
00480 &(mTrack1->mV0NegSect[0]),
00481 &(mTrack2->mSect[0]),
00482 &(mFracOfMergedRowV0NegV0Pos),
00483 &(mClosestRowAtDCAV0NegV0Pos)
00484 );
00485 return mFracOfMergedRowV0NegV0Pos;
00486 }
00487 inline double StHbtPair::getFracOfMergedRowV0PosV0Pos() const{
00488 if(mMergingParNotCalculatedV0PosV0Pos)
00489 CalcMergingParFctn(&mMergingParNotCalculatedV0PosV0Pos,
00490 &(mTrack1->mZ[0]),&(mTrack1->mU[0]),
00491 &(mTrack2->mZ[0]),&(mTrack2->mU[0]),
00492 &(mTrack1->mSect[0]),
00493 &(mTrack2->mSect[0]),
00494 &(mFracOfMergedRowV0PosV0Pos),
00495 &(mClosestRowAtDCAV0PosV0Pos)
00496 );
00497 return mFracOfMergedRowV0PosV0Pos;
00498 }
00499 inline double StHbtPair::getFracOfMergedRowV0NegV0Neg() const{
00500 if(mMergingParNotCalculatedV0NegV0Neg)
00501 CalcMergingParFctn(&mMergingParNotCalculatedV0NegV0Neg,
00502 &(mTrack1->mV0NegZ[0]),&(mTrack1->mV0NegU[0]),
00503 &(mTrack2->mV0NegZ[0]),&(mTrack2->mV0NegU[0]),
00504 &(mTrack1->mV0NegSect[0]),
00505 &(mTrack2->mV0NegSect[0]),
00506 &(mFracOfMergedRowV0NegV0Neg),
00507 &(mClosestRowAtDCAV0NegV0Neg)
00508 );
00509 return mFracOfMergedRowV0NegV0Neg;
00510 }
00511
00512 #endif