File indexing completed on 2024-04-06 11:55:58
0001 #include "Alignment/CocoaUtilities/interface/ALIFileIn.h"
0002 #include "Alignment/CocoaModel/interface/EntryMgr.h"
0003 #include "Alignment/CocoaModel/interface/EntryData.h"
0004
0005 void printDiffErrors( std::vector<EntryData*>& entries1, std::vector<EntryData*>& entries2 );
0006 void printDiffValues( std::vector<EntryData*>& entries1, std::vector<EntryData*>& entries2 );
0007 EntryData* findEntryUnk( EntryData* entry1, std::vector<EntryData*> entries2 );
0008
0009 int main( int argc, char** argv )
0010 {
0011
0012 if( argc < 3 ) {
0013 std::cerr << "!!ERROR: Must supply at least two arguments: old_file new_file (diffValues_Yes)" << std::endl;
0014 exit(1);
0015 }
0016
0017 ALIFileIn& fin1 = ALIFileIn::getInstance(argv[1]);
0018 std::cout << " file 1 opened " << argv[1] << std::endl;
0019 ALIFileIn& fin2 = ALIFileIn::getInstance(argv[2]);
0020 std::cout << " file 2 opened " << argv[2] << std::endl;
0021
0022 EntryMgr* entrymgr = EntryMgr::getInstance();
0023 std::vector<ALIstring> wordlist;
0024 while (!fin1.eof()) {
0025 if( !fin1.getWordsInLine(wordlist) ) break;
0026 entrymgr->readEntryFromReportOut( wordlist );
0027
0028 }
0029 std::cout << "TOTAL N entries1 " << entrymgr->numberOfEntries() << std::endl;
0030
0031 std::vector<EntryData*> entries1 = entrymgr->getEntryData();
0032 entrymgr->clearEntryData();
0033
0034 while (!fin2.eof()) {
0035 if( !fin2.getWordsInLine(wordlist) ) break;
0036 entrymgr->readEntryFromReportOut( wordlist );
0037
0038 }
0039 std::cout << "TOTAL N entries2 " << entrymgr->numberOfEntries() << std::endl;
0040
0041 std::vector<EntryData*> entries2 = entrymgr->getEntryData();
0042 entrymgr->clearEntryData();
0043
0044 std::cout << " argc " << argc << " " << argv[3] << "ZZ" << std::endl;
0045 bool bVal = 0;
0046 if( argc == 4 ) {
0047 if( atof(argv[3]) == 1 ) {
0048 bVal = 1;
0049 }
0050 }
0051 std::cout << " argc " << argc << " " << argv[3] << "ZZ" << std::endl;
0052 if( bVal ){
0053 printDiffValues( entries1, entries2 );
0054 } else {
0055 printDiffErrors( entries1, entries2 );
0056 }
0057 }
0058
0059
0060
0061 void printDiffErrors( std::vector<EntryData*>& entries1, std::vector<EntryData*>& entries2 )
0062 {
0063 std::vector<EntryData*>::const_iterator ite1;
0064 for( ite1 = entries1.begin(); ite1 != entries1.end(); ++ite1 ) {
0065 EntryData* entry1 = *ite1;
0066 if( (entry1)->quality() == 2 ) {
0067 EntryData* entry2 = findEntryUnk( entry1, entries2 );
0068 if( entry2 == 0 ) {
0069 std::cerr << " !!! WARNING Entry not found in second file " << *entry1 << std::endl;
0070 } else {
0071 double sigmadiff;
0072 double sigma1 = entry1->sigma();
0073 double sigma2 = entry2->sigma();
0074 if( sigma1 < sigma2 ){
0075 sigmadiff = sqrt( sigma2*sigma2 - sigma1*sigma1 );
0076 } else {
0077 sigmadiff = -sqrt( -sigma2*sigma2 + sigma1*sigma1 );
0078 }
0079 std::cout << " ENTRY DIFF_ERROR: " << sigmadiff << " " << entry1->longOptOName() << " " << entry1->entryName() << " " << entry1->valueOriginal()+entry1->valueDisplacement() << " +-(1) " << sigma1 << " +-(2) " << sigma2 << std::endl;
0080 }
0081 }
0082 }
0083
0084 }
0085
0086
0087 void printDiffValues( std::vector<EntryData*>& entries1, std::vector<EntryData*>& entries2 )
0088 {
0089 std::vector<EntryData*>::const_iterator ite1;
0090 for( ite1 = entries1.begin(); ite1 != entries1.end(); ++ite1 ) {
0091 EntryData* entry1 = *ite1;
0092 if( (entry1)->quality() == 2 ) {
0093 EntryData* entry2 = findEntryUnk( entry1, entries2 );
0094 if( entry2 == 0 ) {
0095 std::cerr << " !!! WARNING Entry not found in second file " << *entry1 << std::endl;
0096 } else {
0097 double val1 = entry1->valueOriginal() + entry1->valueDisplacement();
0098 double val2 = entry2->valueOriginal() + entry2->valueDisplacement();
0099 std::cout << " ENTRY DIFF: " << val2 - val1 << " " << entry1->longOptOName() << " " << entry1->entryName() << " VAL(1) " << val1 << " VAL(2) " << val2 << std::endl;
0100 }
0101 }
0102 }
0103
0104 }
0105
0106
0107 EntryData* findEntryUnk( EntryData* entry1, std::vector<EntryData*> entries2 )
0108 {
0109
0110 std::vector<EntryData*>::const_iterator ite2;
0111 for( ite2 = entries2.begin(); ite2 != entries2.end(); ++ite2 ) {
0112 EntryData* entry2 = *ite2;
0113 if( entry2->longOptOName() == entry1->longOptOName()
0114 && entry2->entryName() == entry1->entryName() ){
0115 return entry2;
0116 }
0117 }
0118
0119 return 0;
0120
0121 }