File indexing completed on 2024-09-07 04:34:25
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef FIT_H
0011 #define FIT_H
0012
0013 #define MAT_MESCHACH
0014 #ifdef MAT_MESCHACH
0015 #include "Alignment/CocoaFit/interface/MatrixMeschach.h"
0016 #endif
0017
0018 #include <vector>
0019
0020 #include "Alignment/CocoaUtilities/interface/CocoaGlobals.h"
0021 class Entry;
0022 class OpticalObject;
0023 #include "CLHEP/Vector/Rotation.h"
0024 class FittedEntriesSet;
0025 class ALIFileOut;
0026 #include "Alignment/CocoaModel/interface/Model.h"
0027
0028 typedef std::pair<ALIstring, ALIstring> pss;
0029
0030 enum FitQuality { FQsmallDistanceToMinimum, FQbigDistanceToMinimum, FQchiSquareWorsened };
0031
0032 class Fit {
0033 public:
0034
0035 Fit() {}
0036 ~Fit() {}
0037
0038
0039 static Fit& getInstance();
0040
0041
0042 static void startFit();
0043
0044
0045
0046
0047
0048 static void dumpFittedValues(ALIFileOut& fileout, ALIbool printErrors = true, ALIbool printOrig = true);
0049 static void dumpFittedValuesInAllAncestorFrames(ALIFileOut& fileout,
0050 ALIbool printErrors = true,
0051 ALIbool printOrig = true);
0052 static void dumpEntryAfterFit(
0053 ALIFileOut& fileout, const Entry* entry, double entryvalue, ALIbool printErrors = true, ALIbool printOrig = true);
0054 static void dumpEntryCorrelations(ALIFileOut& file);
0055 static void printCentreInOptOFrame(const OpticalObject* opto,
0056 const OpticalObject* optoAncestor,
0057 ALIFileOut& fileout,
0058 ALIbool printErrors = true,
0059 ALIbool printOrig = true);
0060 static void printRotationAnglesInOptOFrame(const OpticalObject* opto,
0061 const OpticalObject* optoAncestor,
0062 ALIFileOut& fileout,
0063 ALIbool printErrors = true,
0064 ALIbool printOrig = true);
0065
0066
0067 static void dumpMatrices();
0068
0069
0070
0071
0072 static ALIint findEntryFitPosition(const ALIstring& opto_name, const ALIstring& entry_name);
0073
0074
0075
0076
0077
0078
0079
0080 public:
0081
0082 static void setFittableEntries();
0083
0084 static ALIbool fitNextEvent(ALIuint& nEvent);
0085
0086 private:
0087 static void WriteVisualisationFiles();
0088
0089
0090
0091 static FitQuality fitParameters(const double daFactor);
0092
0093 static void redoMatrices();
0094
0095
0096 static void PropagateErrors();
0097
0098 public:
0099
0100 static void calculateSimulatedMeasurementsWithOriginalValues();
0101
0102 static ALIint noFitIterations() { return theNoFitIterations; }
0103
0104 private:
0105
0106 static void CreateMatrices();
0107
0108
0109
0110
0111 static void FillMatricesWithMeasurements();
0112
0113
0114
0115
0116 static void FillMatricesWithCalibratedParameters();
0117
0118
0119 static void setCorrelationsInWMatrix();
0120
0121
0122 static void setCorrelationFromParamFitted(const pss& entry1, const pss& entry2, ALIdouble correl);
0123 static void setCorrelationFromParamFitted(const ALIint fit_pos1, const ALIint fit_pos2, ALIdouble correl);
0124
0125
0126 static void multiplyMatrices();
0127
0128
0129 static ALIdouble GetSChi2(ALIbool useDa);
0130
0131
0132 static FitQuality getFitQuality(const ALIbool canBeGood = TRUE);
0133 static void evaluateFitQuality(const FitQuality fq, const double daFactor);
0134
0135
0136 static void addDaMatrixToEntries();
0137
0138
0139 static void substractLastDisplacementToEntries(const ALIdouble factor);
0140
0141 static void deleteMatrices();
0142
0143 static double getEntryValue(const Entry* entry);
0144
0145 public:
0146 static void PrintChi2(ALIdouble fit_quality, ALIbool isFirst);
0147
0148
0149 public:
0150
0151
0152 static ALIMatrix* GetAtWAMatrix() { return AtWAMatrix; }
0153
0154 private:
0155 static void CheckIfFitPossible();
0156 static int CheckIfMeasIsProportionalToAnother(ALIuint measNo);
0157 static std::string GetMeasurementName(int meas);
0158
0159
0160 private:
0161
0162 static Fit* instance;
0163
0164 static ALIMatrix* AMatrix;
0165 static ALIMatrix* AtMatrix;
0166 static ALIMatrix* WMatrix;
0167 static ALIMatrix* AtWAMatrix;
0168
0169 static ALIMatrix* DaMatrix;
0170
0171
0172
0173
0174 static ALIMatrix* yfMatrix;
0175
0176
0177 static ALIint _NoLinesA;
0178 static ALIint _NoColumnsA;
0179
0180
0181 private:
0182
0183
0184
0185
0186
0187
0188 static ALIint theMinimumEntryQuality;
0189
0190
0191 static ALIdouble thePreviousIterationFitQuality;
0192
0193
0194 static ALIdouble theFitQualityCut;
0195
0196
0197 static ALIdouble theRelativeFitQualityCut;
0198
0199
0200 static ALIint theNoFitIterations;
0201
0202 static ALIint MaxNoFitIterations;
0203
0204
0205 static ALIdouble theMinDaFactor;
0206
0207 public:
0208 static ALIuint nEvent;
0209 };
0210
0211 #endif