]>
Commit | Line | Data |
---|---|---|
03d23846 | 1 | #ifndef ALIRSNMINIOUTPUT_H |
2 | #define ALIRSNMINIOUTPUT_H | |
3 | ||
4 | // | |
5 | // Mini-Output | |
6 | // All the definitions needed for building a RSN histogram | |
7 | // including: | |
8 | // -- properties of resonance (mass, PDG code if needed) | |
9 | // -- properties of daughters (assigned mass, charges) | |
10 | // -- definition of output histogram | |
11 | // | |
12 | ||
13 | #include "AliRsnDaughter.h" | |
14 | #include "AliRsnMiniParticle.h" | |
15 | ||
16 | class THnSparse; | |
17 | class TList; | |
18 | class TH1; | |
19 | ||
20 | class TList; | |
21 | class TClonesArray; | |
22 | class AliRsnMiniAxis; | |
23 | class AliRsnMiniPair; | |
24 | class AliRsnMiniEvent; | |
25 | ||
26 | typedef AliRsnDaughter::ESpecies RSNPID; | |
27 | ||
28 | class AliRsnMiniOutput : public TNamed { | |
29 | public: | |
30 | ||
31 | enum EOutputType { | |
32 | kHistogram, | |
33 | kHistogramSparse, | |
34 | kTypes | |
35 | }; | |
36 | ||
37 | enum EComputation { | |
38 | kEventOnly, | |
39 | kTrackPair, | |
40 | kTrackPairMix, | |
6aaeb33c | 41 | kTrackPairRotated1, |
42 | kTrackPairRotated2, | |
03d23846 | 43 | kTruePair, |
44 | kMother, | |
45 | kComputations | |
46 | }; | |
47 | ||
48 | AliRsnMiniOutput(); | |
49 | AliRsnMiniOutput(const char *name, EOutputType type, EComputation src = kTrackPair); | |
50 | AliRsnMiniOutput(const char *name, const char *outType, const char *compType); | |
51 | AliRsnMiniOutput(const AliRsnMiniOutput ©); | |
52 | AliRsnMiniOutput& operator=(const AliRsnMiniOutput ©); | |
53 | ||
54 | Bool_t IsEventOnly() const {return (fComputation == kEventOnly);} | |
55 | Bool_t IsTrackPair() const {return (fComputation == kTrackPair);} | |
56 | Bool_t IsTrackPairMix() const {return (fComputation == kTrackPairMix);} | |
57 | Bool_t IsTruePair() const {return (fComputation == kTruePair);} | |
58 | Bool_t IsMother() const {return (fComputation == kMother);} | |
59 | Bool_t IsDefined() const {return (IsEventOnly() || IsTrackPair() || IsTrackPairMix() || IsTruePair() || IsMother());} | |
d573d2fb | 60 | Bool_t IsLikeSign() const {return (fCharge[0] == fCharge[1]);} |
61 | Bool_t IsSameCut() const {return (fCutID[0] == fCutID[1]);} | |
62 | Bool_t IsSymmetric() const {return (IsLikeSign() && IsSameCut());} | |
03d23846 | 63 | |
64 | EOutputType GetOutputType() const {return fOutputType;} | |
65 | EComputation GetComputation() const {return fComputation;} | |
66 | Int_t GetCutID(Int_t i) const {if (i <= 0) return fCutID [0]; else return fCutID [1];} | |
67 | RSNPID GetDaughter(Int_t i) const {if (i <= 0) return fDaughter[0]; else return fDaughter[1];} | |
68 | Double_t GetMass(Int_t i) const {return AliRsnDaughter::SpeciesMass(GetDaughter(i));} | |
69 | Int_t GetPDG(Int_t i) const {return AliRsnDaughter::SpeciesPDG(GetDaughter(i));} | |
70 | Int_t GetCharge(Int_t i) const {if (i <= 0) return fCharge[0]; else return fCharge[1];} | |
71 | Int_t GetMotherPDG() const {return fMotherPDG;} | |
72 | Double_t GetMotherMass() const {return fMotherMass;} | |
73 | ||
74 | void SetOutputType(EOutputType type) {fOutputType = type;} | |
75 | void SetComputation(EComputation src) {fComputation = src;} | |
76 | void SetCutID(Int_t i, Int_t value) {if (i <= 0) fCutID [0] = value; else fCutID [1] = value;} | |
77 | void SetDaughter(Int_t i, RSNPID value) {if (i <= 0) fDaughter[0] = value; else fDaughter[1] = value;} | |
78 | void SetCharge(Int_t i, Char_t value) {if (i <= 0) fCharge[0] = value; else fCharge[1] = value;} | |
79 | void SetMotherPDG(Int_t pdg) {fMotherPDG = pdg;} | |
80 | void SetMotherMass(Double_t mass) {fMotherMass = mass;} | |
81 | void SetPairCuts(AliRsnCutSet *set) {fPairCuts = set;} | |
82 | ||
83 | void AddAxis(Int_t id, Int_t nbins, Double_t min, Double_t max); | |
84 | void AddAxis(Int_t id, Double_t min, Double_t max, Double_t step); | |
85 | void AddAxis(Int_t id, Int_t nbins, Double_t *values); | |
86 | AliRsnMiniAxis* GetAxis(Int_t i) {if (i >= 0 && i < fAxes.GetEntries()) return (AliRsnMiniAxis*)fAxes[i]; return 0x0;} | |
87 | Double_t* GetAllComputed() {return fComputed.GetArray();} | |
88 | ||
89 | AliRsnMiniPair& Pair() {return fPair;} | |
90 | Bool_t Init(const char *prefix, TList *list); | |
45aa62b9 | 91 | Bool_t FillMother(const AliRsnMiniPair *pair, AliRsnMiniEvent *event, TClonesArray *valueList); |
92 | Bool_t FillEvent(AliRsnMiniEvent *event, TClonesArray *valueList); | |
d573d2fb | 93 | Int_t FillPair(AliRsnMiniEvent *event1, AliRsnMiniEvent *event2, TClonesArray *valueList, Bool_t refFirst = kTRUE); |
03d23846 | 94 | |
95 | private: | |
96 | ||
97 | void CreateHistogram(const char *name); | |
98 | void CreateHistogramSparse(const char *name); | |
45aa62b9 | 99 | void ComputeValues(AliRsnMiniEvent *event, TClonesArray *valueList); |
100 | void FillHistogram(); | |
03d23846 | 101 | |
102 | EOutputType fOutputType; // type of output | |
103 | EComputation fComputation; // type of computation | |
104 | Int_t fCutID[2]; // ID of cut set used to select tracks | |
105 | RSNPID fDaughter[2]; // species of daughters | |
106 | Char_t fCharge[2]; // required track charge | |
107 | Int_t fMotherPDG; // PDG code of resonance | |
108 | Double_t fMotherMass; // nominal resonance mass | |
109 | AliRsnCutSet *fPairCuts; // cuts on the pair | |
110 | ||
111 | Int_t fOutputID; // index of output object in container list | |
112 | TClonesArray fAxes; // definitions for the axes of each value | |
113 | TArrayD fComputed; //! temporary container for all computed values | |
114 | AliRsnMiniPair fPair; //! minipair for computations | |
115 | TList *fList; //! pointer to the TList containing the output | |
116 | ||
117 | ClassDef(AliRsnMiniOutput,1) // AliRsnMiniOutput class | |
118 | }; | |
119 | ||
120 | #endif |