Angular distribution interface: Add user-defined angular distributions
double f_my_function(double *x, double * par)
{
    // (1+x*x)/2
    return (1+x[0]*x[0])/2;
    // It is important that the test fuction does not exceed 1 (but comes close to it)
}
void useAngularDistribution(void) {
    //define the angular function
    //it should not exceed 1!!
    //This can be a parsed TF1 object:
    TF1 *angles1 = new TF1("angles1", "(1+x*x)/2", -1, 1);
    //or a hand-made function:
    TF1 *angles2 = new TF1("angles2", f_my_function, -1, 1, 1);
    //or based on a TGraph:
    const Int_t n = 3;
    Double_t x[n], y[n];
    for (Int_t i=0; i<n; i++) {
	x[i] = i*(1./Double_t(n-1));
	y[i] = (1+x[i]*x[i])/2;
    }
    //another idea:
    y[0]=1.;
    y[1]=0.;
    y[2]=1.;
    TGraph *angles3 = new TGraph(n, x, y);
    PAngularDistribution *ang = new PAngularDistribution("my_angle", "My angular dist");
    ang->Add("q,parent,reference");
    ang->Add("p,daughter");
    ang->Add("NP11+,daughter,primary");
    //uncomment here one version
    //ang->SetAngleFunction(angles1);
    //ang->SetAngleFunction(angles2);
    ang->SetAngleFunction(angles3, kTRUE, kTRUE);
    //ang->SetAngleFunction(angles3,kFALSE,kTRUE);
    //options for TGraph version: useSpline, useSymmetry
    ang->Print();
    makeDistributionManager()->Add(ang);
    PReaction my_reaction (3, "p", "p", "p NP11+ [p pi0]", "angular_distribution", 1, 0, 0, 0);
    makeDistributionManager()->Print();
    my_reaction.Print();
    ang->Draw();
    my_reaction.Loop(10000);
}
 
 useAngularDistribution.C:1  useAngularDistribution.C:2  useAngularDistribution.C:3  useAngularDistribution.C:4  useAngularDistribution.C:5  useAngularDistribution.C:6  useAngularDistribution.C:7  useAngularDistribution.C:8  useAngularDistribution.C:9  useAngularDistribution.C:10  useAngularDistribution.C:11  useAngularDistribution.C:12  useAngularDistribution.C:13  useAngularDistribution.C:14  useAngularDistribution.C:15  useAngularDistribution.C:16  useAngularDistribution.C:17  useAngularDistribution.C:18  useAngularDistribution.C:19  useAngularDistribution.C:20  useAngularDistribution.C:21  useAngularDistribution.C:22  useAngularDistribution.C:23  useAngularDistribution.C:24  useAngularDistribution.C:25  useAngularDistribution.C:26  useAngularDistribution.C:27  useAngularDistribution.C:28  useAngularDistribution.C:29  useAngularDistribution.C:30  useAngularDistribution.C:31  useAngularDistribution.C:32  useAngularDistribution.C:33  useAngularDistribution.C:34  useAngularDistribution.C:35  useAngularDistribution.C:36  useAngularDistribution.C:37  useAngularDistribution.C:38  useAngularDistribution.C:39  useAngularDistribution.C:40  useAngularDistribution.C:41  useAngularDistribution.C:42  useAngularDistribution.C:43  useAngularDistribution.C:44  useAngularDistribution.C:45  useAngularDistribution.C:46  useAngularDistribution.C:47  useAngularDistribution.C:48  useAngularDistribution.C:49  useAngularDistribution.C:50  useAngularDistribution.C:51  useAngularDistribution.C:52  useAngularDistribution.C:53  useAngularDistribution.C:54