PandaTree
PackedParticle.h
1 #ifndef PandaTree_Objects_PackedParticle_h
2 #define PandaTree_Objects_PackedParticle_h
3 #include "Constants.h"
4 #include "Particle.h"
5 #include "PackedMomentumMixin.h"
6 #include "../../Framework/interface/Array.h"
7 #include "../../Framework/interface/Collection.h"
8 #include "../../Framework/interface/Ref.h"
9 #include "../../Framework/interface/RefVector.h"
10 
11 namespace panda {
12 
13  class PackedParticle : public Particle, public PackedMomentumMixin {
14  public:
17  ~datastore() { deallocate(); }
18 
19  /* PackedMomentumMixin
20  UShort_t* packedPt{0};
21  Short_t* packedEta{0};
22  Short_t* packedPhi{0};
23  UShort_t* packedM{0};
24  */
25 
26  void allocate(UInt_t n) override;
27  void deallocate() override;
28  void setStatus(TTree&, TString const&, utils::BranchList const&) override;
29  utils::BranchList getStatus(TTree&, TString const&) const override;
30  utils::BranchList getBranchNames(TString const& = "") const override;
31  void setAddress(TTree&, TString const&, utils::BranchList const& = {"*"}, Bool_t setStatus = kTRUE) override;
32  void book(TTree&, TString const&, utils::BranchList const& = {"*"}, Bool_t dynamic = kTRUE) override;
33  void releaseTree(TTree&, TString const&) override;
34  void resizeVectors_(UInt_t) override;
35  };
36 
39 
40  typedef Particle base_type;
41 
42  PackedParticle(char const* name = "");
44  PackedParticle(datastore&, UInt_t idx);
45  ~PackedParticle();
46  PackedParticle& operator=(PackedParticle const&);
47 
48  static char const* typeName() { return "PackedParticle"; }
49 
50  void print(std::ostream& = std::cout, UInt_t level = 1) const override;
51  void dump(std::ostream& = std::cout) const override;
52 
53  double pt() const override { unpack_(); return pt_; }
54  double eta() const override { unpack_(); return eta_; }
55  double phi() const override { unpack_(); return phi_; }
56  double m() const override { unpack_(); return mass_; }
57  void setPtEtaPhiM(double pt, double eta, double phi, double m) override { setPtEtaPhiMPacked_(pt, eta, phi, m); }
58  void setXYZE(double px, double py, double pz, double e) override { setXYZEPacked_(px, py, pz, e); }
59 
60  /* PackedMomentumMixin
61  UShort_t& packedPt;
62  Short_t& packedEta;
63  Short_t& packedPhi;
64  UShort_t& packedM;
65  */
66 
67  /* BEGIN CUSTOM PackedParticle.h.classdef */
68  /* END CUSTOM */
69 
70  static utils::BranchList getListOfBranches();
71 
72  void destructor(Bool_t recursive = kFALSE);
73 
74  protected:
76 
77  void doBook_(TTree&, TString const&, utils::BranchList const& = {"*"}) override;
78  void doInit_() override;
79  };
80 
85 
86  /* BEGIN CUSTOM PackedParticle.h.global */
87  /* END CUSTOM */
88 
89 }
90 
91 #endif
Base class for fixed-size containers.
Definition: ArrayBase.h:13
A reference to an element in a container.
Definition: Ref.h:20
Definition: PackedParticle.h:13
Definition: Particle.h:12
Base class for dynamic-size containers.
Definition: CollectionBase.h:16
Template class for fixed-size container implementations. Inherits from base_type::array_type of the e...
Definition: Array.h:20
Definition: PackedMomentumMixin.h:7
List of branch names.
Definition: IOUtils.h:64
void resizeVectors_(UInt_t) override
Override when there are vector members.
Definition: PackedParticle.cc:99
Definition: Particle.h:14
Template class for dynamic-size container implementations. Inherits from base_type::collection_type o...
Definition: Collection.h:19
Definition: PackedMomentumMixin.h:9
Definition: PackedParticle.h:15
void dump(std::ostream &=std::cout) const override
Dump the object content.
Definition: PackedParticle.cc:212
Definition: Array.h:11
A vector of references to elements in a container.
Definition: RefVector.h:18
void print(std::ostream &=std::cout, UInt_t level=1) const override
Print the object content.
Definition: PackedParticle.cc:204