Check of valid fit range, and added the plus/minus1 to the range finder functions.

This commit is contained in:
redford_s
2019-02-07 14:05:10 +01:00
parent a17198a488
commit 7a47d6e3e5

View File

@ -21,7 +21,7 @@
double lowestFullySwitchedPoint(const vector<double> &higher_filter, const vector<double> &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());
double lowest_fully_switched_val = *max_element(higher_filter.begin(),higher_filter.end())+1;
for(vector<double>::const_iterator it = higher_filter.begin(); it != higher_filter.end(); ++it) {
if (find(lower_filter.begin(), lower_filter.end(), *it) == lower_filter.end()) {
@ -37,7 +37,7 @@ double lowestFullySwitchedPoint(const vector<double> &higher_filter, const vecto
double highestFullySwitchedPoint(const vector<double> &lower_filter, const vector<double> &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());
double highest_fully_switched_val = *min_element(lower_filter.begin(),lower_filter.end())-1;
for(vector<double>::const_iterator it = lower_filter.begin(); it != lower_filter.end(); ++it) {
if (find(higher_filter.begin(), higher_filter.end(), *it) == higher_filter.end()) {
@ -987,23 +987,25 @@ int main(int argc, char* argv[]) {
TF1 *fit_g1 = 0;
TF1 *fit_g2 = 0;
double rangemin_g0;
double rangemax_g0;
double rangemin_g1;
double rangemax_g1;
double rangemin_g2;
double rangemax_g2;
double rangemin_g0 = 0;
double rangemax_g0 = 0;
double rangemin_g1 = 0;
double rangemax_g1 = 0;
double rangemin_g2 = 0;
double rangemax_g2 = 0;
if (r0_adc.size() > 1) {
grap_g0 = new TGraphErrors(r0_adc.size(),&(r0_filter[0]),&(r0_adc[0]),&(r0_ferr[0]),&(r0_adcerr[0]));
if (module_str == "003") {
rangemin_g0 = 2.0;
} else {
rangemin_g0 = 0.15;
}
rangemax_g0 = highestFullySwitchedPoint(r0_filter, r1_filter);
if (rangemax_g0 > rangemin_g0) {
grap_g0 = new TGraphErrors(r0_adc.size(),&(r0_filter[0]),&(r0_adc[0]),&(r0_ferr[0]),&(r0_adcerr[0]));
fit_g0 = new TF1("fit_g0","[0]+[1]*x",rangemin_g0, rangemax_g0);
fit_g0->SetParameter(0, 3000.);
fit_g0->SetParameter(1, 30000.);
@ -1091,11 +1093,10 @@ int main(int argc, char* argv[]) {
delete flat_g0;
}
}
}
if (r1_adc.size() > 1) {
grap_g1 = new TGraphErrors(r1_adc.size(),&(r1_filter[0]),&(r1_adc[0]),&(r1_ferr[0]),&(r1_adcerr[0]));
rangemin_g1 = 2.;
if (module_str == "032") {
rangemin_g1 = 0.75;
@ -1103,6 +1104,10 @@ int main(int argc, char* argv[]) {
rangemin_g1 = lowestFullySwitchedPoint(r1_filter, r0_filter);
}
rangemax_g1 = highestFullySwitchedPoint(r1_filter, r2_filter);
if (rangemax_g1 > rangemin_g1) {
grap_g1 = new TGraphErrors(r1_adc.size(),&(r1_filter[0]),&(r1_adc[0]),&(r1_ferr[0]),&(r1_adcerr[0]));
fit_g1 = new TF1("fit_g1","[0]+[1]*x",rangemin_g1,rangemax_g1);
fit_g1->SetParameter(0, 10000.);
fit_g1->SetParameter(1, -0.1);
@ -1215,11 +1220,10 @@ int main(int argc, char* argv[]) {
delete flat_g1;
}
}
}
if (r2_adc.size() > 1) {
grap_g2 = new TGraphErrors(r2_adc.size(),&(r2_filter[0]),&(r2_adc[0]),&(r2_ferr[0]),&(r2_adcerr[0]));
rangemin_g2 = 0;
if (module_str == "032") {
rangemin_g2 = 5;
@ -1227,6 +1231,10 @@ int main(int argc, char* argv[]) {
rangemin_g2 = lowestFullySwitchedPoint(r2_filter, r1_filter);
}
rangemax_g2 = *max_element(r2_filter.begin(),r2_filter.end());
if (rangemax_g2 > rangemin_g2) {
grap_g2 = new TGraphErrors(r2_adc.size(),&(r2_filter[0]),&(r2_adc[0]),&(r2_ferr[0]),&(r2_adcerr[0]));
fit_g2 = new TF1("fit_g2","[0]+[1]*x",rangemin_g2, rangemax_g2);
fit_g2->SetParameter(0, 10000.);
fit_g2->SetParameter(1, -0.01);
@ -1339,8 +1347,9 @@ int main(int argc, char* argv[]) {
delete flat_g2;
}
}
}
if (r0_adc.size() > 1 && r1_adc.size() > 1) {
if (rangemax_g0 > rangemin_g0 && rangemax_g1 > rangemin_g1) {
g0overg1hist->Fill(fit_g0->GetParameter(1) / fit_g1->GetParameter(1));
g0overg1erhist->Fill(abs(fit_g0->GetParameter(1)/fit_g1->GetParameter(1))*sqrt(pow((fit_g0->GetParError(1)/fit_g0->GetParameter(1)),2) + pow((fit_g1->GetParError(1)/fit_g1->GetParameter(1)),2)));
@ -1368,7 +1377,7 @@ int main(int argc, char* argv[]) {
}
if (r1_adc.size() > 1 && r2_adc.size() > 1) {
if (rangemax_g1 > rangemin_g1 && rangemax_g2 > rangemin_g2) {
g1overg2hist->Fill(fit_g1->GetParameter(1) / fit_g2->GetParameter(1));
g1overg2erhist->Fill(abs(fit_g1->GetParameter(1)/fit_g2->GetParameter(1))*sqrt(pow((fit_g1->GetParError(1)/fit_g1->GetParameter(1)),2) + pow((fit_g2->GetParError(1)/fit_g2->GetParameter(1)),2)));
@ -1395,7 +1404,9 @@ int main(int argc, char* argv[]) {
}
}
if ((r0_adc.size() > 1 && r1_adc.size() > 1) || (r1_adc.size() > 1 && r2_adc.size() > 1)) {
if ((rangemax_g0 > rangemin_g0 && rangemax_g1 > rangemin_g1) ||
(rangemax_g1 > rangemin_g1 && rangemax_g2 > rangemin_g2)) {
if ((i >= 58000 && i < 58000+10) || // bulk
(i >= 10 && i < 10+10) || // edge
(i >= 1024+10 && i < 1024+10+10) || // inner edge
@ -1419,7 +1430,7 @@ int main(int argc, char* argv[]) {
pixel_type = "q";
}
if (r0_adc.size() > 1) {
if (rangemax_g0 > rangemin_g0) {
grap_g0->SetMarkerStyle(20);
grap_g0->SetMarkerColor(kBlue);
grap_g0->SetLineColor(kBlue);
@ -1433,7 +1444,7 @@ int main(int argc, char* argv[]) {
grap_g1->GetFunction("fit_g1")->Delete();
grap_g1->FindObject("stats")->Delete();
if (r2_adc.size() > 1) {
if (rangemax_g2 > rangemin_g2) {
grap_g2->SetMarkerStyle(20);
grap_g2->SetMarkerColor(kRed);
grap_g2->SetLineColor(kRed);
@ -1454,10 +1465,10 @@ int main(int argc, char* argv[]) {
grap_g1->GetYaxis()->SetTitle("ADC [ADU]");
grap_g1->GetYaxis()->SetTitleOffset(0.9);
grap_g1->Draw("AP");
if (r2_adc.size() > 1) {
if (rangemax_g2 > rangemin_g2) {
grap_g2->Draw("P");
}
if (r0_adc.size() > 1) {
if (rangemax_g0 > rangemin_g0) {
grap_g0->Draw("P");
}
mapcanvas->SetLogx();