]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/global/AliFlatESDFriend.h
Make SetChi2 method public
[u/mrichter/AliRoot.git] / HLT / global / AliFlatESDFriend.h
1 #ifndef ALIFLATESDFRIEND_H
2 #define ALIFLATESDFRIEND_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               *
6  * Primary Authors : Sergey Gorbunov, Jochen Thaeder, Chiara Zampolli     */
7
8 /*
9  * See implementation file for documentation
10  */
11
12 #include "Rtypes.h"
13 #include "AliVMisc.h"
14 #include "AliVfriendEvent.h"
15 #include "AliFlatESDFriendTrack.h"
16
17
18 class AliESDfriend;
19 //class AliESDVZEROfriend;
20 //class AliESDTZEROfriend;
21
22
23 //_____________________________________________________________________________
24 class AliFlatESDFriend : public AliVfriendEvent {
25 public:
26   AliFlatESDFriend();
27   ~AliFlatESDFriend() {}
28  
29    // constructor and method for reinitialisation of virtual table
30    AliFlatESDFriend( AliVConstructorReinitialisationFlag );
31    void Reinitialize(){ new (this) AliFlatESDFriend(AliVReinitialize); }
32
33   // Implementation of virtual methods of AliVfriend
34
35   Int_t GetNumberOfTracks() const { return fNTracks; }
36   const AliVfriendTrack* GetTrack(Int_t i) const {return GetFlatTrack(i); }
37   Int_t GetEntriesInTracks() const { return fNTrackEntries; }
38  
39   //AliESDVZEROfriend *GetVZEROfriend(){ return NULL; }
40   //AliESDTZEROfriend *GetTZEROfriend(){ return NULL; }
41
42   void Ls() const;
43   void Reset();
44
45   // bit manipulation for filtering
46   void SetSkipBit(Bool_t skip){ fBitFlags = skip; }
47   Bool_t TestSkipBit() const { return (fBitFlags!=0); }
48
49   //TPC cluster occupancy
50   Int_t GetNclustersTPC(UInt_t sector) const { return (sector<72)?fNclustersTPC[sector]:0; }
51   Int_t GetNclustersTPCused(UInt_t sector) const { return (sector<72)?fNclustersTPCused[sector]:0; }
52   
53   // -- Own methods  -- 
54
55   // Set methods
56
57   Int_t SetFromESDfriend( size_t allocatedMemorySize, const AliESDfriend *esdFriend );
58     
59   void SetNclustersTPC(UInt_t sector, Int_t occupancy ) { if (sector<72) fNclustersTPC[sector]=occupancy; }
60   void SetNclustersTPCused(UInt_t sector, Int_t occupancy ) {if (sector<72) fNclustersTPCused[sector]=occupancy; }
61
62   Int_t SetTracksStart( AliFlatESDFriendTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem );
63   void  SetTracksEnd( Int_t nTracks, Int_t nTrackEntries, size_t tracksSize );
64
65   // other methods
66
67   const AliFlatESDFriendTrack  *GetFlatTrack( Int_t i ) const { 
68     const Long64_t *table = reinterpret_cast<const Long64_t*> (fContent + fTrackTablePointer);
69     if( i<0 || i>fNTracks || table[i]<0 ) return NULL;
70     return reinterpret_cast<const AliFlatESDFriendTrack*>( fContent + table[i] );
71   }
72  
73   const AliFlatESDFriendTrack  *GetFlatTrackEntry( Int_t i ) const { 
74     if( i<0 || i>fNTrackEntries ) return NULL;
75     return reinterpret_cast<const AliFlatESDFriendTrack*>( fContent + i );
76   }
77
78   // -- Size methods
79
80   ULong64_t  GetSize()  const { return fContent - reinterpret_cast<const Byte_t*>(this) + fContentSize; }
81
82
83 private: 
84
85   AliFlatESDFriend(const AliFlatESDFriend&);
86   AliFlatESDFriend& operator=(const AliFlatESDFriend& );  
87
88   AliFlatESDFriendTrack  *GetFlatTrackNonConst( Int_t i ){ 
89     const Long64_t *table = reinterpret_cast<const Long64_t*> (fContent + fTrackTablePointer);
90     if( i<0 || i>fNTracks || table[i]<0 ) return NULL;
91     return reinterpret_cast<AliFlatESDFriendTrack*>( fContent + table[i] );
92   }
93
94   AliFlatESDFriendTrack  *GetFlatTrackEntryNonConst( Int_t i ){ 
95     if( i<0 || i>fNTrackEntries ) return NULL;
96     return reinterpret_cast< AliFlatESDFriendTrack*>( fContent + i );
97   }
98
99   size_t fContentSize;     // Size of fContent
100   UInt_t fBitFlags; // bit flags
101   Int_t fNTracks;                   // Number of tracks in vector
102   Int_t fNTrackEntries;             // Number of non-empty track friends in vector
103   Int_t fNclustersTPC[72]; //cluster occupancy per sector per sector
104   Int_t fNclustersTPCused[72]; //number of clusters used in tracking per sector
105  
106   // Pointers to specific data in fContent
107   
108   size_t fTrackTablePointer;     // position of the first track in fContent
109   size_t fTracksPointer;         // position of the first track in fContent
110
111   // -- Variable Size Object
112
113   Byte_t fContent[1];                  // Variale size object, which contains all data
114
115   ClassDef(AliFlatESDFriend,0)
116 };
117
118
119 inline AliFlatESDFriend::AliFlatESDFriend() 
120 :
121   fContentSize(0),
122   fBitFlags(0),
123   fNTracks(0),
124   fNTrackEntries(0),
125   fTrackTablePointer(0),
126   fTracksPointer(0)
127 {
128   // Default constructor
129   Reset();
130 }
131
132 inline void AliFlatESDFriend::Reset() 
133 {
134   fBitFlags = 0;
135   fNTracks = 0;
136   fNTrackEntries = 0; 
137   fTrackTablePointer = 0;
138   fTracksPointer = 0;
139   for( int i=0; i<72; i++ ){
140     fNclustersTPC[i]=0;
141     fNclustersTPCused[i]=0;
142   }
143   // We set size of the fContent array such, that it reaches the end of the AliFlatESDFriend structure. 
144   // To be sure that actual GetSize() is always >= size of the structure. 
145   // First, it makes the memory alignment better. Second, just for a case..
146   fContentSize = sizeof(AliFlatESDFriend) - (fContent - reinterpret_cast<const Byte_t*>(this));
147   for( UInt_t i=0; i<fContentSize; i++ ) fContent[i]=0;
148 }
149  
150 #pragma GCC diagnostic ignored "-Weffc++" 
151 inline AliFlatESDFriend::AliFlatESDFriend(AliVConstructorReinitialisationFlag f)
152 :
153   AliVfriendEvent(f)
154 {
155   //special constructor, used to restore the vtable pointer
156   for( int i=0; i<fNTrackEntries; i++ ){
157     AliFlatESDFriendTrack  *tr = GetFlatTrackEntryNonConst(i);
158     if( tr ) tr->Reinitialize();
159   }
160 }
161 #pragma GCC diagnostic warning "-Weffc++" 
162
163
164 inline Int_t AliFlatESDFriend::SetTracksStart( AliFlatESDFriendTrack* &t, Long64_t* &table, Int_t nTracks, size_t freeMem)
165 {
166   fNTracks = 0;
167   fNTrackEntries = 0;
168   if( nTracks*sizeof(Long64_t)  > freeMem ) return -1;
169   fTrackTablePointer = fContentSize;
170   fContentSize += nTracks*sizeof(Long64_t);
171   fTracksPointer = fContentSize;
172   table = reinterpret_cast< Long64_t* >( fContent + fTrackTablePointer );
173   t = reinterpret_cast< AliFlatESDFriendTrack* >( fContent + fTracksPointer );
174   return 0;
175 }
176
177 inline void AliFlatESDFriend::SetTracksEnd( Int_t nTracks, Int_t nTrackEntries, size_t tracksSize )
178 {
179   if( nTracks<0 ) return;
180   Long64_t *table = reinterpret_cast< Long64_t*> (fContent + fTrackTablePointer);
181   for( int i=0; i<nTracks; i++ ) table[i]+=fTracksPointer;
182   fNTracks = nTracks;
183   fNTrackEntries = nTrackEntries;
184   fContentSize += tracksSize;
185 }
186
187 #endif