ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitAna/DataTree/interface/CaloTower.h
Revision: 1.15
Committed: Thu Jun 18 22:56:30 2009 UTC (15 years, 10 months ago) by bendavid
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_025a, Mit_025, Mit_025pre2, Mit_024b, Mit_025pre1, Mit_024a, Mit_024, Mit_023, Mit_022a, Mit_022, Mit_020d, TMit_020d, Mit_020c, Mit_021, Mit_021pre2, Mit_021pre1, Mit_020b, Mit_020a, Mit_020, Mit_020pre1, Mit_018, Mit_017, Mit_017pre3, Mit_017pre2, Mit_017pre1, Mit_016, Mit_015b, Mit_015a, Mit_015, Mit_014e, Mit_014d, Mit_014c, Mit_014b, Mit_014a, Mit_014, Mit_014pre3, Mit_014pre2, Mit_014pre1, Mit_013d, Mit_013c, Mit_013b, Mit_013a, Mit_013, Mit_013pre1, Mit_012i, Mit_012h, Mit_012g, Mit_012f, Mit_012e, Mit_012d, Mit_012c, Mit_012b, Mit_012a, Mit_012, Mit_011a, Mit_011, Mit_010a, Mit_010
Changes since 1.14: +11 -6 lines
Log Message:
Allow CaloTowers to have non-zero mass, change is fully backwards compatible with 009

File Contents

# Content
1 //--------------------------------------------------------------------------------------------------
2 // $Id: CaloTower.h,v 1.14 2009/05/18 07:00:53 loizides Exp $
3 //
4 // CaloTower
5 //
6 // This class holds calo tower information. Note that the energy of the tower does not
7 // necessarily have to be greater 0. As such E() and Et() can return negative
8 // values. In those cases the FourVectorM will be 0, and also Pt() will return 0.
9 //
10 // Authors: S.Xie
11 //--------------------------------------------------------------------------------------------------
12
13 #ifndef MITANA_DATATREE_CALOTOWER_H
14 #define MITANA_DATATREE_CALOTOWER_H
15
16 #include <TMath.h>
17 #include "MitCommon/DataFormats/interface/Vect3C.h"
18 #include "MitAna/DataCont/interface/CacheFlag.h"
19 #include "MitAna/DataTree/interface/DataObject.h"
20
21 namespace mithep
22 {
23 class CaloTower : public DataObject
24 {
25 public:
26 CaloTower() : fEmEnergy(0), fHadEnergy(0), fOuterEnergy(0), fMass(0) {}
27
28 Double_t E() const { return (fEmEnergy + fHadEnergy); }
29 Double_t EmEt() const { return fEmEnergy*TMath::Sin(Theta()); }
30 Double_t Eta() const { return fPosition.Eta(); }
31 Double_t Et() const { return E()*TMath::Sin(Theta()); }
32 Double_t EtWithHO() const { return EWithHO()*TMath::Sin(Theta()); }
33 Double_t EWithHO() const { return (fEmEnergy + fHadEnergy + fOuterEnergy); }
34 Double_t EmEnergy() const { return fEmEnergy; }
35 Double_t HadEnergy() const { return fHadEnergy; }
36 Double_t HadEt() const { return fHadEnergy*TMath::Sin(Theta()); }
37 Double_t Mass() const { return fMass; }
38 const FourVectorM &Mom() const;
39 Double_t Phi() const { return fPosition.Phi(); }
40 Double_t Pt() const { Double_t r=Et(); if(r<0) r=0; return r; }
41 EObjType ObjType() const { return kCaloTower; }
42 Double_t OuterEnergy() const { return fOuterEnergy; }
43 Double_t OuterEt() const { return fOuterEnergy*TMath::Sin(Theta()); }
44 const ThreeVectorC &Position() const;
45 Double_t Theta() const { return Position().Theta(); }
46 void SetEmEnergy(Double_t EmEnergy)
47 { fEmEnergy = EmEnergy; ClearMom(); }
48 void SetHadEnergy(Double_t HadEnergy)
49 { fHadEnergy = HadEnergy; ClearMom(); }
50 void SetOuterEnergy(Double_t OuterEnergy)
51 { fOuterEnergy = OuterEnergy; ClearMom(); }
52 void SetMass(Double_t mass) { fMass = mass; }
53 void SetPosition(Double_t x, Double_t y, Double_t z)
54 { fPosition.SetXYZ(x,y,z); ClearMom(); ClearPos(); }
55
56 protected:
57 void ClearMom() const { fCacheMomFlag.ClearCache(); }
58 void ClearPos() const { fCachePosFlag.ClearCache(); }
59 void GetMom() const;
60 void GetPos() const;
61
62 Vect3C fPosition; //position of tower
63 Double32_t fEmEnergy; //[0,0,14]tower energy in Ecal
64 Double32_t fHadEnergy; //[0,0,14]tower energy in Hcal
65 Double32_t fOuterEnergy; //[0,0,14]tower energy in outer Hcal
66 Double32_t fMass; //[0,0,14]tower mass
67 mutable CacheFlag fCacheMomFlag; //||cache validity flag for momentum
68 mutable FourVectorM fCachedMom; //!cached momentum vector
69 mutable CacheFlag fCachePosFlag; //||cache validity flag for position
70 mutable ThreeVectorC fCachedPos; //!cached position vector
71
72 ClassDef(CaloTower, 2) // Calo tower class
73 };
74 }
75
76 //--------------------------------------------------------------------------------------------------
77 inline void mithep::CaloTower::GetMom() const
78 {
79 // Compute four momentum.
80 Double_t energy = E();
81 if (energy > 0) {
82 Double_t pt = TMath::Sin(Theta())*TMath::Sqrt(energy*energy + fMass*fMass);
83 fCachedMom.SetCoordinates(pt,Eta(),Phi(),Mass());
84 }
85 else
86 fCachedMom = mithep::FourVectorM();
87 }
88
89 //--------------------------------------------------------------------------------------------------
90 inline void mithep::CaloTower::GetPos() const
91 {
92 // Compute position.
93
94 fCachedPos.SetCoordinates(fPosition.Rho(), fPosition.Eta(), fPosition.Phi());
95 }
96
97 //--------------------------------------------------------------------------------------------------
98 inline const mithep::FourVectorM &mithep::CaloTower::Mom() const
99 {
100 // Return cached momentum value.
101
102 if (!fCacheMomFlag.IsValid()) {
103 GetMom();
104 fCacheMomFlag.SetValid();
105 }
106 return fCachedMom;
107 }
108
109 //--------------------------------------------------------------------------------------------------
110 inline const mithep::ThreeVectorC &mithep::CaloTower::Position() const
111 {
112 // Return cached momentum value.
113
114 if (!fCachePosFlag.IsValid()) {
115 GetPos();
116 fCachePosFlag.SetValid();
117 }
118 return fCachedPos;
119 }
120 #endif