96 |
|
class MultiVertexFitter { |
97 |
|
|
98 |
|
public: |
99 |
+ |
|
100 |
|
//-------------------------------------------------------------------------------------------- |
101 |
|
// Enumerations |
102 |
|
//-------------------------------------------------------------------------------------------- |
103 |
< |
enum vertexNumber { PRIMARY_VERTEX,VERTEX_1,VERTEX_2,VERTEX_3,VERTEX_4,VERTEX_5,VERTEX_6 }; |
103 |
> |
enum vertexNumber { PRIMARY_VERTEX,VERTEX_1 }; |
104 |
|
enum vertexIndex { X_INDEX=0, Y_INDEX, Z_INDEX, P1_INDEX, P2_INDEX }; |
105 |
|
enum trackIndex { CURVATURE_INDEX=0, PHI_INDEX, COTTH_INDEX }; |
106 |
|
|
236 |
|
// return decay length |
237 |
|
float getDecayLength(vertexNumber nv, vertexNumber mv, const Hep3Vector& dir, |
238 |
|
float& dlerr) const; |
239 |
+ |
float getDecayLength(vertexNumber nv, vertexNumber mv, const ThreeVector& dir, |
240 |
+ |
float& dlerr) const; |
241 |
+ |
float getZDecayLength(vertexNumber nv, vertexNumber mv, |
242 |
+ |
const Hep3Vector& dir, float& dlerr) const; |
243 |
+ |
float getZDecayLength(vertexNumber nv, vertexNumber mv, |
244 |
+ |
const ThreeVector& dir, float& dlerr) const; |
245 |
+ |
float getImpactPar(vertexNumber prdV, vertexNumber dcyV, |
246 |
+ |
const Hep3Vector &v, float &dxyerr) const; |
247 |
+ |
float getImpactPar(vertexNumber prdV, vertexNumber dcyV, |
248 |
+ |
const ThreeVector &v, float &dxyerr) const; |
249 |
|
float get_dr(vertexNumber nv, vertexNumber mv, float& drerr) const; |
250 |
|
float get_dz(vertexNumber nv, vertexNumber mv, float& dzerr) const; |
251 |
|
// return location of vertex |
268 |
|
allocateVertexNumber(); |
269 |
|
void resetAllocatedVertexNumber(); |
270 |
|
|
271 |
< |
// Accessors for getting information relative to ijk errors Get the error code from the three ijk |
272 |
< |
// indexes into the argument variables |
271 |
> |
// Accessors for getting information relative to ijk errors get the error code from the three |
272 |
> |
// ijk indexes into the argument variables |
273 |
|
void getIJKErr(int& err0, int& err1, int& err2) const; |
274 |
|
// Return each error code from the three ijk indexes |
275 |
|
int getIJKErr0() const; |
276 |
|
int getIJKErr1() const; |
277 |
|
int getIJKErr2() const; |
278 |
|
|
279 |
< |
// Get the track-id of the track causing a fatal error as indicated by the corresponding ijk error |
279 |
> |
// Get track-id of the track causing a fatal error as indicated by the corresponding ijk error |
280 |
|
int getErrTrackId() const; |
281 |
|
|
282 |
|
// Set new track reference point |
288 |
|
friend std::ostream& operator << (std::ostream& os, const MultiVertexFitter& vfit); |
289 |
|
|
290 |
|
protected: |
291 |
< |
std::string _expert; // string: name and email of MultiVertexFitter expert |
291 |
> |
std::string _expert; // string: name, email of MultiVertexFitter expert |
292 |
|
int _stat; // status returned from fit. |
293 |
|
|
294 |
< |
static const int _maxvtx = CTVMFT_MAXVTX; // 6; // Maximum number of vertices |
295 |
< |
static const int _maxmcn = CTVMFT_MAXMCN; // 4; // Maximum number of mass constraints |
296 |
< |
static const int _maxtrk = CTVMFT_MAXTRK; // 50; // Maximum number of tracks |
297 |
< |
static const int _maxitr = CTVMFT_MAXITR; // 10; // Maximum number of iteration steps |
294 |
> |
static const int _maxvtx = CTVMFT_MAXVTX; // maximum number of vertices |
295 |
> |
static const int _maxmcn = CTVMFT_MAXMCN; // maximum number of mass constraints |
296 |
> |
static const int _maxtrk = CTVMFT_MAXTRK; // maximum number of tracks |
297 |
> |
static const int _maxitr = CTVMFT_MAXITR; // maximum number of iteration steps |
298 |
|
static const int _maxdim = 5*(CTVMFT_MAXVTX+1)+3*CTVMFT_MAXTRK+CTVMFT_MAXMCN; |
299 |
|
|
300 |
|
// FIDDLE must have access to MultiVertexFitter's (other) protected data like _maxvtx, etc. It |
406 |
|
//-------------------------------------------------------------------------------------------- |
407 |
|
// Data members of class |
408 |
|
//-------------------------------------------------------------------------------------------- |
409 |
< |
double _bField; // B field in Tesla |
409 |
> |
double _bField; // B field in Tesla |
410 |
|
|
411 |
< |
int _currentAllocatedVertexNumber; //index to enum vertexNumber |
412 |
< |
ThreeVector _referencePoint; //reference point of track |
413 |
< |
Hep3Vector _primaryVertex; //primary vertex relative to "referencePoint" |
414 |
< |
Hep3Vector _cdfPrimaryVertex; //primary vertex in CDF coordinate system |
415 |
< |
bool _extrapolateTrackErrors; //extrapolate track errors to point _referencePoint |
411 |
> |
int _currentAllocatedVertexNumber; // index to enum vertexNumber |
412 |
> |
ThreeVector _referencePoint; // reference point of track |
413 |
> |
Hep3Vector _primaryVertex; // primary vertex relative to _referencePoint |
414 |
> |
Hep3Vector _cdfPrimaryVertex; // primary vertex in CDF coordinate system |
415 |
> |
bool _extrapolateTrackErrors; // extrapolate track errors to _referencePoint |
416 |
|
}; |
417 |
|
} |
418 |
|
|
425 |
|
vfit.print(os); |
426 |
|
return (os); |
427 |
|
} |
428 |
+ |
|
429 |
+ |
//-------------------------------------------------------------------------------------------------- |
430 |
|
inline |
431 |
|
void mithep::MultiVertexFitter::setExcuse() |
432 |
|
{ |
433 |
|
_fiddle.excuse = 1; // the default |
434 |
|
} |
435 |
+ |
|
436 |
+ |
//-------------------------------------------------------------------------------------------------- |
437 |
|
inline |
438 |
|
void mithep::MultiVertexFitter::setNoExcuse() |
439 |
|
{ |
440 |
|
_fiddle.excuse = 0; // crash on input error |
441 |
|
} |
442 |
+ |
|
443 |
+ |
//-------------------------------------------------------------------------------------------------- |
444 |
|
inline |
445 |
|
void mithep::MultiVertexFitter::setChisqMax(const float chisqmx) |
446 |
|
{ |