4c07d3fcc53293180bf26cc3de71696c114c38c3
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnCutSet.cxx
1 #include "AliLog.h"
2
3 #include "AliRsnCut.h"
4 #include "AliRsnExpression.h"
5
6 #include "AliRsnCutSet.h"
7
8 ClassImp ( AliRsnCutSet )
9
10 AliRsnCutSet::AliRsnCutSet()
11     : TNamed(),fNumOfCuts ( 0 ),
12     fCutScheme ( "" ),
13     fCutSchemeIndexed ( "" ),
14     fBoolValues ( 0 ),fIsScheme ( kFALSE )
15 {
16   fBoolValues = new Bool_t[1];
17 //   fExpression = new AliRsnExpression ( fCutSchemeIndexed );
18   fExpression = 0;
19   AliRsnExpression::sCutSet = this;
20 }
21
22 AliRsnCutSet::AliRsnCutSet ( TString name )
23     : TNamed ( name,name ),fNumOfCuts ( 0 ),
24     fCutScheme ( "" ),
25     fCutSchemeIndexed ( "" ),
26     fBoolValues ( 0 ),fIsScheme ( kFALSE )
27 {
28   fBoolValues = new Bool_t[1];
29   fExpression = 0;
30   AliRsnExpression::sCutSet = this;
31 }
32
33 AliRsnCutSet::AliRsnCutSet ( const AliRsnCutSet & copy )
34     :    TNamed ( ( TNamed ) copy ),fCuts ( copy.fCuts ),fNumOfCuts ( copy.fNumOfCuts ),
35     fCutScheme ( copy.fCutScheme ),
36     fCutSchemeIndexed ( copy.fCutSchemeIndexed ),
37     fIsScheme ( copy.fIsScheme ),
38     fExpression ( copy.fExpression )
39 {
40   AliRsnExpression::sCutSet = this;
41 }
42
43 AliRsnCutSet::~AliRsnCutSet()
44 {
45   delete fExpression;
46   delete [] fBoolValues;
47 }
48
49 void AliRsnCutSet::AddCut ( AliRsnCut * cut )
50 {
51   AliDebug ( AliLog::kDebug,"<-" );
52   fCuts.Add ( cut );
53   fNumOfCuts++;
54   if ( fBoolValues )
55     delete fBoolValues;
56   fBoolValues = new Bool_t[fNumOfCuts];
57   for ( Int_t i=0;i<fNumOfCuts ; i++ )
58   {
59     fBoolValues[i] = kTRUE;
60   }
61
62   AliDebug ( AliLog::kDebug,Form ( "%d",fCuts.GetEntriesFast() ) );
63   AliDebug ( AliLog::kDebug,"->" );
64 }
65
66 void AliRsnCutSet::ShowCuts ( )
67 {
68 //   AliRsnCut *cut;
69 //   for ( Int_t i=0; i<fCuts.GetEntriesFast() ;i++ )
70 //   {
71 //     cut = ( AliRsnCut* ) fCuts.At ( i );
72 //     AliInfo ( Form ( "%s (\"%s\") [%.2f - %.2f]",cut->GetName(),cut->GetTitle(),cut->GetMin(),cut->GetMax() ) );
73 //   }
74 }
75
76 Bool_t AliRsnCutSet::IsSelected ( AliRsnCut::ECutSetType type, AliRsnDaughter *daughter )
77 {
78   if ( !fNumOfCuts )
79     return kTRUE;
80
81   Bool_t boolReturn = kTRUE;
82   AliRsnCut *cut;
83   for ( Int_t i=0; i<fNumOfCuts ;i++ )
84   {
85     cut = ( AliRsnCut* ) fCuts.At ( i );
86     fBoolValues[i] = cut->IsSelected ( type,daughter );
87 //     AliInfo(Form("%s %d",cut->GetName(),fBoolValues[i]));
88   }
89
90   if ( fIsScheme )
91     boolReturn = Passed();
92
93   return boolReturn;
94 }
95
96 Bool_t AliRsnCutSet::IsSelected ( AliRsnCut::ECutSetType type, AliRsnPairParticle * pair )
97 {
98   if ( !fNumOfCuts )
99     return kTRUE;
100
101   Bool_t boolReturn = kTRUE;
102   AliRsnCut *cut;
103   for ( Int_t i=0; i<fNumOfCuts ;i++ )
104   {
105     cut = ( AliRsnCut* ) fCuts.At ( i );
106     fBoolValues[i] = cut->IsSelected (type,pair );
107 //     AliInfo(Form("%s %d",cut->GetName(),fBoolValues[i]));
108   }
109
110   if ( fIsScheme )
111     boolReturn = Passed();
112
113   return boolReturn;
114 }
115
116
117 void AliRsnCutSet::SetCutScheme ( const TString & theValue )
118 {
119   AliDebug ( AliLog::kDebug,"<-" );
120   fCutScheme = theValue;
121   SetCutSchemeIndexed ( theValue );
122   fIsScheme = kTRUE;
123   AliDebug ( AliLog::kDebug,"->" );
124 }
125
126
127 void AliRsnCutSet::SetCutSchemeIndexed ( TString theValue )
128 {
129   AliDebug ( AliLog::kDebug,"<-" );
130 //   fCutSchemeIndexed = theValue;
131   fCutSchemeIndexed = GetCutSchemeIndexed();
132   AliDebug ( AliLog::kDebug,"->" );
133 }
134
135 Int_t AliRsnCutSet::GetIndexByCutName ( TString s )
136 {
137   AliRsnCut *cut;
138   for ( Int_t i=0 ;i< fCuts.GetEntriesFast() ;i++ )
139   {
140     cut = ( AliRsnCut* ) fCuts.At ( i );
141 //     if ( !cut->GetName().CompareTo ( s ) )
142     if ( !s.CompareTo ( cut->GetName() ) )
143     {
144       return i;
145     }
146   }
147
148   return -1;
149 }
150
151 Bool_t AliRsnCutSet::Passed()
152 {
153   AliRsnExpression::sCutSet = this;
154   if ( !fExpression )
155   {
156     fExpression = new AliRsnExpression ( fCutSchemeIndexed );
157     AliDebug ( AliLog::kDebug,"fExpression was created." );
158   }
159   return fExpression->Value ( *GetCuts() );
160 }
161
162 Bool_t AliRsnCutSet::IsValidScheme()
163 {
164   return ( ! ( ShowCutScheme().Contains ( "Error" ) ) );
165 }
166
167 TString AliRsnCutSet::ShowCutScheme()
168 {
169   return fExpression->Unparse();
170 }
171
172 Int_t AliRsnCutSet::TestExpression ( TString opt )
173 {
174 //   AliRsnCut *cut1 = new AliRsnCut ( "aaa","aaa" );
175 //   cut1->SetCutValues ( AliRsnCut::kEsdPt,0.0,1.0 );
176 //   AliRsnCut *cut2 = new AliRsnCut ( "bbb","bbb" );
177 //   cut2->SetCutValues ( AliRsnCut::kEsdPt,1.,2.0 );
178 //   AliRsnCut *cut3 = new AliRsnCut ( "ccc","ccc" );
179 //   cut3->SetCutValues ( AliRsnCut::kEsdPt,2.0,3.0 );
180 //
181 //   AliRsnCutSet* set  = new AliRsnCutSet ( "setOne" );
182 //   set->AddCut ( cut1 );
183 //   set->AddCut ( cut2 );
184 //   set->AddCut ( cut3 );
185 //
186 //   set->SetCutScheme ( "(aaa&!(ccc))&(bbb&!(ccc))" );
187 //
188 //   set->ShowCuts ();
189
190   return 0;
191 }
192
193 void AliRsnCutSet::PrintSetInfo()
194 {
195
196
197   AliInfo ( "========== Rsn Cut Set info ==============" );
198   AliInfo ( Form ( "Sheme : %s",fCutScheme.Data() ) );
199   AliInfo ( Form ( "Sheme : %s",fCutSchemeIndexed.Data() ) );
200   AliInfo ( Form ( "Num of Cuts: %d", fCuts.GetEntriesFast() ) );
201   AliInfo ( "====== Cuts ======" );
202   AliRsnCut *cut;
203   for ( Int_t i=0 ;i< fCuts.GetEntriesFast() ;i++ )
204   {
205     cut = ( AliRsnCut* ) fCuts.At ( i );
206     if ( cut )
207       AliInfo ( Form ( "%d %d",i,fBoolValues[i] ) );
208
209   }
210   AliInfo ( "========== END Rsn Cut Mgr info ==============" );
211
212 }
213
214 TString AliRsnCutSet::GetCutSchemeIndexed()
215 {
216   AliDebug ( AliLog::kDebug,"<-" );
217   TString str ( fCutScheme );
218   AliDebug ( AliLog::kDebug,Form ( "Num of cuts %d",fCuts.GetEntriesFast() ) );
219   AliRsnCut *cut;
220   for ( Int_t i=0; i<fCuts.GetEntriesFast();i++ )
221   {
222     cut = ( AliRsnCut* ) fCuts.At ( i );
223     str.ReplaceAll ( cut->GetName(),Form ( "%d",i ) );
224   }
225   AliDebug ( AliLog::kDebug,"->" );
226   return str;
227 }
228