00001 #include "StHbtMaker/Infrastructure/StHbtEvent.hh"
00002 #include "StHbtMaker/Infrastructure/StHbtTTreeEvent.h"
00003 #include "StHbtMaker/Infrastructure/StHbtTTreeTrack.h"
00004 #include "StHbtMaker/Infrastructure/StHbtTTreeV0.h"
00005 #include "StHbtMaker/Infrastructure/StHbtTTreeXi.h"
00006 #include "StHbtMaker/Infrastructure/StHbtTTreeKink.h"
00007 #include "StHbtMaker/Base/StHbtEventCut.h"
00008 #include "StHbtMaker/Base/StHbtTrackCut.h"
00009 #include "StHbtMaker/Base/StHbtV0Cut.h"
00010 #include "StHbtMaker/Base/StHbtXiCut.h"
00011 #include "StHbtMaker/Base/StHbtKinkCut.h"
00012
00013 #include "StHbtMaker/Infrastructure/StHbtTrackCollection.hh"
00014 #include "StHbtMaker/Infrastructure/StHbtV0Collection.hh"
00015 #include "StHbtMaker/Infrastructure/StHbtXiCollection.hh"
00016 #include "StHbtMaker/Infrastructure/StHbtKinkCollection.hh"
00017
00018 #include "StExceptions.hh"
00019 #include "StarClassLibrary/SystemOfUnits.h"
00020
00021 ClassImp(StHbtTTreeEvent)
00022
00023 int StHbtTTreeEvent::mDebug = 0;
00024 TClonesArray *StHbtTTreeEvent::fgTracks = 0;
00025 TClonesArray *StHbtTTreeEvent::fgV0s = 0;
00026 TClonesArray *StHbtTTreeEvent::fgXis = 0;
00027 TClonesArray *StHbtTTreeEvent::fgKinks = 0;
00028
00029
00030
00031
00032 StHbtTTreeEvent::StHbtTTreeEvent() {
00033 if (mDebug) cout << "StHbtTTreeEvent::StHbtTTreeEvent()" << endl;
00034 initClonesArrays();
00035 }
00036
00037
00038
00039 StHbtTTreeEvent::~StHbtTTreeEvent(){
00040 if (mDebug) cout << "StHbtTTreeEvent::~StHbtTTreeEvent()" << endl;
00041 fgTracks->Clear("");
00042 fgV0s->Clear("");
00043 fgXis->Clear("");
00044 fgKinks->Clear("");
00045 mNtracks=0;
00046 mNv0s=0;
00047 mNxis=0;
00048 mNkinks=0;
00049 }
00050
00051
00052
00053 void StHbtTTreeEvent::initClonesArrays(){
00054 if (mDebug) cout << "StHbtTTreeEvent::initClonesArrays()" << endl;
00055
00056 if (!fgTracks) {
00057 if (mDebug) cout << "StHbtTTreeEvent::initClonesArrays() create fgTracks" << endl;
00058 fgTracks = new TClonesArray("StHbtTTreeTrack", 4000);
00059 mNtracks=0;
00060 }
00061 fTracks = fgTracks;
00062
00063 if (!fgV0s) {
00064 if (mDebug) cout << "StHbtTTreeEvent::initClonesArrays() create fgV0s" << endl;
00065 fgV0s = new TClonesArray("StHbtTTreeV0", 4000);
00066 mNv0s=0;
00067 }
00068 fV0s = fgV0s;
00069
00070 if (!fgXis) {
00071 if (mDebug) cout << "StHbtTTreeEvent::initClonesArrays() create fgXis" << endl;
00072 fgXis = new TClonesArray("StHbtTTreeXi", 4000);
00073 mNxis=0;
00074 }
00075 fXis = fgXis;
00076
00077 if (!fgKinks) {
00078 if (mDebug) cout << "StHbtTTreeEvent::initClonesArrays() create fgKinks" << endl;
00079 fgKinks = new TClonesArray("StHbtTTreeKink", 4000);
00080 mNkinks=0;
00081 }
00082 fKinks = fgKinks;
00083
00084 if (mDebug) cout << "StHbtTTreeEvent::initClonesArrays() leaving" << endl;
00085 }
00086
00087
00088
00089 StHbtTTreeEvent::StHbtTTreeEvent(const StHbtEvent* event, StHbtTrackCut* trackCut, StHbtV0Cut* v0Cut, StHbtXiCut* xiCut, StHbtKinkCut* kinkCut){
00090 try {
00091 initClonesArrays();
00092 fillEventInfo(event);
00093 }
00094 catch (StException e) {
00095 throw e;
00096 }
00097
00098
00099 if (mDebug) cout << "StHbtTTreeEvent::StHbtTTreeEvent(...) - now fill " << event->TrackCollection()->size() << " tracks" << endl;
00100 for (StHbtTrackIterator iter=event->TrackCollection()->begin(); iter != event->TrackCollection()->end(); iter++){
00101 if (!trackCut || trackCut->Pass(*iter)) addTrack(event,*iter);
00102 }
00103
00104 if (mDebug) cout << "StHbtTTreeEvent::StHbtTTreeEvent(...) - now fill " << event->V0Collection()->size() << " v0s" << endl;
00105 for (StHbtV0Iterator iter=event->V0Collection()->begin(); iter != event->V0Collection()->end(); iter++){
00106 if (!v0Cut || v0Cut->Pass(*iter)) addV0(event,*iter);
00107 }
00108
00109 if (mDebug) cout << "StHbtTTreeEvent::StHbtTTreeEvent(...) - now fill " << event->XiCollection()->size() << " xis" << endl;
00110 for (StHbtXiIterator iter=event->XiCollection()->begin(); iter != event->XiCollection()->end(); iter++){
00111 if (!xiCut || xiCut->Pass(*iter)) addXi(event,*iter);
00112 }
00113
00114 if (mDebug) cout << "StHbtTTreeEvent::StHbtTTreeEvent(...) - now fill " << event->KinkCollection()->size() << " kinks" << endl;
00115 for (StHbtKinkIterator iter=event->KinkCollection()->begin(); iter != event->KinkCollection()->end(); iter++){
00116 if (!kinkCut || kinkCut->Pass(*iter)) addKink(event,*iter);
00117 }
00118 }
00119
00120
00121
00122 void StHbtTTreeEvent::fill(const StHbtEvent* event, StHbtTrackCut* trackCut, StHbtV0Cut* v0Cut, StHbtXiCut* xiCut, StHbtKinkCut* kinkCut){
00123 clear();
00124 try {
00125 fillEventInfo(event);
00126 }
00127 catch (StException e) {
00128 throw e;
00129 }
00130
00131 if (mDebug) cout << "StHbtTTreeEvent::StHbtTTreeEvent(...) - now fill " << event->TrackCollection()->size() << " tracks" << endl;
00132 for (StHbtTrackIterator iter=event->TrackCollection()->begin(); iter != event->TrackCollection()->end(); iter++){
00133 if (!trackCut || trackCut->Pass(*iter)) addTrack(event,*iter);
00134 }
00135
00136 if (mDebug) cout << "StHbtTTreeEvent::StHbtTTreeEvent(...) - now fill " << event->V0Collection()->size() << " v0s" << endl;
00137 for (StHbtV0Iterator iter=event->V0Collection()->begin(); iter != event->V0Collection()->end(); iter++){
00138 if (!v0Cut || v0Cut->Pass(*iter)) addV0(event,*iter);
00139 }
00140
00141 if (mDebug) cout << "StHbtTTreeEvent::StHbtTTreeEvent(...) - now fill " << event->XiCollection()->size() << " xis" << endl;
00142 for (StHbtXiIterator iter=event->XiCollection()->begin(); iter != event->XiCollection()->end(); iter++){
00143 if (!xiCut || xiCut->Pass(*iter)) addXi(event,*iter);
00144 }
00145
00146 if (mDebug) cout << "StHbtTTreeEvent::StHbtTTreeEvent(...) - now fill " << event->KinkCollection()->size() << " kinks" << endl;
00147 for (StHbtKinkIterator iter=event->KinkCollection()->begin(); iter != event->KinkCollection()->end(); iter++){
00148 if (!kinkCut || kinkCut->Pass(*iter)) addKink(event,*iter);
00149 }
00150 }
00151
00152
00153
00154 void StHbtTTreeEvent::fillEventInfo(const StHbtEvent* event){
00155 if (mDebug) cout << "StHbtTTreeEvent::fillEventInfo(StEvent* event)" << endl;
00156 if (!event)
00157 throw StExceptionNullPointer("StHbtTTreeEvent::fillEventInfo(StHbtEvent* event) - event");
00158 mEventNumber = event->mEventNumber;
00159 mRunNumber = event->mRunNumber;
00160 mTpcNhits = event->mTpcNhits;
00161 mNumberOfTracks = event->mNumberOfTracks;
00162 mNumberOfGoodTracks= event->mNumberOfGoodTracks;
00163 mUncorrectedNumberOfPositivePrimaries = event->mUncorrectedNumberOfPositivePrimaries;
00164 mUncorrectedNumberOfNegativePrimaries = event->mUncorrectedNumberOfNegativePrimaries;
00165 mReactionPlane[0] = event->mReactionPlane[0];
00166 mReactionPlane[1] = event->mReactionPlane[1];
00167 mReactionPlanePtWgt[0] = event->mReactionPlanePtWgt[0];
00168 mReactionPlanePtWgt[1] = event->mReactionPlanePtWgt[1];
00169 mVertexX = event->mPrimVertPos.x();
00170 mVertexY = event->mPrimVertPos.y();
00171 mVertexZ = event->mPrimVertPos.z();
00172 mCtbMultiplicity = event->mCtbMultiplicity;
00173 mZdcAdc[0] = event->mZdcAdc[0];
00174 mZdcAdc[1] = event->mZdcAdc[1];
00175 mMagneticField = event->mMagneticField;
00176 mTriggerWord = event->mTriggerWord;
00177 mTriggerActionWord = event->mTriggerActionWord;
00178
00179 mL3TriggerAlgorithm = event->mL3TriggerAlgorithm[0];
00180
00181 if (mDebug) cout << "StHbtTTreeEvent::fillEventInfo(StEvent* event) - leaving" << endl;
00182 }
00183
00184
00185
00186 void StHbtTTreeEvent::clear(){
00187 if (mDebug) cout << "StHbtTTreeEvent::clear(...)" << endl;
00188
00189
00190
00191
00192
00193 fTracks->Clear();
00194 fV0s->Clear();
00195 fXis->Clear();
00196 fKinks->Clear();
00197
00198 mNtracks=0;
00199 mNv0s=0;
00200 mNxis=0;
00201 mNkinks=0;
00202 }
00203
00204
00205
00206 void StHbtTTreeEvent::addTrack(const StHbtEvent* event, const StHbtTrack* track) {
00207 if (mDebug>1) cout << "StHbtTTreeEvent::addTrack(...) " << endl;
00208 TClonesArray &tracks = *fTracks;
00209 try{
00210 new(tracks[mNtracks++]) StHbtTTreeTrack(event, track);
00211 }
00212 catch (StException e) {
00213 if (mDebug>1) e.print();
00214 }
00215 }
00216
00217
00218
00219 void StHbtTTreeEvent::addV0(const StHbtEvent* event, const StHbtV0* v0) {
00220 if (mDebug>1) cout << "StHbtTTreeEvent::addV0(...) " << endl;
00221 TClonesArray &v0s = *fV0s;
00222 try {
00223 new(v0s[mNv0s++]) StHbtTTreeV0(event, v0);
00224 }
00225 catch (StException e) {
00226 e.print();
00227 }
00228 }
00229
00230
00231
00232 void StHbtTTreeEvent::addXi(const StHbtEvent* event, const StHbtXi* xi) {
00233 if (mDebug>1) cout << "StHbtTTreeEvent::addXi(...) " << endl;
00234 TClonesArray &xis = *fXis;
00235 try {
00236 new(xis[mNxis++]) StHbtTTreeXi(event, xi);
00237 }
00238 catch (StException e) {
00239 e.print();
00240 }
00241 }
00242
00243
00244
00245 void StHbtTTreeEvent::addKink(const StHbtEvent* event, const StHbtKink* kink) {
00246 TClonesArray &kinks = *fKinks;
00247 try {
00248 new(kinks[mNkinks++]) StHbtTTreeKink(event, kink);
00249 }
00250 catch (StException e) {
00251 e.print();
00252 }
00253 }
00254
00255
00256 void StHbtTTreeEvent::SetMagneticField(double m) {mMagneticField=m;}
00257
00258