Skip to content
Snippets Groups Projects
makeplot.C 8.54 KiB
Newer Older
Whitney Armstrong's avatar
Whitney Armstrong committed
////////////////////////////////////////
// Read reconstruction ROOT output file
// Plot variables
////////////////////////////////////////
int makeplot(const char* input_fname = "sim_output/rec_electron_0GeVto30GeV_100k_output.root")
{
  // Setting figures
  gROOT->SetStyle("Plain");
  gStyle->SetLineWidth(3);
  gStyle->SetOptStat("nem");
  gStyle->SetPadTickX(1);
  gStyle->SetPadTickY(1);
  gStyle->SetPadGridX(1);
  gStyle->SetPadGridY(1);
  gStyle->SetPadLeftMargin(0.14);
  gStyle->SetPadRightMargin(0.14);

  // Input ROOT file
  TFile *f = new TFile(input_fname,"READ");
  TTree *t = (TTree *)f->Get("events");

  // Set Branch status and addressed
  t->SetMakeClass(1);
  t->SetBranchStatus("*", 0);

  Int_t EcalClusters_;
  t->SetBranchStatus("EcalClusters", 1);
  t->SetBranchAddress("EcalClusters", &EcalClusters_);

  Int_t RecoEcalHits_;
  t->SetBranchStatus("RecoEcalHits", 1);
  t->SetBranchAddress("RecoEcalHits", &RecoEcalHits_);

  const Int_t kMaxEcalClusters = 100000;
  Double_t cluster_x_pos[kMaxEcalClusters];
  Double_t cluster_y_pos[kMaxEcalClusters];
  Double_t cluster_z_pos[kMaxEcalClusters];
  Float_t cluster_energy[kMaxEcalClusters];
  t->SetBranchStatus("EcalClusters.position.x",1);
  t->SetBranchStatus("EcalClusters.position.y",1);
  t->SetBranchStatus("EcalClusters.position.z",1);
  t->SetBranchStatus("EcalClusters.energy",1);
  t->SetBranchAddress("EcalClusters.position.x",cluster_x_pos);
  t->SetBranchAddress("EcalClusters.position.y",cluster_y_pos);
  t->SetBranchAddress("EcalClusters.position.z",cluster_z_pos);
  t->SetBranchAddress("EcalClusters.energy",cluster_energy);

  const Int_t kMaxRecoEcalHits = 100000;
  Double_t rec_x_pos[kMaxRecoEcalHits];
  Double_t rec_y_pos[kMaxRecoEcalHits];
  Double_t rec_energy[kMaxRecoEcalHits];
  t->SetBranchStatus("RecoEcalHits.position.x",1);
  t->SetBranchStatus("RecoEcalHits.position.y",1);
  t->SetBranchStatus("RecoEcalHits.energy",1);
  t->SetBranchAddress("RecoEcalHits.position.x",rec_x_pos);
  t->SetBranchAddress("RecoEcalHits.position.y",rec_y_pos);
  t->SetBranchAddress("RecoEcalHits.energy",rec_energy);

  // Setting for Canvas
  TCanvas *c1  = new TCanvas("c1", "c1",  500, 500);
  TCanvas *c2  = new TCanvas("c2", "c2",  500, 500);
  TCanvas *c3  = new TCanvas("c3", "c3",  500, 500);
  TCanvas *c4  = new TCanvas("c4", "c4",  500, 500);
  TCanvas *c5  = new TCanvas("c5", "c5",  500, 500);
  TCanvas *c6  = new TCanvas("c6", "c6",  500, 500);
  TCanvas *c7  = new TCanvas("c7", "c7",  500, 500);
  TCanvas *c8  = new TCanvas("c8", "c8",  500, 500);
  TCanvas *c9  = new TCanvas("c9", "c9",  500, 500);

  // Declare histograms
  TH1D *h1 = new TH1D("h1","Scattering Angle(#theta)",          100,130.0,180.0);
  TH1D *h2 = new TH1D("h2","Pseudo-rapidity(#eta)",             100,-5.0,0.0);
  TH2D *h3 = new TH2D("h3","Cluster E vs Pseudo-rapidity",      100,-0.5,30.5,100,-5.0,0.0);
  TH1D *h4 = new TH1D("h4","Reconstructed energy per event",    100,-0.5,30.5);
  TH1D *h5 = new TH1D("h5","Number of Clusters per event",      5,-0.5,4.5);
  TH1D *h6 = new TH1D("h6","Scattering Angle(#theta) with CUT", 100,130.0,180.0);
  TH1D *h7 = new TH1D("h7","Pseudo-rapidity(#eta) with CUT",    100,-5.0,0.0);
  TH2D *h8 = new TH2D("h8","Cluster Hit Position",              62,-62.0,62.0,62,-62.0,62.0);
  TH2D *h9 = new TH2D("h9","All Hit Position",                  62,-62.0,62.0,62,-62.0,62.0);

  // Declare ellipse for boundary of crystal calorimeter
  TEllipse *ell1 = new TEllipse(0.0, 0.0, 60.0, 60.0);
  ell1->SetFillStyle(4000);
  TEllipse *ell2 = new TEllipse(0.0, 0.0, 12.0, 12.0);
  ell2->SetFillStyle(4000);

  // Total number of entries
  Int_t nentries = t->GetEntries();

  // Variables are used in calculation
  Double_t r;              // Radius [cm]
  Double_t phi;            // Azimuth [degree]
  Double_t theta;          // Inclination [degree]
  Double_t eta;            // Pseudo-rapidity [unitless]
  Float_t  cluster_e;      // Cluster energy [GeV]
  Float_t  total_cluster_e;// Add up clusters per event [GeV]
  Double_t total_thr_e;    // Thrown energy [GeV]

  // Loop over event by event
  for (int ievent = 0; ievent < nentries; ievent++)
  {
	t->GetEntry(ievent);

	Int_t ncluster   = EcalClusters_;
	Int_t nreconhits = RecoEcalHits_;

	total_cluster_e = 0.0;

	h5->Fill(ncluster, 1.0);

	// Loop over cluster by cluster
	for (int icluster=0; icluster < ncluster; icluster++)
	{
		r = TMath::Sqrt((cluster_x_pos[icluster]*cluster_x_pos[icluster]) + 
				(cluster_y_pos[icluster]*cluster_y_pos[icluster]) + 
				(cluster_z_pos[icluster]*cluster_z_pos[icluster]));
		phi = TMath::ATan(cluster_y_pos[icluster]/cluster_x_pos[icluster]) * TMath::RadToDeg();
		theta = TMath::ACos(cluster_z_pos[icluster] / r) * TMath::RadToDeg();
		eta = -1.0 * TMath::Log(TMath::Tan((theta*TMath::DegToRad())/2.0));	
		cluster_e = cluster_energy[icluster] / 1.e+3;
		total_cluster_e += cluster_e;
	}

	// Select events with one cluster
        if(ncluster == 1)
        {       
		h1->Fill(theta, 1.0);
                h2->Fill(eta, 1.0);
                h3->Fill(cluster_e, eta, 1.0);
                h4->Fill(total_cluster_e, 1.0);
                h8->Fill(cluster_x_pos[0],cluster_y_pos[0], 1.0);

		if(total_cluster_e > 0.5)
		{
			h6->Fill(theta, 1.0);
			h7->Fill(eta, 1.0);
		}
	}

	// Loop over hit by hit
        for(int ireconhit=0; ireconhit < nreconhits; ireconhit++)
		h9->Fill(rec_x_pos[ireconhit],rec_y_pos[ireconhit], 1.0);
  }

  // Drawing and Saving figures
  c1->cd();
  h1->SetLineColor(kBlue);
  h1->SetLineWidth(2);
  h1->GetYaxis()->SetRangeUser(0.0,h1->GetMaximum()+10.0);
  h1->GetXaxis()->SetTitle("#theta [degree]");
  h1->GetYaxis()->SetTitle("events");
  h1->GetYaxis()->SetTitleOffset(1.4);
  h1->DrawClone();
  c1->SaveAs("results/electron_theta_hist_0GeVto30GeV.png");
  c1->SaveAs("results/electron_theta_hist_0GeVto30GeV.pdf");

  c2->cd();
  h2->SetLineColor(kBlue);
  h2->SetLineWidth(2);
  h2->GetYaxis()->SetRangeUser(0.0,h2->GetMaximum()+10.0);
  h2->GetXaxis()->SetTitle("#eta");
  h2->GetYaxis()->SetTitle("events");
  h2->GetYaxis()->SetTitleOffset(1.4);
  h2->DrawClone();
  c2->SaveAs("results/electron_eta_hist_0GeVto30GeV.png");
  c2->SaveAs("results/electron_eta_hist_0GeVto30GeV.pdf");

  c3->cd();
  h3->GetXaxis()->SetTitle("Cluster energy [GeV]");
  h3->GetYaxis()->SetTitle("#eta");
  h3->GetYaxis()->SetTitleOffset(1.4);
  h3->DrawClone("COLZ");
  c3->SaveAs("results/eletron_E_vs_eta_hist_0GeVto30GeV.png");
  c3->SaveAs("results/eletron_E_vs_eta_hist_0GeVto30GeV.pdf");

  c4->cd();
  c4->SetLogy(1);
  h4->SetLineColor(kBlue);
  h4->SetLineWidth(2);
  h4->GetXaxis()->SetTitle("reconstructed energy [GeV]");
  h4->GetYaxis()->SetTitle("events");
  h4->GetYaxis()->SetTitleOffset(1.4);
  h4->DrawClone();
  c4->SaveAs("results/electron_Erec_hist_0GeVto30GeV.png");
  c4->SaveAs("results/electron_Erec_hist_0GeVto30GeV.pdf");

  c5->cd();
  c5->SetLogy(1);
  h5->SetLineColor(kBlue);
  h5->SetLineWidth(2);
  h5->GetXaxis()->SetTitle("Number of Clusters");
  h5->GetYaxis()->SetTitle("events");
  h5->GetYaxis()->SetTitleOffset(1.4);
  h5->DrawClone();
  c5->SaveAs("results/electron_ncluster_hist_0GeVto30GeV.png");
  c5->SaveAs("results/electron_ncluster_hist_0GeVto30GeV.pdf");

  c6->cd();
  h6->SetLineColor(kBlue);
  h6->SetLineWidth(2);
  h6->GetYaxis()->SetRangeUser(0.0,h1->GetMaximum()+10.0);
  h6->GetXaxis()->SetTitle("#theta [degree]");
  h6->GetYaxis()->SetTitle("events");
  h6->GetYaxis()->SetTitleOffset(1.4);
  h6->DrawClone();
  c6->SaveAs("results/electron_theta_hist_CUT_0GeVto30GeV.png");
  c6->SaveAs("results/electron_theta_hist_CUT_0GeVto30GeV.pdf");

  c7->cd();
  h7->SetLineColor(kBlue);
  h7->SetLineWidth(2);
  h7->GetYaxis()->SetRangeUser(0.0,h2->GetMaximum()+10.0);
  h7->GetXaxis()->SetTitle("#eta");
  h7->GetYaxis()->SetTitle("events");
  h7->GetYaxis()->SetTitleOffset(1.4);
  h7->DrawClone();
  c7->SaveAs("results/electron_eta_hist_CUT_0GeVto30GeV.png");
  c7->SaveAs("results/electron_eta_hist_CUT_0GeVto30GeV.pdf");

  c8->cd();
  h8->GetXaxis()->SetTitle("Hit position X [cm]");
  h8->GetYaxis()->SetTitle("Hit position Y [cm]");
  h8->GetYaxis()->SetTitleOffset(1.4);
  h8->DrawClone("COLZ");
  ell1->Draw("same");
  ell2->Draw("same");
  c8->SaveAs("results/electron_hit_pos_cluster_0GeVto30GeV.png");
  c8->SaveAs("results/electron_hit_pos_cluster_0GeVto30GeV.pdf");

  c9->cd();
  h9->GetXaxis()->SetTitle("Hit position X [cm]");
  h9->GetYaxis()->SetTitle("Hit position Y [cm]");
  h9->GetYaxis()->SetTitleOffset(1.4);
  h9->DrawClone("COLZ");
  ell1->Draw("same");
  ell2->Draw("same");
  c9->SaveAs("results/electron_hit_pos_all_0GeVto30GeV.png");
  c9->SaveAs("results/electron_hit_pos_all_0GeVto30GeV.pdf");

  return 0;
}