modified: eloss_calculations/alpha_lookup_50MeV_250torr_3pc.dat
modified: eloss_calculations/aluminum_lookup_80MeV_250torr_3pc.dat
modified: eloss_calculations/deutron_lookup_30MeV_250torr_3pc.dat
modified: eloss_calculations/fluorine_lookup_70MeV_250torr_3pc.dat
modified: eloss_calculations/oxygen_lookup_70MeV_250torr_3pc.dat
modified: eloss_calculations/proton_lookup_30MeV_250torr_3pc.dat
new file: scratch/overlay_2d.C small script to overlay multiple 2d histograms from the same file
various scripts used to optimise the different parameters in the analysis
new file: scratch/CompareElasticLocus.C
new file: scratch/PlotDedxScan.C
new file: scratch/RunMultiFit.C
new file: scratch/ScanDedxScale.C
107 lines
4.7 KiB
C
107 lines
4.7 KiB
C
/***************************************************
|
|
*
|
|
* PlotDedxScan.C
|
|
*
|
|
* Builds the comma-separated file/label lists make_pretty.C's
|
|
* multi-file overlay function expects, straight from your
|
|
* DEDX_SCALE scan -- so you can superimpose every scale's histogram
|
|
* for a given gate (a1c2fix, a1c1c2, etc.) in one call, without
|
|
* typing out each file path and label by hand.
|
|
*
|
|
* Only load THIS file -- it already #includes make_pretty.C.
|
|
*
|
|
* Usage:
|
|
*
|
|
* .L PlotDedxScan.C
|
|
** std::vector<double> scales = {0.70, 0.75, 0.80, 0.85, 0.87, 0.90, 0.92, 0.95, 1.00, 1.05, 1.10, 1.15};
|
|
* PlotDedxScan(scales,
|
|
* "_m27Alax+misc_sx3_p/m27Alax_Ex_from_p_a1c1c2_sx3");
|
|
*
|
|
* // or for the a1c2fix gate:
|
|
* PlotDedxScan(scales,
|
|
* "_m27Alax+misc_sx3_p/m27Alax_Ex_from_p_a1c2fix_sx3");
|
|
*
|
|
***************************************************/
|
|
|
|
#ifndef PlotDedxScan_C
|
|
#define PlotDedxScan_C
|
|
|
|
#include "scratch/make_prettyplots.C"
|
|
#include <vector>
|
|
|
|
// ============================================================
|
|
// scales : the DEDX_SCALE values from your bash scan, e.g.
|
|
// {0.70, 0.75, ..., 1.20} -- MUST match your folder
|
|
// names exactly (same decimal formatting), since each
|
|
// path is built as folderPrefix + scale + "/" + fileName
|
|
// histPath : histogram path inside each file (same for every
|
|
// scale), e.g. "_m27Alax+misc_sx3_p/m27Alax_Ex_from_p_a1c1c2_sx3"
|
|
// folderPrefix : e.g. "Output_27Al_"
|
|
// fileName : ROOT file name inside each folder, e.g. "output_27Al.root"
|
|
// xlabel,ylabel: axis titles for the overlay plot
|
|
// xMin,xMax : x-axis zoom range -- set these to the region where your
|
|
// peaks actually live (e.g. -3, 9) to cut out the flat,
|
|
// empty tails and make the overlaid curves easier to read.
|
|
// Leave at -9999 for the full auto range.
|
|
// yMin,yMax : optional y-axis range; leave at -9999 for auto
|
|
// canvasW,canvasH : output image size in pixels. Defaults here (3000x2100)
|
|
// are larger than make_pretty.C's own defaults (2100x1575)
|
|
// since a busy multi-curve overlay benefits from the extra
|
|
// resolution -- especially once zoomed in with xMin/xMax.
|
|
// maxOverlay : if scales.size() exceeds this, evenly subsample down to
|
|
// maxOverlay curves (always keeping the first and last)
|
|
// rather than plotting everything -- past ~5-6 overlapping
|
|
// histograms in the same narrow x-range, more curves stops
|
|
// helping and just makes the plot harder to read regardless
|
|
// of resolution. Set to 0 to disable subsampling entirely.
|
|
// ============================================================
|
|
void PlotDedxScan(
|
|
std::vector<double> scales,
|
|
TString histPath,
|
|
TString folderPrefix = "Output_27Al_",
|
|
TString fileName = "output_27Al.root",
|
|
TString xlabel = "Excitation Energy [MeV]",
|
|
TString ylabel = "Counts",
|
|
double xMin = -4.0,
|
|
double xMax = 8.0,
|
|
double yMin = -9999.0,
|
|
double yMax = -9999.0,
|
|
int canvasW = 3000,
|
|
int canvasH = 2100,
|
|
int maxOverlay = 6
|
|
){
|
|
if (maxOverlay > 0 && (int)scales.size() > maxOverlay) {
|
|
std::vector<double> subset;
|
|
int n = (int) scales.size();
|
|
for (int k = 0; k < maxOverlay; k++) {
|
|
int idx = (maxOverlay == 1) ? 0 : (int) std::round(k * (n - 1) / double(maxOverlay - 1));
|
|
subset.push_back(scales[idx]);
|
|
}
|
|
printf("PlotDedxScan: %d scales given, subsampling to %d for readability: ", n, maxOverlay);
|
|
for (double s : subset) printf("%.2f ", s);
|
|
printf("\n(pass maxOverlay=0, or maxOverlay >= %d, to plot all of them)\n", n);
|
|
scales = subset;
|
|
}
|
|
if (scales.empty()) {
|
|
printf("PlotDedxScan: no scale values given.\n");
|
|
return;
|
|
}
|
|
|
|
TString filesCSV, labelsCSV;
|
|
for (size_t i = 0; i < scales.size(); i++) {
|
|
TString folder = Form("%s%.2f", folderPrefix.Data(), scales[i]);
|
|
TString path = folder + "/" + fileName;
|
|
|
|
if (i > 0) { filesCSV += ","; labelsCSV += ","; }
|
|
filesCSV += path;
|
|
labelsCSV += Form("%.2f", scales[i]);
|
|
}
|
|
|
|
printf("Overlaying %d scale value(s) for histogram: %s\n", (int) scales.size(), histPath.Data());
|
|
|
|
// matches make_pretty.C's multi-file overlay overload exactly:
|
|
// (filesCSV, labelsCSV, histName, xAxisLabel, yAxisLabel, yMin, yMax, xMin, xMax, canvasW, canvasH)
|
|
make_prettyplots(filesCSV, labelsCSV, histPath, xlabel, ylabel, yMin, yMax, xMin, xMax, canvasW, canvasH);
|
|
}
|
|
|
|
#endif |