]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - HLT/global/AliFlatESDTrack.h
add a few methods in the v interface
[u/mrichter/AliRoot.git] / HLT / global / AliFlatESDTrack.h
index 570c72b244b160665f6a2e4002ea96285127356f..0e4c9bdaf05c7814f624059ba80a469874004a95 100644 (file)
@@ -17,107 +17,137 @@ Op - Track parameters estimated at the point of maximal radial coordinate reache
 */
 
 #include "Rtypes.h"
-
-#include "AliFlatTPCCluster.h"
+#include "AliVMisc.h"
+#include "AliVParticle.h"
 #include "AliFlatExternalTrackParam.h"
-#include "AliVVtrack.h"
 
 class AliESDtrack;
-class AliESDfriendTrack;
 class AliExternalTrackParam;
+class AliFlatESDTrack;
 
-//class AliFlatESDTrack: public AliVVtrack {
-class AliFlatESDTrack {
+class AliFlatESDTrack :public AliVTrack {
  public:
   // --------------------------------------------------------------------------------
   // -- Constructor / Destructors
-  AliFlatESDTrack();   
-  AliFlatESDTrack(const AliESDtrack* track, AliESDfriendTrack* friendTrack); 
-  ~AliFlatESDTrack();  
+
+  AliFlatESDTrack();
+  virtual ~AliFlatESDTrack() {}  
+
+  // constructor and method for reinitialisation of virtual table
+  AliFlatESDTrack( AliVConstructorReinitialisationFlag );
+  void Reinitialize() { new (this) AliFlatESDTrack( AliVReinitialize ); }
 
   // --------------------------------------------------------------------------------
-  // -- Fill / Set methods
-  Int_t FillExternalTrackParam( 
-                              const AliExternalTrackParam* refittedParam,
-                              const AliExternalTrackParam* innerParam,
-                              const AliExternalTrackParam* innerTPC,
-                              const AliExternalTrackParam* outerParam,
-                              const AliExternalTrackParam* constrainedParam,
-                              const AliExternalTrackParam* outerITSParam
-                            );
-
-  AliFlatTPCCluster *GetNextTPCClusterPointer(){ return GetTPCCluster(fNTPCClusters); }
-
-  void StoreLastTPCCluster(){  
-     ++fNTPCClusters;
-     fSize += sizeof(AliFlatTPCCluster);
-  }
 
+  // -- Set methods
+  Int_t SetFromESDTrack( const AliESDtrack* track );
+
+  Int_t SetExternalTrackParam( 
+                             const AliExternalTrackParam* refittedParam,
+                             const AliExternalTrackParam* innerParam,
+                             const AliExternalTrackParam* innerTPC,
+                             const AliExternalTrackParam* outerParam,
+                             const AliExternalTrackParam* constrainedParam,
+                             const AliExternalTrackParam* outerITSParam
+                              );
+
+  void SetNumberOfTPCClusters( Int_t nCl ) { fNTPCClusters = nCl; } 
   void SetNumberOfITSClusters( Int_t nCl ) { fNITSClusters = nCl; } 
 
-  Int_t Fill( const AliESDtrack* track, AliESDfriendTrack* friendTrack);
   
   // --------------------------------------------------------------------------------
   // -- Getter methods
-  AliFlatExternalTrackParam* GetTrackParamRefitted(){
-    return (fTrackParamMask & 0x1) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) : NULL;
-  } 
-
-  AliFlatExternalTrackParam* GetTrackParamIp() { 
-    return (fTrackParamMask & 0x2) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x1) : NULL;
-  } 
-
-  AliFlatExternalTrackParam* GetTrackParamTPCInner() { 
-    return (fTrackParamMask & 0x4) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x3) : NULL;
-  } 
-
-  AliFlatExternalTrackParam* GetTrackParamOp() {      
-    return (fTrackParamMask & 0x8) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x7) : NULL;
-  } 
 
