Hall-D Software  alpha
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
HistMacro_p2pi.C
Go to the documentation of this file.
1 // hnamepath: /p2pi_preco_kinfit/Hist_MissingMassSquared/MissingMassSquared
2 // hnamepath: /p2pi_preco_kinfit/Hist_MissingMassSquared_PostKinFitCut/MissingMassSquared
3 // hnamepath: /p2pi_preco_kinfit/HHist_KinFitResults/ConfidenceLevel
4 // hnamepath: /p2pi_preco/Hist_InvariantMass_Rho/InvariantMass
5 // hnamepath: /p2pi_preco_kinfit/Hist_InvariantMass_Rho_PostKinFitCut/InvariantMass
6 // hnamepath: /p2pi_preco_kinfit/Hist_InvariantMass_Rho_KinFit_PostKinFitCut/InvariantMass
7 // hnamepath: /p2pi_preco/Custom_p2pi_hists/PiPlusPsi_t
8 
9 {
10  TDirectory *locInitDirectory = gDirectory;
11  TDirectory *locReactionDirectory_NoKinFit = (TDirectory*)locInitDirectory->FindObjectAny("p2pi_preco");
12  TDirectory *locReactionDirectory_KinFit = (TDirectory*)locInitDirectory->FindObjectAny("p2pi_preco_kinfit");
13  if((locReactionDirectory_NoKinFit == NULL) || (locReactionDirectory_KinFit == NULL))
14  return;
15 
16  //Get/Make Canvas
17  TCanvas *locCanvas = NULL;
18  if(TVirtualPad::Pad() == NULL)
19  locCanvas = new TCanvas("p2pi", "p2pi", 1200, 800); //for testing
20  else
21  locCanvas = gPad->GetCanvas();
22  locCanvas->Divide(3, 2);
23 
24  // Get overall normalization to number of triggers
25  TH1D* locHist_NumEvents = (TH1D*) locReactionDirectory_KinFit->Get("NumEventsSurvivedAction");
26  double n_triggers = locHist_NumEvents->GetBinContent(1);
27 
28  double n_rho_kinfit = 0;
29  double rho_mass = 0;
30 
31  TH1I* locHist_MM2 = (TH1I*)locReactionDirectory_KinFit->Get("Hist_MissingMassSquared/MissingMassSquared");
32  TH1I* locHist_MM2_KinFitCut = (TH1I*)locReactionDirectory_KinFit->Get("Hist_MissingMassSquared_PostKinFitCut/MissingMassSquared");
33 
34  TH1I* locHist_KinFitConLev = (TH1I*)locReactionDirectory_KinFit->Get("Hist_KinFitResults/ConfidenceLevel");
35 
36  TH1I* locHist_RhoMass_MMCut = (TH1I*)locReactionDirectory_NoKinFit->Get("Hist_InvariantMass_Rho/InvariantMass");
37  TH1I* locHist_RhoMass_KinFitCut = (TH1I*)locReactionDirectory_KinFit->Get("Hist_InvariantMass_Rho_PostKinFitCut/InvariantMass");
38  TH1I* locHist_KinFitRhoMass_KinFitCut = (TH1I*)locReactionDirectory_KinFit->Get("Hist_InvariantMass_Rho_KinFit_PostKinFitCut/InvariantMass");
39 
40  TH2I* locHist_PiPlusPsi_t = (TH2I*)locReactionDirectory_NoKinFit->Get("Custom_p2pi_hists/PiPlusPsi_t");
41 
42  //Draw
43  int locNumRebin = 4;
44 
45  //rho: mm cut
46  locCanvas->cd(1);
47  gPad->SetTicks();
48  gPad->SetGrid();
49  if(locHist_RhoMass_MMCut != NULL)
50  {
51  locHist_RhoMass_MMCut->SetTitle("With MM Cut");
52  locHist_RhoMass_MMCut->Rebin(locNumRebin);
53  locHist_RhoMass_MMCut->GetYaxis()->SetRangeUser(0.0, 1.05*locHist_RhoMass_MMCut->GetBinContent(locHist_RhoMass_MMCut->GetMaximumBin()));
54  locHist_RhoMass_MMCut->GetXaxis()->SetTitleSize(0.05);
55  locHist_RhoMass_MMCut->GetYaxis()->SetTitle("");
56  locHist_RhoMass_MMCut->GetXaxis()->SetLabelSize(0.05);
57  locHist_RhoMass_MMCut->GetYaxis()->SetLabelSize(0.05);
58  locHist_RhoMass_MMCut->SetFillColor(kAzure + 1);
59  locHist_RhoMass_MMCut->Draw("");
60  }
61 
62  //psi
63  locCanvas->cd(2);
64  gPad->SetTicks();
65  gPad->SetGrid();
66  if(locHist_PiPlusPsi_t != NULL)
67  {
68  locHist_PiPlusPsi_t->SetTitle("#psi_{#pi^{+}} vs E_{#gamma}: Proton dE/dx > 2.2; E_{#gamma}; #psi_{#pi^{+}}");
69  TH1D *locHist_TimingCut_PiPlusPsi = (TH1D*)locHist_PiPlusPsi_t->ProjectionY();
70  locHist_TimingCut_PiPlusPsi->SetTitle("Coherent Edge");
71  locHist_TimingCut_PiPlusPsi->Rebin(4);
72  locHist_TimingCut_PiPlusPsi->SetMinimum(0);
73  locHist_TimingCut_PiPlusPsi->GetXaxis()->SetTitleSize(0.05);
74  locHist_TimingCut_PiPlusPsi->GetXaxis()->SetLabelSize(0.05);
75  locHist_TimingCut_PiPlusPsi->GetYaxis()->SetLabelSize(0.05);
76  locHist_TimingCut_PiPlusPsi->GetYaxis()->SetLabelFont(42);
77  locHist_TimingCut_PiPlusPsi->SetStats(0);
78  locHist_TimingCut_PiPlusPsi->Draw();
79 
80  // fit 1+cos(2*phi) distribution
81  TF1* fit = new TF1("psiFit","[0]*(1.0 + [1]*cos(2*(x + [2])/180.*3.14159))");
82  locHist_TimingCut_PiPlusPsi->Fit(fit, "Q", "");
83  locHist_TimingCut_PiPlusPsi->Draw("e");
84 
85  // print fit parameters to canvas
86  Double_t PSigma = fit->GetParameter(1);
87  Double_t PSigmaErr = fit->GetParError(1);
88  Double_t Phi0 = fit->GetParameter(2);
89  Double_t Phi0Err = fit->GetParError(2);
90  TLatex tx;
91  tx.SetTextAlign(21);
92  tx.SetTextSize(0.05);
93  char text[100];
94  sprintf(text, "P#Sigma=%0.2f#pm%0.2f", PSigma, PSigmaErr);
95  tx.DrawLatex(0., locHist_TimingCut_PiPlusPsi->GetMaximum()*0.15, text);
96  sprintf(text, "#phi_{0}=%0.2f#pm%0.2f", Phi0, Phi0Err);
97  tx.DrawLatex(0., locHist_TimingCut_PiPlusPsi->GetMaximum()*0.06, text);
98 
99  fit->Delete();
100  }
101 
102  //con lev
103  locCanvas->cd(3);
104  gPad->SetTicks();
105  gPad->SetGrid();
106  if(locHist_KinFitConLev != NULL)
107  {
108  locHist_KinFitConLev->GetXaxis()->SetTitle("Confidence Level");
109  locHist_KinFitConLev->GetXaxis()->SetTitleSize(0.05);
110  locHist_KinFitConLev->GetYaxis()->SetTitle("");
111  locHist_KinFitConLev->GetXaxis()->SetLabelSize(0.05);
112  locHist_KinFitConLev->GetYaxis()->SetLabelSize(0.05);
113  locHist_KinFitConLev->SetFillColor(kTeal + 1);
114  locHist_KinFitConLev->Draw();
115  gPad->SetLogy();
116  }
117 
118  //mm
119  locCanvas->cd(4);
120  gPad->SetTicks();
121  gPad->SetGrid();
122  if((locHist_MM2 != NULL) && (locHist_MM2_KinFitCut != NULL))
123  {
124  locHist_MM2->Rebin(locNumRebin);
125  locHist_MM2->GetXaxis()->SetRangeUser(-0.05, 0.05);
126  locHist_MM2->GetXaxis()->SetTitleSize(0.045);
127  locHist_MM2->GetYaxis()->SetTitle("");
128  locHist_MM2->GetXaxis()->SetLabelSize(0.045);
129  locHist_MM2->GetYaxis()->SetLabelSize(0.05);
130  locHist_MM2->SetFillColor(kRed - 7);
131  locHist_MM2->GetYaxis()->SetRangeUser(0.0, 1.05*locHist_MM2->GetBinContent(locHist_MM2->GetMaximumBin()));
132  locHist_MM2->Draw();
133 
134  locHist_MM2_KinFitCut->Rebin(locNumRebin);
135  locHist_MM2_KinFitCut->GetXaxis()->SetTitleSize(0.05);
136  locHist_MM2_KinFitCut->GetYaxis()->SetTitle("");
137  locHist_MM2_KinFitCut->GetXaxis()->SetLabelSize(0.05);
138  locHist_MM2_KinFitCut->GetYaxis()->SetLabelSize(0.05);
139  locHist_MM2_KinFitCut->SetFillColor(kAzure + 1);
140  locHist_MM2_KinFitCut->Draw("SAME");
141 
142  TLegend *locLegend = new TLegend(0.14, 0.74, 0.39, 0.86); //botleft x/y, topright x/y
143  locLegend->SetHeader("Legend");
144  locLegend->AddEntry(locHist_MM2, "No KinFit Cut", "F");
145  locLegend->AddEntry(locHist_MM2_KinFitCut, "KinFit Cut", "F");
146  locLegend->Draw();
147  }
148 
149  //compare rho kinfit / measured after kinfit cut
150  locCanvas->cd(5);
151  gPad->SetTicks();
152  gPad->SetGrid();
153  if((locHist_KinFitRhoMass_KinFitCut != NULL) && (locHist_RhoMass_KinFitCut != NULL))
154  {
155  locHist_RhoMass_KinFitCut->Rebin(locNumRebin);
156  locHist_KinFitRhoMass_KinFitCut->Rebin(locNumRebin);
157 
158  double locMaxHeight = locHist_RhoMass_KinFitCut->GetBinContent(locHist_RhoMass_KinFitCut->GetMaximumBin());
159  double locOtherHeight = locHist_KinFitRhoMass_KinFitCut->GetBinContent(locHist_KinFitRhoMass_KinFitCut->GetMaximumBin());
160  if(locOtherHeight > locMaxHeight)
161  locMaxHeight = locOtherHeight;
162 
163  locHist_RhoMass_KinFitCut->SetTitle("Post KinFit Cut");
164  locHist_RhoMass_KinFitCut->GetXaxis()->SetTitleSize(0.05);
165  locHist_RhoMass_KinFitCut->GetYaxis()->SetTitle("");
166  locHist_RhoMass_KinFitCut->GetXaxis()->SetLabelSize(0.05);
167  locHist_RhoMass_KinFitCut->GetYaxis()->SetLabelSize(0.05);
168  locHist_RhoMass_KinFitCut->SetLineColor(kRed);
169  locHist_RhoMass_KinFitCut->SetLineWidth(2);
170  locHist_RhoMass_KinFitCut->GetYaxis()->SetRangeUser(0.0, 1.05*locMaxHeight);
171  locHist_RhoMass_KinFitCut->Draw("SAME");
172 
173  locHist_KinFitRhoMass_KinFitCut->GetXaxis()->SetTitleSize(0.05);
174  locHist_KinFitRhoMass_KinFitCut->GetYaxis()->SetTitle("");
175  locHist_KinFitRhoMass_KinFitCut->GetXaxis()->SetLabelSize(0.05);
176  locHist_KinFitRhoMass_KinFitCut->GetYaxis()->SetLabelSize(0.05);
177  locHist_KinFitRhoMass_KinFitCut->SetLineColor(kBlue);
178  locHist_KinFitRhoMass_KinFitCut->SetLineWidth(2);
179  locHist_KinFitRhoMass_KinFitCut->GetYaxis()->SetRangeUser(0.0, 1.05*locMaxHeight);
180  locHist_KinFitRhoMass_KinFitCut->Draw("SAME");
181 
182  n_rho_kinfit = locHist_RhoMass_KinFitCut->Integral(200./locNumRebin, 700./locNumRebin);
183 
184  TF1 *frho = new TF1("frho", "[0] / ((x*x - [1]*[1])*(x*x- [1]*[1]) + x*x*x*x*[2]*[2]/[1]/[1])", 0.6, 0.9);
185  frho->SetParameter(0,10);
186  frho->SetParameter(1,0.770);
187  frho->SetParameter(2,0.1);
188  locHist_RhoMass_KinFitCut->Fit("frho", "RQ0");
189  rho_mass = frho->GetParameter(1);
190 
191  TLegend *locLegend = new TLegend(0.14, 0.74, 0.39, 0.86); //botleft x/y, topright x/y
192  locLegend->SetHeader("Legend");
193  locLegend->AddEntry(locHist_RhoMass_KinFitCut, "Measured", "F");
194  locLegend->AddEntry(locHist_KinFitRhoMass_KinFitCut, "KinFit", "F");
195  locLegend->Draw();
196 
197  }
198 
199  //t
200  locCanvas->cd(6);
201  gPad->SetTicks();
202  gPad->SetGrid();
203  if(locHist_PiPlusPsi_t != NULL)
204  {
205  TH1D *locHist_TimingCut_t = (TH1D*)locHist_PiPlusPsi_t->ProjectionX();
206  locHist_TimingCut_t->SetTitle("Momentum Transfer to Proton");
207  //locHist_TimingCut_t->Rebin(4);
208  locHist_TimingCut_t->SetMinimum(0);
209  locHist_TimingCut_t->GetXaxis()->SetTitleSize(0.05);
210  locHist_TimingCut_t->GetXaxis()->SetLabelSize(0.05);
211  locHist_TimingCut_t->GetYaxis()->SetLabelSize(0.05);
212  locHist_TimingCut_t->GetYaxis()->SetLabelFont(42);
213  locHist_TimingCut_t->GetXaxis()->SetRangeUser(0,1);
214  locHist_TimingCut_t->GetYaxis()->SetRangeUser(1,locHist_TimingCut_t->GetMaximum()*2);
215  locHist_TimingCut_t->GetXaxis()->SetTitle("-t (GeV^{2}/c^{2})");
216  //locHist_TimingCut_t->SetLineColor(1);
217  locHist_TimingCut_t->SetFillColor(kOrange-2);
218  locHist_TimingCut_t->SetStats(0);
219  locHist_TimingCut_t->Draw();
220  gPad->SetLogy();
221 
222  }
223 
224  // Print the rho mass and the number of reconstructed rhos per trigger
225  locCanvas->cd(3);
226  TLatex tx;
227  tx.SetTextAlign(11);
228  tx.SetTextSize(0.07);
229  char text[100];
230  sprintf(text, "Post KinFit Cut");
231  tx.DrawLatex(0.1, locHist_KinFitConLev->GetMaximum()/4, text);
232  sprintf(text, "M(#rho) = %0.3f GeV/c^{2}", rho_mass);
233  tx.DrawLatex(0.1, locHist_KinFitConLev->GetMaximum()/16, text);
234  sprintf(text, "N(#rho) = %0.2f / 1k Trigger", n_rho_kinfit/n_triggers*1000);
235  tx.DrawLatex(0.1, locHist_KinFitConLev->GetMaximum()/64, text);
236 
237 }
238 
sprintf(text,"Post KinFit Cut")
TDirectory * locReactionDirectory_NoKinFit
TLatex tx
TDirectory * locReactionDirectory_KinFit
TDirectory * locInitDirectory
TCanvas * locCanvas
char text[100]