File indexing completed on 2024-06-26 07:05:37
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "eicsmear/smear/EventDisFactory.h"
0011
0012 #include <vector>
0013
0014 #include <TBranch.h>
0015
0016 #include "eicsmear/erhic/EventDis.h"
0017 #include "eicsmear/erhic/ParticleIdentifier.h"
0018 #include "eicsmear/erhic/VirtualParticle.h"
0019 #include "eicsmear/smear/ParticleMCS.h"
0020
0021 namespace {
0022
0023 Smear::ParticleMCS* mcToSmear(const erhic::VirtualParticle& mc) {
0024 Smear::ParticleMCS* p = new Smear::ParticleMCS(mc.Get4Vector(),
0025 mc.Id(), mc.GetStatus());
0026 p->SetStatus(mc.GetStatus());
0027 return p;
0028 }
0029
0030 }
0031
0032 namespace Smear {
0033
0034 EventDisFactory::~EventDisFactory() {
0035 }
0036
0037 EventDisFactory::EventDisFactory(const Detector& d, TBranch& mcBranch)
0038 : mDetector(d)
0039 , mMcEvent(NULL) {
0040 mcBranch.SetAddress(&mMcEvent);
0041 }
0042
0043 Event* EventDisFactory::Create() {
0044 Event* event = new Event;
0045 for (unsigned j(0); j < mMcEvent->GetNTracks(); j++) {
0046 const erhic::VirtualParticle* ptr = mMcEvent->GetTrack(j);
0047 if (!ptr) {
0048 continue;
0049 }
0050
0051
0052
0053 if (mMcEvent->ScatteredLepton() == ptr) {
0054 ParticleMCS* p = mDetector.Smear(*ptr);
0055 if (p) {
0056 p->SetStatus(ptr->GetStatus());
0057 event->SetScattered(j);
0058 }
0059 event->AddLast(p);
0060
0061 } else if (mMcEvent->BeamLepton() == ptr ||
0062 mMcEvent->BeamHadron() == ptr) {
0063
0064
0065 event->AddLast(mcToSmear(*ptr));
0066 } else {
0067 ParticleMCS* p = mDetector.Smear(*ptr);
0068 if (p) {
0069 p->SetStatus(ptr->GetStatus());
0070 }
0071 event->AddLast(p);
0072 }
0073 }
0074
0075 mDetector.FillEventKinematics(event);
0076 return event;
0077 }
0078
0079 }