LCOV - code coverage report
Current view: top level - HLT/TPCLib/transform - AliHLTTPCSpline2D3D.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 34 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 14 0.0 %

          Line data    Source code
       1             : #ifndef ALIHLTTPCSPLINE2D3D_H
       2             : #define ALIHLTTPCSPLINE2D3D_H
       3             : 
       4             : //* This file is property of and copyright by the ALICE HLT Project        * 
       5             : //* ALICE Experiment at CERN, All rights reserved.                         *
       6             : //* See cxx source for full Copyright notice                               *
       7             : 
       8             : /** @file   AliHLTTPCSpline2D3D.h
       9             :     @author Sergey Gorbunov
      10             :     @date   
      11             :     @brief
      12             : */
      13             : 
      14             : // see below for class documentation
      15             : // or
      16             : // refer to README to build package
      17             : // or
      18             : // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
      19             : 
      20             : #include"Rtypes.h"
      21             : 
      22             : class AliHLTTPCSpline2D3DObject;
      23             : 
      24             : /**
      25             :  * @class AliHLTTPCSpline2D3D
      26             :  *
      27             :  * The class presents spline interpolation for 2D->3D function (a,b)->(x,y,z)
      28             :  * 
      29             :  * @ingroup alihlt_tpc_components
      30             :  */
      31             : 
      32             : class AliHLTTPCSpline2D3D{
      33             :  public:
      34             :   /** standard constructor */    
      35             :   AliHLTTPCSpline2D3D();           
      36             : 
      37             :   /** constructor */    
      38             :   AliHLTTPCSpline2D3D(Float_t minA, Float_t  maxA, Int_t  nBinsA, Float_t  minB, Float_t  maxB,  Int_t  nBinsB);
      39             : 
      40             :   /** destructor */
      41             :   ~AliHLTTPCSpline2D3D();
      42             :  
      43             :   /** initialisation */
      44             :   void Init(Float_t minA, Float_t  maxA, Int_t  nBinsA, Float_t  minB, Float_t  maxB,  Int_t  nBinsB);
      45             :   
      46             :   /**  Filling of points */
      47             :   void Fill(void (*func)(Float_t a, Float_t b, Float_t xyz[] ) );
      48             :   /**  Filling of points */
      49             :   void Fill(Int_t ind, Float_t x, Float_t y, Float_t z);    
      50             :   /**  Filling of points */
      51             :   void Fill(Int_t ind, Float_t XYZ[]);    
      52             :   /**  Filling of points */
      53             :   void Fill(Int_t ind, Double_t  XYZ[]);    
      54             : 
      55             :   /**  Get A,B by the point index */
      56             :   void GetAB(Int_t ind, Float_t &A, Float_t &B) const ;
      57             :   
      58             :   /** Consolidate the map*/
      59             :   void Consolidate();
      60             : 
      61             :   /**  Get Interpolated value at A,B */
      62             :   void GetValue(Float_t A, Float_t B, Float_t XYZ[]) const ;  
      63             :  
      64             :   /**  Get Interpolated value at A,B */
      65             :   void GetValue(Float_t A, Float_t B, Double_t XYZ[]) const ;  
      66             : 
      67             :   /**  Get size of the grid */
      68             :   Int_t  GetMapSize() const ;
      69             : 
      70             :   /**  Get N of point on the grid */
      71             :   Int_t GetNPoints() const ;
      72             : 
      73             :   /** IO */
      74             : 
      75             :   size_t EstimateBufferSize() const ;
      76             : 
      77             :   Int_t WriteToBuffer( char *buf, size_t &size ) const;
      78             :   
      79             :   Int_t ReadFromBuffer( const char*buf, size_t &size );
      80             :  
      81             :   void WriteToObject( AliHLTTPCSpline2D3DObject &obj );
      82             :  
      83             :   void ReadFromObject( const AliHLTTPCSpline2D3DObject &obj );
      84             : 
      85           0 :   static Int_t Version() { return 0; }
      86             : 
      87             :  private:
      88             : 
      89             :   /** copy constructor prohibited */
      90             :   AliHLTTPCSpline2D3D(const AliHLTTPCSpline2D3D&);
      91             :   /** assignment operator prohibited */
      92             :   AliHLTTPCSpline2D3D& operator=(const AliHLTTPCSpline2D3D&);
      93             : 
      94             :   /** spline 3-st order,  4 points, da = a - point 1 */
      95             :   static  Float_t GetSpline3(Float_t v0, Float_t v1, Float_t v2, Float_t v3, Float_t da);
      96             :   static  Float_t GetSpline3(Float_t *v, Float_t da);
      97             : 
      98             :  /** spline 2-nd order, 3 points, da = a - point 1 */
      99             :   static  Float_t GetSpline2(Float_t *v, Float_t da);
     100             : 
     101             :   Int_t fNA; // N points A axis
     102             :   Int_t fNB; // N points A axis
     103             :   Int_t fN;  // N points total
     104             :   Float_t fMinA; // min A axis
     105             :   Float_t fMinB; // min B axis
     106             :   Float_t fStepA; // step between points A axis
     107             :   Float_t fStepB; // step between points B axis
     108             :   Float_t fScaleA; // scale A axis
     109             :   Float_t fScaleB; // scale B axis
     110             :   Float_t *fXYZ; // array of points, {X,Y,Z,0} values
     111             : };
     112             : 
     113             : inline AliHLTTPCSpline2D3D::AliHLTTPCSpline2D3D()
     114           0 :                            : fNA(0), fNB(0), fN(0), fMinA(0), fMinB(0), fStepA(0), fStepB(0), fScaleA(0), fScaleB(0),fXYZ(0)
     115           0 : {
     116           0 : }
     117             : 
     118             : inline AliHLTTPCSpline2D3D::AliHLTTPCSpline2D3D(Float_t minA, Float_t  maxA, Int_t  nBinsA, Float_t  minB, Float_t  maxB,  Int_t  nBinsB)
     119           0 :                            : fNA(0), fNB(0), fN(0), fMinA(0), fMinB(0), fStepA(0), fStepB(0), fScaleA(0), fScaleB(0),fXYZ(0)
     120           0 : {
     121           0 :   Init(minA, maxA, nBinsA, minB, maxB, nBinsB);
     122           0 : }
     123             : 
     124             : 
     125             : inline void AliHLTTPCSpline2D3D::Fill(Int_t ind, Float_t x, Float_t y, Float_t z)
     126             : {
     127           0 :   Int_t ind4 = ind*4;
     128           0 :   fXYZ[ind4] = x;
     129           0 :   fXYZ[ind4+1] = y;
     130           0 :   fXYZ[ind4+2] = z;
     131           0 : }
     132             : 
     133             : inline void AliHLTTPCSpline2D3D::Fill(Int_t ind, Float_t XYZ[] )
     134             : {
     135           0 :   Fill( ind, XYZ[0], XYZ[1], XYZ[2] );
     136           0 : }
     137             : 
     138             : inline void AliHLTTPCSpline2D3D::Fill(Int_t ind, Double_t  XYZ[] )
     139             : {
     140           0 :   Fill( ind, XYZ[0], XYZ[1], XYZ[2] );
     141           0 : }
     142             : 
     143             : inline void AliHLTTPCSpline2D3D::Fill(void (*func)(Float_t a, Float_t b, Float_t xyz[]) )
     144             : {
     145           0 :   for( Int_t i=0; i<GetNPoints(); i++){
     146           0 :     Float_t a, b, xyz[3];
     147           0 :     GetAB(i,a,b);
     148           0 :     (*func)(a,b,xyz);
     149           0 :     Fill(i,xyz);
     150           0 :   }
     151           0 : }
     152             : 
     153             : inline void AliHLTTPCSpline2D3D::GetAB(Int_t ind, Float_t &A, Float_t &B) const 
     154             : {
     155           0 :   A = fMinA + (ind / fNB)*fStepA;
     156           0 :   B = fMinB + (ind % fNB)*fStepB;
     157           0 : }
     158             : 
     159             : inline Int_t AliHLTTPCSpline2D3D::GetMapSize() const 
     160             : {
     161           0 :   return 4*sizeof(float)*fN; 
     162             : }
     163             : 
     164             : inline Int_t AliHLTTPCSpline2D3D::GetNPoints() const 
     165             : { 
     166           0 :   return fN; 
     167             : }
     168             : 
     169             : inline Float_t AliHLTTPCSpline2D3D::GetSpline3(Float_t v0, Float_t v1, Float_t v2, Float_t v3, Float_t x)
     170             : {
     171             :   Float_t dv = v2-v1;  
     172             :   Float_t z0 = 0.5f*(v2-v0);
     173             :   Float_t z1 = 0.5f*(v3-v1);
     174             :   return x*x*( (z1-dv + z0-dv)*(x-1) - (z0-dv) ) + z0*x + v1; 
     175             : }
     176             : 
     177             : inline Float_t AliHLTTPCSpline2D3D::GetSpline3(Float_t *v, Float_t x)
     178             : {
     179             :   return GetSpline3(v[0],v[1],v[2],v[3],x);
     180             : }
     181             : 
     182             : inline Float_t AliHLTTPCSpline2D3D::GetSpline2(Float_t *v, Float_t x)
     183             : {
     184             :   return 0.5*x*( ( v[0]+v[2] -v[1] -v[1] )*x + v[2]-v[0]) + v[1]; 
     185             : }
     186             : 
     187             : inline void AliHLTTPCSpline2D3D::GetValue(Float_t A, Float_t B, Double_t XYZ[]) const 
     188             : {
     189           0 :   float fxyz[3];
     190           0 :   GetValue(A,B,fxyz);
     191           0 :   for( Int_t i=0; i<3; i++ ) XYZ[i] = fxyz[i];
     192           0 : }
     193             : 
     194             : inline  size_t AliHLTTPCSpline2D3D::EstimateBufferSize() const 
     195             : { 
     196           0 :   return sizeof(Int_t)*3 + sizeof(Float_t)*(4+3*fN); 
     197             : }
     198             : 
     199             : 
     200             : 
     201             : #endif

Generated by: LCOV version 1.11