-  AliFlatExternalTrackParam* GetTrackParamCp() {
-    return (fTrackParamMask & 0x10) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0xF) : NULL;
-  } 
-
-  AliFlatExternalTrackParam* GetTrackParamITSOut() {
-    return (fTrackParamMask & 0x20) ? reinterpret_cast<AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, 0x1F) : NULL;
-  } 
+  const AliFlatExternalTrackParam* GetFlatTrackParam()         const { return GetFlatParam( 0x0  ); }
+  const AliFlatExternalTrackParam* GetFlatTrackParamRefitted() const { return GetFlatParam( 0x1  ); }
+  const AliFlatExternalTrackParam* GetFlatTrackParamIp()       const { return GetFlatParam( 0x2  ); 
+  const AliFlatExternalTrackParam* GetFlatTrackParamTPCInner() const { return GetFlatParam( 0x4  ); } 
+  const AliFlatExternalTrackParam* GetFlatTrackParamOp()       const { return GetFlatParam( 0x8  ); }     
+  const AliFlatExternalTrackParam* GetFlatTrackParamCp()       const { return GetFlatParam( 0x10 ); }
+  const AliFlatExternalTrackParam* GetFlatTrackParamITSOut()   const { return GetFlatParam( 0x20 ); }
 
   // --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  
 
-  Int_t GetNumberOfTPCClusters() {
-    return fNTPCClusters;
-  } 
-  
-  AliFlatTPCCluster *GetTPCClusters() {
-    return reinterpret_cast< AliFlatTPCCluster*>(fContent + sizeof(AliFlatExternalTrackParam)*CountBits(fTrackParamMask));
-  } 
-  
-  AliFlatTPCCluster *GetTPCCluster(Int_t ind) {
-    return GetTPCClusters() + ind*sizeof(AliFlatTPCCluster);
-  }
-
-  Int_t GetNumberOfITSClusters() {
-    return fNITSClusters;
-  } 
-  
-  
+  Int_t GetNumberOfTPCClusters() const { return fNTPCClusters; } 
+  Int_t GetNumberOfITSClusters() const { return fNITSClusters; } 
+    
   // --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  --  
   
-  AliFlatESDTrack *GetNextTrack() {return reinterpret_cast<AliFlatESDTrack*>(fContent+fSize);}
-  
+  const AliFlatESDTrack *GetNextTrack() const { return reinterpret_cast<const AliFlatESDTrack*>(fContent+fContentSize); }
+  AliFlatESDTrack *GetNextTrackNonConst() { return reinterpret_cast<AliFlatESDTrack*>(fContent+fContentSize); }
   // --------------------------------------------------------------------------------
   // -- Size methods
-  static ULong64_t EstimateSize(Bool_t useESDFriends = kTRUE, Int_t nTPCClusters = 160 );
-         ULong64_t GetSize()  {return fContent -  reinterpret_cast<Byte_t*>(this) + fSize;}
+
+  static size_t EstimateSize(){
+    return sizeof(AliFlatESDTrack) + 6*sizeof(AliFlatExternalTrackParam);
+  }
+
+  size_t GetSize() const { return fContent -  reinterpret_cast<const Byte_t*>(this) + fContentSize; }
     
+  // -------------------------------------------------------------------------------
+  // the calibration interface methods:
+  Int_t GetTrackParam         ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x0  ); }
+  Int_t GetTrackParamRefitted ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x1  ); }
+  Int_t GetTrackParamIp       ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x2  ); }
+  Int_t GetTrackParamTPCInner ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x4  ); }
+  Int_t GetTrackParamOp       ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x8  ); }
+  Int_t GetTrackParamCp       ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x10 ); }
+  Int_t GetTrackParamITSOut   ( AliExternalTrackParam &p ) const { return GetExternalTrackParam( p, 0x20 ); }
+  UShort_t GetTPCNcls() const {return GetNumberOfTPCClusters(); }
+  Double_t GetPt() const {
+    const AliFlatExternalTrackParam *f = GetFlatTrackParam();
+    return (f) ?f->GetPt() : kVeryBig;
+  }
+  // -------------------------------------------------------------------------------
+
+  // ---------------------------------------------------------------------------------
+  // AliVParticle interface
+  virtual Double_t Pt() const {const AliFlatExternalTrackParam* p=GetFlatTrackParam(); return (p)?p->GetPt():kVeryBig;}
+  virtual Double_t GetTgl()  const {const AliFlatExternalTrackParam* p=GetFlatTrackParam(); return (p)?p->GetTgl():kVeryBig;}
+  virtual void GetImpactParameters(Float_t &xy,Float_t &z) const {xy=0.; z=0.;}
+  virtual Double_t Px() const {return 0.;}
+  virtual Double_t Py() const {return 0.;}
+  virtual Double_t Pz() const {return 0.;}
+  virtual Double_t P() const {return 0.;}
+  virtual Bool_t PxPyPz(Double_t*) const {return kFALSE;}
+  virtual Double_t Xv() const {return 0.;}
+  virtual Double_t Yv() const {return 0.;}
+  virtual Double_t Zv() const {return 0.;}
+  virtual Bool_t XvYvZv(Double_t*) const {return 0.;}
+  virtual Double_t OneOverPt() const {return 0.;}
+  virtual Double_t Phi() const {return 0.;}
+  virtual Double_t Theta() const {return 0.;}
+  virtual Double_t E() const {return 0.;}
+  virtual Double_t M() const {return 0.;}
+  virtual Double_t Eta() const {return 0.;}
+  virtual Double_t Y() const {return 0.;}
+  virtual Short_t Charge() const {return 0.;}
+  virtual Int_t GetLabel() const {return 0.;}
+  virtual Int_t PdgCode() const {return 0.;}
+  virtual const Double_t* PID() const {return NULL;} 
+  virtual Int_t    GetID() const {return 0.;}
+  virtual UChar_t  GetITSClusterMap() const {return 0.;}
+  virtual ULong_t  GetStatus() const {return 0.;}
+  virtual Bool_t   GetCovarianceXYZPxPyPz(Double_t cv[21]) const {if (cv[0]){}; return kFALSE;}
+  virtual Bool_t   PropagateToDCA(const AliVVertex* /*vtx*/, Double_t /*b*/, Double_t /*maxd*/, Double_t dz[2], Double_t covar[3]) {if (dz[0]==covar[3]){}; return kFALSE;}
+
  private:
