00001
00002
00003
00004
00006 #include <Stiostream.h>
00007 #include <math.h>
00008 #include "StPeCGeant.h"
00009 #include "tables/St_g2t_track_Table.h"
00010 #include "tables/St_g2t_vertex_Table.h"
00011
00012
00013 ClassImp(StPeCGeant)
00014
00015 StPeCGeant::StPeCGeant() {
00016 pPart = new TClonesArray ("StPeCParticle", 10);
00017 nPart = 0 ;
00018 }
00019
00020 StPeCGeant::~StPeCGeant() {
00021 delete pPart ;
00022 }
00023
00024 void StPeCGeant::clear() {
00025 nPart = 0 ;
00026 gPt = 0 ;
00027 gPz = 0 ;
00028 gEta = 0 ;
00029 gMass = 0 ;
00030 gY = 0 ;
00031 gPsi = 0 ;
00032 gZVertex = 0 ;
00033
00034 pPart->Clear();
00035 }
00036
00037 Int_t StPeCGeant::fill ( TDataSet* geant ) {
00038
00039
00040
00041 St_g2t_track* trk = 0 ;
00042 trk = (St_g2t_track *)geant->Find("g2t_track") ;
00043
00044
00045
00046
00047
00048
00049
00050
00051 if ( !trk ) {
00052 printf ( "StPeCGeant::fill: tracks not found \n" ) ;
00053 return 1 ;
00054 }
00055
00056 int nTracks = trk->GetNRows() ;
00057
00058 g2t_track_st* trkT = trk->GetTable() ;
00059
00060
00061 float px = 0 ;
00062 float py = 0 ;
00063 gPz = 0 ;
00064 float e = 0 ;
00065 nPart = 0 ;
00066 TClonesArray &pParticle = *pPart ;
00067
00068 int vert ;
00069 printf ( "StPeCGeant::fill: %i tracks found \n", nTracks ) ;
00070
00071 for ( int i = 0 ; i < nTracks ; i++ ) {
00072 new(pParticle[nPart++]) StPeCParticle(&(trkT[i])) ;
00073
00074 vert = trkT[i].start_vertex_p ;
00075 if ( vert != 1 ) continue ;
00076 px += trkT[i].p[0];
00077 py += trkT[i].p[1];
00078 gPz += trkT[i].p[2];
00079 e += trkT[i].e ;
00080 }
00081
00082 gPt = ::sqrt(px*px+py*py);
00083 gPsi = atan2(py,px);
00084 if ( gPsi < 0 ) gPsi += M_PI ;
00085 gMass = ::sqrt(e*e-gPt*gPt-gPz*gPz);
00086
00087 float theta = atan2(gPt,gPz);
00088 gEta = -::log(tan(theta/2.)) ;
00089 gY = 0.5*::log((e+gPz)/(e-gPz));
00090
00091 St_g2t_vertex* vtx = 0 ;
00092 vtx = (St_g2t_vertex *)geant->Find("g2t_vertex") ;
00093 if ( !vtx ) {
00094 printf ( "StPeCGeant::fill: vertex not found \n" ) ;
00095 return 1 ;
00096 }
00097 g2t_vertex_st* vtxT = vtx->GetTable() ;
00098
00099 gZVertex = vtxT->ge_x[2] ;
00100
00101 return 0 ;
00102 }
00103
00104
00105