- Three classes by MinJung Kweon AliHFEpriVtx, AliHFEsecVtx and AliHFEmcQA for primar...
[u/mrichter/AliRoot.git] / STEER / AliMillePedeRecord.h
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:
26   AliMillePedeRecord();
27   AliMillePedeRecord(const AliMillePedeRecord& src);
28   AliMillePedeRecord& operator=(const AliMillePedeRecord& rhs);
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   Bool_t     IsResidual(Int_t i)                             const {return fIndex[i]==-1;}
43   Bool_t     IsWeight(Int_t i)                               const {return fIndex[i]==-2;}
44   //
45   Double_t  *GetValue()                                      const {return fValue;}
46   Double_t   GetValue(Int_t i)                               const {return fValue[i];}
47   //
48   void       MarkGroup(Int_t id);
49   Int_t      GetNGroups()                                    const {return fNGroups;}
50   Int_t      GetGroupID(Int_t i)                             const {return fGroupID[i];}
51   Bool_t     IsGroupPresent(Int_t id)                        const;
52   //
53  protected:
54   Int_t      GetDtBufferSize()                               const {return GetUniqueID()&0x0000ffff;}
55   Int_t      GetGrBufferSize()                               const {return GetUniqueID()>>16;}
56   void       SetDtBufferSize(Int_t sz)                             {SetUniqueID((GetGrBufferSize()<<16)+sz);}
57   void       SetGrBufferSize(Int_t sz)                             {SetUniqueID(GetDtBufferSize()+(sz<<16));}
58   void       ExpandDtBuffer(Int_t bfsize);
59   void       ExpandGrBuffer(Int_t bfsize);
60   //
61  protected:
62   Int_t      fSize;                             // size of the record
63   Int_t      fNGroups;                          // number of groups (e.g. detectors) contributing
64   Int_t   *  fGroupID;                          //[fNGroups] groups id's (in increasing order)
65   Int_t   *  fIndex;                            //[fSize] index of variables
66   Double_t*  fValue;                            //[fSize] array of values: derivs,residuals
67   //
68   ClassDef(AliMillePedeRecord,1)                // Record of track residuals and local/global deriavtives
69 };
70
71 inline void  AliMillePedeRecord::AddIndexValue(Int_t ind, Double_t val) 
72 {
73   if (fSize>=GetDtBufferSize()) ExpandDtBuffer(2*(fSize+1));
74   fIndex[fSize]=ind; 
75   fValue[fSize++]=val;
76 }
77
78 #endif