#include <Alignment/LaserAlignment/src/LASBarrelAlgorithm.h>
Public Member Functions | |
LASBarrelAlignmentParameterSet | CalculateParameters (LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &) |
The minimization of the equation system for the barrel. | |
void | Dump (void) |
Print resulting parameters to stdout and to a file - for debugging only. | |
LASBarrelAlgorithm () | |
Private Member Functions | |
void | ReadMisalignmentFromFile (const char *, LASGlobalData< LASCoordinateSet > &, LASGlobalData< LASCoordinateSet > &) |
allows to push in a simple simulated misalignment for quick internal testing purposes; overwrites LASGlobalData<LASCoordinateSet>& measuredCoordinates; call at beginning of LASBarrelAlgorithm::CalculateParameters method | |
void | ReadStartParametersFromFile (const char *, float[52]) |
this function is here only for debugging, don't use. | |
Private Attributes | |
TMinuit * | minuit |
Definition at line 23 of file LASBarrelAlgorithm.h.
LASBarrelAlgorithm::LASBarrelAlgorithm | ( | ) |
Definition at line 18 of file LASBarrelAlgorithm.cc.
References minuit.
00018 { 00019 00020 minuit = new TMinuit( 52 ); 00021 00022 }
LASBarrelAlignmentParameterSet LASBarrelAlgorithm::CalculateParameters | ( | LASGlobalData< LASCoordinateSet > & | measuredCoordinates, | |
LASGlobalData< LASCoordinateSet > & | nominalCoordinates | |||
) |
The minimization of the equation system for the barrel.
For documentation, please refer to the TkLasATModel TWiki page: TWiki > CMS Web > CMSTrackerLaserAlignmenSystem > TkLasBarrelAlgorithm > TkLasATModel
Definition at line 33 of file LASBarrelAlgorithm.cc.
References GenMuonPlsPt100GeV_cfg::cout, Dump(), lat::endl(), fcn(), LASBarrelAlignmentParameterSet::GetParameter(), minuit, and ReadMisalignmentFromFile().
Referenced by LaserAlignment::endJob().
00034 { 00035 00036 std::cout << " [LASBarrelAlgorithm::CalculateParameters] -- Starting." << std::endl; 00037 00038 00040 // for testing.. 00041 ReadMisalignmentFromFile( "misalign-var.txt", measuredCoordinates, nominalCoordinates ); 00043 00044 00045 // statics for minuit 00046 aMeasuredCoordinates = &measuredCoordinates; 00047 aNominalCoordinates = &nominalCoordinates; 00048 00049 // minimizer and variables for it 00050 minuit->SetFCN( fcn ); 00051 double arglist[10]; 00052 int _ierflg = 0; 00053 00054 // toggle minuit blabla 00055 arglist[0] = -1; 00056 minuit->mnexcm( "SET PRI", arglist, 1, _ierflg ); 00057 00058 // set par errors 00059 arglist[0] = 1; 00060 minuit->mnexcm( "SET ERR", arglist ,1, _ierflg ); 00061 00062 00063 // 00064 // define 52 parameters 00065 // 00066 00067 // start values: to be evacuated to cfg 00068 static float _vstart[52] = { 00069 0.00, 0.00, 0.0, 0.0, 0.0, 0.0, // subdet for TIB+ 00070 0.00, 0.00, 0.0, 0.0, 0.0, 0.0, // subdet for TIB- 00071 0.00, 0.00, 0.0, 0.0, 0.0, 0.0, // subdet for TOB+ 00072 0.00, 0.00, 0.0, 0.0, 0.0, 0.0, // subdet for TOB- 00073 0.00, 0.00, 0.0, 0.0, 0.0, 0.0, // subdet for TEC+ 00074 0.00, 0.00, 0.0, 0.0, 0.0, 0.0, // subdet for TEC- 00075 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, // beams 0-3 00076 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 // beams 4-7 00077 }; 00078 00079 00081 // ReadStartParametersFromFile( "startParameters.txt", _vstart ); // debug 00083 00084 00085 // step sizes: to be tuned, to be evacuated to cfg 00086 static float _vstep[52] = { 00087 0.0001, 0.0001, 0.1, 0.1, 0.1, 0.1, // subdet for TIB+ 00088 0.0001, 0.0001, 0.1, 0.1, 0.1, 0.1, // subdet for TIB- 00089 0.0001, 0.0001, 0.1, 0.1, 0.1, 0.1, // subdet for TOB+ 00090 0.0001, 0.0001, 0.1, 0.1, 0.1, 0.1, // subdet for TOB- 00091 0.0001, 0.0001, 0.1, 0.1, 0.1, 0.1, // subdet for TEC+ 00092 0.0001, 0.0001, 0.1, 0.1, 0.1, 0.1, // subdet for TEC- 00093 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, // beams 0-3 00094 0.0001, 0.0001, 0.0001, 0.0001, 0.1000, 0.0001, 0.0001, 0.0001 // beams 4-7 00095 }; 00096 00097 00098 // subdetector parameters for TIB+: 00099 00100 // rotation around z of first end face 00101 minuit->mnparm( 0, "subRot1TIB+", _vstart[0], _vstep[0], 0, 0, _ierflg ); 00102 // rotation around z of second end face 00103 minuit->mnparm( 1, "subRot2TIB+", _vstart[1], _vstep[1], 0, 0, _ierflg ); 00104 // translation along x of first end face 00105 minuit->mnparm( 2, "subTransX1TIB+", _vstart[2], _vstep[2], 0, 0, _ierflg ); 00106 // translation along x of second end face 00107 minuit->mnparm( 3, "subTransX2TIB+", _vstart[3], _vstep[3], 0, 0, _ierflg ); 00108 // translation along y of first end face 00109 minuit->mnparm( 4, "subTransY1TIB+", _vstart[4], _vstep[4], 0, 0, _ierflg ); 00110 // translation along y of second end face 00111 minuit->mnparm( 5, "subTransY2TIB+", _vstart[5], _vstep[5], 0, 0, _ierflg ); 00112 00113 // subdetector parameters for TIB-: 00114 00115 // rotation around z of first end face 00116 minuit->mnparm( 6, "subRot1TIB-", _vstart[6], _vstep[6], 0, 0, _ierflg ); 00117 // rotation around z of second end face 00118 minuit->mnparm( 7, "subRot2TIB-", _vstart[7], _vstep[7], 0, 0, _ierflg ); 00119 // translation along x of first end face 00120 minuit->mnparm( 8, "subTransX1TIB-", _vstart[8], _vstep[8], 0, 0, _ierflg ); 00121 // translation along x of second end face 00122 minuit->mnparm( 9, "subTransX2TIB-", _vstart[9], _vstep[9], 0, 0, _ierflg ); 00123 // translation along y of first end face 00124 minuit->mnparm( 10, "subTransY1TIB-", _vstart[10], _vstep[10], 0, 0, _ierflg ); 00125 // translation along y of second end face 00126 minuit->mnparm( 11, "subTransY2TIB-", _vstart[11], _vstep[11], 0, 0, _ierflg ); 00127 00128 // subdetector parameters for TOB+: 00129 00130 // rotation around z of first end face 00131 minuit->mnparm( 12, "subRot1TOB+", _vstart[12], _vstep[12], 0, 0, _ierflg ); 00132 // rotation around z of second end face 00133 minuit->mnparm( 13, "subRot2TOB+", _vstart[13], _vstep[13], 0, 0, _ierflg ); 00134 // translation along x of first end face 00135 minuit->mnparm( 14, "subTransX1TOB+", _vstart[14], _vstep[14], 0, 0, _ierflg ); 00136 // translation along x of second end face 00137 minuit->mnparm( 15, "subTransX2TOB+", _vstart[15], _vstep[15], 0, 0, _ierflg ); 00138 // translation along y of first end face 00139 minuit->mnparm( 16, "subTransY1TOB+", _vstart[16], _vstep[16], 0, 0, _ierflg ); 00140 // translation along y of second end face 00141 minuit->mnparm( 17, "subTransY2TOB+", _vstart[17], _vstep[17], 0, 0, _ierflg ); 00142 00143 // subdetector parameters for TOB-: 00144 00145 // rotation around z of first end face 00146 minuit->mnparm( 18, "subRot1TOB-", _vstart[18], _vstep[18], 0, 0, _ierflg ); 00147 // rotation around z of second end face 00148 minuit->mnparm( 19, "subRot2TOB-", _vstart[19], _vstep[19], 0, 0, _ierflg ); 00149 // translation along x of first end face 00150 minuit->mnparm( 20, "subTransX1TOB-", _vstart[20], _vstep[20], 0, 0, _ierflg ); 00151 // translation along x of second end face 00152 minuit->mnparm( 21, "subTransX2TOB-", _vstart[21], _vstep[21], 0, 0, _ierflg ); 00153 // translation along y of first end face 00154 minuit->mnparm( 22, "subTransY1TOB-", _vstart[22], _vstep[22], 0, 0, _ierflg ); 00155 // translation along y of second end face 00156 minuit->mnparm( 23, "subTransY2TOB-", _vstart[23], _vstep[23], 0, 0, _ierflg ); 00157 00158 // subdetector parameters for TEC+: 00159 00160 // rotation around z of first end face 00161 minuit->mnparm( 24, "subRot1TEC+", _vstart[24], _vstep[24], 0, 0, _ierflg ); 00162 // rotation around z of second end face 00163 minuit->mnparm( 25, "subRot2TEC+", _vstart[25], _vstep[25], 0, 0, _ierflg ); 00164 // translation along x of first end face 00165 minuit->mnparm( 26, "subTransX1TEC+", _vstart[26], _vstep[26], 0, 0, _ierflg ); 00166 // translation along x of second end face 00167 minuit->mnparm( 27, "subTransX2TEC+", _vstart[27], _vstep[27], 0, 0, _ierflg ); 00168 // translation along y of first end face 00169 minuit->mnparm( 28, "subTransY1TEC+", _vstart[28], _vstep[28], 0, 0, _ierflg ); 00170 // translation along y of second end face 00171 minuit->mnparm( 29, "subTransY2TEC+", _vstart[29], _vstep[29], 0, 0, _ierflg ); 00172 00173 // subdetector parameters for TEC-: 00174 00175 // rotation around z of first end face 00176 minuit->mnparm( 30, "subRot1TEC-", _vstart[30], _vstep[30], 0, 0, _ierflg ); 00177 // rotation around z of second end face 00178 minuit->mnparm( 31, "subRot2TEC-", _vstart[31], _vstep[31], 0, 0, _ierflg ); 00179 // translation along x of first end face 00180 minuit->mnparm( 32, "subTransX1TEC-", _vstart[32], _vstep[32], 0, 0, _ierflg ); 00181 // translation along x of second end face 00182 minuit->mnparm( 33, "subTransX2TEC-", _vstart[33], _vstep[33], 0, 0, _ierflg ); 00183 // translation along y of first end face 00184 minuit->mnparm( 34, "subTransY1TEC-", _vstart[34], _vstep[34], 0, 0, _ierflg ); 00185 // translation along y of second end face 00186 minuit->mnparm( 35, "subTransY2TEC-", _vstart[35], _vstep[35], 0, 0, _ierflg ); 00187 00188 00189 // beam parameters (+-z pairs, duplicated for beams 0-7): 00190 00191 // rotation around z at zt1 00192 minuit->mnparm( 36, "beamRot1Beam0", _vstart[36], _vstep[36], 0, 0, _ierflg ); 00193 // rotation around z at zt2 00194 minuit->mnparm( 37, "beamRot2Beam0", _vstart[37], _vstep[37], 0, 0, _ierflg ); 00195 00196 // rotation around z at zt1 00197 minuit->mnparm( 38, "beamRot1Beam1", _vstart[38], _vstep[38], 0, 0, _ierflg ); 00198 // rotation around z at zt2 00199 minuit->mnparm( 39, "beamRot2Beam1", _vstart[39], _vstep[39], 0, 0, _ierflg ); 00200 00201 // rotation around z at zt1 00202 minuit->mnparm( 40, "beamRot1Beam2", _vstart[40], _vstep[40], 0, 0, _ierflg ); 00203 // rotation around z at zt2 00204 minuit->mnparm( 41, "beamRot2Beam2", _vstart[41], _vstep[41], 0, 0, _ierflg ); 00205 00206 // rotation around z at zt1 00207 minuit->mnparm( 42, "beamRot1Beam3", _vstart[42], _vstep[42], 0, 0, _ierflg ); 00208 // rotation around z at zt2 00209 minuit->mnparm( 43, "beamRot2Beam3", _vstart[43], _vstep[43], 0, 0, _ierflg ); 00210 00211 // rotation around z at zt1 00212 minuit->mnparm( 44, "beamRot1Beam4", _vstart[44], _vstep[44], 0, 0, _ierflg ); 00213 // rotation around z at zt2 00214 minuit->mnparm( 45, "beamRot2Beam4", _vstart[45], _vstep[45], 0, 0, _ierflg ); 00215 00216 // rotation around z at zt1 00217 minuit->mnparm( 46, "beamRot1Beam5", _vstart[46], _vstep[46], 0, 0, _ierflg ); 00218 // rotation around z at zt2 00219 minuit->mnparm( 47, "beamRot2Beam5", _vstart[47], _vstep[47], 0, 0, _ierflg ); 00220 00221 // rotation around z at zt1 00222 minuit->mnparm( 48, "beamRot1Beam6", _vstart[48], _vstep[48], 0, 0, _ierflg ); 00223 // rotation around z at zt2 00224 minuit->mnparm( 49, "beamRot2Beam6", _vstart[49], _vstep[49], 0, 0, _ierflg ); 00225 00226 // rotation around z at zt1 00227 minuit->mnparm( 50, "beamRot1Beam7", _vstart[50], _vstep[50], 0, 0, _ierflg ); 00228 // rotation around z at zt2 00229 minuit->mnparm( 51, "beamRot2Beam7", _vstart[51], _vstep[51], 0, 0, _ierflg ); 00230 00231 00232 // we fix the respective outer disks 9 of each endcap 00233 // as a reference system (pars 25,27,29 & 30,32,34) 00234 // note: minuit numbering is fortran style... 00235 arglist[0] = 26; arglist[1] = 28; arglist[2] = 30; 00236 minuit->mnexcm( "FIX", arglist ,3, _ierflg ); // TEC+ 00237 arglist[0] = 31; arglist[1] = 33; arglist[2] = 35; 00238 minuit->mnexcm( "FIX", arglist ,3, _ierflg ); // TEC- 00239 00240 00242 // DEBUG: FIX BEAM PARAMETERS ///////////////////////////////////////////////////////////////////// 00243 // double parlist[16]; 00244 // for( int par = 37; par <= 52; ++par ) parlist[par-37] = par; 00245 // minuit->mnexcm( "FIX", parlist ,16, _ierflg ); 00247 00248 00249 // now ready for minimization step 00250 arglist[0] = 5000; 00251 arglist[1] = 0.01; 00252 minuit->mnexcm( "MIGRAD", arglist , 2, _ierflg ); 00253 00254 Dump(); 00255 00256 // now fill the result vector. 00257 // turned out that the parameter numbering is stupid, change this later.. 00258 LASBarrelAlignmentParameterSet theResult; 00259 double par = 0., parError = 0.; 00260 00261 // TEC+ rot 00262 minuit->GetParameter( 24, par, parError ); theResult.GetParameter( 0, 0, 0 ).first = par; theResult.GetParameter( 0, 0, 0 ).second = parError; 00263 minuit->GetParameter( 25, par, parError ); theResult.GetParameter( 0, 1, 0 ).first = par; theResult.GetParameter( 0, 1, 0 ).second = parError; 00264 // TEC+ x 00265 minuit->GetParameter( 26, par, parError ); theResult.GetParameter( 0, 0, 1 ).first = par; theResult.GetParameter( 0, 0, 1 ).second = parError; 00266 minuit->GetParameter( 27, par, parError ); theResult.GetParameter( 0, 1, 1 ).first = par; theResult.GetParameter( 0, 1, 1 ).second = parError; 00267 // TEC+ x 00268 minuit->GetParameter( 28, par, parError ); theResult.GetParameter( 0, 0, 2 ).first = par; theResult.GetParameter( 0, 0, 2 ).second = parError; 00269 minuit->GetParameter( 29, par, parError ); theResult.GetParameter( 0, 1, 2 ).first = par; theResult.GetParameter( 0, 1, 2 ).second = parError; 00270 00271 // TEC- rot 00272 minuit->GetParameter( 30, par, parError ); theResult.GetParameter( 1, 0, 0 ).first = par; theResult.GetParameter( 1, 0, 0 ).second = parError; 00273 minuit->GetParameter( 31, par, parError ); theResult.GetParameter( 1, 1, 0 ).first = par; theResult.GetParameter( 1, 1, 0 ).second = parError; 00274 // TEC- x 00275 minuit->GetParameter( 32, par, parError ); theResult.GetParameter( 1, 0, 1 ).first = par; theResult.GetParameter( 1, 0, 1 ).second = parError; 00276 minuit->GetParameter( 33, par, parError ); theResult.GetParameter( 1, 1, 1 ).first = par; theResult.GetParameter( 1, 1, 1 ).second = parError; 00277 // TEC- x 00278 minuit->GetParameter( 34, par, parError ); theResult.GetParameter( 1, 0, 2 ).first = par; theResult.GetParameter( 1, 0, 2 ).second = parError; 00279 minuit->GetParameter( 35, par, parError ); theResult.GetParameter( 1, 1, 2 ).first = par; theResult.GetParameter( 1, 1, 2 ).second = parError; 00280 00281 // TIB+ rot 00282 minuit->GetParameter( 0, par, parError ); theResult.GetParameter( 2, 0, 0 ).first = par; theResult.GetParameter( 2, 0, 0 ).second = parError; 00283 minuit->GetParameter( 1, par, parError ); theResult.GetParameter( 2, 1, 0 ).first = par; theResult.GetParameter( 2, 1, 0 ).second = parError; 00284 // TIB+ x 00285 minuit->GetParameter( 2, par, parError ); theResult.GetParameter( 2, 0, 1 ).first = par; theResult.GetParameter( 2, 0, 1 ).second = parError; 00286 minuit->GetParameter( 3, par, parError ); theResult.GetParameter( 2, 1, 1 ).first = par; theResult.GetParameter( 2, 1, 1 ).second = parError; 00287 // TIB+ x 00288 minuit->GetParameter( 4, par, parError ); theResult.GetParameter( 2, 0, 2 ).first = par; theResult.GetParameter( 2, 0, 2 ).second = parError; 00289 minuit->GetParameter( 5, par, parError ); theResult.GetParameter( 2, 1, 2 ).first = par; theResult.GetParameter( 2, 1, 2 ).second = parError; 00290 00291 // TIB- rot 00292 minuit->GetParameter( 6, par, parError ); theResult.GetParameter( 3, 0, 0 ).first = par; theResult.GetParameter( 3, 0, 0 ).second = parError; 00293 minuit->GetParameter( 7, par, parError ); theResult.GetParameter( 3, 1, 0 ).first = par; theResult.GetParameter( 3, 1, 0 ).second = parError; 00294 // TIB- x 00295 minuit->GetParameter( 8, par, parError ); theResult.GetParameter( 3, 0, 1 ).first = par; theResult.GetParameter( 3, 0, 1 ).second = parError; 00296 minuit->GetParameter( 9, par, parError ); theResult.GetParameter( 3, 1, 1 ).first = par; theResult.GetParameter( 3, 1, 1 ).second = parError; 00297 // TIB- x 00298 minuit->GetParameter( 10, par, parError ); theResult.GetParameter( 3, 0, 2 ).first = par; theResult.GetParameter( 3, 0, 2 ).second = parError; 00299 minuit->GetParameter( 11, par, parError ); theResult.GetParameter( 3, 1, 2 ).first = par; theResult.GetParameter( 3, 1, 2 ).second = parError; 00300 00301 // TOB+ rot 00302 minuit->GetParameter( 12, par, parError ); theResult.GetParameter( 4, 0, 0 ).first = par; theResult.GetParameter( 4, 0, 0 ).second = parError; 00303 minuit->GetParameter( 13, par, parError ); theResult.GetParameter( 4, 1, 0 ).first = par; theResult.GetParameter( 4, 1, 0 ).second = parError; 00304 // TOB+ x 00305 minuit->GetParameter( 14, par, parError ); theResult.GetParameter( 4, 0, 1 ).first = par; theResult.GetParameter( 4, 0, 1 ).second = parError; 00306 minuit->GetParameter( 15, par, parError ); theResult.GetParameter( 4, 1, 1 ).first = par; theResult.GetParameter( 4, 1, 1 ).second = parError; 00307 // TOB+ x 00308 minuit->GetParameter( 16, par, parError ); theResult.GetParameter( 4, 0, 2 ).first = par; theResult.GetParameter( 4, 0, 2 ).second = parError; 00309 minuit->GetParameter( 17, par, parError ); theResult.GetParameter( 4, 1, 2 ).first = par; theResult.GetParameter( 4, 1, 2 ).second = parError; 00310 00311 // TOB- rot 00312 minuit->GetParameter( 18, par, parError ); theResult.GetParameter( 5, 0, 0 ).first = par; theResult.GetParameter( 5, 0, 0 ).second = parError; 00313 minuit->GetParameter( 19, par, parError ); theResult.GetParameter( 5, 1, 0 ).first = par; theResult.GetParameter( 5, 1, 0 ).second = parError; 00314 // TOB- x 00315 minuit->GetParameter( 20, par, parError ); theResult.GetParameter( 5, 0, 1 ).first = par; theResult.GetParameter( 5, 0, 1 ).second = parError; 00316 minuit->GetParameter( 21, par, parError ); theResult.GetParameter( 5, 1, 1 ).first = par; theResult.GetParameter( 5, 1, 1 ).second = parError; 00317 // TOB- x 00318 minuit->GetParameter( 22, par, parError ); theResult.GetParameter( 5, 0, 2 ).first = par; theResult.GetParameter( 5, 0, 2 ).second = parError; 00319 minuit->GetParameter( 23, par, parError ); theResult.GetParameter( 5, 1, 2 ).first = par; theResult.GetParameter( 5, 1, 2 ).second = parError; 00320 00321 std::cout << " [LASBarrelAlgorithm::CalculateParameters] -- Done." << std::endl; 00322 00323 return theResult; 00324 00325 }
Print resulting parameters to stdout and to a file - for debugging only.
Definition at line 545 of file LASBarrelAlgorithm.cc.
References TestMuL1L2Filter_cff::cerr, GenMuonPlsPt100GeV_cfg::cout, lat::endl(), error, file, minuit, value, and z.
Referenced by CalculateParameters().
00545 { 00546 00547 if( !minuit ) { 00548 std::cerr << " [LASBarrelAlgorithm::Dump] ** WARNING: minimizer object uninitialized." << std::endl; 00549 return; 00550 } 00551 00552 std::cout << std::endl << " [LASBarrelAlgorithm::Dump] -- Parameter dump: " << std::endl; 00553 00554 const int subdetParMap[6] = { 24, 30, 0, 6, 12, 18 }; // map to one-dim array 00555 const std::string subdetNames[6] = { " TEC+ ", " TEC- ", " TIB+ ", " TIB- ", " TOB+ ", " TOB- " }; 00556 double value, error; 00557 00558 std::cout << " Detector parameters: " << std::endl; 00559 std::cout << " -------------------" << std::endl; 00560 std::cout << " Values: PHI1 X1 Y1 PHI2 X2 Y2 " << std::endl; 00561 for( int subdet = 0; subdet < 6; ++subdet ) { 00562 std::cout <<subdetNames[subdet]; 00563 for( int par = subdetParMap[subdet]; par <= subdetParMap[subdet] + 4; par += 2 ) { 00564 minuit->GetParameter( par, value, error ); 00565 std::cout << std::setw( 12 ) << std::setprecision( 6 ) << std::fixed << value; 00566 } 00567 for( int par = subdetParMap[subdet] + 1; par <= subdetParMap[subdet] + 5; par += 2 ) { 00568 minuit->GetParameter( par, value, error ); 00569 std::cout << std::setw( 12 ) << std::setprecision( 6 ) << std::fixed << value; 00570 } 00571 std::cout << std::endl; 00572 } 00573 00574 std::cout << " Errors: PHI1 X1 Y1 PHI2 X2 Y2 " << std::endl; 00575 for( int subdet = 0; subdet < 6; ++subdet ) { 00576 std::cout <<subdetNames[subdet]; 00577 for( int par = subdetParMap[subdet]; par <= subdetParMap[subdet] + 4; par += 2 ) { 00578 minuit->GetParameter( par, value, error ); 00579 std::cout << std::setw( 12 ) << std::setprecision( 6 ) << std::fixed << error; 00580 } 00581 for( int par = subdetParMap[subdet] + 1; par <= subdetParMap[subdet] + 5; par += 2 ) { 00582 minuit->GetParameter( par, value, error ); 00583 std::cout << std::setw( 12 ) << std::setprecision( 6 ) << std::fixed << error; 00584 } 00585 std::cout << std::endl; 00586 } 00587 00588 std::cout << std::endl; 00589 std::cout << " Beam parameters: " << std::endl; 00590 std::cout << " ---------------" << std::endl; 00591 std::cout << " Values: PHI1 PHI2" << std::endl; 00592 for( int beam = 0; beam < 8; ++beam ) { 00593 std::cout << " " << beam << " "; 00594 for( int z = 0; z < 2; ++z ) { 00595 minuit->GetParameter( 36 + beam + z, value, error ); 00596 std::cout << std::setw( 12 ) << std::setprecision( 6 ) << std::fixed << value; 00597 } 00598 std::cout << std::endl; 00599 } 00600 00601 std::cout << " Errors: PHI1 PHI2" << std::endl; 00602 for( int beam = 0; beam < 8; ++beam ) { 00603 std::cout << " " << beam << " "; 00604 for( int z = 0; z < 2; ++z ) { 00605 minuit->GetParameter( 36 + beam + z, value, error ); 00606 std::cout << std::setw( 12 ) << std::setprecision( 6 ) << std::fixed << error; 00607 } 00608 std::cout << std::endl; 00609 } 00610 00611 00612 00613 // det parameters once again without leading column (for easy read-in), into a file 00614 ofstream file( "/afs/cern.ch/user/o/olzem/public/parameters_det.txt" ); 00615 for( int subdet = 0; subdet < 6; ++subdet ) { 00616 for( int par = subdetParMap[subdet]; par <= subdetParMap[subdet] + 4; par += 2 ) { 00617 minuit->GetParameter( par, value, error ); 00618 file << std::setw( 12 ) << std::setprecision( 6 ) << std::fixed << value; 00619 } 00620 for( int par = subdetParMap[subdet] + 1; par <= subdetParMap[subdet] + 5; par += 2 ) { 00621 minuit->GetParameter( par, value, error ); 00622 file << std::setw( 12 ) << std::setprecision( 6 ) << std::fixed << value; 00623 } 00624 file << std::endl; 00625 } 00626 file.close(); 00627 00628 // same for beam parameters 00629 file.open( "/afs/cern.ch/user/o/olzem/public/parameters_beam.txt" ); 00630 for( int beam = 0; beam < 8; ++beam ) { 00631 for( int z = 0; z < 2; ++z ) { 00632 minuit->GetParameter( 36 + beam + z, value, error ); 00633 file << std::setw( 12 ) << std::setprecision( 6 ) << std::fixed << value; 00634 } 00635 file << std::endl; 00636 } 00637 file.close(); 00638 00639 00640 std:: cout << " [LASBarrelAlgorithm::Dump] -- End parameter dump." << std::endl; 00641 std::cout << std::endl; 00642 00643 }
void LASBarrelAlgorithm::ReadMisalignmentFromFile | ( | const char * | filename, | |
LASGlobalData< LASCoordinateSet > & | measuredCoordinates, | |||
LASGlobalData< LASCoordinateSet > & | nominalCoordinates | |||
) | [private] |
allows to push in a simple simulated misalignment for quick internal testing purposes; overwrites LASGlobalData<LASCoordinateSet>& measuredCoordinates; call at beginning of LASBarrelAlgorithm::CalculateParameters method
one line per module, format for TEC: det ring beam disk phi phiErr format for TEC(at) & TIBTOB: det beam z "-1" phi phiErr
Definition at line 658 of file LASBarrelAlgorithm.cc.
References TestMuL1L2Filter_cff::cerr, muonGeometry::disk, lat::endl(), file, LASGlobalData< T >::GetTEC2TECEntry(), LASGlobalData< T >::GetTECEntry(), LASGlobalData< T >::GetTIBTOBEntry(), phi, LASCoordinateSet::SetPhi(), LASCoordinateSet::SetPhiError(), LASGlobalLoop::TEC2TECLoop(), LASGlobalLoop::TECLoop(), LASGlobalLoop::TIBTOBLoop(), and z.
Referenced by CalculateParameters().
00660 { 00661 00662 ifstream file( filename ); 00663 if( file.bad() ) { 00664 std::cerr << " [LASBarrelAlgorithm::ReadMisalignmentFromFile] ** ERROR: cannot open file \"" << filename << "\"." << std::endl; 00665 return; 00666 } 00667 00668 std::cerr << " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << std::endl; 00669 std::cerr << " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << std::endl; 00670 std::cerr << " [LASBarrelAlgorithm::ReadMisalignmentFromFile] ** WARNING: you are reading a fake measurement from a file!" << std::endl; 00671 std::cerr << " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << std::endl; 00672 std::cerr << " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << std::endl; 00673 00674 00675 // the measured coordinates will finally be overwritten; 00676 // first, set them to the nominal values 00677 measuredCoordinates = nominalCoordinates; 00678 00679 // and put large errors on all values; 00680 { 00681 LASGlobalLoop moduleLoop; 00682 int det, ring, beam, disk, pos; 00683 00684 det = 0; ring = 0; beam = 0; disk = 0; 00685 do { 00686 measuredCoordinates.GetTECEntry( det, ring, beam, disk ).SetPhiError( 1000. ); 00687 } while( moduleLoop.TECLoop( det, ring, beam, disk ) ); 00688 00689 det = 2; beam = 0; pos = 0; 00690 do { 00691 measuredCoordinates.GetTIBTOBEntry( det, beam, pos ).SetPhiError( 1000. ); 00692 } while( moduleLoop.TIBTOBLoop( det, beam, pos ) ); 00693 00694 det = 0; beam = 0; disk = 0; 00695 do { 00696 measuredCoordinates.GetTEC2TECEntry( det, beam, disk ).SetPhiError( 1000. ); 00697 } while( moduleLoop.TEC2TECLoop( det, beam, disk ) ); 00698 } 00699 00700 00701 // buffers for read-in 00702 int det, beam, z, ring; 00703 double phi, phiError; 00704 00705 while( !file.eof() ) { 00706 00707 file >> det; 00708 if( file.eof() ) break; // do not read the last line twice, do not fill trash if file empty 00709 00710 file >> beam; file >> z; file >> ring; 00711 file >> phi; file >> phiError; 00712 00713 if( det > 1 ) { // TIB/TOB 00714 measuredCoordinates.GetTIBTOBEntry( det, beam, z ).SetPhi( phi ); 00715 measuredCoordinates.GetTIBTOBEntry( det, beam, z ).SetPhiError( phiError ); 00716 } else { // TEC or TEC(at) 00717 if( ring > -1 ) { // TEC 00718 measuredCoordinates.GetTECEntry( det, ring, beam, z ).SetPhi( phi ); 00719 measuredCoordinates.GetTECEntry( det, ring, beam, z ).SetPhiError( phiError ); 00720 } 00721 else { // TEC(at) 00722 measuredCoordinates.GetTEC2TECEntry( det, beam, z ).SetPhi( phi ); 00723 measuredCoordinates.GetTEC2TECEntry( det, beam, z ).SetPhiError( phiError ); 00724 } 00725 } 00726 00727 } 00728 00729 file.close(); 00730 00731 }
void LASBarrelAlgorithm::ReadStartParametersFromFile | ( | const char * | filename, | |
float | values[52] | |||
) | [private] |
this function is here only for debugging, don't use.
file format: <phi1> <x1> <y1> <phi2> <x2> <y2> // for TEC* " " " " " " // TEC- .. then for TIB+, TIB-, TOB+, TOB- index 1 if for lower z, 2 for higher z
Definition at line 745 of file LASBarrelAlgorithm.cc.
References TestMuL1L2Filter_cff::cerr, lat::endl(), and file.
00745 { 00746 00747 ifstream file( filename ); 00748 if( file.bad() ) { 00749 std::cerr << " [LASBarrelAlgorithm::ReadStartParametersFromFile] ** ERROR: cannot open file \"" << filename << "\"." << std::endl; 00750 return; 00751 } 00752 00753 std::cerr << " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << std::endl; 00754 std::cerr << " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << std::endl; 00755 std::cerr << " [LASBarrelAlgorithm::ReadStartParametersFrom File] ** WARNING: you are reading parameter start values from a file!" << std::endl; 00756 std::cerr << " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << std::endl; 00757 std::cerr << " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" << std::endl; 00758 00759 // map to the minuit par array 00760 const int subdetParMap[6] = { 24, 30, 0, 6, 12, 18 }; 00761 00762 for( int det = 0; det < 6; ++det ) { 00763 file >> values[subdetParMap[det]]; // phi1 00764 file >> values[subdetParMap[det]+2]; // x1 00765 file >> values[subdetParMap[det]+4]; // y1 00766 file >> values[subdetParMap[det]+1]; // phi2 00767 file >> values[subdetParMap[det]+3]; // x2 00768 file >> values[subdetParMap[det]+5]; // y2 00769 } 00770 00771 }
TMinuit* LASBarrelAlgorithm::minuit [private] |
Definition at line 33 of file LASBarrelAlgorithm.h.
Referenced by CalculateParameters(), Dump(), and LASBarrelAlgorithm().