00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "tables/St_g2t_event_Table.h"
00010 #include "tables/St_particle_Table.h"
00011 #include "StMcEvent/StMcEventTypes.hh"
00012 #include "StSpinPool/StMCAsymMaker/StMCAsymMaker.h"
00013 #include "StGammaPythiaEvent.h"
00014 #include "StGammaPythiaEventMaker.h"
00015 #include "TMath.h"
00016
00017 ClassImp(StGammaPythiaEventMaker);
00018
00020
00022 int StGammaPythiaEventMaker::Make()
00023 {
00024
00025
00026 if(!mPythia)
00027 {
00028 LOG_WARN << "No StGammaPythiaEvent" << endm;
00029 return kStWarn;
00030 }
00031
00032
00033 StMcEvent* mcEvent = (StMcEvent*)GetDataSet("StMcEvent");
00034 if(!mcEvent)
00035 {
00036 LOG_WARN << "No StMcEvent" << endm;
00037 return kStWarn;
00038 }
00039
00040
00041 StMCAsymMaker* asym = dynamic_cast<StMCAsymMaker*>(GetMakerInheritsFrom("StMCAsymMaker"));
00042 if(!asym)
00043 {
00044 LOG_WARN << "No StMCAsymMaker" << endm;
00045 return kStWarn;
00046 }
00047
00048 new (mPythia) StGammaPythiaEvent(asym->pythiaEvent());
00049
00051
00053
00054
00055 TDataSet *Event = GetDataSet("geant");
00056 if(!Event)
00057 {
00058 LOG_WARN << "No geant data set!" << endm;
00059 return kStWarn;
00060 }
00061
00062 TDataSetIter geantDstI(Event);
00063 St_particle *particleTabPtr = (St_particle*)geantDstI("particle");
00064 particle_st *pTable = particleTabPtr->GetTable();
00065
00066
00067 for(int i = 0; i < particleTabPtr->GetNRows(); ++i)
00068 {
00069
00070 if(pTable[i].isthep != 1) continue;
00071
00072 if(TMath::Abs(pTable[i].idhep) < 100) continue;
00073
00074 mPythia->hadron().push_back(TLorentzVector(pTable[i].phep[0], pTable[i].phep[1], pTable[i].phep[2], pTable[i].phep[3]));
00075
00076 if(pTable[i].idhep == 111)
00077 {
00078 mPythia->neutralPion().push_back(TLorentzVector(pTable[i].phep[0], pTable[i].phep[1], pTable[i].phep[2], pTable[i].phep[3]));
00079 }
00080
00081 }
00082
00084
00085
00087
00088
00089 St_g2t_event* Pg2t_event = (St_g2t_event*)geantDstI("g2t_event");
00090 g2t_event_st* g2t_event = Pg2t_event->GetTable();
00091 long pid = g2t_event->subprocess_id;
00092
00093 bool photonEvent = (pid==14) || (pid==18) || (pid==29) || (pid==114) || (pid==115);
00094 if(!photonEvent) return kStOk;
00095
00096
00097 StMcVertex *primary=mcEvent->primaryVertex();
00098
00099 for(UInt_t id = 0; id < primary->numberOfDaughters(); ++id)
00100 {
00101
00102 StMcTrack *track = primary->daughter(id);
00103 if ( !track ) continue;
00104 const StLorentzVectorF& trackV=track->fourMomentum();
00105
00106
00107 bool promptFlag = (track->geantId() == 1);
00108
00109
00110 promptFlag &= track->parent()->eventGenLabel() >= 5;
00111
00112
00113
00114 promptFlag &= track->parent()->pdgId() == 22;
00115
00116
00117 if(promptFlag)
00118 {
00119
00120 if(track->stopVertex())
00121 {
00122 mPythia->conversion().push_back(TLorentzVector(trackV.px(),trackV.py(),trackV.pz(),trackV.e()));
00123 }
00124 else
00125 {
00126 mPythia->prompt().push_back(TLorentzVector(trackV.px(),trackV.py(),trackV.pz(),trackV.e()));
00127 }
00128
00129 }
00130
00131 }
00132
00133 return kStOk;
00134
00135 }