6 #include "TLorentzVector.h"
8 #include "TLorentzRotation.h"
13 #include "TClonesArray.h"
27 void plotEvts(TTree* datatr, TString outfilename=
"kineplots.root", TString
mass=
"000"){
29 gROOT->SetStyle(
"Plain");
33 massbin=(
"_m")+
mass;massbin.ReplaceAll(
" ",
"");
40 TClonesArray*
p=
new TClonesArray(
"TLorentzVector");
41 TLorentzVector* beam=NULL;
43 std::vector<int>*
q=NULL;
46 tr->SetBranchAddress(
"p",&p);
47 tr->SetBranchAddress(
"beam",&beam);
48 tr->SetBranchAddress(
"qbeam",&qbeam);
49 tr->SetBranchAddress(
"q",&q);
54 TF1* acc=
new TF1(
"acc",
"1-exp([0]*(1-x))",0,2000);
56 TH1D* hMass=
new TH1D(
"hmass",
"Mass",1000,0,20);
58 TH1D* hGJ=
new TH1D(
"hGJ",
"Cos GJ-Theta",20,-1,1);
59 TH1D* hGJacc=
new TH1D(
"hGJacc",
"acc Cos GJ-Theta",20,-1,1);
61 TH1D* hExcl=
new TH1D(
"hExcl",
"Charged Exclusivity",100,0,200);
62 TH1D* hT=
new TH1D(
"hT",
"Charged t",1000,0,2);
64 TH1D* hMom=
new TH1D(
"hMOM",
"events",50,0,50);
65 TH1D* hMombad=
new TH1D(
"hMOMbad",
"events",50,0,50);
67 TH2D* hPbad=
new TH2D(
"hPbad",
"bad events",40,0,0.05,50,0,160);
68 TH2D* hP=
new TH2D(
"hP",
"events",40,0,0.05,50,0,160);
69 TH2D* hPXYbad=
new TH2D(
"hPXYbad",
"bad events",50,-0.05,0.05,50,-0.05,0.05);
70 TH2D* hPXY=
new TH2D(
"hPXY",
"events",50,-0.05,0.05,50,-0.05,0.05);
72 acc->SetParameter(0,0.2);
74 unsigned int nevt=tr->GetEntries();
75 for(
unsigned int i=0;
i<nevt;++
i){
80 hMass->Fill(event.
p().M());
83 TLorentzVector xcharged;
85 vector<TLorentzVector> momenta;
87 for(
unsigned int ip=0;ip<
event.nParticles();++ip){
90 xcharged += momenta[ip];
91 double mag=momenta[ip].Vect().Mag();
93 hP->Fill(momenta[ip].Vect().Theta(),
94 momenta[ip].Vect().Mag());
95 hPXY->Fill(momenta[ip].Vect().X()/mag,
96 momenta[ip].Vect().Y()/mag);
103 hExcl->Fill(xcharged.E());
110 unsigned int npart=
event.nParticles();
111 unsigned int nstates=
event.nStates();
112 for(
unsigned int is=0;is<nstates;++is){
114 if(state.
qabs()==5 && state.
n()==5){
116 double m=state.
p().M();
117 double p2=state.
beam().Vect()*state.
beam().Vect();
118 double term=m*m-0.019479835;
119 double tmin=term*term*0.25/p2;
121 double tprime=t-tmin;
125 if(state.
n()==npart){
132 if(state.
n()==npart-1 && state.
q()==0){
134 hGJ->Fill(state.
p().CosTheta());
140 hGJacc->Fill(state.
p().CosTheta());
143 for(
unsigned int ip=0;ip<
event.nParticles();++ip){
144 double mag=momenta[ip].Vect().Mag();
146 hPbad->Fill(momenta[ip].Vect().Theta(),
147 momenta[ip].Vect().Mag());
148 hPXYbad->Fill(momenta[ip].Vect().X()/mag,
149 momenta[ip].Vect().Y()/mag);
155 else if(state.
n()==npart-2 && state.
q()==-1){
158 else if(state.
n()==npart-3 && state.
q()==0){
172 TCanvas* c=
new TCanvas(
"KineValidate"+massbin,
"Events",10,10,1000,800);
189 hGJ->GetYaxis()->SetRangeUser(0,hGJ->GetMaximum()*1.5);
190 hGJacc->SetLineColor(kBlue);
191 hGJacc->SetFillColor(kBlue);
193 hGJacc->Draw(
"same");
204 TCanvas* cm=
new TCanvas(
"cm",
"Mass",10,10,1000,800);
206 TF1* mparm=
new TF1(
"fm",
"(x-[0])*exp((x-[0])*([1]+(x-[0])*[2]))",0.9,3.);
207 hMass->Fit(mparm,
"",
"",0.9,3);