00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #ifndef _MatrixDouble_h
00046 #define _MatrixDouble_h
00047
00048 #include <stdio.h>
00049 #include <stdlib.h>
00050 #include <iostream>
00051
00052 #include <string>
00053 using namespace std;
00054
00055
00056
00057 #ifndef EPS
00058 #define EPS 1.0e-6 //precision, OSL seems to work with 1.0e-7
00059
00060 #endif
00061
00062
00063 #ifdef DO_TDT
00064 extern "C" {
00065 #include "tdt.h"
00066 }
00067 #endif
00068
00069 class MatrixDouble
00070 { protected:
00071 double** ptr;
00072 int z_anzahl;
00073 int s_anzahl;
00074
00075 public:
00076
00077
00078 MatrixDouble (void)
00079 { setEmpty();
00080 }
00081
00082 MatrixDouble ( const MatrixDouble& other );
00083
00084
00085
00086 MatrixDouble (int r, int c)
00087 { setEmpty();
00088 allocate(r,c);
00089 }
00090
00091
00092
00093 virtual ~MatrixDouble();
00094
00095
00096
00097 void setEmpty(void);
00098
00099 virtual void deallocate(void);
00100 virtual void deallokieren(void);
00101
00102
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114 virtual void allokieren (int z, int s);
00115 virtual void allocate(int row, int col);
00116
00117 virtual void allocate(int elems);
00118
00119 virtual void allocate (int z, int s, double val);
00120 virtual void allocate (MatrixDouble& m2);
00121
00122
00123
00124 virtual void matrix_vergroessern_z(int zus_z);
00125
00126
00127 virtual void matrix_vergroessern_s(int zus_s);
00128
00129
00130 virtual void addRows(int newR);
00131
00132
00133 virtual void addCols(int newC);
00134
00135 virtual void addRow(void);
00136
00137 virtual void addCol(void);
00138
00139
00140 virtual void deleteRow(int row);
00141
00142
00143
00144 virtual void deleteFirstRow(void);
00145
00146 virtual void deleteLastRow(void);
00147
00148
00149
00150
00151 virtual int insertRow(int col, double val);
00152
00153
00154
00155 virtual void addRow(MatrixDouble& m);
00156
00157 virtual void addCol(MatrixDouble& m);
00158
00159
00161
00162
00163 virtual int zeilen(void);
00164 virtual int spalten(void);
00165 virtual int rows() const;
00166 virtual int cols() const;
00167
00168 virtual int length() const;
00169
00170 virtual int width() const;
00171
00172
00173 virtual bool isvector();
00174 virtual bool isVector();
00175
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187 virtual int findAllEntriesEquallingValue(MatrixDouble& posMat, double value);
00188
00189
00190 virtual int getAllValPos(MatrixDouble& posMat, double noVal);
00191
00192 virtual void shiftPosMat(
00193 int rowShift,
00194 int colShift
00195 );
00196
00197 virtual void makeTableHeader(string fn);
00198 virtual void makeTableHeader(char* d);
00199
00200
00201 virtual int countNOT_NODATA(double NODATA);
00202 virtual int countDATA(double DATA);
00203
00204
00205 virtual void cutMatrixRow(int crow);
00206
00207 virtual void cutMatrixCol(int ccol);
00208
00209
00210 virtual void copy(MatrixDouble& matrix2);
00211
00212 virtual void copyInto(MatrixDouble& matrixTarg);
00213
00214
00215 virtual MatrixDouble& operator+= (MatrixDouble& matrix2);
00216 virtual MatrixDouble& operator-= (MatrixDouble& matrix2);
00217
00218 virtual MatrixDouble& operator*= (MatrixDouble& matrix2);
00219
00220 virtual MatrixDouble& operator*= (double fact);
00221 #ifdef AIX
00222 virtual MatrixDouble& operator= (MatrixDouble& matrix2);
00223 #endif
00224 virtual MatrixDouble& operator= (const MatrixDouble& matrix2);
00225
00226
00227
00228
00229
00230
00231
00232
00233 virtual void readInputFromFile(char* fn, int z, int s);
00234 virtual void readInputFromFile(string fn, int z, int s);
00235
00236
00237
00238
00239 virtual void readTopMatrixCorner(FILE*, int ,int);
00240
00241
00242 virtual void readInputFromFile(FILE*);
00243
00244
00245 virtual void readInputFromFile(char* fn, int pos);
00246 virtual void readMatrix_FILE(string filename);
00247 virtual void readMatrix_FILE_INT(string filename);
00248 virtual void readInputFromFile_INT(FILE* datei);
00249
00250
00251
00252 virtual void readInputFromFile(ifstream&);
00253
00254
00255
00256
00257
00258 virtual void readDelimNums(ifstream& streamData, int numVals);
00259
00260
00261 virtual void appendRowFromFile(ifstream& in, int numValues);
00262
00263 virtual void appendRowFromFile(ifstream& in);
00264
00265
00266 virtual void appendColToFileAsRow(int col, string fn);
00267 virtual void appendColToFileAsRow(int col, char* fn);
00268
00269 virtual void appendRowToFile(int row, string fn);
00270 virtual void appendRowToFile(int row, char* fn);
00271 virtual void appendRowToOpenStream(ofstream& outStream, int row);
00272
00273 virtual void appendVecToFile(char* fn);
00274 virtual void appendVecToFile(string fn);
00275 virtual void appendVecToFile(ofstream& out);
00276
00277 virtual void appendColToFileAsRow(int col, ofstream& out);
00278
00279
00280
00281
00282
00283
00284
00285 virtual void in_datei_schreiben(FILE*);
00286
00287 virtual void in_datei_schreibenE(FILE*);
00288
00289 virtual void in_datei_schreibenT(FILE*);
00290
00291
00292 virtual void datei_schreiben(char* filename);
00293
00294
00295 virtual void writeRowToFile_NoLineEnd(FILE* datei, int row);
00296 virtual void writeRowToFile_WithLineEnd(FILE* datei, int row);
00297
00298 virtual void writeRowToFile_NoLineEnd(ofstream& datei, int row);
00299 virtual void writeRowToFile_WithLineEnd(ofstream& datei, int row);
00300
00301
00302 virtual void writeColToOpenFileAsRow_WithLineEnd(ofstream& datei, int row);
00303
00304 virtual void writeColToOpenFileAsRow_NoLineEnd(FILE* datei, int col);
00305 virtual void writeColToOpenFileAsRow_WithLineEnd(FILE* datei, int col);
00306
00307
00308
00309
00310 virtual void writeToFile(ofstream& out);
00311 virtual void writeToFile(char* filen);
00312 virtual void writeToFile(string filen);
00313 virtual void writeToFileTransposed(string fn);
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323 virtual void writeLogfileTDT(string fn, char* configFile, int type, bool dolong);
00324 virtual void writeLogfileRW(string , char* , int type);
00325
00326
00327 virtual void writeToFileT(ofstream& out);
00328
00329
00330
00331 virtual void readFromFileWithDims(string fn);
00332 virtual void readFromFileWithDims(char* fn);
00333 virtual void readFromFileWithDims(ifstream& in);
00334
00335 virtual int readVectorDyn(string fn);
00336 virtual int readVectorDyn(char* fn);
00337 virtual int readVectorDyn(ifstream& in);
00338
00339
00340
00341
00342
00343 virtual int readMatDyn(string fn);
00344 virtual int readMatDyn(char* fn);
00345 virtual int readMatDyn(ifstream& in);
00346
00347 virtual void readFromFileDimsAndHeader(string fn);
00348 virtual void readFromFileDimsAndHeader(char* fn);
00349 virtual void readFromFileDimsAndHeader(ifstream& in);
00350
00351 virtual void writeToFileWithDims(string fn);
00352 virtual void writeToFileWithDims(char* fn);
00353 virtual void writeToFileWithDims(ofstream& out);
00354
00355
00356
00357
00358
00359 virtual void writeToFile_sparse(string fn, int nodata);
00360 virtual void writeToFile_sparse(char* fn, int nodata);
00361 virtual void writeToFile_sparse(ofstream& out, int nodata);
00362
00363 virtual void writeToFile_sparse_values(ofstream& out, int nodata);
00364
00365 virtual void loadFromFile_sparse_values(ifstream& streamData, int nodata);
00366
00367 virtual void loadFromFile_sparse(string fn, int nodata);
00368 virtual void loadFromFile_sparse(char* fn, int nodata);
00369 virtual void loadFromFile_sparse(ifstream& streamData, int nodata);
00370
00372
00373
00374 virtual void printToScreen(void);
00375
00376 virtual void printToScreen(int rlu, int clu, int rdr, int cdr);
00377
00378
00379 virtual void ausschreiben (void);
00380
00381
00382
00383
00384
00385 virtual void printToScreen_compact(void);
00386 virtual void printToScreen_compact(int numDigits);
00387
00388
00389 virtual void printToScreen_compact(int rlu, int clu, int rdr, int cdr);
00390 virtual void printToScreen_compact(int rlu, int clu, int rdr, int cdr, int numDigits);
00391
00392
00393
00394
00395
00396
00397
00398 virtual void printToScreenInt(void);
00399
00400 virtual void printToScreen_col_compact(int c);
00401
00402
00403 virtual void printToScreen_row(int z);
00404 virtual void printToScreen_row(int z, int startC, int endC);
00405
00406
00407
00408
00409 virtual void printToScreen_row_compact (void);
00410 virtual void printToScreen_row_compact (int z);
00411 virtual void printToScreen_row_compact (int z, int numDigits);
00412 virtual void printToScreen_row_compact (int z, int startC, int endC, int numDigits);
00413 virtual void printToScreen_row_compact (int z, int startC, int endC);
00414
00415
00416
00417 virtual void printSize();
00418
00419
00420
00421
00422 virtual void printToScreen_col_valuesOnly(int c, double noval);
00423
00424 virtual void printSparse(double NODATA);
00425
00426
00427 virtual void printToScreen_ifColActive(int c, double noval);
00428
00429
00430 virtual void wert_ausschreiben(int, int);
00431 virtual void zeile_ausschreiben(int);
00432 virtual void spalte_ausschreiben(int);
00433
00434
00435
00436
00437
00439
00440
00441
00442
00443 virtual void wert_eintragen (int, int, double wert);
00444 virtual void setValue(int row, int col, double value);
00445
00446
00447
00448 virtual void setValue(int pos, double val);
00449
00450
00451 virtual void setValue(MatrixDouble& m1);
00452
00453
00454
00455
00456 virtual void setValueExp(int r, int c, double val);
00457
00458
00459
00460
00461 virtual void setCol(int c, double v);
00462
00463 virtual void setRow(int row, double val);
00464
00465
00466 virtual void setRow(int row, MatrixDouble& vec);
00467
00468 virtual void setCol(int col, MatrixDouble& vec);
00469
00470
00471 virtual void setAllValues(double val);
00472
00473 virtual void extractSubmatrixColKey(MatrixDouble& target, MatrixDouble& colKey);
00474 virtual void extract(MatrixDouble& empt,
00475 int row_left_up, int col_left_up,
00476 int dimR, int dimC);
00477 virtual void extract(MatrixDouble& empt, MatrixDouble& minmax);
00478
00479
00480
00481 virtual void initialisieren (double startwert);
00482 virtual void initialisieren (int startwert);
00483
00484
00486
00488
00489 virtual double getValue(int r, int c) const;
00490 virtual double wert_holen(int z, int s) const;
00491
00492
00493
00494
00495 virtual double getValue(int pos) const;
00496
00497
00498
00499 virtual void getCol(int col, MatrixDouble& mCol );
00500 virtual void getRow(int row, MatrixDouble& mRow );
00501
00502
00503
00504
00505 virtual void addValue(int, int, double);
00506 virtual void addValue(int, double);
00507
00508 virtual void divideValue(int, int, double);
00509 virtual void divideValue(int, double);
00510
00511
00512 virtual void increment(int r, int c);
00513
00514
00515 virtual void addColValues(int pCol, int thisCol, MatrixDouble& matPassed);
00516
00517
00518 virtual void wert_multiplizieren(int, int, double);
00519
00520 virtual void skalar_multiplizieren(double);
00521
00522 virtual void wert_dividieren(int, int, double);
00523
00524
00525 virtual void mult(MatrixDouble& m1, MatrixDouble& m2);
00526
00527
00528
00529
00530
00531 virtual double subtractMatrix(MatrixDouble& m1, MatrixDouble& m2, int noData1 , int noData2);
00532 virtual double addMatrix(MatrixDouble& m1, MatrixDouble& m2, int noData1, int noData2);
00533
00534 virtual double divideMatrix(MatrixDouble& m1, MatrixDouble& m2, int noData1, int noData2);
00535 virtual double multMatrix(MatrixDouble& m1, MatrixDouble& m2, int noData1, int noData2);
00536
00537
00538
00539 virtual double sumRow(int);
00540
00541 virtual double sumCol(int);
00542
00543 virtual double spaltensumme(int);
00544 virtual double zeilensumme(int);
00545
00546
00547
00548 virtual void copyRow(int originRow, int targetRow);
00549
00550
00551 virtual void copyRow(int originRow, MatrixDouble& mTarg, int targetRow);
00552
00553
00554 virtual void copyCol2Row(int originCol, MatrixDouble& mTarg, int targetRow);
00555 virtual void copyCol2Col(int originCol, MatrixDouble& mTarg, int targetCol);
00556
00557
00558
00559
00560 virtual double getMax(void);
00561
00562 virtual double getMax_row(int row);
00563
00564 virtual double getMax_col(int col);
00565
00566
00567
00568 virtual int findMax_row(int row);
00569
00570 virtual int findMax_col(int col);
00571 virtual int findMax_col_nonempty(int col, double emptVal, int emptCol);
00572
00573
00574
00575
00576
00577 virtual double getMin(void);
00578 virtual double getMinNotNodata(int nodata);
00579
00580 virtual double getMin_row(int row);
00581 virtual double getMin_row(int row, int nodata);
00582
00583 virtual double getMin_col(int col);
00584
00585
00586
00587 virtual void swap (double *pa,double *pb);
00588
00589
00590
00591 virtual void mextract(MatrixDouble& ACTIVE, MatrixDouble& MEXTRACT);
00592
00594
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609 virtual int findPos(double val, MatrixDouble& FOUNDPOS);
00610 virtual int findPos_col(int col, double val, MatrixDouble& FOUNDPOS);
00611
00612
00613
00614 virtual int findIsValue(double noData, MatrixDouble& FOUND);
00615
00616
00617
00618 virtual int findDifferent(double val, double noData, MatrixDouble& FOUNDPOS);
00619
00620
00621
00622
00623
00624 virtual int findfirstCol(int colSearch, double val);
00625 virtual int findfirstMatchInCol(int colSearch, double val);
00626 virtual int findfirstMatchInRow(int rowSearch, double val);
00627
00628
00629
00630
00631
00632
00633 virtual void medianAllCols(MatrixDouble& medM);
00634 virtual double medianCol(int col);
00635
00636 virtual double varianceOfCol(int col, double mean);
00637 virtual double standardDeviationOfCol(int _col, double mean);
00638 virtual double giniOfCol(int _col);
00639
00640 virtual double getVariabceIfNotNodata(double nodata_, double mean_);
00641 virtual double getStandardDeviationIfNotNodata(double nodata_, double mean_);
00642 virtual double getMeanIfNotNodata(double nodata_);
00643
00644
00645
00646
00647 virtual void sortColumns(void);
00648
00649 virtual void spalten_aufsteigend_sortieren (int z, int s) ;
00650
00651
00652
00653 virtual void sortAfterOneColumn(int col);
00654
00655
00656
00657
00658
00659 virtual void sortAfterOneColumn(int col, MatrixDouble& matPos);
00660
00661 virtual void sortAfterOneColumn_B(int col, MatrixDouble& POSITION);
00662
00663
00664
00665 virtual void sendMatrixViaTDT(char* configFile);
00666 virtual void sendViaTDT(char* configFile);
00667 virtual void sendViaTDT(string configFile);
00668
00669 virtual void receiveViaTDT(char* configFile);
00670 virtual void receiveViaTDT(string configFile);
00671
00672 #ifdef DO_TDT
00673 virtual void sendMatrixViaTDT_open(TDTConfig& tc, TDTState& ts);
00674 virtual void receiveViaTDT_open(TDTConfig& tc, TDTState& ts);
00675
00676 #endif
00677
00678 virtual void readWasimStatisticFile(string fn, int numGages, int numHeaderRows, bool withSum);
00679 virtual int getNumGages(string fn, int numHeaderRows);
00680 virtual int findDateRow(MatrixDouble& DateRow, int row);
00681
00682
00683
00684
00685
00686 virtual void readFromTranslationMatrix(int z, int s, ifstream& in);
00687 virtual void readFromTranslationMatrix(ifstream& in);
00688 virtual void readFromTranslationMatrix(char* fn);
00689
00690 virtual void printToScreenTranslationMatrix(int z, int s);
00691 virtual void printToScreenTranslationMatrix();
00692
00694
00696
00697
00698
00699
00700 virtual int getPositionInColumn(double val, int col);
00701 virtual int getPositionInColumn(int val, int col);
00702
00703
00704 virtual int getPositionInColumn(int val);
00705 virtual int getPositionInColumn(double val);
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720 virtual void makeHist(MatrixDouble& histMat);
00721 virtual void makeHist(MatrixDouble& histMat, double first);
00722
00723 virtual void unique(MatrixDouble& uniqueM);
00724 virtual void unique(int col, MatrixDouble& uniqueM);
00725
00726
00727 virtual void transpose(MatrixDouble& m);
00728
00729
00730
00731
00732
00733
00734
00735
00736 virtual void extractColumns(MatrixDouble& matTarget, MatrixDouble& transKey);
00737
00738
00739
00740
00741
00742
00743 virtual void findMinMax(MatrixDouble& minmax, double nodata);
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754 virtual int findMaxNotTrue(int col, MatrixDouble& isTrue);
00755
00756
00757 virtual string mat2string();
00758 virtual void string2mat(string s);
00759
00760
00761
00762 virtual void copyToLargerMatrix(int row, int startCol, MatrixDouble& fullVector);
00763 virtual void copyToLargerMatrix(int startCol, MatrixDouble& fullVector) ;
00764 virtual double sumVector();
00765 virtual void roundToInteger();
00766
00767 virtual void writeErrorToLogfile(string fn, char* fehlertext, int type);
00768
00769
00770 };
00771
00772 #ifdef DO_TDT
00773
00774 void sendStringViaTDT_open(string s, TDTConfig& tc, TDTState& ts);
00775 void sendStringViaTDT(string s, char* configFile);
00776
00777 string receiveStringViaTDT_open(TDTConfig& tc, TDTState& ts);
00778 string receiveStringViaTDT(char* configFile);
00779
00780
00781 #endif
00782
00783 #endif
00784
00785
00786
00787
00788