From b21a005c2fc5ae24aab7d479baec11f372b235a1 Mon Sep 17 00:00:00 2001 From: david Date: Mon, 6 May 2019 15:51:45 +0200 Subject: [PATCH] Blatt 2, exc1 --- Data.cc | 41 ++++++++++++++++++++ Data.hh | 25 ++++++++++++ Makefile | 29 ++++++++++++++ exc2/Data.cc | 80 ++++++++++++++++++++++++++++++++++++++ exc2/Data.hh | 34 +++++++++++++++++ exc2/Data.o | Bin 0 -> 69904 bytes exc2/Makefile | 29 ++++++++++++++ exc2/exp_A | 4 ++ exc2/exp_B | 4 ++ exc2/exp_C | 4 ++ exc2/exp_D | 4 ++ exc2/run | Bin 0 -> 86464 bytes exc2/run.cc | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++ exc2/run.o | Bin 0 -> 129888 bytes exc2/testA | 4 ++ exc2/testB | 5 +++ exp_A | 4 ++ exp_B | 4 ++ exp_C | 4 ++ exp_D | 4 ++ run.cc | 77 +++++++++++++++++++++++++++++++++++++ testA | 4 ++ testB | 5 +++ 23 files changed, 469 insertions(+) create mode 100644 Data.cc create mode 100644 Data.hh create mode 100644 Makefile create mode 100644 exc2/Data.cc create mode 100644 exc2/Data.hh create mode 100644 exc2/Data.o create mode 100644 exc2/Makefile create mode 100644 exc2/exp_A create mode 100644 exc2/exp_B create mode 100644 exc2/exp_C create mode 100644 exc2/exp_D create mode 100755 exc2/run create mode 100644 exc2/run.cc create mode 100644 exc2/run.o create mode 100644 exc2/testA create mode 100644 exc2/testB create mode 100644 exp_A create mode 100644 exp_B create mode 100644 exp_C create mode 100644 exp_D create mode 100644 run.cc create mode 100644 testA create mode 100644 testB diff --git a/Data.cc b/Data.cc new file mode 100644 index 0000000..ddb48af --- /dev/null +++ b/Data.cc @@ -0,0 +1,41 @@ +#include "Data.hh" + +#include +#include +#include + +using namespace std; + +Data::Data(const std::string& filename) { + // read data from file + // return 1 if successful, 0 if otherwise + + // open the file + ifstream file(filename); + + // check if file opened correctly + if (!file.is_open()) { + throw "Error could not open file with name: " + filename; + } + + int size = -1; + file >> size; + + // read in data from file: m_siz+1 bin edges + for (int i = 0; i < size + 1; i++) { + double edge; + file >> edge; + m_bins.push_back(edge); + } + // read in data from file: m_siz bin contents + for (int i = 0; i < size; i++) { + double entries; + file >> entries; + m_data.push_back(entries); + } + + // done! close the file + file.close(); +}; + +void Data::assertSizes() { assert(m_data.size() + 1 == m_bins.size()); } diff --git a/Data.hh b/Data.hh new file mode 100644 index 0000000..e1d0234 --- /dev/null +++ b/Data.hh @@ -0,0 +1,25 @@ +#ifndef DATA_HH +#define DATA_HH + +#include +#include + +class Data { + public: + Data(const std::string& filename); + + unsigned int size() const { return m_data.size(); } + double measurement(int i) const { return m_data[i]; } + double binCenter(int i) const { return 0; } + double binLow(int i) const { return 0; } + double binHigh(int i) const { return 0; } + double error(int i) const { return 0; } + + private: + Data() {} // disallow empty data + void assertSizes(); + std::vector m_data; + std::vector m_bins; +}; + +#endif diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..87ccc2f --- /dev/null +++ b/Makefile @@ -0,0 +1,29 @@ +# Makefile for intro to C++ + +CPP=g++ +LD=g++ + +CFLAGS = -std=c++11 +LFLAGS = + +RCXX=$(CFLAGS) $(ROOTCFLAGS) +RLXX=$(LFLAGS) $(ROOTLIBS) + +SRC1= Data.o + +%.o: %.cc %.hh + $(CPP) $(RCXX) -c $< + +all: run + +run.o: run.cc Data.hh + $(CPP) $(RCXX) -c $< + +run: $(SRC1) run.o + $(LD) $(SRC1) run.o $(RLXX) -o run + @echo '-> run created!' + +clean: + @rm -f *~ + @rm -f *.o + @rm -f *.x diff --git a/exc2/Data.cc b/exc2/Data.cc new file mode 100644 index 0000000..c6daab6 --- /dev/null +++ b/exc2/Data.cc @@ -0,0 +1,80 @@ +#include "Data.hh" + +#include +#include +#include + +using namespace std; + +Data::Data(const std::string& filename) { + // read data from file + // return 1 if successful, 0 if otherwise + + m_name = filename; + + // open the file + ifstream file(filename); + + // check if file opened correctly + if (!file.is_open()) { + throw "Error could not open file with name: " + filename; + } + + int size = -1; + file >> size; + + // read in data from file: m_siz+1 bin edges + for (int i = 0; i < size + 1; i++) { + double edge; + file >> edge; + m_bins.push_back(edge); + } + // read in data from file: m_siz bin contents + for (int i = 0; i < size; i++) { + double entries; + file >> entries; + m_data.push_back(entries); + } + + for (int i = 0; i < size; i++) { + double uncertainty; + file >> uncertainty; + m_uncertainty.push_back(uncertainty); + } + + // done! close the file + file.close(); +}; + +int Data::checkCompatibility(const Data* in, int N) const { + assert(in->size() == size()); + int fails = 0; + + for (int i = 0; i < size(); i++) { + if (abs(in->measurement(i) - measurement(i)) > N * (in->uncertainty(i) + + uncertainty(i))) { + fails++; + } + } + return fails; +} + +Data operator+(const Data& a, const Data& b) { + + assert(a.checkCompatibility(&b, 3) == 0); + vector avg_y; + vector avg_w; + for (unsigned int i = 0; i < a.size(); i++) { + double w1 = 1/(a.uncertainty(i) * a.uncertainty(i)); + double w2 = 1/(b.uncertainty(i) * b.uncertainty(i)); + avg_y.push_back((w1 * a.measurement(i) + w2 * b.measurement(i)) / (w1 + w2)); + avg_w.push_back(sqrt(1/(w1 + w2))); + } + Data d; + d.m_bins = a.m_bins; + d.m_data = avg_y; + d.m_uncertainty = avg_w; + return d; +} + +void Data::assertSizes() { assert(m_data.size() + 1 == m_bins.size()); } diff --git a/exc2/Data.hh b/exc2/Data.hh new file mode 100644 index 0000000..e843a65 --- /dev/null +++ b/exc2/Data.hh @@ -0,0 +1,34 @@ +#ifndef DATA_HH +#define DATA_HH + +#include +#include +#include + +class Data { + public: + Data(const std::string& filename); + + unsigned int size() const { return m_data.size(); } + double measurement(int i) const { return m_data[i]; } + double uncertainty(int i) const { return m_uncertainty[i]; } + double binCenter(int i) const { return 0; } + double binLow(int i) const { return 0; } + double binHigh(int i) const { return 0; } + double error(int i) const { return 0; } + std::string name() const { return m_name; } + + int checkCompatibility(const Data* in, int N) const; + + friend Data operator+(const Data& a, const Data& b); + + private: + Data() {} // disallow empty data + void assertSizes(); + std::string m_name; + std::vector m_data; + std::vector m_uncertainty; + std::vector m_bins; +}; + +#endif diff --git a/exc2/Data.o b/exc2/Data.o new file mode 100644 index 0000000000000000000000000000000000000000..b41256ec9134aa76f1e844764098ca5be28cd9b7 GIT binary patch literal 69904 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 run created!' + +clean: + @rm -f *~ + @rm -f *.o + @rm -f *.x diff --git a/exc2/exp_A b/exc2/exp_A new file mode 100644 index 0000000..2a907f7 --- /dev/null +++ b/exc2/exp_A @@ -0,0 +1,4 @@ +56 +20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200 205 210 215 220 225 230 235 240 245 250 255 260 265 270 275 280 285 290 295 300 +0.0654 0.0566 0.0552 0.0524 0.0484 0.0424 0.0404 0.0384 0.0364 0.0316 0.0328 0.0318 0.0286 0.0268 0.0244 0.0218 0.0216 0.0224 0.0166 0.0166 0.0174 0.0154 0.017 0.0126 0.0118 0.0116 0.0114 0.0112 0.0138 0.0126 0.012 0.0118 0.0122 0.01 0.0084 0.0066 0.005 0.0068 0.0066 0.0074 0.007 0.0054 0.0052 0.0044 0.0032 0.0054 0.0042 0.0032 0.0048 0.0046 0.0046 0.0038 0.0036 0.0026 0.003 0.0028 +0.00397829 0.00370097 0.00365491 0.00356101 0.0034224 0.00320325 0.00312679 0.00304841 0.00296796 0.00276536 0.00281737 0.00277409 0.00263082 0.00254668 0.00242998 0.00229687 0.00228631 0.00232826 0.0020043 0.0020043 0.00205202 0.00193049 0.0020283 0.0017462 0.00168985 0.00167547 0.00166096 0.00164633 0.00182746 0.0017462 0.00170411 0.00168985 0.00171825 0.00155563 0.00142576 0.0012638 0.0011 0.00128281 0.0012638 0.00133821 0.00130154 0.00114315 0.00112178 0.00103189 0.00088 0.00114315 0.00100817 0.00088 0.00107778 0.00105508 0.00105508 0.000958958 0.000933381 0.000793221 0.000852056 0.000823165 diff --git a/exc2/exp_B b/exc2/exp_B new file mode 100644 index 0000000..0ad91a6 --- /dev/null +++ b/exc2/exp_B @@ -0,0 +1,4 @@ +56 +20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200 205 210 215 220 225 230 235 240 245 250 255 260 265 270 275 280 285 290 295 300 +0.0506 0.045 0.0476 0.0434 0.038 0.0392 0.0398 0.0362 0.0344 0.0322 0.0336 0.0266 0.0242 0.0244 0.0254 0.0218 0.026 0.019 0.017 0.0184 0.0178 0.0202 0.0156 0.017 0.0136 0.0164 0.011 0.0134 0.0136 0.0174 0.014 0.012 0.0112 0.0116 0.0108 0.0082 0.0102 0.009 0.0102 0.0078 0.0086 0.0082 0.0074 0.0092 0.0076 0.0064 0.006 0.005 0.0056 0.005 0.0054 0.0044 0.0046 0.004 0.0048 0.004 +0.00572615 0.0054 0.00555381 0.00530313 0.00496226 0.00504 0.00507842 0.0048433 0.00472136 0.00456789 0.00466613 0.00415172 0.00396 0.00397633 0.00405699 0.00375851 0.00410463 0.00350885 0.00331904 0.003453 0.00339623 0.00361796 0.00317943 0.00331904 0.00296864 0.00325994 0.00266983 0.00294673 0.00296864 0.00335786 0.00301198 0.00278855 0.00269399 0.00274168 0.00264545 0.00230512 0.00257091 0.00241495 0.00257091 0.0022482 0.00236068 0.00230512 0.00218979 0.00244164 0.00221919 0.00203647 0.0019718 0.0018 0.00190494 0.0018 0.00187061 0.00168855 0.0017265 0.00160997 0.00176363 0.00160997 diff --git a/exc2/exp_C b/exc2/exp_C new file mode 100644 index 0000000..afe692c --- /dev/null +++ b/exc2/exp_C @@ -0,0 +1,4 @@ +56 +20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200 205 210 215 220 225 230 235 240 245 250 255 260 265 270 275 280 285 290 295 300 +0.0638 0.0588 0.0536 0.0476 0.0434 0.0498 0.0486 0.0428 0.0376 0.036 0.0304 0.0304 0.0284 0.0256 0.0258 0.0196 0.0204 0.019 0.0206 0.0204 0.0172 0.0158 0.0104 0.0136 0.0148 0.0138 0.014 0.011 0.0108 0.014 0.015 0.0144 0.0088 0.0074 0.009 0.0078 0.0042 0.008 0.0072 0.0052 0.0038 0.0036 0.0052 0.0046 0.0034 0.0044 0.0036 0.004 0.0032 0.0026 0.0046 0.003 0.0038 0.0016 0.0016 0.002 +0.00500096 0.004801 0.0045838 0.00431963 0.00412466 0.00441833 0.00436477 0.00409605 0.00383917 0.00375659 0.00345207 0.00345207 0.00333659 0.00316784 0.00318019 0.00277186 0.00282786 0.0027291 0.00284169 0.00282786 0.00259661 0.00248869 0.00201911 0.00230894 0.00240865 0.00232585 0.00234265 0.00207654 0.00205757 0.00234265 0.00242487 0.00237588 0.00185731 0.00170317 0.0018783 0.0017486 0.00128312 0.00177088 0.00168 0.00142773 0.00122049 0.00118794 0.00142773 0.00134283 0.00115447 0.00131332 0.00118794 0.0012522 0.00112 0.00100955 0.00134283 0.00108444 0.00122049 0.00079196 0.00079196 0.000885438 diff --git a/exc2/exp_D b/exc2/exp_D new file mode 100644 index 0000000..8772125 --- /dev/null +++ b/exc2/exp_D @@ -0,0 +1,4 @@ +56 +20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180 185 190 195 200 205 210 215 220 225 230 235 240 245 250 255 260 265 270 275 280 285 290 295 300 +0.0756 0.065 0.063 0.0566 0.0538 0.0508 0.0438 0.0388 0.031 0.0324 0.0302 0.0284 0.0244 0.0242 0.0194 0.0226 0.0168 0.018 0.015 0.0138 0.0144 0.0126 0.0126 0.0098 0.0086 0.0116 0.0098 0.0096 0.0148 0.0136 0.012 0.0136 0.0106 0.009 0.0076 0.0064 0.0064 0.0066 0.0064 0.0044 0.0046 0.005 0.0044 0.005 0.0048 0.0056 0.0034 0.0058 0.0058 0.0054 0.0052 0.004 0.0044 0.003 0.0034 0.0062 +0.00583267 0.00540833 0.00532447 0.00504678 0.00492037 0.00478121 0.00443959 0.00417852 0.00373497 0.00381838 0.00368646 0.00357491 0.00331361 0.0033 0.00295466 0.00318904 0.00274955 0.00284605 0.00259808 0.00249199 0.00254558 0.00238118 0.00238118 0.0021 0.00196723 0.00228473 0.0021 0.00207846 0.0025807 0.00247386 0.00232379 0.00247386 0.00218403 0.00201246 0.00184932 0.00169706 0.00169706 0.00172337 0.00169706 0.00140712 0.00143875 0.0015 0.00140712 0.0015 0.00146969 0.00158745 0.00123693 0.00161555 0.00161555 0.00155885 0.00152971 0.00134164 0.00140712 0.0011619 0.00123693 0.00167033 diff --git a/exc2/run b/exc2/run new file mode 100755 index 0000000000000000000000000000000000000000..a9909e240046eed3097f494d72d537cc0362566b GIT binary patch literal 86464 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 EA1_sNIRF3v literal 0 HcmV?d00001 diff --git a/exc2/run.cc b/exc2/run.cc new file mode 100644 index 0000000..3ce3620 --- /dev/null +++ b/exc2/run.cc @@ -0,0 +1,104 @@ +#include +#include +#include +#include + +#include "Data.hh" + +// generic function comparing two values of some type T +template +bool testEqual(const std::string& name, T expected, T real) { + if (expected != real) { + std::cout << "(" << name << ": <" << expected << ">" + << ", " << real << ") "; + return false; + } + return true; +} + +bool testReadingSize() { + std::cout << "testReadingSize..."; + Data datA("testA"); + return testEqual("size", 1, datA.size()); +} + +bool testReadingMeasurement() { + std::cout << "testReadingMeasurement..."; + Data datA("testA"); + return testEqual("measurement", 10., datA.measurement(0)); +} + +bool testReadingBinEdges() { + std::cout << "testReadingBinEdges..."; + Data datA("testA"); + return testEqual("bin low", 0., datA.binLow(0)) && + testEqual("bin high", 1., datA.binHigh(0)); +} + +bool testReadingErrors() { + std::cout << "testReadingErrors..."; + Data datA("testA"); + return testEqual("error", 2., datA.error(0)); +} + +bool testCopyConstructor() { + std::cout << "testCopyConstructor..."; + Data a("testA"); + Data b(a); + Data c = a; // equivalent to Data c(a) + return testEqual("measurement", 10., b.measurement(0)) && + testEqual("measurement", 10., c.measurement(0)); +} + +void runTests() { + std::cout << "running tests...\n"; + std::vector > tests( + {testReadingSize, testReadingMeasurement, testReadingBinEdges, + testReadingErrors, testCopyConstructor}); + for (auto test : tests) + std::cout << (test() ? " ok" : " FAILED!") << std::endl; +} + +int main() { + using namespace std; + + cout << "******************************************************" << endl; + runTests(); + cout << "******************************************************" << endl; + // create an object which holds data of experiment A + Data datA("exp_A"); + Data datB("exp_B"); + Data datC("exp_C"); + Data datD("exp_D"); + vector datas; + datas.push_back(datA); + datas.push_back(datB); + datas.push_back(datC); + datas.push_back(datD); + + // here is the data from experiment A + cout << "bin 0: from " << datA.binLow(0) << " to " << datA.binHigh(1) << endl; + cout << "measurement of experiment A in bin 0: " << datA.measurement(0) + << endl; + + for(auto data : datas) { + cout << "measurement of " << data.name() << " in bin 27: " + << data.measurement(27) << " +- " << data.uncertainty(27) << endl; + for (auto data2 : datas) { + if (abs(data.measurement(27) - data2.measurement(27)) > + data.uncertainty(27) + data2.uncertainty(27)) { + cout << "Data point doesnt agree" << endl; + } + if (data.name() != data2.name()) { + int fails = data.checkCompatibility(&data2, 3); + cout << "Fails between " << data.name() << " and " << data2.name() << + ": " << fails << endl; + } + } + } + Data dat_avg = datA + datB + datC + datD; + cout << "Combined data: " << dat_avg.measurement(27) << endl + << "Combined uncertainty: " << dat_avg.uncertainty(27) << endl; + + return 0; +} diff --git a/exc2/run.o b/exc2/run.o new file mode 100644 index 0000000000000000000000000000000000000000..abac25c3d3928693580cbfac833c9083786fc98d GIT binary patch literal 129888 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�tWO_53@?waC5>+Wno_A0UW%Dz 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∓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 G*8d;05 +#include +#include +#include + +#include "Data.hh" + +// generic function comparing two values of some type T +template +bool testEqual(const std::string& name, T expected, T real) { + if (expected != real) { + std::cout << "(" << name << ": <" << expected << ">" + << ", " << real << ") "; + return false; + } + return true; +} + +bool testReadingSize() { + std::cout << "testReadingSize..."; + Data datA("testA"); + return testEqual("size", 1, datA.size()); +} + +bool testReadingMeasurement() { + std::cout << "testReadingMeasurement..."; + Data datA("testA"); + return testEqual("measurement", 10., datA.measurement(0)); +} + +bool testReadingBinEdges() { + std::cout << "testReadingBinEdges..."; + Data datA("testA"); + return testEqual("bin low", 0., datA.binLow(0)) && + testEqual("bin high", 1., datA.binHigh(0)); +} + +bool testReadingErrors() { + std::cout << "testReadingErrors..."; + Data datA("testA"); + return testEqual("error", 2., datA.error(0)); +} + +bool testCopyConstructor() { + std::cout << "testCopyConstructor..."; + Data a("testA"); + Data b(a); + Data c = a; // equivalent to Data c(a) + return testEqual("measurement", 10., b.measurement(0)) && + testEqual("measurement", 10., c.measurement(0)); +} + +void runTests() { + std::cout << "running tests...\n"; + std::vector > tests( + {testReadingSize, testReadingMeasurement, testReadingBinEdges, + testReadingErrors, testCopyConstructor}); + for (auto test : tests) + std::cout << (test() ? " ok" : " FAILED!") << std::endl; +} + +int main() { + using namespace std; + + cout << "******************************************************" << endl; + runTests(); + cout << "******************************************************" << endl; + // create an object which holds data of experiment A + Data datA("exp_A"); + + // here is the data from experiment A + cout << "bin 0: from " << datA.binLow(0) << " to " << datA.binHigh(1) << endl; + cout << "measurement of experiment A in bin 0: " << datA.measurement(0) + << endl; + + return 0; +} diff --git a/testA b/testA new file mode 100644 index 0000000..b0556a7 --- /dev/null +++ b/testA @@ -0,0 +1,4 @@ +1 +0 1 +10 +2 diff --git a/testB b/testB new file mode 100644 index 0000000..87b5d48 --- /dev/null +++ b/testB @@ -0,0 +1,5 @@ +1 +0 1 +13 +0 1 +