00001 #include "StRareEvent.h"
00002 #include "StRareTrack.h"
00003 #include "StL3RareTrack.h"
00004 #include "StEventTypes.h"
00005 #include "StThreeVectorF.hh"
00006 #include "StEventUtilities/StuRefMult.hh"
00007
00008 ClassImp(StRareEvent)
00009
00010 TClonesArray* StRareEvent::fgRareTracks = 0;
00011 TClonesArray* StRareEvent::fgL3RareTracks = 0;
00012
00013 StRareEvent::StRareEvent() {
00014 if (!fgRareTracks) fgRareTracks = new TClonesArray("StRareTrack",4000);
00015 fRareTracks = fgRareTracks;
00016 fNRareTrack = 0;
00017 if (!fgL3RareTracks) fgL3RareTracks = new TClonesArray("StL3RareTrack",4000);
00018 fL3RareTracks = fgL3RareTracks;
00019 fNL3RareTrack = 0;
00020 }
00021
00022
00023 StRareEvent::~StRareEvent() {
00024 fgRareTracks->Delete();
00025 fgL3RareTracks->Delete();
00026 }
00027
00028
00029 void StRareEvent::fillRareEvent(StEvent* event){
00030 fRunNumber = event->runId();
00031 fEventNumber = event->id();
00032 fmagneticField = event->summary()->magneticField();
00033
00034
00035 StEvent& evt = *event;
00036 fnumberOfGoodPrimaryTracks = uncorrectedNumberOfNegativePrimaries(evt);
00037 if (event->primaryVertex()) {
00038 fVertexZ = event->primaryVertex()->position().z();
00039 }
00040 else {
00041 fVertexZ = -999.0;
00042 }
00043
00044 StL0Trigger* myL0Trigger = event->l0Trigger();
00045 if (!myL0Trigger) {
00046 fTriggerWord = 0;
00047 }
00048 else fTriggerWord = myL0Trigger->triggerWord();
00049 }
00050
00051
00052 void StRareEvent::fillL3Info(StL3Trigger *l3trigger)
00053 {
00054 if (l3trigger->primaryVertex()) {
00055 fL3VertexZ = l3trigger->primaryVertex()->position().z();
00056 }
00057 else fL3VertexZ = -999;
00058
00059
00060 const StL3EventSummary* l3EventSummary = l3trigger->l3EventSummary();
00061 if (!l3EventSummary) {
00062 cout << "No l3 event summary found." << endl;
00063 return;
00064 }
00065
00066 fL3Unbiased = l3EventSummary->unbiasedTrigger();
00067
00068 fL3Flag = kFALSE;
00069
00070
00071 const StPtrVecL3AlgorithmInfo& algInfo = l3EventSummary->algorithmsAcceptingEvent();
00072 for (unsigned int i=0; i<algInfo.size(); i++) {
00073 if (algInfo[i]->id() == 6) {
00074 fL3Flag = kTRUE;
00075 fNProcessed = algInfo[i]->numberOfProcessedEvents();
00076 fNAccept = algInfo[i]->numberOfAcceptedEvents();
00077 fNBuild = algInfo[i]->numberOfBuildEvents();
00078 for (int j=0; j<algInfo[i]->dataSize(); j++)
00079 fTriggerData[j] = algInfo[i]->data(j);
00080 }
00081 }
00082
00083 }
00084
00085
00086 void StRareEvent::clear(Option_t *option) {
00087 fgRareTracks->Clear(option);
00088 fNRareTrack = 0;
00089 fgL3RareTracks->Clear(option);
00090 fNL3RareTrack = 0;
00091 }
00092
00093
00094 void StRareEvent::addTrack(StPrimaryTrack* track) {
00095 TClonesArray &trks = *fRareTracks;
00096 new (trks[fNRareTrack++]) StRareTrack(track);
00097 }
00098
00099
00100 void StRareEvent::addL3Track(StGlobalTrack* l3track) {
00101 TClonesArray &l3trks = *fgL3RareTracks;
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111 new (l3trks[fNL3RareTrack++]) StL3RareTrack(l3track);
00112 }
00113