- 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.
43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
#include <TF1.h>
|
|
double model(double* x, double* p) {
|
|
double result = x[0];
|
|
double factor = 0.0;
|
|
double slope = 0.7;
|
|
if(TMath::Abs(x[0]) < 16.2) result=x[0]*slope;
|
|
else if(TMath::Abs(x[0]) < 49.8 ) result=x[0]*slope+TMath::Sign(1.0,x[0])*factor;
|
|
else if(TMath::Abs(x[0]) < 85.2 ) result=x[0]*slope+TMath::Sign(1.0,x[0])*factor*2;
|
|
else result=x[0]*slope+TMath::Sign(1.0,x[0])*factor*3;
|
|
return result;
|
|
}
|
|
|
|
double model_invert(double *y, double *q) {
|
|
double result=y[0];
|
|
double slope = 0.7;
|
|
double factor = 40.0;
|
|
if(TMath::Abs(y[0]) < 16.2/slope) result = y[0]/slope;
|
|
else if(TMath::Abs(y[0]) < 49.8/slope ) result=y[0]/slope-TMath::Sign(1.0,y[0])*factor;
|
|
else if(TMath::Abs(y[0]) < 85.2/slope ) result=y[0]/slope-TMath::Sign(1.0,y[0])*factor*2;
|
|
else result=y[0]/slope-TMath::Sign(1.0,y[0])*factor*3;
|
|
return result;
|
|
}
|
|
|
|
/*void testmodel() {
|
|
TF1 eqline("x","x",-200,200);
|
|
eqline.Draw("");
|
|
eqline.SetLineStyle(kDashed);
|
|
|
|
//TF1 f1("model",model,-200,200,2);
|
|
TF1 f1("model_inv",model_invert,-200,200,2);
|
|
eqline.SetNpx(10000);
|
|
f1.SetNpx(10000);
|
|
std::vector<double> pars = {0.0,1.};
|
|
f1.SetParameters(pars.data());
|
|
f1.SetLineColor(kGreen+2);
|
|
f1.SetLineStyle(kLine);
|
|
f1.Draw("L SAME");
|
|
|
|
gPad->Modified(); gPad->Update();
|
|
while(gPad->WaitPrimitive());
|
|
|
|
}*/
|