00001
00002
00003
00004
00005
00006
00007
00008 #include "TChain.h"
00009
00010
00011 #include "tables/St_g2t_event_Table.h"
00012 #include "tables/St_g2t_pythia_Table.h"
00013 #include "tables/St_g2t_vertex_Table.h"
00014
00015 #include "g2t/St_g2t_get_event_Module.h"
00016 #include "g2t/St_g2t_get_pythia_Module.h"
00017 #include "g2t/St_g2t_particle_Module.h"
00018
00019 #include "StSpinPool/StJetSkimEvent/StPythiaEvent.h"
00020
00021
00022 #include "St_pythia_Maker.h"
00023
00024 ClassImp(St_pythia_Maker)
00025
00026 int St_pythia_Maker::Init()
00027 {
00028 assert(!mFileName.IsNull());
00029 mChain = new TChain("PythiaTree");
00030 mChain->Add(mFileName);
00031 assert(mChain);
00032 mEvent = 0;
00033 mChain->SetBranchAddress("PythiaBranch",&mEvent);
00034 AddConst(new TDataSet("geant"));
00035 return StMaker::Init();
00036 }
00037
00038 int St_pythia_Maker::Make()
00039 {
00040 if (!mChain->GetEntry(GetNumber()-1)) return kStEOF;
00041 assert(mEvent);
00042
00043 StEvtHddr* header = GetEvtHddr();
00044 header->SetRunNumber(mEvent->runId());
00045 header->SetEventNumber(mEvent->eventId());
00046
00047 TDataSet* geant = GetDataSet("geant");
00048 assert(geant);
00049 geant->Delete();
00050
00051 St_g2t_event* g2t_event = new St_g2t_event("g2t_event",1);
00052 geant->Add(g2t_event);
00053 g2t_event_st* eventTable = g2t_event->GetTable();
00054 eventTable->n_run = mEvent->runId();
00055 eventTable->n_event = mEvent->eventId();
00056
00057 St_g2t_vertex* g2t_vertex = new St_g2t_vertex("g2t_vertex",1);
00058 geant->Add(g2t_vertex);
00059 g2t_vertex_st* vertexTable = g2t_vertex->GetTable();
00060 mEvent->vertex().GetXYZ(vertexTable->ge_x);
00061
00062 St_particle* particle = new St_particle("particle",mEvent->numberOfParticles());
00063 geant->Add(particle);
00064
00065 St_g2t_pythia* g2t_pythia = new St_g2t_pythia("g2t_pythia",1);
00066 geant->Add(g2t_pythia);
00067 g2t_pythia_st* pythiaTable = g2t_pythia->GetTable();
00068 pythiaTable->subprocess_id = mEvent->processId();
00069 pythiaTable->mand_s = mEvent->s();
00070 pythiaTable->mand_t = mEvent->t();
00071 pythiaTable->mand_u = mEvent->u();
00072 pythiaTable->hard_p = mEvent->pt();
00073 pythiaTable->cos_th = mEvent->cosTheta();
00074 pythiaTable->bjor_1 = mEvent->x1();
00075 pythiaTable->bjor_2 = mEvent->x2();
00076 pythiaTable->mstu72 = mEvent->mstu72();
00077 pythiaTable->mstu73 = mEvent->mstu73();
00078 pythiaTable->mstp111 = mEvent->mstp111();
00079
00080
00081 for (int i = 0; i < mEvent->numberOfParticles(); ++i) {
00082 particle_st part;
00083
00084 part.isthep = mEvent->particle(i)->GetStatusCode();
00085 part.idhep = mEvent->particle(i)->GetPdgCode();
00086 part.jmohep[0] = mEvent->particle(i)->GetFirstMother();
00087 part.jmohep[1] = mEvent->particle(i)->GetSecondMother();
00088 part.jdahep[0] = mEvent->particle(i)->GetFirstDaughter();
00089 part.jdahep[1] = mEvent->particle(i)->GetLastDaughter();
00090
00091 TLorentzVector v;
00092 mEvent->particle(i)->ProductionVertex(v);
00093 v.GetXYZT(part.vhep);
00094
00095 TLorentzVector p;
00096 mEvent->particle(i)->Momentum(p);
00097 p.GetXYZT(part.phep);
00098
00099 particle->AddAt(&part,i);
00100 }
00101
00102 return kStOk;
00103 }