+
   AliFlatESDTrack(const AliFlatESDTrack&);
   AliFlatESDTrack& operator=(const AliFlatESDTrack&);
 
+  const AliFlatExternalTrackParam* GetFlatParam( UShort_t flag ) const {
+    if( flag==0 ) return ( fTrackParamMask ) ? reinterpret_cast<const AliFlatExternalTrackParam*>(fContent) : NULL;
+    else return (fTrackParamMask & flag) ? reinterpret_cast<const AliFlatExternalTrackParam*>(fContent) + CountBits(fTrackParamMask, flag-1) : NULL;
+  }
+
+  Int_t GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag  ) const;
+
   Int_t FillExternalTrackParam(const AliExternalTrackParam* param, UShort_t flag);
 
-  UInt_t CountBits(Byte_t field, UInt_t mask = 0xFFFFFFFF);
+  static UInt_t CountBits(Byte_t field, UInt_t mask = 0xFFFFFFFF);
  
   // --------------------------------------------------------------------------------
   // -- Fixed size member objects
@@ -128,11 +158,51 @@ class AliFlatESDTrack {
   Int_t    fNITSClusters;                 // Number of ITS clusters in track
   // Bool_t   fMCLabels;
 
-  ULong64_t fSize;                      // Size of this object
+  ULong64_t fContentSize;                      // Size of this object
   
   // --------------------------------------------------------------------------------
   // -- Variable Size Object
   Byte_t fContent[1];                  // Variale size object, which contains all data
 
+  ClassDef(AliFlatESDTrack,0)
+
 };
+
+// _______________________________________________________________________________________________________
+inline AliFlatESDTrack::AliFlatESDTrack() :
+  fTrackParamMask(0),
+  fNTPCClusters(0),
+  fNITSClusters(0),
+  fContentSize(0)
+{
+  // Default constructor
+}
+
+inline AliFlatESDTrack::AliFlatESDTrack( AliVConstructorReinitialisationFlag )
+//  :
+//  fTrackParamMask(fTrackParamMask ),
+//  fNTPCClusters( fNTPCClusters ),
+//  fNITSClusters( fNITSClusters ),
+//  fContentSize( fContentSize )
+{
+  // Constructor for reinitialisation of vtable
+}
+
+inline UInt_t AliFlatESDTrack::CountBits(Byte_t field, UInt_t mask) {
+  // Count bits in field
+  UInt_t count = 0, reg = field & mask;
+  for (; reg; count++) reg &= reg - 1; 
+  return count;
+}
+
+inline Int_t AliFlatESDTrack::GetExternalTrackParam( AliExternalTrackParam &p, UShort_t flag) const
+{
+  // Get external track parameters  
+  const AliFlatExternalTrackParam *f = GetFlatParam ( flag );
+  if( !f ) return -1;
+  f->GetExternalTrackParam( p );
+  return 0;
+}
+
+
 #endif