00001
00002
00003
00004
00005 #include "Stiostream.h"
00006 #include <cmath>
00007 #include "StEventCompendiumMaker.h"
00008 #include "TDataSet.h"
00009 #include "StDetectorDbMaker/St_MagFactorC.h"
00010 #include "StMessMgr.h"
00011 #include "StEvent.h"
00012 #include "StEventSummary.h"
00013 #include "StContainers.h"
00014 #include "StTrackNode.h"
00015 #include "StTrack.h"
00016 #include "StTrackGeometry.h"
00017 #include "StPrimaryVertex.h"
00018
00019 static const char rcsid[] = "$Id: StEventCompendiumMaker.cxx,v 1.3 2012/05/07 14:43:47 fisyak Exp $";
00020 ClassImp(StEventCompendiumMaker)
00021
00022 Int_t StEventCompendiumMaker::Make(){
00023 StEvent* rEvent = 0;
00024 rEvent = (StEvent*) GetInputDS("StEvent");
00025 if (!rEvent) {
00026 gMessMgr->Warning() << "StEventCompendiumMaker::Make: No StEvent found, bail out!" << endm;
00027 return kStWarn;
00028 }
00029 fillEventSummary(rEvent);
00030
00031
00032 St_MagFactorC* mMagTable = St_MagFactorC::instance();
00033 double scalef = mMagTable->ScaleFactor();
00034 double bfieldz = scalef * 4.97952;
00035 rEvent->summary()->setMagneticField(bfieldz);
00036 if (Debug() > 1) {
00037 rEvent->summary()->Dump();
00038 }
00039 return kStOK;
00040 }
00041
00042 void StEventCompendiumMaker::fillEventSummary(StEvent* e) {
00043 StEventSummary* summary = e->summary();
00044 if (!e->trackNodes().size()){
00045 cout << "fillEventSummary: Zero tracks nodes in StEvent...\n" << endl;
00046 }
00047
00048 int glb_trk_good(0), glb_trk_plus(0), glb_trk_minus(0);
00049 int prim_trk_good(0);
00050 float mean_pt(0), mean_pt2(0), mean_eta(0), rms_eta(0);
00051
00052 const StSPtrVecTrackNode& nodes = e->trackNodes();
00053 for (size_t itrk=0; itrk < nodes.size(); itrk++) {
00054 StTrack* gtrk = nodes[itrk]->track(global);
00055
00056
00057
00058 if ( gtrk->flag() <= 0 ) continue;
00059 glb_trk_good++;
00060
00061
00062 StTrack* ptrk = nodes[itrk]->track(primary);
00063 if(ptrk && ptrk->flag()>0) prim_trk_good++;
00064
00065
00066 if ( gtrk->geometry()->charge() > 0 ) glb_trk_plus++;
00067 if ( gtrk->geometry()->charge() < 0 ) glb_trk_minus++;
00068
00069 const StThreeVectorF& mom = gtrk->geometry()->momentum();
00070
00071 float eta = mom.pseudoRapidity();
00072 float pt = mom.perp();
00073
00074
00075 mean_pt += pt;
00076 mean_pt2 += pt*pt;
00077 mean_eta += eta;
00078 rms_eta += eta*eta;
00079 }
00080
00081
00082 summary->setNumberOfTracks(nodes.size());
00083 summary->setNumberOfGoodTracks(glb_trk_good);
00084 summary->setNumberOfGoodPrimaryTracks(prim_trk_good);
00085 summary->setNumberOfGoodTracks(positive,glb_trk_plus);
00086 summary->setNumberOfGoodTracks(negative,glb_trk_minus);
00087
00088 summary->setNumberOfVertices(e->numberOfPrimaryVertices());
00089
00090
00091 summary->setNumberOfVerticesForType(kV0VtxId,e->v0Vertices().size());
00092 summary->setNumberOfVerticesForType(kXiVtxId,e->xiVertices().size());
00093 summary->setNumberOfVerticesForType(kKinkVtxId,e->kinkVertices().size());
00094
00095
00096
00097
00098
00099
00100 size_t nPileupVert = 0;
00101 for (size_t i=0; i<e->numberOfPrimaryVertices();++i) {
00102 StVertexId vtx_id = e->primaryVertex(i)->type();
00103 if(vtx_id == kOtherVtxId) nPileupVert++ ;
00104 }
00105 summary->setNumberOfPileupVertices(nPileupVert);
00106
00107
00108 if (glb_trk_good > 0) {
00109 summary->setMeanPt(mean_pt/(float)glb_trk_good);
00110 summary->setMeanPt2(mean_pt2/(float)glb_trk_good);
00111 summary->setMeanEta(mean_eta/(float)glb_trk_good);
00112 summary->setRmsEta(sqrt(rms_eta/(float)glb_trk_good));
00113 }
00114
00115
00116 if (e->primaryVertex()) {
00117 summary->setPrimaryVertexPosition(e->primaryVertex()->position());
00118 }
00119
00120
00121
00122
00123
00124
00125 return;
00126 }
00127
00128