13 #ifndef __STEBYEPAIRCUTS_H
14 #define __STEBYEPAIRCUTS_H
16 #include "StEStructPairLUT.h"
17 #include "StEStructPool/AnalysisMaker/StEStructCuts.h"
18 #include "StEStructPool/EventMaker/StEStructTrack.h"
68 float mMidTpcSepLS[2];
69 float mMidTpcSepUS[2];
77 float mdEdxMomentumCut[4][2];
78 float mToFMomentumCut[4][2];
79 float mpionOtherMass[2];
80 float mpionpionMass[2];
81 float mpionKaonMass[2];
82 float mpionprotonMass[2];
83 float mKaonOtherMass[2];
84 float mKaonKaonMass[2];
85 float mKaonprotonMass[2];
86 float mprotonOtherMass[2];
87 float mprotonprotonMass[2];
88 float mOtherOtherMass[2];
90 bool mdeltaPhiCut, mdeltaEtaCut, mGooddeltaZdeltaXYCut, mdeltaMtCut;
91 bool mqInvCut, mEntSepCut, mExitSepCut, mQualityCut;
92 bool mMidTpcSepLSCut, mMidTpcSepUSCut;
93 bool mHBTCut, mCoulombCut, mMergingCut, mCrossingCut, mMergingCut2, mCrossingCut2, mLUTCut;
94 bool mpionMomentumCut, mKaonMomentumCut, mprotonMomentumCut;
95 bool mpionOtherMassCut, mpionpionMassCut, mpionKaonMassCut, mpionprotonMassCut;
96 bool mKaonOtherMassCut, mKaonKaonMassCut, mKaonprotonMassCut, mprotonOtherMassCut;
97 bool mprotonprotonMassCut, mOtherOtherMassCut;
99 int mdphiCounter[4], mdetaCounter[4], mgooddzdxyCounter[4], mdmtCounter[4];
100 int mqInvCounter[4], mEntSepCounter[4], mExitSepCounter[4], mQualityCounter[4];
101 int msplitLSCounter[4], msplitUSCounter[4];
102 int mHBTCounter[4], mCoulombCounter[4], mMergingCounter[4], mCrossingCounter[4], mMergingCounter2[4], mCrossingCounter2[4], mLUTCounter[4];
103 int mpionMomentumCounter[4], mKaonMomentumCounter[4], mprotonMomentumCounter[4];
104 int mpionOtherMassCounter[4], mpionpionMassCounter[4], mpionKaonMassCounter[4], mpionprotonMassCounter[4];
105 int mKaonOtherMassCounter[4], mKaonKaonMassCounter[4], mKaonprotonMassCounter[4], mprotonOtherMassCounter[4];
106 int mprotonprotonMassCounter[4], mOtherOtherMassCounter[4];
109 float mdeltaPhi, mdeltaEta, mdeltaMt;
110 float mqInvariant, mEntranceSeparation, mExitSeparation, mQualityVal;
111 float mMidTpcSeparationLS, mMidTpcSeparationUS;
115 unsigned long mapMask0;
116 unsigned long mapMask1;
117 unsigned long bitI[32];
141 virtual bool loadBaseCuts(
const char* name,
const char** vals,
int nvals);
142 virtual void loadUserCuts(
const char* name,
const char** vals,
int nvals);
143 virtual void printCutStats(ostream& ofs);
144 virtual void printCutCounts(ostream& ofs,
const char* cutType,
int c1,
int c2);
146 float BField()
const {
return mBField; };
147 void SetBField(
const float bfield){ mBField=bfield; };
158 float DeltaMt()
const;
159 float DeltaXt()
const;
160 float DeltaYt()
const;
161 float DeltaYt(
float mass1,
float mass2)
const;
162 float DeltaEta()
const;
163 float DeltaEta(
float mass1,
float mass2)
const;
164 float DeltaPhi()
const;
165 float DeltaPt()
const;
166 float SigmaMt()
const;
167 float SigmaXt()
const;
168 float SigmaYt()
const;
169 float SigmaYt(
float mass1,
float mass2)
const;
170 float SigmaEta()
const;
171 float SigmaEta(
float mass1,
float mass2)
const;
172 float SigmaPhi()
const;
173 float SigmaPt()
const;
187 double quality()
const;
188 double OpeningAngle()
const;
189 double NominalTpcEntranceSeparation()
const;
190 double NominalTpcXYEntranceSeparation()
const;
191 double NominalTpcZEntranceSeparation()
const;
192 double MidTpcXYSeparation()
const;
193 double MidTpcZSeparation()
const;
194 double MidTpcSeparation()
const;
195 double OuterMidTpcXYSeparation()
const;
196 double OuterMidTpcZSeparation()
const;
197 double OuterMidTpcSeparation()
const;
198 double NominalTpcExitSeparation()
const;
199 double NominalTpcXYExitSeparation()
const;
200 double NominalTpcZExitSeparation()
const;
201 double TpcZEndcapExitSeparation()
const;
202 double TpcRadialEndCapSeparation()
const;
203 double NominalTpcAvgXYSeparation()
const;
204 double NominalTpcAvgZSeparation()
const;
205 bool TracksCrossInPhi()
const;
207 void SetZoffset(
float Zoffset) { mZoffset = Zoffset; };
208 float GetZoffset() {
return mZoffset; };
210 void setPairType(
int type);
212 int cutPair(
bool doHistograms);
213 int cutPairHistograms();
229 int cutqInvORNominalEntranceSep();
231 int cutEntranceSep();
232 int cutMidTpcSepUS();
233 int cutMidTpcSepLS();
250 int cutEntranceSepH();
251 int cutMidTpcSepUSH();
252 int cutMidTpcSepLSH();
258 int correlationDepth();
265 inline void StEStructPairCuts::loadUserCuts(
const char* name,
const char** vals,
int nvals){ }
267 inline void StEStructPairCuts::setPairType(
int type) { mType=type; }
268 inline int StEStructPairCuts::cutPair(
bool doHistograms){
269 if(!doHistograms)
return cutPair();
270 return cutPairHistograms();
274 inline void StEStructPairCuts::SetTrack1(
const StEStructTrack* trkPtr){
278 inline void StEStructPairCuts::SetTrack2(
const StEStructTrack* trkPtr){
282 inline const StEStructTrack* StEStructPairCuts::Track1()
const {
return mTrack1;}
283 inline const StEStructTrack* StEStructPairCuts::Track2()
const {
return mTrack2;}
285 inline float StEStructPairCuts::SigmaMt()
const {
286 return mTrack1->FourMomentum().mt()+mTrack2->FourMomentum().mt();
288 inline float StEStructPairCuts::SigmaXt()
const {
289 return mTrack1->Xt()+mTrack2->Xt();
291 inline float StEStructPairCuts::SigmaYt()
const {
292 return mTrack1->Yt()+mTrack2->Yt();
294 inline float StEStructPairCuts::SigmaYt(
float mass1,
float mass2)
const {
295 return mTrack1->Yt(mass1)+mTrack2->Yt(mass2);
297 inline float StEStructPairCuts::SigmaEta()
const {
298 return mTrack1->Eta()+mTrack2->Eta();
300 inline float StEStructPairCuts::SigmaEta(
float mass1,
float mass2)
const {
301 return mTrack1->Eta(mass1)+mTrack2->Eta(mass2);
303 inline float StEStructPairCuts::SigmaPhi()
const {
304 return mTrack1->Phi()+mTrack2->Phi();
307 inline float StEStructPairCuts::SigmaPt()
const {
308 return mTrack1->Pt()+mTrack2->Pt();
311 inline float StEStructPairCuts::DeltaMt()
const {
312 return mTrack1->FourMomentum().mt()-mTrack2->FourMomentum().mt();
314 inline float StEStructPairCuts::DeltaXt()
const {
315 return mTrack1->Xt()-mTrack2->Xt();
317 inline float StEStructPairCuts::DeltaYt()
const {
318 return mTrack1->Yt()-mTrack2->Yt();
320 inline float StEStructPairCuts::DeltaYt(
float mass1,
float mass2)
const {
321 return mTrack1->Yt(mass1)-mTrack2->Yt(mass2);
323 inline float StEStructPairCuts::DeltaEta()
const {
324 return mTrack1->Eta()-mTrack2->Eta();
326 inline float StEStructPairCuts::DeltaEta(
float mass1,
float mass2)
const {
327 return mTrack1->Eta(mass1)-mTrack2->Eta(mass2);
329 inline float StEStructPairCuts::DeltaPhi()
const {
330 return mTrack1->Phi()-mTrack2->Phi();
333 inline float StEStructPairCuts::DeltaPt()
const {
334 return mTrack1->Pt()-mTrack2->Pt();
336 inline float StEStructPairCuts::mInv()
const {
337 return abs(mTrack1->FourMomentum()+mTrack2->FourMomentum());
340 inline float StEStructPairCuts::kT()
const {
341 return 0.5*(mTrack1->FourMomentum()+mTrack2->FourMomentum()).perp();
344 inline float StEStructPairCuts::qInv()
const {
345 return -1.0*(mTrack1->FourMomentum()-mTrack2->FourMomentum()).m();
348 inline bool StEStructPairCuts::awaySide() {
349 mdeltaPhi=fabs(DeltaPhi());
350 if((mdeltaPhi>M_PI/2.0) && (mdeltaPhi<1.5*M_PI))
return true;
354 inline bool StEStructPairCuts::sameSide() {
355 mdeltaPhi=fabs(DeltaPhi());
356 if((mdeltaPhi < M_PI/2.0) || (mdeltaPhi> (1.5*M_PI)))
return true;
365 inline int StEStructPairCuts::goodDeltaXY() {
366 if ( mGooddeltaZdeltaXYCut &&
367 MidTpcXYSeparation() > mgooddzdxy[1] &&
368 OuterMidTpcXYSeparation() > mgooddzdxy[1] ) {
384 inline int StEStructPairCuts::goodDeltaZ() {
385 if ( mGooddeltaZdeltaXYCut &&
386 MidTpcZSeparation() > mgooddzdxy[0] &&
387 OuterMidTpcZSeparation() > mgooddzdxy[0] ) {
391 if ( mGooddeltaZdeltaXYCut ) {
392 if ((outerDelZ = OuterMidTpcZSeparation()) < 0) {
394 }
else if ((MidTpcZSeparation() > mgooddzdxy[0]) &&
395 (outerDelZ > mgooddzdxy[0] )) {
402 inline int StEStructPairCuts::goodDeltaMt(){
404 ( (mdeltaMt=fabs(DeltaMt())) <mdmt[1] ))
return 0;
409 inline int StEStructPairCuts::cutDeltaPhi(){
411 ( (mdeltaPhi=DeltaPhi()) <mdphi[0] || mdeltaPhi>mdphi[1])
412 )
return ++(mdphiCounter[mType]);
416 inline int StEStructPairCuts::cutDeltaEta(){
418 ( (mdeltaEta=DeltaEta()) <mdeta[0] || mdeltaEta>mdeta[1])
419 )
return ++(mdetaCounter[mType]);
424 inline int StEStructPairCuts::cutDeltaMt(){
426 ( (mdeltaMt=DeltaMt()) <mdmt[0] || mdeltaMt>mdmt[1])
427 )
return ++(mdmtCounter[mType]);
431 inline int StEStructPairCuts::cutqInvORNominalEntranceSep(){
434 if( mqInvCut && mEntSepCut &&
435 ( (mqInvariant=qInv()) <mqInv[0] &&
436 ((mEntranceSeparation=NominalTpcEntranceSeparation())<mEntSep[0]))
437 )
return ++(mqInvCounter[mType]);
441 inline int StEStructPairCuts::cutqInv(){
443 ( (mqInvariant=qInv())<mqInv[0]
444 || mqInvariant>mqInv[1]
446 )
return ++(mqInvCounter[mType]);
450 inline int StEStructPairCuts::cutEntranceSep(){
452 ( (mEntranceSeparation=NominalTpcEntranceSeparation())<mEntSep[0]
453 || mEntranceSeparation>mEntSep[1]
455 )
return ++(mEntSepCounter[mType]);
460 inline int StEStructPairCuts::cutMidTpcSepUS(){
461 if( mMidTpcSepUSCut ){
462 double x1=mMidTpcSeparationUS=MidTpcSeparation();
463 double x2=NominalTpcEntranceSeparation();
464 double x3=NominalTpcExitSeparation();
465 if(((x1+x2+x3)/3.)>mMidTpcSepUS[1])
return 0;
466 if( x1<x2 && x1<x3 && x1<mMidTpcSepUS[0])
return ++(msplitUSCounter[mType]);
471 inline int StEStructPairCuts::cutMidTpcSepLS(){
472 if( mMidTpcSepLSCut ){
473 double x1=mMidTpcSeparationLS=MidTpcSeparation();
474 double x2=NominalTpcEntranceSeparation();
475 double x3=NominalTpcExitSeparation();
476 if(((x1+x2+x3)/3.)>mMidTpcSepLS[1])
return 0;
477 if( x1<x2 && x1<x3 && x1<mMidTpcSepLS[0])
return ++(msplitLSCounter[mType]); }
482 inline int StEStructPairCuts::cutExitSep(){
484 ( (mExitSeparation=NominalTpcExitSeparation()) <mExitSep[0])
486 )
return ++(mExitSepCounter[mType]);
490 inline int StEStructPairCuts::cutQuality() {
492 ((mQualityVal=quality()) <mQuality[0] || mQualityVal>mQuality[1] )) {
493 return ++(mQualityCounter[mType]);
498 inline int StEStructPairCuts::cutHBT(){
499 if(!mHBTCut || mType==1 || mType==3)
return 0;
500 float dpt = fabs(DeltaPt());
501 float deta = fabs(DeltaEta());
502 float dphi = fabs(DeltaPhi());
503 if ( deta<mHBT[0] && dphi<mHBT[1] && dpt<mHBT[2]
504 && mTrack1->Pt()<mHBT[3] && mTrack2->Pt()<mHBT[3] )
505 return ++(mHBTCounter[mType]);
509 inline int StEStructPairCuts::cutCoulomb(){
510 if(!mCoulombCut)
return 0;
511 float dpt = fabs(DeltaPt());
512 float deta = fabs(DeltaEta());
513 float dphi = fabs(DeltaPhi());
514 if ( deta<mCoulomb[0] && dphi<mCoulomb[1] && dpt<mCoulomb[2]
515 && mTrack1->Pt()<mCoulomb[3] && mTrack2->Pt()<mCoulomb[3] )
516 return ++(mCoulombCounter[mType]);
520 inline int StEStructPairCuts::cutMerging(){
521 if(!mMergingCut)
return 0;
522 if ( NominalTpcAvgXYSeparation()<mMerging[0] &&
523 NominalTpcAvgZSeparation() <mMerging[1])
524 return ++(mMergingCounter[mType]);
528 inline int StEStructPairCuts::cutCrossing(){
538 if(!mCrossingCut)
return 0;
540 if ( MidTpcXYSeparation()<mCrossing[0] && MidTpcZSeparation()<mCrossing[1]) {
541 float dphi = mTrack1->Phi()-mTrack2->Phi();
542 float dpt = mTrack1->Pt()- mTrack2->Pt();
543 if (mType==1 || mType==3) {
545 if (mTrack1->Charge()>0 && dphi>0) mretVal = 1;
546 if (mTrack1->Charge()<0 && dphi<0) mretVal = 1;
548 if (mTrack1->Charge()>0 && dphi<0) mretVal = 1;
549 if (mTrack1->Charge()<0 && dphi>0) mretVal = 1;
553 if (mTrack1->Charge()>0 && dphi*dpt<0) mretVal = 1;
554 if (mTrack1->Charge()<0 && dphi*dpt>0) mretVal = 1;
556 if (mTrack1->Charge()>0 && dphi*dpt>0) mretVal = 1;
557 if (mTrack1->Charge()<0 && dphi*dpt<0) mretVal = 1;
576 if (mretVal==0)
return 0;
577 return ++(mCrossingCounter[mType]);
580 inline int StEStructPairCuts::cutMerging2() {
596 if ( (MidTpcZSeparation()<mMerging2[0]) && (MidTpcXYSeparation()<mMerging2[1]) ) {
597 return ++(mMergingCounter2[mType]);
604 if ( OuterMidTpcZSeparation()>0 ) {
605 if ( OuterMidTpcZSeparation()<mMerging2[0] && OuterMidTpcXYSeparation()<mMerging2[1] ) {
606 return ++(mMergingCounter2[mType]);
608 }
else if ( OuterMidTpcZSeparation()>-3 ) {
609 if ( (TpcRadialEndCapSeparation()<mMerging2[0]) && (OuterMidTpcXYSeparation()<mMerging2[1]) ) {
610 return ++(mMergingCounter2[mType]);
613 if (NominalTpcZExitSeparation() > 0) {
614 if ( (NominalTpcZExitSeparation()<mMerging2[0]) && (NominalTpcXYExitSeparation()<mMerging2[1]) ) {
615 return ++(mMergingCounter2[mType]);
617 }
else if ( NominalTpcZExitSeparation() > -3) {
618 if ( (TpcRadialEndCapSeparation()<mMerging2[0]) && (NominalTpcXYExitSeparation()<mMerging2[1]) ) {
619 return ++(mMergingCounter2[mType]);
624 inline int StEStructPairCuts::cutCrossing2() {
631 if (!mCrossingCut2) {
637 if ( OuterMidTpcZSeparation()>0 ) {
638 if ( MidTpcZSeparation()>mCrossing2[0] && OuterMidTpcZSeparation()>mCrossing2[1] ) {
641 }
else if ( OuterMidTpcZSeparation()==-3 ) {
644 if ( MidTpcZSeparation()>mCrossing2[0] ) {
653 if (!TracksCrossInPhi()) {
656 return ++(mCrossingCounter2[mType]);
658 inline int StEStructPairCuts::cutLUT() {
665 double delPhi = mTrack1->Phi() - mTrack2->Phi();
666 double delEta = mTrack1->Eta() - mTrack2->Eta();
667 if (mLUT->cut(mTrack1->Curvature(),mTrack2->Curvature(),delPhi,delEta)) {
668 return ++(mLUTCounter[mType]);
673 inline int StEStructPairCuts::cutMass() {
674 if (!(mpionOtherMassCut | mpionpionMassCut | mpionKaonMassCut | mpionprotonMassCut |
675 mKaonOtherMassCut | mKaonKaonMassCut | mKaonprotonMassCut | mprotonOtherMassCut |
676 mprotonprotonMassCut | mOtherOtherMassCut)) {
680 int mode[4][4] = {{9, 0, 4, 7}, {0, 1, 2, 3}, {4, 2, 5, 6}, {7, 3, 6, 8}};
681 int it1 = Track1()->PID();
682 int it2 = Track2()->PID();
683 if (it1 < 0 || 3 < it1) {
686 if (it2 < 0 || 3 < it2) {
689 int iBin = mode[it1][it2];
691 double e, e1, e2, p1, p2, p[3], m, m1, m2;
692 p1 = Track1()->Ptot();
693 p2 = Track2()->Ptot();
694 p[0] = Track1()->Px() + Track2()->Px();
695 p[1] = Track1()->Py() + Track2()->Py();
696 p[2] = Track1()->Pz() + Track2()->Pz();
697 float Mass[] = {0.1396, 0.1396, 0.497, 0.9383};
698 float Mass2[] = {0.01949, 0.01949, 0.247, 0.880};
708 e1 = sqrt(p1*p1 + Mass2[it1]);
709 e2 = sqrt(p2*p2 + Mass2[it2]);
712 m = sqrt(e*e - p[0]*p[0] - p[1]*p[1] - p[2]*p[2]);
716 if (mpionOtherMassCut) {
717 if (mpionOtherMass[0] < mpionOtherMass[1]) {
718 if ((mpionOtherMass[0] < m) && (m < mpionOtherMass[1])) {
719 return ++(mpionOtherMassCounter[mType]);
722 if ((m < mpionOtherMass[1]) || (mpionOtherMass[0] < m)) {
723 return ++(mpionOtherMassCounter[mType]);
730 if (mpionpionMassCut) {
731 if (mpionpionMass[0] < mpionpionMass[1]) {
732 if ((mpionpionMass[0] < m) && (m < mpionpionMass[1])) {
733 return ++(mpionpionMassCounter[mType]);
736 if ((m < mpionpionMass[1]) || (mpionpionMass[0] < m)) {
737 return ++(mpionpionMassCounter[mType]);
744 if (mpionKaonMassCut) {
745 if (mpionKaonMass[0] < mpionKaonMass[1]) {
746 if ((mpionKaonMass[0] < m) && (m < mpionKaonMass[1])) {
747 return ++(mpionKaonMassCounter[mType]);
750 if ((m < mpionKaonMass[1]) || (mpionKaonMass[0] < m)) {
751 return ++(mpionKaonMassCounter[mType]);
758 if (mpionprotonMassCut) {
759 if (mpionprotonMass[0] < mpionprotonMass[1]) {
760 if ((mpionprotonMass[0] < m) && (m < mpionprotonMass[1])) {
761 return ++(mpionprotonMassCounter[mType]);
764 if ((m < mpionprotonMass[1]) || (mpionprotonMass[0] < m)) {
765 return ++(mpionprotonMassCounter[mType]);
772 if (mKaonOtherMassCut) {
773 if (mKaonOtherMass[0] < mKaonOtherMass[1]) {
774 if ((mKaonOtherMass[0] < m) && (m < mKaonOtherMass[1])) {
775 return ++(mKaonOtherMassCounter[mType]);
778 if ((m < mKaonOtherMass[1]) || (mKaonOtherMass[0] < m)) {
779 return ++(mKaonOtherMassCounter[mType]);
786 if (mKaonKaonMassCut) {
787 if (mKaonKaonMass[0] < mKaonKaonMass[1]) {
788 if ((mKaonKaonMass[0] < m) && (m < mKaonKaonMass[1])) {
789 return ++(mKaonKaonMassCounter[mType]);
792 if ((m < mKaonKaonMass[1]) || (mKaonKaonMass[0] < m)) {
793 return ++(mKaonKaonMassCounter[mType]);
800 if (mKaonprotonMassCut) {
801 if (mKaonprotonMass[0] < mKaonprotonMass[1]) {
802 if ((mKaonprotonMass[0] < m) && (m < mKaonprotonMass[1])) {
803 return ++(mKaonprotonMassCounter[mType]);
806 if ((m < mKaonprotonMass[1]) || (mKaonprotonMass[0] < m)) {
807 return ++(mKaonprotonMassCounter[mType]);
814 if (mprotonOtherMassCut) {
815 if (mprotonOtherMass[0] < mprotonOtherMass[1]) {
816 if ((mprotonOtherMass[0] < m) && (m < mprotonOtherMass[1])) {
817 return ++(mprotonOtherMassCounter[mType]);
820 if ((m < mprotonOtherMass[1]) || (mprotonOtherMass[0] < m)) {
821 return ++(mprotonOtherMassCounter[mType]);
828 if (mprotonprotonMassCut) {
829 if (mprotonprotonMass[0] < mprotonprotonMass[1]) {
830 if ((mprotonprotonMass[0] < m) && (m < mprotonprotonMass[1])) {
831 return ++(mprotonprotonMassCounter[mType]);
834 if ((m < mprotonprotonMass[1]) || (mprotonprotonMass[0] < m)) {
835 return ++(mprotonprotonMassCounter[mType]);
842 if (mOtherOtherMassCut) {
843 if (mOtherOtherMass[0] < mOtherOtherMass[1]) {
844 if ((mOtherOtherMass[0] < m) && (m < mOtherOtherMass[1])) {
845 return ++(mOtherOtherMassCounter[mType]);
848 if ((m < mOtherOtherMass[1]) || (mOtherOtherMass[0] < m)) {
849 return ++(mOtherOtherMassCounter[mType]);
859 inline int StEStructPairCuts::cutDeltaPhiH(){
860 if(!mdeltaPhiCut)
return 0;
861 mretVal=cutDeltaPhi();
862 mvalues[mdphiName.idx]=mdeltaPhi;
866 inline int StEStructPairCuts::cutDeltaEtaH(){
868 mdeltaEta=DeltaEta();
871 mretVal=cutDeltaEta();
872 mvalues[mdetaName.idx]=mdeltaEta;
876 inline int StEStructPairCuts::cutDeltaMtH(){
877 if(!mdeltaMtCut)
return 0;
878 mretVal=cutDeltaMt();
879 mvalues[mdmtName.idx]=mdeltaMt;
883 inline int StEStructPairCuts::cutqInvH(){
884 if(!mqInvCut)
return 0;
886 mvalues[mqInvName.idx]=mqInvariant;
890 inline int StEStructPairCuts::cutEntranceSepH(){
891 if(!mEntSepCut)
return 0;
892 mretVal=cutEntranceSep();
893 mvalues[mEntSepName.idx]=mEntranceSeparation;
897 inline int StEStructPairCuts::cutMidTpcSepLSH(){
898 if(!mMidTpcSepLSCut)
return 0;
899 mretVal=cutMidTpcSepLS();
900 mvalues[mMidTpcSepLSName.idx]=mMidTpcSeparationLS;
904 inline int StEStructPairCuts::cutMidTpcSepUSH(){
905 if(!mMidTpcSepUSCut)
return 0;
906 mretVal=cutMidTpcSepUS();
907 mvalues[mMidTpcSepUSName.idx]=mMidTpcSeparationUS;
912 inline int StEStructPairCuts::cutExitSepH(){
913 if(!mExitSepCut)
return 0;
914 mretVal=cutExitSep();
915 mvalues[mExitSepName.idx]=mExitSeparation;
919 inline int StEStructPairCuts::cutQualityH(){
920 if(!mQualityCut)
return 0;
921 mretVal=cutQuality();
922 mvalues[mQualityName.idx]=mQualityVal;
927 inline int StEStructPairCuts::correlationDepth(){
929 unsigned int am1=mTrack1->TopologyMapData(0)&65535;
930 unsigned int am2=mTrack2->TopologyMapData(0)&65535;
931 if(am1==0 || am2==0)
return 0;
932 if(am1==am2)
return 1;
934 unsigned int msk=(65535<<16);
936 unsigned int bm1=mTrack1->TopologyMapData(0)&msk;
937 unsigned int bm2=mTrack2->TopologyMapData(0)&msk;
941 if(am1==bm2 || bm1==am2)
return 2;
947 unsigned int cm1=mTrack1->TopologyMapData(1)&65535;
948 unsigned int cm2=mTrack2->TopologyMapData(1)&65535;
949 if(cm1==cm2 && cm1==0)
return 0;
951 if(am1==cm2 || am2==cm1)
return 4;
952 if( ((bm1==cm2) && bm1!=0) || ((bm2==cm1)&&(bm2!=0)) )
return 4;
953 if( cm1==cm2)
return 5;
955 unsigned int dm1=mTrack1->TopologyMapData(1)&msk;
956 unsigned int dm2=mTrack2->TopologyMapData(1)&msk;
959 if(dm1==dm2 && dm1==0)
return 0;
961 if(am1==dm2 || am2==dm1)
return 6;
962 if( ((bm1==dm2) && bm1!=0) || ((bm2==dm1)&&(bm2!=0)) )
return 6;
963 if( ((cm1==dm2) && cm1!=0) || ((cm2==dm1)&&(cm2!=0)) )
return 6;
964 if( dm1==dm2 && dm1!=0)
return 7;
int mcutMode
just a dummy holder used a lot