1 |
|
//-------------------------------------------------------------------------------------------------- |
2 |
|
// $Id$ |
3 |
|
// |
4 |
< |
// Composite Particle |
4 |
> |
// CompositeParticle |
5 |
|
// |
6 |
< |
// Details to be worked out... |
7 |
< |
// |
8 |
< |
// Authors: J.Bendavid, C.Loizides |
6 |
> |
// A composite particle class that holds other (daughter) particles. |
7 |
|
// |
8 |
+ |
// Authors: J.Bendavid, C.Loizides, C.Paus |
9 |
|
//-------------------------------------------------------------------------------------------------- |
10 |
|
|
11 |
< |
#ifndef DATATREE_COMPOSITEPARTICLE_H |
12 |
< |
#define DATATREE_COMPOSITEPARTICLE_H |
11 |
> |
#ifndef MITANA_DATATREE_COMPOSITEPARTICLE_H |
12 |
> |
#define MITANA_DATATREE_COMPOSITEPARTICLE_H |
13 |
|
|
15 |
– |
#include "MitAna/DataTree/interface/Types.h" |
16 |
– |
#include "MitAna/DataTree/interface/RefArray.h" |
14 |
|
#include "MitAna/DataTree/interface/Particle.h" |
15 |
+ |
#include "MitAna/DataCont/interface/RefArray.h" |
16 |
|
|
17 |
|
namespace mithep |
18 |
|
{ |
20 |
|
{ |
21 |
|
public: |
22 |
|
CompositeParticle() {} |
25 |
– |
~CompositeParticle() {} |
23 |
|
|
24 |
< |
void AddDaughter(Particle *p) { fDaughters.Add(p); } |
25 |
< |
Int_t Charge() const; |
26 |
< |
const Particle *GetDaughter(UInt_t i) const { return fDaughters.At(i); } |
27 |
< |
UInt_t GetNDaughters() const { return fDaughters.GetEntries(); } |
24 |
> |
void AddDaughter (const Particle *p) |
25 |
> |
{ fDaughters.Add(p); ClearMom(); ClearCharge(); } |
26 |
> |
void Clear (Option_t *opt="") |
27 |
> |
{ fDaughters.Clear(opt); ClearMom(); ClearCharge(); } |
28 |
> |
const Particle *Daughter (UInt_t i) const { return fDaughters.At(i); } |
29 |
> |
UInt_t NDaughters () const { return fDaughters.Entries(); } |
30 |
> |
Bool_t HasDaughter (const Particle *p) const; |
31 |
|
Bool_t HasCommonDaughter(const CompositeParticle *p) const; |
32 |
< |
Bool_t HasSameDaughters(const CompositeParticle *p) const; |
33 |
< |
Bool_t IsDaughter(const Particle *p) const; |
34 |
< |
FourVector Mom() const; |
35 |
< |
|
32 |
> |
Bool_t HasSameDaughters (const CompositeParticle *p) const; |
33 |
> |
EObjType ObjType () const |
34 |
> |
{ return kCompositeParticle; } |
35 |
> |
|
36 |
> |
// Some structural tools |
37 |
> |
void Mark(UInt_t i=1) const; |
38 |
> |
|
39 |
|
protected: |
40 |
+ |
Double_t GetCharge() const; |
41 |
+ |
void GetMom() const; |
42 |
+ |
|
43 |
|
RefArray<Particle> fDaughters; //references to daughter particles |
44 |
|
|
45 |
|
ClassDef(CompositeParticle, 1) // Composite particle class |
46 |
|
}; |
47 |
|
} |
48 |
+ |
|
49 |
+ |
//-------------------------------------------------------------------------------------------------- |
50 |
+ |
inline void mithep::CompositeParticle::Mark(UInt_t i) const |
51 |
+ |
{ |
52 |
+ |
// mark myself |
53 |
+ |
mithep::DataObject::Mark(i); |
54 |
+ |
// mark my dependencies if they are there |
55 |
+ |
fDaughters.Mark(i); |
56 |
+ |
} |
57 |
+ |
|
58 |
+ |
//-------------------------------------------------------------------------------------------------- |
59 |
+ |
inline Double_t mithep::CompositeParticle::GetCharge() const |
60 |
+ |
{ |
61 |
+ |
// Return sum of charge of daughter particles. |
62 |
+ |
|
63 |
+ |
Double_t charge = 0; |
64 |
+ |
for (UInt_t i=0; i<NDaughters(); ++i) |
65 |
+ |
charge += Daughter(i)->Charge(); |
66 |
+ |
|
67 |
+ |
return charge; |
68 |
+ |
} |
69 |
+ |
|
70 |
+ |
//-------------------------------------------------------------------------------------------------- |
71 |
+ |
inline void mithep::CompositeParticle::GetMom() const |
72 |
+ |
{ |
73 |
+ |
// Calculate the vector sum of the momenta of the daughters. |
74 |
+ |
|
75 |
+ |
FourVector mom; |
76 |
+ |
for (UInt_t i=0; i<NDaughters(); ++i) |
77 |
+ |
mom += (Daughter(i))->Mom(); |
78 |
+ |
|
79 |
+ |
fCachedMom.SetCoordinates(mom.Pt(),mom.Eta(),mom.Phi(),mom.M()); |
80 |
+ |
} |
81 |
|
#endif |