KaliVeda  1.13/01
Heavy-Ion Analysis Toolkit
KVPartition.cpp
Go to the documentation of this file.
1 //Created by KVClassFactory on Mon Mar 29 14:58:00 2010
2 //Author: bonnet
3 
4 #include "KVPartition.h"
5 #include "TMath.h"
6 #include "Riostream.h"
7 #include "TArrayI.h"
8 
10 
11 
12 
13 
14 
17 void KVPartition::init(Int_t mommax)
18 {
19 //Initialisation
20  fValues = new KVValues("Moments", mommax);
21 
22  ftab = new TArrayI(20);
23  ftab_diff = new TArrayI(20);
24 
25  fMult_diff = 0;
26 
27 }
28 
29 
30 
33 
35 {
36 // Constructor
37  init(mommax);
38 }
39 
40 
41 
44 
46 {
47 // Default constructor
48  init();
49 }
50 
51 
52 
55 
57 {
58 //Destructeur
59  delete fValues;
60  delete ftab;
61  delete ftab_diff;
62 }
63 
64 
65 
66 
69 
71 {
72 //Methode dérivée de KVIntegerList, Reinitialisation de l'object
73 
75 
76  fValues->Reset();
77  for (Int_t ii = 0; ii < ftab->fN; ii += 1) ftab->AddAt(ii, 0);
78  for (Int_t ii = 0; ii < ftab_diff->fN; ii += 1) ftab_diff->AddAt(ii, 0);
79 
80  fMult = 0;
81  fMult_diff = 0;
82 
83 }
84 
85 
86 
89 
90 void KVPartition::Copy(TObject& obj) const
91 {
92 //Methode dérivée de KVIntegerList, fait une copie dans l'objet "obj"
94  ((KVPartition&)obj).Update();
95 
96 }
97 
98 
99 
105 
107 {
108 //protected method, Methode dérivée de KVIntegerList,
109 //Appel de KVIntegerList::Update()
110 //les deux TArrayI ftab et ftab_diff sont mis à jour
111 //un test de dimension est fait pour etendre si besoin
112 
113  if (fMult > ftab->fN) ftab->Set(fMult);
115  //Info("Update","fMult=%d fMult_diff=%d",fMult,fMult_diff);
116  Int_t mdiff = 0, mtot = 0;
117  KVString snom = "", stamp = "";
118  for (Int_t ii = fLimiteRegle; ii >= 0; ii -= 1) {
119  Int_t contenu = fRegle->At(ii);
120  if (contenu > 0) {
121  ftab_diff->AddAt(ii, mdiff++);
122  for (Int_t mm = 0; mm < contenu; mm += 1) {
123  ftab->AddAt(ii, mtot++);
124  }
125 
126  //Formattage du nom de la partition
127  stamp.Form("%d", ii);
128  snom += stamp;
129  if (contenu > 1) {
130  stamp.Form("(%d)", contenu);
131  snom += stamp;
132  }
133  snom += " ";
134  }
135  }
136  if (snom != "") snom.Remove(snom.Length() - 1);
137  SetName(snom.Data());
138  fLength = snom.Length();
139 
141 
142 }
143 
144 
145 
151 
152 void KVPartition::Print(Option_t* option) const
153 {
154 //Methode dérivée de KVIntegerList, imprime les informations
155 //option="" -> appel uniquement de KVIntegerList::Print
156 //option=="Moments", imprime les moments calculés via la classe KVValues
157 //option=="Partition", imprime le nombre de valeurs GetMult() et le nombre de valeurs differentes (GetMultDiff())
158  KVIntegerList::Print(option);
159  if (!strcmp(option, "Moments")) {
160  Info("Print", "Moments #Sigma Z^{ordre}");
161  Info("Print", "Nombres de moments calcules %d", GetOrdreMax());
162  for (Int_t mm = 0; mm <= GetOrdreMax(); mm += 1) {
163  Info("Print", "Moments d'ordre %d -> %1.0lf", mm, GetMoment(mm));
164  }
165  }
166  else if (!strcmp(option, "Partition")) {
167  Info("Print", "Multiplicite %d / Nombre de valeurs differentes %d", GetMult(), GetMultDiff());
168  }
169  else {
170 
171  }
172 
173 }
174 
175 
176 
181 
183 {
184 //protected method, dérivée de KVIntegerList
185 //Incrementation si besoin du nombre de valeurs differentes GetMultDiff
186 //Remplissage de l'objet KVIntegerList::fValues, pour le calcul des moments
187  if (!Contains(val)) fMult_diff += 1;
188  KVIntegerList::add_values(val, freq);
189  fValues->FillVar(val, freq);
190 
191 }
192 
193 
194 
199 
201 {
202 //protected method, dérivée de KVIntegerList
203 //Decrementation si besoin du nombre de valeurs differentes GetMultDiff
204 //Les valeurs considerees sont également retires dans le calcul des moments, object KVIntegerList::fValues
205 
206  if (GetFrequency(val) <= freq) fMult_diff -= 1;
207  fValues->FillVar(val, -1.*freq);
208  return KVIntegerList::remove_values(val, freq);
209 
210 }
211 
212 
213 
219 
221 {
222 
223 //Donne le 1er, 2eme ... plus gros de la partition
224 //Attention notation C
225 // - le premier -> 0
226 // - le dernier -> N-1 ou N est la multiplicite
227 
228  return ((rang < GetMoment(0)) ? Double_t(GetValeur(rang)) : -1.);
229 
230 }
231 
232 
233 
239 
241 {
242 
243 //Donne le 1er, 2eme ... plus petit de la partition
244 //Attention notation C
245 // - le premier -> 0
246 // - le dernier -> N-1 ou N est la multiplicite
247 
248  Int_t inverse = Int_t(GetMoment(0)) - 1 - rang;
249  return ((inverse < GetMoment(0)) ? Double_t(GetValeur(inverse)) : -1.);
250 
251 }
252 
253 
254 
257 
259 {
260 
261 //return kTRUE if the indicated rank is occupied
262  Int_t val = Int_t(GetZmax(rang));
263  if (val == -1) return kFALSE;
264  return Remove(val);
265 
266 }
267 
268 
269 
272 
274 {
275 
276 //return kTRUE if the indicated rank is occupied
277  Int_t val = Int_t(GetZmax(rang));
278  if (val == -1) return kFALSE;
279  return RemoveAll(val);
280 }
281 
282 
int Int_t
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
const Bool_t kFALSE
bool Bool_t
double Double_t
const char Option_t
Int_t fMult
Nombre d'éléments dans la liste.
Definition: KVIntegerList.h:75
virtual Bool_t remove_values(Int_t val, Int_t freq)
Ssiz_t fLength
Longueur du nom de la liste/partition usilisée dans Compare.
Definition: KVIntegerList.h:76
void Clear(Option_t *option="")
Classe dérivée de TNamed, Reinitialisation de l'object.
Int_t fLimiteRegle
taille max de fRegle
Definition: KVIntegerList.h:73
void Print(Option_t *option="") const
Classe dérivée de TNamed, Imprime la liste formattée et la population associée.
virtual void add_values(Int_t val, Int_t freq)
void Copy(TObject &named) const
Classe dérivée de TNamed, fait une copie vers l'objet obj.
Int_t GetFrequency(Int_t val) const
Bool_t Contains(Int_t val) const
TArrayI * fRegle
tableau d'entiers où sont stockée l'occurence des valeurs
Definition: KVIntegerList.h:72
Bool_t Remove(Int_t val, Int_t freq)
Bool_t RemoveAll(Int_t val)
Handle partitions.
Definition: KVPartition.h:30
Bool_t RemoveAllValuesAt(Int_t rang)
return kTRUE if the indicated rank is occupied
Int_t GetMult(void) const
Definition: KVPartition.h:76
Int_t GetValeur(Int_t rang) const
Definition: KVPartition.h:84
Bool_t RemoveAt(Int_t rang)
return kTRUE if the indicated rank is occupied
Bool_t remove_values(Int_t val, Int_t freq)
void Clear(Option_t *option="")
Methode dérivée de KVIntegerList, Reinitialisation de l'object.
Definition: KVPartition.cpp:70
void Copy(TObject &obj) const
Methode dérivée de KVIntegerList, fait une copie dans l'objet "obj".
Definition: KVPartition.cpp:90
TArrayI * ftab
tableau regroupant tous les entiers de la partition (ordre decroissant)
Definition: KVPartition.h:34
void Print(Option_t *option="") const
virtual ~KVPartition()
Destructeur.
Definition: KVPartition.cpp:56
Int_t GetMultDiff(void) const
Methodes donnant aux valeurs uniques de la partition.
Definition: KVPartition.h:61
Int_t GetOrdreMax() const
Definition: KVPartition.h:55
Int_t fMult_diff
Nbre de valeurs differentes.
Definition: KVPartition.h:36
Double_t GetMoment(Int_t ordre) const
Methodes donnant acces aux variables calculees de la partition.
Definition: KVPartition.h:94
void add_values(Int_t val, Int_t freq)
Double_t GetZmax(Int_t rang=0) const
Double_t GetZmin(Int_t rang=0) const
TArrayI * ftab_diff
tableau regroupant tous les entiers differents de la partition (ordre decroissant)
Definition: KVPartition.h:35
KVValues * fValues
Object permettant de gerer les moments ou autre.
Definition: KVPartition.h:37
KVPartition()
Default constructor.
Definition: KVPartition.cpp:45
Extension of ROOT TString class which allows backwards compatibility with ROOT v3....
Definition: KVString.h:72
Handle Operation on variable.
Definition: KVValues.h:24
void FillVar(Double_t val)
Definition: KVValues.cpp:329
void Reset()
Definition: KVValues.cpp:117
void Set(Int_t n)
Int_t At(Int_t i) const
void AddAt(Int_t c, Int_t i)
Int_t fN
virtual void SetName(const char *name)
void SetBit(UInt_t f)
virtual void Info(const char *method, const char *msgfmt,...) const
Ssiz_t Length() const
const char * Data() const
void Form(const char *fmt,...)
TString & Remove(EStripType s, char c)
const long double mm
Definition: KVUnits.h:69