diff --git a/CS_analysis.cpp b/CS_analysis.cpp index 90c1a0a..492147a 100644 --- a/CS_analysis.cpp +++ b/CS_analysis.cpp @@ -18,6 +18,38 @@ #include #include +double lowestFullySwitchedPoint(const vector &higher_filter, const vector &lower_filter) { + + // find the lowest value in higher_filter that does not appear in lower_filter + double lowest_fully_switched_val = *max_element(higher_filter.begin(),higher_filter.end()); + + for(vector::const_iterator it = higher_filter.begin(); it != higher_filter.end(); ++it) { + if (find(lower_filter.begin(), lower_filter.end(), *it) == lower_filter.end()) { + if (*it < lowest_fully_switched_val) { + lowest_fully_switched_val = *it; + } + } + } + + return lowest_fully_switched_val; +} + +double highestFullySwitchedPoint(const vector &lower_filter, const vector &higher_filter) { + + // find the highest value in lower_filter that does not appear in higher_filter + double highest_fully_switched_val = *min_element(lower_filter.begin(),lower_filter.end()); + + for(vector::const_iterator it = lower_filter.begin(); it != lower_filter.end(); ++it) { + if (find(higher_filter.begin(), higher_filter.end(), *it) == higher_filter.end()) { + if (*it > highest_fully_switched_val) { + highest_fully_switched_val = *it; + } + } + } + + return highest_fully_switched_val; +} + int main(int argc, char* argv[]) { jungfrauStyle(); @@ -925,7 +957,7 @@ int main(int argc, char* argv[]) { } else { rangemin_g0 = 0.15; } - rangemax_g0 = *max_element(r0_filter.begin(),r0_filter.end()); + rangemax_g0 = highestFullySwitchedPoint(r0_filter, r1_filter); fit_g0 = new TF1("fit_g0","[0]+[1]*x",rangemin_g0, rangemax_g0); fit_g0->SetParameter(0, 3000.); fit_g0->SetParameter(1, 30000.); @@ -1028,9 +1060,9 @@ int main(int argc, char* argv[]) { if (module_str == "032") { rangemin_g1 = 0.75; } else if (module_str == "003" || module_str == "008" || module_str == "040" || module_str == "044") { - rangemin_g1 = *min_element(r1_filter.begin(),r1_filter.end()); + rangemin_g1 = lowestFullySwitchedPoint(r1_filter, r0_filter); } - rangemax_g1 = *max_element(r1_filter.begin(),r1_filter.end()); + rangemax_g1 = highestFullySwitchedPoint(r1_filter, r2_filter); fit_g1 = new TF1("fit_g1","[0]+[1]*x",rangemin_g1,rangemax_g1); fit_g1->SetParameter(0, 10000.); fit_g1->SetParameter(1, -0.1); @@ -1159,7 +1191,7 @@ int main(int argc, char* argv[]) { if (module_str == "032") { rangemin_g2 = 5; } else { - rangemin_g2 = *min_element(r2_filter.begin(),r2_filter.end()); + rangemin_g2 = lowestFullySwitchedPoint(r2_filter, r1_filter); } rangemax_g2 = *max_element(r2_filter.begin(),r2_filter.end()); fit_g2 = new TF1("fit_g2","[0]+[1]*x",rangemin_g2, rangemax_g2);