LCOV - code coverage report
Current view: top level - HLT/BASE - AliHLTTrackGeometry.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 26 3.8 %
Date: 2016-06-14 17:26:59 Functions: 1 32 3.1 %

          Line data    Source code
       1             : //-*- Mode: C++ -*-
       2             : // $Id$
       3             : #ifndef ALIHLTTRACKGEOMETRY_H
       4             : #define ALIHLTTRACKGEOMETRY_H
       5             : //* This file is property of and copyright by the ALICE HLT Project        * 
       6             : //* ALICE Experiment at CERN, All rights reserved.                         *
       7             : //* See cxx source for full Copyright notice                               *
       8             : 
       9             : /// @file   AliHLTTrackGeometry.h
      10             : /// @author Matthias Richter
      11             : /// @date   2011-05-20
      12             : /// @brief  Desciption of a track by a sequence of track points
      13             : ///
      14             : 
      15             : #include <vector>
      16             : #include <TObject.h>
      17             : #include "AliHLTLogging.h"
      18             : #include "AliHLTDataTypes.h"
      19             : #include "AliHLTStdIncludes.h"
      20             : #include "AliHLTExternalTrackParam.h"
      21             : #include "AliHLTIndexGrid.h"
      22             : 
      23             : class AliHLTGlobalBarrelTrack;
      24             : class AliHLTSpacePointContainer;
      25             : class TH2;
      26             : 
      27             : /**
      28             :  * @class AliHLTTrackGeometry
      29             :  * Description of a track by a sequence of track points given by the
      30             :  * intersection of the track with a set of planes.
      31             :  *
      32             :  * Each plane describes a local 2D coordinate system with origin at the
      33             :  * norm vector going through global {0,0,0}. The local coordinates u and v
      34             :  * correspond to global y and z at zero alpha and theta. In that case, r
      35             :  * corresponds to global x.
      36             :  *
      37             :  * Each plane is identified by
      38             :  * - rotation angle alpha in the global xy plane
      39             :  * - rotation angle theta
      40             :  * - unique 32bit AliHLTUInt32_t plane id
      41             :  *
      42             :  * The geometry of planes can be defined in child classes defining the
      43             :  * plane id.
      44             :  * @ingroup alihlt_base
      45             :  */
      46             : class AliHLTTrackGeometry : public TObject, public AliHLTLogging
      47             : {
      48             :  public:
      49             :   /// standard constructor
      50             :   AliHLTTrackGeometry();
      51             :   /// copy constructor
      52             :   AliHLTTrackGeometry(const AliHLTTrackGeometry&);
      53             :   /// assignment operator
      54             :   AliHLTTrackGeometry& operator=(const AliHLTTrackGeometry&);
      55             : 
      56             :   /// destructor
      57             :   ~AliHLTTrackGeometry();
      58             : 
      59             :   typedef AliHLTIndexGrid<int, AliHLTUInt32_t> AliHLTTrackGrid;
      60             : 
      61             :   /// set the track id
      62           0 :   void SetTrackId(int trackId) {fTrackId=trackId;}
      63             :   /// get the track id
      64           0 :   int GetTrackId() const {return fTrackId;}
      65             : 
      66             :   enum {
      67             :     kLower = 0,
      68             :     kUpper = 1,
      69             :     kBoundsDimension
      70             :   };
      71             : 
      72             :   /**
      73             :    * class AliHLTTrackPlane
      74             :    * Helper class to describe a plane
      75             :    */
      76             :   class AliHLTTrackPlane {
      77             :   public:
      78             :     AliHLTTrackPlane(AliHLTUInt32_t id, float alpha, float r, float theta) 
      79             :       : fId(id), fAlpha(alpha), fR(r), fTheta(theta), fBoundsU(), fBoundsV() {
      80             :       fBoundsU[kLower]=-5.0; fBoundsU[kUpper]=5.0; fBoundsV[kLower]=-5.0; fBoundsV[kUpper]=5.0;
      81             :     }
      82             :     virtual ~AliHLTTrackPlane() {}
      83             : 
      84             :     /// id of the plane
      85             :     AliHLTUInt32_t GetId() const {return fId;}
      86             :     /// alpha of the plane
      87             :     float GetPlaneAlpha() const {return fAlpha;}
      88             :     /// radial distance from global {0,0,0}
      89             :     float GetPlaneR() const {return fR;}
      90             :     /// theta of the plane
      91             :     float GetPlaneTheta() const {return fTheta;}
      92             : 
      93             :     // set bounds of u coordinate
      94             :     void SetBoundsU(const float bounds[kBoundsDimension]) {
      95             :       fBoundsU[kLower]=bounds[kLower]; fBoundsU[kUpper]=bounds[kUpper];
      96             :     }
      97             :     // set bounds of v coordinate
      98             :     void SetBoundsV(const float bounds[kBoundsDimension]) {
      99             :       fBoundsV[kLower]=bounds[kLower]; fBoundsV[kUpper]=bounds[kUpper];
     100             :     }
     101             : 
     102             :     bool CheckBounds(float u, float v) const {
     103             :       return (u>=fBoundsU[kLower]) && (u<=fBoundsU[kUpper]) 
     104             :         && (v>=fBoundsV[kLower]) && (v<=fBoundsV[kUpper]);
     105             :     }
     106             : 
     107             :   private:
     108             :     // standard constructor prohibited
     109             :     AliHLTTrackPlane();
     110             : 
     111             :     AliHLTUInt32_t fId; // unique id
     112             :     float fAlpha;       // alpha of the plane
     113             :     float fR;           // radial distance from global {0,0,0}
     114             :     float fTheta;       // theta of the plane
     115             :     float fBoundsU[kBoundsDimension];  // bounds u coordinate
     116             :     float fBoundsV[kBoundsDimension];  // bounds v coordinate
     117             :   };
     118             : 
     119             :   class AliHLTTrackPlaneYZ : public AliHLTTrackPlane {
     120             :   public:
     121             :     AliHLTTrackPlaneYZ(AliHLTUInt32_t id, float alpha, float r) 
     122             :       : AliHLTTrackPlane(id, alpha, r, 0.0) {}
     123             :     ~AliHLTTrackPlaneYZ() {}
     124             : 
     125             :   private:
     126             :     // standard constructor prohibited
     127             :     AliHLTTrackPlaneYZ();
     128             :   };
     129             : 
     130             :   struct AliHLTTrackSpacepoint {
     131             :     AliHLTTrackSpacepoint(AliHLTUInt32_t id, float dU=-1000., float dV=-1000.)
     132           0 :       : fId(id), fdU(dU), fdV(dV) {}
     133             : 
     134             :     int SetResidual(int coordinate, float value) {
     135             :       if (coordinate==0) fdU=value;
     136             :       else if (coordinate==1) fdV=value;
     137             :       return 0;
     138             :     }
     139             : 
     140             :     float GetResidual(int coordinate) const {
     141           0 :       if (coordinate==0) return fdU;
     142           0 :       else if (coordinate==1) return fdV;
     143           0 :       return -1000.;
     144           0 :     }
     145             : 
     146             :     AliHLTUInt32_t fId; // space point id
     147             :     float fdU;          // residual of the spacepoint
     148             :     float fdV;          // residual of the spacepoint
     149             :   };
     150             : 
     151             :   class AliHLTTrackPoint {
     152             :   public:
     153             :     // constructor
     154             :     AliHLTTrackPoint(AliHLTUInt32_t id, float u, float v)
     155           0 :       : fId(id), fU(u), fV(v), fSpacePoints() {}
     156             :     // copy constructor
     157             :     AliHLTTrackPoint(const AliHLTTrackPoint& src)
     158           0 :       : fId(src.fId), fU(src.fU), fV(src.fV), fSpacePoints(src.fSpacePoints) {}
     159             :     // assignment operator
     160             :     AliHLTTrackPoint& operator=(const AliHLTTrackPoint& src) {
     161           0 :       if (this!=&src) {fId=src.fId; fU=src.fU; fV=src.fV; fSpacePoints=src.fSpacePoints;}
     162           0 :       return *this;
     163             :     }
     164           0 :     ~AliHLTTrackPoint() {}
     165             : 
     166             :     bool operator==(const AliHLTTrackPoint& point) const {
     167           0 :       return point.fId==fId;
     168             :     }
     169             :     bool operator==(AliHLTUInt32_t id) const {
     170           0 :       return id==fId;
     171             :     }
     172             : 
     173             :     /// id of the plane
     174           0 :     AliHLTUInt32_t GetId() const {return fId;}
     175             :     /// u coordinate
     176           0 :     float GetU() const {return fU;}
     177             :     /// u coordinate
     178           0 :     float GetV() const {return fV;}
     179             : 
     180             :     /// check associate space point
     181             :     bool HaveAssociatedSpacePoint() const {
     182           0 :       return fSpacePoints.size()>0;
     183             :     }
     184             : 
     185             :     /// associate a space point
     186             :     int AddAssociatedSpacePoint(AliHLTUInt32_t spacepointId, float dU=-1000., float dV=-1000.) {
     187           0 :       fSpacePoints.push_back(AliHLTTrackSpacepoint(spacepointId, dU, dV));
     188           0 :       return 0;
     189             :     }
     190             : 
     191           0 :     const vector<AliHLTTrackSpacepoint>& GetSpacepoints() const {return fSpacePoints;}
     192             :     vector<AliHLTTrackSpacepoint>& GetSpacepoints() {return fSpacePoints;}
     193             : 
     194             :     int SetResidual(AliHLTUInt32_t id, int coordinate, float value) {
     195             :       for (unsigned i=0; i<fSpacePoints.size(); i++) {
     196             :         if (fSpacePoints[i].fId!=id) continue;
     197             :         return fSpacePoints[i].SetResidual(coordinate, value);
     198             :       }
     199             :       return -ENOENT;
     200             :     }
     201             : 
     202             :   private:
     203             :     // standard constructor prohibited
     204             :     AliHLTTrackPoint();
     205             : 
     206             :     AliHLTUInt32_t fId; // unique id
     207             :     float fU;           // u coordinate
     208             :     float fV;           // v coordinate
     209             :     vector<AliHLTTrackSpacepoint> fSpacePoints;
     210             :   };
     211             : 
     212             :   // interface to plane description
     213             : 
     214             :   /// alpha of the plane
     215             :   virtual float GetPlaneAlpha(AliHLTUInt32_t planeId) const = 0;
     216             :   /// radial distance from global {0,0,0}
     217             :   virtual float GetPlaneR(AliHLTUInt32_t planeId) const = 0;
     218             :   /// theta of the plane
     219             :   virtual float GetPlaneTheta(AliHLTUInt32_t planeId) const = 0;
     220             :   /// check bounds in u and v coordinate
     221             :   virtual bool CheckBounds(AliHLTUInt32_t planeId, float u, float v) const =0;
     222             : 
     223             :   // track interface
     224             : 
     225             :   /// calculate the track points, expects the global magnetic field to be initialized
     226             :   virtual int CalculateTrackPoints(const AliHLTExternalTrackParam& track) = 0;
     227             : 
     228             :   /// calculate the track points, expects the global magnetic field to be initialized
     229             :   virtual int CalculateTrackPoints(AliHLTGlobalBarrelTrack& track) = 0;
     230             : 
     231             :   /// associate all space points of the container to the calculated track points
     232             :   int AssociateSpacePoints(AliHLTSpacePointContainer& points);
     233             :   /// associate specified space points of the container to the calculated track points
     234             :   int AssociateSpacePoints(const AliHLTUInt32_t* trackpoints, AliHLTUInt32_t nofPoints, AliHLTSpacePointContainer& points);
     235             :   int AssociateUnusedSpacePoints(AliHLTSpacePointContainer& points);
     236             : 
     237             :   /// find the track point which can be associated to a spacepoint with coordinates and id
     238             :   virtual int FindMatchingTrackPoint(AliHLTUInt32_t spacepointId, float spacepoint[3], AliHLTUInt32_t& planeId) = 0;
     239             : 
     240             :   /// register track points in the index grid
     241             :   virtual int RegisterTrackPoints(AliHLTTrackGrid* pGrid) const;
     242             : 
     243             :   /// fill track points to index grid
     244             :   virtual int FillTrackPoints(AliHLTTrackGrid* pGrid) const;
     245             : 
     246             :   /// get track point of id
     247             :   const AliHLTTrackPoint* GetTrackPoint(AliHLTUInt32_t id) const;
     248             :   /// get track point of id
     249             :   AliHLTTrackPoint* GetTrackPoint(AliHLTUInt32_t id);
     250             : 
     251             :   /// create a collection of all points
     252           0 :   virtual AliHLTSpacePointContainer* ConvertToSpacePoints() const {return ConvertToSpacePoints(false);}
     253             :   virtual AliHLTSpacePointContainer* ConvertToSpacePoints(bool bAssociated) const;
     254             : 
     255             :   /// set the spacepoint associated with a track point
     256             :   /// @param  planeId       track point
     257             :   /// @param  spacepointId  space point id to be associated with track point
     258             :   /// @param  status        status flag
     259             :   /// @return 0 on success, -ENOENT planeId not found
     260             :   int SetAssociatedSpacePoint(AliHLTUInt32_t planeId, AliHLTUInt32_t spacepointId, int status, float fdU=0.0, float fdV=0.0);
     261             : 
     262             :   /// get the spacepoint associated with a track point
     263             :   /// @param  planeId       id of the track point
     264             :   /// @param  spacepointId  target to get the spacepoint data
     265             :   /// @return status flag if found, -ENOENT planeId not found, -ENODATA no associated spacepoint found
     266             :   int GetAssociatedSpacePoint(AliHLTUInt32_t planeId, AliHLTUInt32_t& spacepointId) const;
     267             : 
     268             :   // services
     269             : 
     270             :   int FillResidual(int coordinate, TH2* histo) const;
     271             : 
     272           0 :   void SetVerbosity(int verbosity) {fVerbosity=verbosity;}
     273           0 :   int GetVerbosity() const {return fVerbosity;}
     274             : 
     275             :   /// inherited from TObject: clear the object and reset pointer references
     276             :   virtual void Clear(Option_t * /*option*/ ="");
     277             : 
     278             :   /// inherited from TObject
     279             :   virtual void Print(Option_t *option="") const;
     280             : 
     281             :   virtual void Print(ostream& out, Option_t *option="") const;
     282             : 
     283             :   /// Inherited from TObject, draw the track points
     284             :   virtual void Draw(Option_t *option="");
     285             : 
     286             :  protected:
     287             :   int AddTrackPoint(const AliHLTTrackPoint& point, AliHLTUInt32_t selectionMask=kAliHLTVoidDataSpec);
     288             : 
     289           0 :   const vector<AliHLTTrackPoint>& TrackPoints() const {return fTrackPoints;}
     290             : 
     291             :  private:
     292             :   vector<AliHLTTrackPoint> fTrackPoints; // list of points
     293             :   vector<AliHLTUInt32_t> fSelectionMasks; // selection masks
     294             : 
     295             :   int fTrackId; // track id
     296             :   int fVerbosity; // verbosity
     297             : 
     298         126 :   ClassDef(AliHLTTrackGeometry, 0)
     299             : };
     300             : 
     301             : ostream& operator<<(ostream &out, const AliHLTTrackGeometry& c);
     302             : 
     303             : #endif

Generated by: LCOV version 1.11