00001
00002
00003 #include <TDataSet.h>
00004 #include <TDataSetIter.h>
00005 #include <TLorentzVector.h>
00006
00007 #include <StMaker.h>
00008 #include <tables/St_g2t_event_Table.h>
00009 #include <tables/St_g2t_vertex_Table.h>
00010 #include <tables/St_g2t_pythia_Table.h>
00011 #include <tables/St_particle_Table.h>
00012
00013 #include <StjMCParticleCutParton.h>
00014 #include <StjMCMuDst.h>
00015
00016 StjPrimaryVertex StjMCMuDst::getMCVertex() const
00017 {
00018 StjPrimaryVertex vertex;
00019 if (TDataSet* Event = _maker->GetDataSet("geant")) {
00020 TDataSetIter geantDstI(Event);
00021 if (const St_g2t_vertex* g2t_vertex_descriptor = (const St_g2t_vertex*)geantDstI("g2t_vertex"))
00022 if (const g2t_vertex_st* g2t_vertex_table = g2t_vertex_descriptor->GetTable())
00023 {
00024 const float* geantvertex = g2t_vertex_table[0].ge_x;
00025 vertex.mPosition.SetXYZ(geantvertex[0],geantvertex[1],geantvertex[2]);
00026 }
00027 }
00028 return vertex;
00029 }
00030
00031 StjMCParticleList StjMCMuDst::getMCParticleList()
00032 {
00033 StjMCParticleList theList;
00034
00035 if (TDataSet* Event = _maker->GetDataSet("geant")) {
00036 TDataSetIter geantDstI(Event);
00037
00038
00039 int runNumber = -1;
00040 int eventNumber = -1;
00041
00042 if (const St_g2t_event* g2t_event_descriptor = (const St_g2t_event*)geantDstI("g2t_event")) {
00043 if (const g2t_event_st* g2t_event_table = g2t_event_descriptor->GetTable()) {
00044 runNumber = g2t_event_table->n_run;
00045 eventNumber = g2t_event_table->n_event;
00046 }
00047 }
00048
00049
00050 if (St_g2t_pythia* g2t_pythia = (St_g2t_pythia*)geantDstI("g2t_pythia")) {
00051 if (g2t_pythia_st* pythiaTable = g2t_pythia->GetTable()) {
00052 StjMCParticleCutParton::mstu72 = pythiaTable->mstu72;
00053 StjMCParticleCutParton::mstu73 = pythiaTable->mstu73;
00054 }
00055 }
00056
00057
00058 if (const St_particle* particle_descriptor = (const St_particle*)geantDstI("particle")) {
00059 if (const particle_st* particle_table = particle_descriptor->GetTable()) {
00060 for (int i = 0; i < particle_descriptor->GetNRows(); ++i) {
00061 StjMCParticle particle;
00062 particle.runNumber = runNumber;
00063 particle.eventId = eventNumber;
00064 particle.status = particle_table[i].isthep;
00065 particle.mcparticleId = i+1;
00066 particle.pdg = particle_table[i].idhep;
00067 particle.firstMotherId = particle_table[i].jmohep[0];
00068 particle.lastMotherId = particle_table[i].jmohep[1];
00069 particle.firstDaughterId = particle_table[i].jdahep[0];
00070 particle.lastDaughterId = particle_table[i].jdahep[1];
00071 particle.vertexZ = particle_table[i].vhep[2];
00072
00073 TLorentzVector p4(particle_table[i].phep);
00074 particle.pt = p4.Pt();
00075 particle.eta = p4.Eta();
00076 particle.phi = p4.Phi();
00077 particle.m = p4.M();
00078 particle.e = p4.E();
00079
00080 theList.push_back(particle);
00081 }
00082 }
00083 }
00084 }
00085
00086 return theList;
00087 }