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 "StuCutEvent.hh"
00029 #include "StuCutTrack.hh"
00030 #include "StEvent.h"
00031 #include "StEventTypes.h"
00032 #include "PhysicalConstants.h"
00033 #include "SystemOfUnits.h"
00034 #include "StThreeVectorF.hh"
00035 #define PR(x) cout << "##### CutEvent: " << (#x) << " = " << (x) << endl;
00036
00037 ClassImp(StuCutEvent)
00038
00039
00040
00041 Int_t StuCutEvent::mMultCuts[2] = {10, 10000};
00042 Float_t StuCutEvent::mVertexXCuts[2] = {-1., 1.};
00043 Float_t StuCutEvent::mVertexYCuts[2] = {-1., 1.};
00044 Float_t StuCutEvent::mVertexZCuts[2] = {-30., 30.};
00045 UInt_t StuCutEvent::mEventN = 0;
00046 UInt_t StuCutEvent::mGoodEventN = 0;
00047 UInt_t StuCutEvent::mMultCut = 0;
00048 UInt_t StuCutEvent::mVertexXCut = 0;
00049 UInt_t StuCutEvent::mVertexYCut = 0;
00050 UInt_t StuCutEvent::mVertexZCut = 0;
00051 Float_t StuCutEvent::mEtaSymCuts[2] = {-0.1, 0.1};
00052 UInt_t StuCutEvent::mEtaSymCutN = 0;
00053
00054
00055
00056 StuCutEvent::StuCutEvent() {
00057
00058 }
00059
00060
00061
00062 StuCutEvent::~StuCutEvent() {
00063 }
00064
00065
00066
00067 Int_t StuCutEvent::CheckEvent(StEvent* pEvent) {
00068
00069
00070 mEventN++;
00071
00072
00073 Long_t nvtx = pEvent->numberOfPrimaryVertices();
00074 if (nvtx == 0) return kFALSE;
00075
00076
00077
00078
00079 StPrimaryVertex* pVertex = pEvent->primaryVertex(0);
00080 if (!pVertex) return kFALSE;
00081
00082
00083 Long_t mult = pVertex->numberOfDaughters();
00084 if (mMultCuts[1] > mMultCuts[0] &&
00085 (mult < mMultCuts[0] || mult >= mMultCuts[1])) {
00086 mMultCut++;
00087 return kFALSE;
00088 }
00089
00090 const StThreeVectorF& vertex = pVertex->position();
00091
00092
00093 Float_t vertexX = vertex.x();
00094 if (mVertexXCuts[1] > mVertexXCuts[0] &&
00095 (vertexX < mVertexXCuts[0] || vertexX >= mVertexXCuts[1])) {
00096 mVertexXCut++;
00097 return kFALSE;
00098 }
00099
00100
00101 Float_t vertexY = vertex.y();
00102 if (mVertexYCuts[1] > mVertexYCuts[0] &&
00103 (vertexY < mVertexYCuts[0] || vertexY >= mVertexYCuts[1])) {
00104 mVertexYCut++;
00105 return kFALSE;
00106 }
00107
00108
00109 Float_t vertexZ = vertex.z();
00110 if (mVertexZCuts[1] > mVertexZCuts[0] &&
00111 (vertexZ < mVertexZCuts[0] || vertexZ >= mVertexZCuts[1])) {
00112 mVertexZCut++;
00113 return kFALSE;
00114 }
00115
00116 mGoodEventN++;
00117 return kTRUE;
00118 }
00119
00120
00121
00122 Int_t StuCutEvent::CheckEtaSymmetry() {
00123
00124
00125
00126
00127 Float_t mEtaSymPosN = (float)StuCutTrack::EtaSymPos();
00128 Float_t mEtaSymNegN = (float)StuCutTrack::EtaSymNeg();
00129 Float_t EtaSym = (mEtaSymPosN - mEtaSymNegN) /
00130 (mEtaSymPosN + mEtaSymNegN);
00131 StuCutTrack::EtaSymClear();
00132 if (mEtaSymCuts[1] > mEtaSymCuts[0] &&
00133 (EtaSym < mEtaSymCuts[0] || EtaSym >= mEtaSymCuts[1])) {
00134 mEtaSymCutN++;
00135 mGoodEventN--;
00136 return kFALSE;
00137 }
00138
00139 return kTRUE;
00140 }
00141
00142
00143
00144 void StuCutEvent::PrintCutList() {
00145
00146
00147 cout << "#######################################################" << endl;
00148 cout << "# Total Events= " << mEventN << endl;
00149 cout << "# Event Cut List:" << endl;
00150 cout << "# Mult cuts= " << mMultCuts[0] << ", " << mMultCuts[1]
00151 << " :\t Events Cut= " << mMultCut << endl;
00152 cout << "# VertexX cuts= " << mVertexXCuts[0] << ", " << mVertexXCuts[1]
00153 << " :\t Events Cut= " << mVertexXCut << endl;
00154 cout << "# VertexY cuts= " << mVertexYCuts[0] << ", " << mVertexYCuts[1]
00155 << " :\t Events Cut= " << mVertexYCut << endl;
00156 cout << "# VertexZ cuts= " << mVertexZCuts[0] << ", " << mVertexZCuts[1]
00157 << " :\t Events Cut= " << mVertexZCut << endl;
00158 cout << "# Eta Symmetry cuts= " << mEtaSymCuts[0] << ", " << mEtaSymCuts[1]
00159 << " :\t " << setprecision(4) << (float)mEtaSymCutN/(float)mEventN/perCent
00160 << "% cut" << endl;
00161 cout << "# Good Events = " << mGoodEventN << ", " << setprecision(4) <<
00162 (float)mGoodEventN/(float)mEventN/perCent << "%" << endl;
00163 cout << "#######################################################" << endl;
00164
00165 }