00001
00002
00003
00004 #include "Stiostream.h"
00005 #include <cmath>
00006 #include <vector>
00007 using namespace std;
00008
00009
00010 #include "TObject.h"
00011 #include "TTree.h"
00012 #include "TClonesArray.h"
00013
00014
00015 #include "SystemOfUnits.h"
00016 #include "PhysicalConstants.h"
00017 #include "StThreeVectorF.hh"
00018 #include "StLorentzVectorF.hh"
00019
00020
00021 #include "StEventTypes.h"
00022
00023
00024 #include "StMuDSTMaker/COMMON/StMuDstMaker.h"
00025 #include "StMuDSTMaker/COMMON/StMuDst.h"
00026 #include "StMuDSTMaker/COMMON/StMuEvent.h"
00027 #include "StMuDSTMaker/COMMON/StMuTrack.h"
00028
00029
00030 #include "StJetMuEvent.h"
00031
00032 ClassImp(StJetMuEvent)
00033
00034 StJetMuEvent::StJetMuEvent() : mTracks(new TClonesArray("StMuTrack",100))
00035 {
00036
00037 }
00038
00039 StJetMuEvent::~StJetMuEvent()
00040 {
00041
00042 }
00043
00044 bool StJetMuEvent::fill(StMuDstMaker* maker)
00045 {
00046 StMuEvent* e = maker->muDst()->event();
00047 if (!e) {
00048 cout <<"Error, null event. Return False"<<endl;
00049 return false;
00050 }
00051
00052 reset();
00053
00054 if (accept(maker)) {
00055 return true;
00056 }
00057 return false;
00058 }
00059
00060 bool StJetMuEvent::accept(StMuDstMaker* maker)
00061 {
00062 StMuEvent* e = maker->muDst()->event();
00063 if (!e) {
00064 cout <<"StJetMuEvent::accept(StMuDstMaker*). Error:\t"
00065 <<"Null event. Return false"<<endl;
00066 return false;
00067 }
00068
00069 fillBasicTypes(e);
00070 vector<StMuTrack*> vec;
00071
00072 int n = maker->muDst()->primaryTracks()->GetLast()+1;
00073
00074 for (int i=0; i<n; ++i) {
00075 StMuTrack* track = maker->muDst()->primaryTracks(i);
00076
00077 if (acceptTrack(track)) {
00078
00079 vec.push_back(track);
00080 }
00081 }
00082
00083 if (mCuts.verbose) {
00084 cout <<"\t Accepted "<<vec.size()<<" tracks of "<<n<<" possible"<<endl;
00085 }
00086
00087 if (vec.empty()==false) {
00088
00089
00090
00091 for (vector<StMuTrack*>::iterator it=vec.begin(); it!=vec.end(); ++it) {
00092 StMuTrack& track = **it;
00093
00094 TClonesArray& cArr = *mTracks;
00095 new(cArr[mTrackCounter++]) StMuTrack(track);
00096 }
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 return true;
00109 }
00110 else {
00111 return false;
00112 }
00113 }
00114
00115 bool StJetMuEvent::acceptTrack(StMuTrack* track)
00116 {
00117 if (track->flag() >= 0 &&
00118 track->momentum().perp() > mCuts.ptCut &&
00119 fabs(track->momentum().pseudoRapidity()) < mCuts.pseudoRapidityCutOff &&
00120 track->nHitsFit() >= mCuts.minNumberOfFitPoints &&
00121 track->nHits() >= mCuts.minNumberOfPoints) {
00122 return true;
00123 }
00124 else {
00125 return false;
00126 }
00127 }
00128
00129 void StJetMuEvent::reset()
00130 {
00131 mPlusPlus = 0;
00132 mMinusMinus = 0;
00133 mPlusMinus = 0;
00134 mL3Fired=false;
00135
00136 mEventId=0;
00137 mEventNumber=0;
00138 mRunId=0;
00139 mRunNumber=0;
00140 mTriggerWord=0;
00141
00142 mRefMultPos=0;
00143 mRefMultNeg=0;
00144 mRefMult=0;
00145
00146 mMagneticField=0.;
00147 mZdcAdcAttenuatedSumWest=0.;
00148 mZdcAdcAttenuatedSumEast=0.;
00149 mCtbMultiplicity=0.;
00150
00151 mPrimaryVertexPosition.setX(0.);
00152 mPrimaryVertexPosition.setY(0.);
00153 mPrimaryVertexPosition.setZ(0.);
00154
00155 mTrackCounter=0;
00156 mTracks->Clear();
00157 }
00158
00159 void StJetMuEvent::fillBasicTypes(StMuEvent* event)
00160 {
00161
00162 mEventId = event->eventId();
00163 mEventNumber = event->eventNumber();
00164 mRunId = event->runId();
00165 mRunNumber = event->runNumber();
00166 mTriggerWord = event->l0Trigger().triggerWord();
00167
00168
00169 mRefMultPos = event->refMultPos();
00170 mRefMultNeg = event->refMultNeg();
00171 mRefMult = event->refMult();
00172
00173 mMagneticField = event->magneticField();
00174 mZdcAdcAttenuatedSumWest = event->zdcAdcAttentuatedSumWest();
00175 mZdcAdcAttenuatedSumEast = event->zdcAdcAttentuatedSumEast();
00176 mCtbMultiplicity = event->ctbMultiplicity();
00177 mPrimaryVertexPosition = event->primaryVertexPosition();
00178
00179
00180
00181 }