Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #include "Alignment/CocoaAnalysis/interface/FittedEntry.h"
00009 #include "Alignment/CocoaModel/interface/OpticalObject.h"
00010 #include "Alignment/CocoaModel/interface/Entry.h"
00011 #include "Alignment/CocoaModel/interface/Model.h"
00012 #include "Alignment/CocoaUtilities/interface/ALIUtils.h"
00013 #include <iostream>
00014 #include <iomanip>
00015 #include <cstdlib>
00016
00017
00018
00019 FittedEntry::FittedEntry( Entry* entry, ALIint order, ALIdouble sigma)
00020 {
00021 theEntry = entry;
00022 theOrder = order;
00023 theOptOName = entry->OptOCurrent()->longName();
00024 if(ALIUtils::debug >= 5) std::cout << " creating FittedEntry " << theOptOName << std::endl;
00025 theEntryName = entry->name();
00026 BuildName();
00027
00028
00029 ALIdouble dimv = entry->OutputValueDimensionFactor();
00030 ALIdouble dims = entry->OutputSigmaDimensionFactor();
00031 theValue = ( entry->value() + entry->valueDisplacementByFitting() ) / dimv;
00032 theSigma = sigma / dims;
00033 theOrigValue = entry->value() / dimv;
00034 theOrigSigma = entry->sigma() / dims;
00035 theQuality = entry->quality();
00036
00037
00038 }
00039
00040
00041
00042 FittedEntry::FittedEntry( ALIstring name, float value, float sigma)
00043 {
00044
00045 theOrder = 0;
00046 theOptOName = "s";
00047 ALIint point = -1;
00048 ALIint pointold = 0;
00049 for( ;; ){
00050 point = name.find( ".", point+1 );
00051 if( point == -1 ) break;
00052 theOptOName += "/" + name.substr( pointold, point-pointold);
00053 pointold = point+1;
00054 }
00055 theEntryName = name.substr( pointold, name.size() );
00056
00057
00058 Entry* entry = Model::getEntryByName( theOptOName, theEntryName );
00059
00060 theEntry = 0;
00061
00062
00063 ALIdouble dimv = entry->OutputValueDimensionFactor();
00064 ALIdouble dims = entry->OutputSigmaDimensionFactor();
00065 theValue = value * dimv;
00066 theSigma = sigma * dims;
00067 theOrigValue = value * dimv;
00068 theOrigSigma = sigma * dims;
00069 theQuality = 2;
00070
00071
00072 }
00073
00074
00075
00076 FittedEntry::FittedEntry( std::vector<FittedEntry*> vFEntry )
00077 {
00078
00079
00080 std::vector<FittedEntry*>::iterator ite;
00081
00082 theOptOName = (vFEntry[0]->getOptOName() );
00083 theEntryName = (vFEntry[0]->getEntryName() );
00084 theOrder = (vFEntry[0]->getOrder() );
00085 theEntry = (vFEntry[0]->getEntry() );
00086 theQuality = (vFEntry[0]->getQuality() );
00087
00088 theValue = 0.;
00089 theSigma = 0.;
00090 theOrigValue = 0.;
00091 theOrigSigma = 0.;
00092 for( ite = vFEntry.begin(); ite != vFEntry.end(); ite++) {
00093 if( (*ite)->getOptOName() != theOptOName || (*ite)->getEntryName() != theEntryName ){
00094 std::cerr << "!!! FATAL ERROR FittedEntry::FittedEntry one entry in list has different opto or entry names : " << (*ite)->getOptOName() << " != " << theOptOName << " " << (*ite)->getEntryName() << " != " << theEntryName << std::endl;
00095 exit(1);
00096 }
00097
00098 theValue += (*ite)->getValue();
00099 theSigma += (*ite)->getSigma();
00100 theOrigValue += (*ite)->getOrigValue();
00101 theOrigSigma += (*ite)->getOrigSigma();
00102 }
00103
00104 ALIint siz = vFEntry.size();
00105 theValue /= siz;
00106 theSigma /= siz;
00107 theOrigValue /= siz;
00108 theOrigSigma /= siz;
00109
00110 }
00111
00112
00113
00114 void FittedEntry::BuildName()
00115 {
00116
00117 theName = theOptOName.substr( 2, theOptOName.size() );
00118 ALIint slash = -1;
00119 for(;;){
00120 slash = theName.find('/', slash+1);
00121 if( slash == -1 ) break;
00122 theName[slash] = '.';
00123 }
00124
00125
00126 ALIint space = theEntryName.rfind(' ');
00127 theName.append(".");
00128 ALIstring en = theEntryName;
00129 if( space != -1) en[space] = '_';
00130
00131
00132
00133 theName.append( en);
00134
00135 }
00136