modified: Calibration.C looking at 1d hists for sx3 backs

This commit is contained in:
Vignesh Sitaraman 2025-09-30 15:45:16 -04:00
parent 265ebd3372
commit ecd755e09c

View File

@ -40,6 +40,8 @@ TH2F *hqqqIndexVE_gm;
TH2F *hsx3Coin; TH2F *hsx3Coin;
TH2F *hqqqCoin; TH2F *hqqqCoin;
TH2F *hqqqPolar; TH2F *hqqqPolar;
TH1F *hsx3E_raw;
TH1F *hsx3E_calib;
TCutG *cut; TCutG *cut;
TCutG *cut1; TCutG *cut1;
@ -53,8 +55,8 @@ const int MAX_BK = 4;
const int MAX_QQQ = 4; const int MAX_QQQ = 4;
const int MAX_RING = 16; const int MAX_RING = 16;
const int MAX_WEDGE = 16; const int MAX_WEDGE = 16;
// double backGain[MAX_SX3][MAX_BK][MAX_UP][MAX_DOWN] = {{{{0}}}}; double backGain[MAX_SX3][MAX_BK] = {{0}};
// bool backGainValid[MAX_SX3][MAX_BK][MAX_UP][MAX_DOWN] = {{{{false}}}}; bool backGainValid[MAX_SX3][MAX_BK] = {{false}};
double frontGain[MAX_SX3][MAX_BK][MAX_UP][MAX_DOWN] = {{{{0}}}}; double frontGain[MAX_SX3][MAX_BK][MAX_UP][MAX_DOWN] = {{{{0}}}};
bool frontGainValid[MAX_SX3][MAX_BK][MAX_UP][MAX_DOWN] = {{{{false}}}}; bool frontGainValid[MAX_SX3][MAX_BK][MAX_UP][MAX_DOWN] = {{{{false}}}};
double uvdslope[MAX_SX3][MAX_BK][MAX_UP][MAX_DOWN] = {{{{0}}}}; double uvdslope[MAX_SX3][MAX_BK][MAX_UP][MAX_DOWN] = {{{{0}}}};
@ -74,6 +76,8 @@ void Calibration::Begin(TTree * /*tree*/)
hsx3Coin = new TH2F("hsx3Coin", "SX3 Coincident", 24 * 12, 0, 24 * 12, 24 * 12, 0, 24 * 12); hsx3Coin = new TH2F("hsx3Coin", "SX3 Coincident", 24 * 12, 0, 24 * 12, 24 * 12, 0, 24 * 12);
hsx3IndexVE = new TH2F("hsx3IndexVE", "SX3 index vs Energy; sx3 index ; Energy", 24 * 12, 0, 24 * 12, 400, 0, 5000); hsx3IndexVE = new TH2F("hsx3IndexVE", "SX3 index vs Energy; sx3 index ; Energy", 24 * 12, 0, 24 * 12, 400, 0, 5000);
hsx3IndexVE_gm = new TH2F("hsx3IndexVE_cal", "SX3 index vs Energy (calibrated); SX3 index ; Energy", 24 * 12, 0, 24 * 12, 400, 0, 5000); hsx3IndexVE_gm = new TH2F("hsx3IndexVE_cal", "SX3 index vs Energy (calibrated); SX3 index ; Energy", 24 * 12, 0, 24 * 12, 400, 0, 5000);
hsx3E_raw = new TH1F("hsx3E_raw", "SX3 Back Energy (raw); Energy (arb); Counts", 4000, 0, 16000);
hsx3E_calib = new TH1F("hsx3E_calib", "SX3 Back Energy (gm); Energy (kev); Counts", 4000, 0, 16000);
hqqqIndexVE = new TH2F("hqqqIndexVE", "QQQ index vs Energy; QQQ index ; Energy", 4 * 2 * 16, 0, 4 * 2 * 16, 400, 0, 5000); hqqqIndexVE = new TH2F("hqqqIndexVE", "QQQ index vs Energy; QQQ index ; Energy", 4 * 2 * 16, 0, 4 * 2 * 16, 400, 0, 5000);
hqqqIndexVE_gm = new TH2F("hqqqIndexVE_cal", "QQQ index vs Energy (calibrated); QQQ index ; Energy", 4 * 2 * 16, 0, 4 * 2 * 16, 400, 0, 5000); hqqqIndexVE_gm = new TH2F("hqqqIndexVE_cal", "QQQ index vs Energy (calibrated); QQQ index ; Energy", 4 * 2 * 16, 0, 4 * 2 * 16, 400, 0, 5000);
hsx3Coin = new TH2F("hsx3Coin", "SX3 Coincident", 24 * 12, 0, 24 * 12, 24 * 12, 0, 24 * 12); hsx3Coin = new TH2F("hsx3Coin", "SX3 Coincident", 24 * 12, 0, 24 * 12, 24 * 12, 0, 24 * 12);
@ -84,26 +88,26 @@ void Calibration::Begin(TTree * /*tree*/)
sx3_contr.ConstructGeo(); sx3_contr.ConstructGeo();
pw_contr.ConstructGeo(); pw_contr.ConstructGeo();
// ----------------------- Load Back Gains // ----------------------- Load Back Gains
// { {
// std::string filename = "sx3_GainMatchback.txt"; std::string filename = "sx3_GainMatchback.txt";
// std::ifstream infile(filename); std::ifstream infile(filename);
// if (!infile.is_open()) if (!infile.is_open())
// { {
// std::cerr << "Error opening " << filename << "!" << std::endl; std::cerr << "Error opening " << filename << "!" << std::endl;
// } }
// else else
// { {
// int id, bk, u, d; int id, bk, u, d;
// double gain; double gain;
// while (infile >> id >> bk >> u >> d >> gain) while (infile >> id >> bk >> u >> d >> gain)
// { {
// backGain[id][bk][u][d] = gain; backGain[id][bk] = gain;
// backGainValid[id][bk][u][d] = (gain > 0); backGainValid[id][bk] = (gain > 0);
// } }
// infile.close(); infile.close();
// std::cout << "Loaded back gains from " << filename << std::endl; std::cout << "Loaded back gains from " << filename << std::endl;
// } }
// } }
// ----------------------- Load Front Gains // ----------------------- Load Front Gains
{ {
@ -277,13 +281,6 @@ Bool_t Calibration::Process(Long64_t entry)
bool haveFrontPair = (sx3ChUp >= 0 || sx3ChDn >= 0); bool haveFrontPair = (sx3ChUp >= 0 || sx3ChDn >= 0);
bool haveBack = (sx3ChBk >= 0); bool haveBack = (sx3ChBk >= 0);
int sx3Id = sx3ID[0].first;
// CORRECTED: map channel (0..7) to front-index (0..3)
int bk_index = (haveBack ? sx3ChBk - 8 : -1);
int up_index = (sx3ChUp >= 0 ? sx3ChUp / 2 : -1); // <<-- IMPORTANT FIX
int dn_index = (sx3ChDn >= 0 ? sx3ChDn / 2 : -1); // <<-- IMPORTANT FIX
double GM_EUp = 0.0, GM_EDn = 0.0, calibEBack = 0.0; double GM_EUp = 0.0, GM_EDn = 0.0, calibEBack = 0.0;
if (haveBack) if (haveBack)
@ -291,14 +288,23 @@ Bool_t Calibration::Process(Long64_t entry)
// --- ALWAYS fill raw ADC for diagnostics // --- ALWAYS fill raw ADC for diagnostics
// (temporarily use the existing spectrum to confirm fills) // (temporarily use the existing spectrum to confirm fills)
// If you don't want raw values mixed with calibrated later, create a separate _raw array. // If you don't want raw values mixed with calibrated later, create a separate _raw array.
hSX3Spectra[sx3Id][bk_index][up_index][dn_index]->Fill(sx3EUp); hSX3Spectra[sx3ID[0].first][sx3ChBk][sx3ChUp][sx3ChDn]->Fill(sx3EUp);
// --- If gain is available, also fill calibrated energy // --- If gain is available, also fill calibrated energy
if (frontGainValid[sx3Id][bk_index][up_index][dn_index]) if (frontGainValid[sx3ID[0].first][sx3ChBk][sx3ChUp][sx3ChDn])
{ {
GM_EUp = frontGain[sx3Id][bk_index][up_index][dn_index] * sx3EUp; GM_EUp = frontGain[sx3ID[0].first][sx3ChBk][sx3ChUp][sx3ChDn] * sx3EUp;
if (GM_EUp > 50.0) if (GM_EUp > 50.0)
hSX3Spectra[sx3Id][bk_index][up_index][dn_index]->Fill(GM_EUp); // optional: mixes raw+calib hSX3Spectra[sx3ID[0].first][sx3ChBk][sx3ChUp][sx3ChDn]->Fill(GM_EUp); // optional: mixes raw+calib
}
// --- If back gain is available, also fill calibrated energy
hsx3E_raw->Fill(sx3EBk);
if (backGainValid[sx3ID[0].first][sx3ChBk])
{
calibEBack = backGain[sx3ID[0].first][sx3ChBk] * sx3EBk;
if (calibEBack > 50.0)
hsx3E_calib->Fill(calibEBack); // optional: mixes raw+calib
} }
// Keep the other diagnostic plots // Keep the other diagnostic plots
@ -309,23 +315,11 @@ Bool_t Calibration::Process(Long64_t entry)
if (GM_EUp > 50.0 && sx3EBk > 50.0) if (GM_EUp > 50.0 && sx3EBk > 50.0)
{ {
sx3_contr.CalSX3Pos(sx3Id, sx3ChUp, sx3ChDn, sx3ChBk, GM_EUp, sx3EDn); sx3_contr.CalSX3Pos(sx3ID[0].first, sx3ChUp, sx3ChDn, sx3ChBk, GM_EUp, sx3EDn);
hitPos = sx3_contr.GetHitPos(); hitPos = sx3_contr.GetHitPos();
HitNonZero = true; HitNonZero = true;
} }
} }
else
{
// Debug print for channels that didn't pass validation -- helps find indexing problems
static int dbgCount = 0;
if (dbgCount < 20) // only print first few to avoid flood
{
std::cout << Form("DEBUG SX3 skip: id=%d chUp=%d chDn=%d chBk=%d -> up_idx=%d dn_idx=%d bk_idx=%d",
sx3Id, sx3ChUp, sx3ChDn, sx3ChBk, up_index, dn_index, bk_index)
<< std::endl;
dbgCount++;
}
}
} }
} }