Is there a method to perform a deconvolution in RooFit?

I used the RooFFTConvPdf function to convolve two RooHistPdf’s and was wondering if there was a reverse (deconvolution function) that would give me back the original input.

I am aware of the deconvolution in TSpectrum but that seems to deal specifically with peaks, which doesn’t work for my case.

Here are the specific lines of code I am discussing:


RooRealVar x(“x”,“x”, 0, 2500);

//create DataHist for pdf creation
RooDataHist* RDHh2 = new RooDataHist(“RDHh2”, " ", x, h2);
RooDataHist* RDHPulse = new RooDataHist(“RDHPulse”, " ", x, PulseHisto);

RooHistPdf* pdfh2 = new RooHistPdf(“pdfh2”, “pdfh2”, x, RDHh2, 2);
pdfPulse = new RooHistPdf(“pdfPulse”, “pdfPulse”, x, *RDHPulse, 2);
RooFFTConvPdf expTOF(“ExpTOF”, “convolved spectrum”, x, *pdfh2, *pdfaccPulse);

TH1 *histoExpTOF = expTOF.createHistogram(“histoExpTOF”,x,0,0,0);
TH1 *histoPdfPulse = pdfPulse->createHistogram(“pdfPulse”,x,0,0,0);


I am attempting to deconvolve the convolved histoExpTOF with histoPdfPulse, where histoExpTOF is convolved with histoPdfPusle. Here are figures of each histogram.


You might want to look at the unfolding classes we have in ROOT like Unfold or RooUnfold which is a software package based on ROOT but not part of the distribution


Hi Lorenzo,

Thank you for the suggestion. I did think about using unfolding classes, but for what I found, I had to use some form of a response matrix, which I do not have in the actual data.