00001 #ifndef MILLEPEDE_H
00002 #define MILLEPEDE_H 1
00003
00011 #include <vector>
00012 #include "MdcAlignAlg/Alignment.h"
00013
00014 using namespace Alignment;
00015
00016 class Millepede{
00017 public:
00019 Millepede();
00020 ~Millepede( );
00021
00023 bool initialize();
00024
00025 bool InitMille(bool DOF[], double Sigm[], int nglo
00026 , int nloc, double startfact, int nstd
00027 , double res_cut, double res_cut_init);
00028 bool MakeGlobalFit(double par[], double error[], double pull[]);
00029 bool ParGlo(int index, double param);
00030 bool ParSig(int index, double sigma);
00031 bool ConstF(double dercs[], double rhs);
00032 bool EquLoc(double dergb[], double derlc[], double dernl[], double rmeas, double sigma);
00033 bool ZerLoc(double dergb[], double derlc[], double dernl[]);
00034 bool FitLoc(int n, double track_params[], int single_fit);
00035 int GetTrackNumber();
00036 void SetTrackNumber(int value);
00037
00038 private:
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 static const int mglobl = 400;
00052 static const int mlocal = 20;
00053 static const int mcs = 10;
00054 static const int mgl = 410;
00055
00056
00057
00058
00059 bool InitUn (double cutfac);
00060 bool PrtGlo();
00061
00062 double ErrPar(int i);
00063 double CorPar(int i, int j);
00064 int SpmInv(double v[][mgl], double b[], int n, double diag[], bool flag[]);
00065 int SpmInv(double v[][mlocal], double b[], int n, double diag[], bool flag[]);
00066 bool SpAVAt(double v[][mlocal], double a[][mlocal], double w[][mglobl], int n, int m);
00067 bool SpAX(double a[][mlocal], double x[], double y[], int n, int m);
00068 double chindl(int n, int nd);
00069
00070
00071
00072 double cgmat[mgl][mgl];
00073 double clmat[mlocal][mlocal];
00074 double clcmat[mglobl][mlocal];
00075 double corrm[mglobl][mglobl];
00076 double adercs[mcs][mglobl];
00077
00078
00079
00080
00081 double corrv[mglobl], psigm[mglobl], pparm[mglobl], dparm[mglobl];
00082 double scdiag[mglobl], blvec[mlocal], arhs[mcs], diag[mgl], bgvec[mgl];
00083
00084 int indgb[mglobl], nlnpa[mglobl], indnz[mglobl], indbk[mglobl], indlc[mlocal];
00085
00086 bool scflag[mglobl];
00087
00088 std::vector<int> indst;
00089 std::vector<double> arest;
00090 std::vector<double> arenl;
00091
00092 std::vector<int> storeind;
00093 std::vector<int> storeplace;
00094 std::vector<double> storeare;
00095 std::vector<double> storenl;
00096
00097 int store_row_size;
00098
00099 int m_track_number;
00100 double m_residual_cut_init;
00101 double m_residual_cut;
00102
00103 double cfactr, cfactref;
00104
00105 int itert, nst, nfl, ncs, nstdev;
00106 int loctot, locrej, nagb, nalc, nrank;
00107
00108 };
00109 #endif // MILLEPEDE_H