AliRoot Core  edcc906 (edcc906)
AliMillePedeRecord.h
Go to the documentation of this file.
1 #ifndef ALIMILLEPEDERECORD_H
2 #define ALIMILLEPEDERECORD_H
3 
4 /**********************************************************************************************/
5 /* AliMillePedeRecords: class to store the data of single track processing */
6 /* Format: for each measured point the data is stored consequtively */
7 /* INDEX VALUE */
8 /* -1 residual */
9 /* Local_param_id dResidual/dLocal_param */
10 /* ... ... */
11 /* -2 weight of the measurement */
12 /* Global_param_od dResidual/dGlobal_param */
13 /* ... ... */
14 /* */
15 /* The records for all processed tracks are stored in the temporary tree in orgder to be */
16 /* reused for multiple iterations of MillePede */
17 /* */
18 /* Author: ruben.shahoyan@cern.ch */
19 /* */
20 /**********************************************************************************************/
21 #include <TObject.h>
22 
23 class AliMillePedeRecord : public TObject
24 {
25  public:
29  //
30  virtual ~AliMillePedeRecord();
31  void Reset();
32  void Print(const Option_t *opt="") const;
33  //
34  Int_t GetSize() const {return fSize;}
35  Int_t *GetIndex() const {return fIndex;}
36  Int_t GetIndex(int i) const {return fIndex[i];}
37  //
38  void GetIndexValue(Int_t i,Int_t &ind,Double_t &val) const {ind=fIndex[i]; val=fValue[i];}
39  void AddIndexValue(Int_t ind, Double_t val);
40  void AddResidual(Double_t val) {AddIndexValue(-1,val);}
41  void AddWeight(Double_t val) {AddIndexValue(-2,val);}
42  void SetWeight(Double_t w=1) {fWeight = w;}
43  Bool_t IsResidual(Int_t i) const {return fIndex[i]==-1;}
44  Bool_t IsWeight(Int_t i) const {return fIndex[i]==-2;}
45  //
46  Double_t *GetValue() const {return fValue;}
47  Double_t GetValue(Int_t i) const {return fValue[i];}
48  Double_t GetWeight() const {return fWeight;}
49  //
50  void MarkGroup(Int_t id);
51  Int_t GetNGroups() const {return fNGroups;}
52  Int_t GetGroupID(Int_t i) const {return fGroupID[i]-1;}
53  Bool_t IsGroupPresent(Int_t id) const;
54  UInt_t GetRunID() const {return fRunID;}
55  void SetRunID(UInt_t run) {fRunID = run;}
56  //
57  // Aux methods
58  Double_t GetGlobalDeriv(Int_t pnt, Int_t indx) const;
59  Double_t GetLocalDeriv(Int_t pnt, Int_t indx) const;
60  Double_t GetResidual(Int_t pnt) const;
61  Double_t GetGloResWProd(Int_t indx) const;
62  Double_t GetWeight(Int_t indx) const;
63  //
64  protected:
65  Int_t GetDtBufferSize() const {return GetUniqueID()&0x0000ffff;}
66  Int_t GetGrBufferSize() const {return GetUniqueID()>>16;}
67  void SetDtBufferSize(Int_t sz) {SetUniqueID((GetGrBufferSize()<<16)+sz);}
68  void SetGrBufferSize(Int_t sz) {SetUniqueID(GetDtBufferSize()+(sz<<16));}
69  void ExpandDtBuffer(Int_t bfsize);
70  void ExpandGrBuffer(Int_t bfsize);
71  //
72  protected:
73  Int_t fSize; // size of the record
74  Int_t fNGroups; // number of groups (e.g. detectors) contributing
75  UInt_t fRunID; // run ID
76  UShort_t* fGroupID; //[fNGroups] groups id's+1 (in increasing order)
77  Int_t * fIndex; //[fSize] index of variables
78  Double32_t* fValue; //[fSize] array of values: derivs,residuals
79  Double32_t fWeight; //global weight for the record
80  //
81  ClassDef(AliMillePedeRecord,3) // Record of track residuals and local/global deriavtives
82 };
83 
84 //_____________________________________________________________________________________________
85 inline void AliMillePedeRecord::AddIndexValue(Int_t ind, Double_t val)
86 {
87  // add new pair of index/value
89  fIndex[fSize]=ind;
90  fValue[fSize++]=val;
91 }
92 
93 //_____________________________________________________________________________________________
94 inline Bool_t AliMillePedeRecord::IsGroupPresent(Int_t id) const
95 {
96  // check if group is defined
97  id++;
98  for (int i=fNGroups;i--;) if (fGroupID[i]==id) return kTRUE;
99  return kFALSE;
100 }
101 
102 #endif
void SetWeight(Double_t w=1)
void SetGrBufferSize(Int_t sz)
void Print(const Option_t *opt="") const
Int_t * GetIndex() const
void ExpandDtBuffer(Int_t bfsize)
Int_t GetIndex(int i) const
Double_t GetWeight() const
Double_t * GetValue() const
Int_t GetGrBufferSize() const
void AddResidual(Double_t val)
Double_t GetValue(Int_t i) const
void GetIndexValue(Int_t i, Int_t &ind, Double_t &val) const
Bool_t IsWeight(Int_t i) const
Bool_t IsResidual(Int_t i) const
void SetDtBufferSize(Int_t sz)
void AddIndexValue(Int_t ind, Double_t val)
Int_t GetSize() const
Int_t GetDtBufferSize() const
Double_t GetResidual(Int_t pnt) const
Double_t GetGlobalDeriv(Int_t pnt, Int_t indx) const
Bool_t IsGroupPresent(Int_t id) const
Int_t GetNGroups() const
Double_t GetLocalDeriv(Int_t pnt, Int_t indx) const
void SetRunID(UInt_t run)
UInt_t GetRunID() const
AliMillePedeRecord & operator=(const AliMillePedeRecord &rhs)
void ExpandGrBuffer(Int_t bfsize)
void AddWeight(Double_t val)
Double_t GetGloResWProd(Int_t indx) const
Int_t GetGroupID(Int_t i) const