--- PamCut/CollectionActions/TrkDedxVsRigHistoAction/TrkDedxVsRigHistoAction.cpp 2009/06/10 12:41:41 1.1 +++ PamCut/CollectionActions/TrkDedxVsRigHistoAction/TrkDedxVsRigHistoAction.cpp 2009/08/05 14:01:39 1.2 @@ -10,7 +10,8 @@ #include "TrkDedxVsRigHistoAction.h" TrkDedxVsRigHistoAction::TrkDedxVsRigHistoAction(const char *actionName, TString outFileName, TString mode, - float minDedx, float maxDedx, unsigned int nBinsDedx, float minR, float maxR, unsigned int nBinsR) : + bool logBinningR, float minDedx, float maxDedx, unsigned int nBinsDedx, float minR, float maxR, + unsigned int nBinsR) : CollectionAction(actionName), _outFileName(outFileName), _histo(), _mode(mode) { _histo.SetName(GetName()); @@ -18,12 +19,26 @@ _histo.GetXaxis()->SetTitle("R (GV)"); _histo.GetYaxis()->SetTitle("dE/dx (MIP)"); - _histo.SetBins(nBinsR, minR, maxR, nBinsDedx, minDedx, maxDedx); + if (!logBinningR || minR <= 0.) + _histo.SetBins(nBinsR, minR, maxR, nBinsDedx, minDedx, maxDedx); + else { + double rigBins[nBinsR + 1]; + double maxExp = log10(maxR/minR); + for (unsigned int i = 0; i < nBinsR + 1; i++) { + rigBins[i] = minR * pow(10., (double)i / ((double)nBinsR) * maxExp); + } + double dedxBins[nBinsDedx + 1]; + double dedxStep = (maxDedx - minDedx) / (double) nBinsDedx; + for (unsigned int i = 0; i < nBinsDedx + 1; i++) { + dedxBins[i] = minDedx + i * dedxStep; + } + _histo.SetBins(nBinsR, rigBins, nBinsDedx, dedxBins); + } } void TrkDedxVsRigHistoAction::OnGood(PamLevel2 *event) { - _histo.Fill(1/event->GetTrack(0)->GetTrkTrack()->GetDeflection(), event->GetTrack(0)->GetTrkTrack()->GetDEDX()); + _histo.Fill(1 / event->GetTrack(0)->GetTrkTrack()->GetDeflection(), event->GetTrack(0)->GetTrkTrack()->GetDEDX()); } void TrkDedxVsRigHistoAction::Finalize() {