From 3a55bcf87ca93a05131786cc8cd7d12a1fea052a Mon Sep 17 00:00:00 2001 From: "Kostyleva D.A" Date: Thu, 27 Oct 2016 16:22:25 +0300 Subject: [PATCH] Fixing bugs for the cases with less than 4 peaks --- AculData/AculCalibration.cpp | 38 +++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/AculData/AculCalibration.cpp b/AculData/AculCalibration.cpp index 2a1fbb8..48f742d 100755 --- a/AculData/AculCalibration.cpp +++ b/AculData/AculCalibration.cpp @@ -26,8 +26,8 @@ AculCalibration::AculCalibration() : fEnergy(0), fEnergyInput(0), fA(0), fB(0), // todo: change size of fA and fB in some other place fA.Set(32); fB.Set(32); - fEnergy.Set(4); - fEnergyInput.Set(4); +// fEnergy.Set(4); +// fEnergyInput.Set(4); kRaNOPEAKS = 0; fLowerPeakRelativeHight = 0.; @@ -172,7 +172,6 @@ Int_t AculCalibration::PeaksFitting(TH1* hSpectrum, Option_t* option, Double_t s Info("PeaksFitting", "In histogram %s was found %d peaks", hSpectrum->GetName(), peaksNumber); return 1; } - //should be optional output Info("PeaksFitting", "Number of peaks in %s: %d", hSpectrum->GetName(), peaksNumber); @@ -259,7 +258,8 @@ Int_t AculCalibration::PeaksFitting(TH1* hSpectrum, Option_t* option, Double_t s TMath::Sort(peaksNumber, peak, j, kFALSE); fPeak.Set(peaksNumber); for (Int_t i = 0; i < peaksNumber; i++) { - fPeak[i] = peak[j[i]]; + fPeak[i] = peak[j[i]]; + //printf("\tPeak peak\t%f\n", fPeak[i]); } if (!opt.Contains("q") || opt.Contains("v")) { @@ -273,13 +273,14 @@ Int_t AculCalibration::PeaksFitting(TH1* hSpectrum, Option_t* option, Double_t s // jestli jsou spatne, provest urcita opatreni, // napr. zapis daneho histogramu do souboru, // zapis do souboru s chybama, vypis na obrazovku, ... - for (Int_t i = 0; i < peaksNumber; i++) { - if ( !( (((1-fPeakPositionTolerance)*(fEnergy[0]/fEnergy[i])) < (fPeak[0]/fPeak[i])) && (((1+fPeakPositionTolerance)*(fEnergy[0]/fEnergy[i])) > (fPeak[0]/fPeak[i])) ) ) { - if (fCalInformation && opt.Contains("writebad")) { + for (Int_t i = 0; i < peaksNumber; i++) { + if ( !( (((1-fPeakPositionTolerance)*(fEnergy[0]/fEnergy[i])) < (fPeak[0]/fPeak[i])) && (((1+fPeakPositionTolerance)*(fEnergy[0]/fEnergy[i])) > (fPeak[0]/fPeak[i])) ) ) { + //printf("\tPeaksFitt fEnergy\t%f\n", fEnergy[i]); + if (fCalInformation /* && opt.Contains("writebad")*/) { fCalInformation->cd(); hSpectrum->Write(); } - return 2; + //return 2;*/ } }//for @@ -759,7 +760,7 @@ Bool_t AculCalibration::CalculateCalibParameters(const char* inputfile, const ch tr->Draw(fillCommand.Data(), fillCondition.Data(), "goff"); //spectrum analysis - fitControl = PeaksFitting(hRaw, "Q", fFitMinSigma); + fitControl = PeaksFitting(hRaw, "Q V v", fFitMinSigma); Info("CalculateCalibParameters", "Value of fitControl is: %d", fitControl); //ok //incorrectly treated spectrum output @@ -782,7 +783,8 @@ Bool_t AculCalibration::CalculateCalibParameters(const char* inputfile, const ch //calibration parameters calculation //ok for (Int_t j = 0; j < kRaNOPEAKS; j++) { //delat podle poctu zkoumanych piku - calGraph->SetPoint(j, fPeak[j], fEnergy[j]); //calibration graph filling + calGraph->SetPoint(j, fPeak[j], fEnergy[j]); //calibration graph filling + printf("\tPeak\t%f and energy\t%f\n", fPeak[j], fEnergy[j]); }//for calGraph->Fit(calFunction, "Q", "goff", 0, 4096); //omezit hlasitost fitovani, udelat volitelne, dodelat volby rozsahu outcalfile @@ -1101,8 +1103,11 @@ void AculCalibration::FindEnergyPeaks(TCanvas *c1, const char* ifile, const char c1->cd(i+1); PeaksFitting(hWork); hWork->Draw(); - - ofile << i <<"\t"<< fPeak[0] <<"\t"<< fPeak[1] <<"\t"<< fPeak[2] <<"\t"<< fPeak[3] <GetEntries()][kRaNOPEAKS]; + //TString hSumName; Double_t hSumE1 = 0.; Double_t hAvrE1 = 0.; Double_t hSumE2 = 0.; @@ -1150,8 +1156,10 @@ void AculCalibration::FindAverageEnergies(const char* ifile, const char* outfile hArray[i][j] = fPeak[j]; if(fPeak[j]==0.){ Error("FindAverageEnergies", "No peak in channel %i !", histList->GetEntries()); - } + } + //hSumName.Form("hSumE%i",j); } + hSumE1 += hArray[i][0]; hSumE2 += hArray[i][1]; hSumE3 += hArray[i][2]; @@ -1392,7 +1400,9 @@ void AculCalibration::SetInputParameters() { if ( strcmp(identificator, "noPeaks") == 0 ) { kRaNOPEAKS = static_cast(atoi(parameter)); - fEnergyInput.Set(kRaNOPEAKS); + fEnergyInput.Set(kRaNOPEAKS); + fEnergy.Set(kRaNOPEAKS); + fPeak.Set(kRaNOPEAKS); for (Int_t i = 0; i < kRaNOPEAKS; i++) { fipr.getline(line, lineLength); sscanf(line, "%s", parameter); -- 2.18.1