00001
00002
00003
00004
00005
00006
00007
00008
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00025
00026 #include <Stiostream.h>
00027 #include <stdlib.h>
00028 #include "StEvent.h"
00029 #include "StEventTypes.h"
00030 #include "StuCutTrack.hh"
00031 #include "PhysicalConstants.h"
00032 #include "SystemOfUnits.h"
00033 #include "StThreeVectorD.hh"
00034 #define PR(x) cout << "##### CutTrack: " << (#x) << " = " << (x) << endl;
00035
00036 ClassImp(StuCutTrack)
00037
00038
00039
00040 Int_t StuCutTrack::mFitPtsCuts[2] = {10, 200};
00041 Float_t StuCutTrack::mFitOverMaxCuts[2] = {0.6, 1.};
00042
00043 UInt_t StuCutTrack::mTrackN = 0;
00044 UInt_t StuCutTrack::mGoodTrackN = 0;
00045 UInt_t StuCutTrack::mEtaSymPosN = 0;
00046 UInt_t StuCutTrack::mEtaSymNegN = 0;
00047 UInt_t StuCutTrack::mFitPtsCutN = 0;
00048 UInt_t StuCutTrack::mFitOverMaxCutN = 0;
00049
00050
00051
00052 StuCutTrack::StuCutTrack() {
00053
00054 }
00055
00056
00057
00058 StuCutTrack::~StuCutTrack() {
00059 }
00060
00061
00062
00063 Int_t StuCutTrack::CheckTrack(StPrimaryTrack* pTrack) {
00064
00065
00066 mTrackN++;
00067
00068
00069 Int_t nFitPoints = pTrack->fitTraits().numberOfFitPoints();
00070 if (mFitPtsCuts[1] > mFitPtsCuts[0] &&
00071 (nFitPoints < mFitPtsCuts[0] || nFitPoints >= mFitPtsCuts[1])) {
00072 mFitPtsCutN++;
00073 return kFALSE;
00074 }
00075
00076
00077 Int_t nMaxPoints = pTrack->numberOfPossiblePoints();
00078 float fitOverMax = (nMaxPoints) ? (float)nFitPoints/(float)nMaxPoints : 0.8;
00079
00080 if (mFitOverMaxCuts[1] > mFitOverMaxCuts[0] &&
00081 (fitOverMax < mFitOverMaxCuts[0] || fitOverMax >= mFitOverMaxCuts[1])) {
00082 mFitOverMaxCutN++;
00083 return kFALSE;
00084 }
00085
00086
00087
00088 double bField = 0.5*tesla;
00089
00090 StThreeVectorD p = pTrack->geometry()->helix().momentum(bField);
00091 if (p.pseudoRapidity() > 0.) {
00092 mEtaSymPosN++;
00093 } else {
00094 mEtaSymNegN++;
00095 }
00096 mGoodTrackN++;
00097 return kTRUE;
00098 }
00099
00100
00101
00102 void StuCutTrack::PrintCutList() {
00103
00104
00105
00106 cout << "#######################################################" << endl;
00107 cout << "# Track Cut List:" << endl;
00108 cout << "# FitPts cuts= " << mFitPtsCuts[0] << ", " << mFitPtsCuts[1]
00109 << " :\t " << setprecision(4) << (float)mFitPtsCutN/(float)mTrackN/perCent
00110 << "% cut" << endl;
00111 cout << "# FitOverMax cuts= " << mFitOverMaxCuts[0] << ", "
00112 << mFitOverMaxCuts[1] << " :\t " << setprecision(4)
00113 << (float)mFitOverMaxCutN/(float)mTrackN/perCent << "% cut" << endl;
00114 cout << "# Good Tracks = " << (float)mGoodTrackN/(float)mTrackN/perCent
00115 << "%" << endl;
00116 cout << "#######################################################" << endl;
00117
00118 }