/* * FairMCStage.h * * Created on: Dec 1, 2009 * Author: stockman */ #ifndef FAIRMCOBJECT_H_ #define FAIRMCOBJECT_H_ #include "FairMCEntry.h" #include "TObject.h" #include #include #include class FairMCObject: public TObject { public: FairMCObject(); FairMCObject(Int_t type) : TObject(), fStage(), fStageId(type) { } FairMCObject(const FairMCObject& obj) : TObject(obj), fStageId(obj.GetStageId()), fStage(obj.GetEntryVector()) { } FairMCObject(Int_t type, std::vector stage) : TObject(), fStage(stage), fStageId(type) { } virtual ~FairMCObject(); void SetStageId(Int_t type) {fStageId = type;} void SetEntry(std::vector type, std::vector link, int index); void SetEntry(FairMultiLinkedData* data, int index); void SetEntry(FairMCEntry link); void SetStage(std::vector stage) {fStage = stage;} void SetLink(FairLink link, int index); void AddLink(FairLink link, int index); FairMCEntry GetEntry(int index) const {return fStage[index];} FairLink GetSingleLink(int entryIndex, int linkIndex) const { return fStage.at(entryIndex).GetLink(linkIndex); } Int_t GetStageId(void) const {return fStageId;} FairMCEntry GetMCLink(Int_t index) {return fStage.at(index);} int GetNEntries() const {return fStage.size();} int GetNLinks(int entryIndex)const {return fStage.at(entryIndex).GetNLinks();} std::vector GetEntryVector() const {return fStage;} FairMultiLinkedData PosInList(std::pair link); FairMultiLinkedData PosInList(FairLink link); FairMultiLinkedData GetLinksWithType(Int_t type) { FairMultiLinkedData result; for (int i = 0; i < GetNEntries(); i++) { result.AddLinks(GetMCLink(i).GetLinksWithType(type)); } return result; } void RemoveType(Int_t type); virtual void ClearEntries() {fStage.clear();} virtual void Print(std::ostream& out = std::cout) {out << *this;} void operator=(const FairMCObject& obj) { fStageId = obj.GetStageId(); fStage = obj.GetEntryVector(); } friend std::ostream& operator<< (std::ostream& out, const FairMCObject& obj) { std::vector stages = obj.GetEntryVector(); for (int i = 0; i < stages.size(); i++) { if (stages[i].GetNLinks() > 0) { out << i << ": "; stages[i].Print(out); } } return out; } private: void AdoptSize(int index); std::vector fStage; Int_t fStageId; ClassDef(FairMCObject, 0); }; #endif /* PNDMCOBJECT_H_ */