PandaTree
PFCand.h
1 #ifndef PandaTree_Objects_PFCand_h
2 #define PandaTree_Objects_PFCand_h
3 #include "Constants.h"
4 #include "PFCandBase.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 UnpackedPFCand;
14 
15  class PFCand : public PFCandBase, public PackedMomentumMixin {
16  public:
19  ~datastore() { deallocate(); }
20 
21  /* PFCandBase
22  UChar_t* ptype{0};
23  ContainerBase const* vertexContainer_{0};
24  Short_t* vertex_{0}; ///< transient
25  ContainerBase const* trackContainer_{0};
26  Short_t* track_{0}; ///< transient
27  Float_t* hCalFrac{0};
28  */
29  /* PackedMomentumMixin
30  UShort_t* packedPt{0};
31  Short_t* packedEta{0};
32  Short_t* packedPhi{0};
33  UShort_t* packedM{0};
34  */
35  Char_t* packedPuppiW{0};
36  Char_t* packedPuppiWNoLepDiff{0};
37 
38  void allocate(UInt_t n) override;
39  void deallocate() override;
40  void setStatus(TTree&, TString const&, utils::BranchList const&) override;
41  utils::BranchList getStatus(TTree&, TString const&) const override;
42  utils::BranchList getBranchNames(TString const& = "") const override;
43  void setAddress(TTree&, TString const&, utils::BranchList const& = {"*"}, Bool_t setStatus = kTRUE) override;
44  void book(TTree&, TString const&, utils::BranchList const& = {"*"}, Bool_t dynamic = kTRUE) override;
45  void releaseTree(TTree&, TString const&) override;
46  void resizeVectors_(UInt_t) override;
47  };
48 
49  typedef Array<PFCand> array_type;
51 
52  typedef PFCandBase base_type;
53 
54  PFCand(char const* name = "");
55  PFCand(PFCand const&);
56  PFCand(datastore&, UInt_t idx);
57  ~PFCand();
58  PFCand& operator=(PFCand const&);
59 
60  static char const* typeName() { return "PFCand"; }
61 
62  void print(std::ostream& = std::cout, UInt_t level = 1) const override;
63  void dump(std::ostream& = std::cout) const override;
64 
65  double pt() const override { unpack_(); return pt_; }
66  double eta() const override { unpack_(); return eta_; }
67  double phi() const override { unpack_(); return phi_; }
68  double m() const override { unpack_(); return mass_; }
69  void setPtEtaPhiM(double pt, double eta, double phi, double m) override { setPtEtaPhiMPacked_(pt, eta, phi, m); }
70  void setXYZE(double px, double py, double pz, double e) override { setXYZEPacked_(px, py, pz, e); }
71  double puppiW() const override { unpackWeights_(); return puppiW_; }
72  double puppiWNoLep() const override { unpackWeights_(); return puppiWNoLep_; }
73  void setPuppiW(double w, double wnl) override { puppiW_ = w; puppiWNoLep_ = wnl; packWeights_(); }
74 
75  /* PFCandBase
76  UChar_t& ptype;
77  Ref<RecoVertex> vertex;
78  Ref<PackedTrack> track;
79  Float_t& hCalFrac;
80  */
81  /* PackedMomentumMixin
82  UShort_t& packedPt;
83  Short_t& packedEta;
84  Short_t& packedPhi;
85  UShort_t& packedM;
86  */
87  Char_t& packedPuppiW;
88  Char_t& packedPuppiWNoLepDiff;
89 
90  /* BEGIN CUSTOM PFCand.h.classdef */
91  protected:
92  void packWeights_();
93  void unpackWeights_() const;
94 
95  mutable double puppiW_{0.};
96  mutable double puppiWNoLep_{0.};
97 
98  public:
99  PFCand& operator=(UnpackedPFCand const&);
100  /* END CUSTOM */
101 
102  static utils::BranchList getListOfBranches();
103 
104  void destructor(Bool_t recursive = kFALSE);
105 
106  protected:
107  PFCand(ArrayBase*);
108 
109  void doBook_(TTree&, TString const&, utils::BranchList const& = {"*"}) override;
110  void doInit_() override;
111  };
112 
113  typedef Array<PFCand> PFCandArray;
115  typedef Ref<PFCand> PFCandRef;
117 
118  /* BEGIN CUSTOM PFCand.h.global */
119  /* END CUSTOM */
120 
121 }
122 
123 #endif
Base class for fixed-size containers.
Definition: ArrayBase.h:13
A reference to an element in a container.
Definition: Ref.h:20
Base class for dynamic-size containers.
Definition: CollectionBase.h:16
Definition: UnpackedPFCand.h:15
Template class for fixed-size container implementations. Inherits from base_type::array_type of the e...
Definition: Array.h:20
void print(std::ostream &=std::cout, UInt_t level=1) const override
Print the object content.
Definition: PFCand.cc:225
Definition: PackedMomentumMixin.h:7
List of branch names.
Definition: IOUtils.h:64
Definition: PFCand.h:15
Definition: PFCand.h:17
void dump(std::ostream &=std::cout) const override
Dump the object content.
Definition: PFCand.cc:233
Definition: PFCandBase.h:38
Definition: PackedMomentumMixin.h:9
void resizeVectors_(UInt_t) override
Override when there are vector members.
Definition: PFCand.cc:116
Base class for elements of containers.
Definition: Element.h:32
Definition: Array.h:11
A vector of references to elements in a container.
Definition: RefVector.h:18
Definition: PFCandBase.h:14