00001
00015 #ifndef MCPART_HH
00016 #define MCPART_HH
00017
00018 #include "mctrajectory.hh"
00019
00020 namespace larlight {
00025 class mcpart : public data_base {
00026
00027 public:
00028
00030 mcpart(DATA::DATA_TYPE type=DATA::MCParticle);
00031
00033 mcpart(const Int_t trackId,
00034 const Int_t pdgid,
00035 const std::string process,
00036 const Int_t mother = DATA::INVALID_INT,
00037 const Double_t mass = DATA::INVALID_DOUBLE,
00038 const Int_t status = DATA::INVALID_INT );
00039
00041 mcpart(const mcpart& origin) : data_base(origin),
00042 fstatus(origin.fstatus),
00043 ftrackId(origin.ftrackId),
00044 fpdgCode(origin.fpdgCode),
00045 fmother(origin.fmother),
00046 fprocess(origin.fprocess),
00047 ftrajectory(origin.ftrajectory),
00048 fmass(origin.fmass),
00049 fpolarization(origin.fpolarization),
00050 fdaughters(origin.fdaughters),
00051 fWeight(origin.fWeight),
00052 fGvtx(origin.fGvtx),
00053 frescatter(origin.frescatter),
00054 ftrackFiducial(origin.ftrackFiducial)
00055 {}
00056
00058 virtual ~mcpart(){}
00059
00061 virtual void clear_data();
00062
00064
00065 inline void AddDaughter (const int trackID) { fdaughters.insert(trackID); }
00066 inline void SetPolarization (TVector3 const& p) { fpolarization = p; }
00067 inline void SetRescatter (Int_t code) { frescatter = code; }
00068 inline void SetWeight (Double_t wt) { fWeight = wt; }
00069 inline void SetTrajectory (const mctrajectory steps) { ftrajectory = steps; }
00070 inline void AddTrajectory (const mcstep step) { ftrajectory.push_back(step); }
00071 inline void AddTrajectory (const TLorentzVector& position,
00072 const TLorentzVector& momentum)
00073 { ftrajectory.push_back(position,momentum); }
00074
00075 inline void AddFiducialTrack(size_t start, size_t end)
00076 { ftrackFiducial.push_back(std::pair<size_t,size_t>(start,end)); }
00077
00078 inline void AddFiducialTrack(const std::pair<size_t,size_t>& step)
00079 { ftrackFiducial.push_back(step); }
00080
00082
00083 Int_t StatusCode() const { return fstatus; }
00084 Int_t TrackId() const { return ftrackId; }
00085 Int_t PdgCode() const { return fpdgCode; }
00086 Int_t Mother() const { return fmother; }
00087 const std::string Process() const { return fprocess; }
00088 const mctrajectory& Trajectory() const { return ftrajectory; }
00089 Double_t Mass() const { return fmass; }
00090 const TVector3& Polarization() const { return fpolarization; }
00091 const std::set<Int_t>& Daughters() const { return fdaughters; }
00092 Double_t Weight() const { return fWeight; }
00093 TLorentzVector GetGvtx() const { return fGvtx; }
00094 Int_t Rescatter() const { return frescatter; }
00095
00096 const std::vector<std::pair<size_t,size_t> >& FiducialTrack() const
00097 {return ftrackFiducial;}
00098
00099 private:
00100
00101 Int_t fstatus;
00102 Int_t ftrackId;
00103 Int_t fpdgCode;
00104 Int_t fmother;
00105 std::string fprocess;
00106 mctrajectory ftrajectory;
00107 Double_t fmass;
00108 TVector3 fpolarization;
00109 std::set<Int_t> fdaughters;
00110 Double_t fWeight;
00111 TLorentzVector fGvtx;
00112 Int_t frescatter;
00113
00114 std::vector<std::pair<size_t,size_t> > ftrackFiducial;
00115
00117 ClassDef(mcpart,1)
00119
00120 };
00121
00126 class event_mcpart : public std::vector<larlight::mcpart>,
00127 public event_base {
00128
00129 public:
00130
00132 event_mcpart(DATA::DATA_TYPE type=DATA::MCParticle);
00133
00135 event_mcpart(const event_mcpart& original) : std::vector<larlight::mcpart>(original),
00136 event_base(original)
00137 {};
00138
00140 virtual ~event_mcpart(){};
00141
00143 virtual void clear_data() {event_base::clear_data(); clear();}
00144
00145
00146 private:
00147
00149 ClassDef(event_mcpart,1)
00151
00152 };
00153 }
00154 #endif
00155