ANASEN_analysis/Armory/ClassDet.h
Sudarsan Balakrishnan 2f43903269 * Main logic broken up into subunits that aim to be self-contained. The entirety of the analysis is aimed to follow:
- find sx3 events, gainmatch them, calibrate, make a vector of these called SX3_Events
	- same step for QQQ, call it QQQ_Events
	- find anodeWire clusters, cathodeWire clusters, make vectors of these
	- make PC_Events from wire clusters, save 'anode only' and 'cathode only' cases just in case

* since PC_Events, QQQ_Events, SX3_Events are all STL containers, we can pass them to functions that perform modular analyses
* In this commit:
	- 4-wire offsets used, along with reliably figuring out phi-offset between QQQ/SX3/PC. We are close, except for some QQQ fine-tuning due to their angular extent not being 90 deg
	- the pczfix step now makes sense, 1-wire calculations also loosely match between guess and pcz
	- the nonlinearity correction/dynamic range fix is just adding to the resolution
	- p(a,a) data analysable by QQQ alphas show good kinematics, when doing the following gates:
		>  A1C1 event pczs dithered, A1C2 events made into pczfix
		>  phicut (45 deg) to gate out p+a correlations, SiE < 5 MeV && PCa > 6000 to select the alpha blob in p+a
		>  Some selection on VertexReconXY so that the Perp() of the vertex is < 6mm
		>  Selection on VertexReconZ so that z is in [-173.6, 100]. Fine alignment pending

	- Doing all the above gives reasonable p(a,a) kinematic curves with good statistics, Ex peaked at -0.7 MeV, close but not perfect
	- The above steps, when repeated with oneWire anode events stored in aClusters also yields a very reasonable kinematic locus, and Ex value, even more statistics
	- Not sure how much of this is autocorrelation stuff but
		> VertexReconZ vs Ef in QQQ (Ef is eloss-fixed alpha energy using path length) shows sensible trends.
	- Why Ex is not centered around zero might need more thought.
	- VertexReconXY is suspiciously well-centered, might need some more thought as well.

* Some infrastructure that allows processing of 17F data is also in the pipeline now.
* One fairly important bug got fixed which was ignoring qqq.id[0] when making QQQ_Events

* Ideally, follow-ups to the above done on 27Al, 17F will make their own functions that are then called separately using booleans at the very top.
* The fate of proton dE signals is out to jury.
2026-05-29 17:45:57 -04:00

67 lines
1.2 KiB
C++

#ifndef ClassDet_h
#define ClassDet_h
#include <cstdio>
#define MAXMULTI 1000
class Det{
public:
Det(): multi(0) {Clear(); }
unsigned short multi; // max 65535
unsigned short id[MAXMULTI];
unsigned short ch[MAXMULTI];
unsigned short e[MAXMULTI];
unsigned long long t[MAXMULTI];
unsigned long long tf[MAXMULTI];
unsigned short sn[MAXMULTI];
unsigned short digiCh[MAXMULTI];
unsigned short index[MAXMULTI]; // id * nCh + ch;
bool used[MAXMULTI];
void Clear(){
multi = 0;
for( int i = 0; i < MAXMULTI; i++){
id[i] = 0;
ch[i] = 0;
e[i] = 0;
t[i] = 0;
tf[i] = 0;
index[i] = 0;
sn[i] = 0;
digiCh[i] = 0;
used[i] = false;
}
}
void Print(){
printf("=============================== multi : %u\n", multi);
for( int i = 0; i < multi; i++) {
printf(" %3d | %2d-%-2d(%5d) %5u %15llu %15llu\n", i, id[i], ch[i], index[i], e[i], t[i], tf[i]);
}
}
void SetDetDimension(unsigned short maxID, unsigned maxCh){
nID = maxID;
nCh = maxCh;
}
void CalIndex(){
for( int i = 0; i < multi; i++){
index[i] = id[i] * nCh + ch[i] ;
}
}
private:
unsigned short nID;
unsigned short nCh;
};
#endif