Fixed bug in the computation of dip angle value
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnPairFunctions.cxx
1 //
2 // *** Class AliRsnPairFunctions ***
3 //
4 // "Core" method for defining the work on a pari of particles.
5 // For one analysis, one must setup one of this for each pair he wants to analyze,
6 // adding to it all analysis which he desires to do.
7 // Here he defines the cuts, and the particle types and charges, and can add
8 // functions which do different operations on the same pair, and some binning
9 // with respect to some kinematic variables (eta, momentum)
10 //
11 // authors: A. Pulvirenti (email: alberto.pulvirenti@ct.infn.it)
12 //          M. Vala (email: martin.vala@cern.ch)
13 //
14
15 #include <TList.h>
16
17 #include "AliLog.h"
18
19 #include "AliRsnMother.h"
20 #include "AliRsnEvent.h"
21 #include "AliRsnFunction.h"
22 #include "AliRsnCutSet.h"
23 #include "AliRsnValue.h"
24
25 #include "AliRsnPairFunctions.h"
26
27 ClassImp(AliRsnPairFunctions)
28
29 //_____________________________________________________________________________
30 AliRsnPairFunctions::AliRsnPairFunctions(const char *name, AliRsnPairDef *def) :
31   AliRsnPair(name, def),
32   fFunctions("AliRsnFunction", 0)
33 {
34 //
35 // Default constructor
36 //
37
38   AliDebug(AliLog::kDebug+2,"<-");
39   AliDebug(AliLog::kDebug+2,"->");
40 }
41
42 //_____________________________________________________________________________
43 AliRsnPairFunctions::AliRsnPairFunctions(const AliRsnPairFunctions& copy) :
44   AliRsnPair(copy),
45   fFunctions(copy.fFunctions)
46 {
47 //
48 // Default constructor
49 //
50
51   AliDebug(AliLog::kDebug+2,"<-");
52   AliDebug(AliLog::kDebug+2,"->");
53 }
54
55 //_____________________________________________________________________________
56 AliRsnPairFunctions& AliRsnPairFunctions::operator=(const AliRsnPairFunctions& copy)
57 {
58   AliRsnPair::operator=(copy);
59
60   Int_t i, n = copy.fFunctions.GetEntries();
61   for (i = 0; i < n; i++)
62   {
63     AliRsnFunction *fcn = (AliRsnFunction*)copy.fFunctions[i];
64     if (fcn) AddFunction(fcn);
65   }
66
67   return (*this);
68 }
69
70 //_____________________________________________________________________________
71 AliRsnPairFunctions::~AliRsnPairFunctions()
72 {
73 //
74 // Destructor
75 //
76
77   AliDebug(AliLog::kDebug+2,"<-");
78   AliDebug(AliLog::kDebug+2,"->");
79 }
80
81 //_____________________________________________________________________________
82 void AliRsnPairFunctions::Compute()
83 {
84 //
85 // Makes computations using the two passed daughter objects.
86 // Checks all cuts and then computes the corresponding pair object
87 // and then fill the list of required values using it.
88 //
89   
90   AliDebug(AliLog::kDebug+2,"<-");
91   
92   TObjArrayIter   nextFcn(&fFunctions);
93   AliRsnFunction *fcn = 0x0;
94   
95   while ((fcn = (AliRsnFunction*)nextFcn())) 
96   {
97     fcn->SetPairDef(fPairDef);
98     fcn->SetPair(&fMother);
99     fcn->SetEvent(fEvent);
100     fcn->Fill();
101   }
102
103   AliDebug(AliLog::kDebug+2,"->");
104 }
105
106 //_____________________________________________________________________________
107 void AliRsnPairFunctions::Init(const char *prefix, TList *list)
108 {
109 //
110 // Generates needed histograms, giving them a name based on
111 // the flags defined here, on the pair definition, and attaches
112 // a prefix to it, according to the argument.
113 //
114 // All generated histograms are stored into the output TList.
115 //
116
117   AliDebug(AliLog::kDebug+2,"<-");
118
119   Int_t  i;
120   TString hName("");
121   AliRsnFunction *fcn = 0;
122   for (i = 0; i < fFunctions.GetEntries(); i++)
123   {
124     fcn = (AliRsnFunction*)fFunctions.At(i);
125     hName += prefix;
126     hName += '_';
127     hName += GetName();
128     hName += '_';
129     hName += fcn->GetName();
130     if (fcn->IsUsingTH1()) list->Add(fcn->CreateHistogram(hName.Data(), ""));
131     else list->Add(fcn->CreateHistogramSparse(hName.Data(), ""));
132   }
133
134   AliDebug(AliLog::kDebug+2,"->");
135 }
136
137 //_____________________________________________________________________________
138 void AliRsnPairFunctions::AddFunction(AliRsnFunction *const fcn)
139 {
140 //
141 // Adds a new computing function
142 //
143
144   AliDebug(AliLog::kDebug+2,"<-");
145   
146   fFunctions.Print();
147   Int_t size = fFunctions.GetEntries();
148   new(fFunctions[size]) AliRsnFunction(*fcn);
149   
150   AliDebug(AliLog::kDebug+2,"->");
151 }