/// \file /// \ingroup tutorial_spectrum /// \notebook /// Example to illustrate the influence of number of iterations in deconvolution /// in high resolution peak searching function (class TSpectrum). /// /// \macro_output /// \macro_image /// \macro_code /// /// \authors Miroslav Morhac, Olivier Couet void SearchHR3() { Double_t fPositionX[100]; Double_t fPositionY[100]; Int_t fNPeaks = 0; Int_t i,nfound,bin; const Int_t nbins = 1024; Double_t xmin = 0; Double_t xmax = nbins; Double_t a; Double_t source[nbins], dest[nbins]; gROOT->ForceStyle(); TString dir = gROOT->GetTutorialDir(); TString file = dir+"/spectrum/TSpectrum.root"; TFile *f = new TFile(file.Data()); TH1F *h = (TH1F*) f->Get("back2"); h->SetTitle("Influence of # of iterations in deconvolution in peak searching"); h->GetXaxis()->SetRange(1,nbins); TH1F *d1 = new TH1F("d1","",nbins,xmin,xmax); TH1F *d2 = new TH1F("d2","",nbins,xmin,xmax); TH1F *d3 = new TH1F("d3","",nbins,xmin,xmax); TH1F *d4 = new TH1F("d4","",nbins,xmin,xmax); TSpectrum *s = new TSpectrum(); for (i = 0; i < nbins; i++) source[i]=h->GetBinContent(i + 1); nfound = s->SearchHighRes(source, dest, nbins, 8, 2, kTRUE, 3, kTRUE, 3); Double_t *xpeaks = s->GetPositionX(); for (i = 0; i < nfound; i++) { a=xpeaks[i]; bin = 1 + Int_t(a + 0.5); fPositionX[i] = h->GetBinCenter(bin); fPositionY[i] = h->GetBinContent(bin); } TPolyMarker * pm = (TPolyMarker*)h->GetListOfFunctions()->FindObject("TPolyMarker"); if (pm) { h->GetListOfFunctions()->Remove(pm); delete pm; } pm = new TPolyMarker(nfound, fPositionX, fPositionY); h->GetListOfFunctions()->Add(pm); pm->SetMarkerStyle(23); pm->SetMarkerColor(kRed); pm->SetMarkerSize(1.3); h->Draw("L"); for (i = 0; i < nbins; i++) d1->SetBinContent(i + 1,dest[i]); d1->SetLineColor(kRed); d1->Draw("SAME"); for (i = 0; i < nbins; i++) source[i]=h->GetBinContent(i + 1); s->SearchHighRes(source, dest, nbins, 8, 2, kTRUE, 10, kTRUE, 3); for (i = 0; i < nbins; i++) d2->SetBinContent(i + 1,dest[i]); d2->SetLineColor(kBlue); d2->Draw("SAME"); for (i = 0; i < nbins; i++) source[i]=h->GetBinContent(i + 1); s->SearchHighRes(source, dest, nbins, 8, 2, kTRUE, 100, kTRUE, 3); for (i = 0; i < nbins; i++) d3->SetBinContent(i + 1,dest[i]); d3->SetLineColor(kGreen); d3->Draw("SAME"); for (i = 0; i < nbins; i++) source[i]=h->GetBinContent(i + 1); s->SearchHighRes(source, dest, nbins, 8, 2, kTRUE, 1000, kTRUE, 3); for (i = 0; i < nbins; i++) d4->SetBinContent(i + 1,dest[i]); d4->SetLineColor(kMagenta); d4->Draw("SAME"); printf("Found %d candidate peaks\n",nfound); }