#ifndef ALIHLTTRACKGEOMETRY_H
#define ALIHLTTRACKGEOMETRY_H
#include <vector>
#include <TObject.h>
#include "AliHLTLogging.h"
#include "AliHLTDataTypes.h"
#include "AliHLTStdIncludes.h"
#include "AliHLTExternalTrackParam.h"
#include "AliHLTIndexGrid.h"
class AliHLTGlobalBarrelTrack;
class AliHLTSpacePointContainer;
class TH2;
class AliHLTTrackGeometry : public TObject, public AliHLTLogging
{
public:
AliHLTTrackGeometry();
AliHLTTrackGeometry(const AliHLTTrackGeometry&);
AliHLTTrackGeometry& operator=(const AliHLTTrackGeometry&);
~AliHLTTrackGeometry();
typedef AliHLTIndexGrid<int, AliHLTUInt32_t> AliHLTTrackGrid;
void SetTrackId(int trackId) {fTrackId=trackId;}
int GetTrackId() const {return fTrackId;}
enum {
kLower = 0,
kUpper = 1,
kBoundsDimension
};
class AliHLTTrackPlane {
public:
AliHLTTrackPlane(AliHLTUInt32_t id, float alpha, float r, float theta)
: fId(id), fAlpha(alpha), fR(r), fTheta(theta), fBoundsU(), fBoundsV() {
fBoundsU[kLower]=-5.0; fBoundsU[kUpper]=5.0; fBoundsV[kLower]=-5.0; fBoundsV[kUpper]=5.0;
}
virtual ~AliHLTTrackPlane() {}
AliHLTUInt32_t GetId() const {return fId;}
float GetPlaneAlpha() const {return fAlpha;}
float GetPlaneR() const {return fR;}
float GetPlaneTheta() const {return fTheta;}
void SetBoundsU(const float bounds[kBoundsDimension]) {
fBoundsU[kLower]=bounds[kLower]; fBoundsU[kUpper]=bounds[kUpper];
}
void SetBoundsV(const float bounds[kBoundsDimension]) {
fBoundsV[kLower]=bounds[kLower]; fBoundsV[kUpper]=bounds[kUpper];
}
bool CheckBounds(float u, float v) const {
return (u>=fBoundsU[kLower]) && (u<=fBoundsU[kUpper])
&& (v>=fBoundsV[kLower]) && (v<=fBoundsV[kUpper]);
}
private:
AliHLTTrackPlane();
AliHLTUInt32_t fId;
float fAlpha;
float fR;
float fTheta;
float fBoundsU[kBoundsDimension];
float fBoundsV[kBoundsDimension];
};
class AliHLTTrackPlaneYZ : public AliHLTTrackPlane {
public:
AliHLTTrackPlaneYZ(AliHLTUInt32_t id, float alpha, float r)
: AliHLTTrackPlane(id, alpha, r, 0.0) {}
~AliHLTTrackPlaneYZ() {}
private:
AliHLTTrackPlaneYZ();
};
struct AliHLTTrackSpacepoint {
AliHLTTrackSpacepoint(AliHLTUInt32_t id, float dU=-1000., float dV=-1000.)
: fId(id), fdU(dU), fdV(dV) {}
int SetResidual(int coordinate, float value) {
if (coordinate==0) fdU=value;
else if (coordinate==1) fdV=value;
return 0;
}
float GetResidual(int coordinate) const {
if (coordinate==0) return fdU;
else if (coordinate==1) return fdV;
return -1000.;
}
AliHLTUInt32_t fId;
float fdU;
float fdV;
};
class AliHLTTrackPoint {
public:
AliHLTTrackPoint(AliHLTUInt32_t id, float u, float v)
: fId(id), fU(u), fV(v), fSpacePoints() {}
AliHLTTrackPoint(const AliHLTTrackPoint& src)
: fId(src.fId), fU(src.fU), fV(src.fV), fSpacePoints(src.fSpacePoints) {}
AliHLTTrackPoint& operator=(const AliHLTTrackPoint& src) {
if (this!=&src) {fId=src.fId; fU=src.fU; fV=src.fV; fSpacePoints=src.fSpacePoints;}
return *this;
}
~AliHLTTrackPoint() {}
bool operator==(const AliHLTTrackPoint& point) const {
return point.fId==fId;
}
bool operator==(AliHLTUInt32_t id) const {
return id==fId;
}
AliHLTUInt32_t GetId() const {return fId;}
float GetU() const {return fU;}
float GetV() const {return fV;}
bool HaveAssociatedSpacePoint() const {
return fSpacePoints.size()>0;
}
int AddAssociatedSpacePoint(AliHLTUInt32_t spacepointId, float dU=-1000., float dV=-1000.) {
fSpacePoints.push_back(AliHLTTrackSpacepoint(spacepointId, dU, dV));
return 0;
}
const vector<AliHLTTrackSpacepoint>& GetSpacepoints() const {return fSpacePoints;}
vector<AliHLTTrackSpacepoint>& GetSpacepoints() {return fSpacePoints;}
int SetResidual(AliHLTUInt32_t id, int coordinate, float value) {
for (unsigned i=0; i<fSpacePoints.size(); i++) {
if (fSpacePoints[i].fId!=id) continue;
return fSpacePoints[i].SetResidual(coordinate, value);
}
return -ENOENT;
}
private:
AliHLTTrackPoint();
AliHLTUInt32_t fId;
float fU;
float fV;
vector<AliHLTTrackSpacepoint> fSpacePoints;
};
virtual float GetPlaneAlpha(AliHLTUInt32_t planeId) const = 0;
virtual float GetPlaneR(AliHLTUInt32_t planeId) const = 0;
virtual float GetPlaneTheta(AliHLTUInt32_t planeId) const = 0;
virtual bool CheckBounds(AliHLTUInt32_t planeId, float u, float v) const =0;
virtual int CalculateTrackPoints(const AliHLTExternalTrackParam& track) = 0;
virtual int CalculateTrackPoints(AliHLTGlobalBarrelTrack& track) = 0;
int AssociateSpacePoints(AliHLTSpacePointContainer& points);
int AssociateSpacePoints(const AliHLTUInt32_t* trackpoints, AliHLTUInt32_t nofPoints, AliHLTSpacePointContainer& points);
int AssociateUnusedSpacePoints(AliHLTSpacePointContainer& points);
virtual int FindMatchingTrackPoint(AliHLTUInt32_t spacepointId, float spacepoint[3], AliHLTUInt32_t& planeId) = 0;
virtual int RegisterTrackPoints(AliHLTTrackGrid* pGrid) const;
virtual int FillTrackPoints(AliHLTTrackGrid* pGrid) const;
const AliHLTTrackPoint* GetTrackPoint(AliHLTUInt32_t id) const;
AliHLTTrackPoint* GetTrackPoint(AliHLTUInt32_t id);
virtual AliHLTSpacePointContainer* ConvertToSpacePoints() const {return ConvertToSpacePoints(false);}
virtual AliHLTSpacePointContainer* ConvertToSpacePoints(bool bAssociated) const;
int SetAssociatedSpacePoint(AliHLTUInt32_t planeId, AliHLTUInt32_t spacepointId, int status, float fdU=0.0, float fdV=0.0);
int GetAssociatedSpacePoint(AliHLTUInt32_t planeId, AliHLTUInt32_t& spacepointId) const;
int FillResidual(int coordinate, TH2* histo) const;
void SetVerbosity(int verbosity) {fVerbosity=verbosity;}
int GetVerbosity() const {return fVerbosity;}
virtual void Clear(Option_t * ="");
virtual void Print(Option_t *option="") const;
virtual void Print(ostream& out, Option_t *option="") const;
virtual void Draw(Option_t *option="");
protected:
int AddTrackPoint(const AliHLTTrackPoint& point, AliHLTUInt32_t selectionMask=kAliHLTVoidDataSpec);
const vector<AliHLTTrackPoint>& TrackPoints() const {return fTrackPoints;}
private:
vector<AliHLTTrackPoint> fTrackPoints;
vector<AliHLTUInt32_t> fSelectionMasks;
int fTrackId;
int fVerbosity;
ClassDef(AliHLTTrackGeometry, 0)
};
ostream& operator<<(ostream &out, const AliHLTTrackGeometry& c);
#endif
AliHLTTrackGeometry.h:100 AliHLTTrackGeometry.h:101 AliHLTTrackGeometry.h:102 AliHLTTrackGeometry.h:103 AliHLTTrackGeometry.h:104 AliHLTTrackGeometry.h:105 AliHLTTrackGeometry.h:106 AliHLTTrackGeometry.h:107 AliHLTTrackGeometry.h:108 AliHLTTrackGeometry.h:109 AliHLTTrackGeometry.h:110 AliHLTTrackGeometry.h:111 AliHLTTrackGeometry.h:112 AliHLTTrackGeometry.h:113 AliHLTTrackGeometry.h:114 AliHLTTrackGeometry.h:115 AliHLTTrackGeometry.h:116 AliHLTTrackGeometry.h:117 AliHLTTrackGeometry.h:118 AliHLTTrackGeometry.h:119 AliHLTTrackGeometry.h:120 AliHLTTrackGeometry.h:121 AliHLTTrackGeometry.h:122 AliHLTTrackGeometry.h:123 AliHLTTrackGeometry.h:124 AliHLTTrackGeometry.h:125 AliHLTTrackGeometry.h:126 AliHLTTrackGeometry.h:127 AliHLTTrackGeometry.h:128 AliHLTTrackGeometry.h:129 AliHLTTrackGeometry.h:130 AliHLTTrackGeometry.h:131 AliHLTTrackGeometry.h:132 AliHLTTrackGeometry.h:133 AliHLTTrackGeometry.h:134 AliHLTTrackGeometry.h:135 AliHLTTrackGeometry.h:136 AliHLTTrackGeometry.h:137 AliHLTTrackGeometry.h:138 AliHLTTrackGeometry.h:139 AliHLTTrackGeometry.h:140 AliHLTTrackGeometry.h:141 AliHLTTrackGeometry.h:142 AliHLTTrackGeometry.h:143 AliHLTTrackGeometry.h:144 AliHLTTrackGeometry.h:145 AliHLTTrackGeometry.h:146 AliHLTTrackGeometry.h:147 AliHLTTrackGeometry.h:148 AliHLTTrackGeometry.h:149 AliHLTTrackGeometry.h:150 AliHLTTrackGeometry.h:151 AliHLTTrackGeometry.h:152 AliHLTTrackGeometry.h:153 AliHLTTrackGeometry.h:154 AliHLTTrackGeometry.h:155 AliHLTTrackGeometry.h:156 AliHLTTrackGeometry.h:157 AliHLTTrackGeometry.h:158 AliHLTTrackGeometry.h:159 AliHLTTrackGeometry.h:160 AliHLTTrackGeometry.h:161 AliHLTTrackGeometry.h:162 AliHLTTrackGeometry.h:163 AliHLTTrackGeometry.h:164 AliHLTTrackGeometry.h:165 AliHLTTrackGeometry.h:166 AliHLTTrackGeometry.h:167 AliHLTTrackGeometry.h:168 AliHLTTrackGeometry.h:169 AliHLTTrackGeometry.h:170 AliHLTTrackGeometry.h:171 AliHLTTrackGeometry.h:172 AliHLTTrackGeometry.h:173 AliHLTTrackGeometry.h:174 AliHLTTrackGeometry.h:175 AliHLTTrackGeometry.h:176 AliHLTTrackGeometry.h:177 AliHLTTrackGeometry.h:178 AliHLTTrackGeometry.h:179 AliHLTTrackGeometry.h:180 AliHLTTrackGeometry.h:181 AliHLTTrackGeometry.h:182 AliHLTTrackGeometry.h:183 AliHLTTrackGeometry.h:184 AliHLTTrackGeometry.h:185 AliHLTTrackGeometry.h:186 AliHLTTrackGeometry.h:187 AliHLTTrackGeometry.h:188 AliHLTTrackGeometry.h:189 AliHLTTrackGeometry.h:190 AliHLTTrackGeometry.h:191 AliHLTTrackGeometry.h:192 AliHLTTrackGeometry.h:193 AliHLTTrackGeometry.h:194 AliHLTTrackGeometry.h:195 AliHLTTrackGeometry.h:196 AliHLTTrackGeometry.h:197 AliHLTTrackGeometry.h:198 AliHLTTrackGeometry.h:199 AliHLTTrackGeometry.h:200 AliHLTTrackGeometry.h:201 AliHLTTrackGeometry.h:202 AliHLTTrackGeometry.h:203 AliHLTTrackGeometry.h:204 AliHLTTrackGeometry.h:205 AliHLTTrackGeometry.h:206 AliHLTTrackGeometry.h:207 AliHLTTrackGeometry.h:208 AliHLTTrackGeometry.h:209 AliHLTTrackGeometry.h:210 AliHLTTrackGeometry.h:211 AliHLTTrackGeometry.h:212 AliHLTTrackGeometry.h:213 AliHLTTrackGeometry.h:214 AliHLTTrackGeometry.h:215 AliHLTTrackGeometry.h:216 AliHLTTrackGeometry.h:217 AliHLTTrackGeometry.h:218 AliHLTTrackGeometry.h:219 AliHLTTrackGeometry.h:220 AliHLTTrackGeometry.h:221 AliHLTTrackGeometry.h:222 AliHLTTrackGeometry.h:223 AliHLTTrackGeometry.h:224 AliHLTTrackGeometry.h:225 AliHLTTrackGeometry.h:226 AliHLTTrackGeometry.h:227 AliHLTTrackGeometry.h:228 AliHLTTrackGeometry.h:229 AliHLTTrackGeometry.h:230 AliHLTTrackGeometry.h:231 AliHLTTrackGeometry.h:232 AliHLTTrackGeometry.h:233 AliHLTTrackGeometry.h:234 AliHLTTrackGeometry.h:235 AliHLTTrackGeometry.h:236 AliHLTTrackGeometry.h:237 AliHLTTrackGeometry.h:238 AliHLTTrackGeometry.h:239 AliHLTTrackGeometry.h:240 AliHLTTrackGeometry.h:241 AliHLTTrackGeometry.h:242 AliHLTTrackGeometry.h:243 AliHLTTrackGeometry.h:244 AliHLTTrackGeometry.h:245 AliHLTTrackGeometry.h:246 AliHLTTrackGeometry.h:247 AliHLTTrackGeometry.h:248 AliHLTTrackGeometry.h:249 AliHLTTrackGeometry.h:250 AliHLTTrackGeometry.h:251 AliHLTTrackGeometry.h:252 AliHLTTrackGeometry.h:253 AliHLTTrackGeometry.h:254 AliHLTTrackGeometry.h:255 AliHLTTrackGeometry.h:256 AliHLTTrackGeometry.h:257 AliHLTTrackGeometry.h:258 AliHLTTrackGeometry.h:259 AliHLTTrackGeometry.h:260 AliHLTTrackGeometry.h:261 AliHLTTrackGeometry.h:262 AliHLTTrackGeometry.h:263 AliHLTTrackGeometry.h:264 AliHLTTrackGeometry.h:265 AliHLTTrackGeometry.h:266 AliHLTTrackGeometry.h:267 AliHLTTrackGeometry.h:268 AliHLTTrackGeometry.h:269 AliHLTTrackGeometry.h:270 AliHLTTrackGeometry.h:271 AliHLTTrackGeometry.h:272 AliHLTTrackGeometry.h:273 AliHLTTrackGeometry.h:274 AliHLTTrackGeometry.h:275 AliHLTTrackGeometry.h:276 AliHLTTrackGeometry.h:277 AliHLTTrackGeometry.h:278 AliHLTTrackGeometry.h:279 AliHLTTrackGeometry.h:280 AliHLTTrackGeometry.h:281 AliHLTTrackGeometry.h:282 AliHLTTrackGeometry.h:283 AliHLTTrackGeometry.h:284 AliHLTTrackGeometry.h:285 AliHLTTrackGeometry.h:286 AliHLTTrackGeometry.h:287 AliHLTTrackGeometry.h:288 AliHLTTrackGeometry.h:289 AliHLTTrackGeometry.h:290 AliHLTTrackGeometry.h:291 AliHLTTrackGeometry.h:292 AliHLTTrackGeometry.h:293 AliHLTTrackGeometry.h:294 AliHLTTrackGeometry.h:295 AliHLTTrackGeometry.h:296 AliHLTTrackGeometry.h:297 AliHLTTrackGeometry.h:298 AliHLTTrackGeometry.h:299 AliHLTTrackGeometry.h:300 AliHLTTrackGeometry.h:301 AliHLTTrackGeometry.h:302 AliHLTTrackGeometry.h:303