00001
00002
00003
00004
00005
00006
00007 #ifndef TRACKFIT_CIRCE_H
00008 #define TRACKFIT_CIRCE_H
00009 #include <vector>
00010 #include "Math/Minimizer.h"
00011 namespace recobase {
00012 class CellHit;
00013 class Prong;
00014 }
00015
00016 namespace trk
00017 {
00019 class Measurement {
00020 public:
00021 std::vector<const recobase::CellHit*> fHits;
00022 std::vector<double> fW;
00023 };
00024
00032 class Circe : public ROOT::Math::IMultiGenFunction {
00033 public:
00035 static const unsigned int kNmax = 20;
00036 public:
00037 Circe() { }
00038
00039 void SeedProngs(const Measurement* meas,
00040 unsigned int nprong,
00041 double* seed) const;
00042 double Fit(int nprog, const Measurement* m);
00043 void MakeProngs(std::vector<recobase::Prong>& prong);
00044
00045
00046 unsigned int NDim() const;
00047 double DoEval(const double* p) const;
00048 ROOT::Math::IMultiGenFunction* Clone() const;
00049
00050 private:
00051 const Measurement* fM;
00052 unsigned int fN;
00053 double fVtx[3];
00054 double fTheta[kNmax];
00055 double fPhi[kNmax];
00056 std::vector<int> fProngAssn;
00057 };
00058 }
00059
00060 #endif
00061