GammaWare  Head Version for release 0.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
DataHandling.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2004 by Olivier Stezowski *
3  * stezow(AT)ipnl.in2p3.fr *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ***************************************************************************/
20 
23 #ifndef ADF_DataHandling
24 #define ADF_DataHandling
25 #define ADF_DATAHANDLING_H ADF_DataHandling
26 
27 #ifndef ADF_ADFConfig
28 #include "ADFConfig.h"
29 #endif
30 #ifndef ADF_BufferIO
31 #include "BufferIO.h"
32 #endif
33 
34 #include<iostream>
35 #include<string>
36 #include<cstdlib>
37 
38 namespace ADF
39 {
40 
41 const char *NamedItemTypeOf(Bool_t);
42 const char *NamedItemTypeOf(UShort_t);
43 const char *NamedItemTypeOf(Short_t);
44 const char *NamedItemTypeOf(UInt_t);
45 const char *NamedItemTypeOf(Int_t);
46 const char *NamedItemTypeOf(ULong64_t);
47 const char *NamedItemTypeOf(Long64_t);
48 const char *NamedItemTypeOf(Double_t);
49 const char *NamedItemTypeOf(Float_t);
50 const char *NamedItemTypeOf(std::string);
51 
53 
80 class DataLink
81 {
82 public:
83  friend class GObject;
84 
85 protected:
86  virtual void *A1()
87  { return 0x0; }
88  virtual void *A2()
89  { return 0x0; }
90 
91 public:
93  {;}
94  virtual ~DataLink()
95  {;}
96 
98 // virtual UShort_t IsALink(void *)
99 // { return 0u; }
100 
102  virtual void Link(void *, void *)
103  {;}
104 
106  virtual void CopyA1_to_A2()
107  {;}
108 
110  virtual void CopyA2_to_A1()
111  {;}
112 
114  virtual void Reset()
115  {;}
116 
118  virtual void ResetA1()
119  {;}
120 
122  virtual void ResetA2()
123  {;}
124 };
125 
127 
129 template<typename Data_T> class DataLinkImp : public DataLink
130 {
131 private:
132  Data_T fDefault; Data_T *fA1, *fA2;
133 
134 protected:
135  virtual void *A1()
136  { return fA1; }
137  virtual void *A2()
138  { return fA2; }
139 public:
140  DataLinkImp(Data_T d) :
141  DataLink(), fDefault(d), fA1(0x0), fA2(0x0) {;}
142  virtual ~DataLinkImp()
143  { fA1 = fA2 = 0x0; }
144 
145  virtual void Link(void *a1, void *a2)
146  { fA1 = (Data_T *)a1; fA2 = (Data_T *)a2; };
147 
148  virtual void CopyA1_to_A2()
149  { (*fA2) = (*fA1) ;}
150  virtual void CopyA2_to_A1()
151  { (*fA1) = (*fA2) ;}
152 
153  virtual void ResetA1()
154  { (*fA1) = fDefault; }
155  virtual void ResetA2()
156  { (*fA2) = fDefault; }
157 
158  virtual void Reset()
159  { (*fA2) = (*fA1) = fDefault; }
160 };
161 
163 
189 {
190 protected:
191  std::string fName;
192  std::string fType;
193 
194 public:
196  ANamedItem(const char *name, const char *type) :
197  fName(name), fType(type) {;}
198  virtual ~ANamedItem()
199  {;}
200 
202  virtual ANamedItem *MakeAClone() const = 0;
203 
205 // virtual UShort_t IsLinked(DataLink *) = 0;
206 
208  virtual DataLink *MakeADataLink(void *) = 0;
209 
211  virtual ANamedItem *MakeAProxy()= 0;
212 
214  virtual Bool_t Set( const ANamedItem * ) = 0;
216  // virtual Bool_t Set( const ANamedItem *, Bool_t check_type = true, check_name = false ) = 0;
217 
219  std::string GetName() const
220  { return fName; }
222  std::string GetType() const
223  { return fType; }
224 
226  std::string &Name()
227  { return fName; }
229  std::string &Type()
230  { return fType; }
231 
233  Bool_t IsType(const char *type)
234  { return fType.compare(type) == 0 ; }
235 
237  virtual void SetItem(BufferIO &) const
238  {;}
240  virtual void GetItem(const BufferIO &)
241  {;}
242 
244  virtual void Reset()
245  {;}
246 
247  virtual void Print(std::ostream & = std::cout) const
248  {;}
249 };
250 
251 template<typename Data_T> class NamedItem : public ANamedItem
252 {
253 private:
254  Data_T fDefault; Data_T fData;
255 
256 public:
257  NamedItem(const char *name, Data_T d = 0):
258  ANamedItem(name,"NOTYPE"),fDefault(d),fData(d) { fType = NamedItemTypeOf(fData); }
259  virtual ~NamedItem()
260  {;}
261 
263  virtual ANamedItem *MakeAClone() const
264  {
265  NamedItem<Data_T> *clone = new NamedItem<Data_T>(GetName().data(),GetDefault()) ;
266  clone->Set(Get());
267 
268  return clone;
269  }
271  virtual Bool_t Set( const ANamedItem *item )
272  {
273  Bool_t ok = false;
274  if ( item->GetType() == GetType() ) {
275  const NamedItem<Data_T> *t = dynamic_cast< const NamedItem<Data_T> *> (item);
276  Set( t->Get() );
277  ok = true;
278  }
279  return ok;
280  }
282  virtual ANamedItem *MakeAProxy();
283 
285  virtual DataLink *MakeADataLink(void *extern_add)
286  {
287  DataLinkImp<Data_T> *link = new DataLinkImp<Data_T>(fDefault);
288  if ( link )
289  link->Link(&fData,extern_add);
290  return link;
291  }
293  virtual void Set(Data_T t)
294  { fData = t; }
296  virtual Data_T Get() const
297  { return fData; }
298 
300  virtual void SetDefault(Data_T t)
301  { fDefault = t; }
303  virtual Data_T GetDefault() const
304  { return fDefault; }
305 
307  virtual void SetItem(BufferIO &buf) const
308  {buf << fData;}
310  virtual void GetItem(const BufferIO &buf)
311  {buf >> fData;}
312 
314  virtual void Reset()
315  { fData = fDefault; }
316 
317  virtual void Print(std::ostream & /*out */ = std::cout) const
318  {
319 // out << " " << GetName() << " " << GetType() << " " << fData ;
320 // out << " " << GetName() << " " << GetType() << " " ;
321  }
322 };
323 
325 {
326 public:
328  {;}
329  virtual ~AProxyNamedItem()
330  {;}
331 
333  virtual void SetProxy(ANamedItem * /*ritem*/)
334  {;}
335 };
336 
337 template<typename Data_T> class ProxyNamedItem : public AProxyNamedItem, public NamedItem<Data_T>
338 {
339 private:
340  NamedItem<Data_T> *fRealItem;
341 
342 public:
343  ProxyNamedItem(const char *name, Data_T d = 0):
344  NamedItem<Data_T>(name,d),fRealItem(0x0) { fRealItem = this; }
345  virtual ~ProxyNamedItem()
346  {;}
347 
349  virtual void SetProxy(ANamedItem *ritem)
350  {
351  fRealItem = this;
352  if ( ritem == 0x0 )
353  return;
354  if ( dynamic_cast< NamedItem<Data_T> *>(ritem) )
355  fRealItem = dynamic_cast< NamedItem<Data_T> *>(ritem);
356  }
357 
359 
363  { return this; }
364 
366  virtual DataLink *MakeADataLink(void *extern_add)
367  { return fRealItem->MakeADataLink(extern_add); }
368 
369  virtual Bool_t Set( const ANamedItem *t )
370  { return fRealItem->Set(t) ; }
371  virtual void Set(Data_T t)
372  { fRealItem->Set(t) ; }
373  virtual Data_T Get() const
374  { return fRealItem->Get(); }
375 
376  virtual void SetDefault(Data_T t)
377  { fRealItem->SetDefault(t) ; }
378  virtual Data_T GetDefault() const
379  { return fRealItem->GetDefault(); }
380 
382  virtual void SetItem(BufferIO &buf) const
383  {fRealItem->SetItem(buf);}
385  virtual void GetItem(const BufferIO &buf)
386  {fRealItem->GetItem(buf);}
387 
389  virtual void Reset()
390  { fRealItem->Reset(); }
391 };
392 
393 template <typename Data_T> ANamedItem *NamedItem<Data_T>::MakeAProxy()
394 {
395  ProxyNamedItem<Data_T> *ritem
396  = new ProxyNamedItem<Data_T>(Name().data(),GetDefault());
397  ritem->SetProxy(this);
398 
399  return ritem;
400 }
401 
403 
408 {
409 private:
410  Double_t fXmin, fXmax, fDeltaX;
411 
412  UShort_t fNBins2;
413  UInt_t fNBins4;
414 
415 public:
416  Digitizer(Double_t xmin = 0., Double_t xmax = 1., UInt_t bins = 1u);
417  virtual ~Digitizer() {;}
418 
419  virtual void Init(Double_t xmin = 0., Double_t xmax = 1., UInt_t bins = 1u);
420 
421  Double_t GetMin() const
422  { return fXmin; }
423  Double_t GetMax() const
424  { return fXmax; }
425 
426  UShort_t GetBins2() const
427  { return fNBins2; }
428  UInt_t GetBins4() const
429  { return fNBins4; }
430 
432 
434  virtual UShort_t D2Bytes(Double_t x) const {
435  if ( x <= fXmin ) return 0u;
436  if ( x > fXmax ) return fNBins2; return UShort_t(fNBins2*(x-fXmin)/fDeltaX) ;
437  }
438 
440 
442  virtual UInt_t D4Bytes(Double_t x) const {
443  if ( x <= fXmin ) return 0u;
444  if ( x > fXmax ) return fNBins4; return UInt_t(fNBins4*(x-fXmin)/fDeltaX) ;
445  }
446 
448 
450  virtual Double_t UndigitR(UInt_t i) const
451  { if ( i > fNBins4 ) return fXmax; return fXmin + (i+Double_t(::rand())/RAND_MAX) * fDeltaX / fNBins4; }
452 
454 
456  virtual Double_t UndigitR(UShort_t i) const
457  { if ( i > fNBins2 ) return fXmax; return fXmin + (i+Double_t(::rand())/RAND_MAX) * fDeltaX / fNBins2; }
458 
460 
462  virtual Double_t Undigit(UInt_t i) const
463  { if ( i > fNBins4 ) return fXmax; return fXmin + (i) * fDeltaX / fNBins4; }
464 
466 
468  virtual Double_t Undigit(UShort_t i) const
469  { if ( i > fNBins2 ) return fXmax; return fXmin + (i) * fDeltaX / fNBins2; }
470 
472 
474  virtual Double_t UndigitC(UInt_t i) const
475  { if ( i > fNBins4 ) return fXmax; return fXmin + (i+0.5) * fDeltaX / fNBins4; }
476 
478 
480  virtual Double_t UndigitC(UShort_t i) const
481  { if ( i > fNBins2 ) return fXmax; return fXmin + (i+0.5) * fDeltaX / fNBins2; }
482 };
483 
484 } // namespace ADF
485 #endif
486 
virtual ~ANamedItem()
Definition: DataHandling.h:198
Interface to digitise real values.
Definition: DataHandling.h:407
virtual ANamedItem * MakeAProxy()
ask this to create a proxy for it
Definition: DataHandling.h:393
virtual Bool_t Set(const ANamedItem *)=0
change value of this nmaed item using the passed one. it checks if asked, it check first if of the sa...
virtual Double_t UndigitR(UInt_t i) const
returns a randomized value corresponding to the given bin
Definition: DataHandling.h:450
virtual void Reset()
set the item to the default value
Definition: DataHandling.h:389
UInt_t GetBins4() const
Definition: DataHandling.h:428
Implementation of a concrete DataLink.
Definition: DataHandling.h:129
virtual void CopyA2_to_A1()
Copy a2 into a1.
Definition: DataHandling.h:150
virtual void ResetA1()
set A1 to default
Definition: DataHandling.h:153
virtual void Reset()
both linked data to default
Definition: DataHandling.h:158
virtual ANamedItem * MakeAClone() const =0
clone that named item
virtual void Reset()
set the item to the default value
Definition: DataHandling.h:314
virtual Double_t UndigitC(UInt_t i) const
returns a non-randomized value corresponding to the given bin (center)
Definition: DataHandling.h:474
virtual ~DataLinkImp()
Definition: DataHandling.h:142
virtual void Reset()
set the item to the default value
Definition: DataHandling.h:244
virtual ~ProxyNamedItem()
Definition: DataHandling.h:345
virtual void GetItem(const BufferIO &buf)
read the value of this item from the buffer
Definition: DataHandling.h:310
virtual DataLink * MakeADataLink(void *)=0
check is the passed DataLink is linked to the internal value of this NamaedItem
virtual ANamedItem * MakeAClone() const
clone that named item
Definition: DataHandling.h:263
virtual DataLink * MakeADataLink(void *extern_add)
ask this to create a suitable DataLink
Definition: DataHandling.h:366
virtual Double_t Undigit(UInt_t i) const
returns a non-randomized value corresponding to the given bin
Definition: DataHandling.h:462
virtual ANamedItem * MakeAProxy()
ask this to create a proxy for that item
Definition: DataHandling.h:362
Base class for a Global Object.
Definition: GObject.h:115
std::string fName
Definition: DataHandling.h:191
std::string GetName() const
change value of this nmaed item using the passed one. it checks if asked, it check first if of the sa...
Definition: DataHandling.h:219
virtual void SetItem(BufferIO &buf) const
write the value of this item to the buffer
Definition: DataHandling.h:307
virtual void Link(void *a1, void *a2)
test if the given address is one of the Link
Definition: DataHandling.h:145
virtual void Init(Double_t xmin=0., Double_t xmax=1., UInt_t bins=1u)
virtual ~NamedItem()
Definition: DataHandling.h:259
ANamedItem(const char *name, const char *type)
Constructor for a NamedItem.
Definition: DataHandling.h:196
std::string GetType() const
Type of the Item.
Definition: DataHandling.h:222
virtual ~AProxyNamedItem()
Definition: DataHandling.h:329
virtual Bool_t Set(const ANamedItem *t)
change value of this named item using the passed one. It has to be of the same type ! returns false i...
Definition: DataHandling.h:369
virtual Bool_t Set(const ANamedItem *item)
change value of this named item using the passed one. It has to be of the same type ! returns false i...
Definition: DataHandling.h:271
virtual Data_T GetDefault() const
Get the data.
Definition: DataHandling.h:303
Double_t GetMin() const
Definition: DataHandling.h:421
std::string fType
Definition: DataHandling.h:192
virtual UInt_t D4Bytes(Double_t x) const
returns (as UInt_t) the bin corresponding to x
Definition: DataHandling.h:442
header file for BufferIO.cpp
virtual void GetItem(const BufferIO &buf)
read the value of this item from the buffer
Definition: DataHandling.h:385
virtual void CopyA1_to_A2()
Copy a1 into a2.
Definition: DataHandling.h:148
DataLinkImp(Data_T d)
Definition: DataHandling.h:140
virtual void SetProxy(ANamedItem *)
the passed item becomes the real item
Definition: DataHandling.h:333
virtual Double_t UndigitC(UShort_t i) const
returns a non-randomized value corresponding to the given bin (center)
Definition: DataHandling.h:480
virtual Data_T Get() const
Get the data.
Definition: DataHandling.h:296
to set informations about the ADF configuration
ANamedItem.
Definition: DataHandling.h:188
virtual ~Digitizer()
Definition: DataHandling.h:417
virtual DataLink * MakeADataLink(void *extern_add)
ask this to create a suitable DataLink
Definition: DataHandling.h:285
virtual void SetDefault(Data_T t)
Set the data.
Definition: DataHandling.h:376
Bool_t IsType(const char *type)
Check if this is of type 'type'.
Definition: DataHandling.h:233
virtual Data_T GetDefault() const
Get the data.
Definition: DataHandling.h:378
virtual void ResetA2()
set A2 to default
Definition: DataHandling.h:155
virtual void GetItem(const BufferIO &)
read the value of this item from the buffer
Definition: DataHandling.h:240
virtual void Set(Data_T t)
Set the data.
Definition: DataHandling.h:293
virtual void * A2()
Definition: DataHandling.h:137
NamedItem(const char *name, Data_T d=0)
Definition: DataHandling.h:257
virtual Data_T Get() const
Get the data.
Definition: DataHandling.h:373
virtual void SetProxy(ANamedItem *ritem)
the passed item becomes the real item
Definition: DataHandling.h:349
UShort_t GetBins2() const
Definition: DataHandling.h:426
virtual void * A1()
Definition: DataHandling.h:135
virtual void Print(std::ostream &=std::cout) const
Definition: DataHandling.h:247
virtual UShort_t D2Bytes(Double_t x) const
returns (as UShort_t) the bin corresponding to x
Definition: DataHandling.h:434
virtual Double_t Undigit(UShort_t i) const
returns a non-randomized value corresponding to the given bin
Definition: DataHandling.h:468
virtual void Print(std::ostream &=std::cout) const
Definition: DataHandling.h:317
virtual void SetDefault(Data_T t)
Set the data.
Definition: DataHandling.h:300
virtual ANamedItem * MakeAProxy()=0
ask this to create a proxy for that item
std::string & Name()
Name of the Item.
Definition: DataHandling.h:226
virtual void SetItem(BufferIO &buf) const
write the value of this item to the buffer
Definition: DataHandling.h:382
virtual Double_t UndigitR(UShort_t i) const
returns a randomized value corresponding to the given bin
Definition: DataHandling.h:456
virtual void SetItem(BufferIO &) const
write the value of this item to the buffer
Definition: DataHandling.h:237
const char * NamedItemTypeOf(Bool_t)
ProxyNamedItem(const char *name, Data_T d=0)
Definition: DataHandling.h:343
std::string & Type()
Type of the Item.
Definition: DataHandling.h:229
Digitizer(Double_t xmin=0., Double_t xmax=1., UInt_t bins=1u)
virtual void Set(Data_T t)
Set the data.
Definition: DataHandling.h:371
Double_t GetMax() const
Definition: DataHandling.h:423