1 | #define PI 3.1415
|
---|
2 | #define D2R PI/180.
|
---|
3 | #define R2D 180./PI
|
---|
4 |
|
---|
5 | void createTables( string sInFile, string sOutFile )
|
---|
6 | {
|
---|
7 |
|
---|
8 | gStyle->SetOptStat(0);
|
---|
9 |
|
---|
10 | // you can run without an output file by leaving the sOutFile string blank ""
|
---|
11 | bool bOut = false;
|
---|
12 |
|
---|
13 | // Open output file
|
---|
14 | if( sOutFile.c_str() != "" )
|
---|
15 | {
|
---|
16 | bOut = true;
|
---|
17 | TFile *fOutFile = new TFile( sOutFile.c_str(), "CREATE" );
|
---|
18 | }
|
---|
19 |
|
---|
20 | // open input file
|
---|
21 | TFile *fInFile = new TFile( sInFile.c_str() );
|
---|
22 |
|
---|
23 | if( fInFile->IsZombie() )
|
---|
24 | {
|
---|
25 | cout << "File Error " << sInFile.c_str() << endl;
|
---|
26 | exit(-1);
|
---|
27 | }
|
---|
28 |
|
---|
29 | // Get the tree
|
---|
30 | TTree *hTree = (TTree*)fInFile->Get("hillastree");
|
---|
31 |
|
---|
32 | // Variables needed
|
---|
33 | float fMCEnergy;
|
---|
34 | float fMCZd;
|
---|
35 | double fLength;
|
---|
36 | double fWidth;
|
---|
37 | double fDistance;
|
---|
38 | double fSize;
|
---|
39 |
|
---|
40 | // get the branches
|
---|
41 | hTree->SetBranchAddress("MCEnergy",&fMCEnergy);
|
---|
42 | hTree->SetBranchAddress("MCZd",&fMCZd);
|
---|
43 | hTree->SetBranchAddress("Length",&fLength);
|
---|
44 | hTree->SetBranchAddress("Width",&fWidth);
|
---|
45 | hTree->SetBranchAddress("Size",&fSize);
|
---|
46 | hTree->SetBranchAddress("Distance",&fDistance);
|
---|
47 |
|
---|
48 | // Setup the histograms
|
---|
49 | TH1F *hMCEnergy = new TH1F("hMCEnergy","True Energy",100,-1.,2.);
|
---|
50 | TH1F *hMCZd = new TH1F("hMCZd","MC Zenith",100,0.,40.);
|
---|
51 | TH1F *hLength = new TH1F("hLength","Length",100,0.,150.);
|
---|
52 | TH1F *hWidth = new TH1F("hWidth","Width",100,0.,50.);
|
---|
53 | TH1F *hDistance = new TH1F("hDistance","Distance",100,0.,190.);
|
---|
54 | TH1F *hSize = new TH1F("hSize","Size",100,0.,6.);
|
---|
55 |
|
---|
56 | TH2F *hTableEnergy = new TH2F("hTableEnergy","Energy",30,1.,4.,30,0.,170.);
|
---|
57 | TH2F *hTableLength = new TH2F("hTableLength","Length",30,1.,4.,30,0.,170.);
|
---|
58 | TH2F *hTableWidth = new TH2F("hTableWidth","Width",30,1.,4.,30,0.,170.);
|
---|
59 |
|
---|
60 | // This is the normalisation histogram
|
---|
61 | TH2F *hTableNorm = new TH2F("hNTableNorm","Norm",30,1.,4.,30,0.,170.);
|
---|
62 |
|
---|
63 | // Titles
|
---|
64 | hTableEnergy->GetXaxis()->SetTitle("log10(Size)");
|
---|
65 | hTableLength->GetXaxis()->SetTitle("log10(Size)");
|
---|
66 | hTableWidth->GetXaxis()->SetTitle("log10(Size)");
|
---|
67 |
|
---|
68 | hTableEnergy->GetYaxis()->SetTitle("Distance");
|
---|
69 | hTableLength->GetYaxis()->SetTitle("Distance");
|
---|
70 | hTableWidth->GetYaxis()->SetTitle("Distance");
|
---|
71 |
|
---|
72 | // Half the entries
|
---|
73 | int BIG = int(hTree->GetEntries()/2.);
|
---|
74 |
|
---|
75 | // Loop over tree
|
---|
76 | for( int i = 0; i < BIG; i++ )
|
---|
77 | {
|
---|
78 |
|
---|
79 |
|
---|
80 | hTree->GetEntry(i);
|
---|
81 | hMCEnergy->Fill(log10(fMCEnergy/1000.));
|
---|
82 | hSize->Fill(log10(fSize));
|
---|
83 | hDistance->Fill(fDistance);
|
---|
84 | hLength->Fill(fLength);
|
---|
85 | hWidth->Fill(fWidth);
|
---|
86 | hMCZd->Fill(fMCZd*R2D);
|
---|
87 |
|
---|
88 | if( fabs(fMCZd*R2D - 10.) < 2.0 )
|
---|
89 | {
|
---|
90 | hTableNorm->Fill(log10(fSize),fDistance);
|
---|
91 | hTableEnergy->Fill(log10(fSize),fDistance,log10(fMCEnergy));
|
---|
92 | hTableLength->Fill(log10(fSize),fDistance,fLength);
|
---|
93 | hTableWidth->Fill(log10(fSize),fDistance,fWidth);
|
---|
94 | }
|
---|
95 |
|
---|
96 | }
|
---|
97 |
|
---|
98 | // Average the histogram
|
---|
99 | hTableEnergy->Divide(hTableNorm);
|
---|
100 | hTableLength->Divide(hTableNorm);
|
---|
101 | hTableWidth->Divide(hTableNorm);
|
---|
102 |
|
---|
103 | // We need to smooth somehow
|
---|
104 | //hTableEnergy->Smooth();
|
---|
105 | //hTableLength->Smooth();
|
---|
106 | //hTableWidth->Smooth();
|
---|
107 |
|
---|
108 | // Plot stuff
|
---|
109 | TCanvas *c1 = new TCanvas("c1","c1",0,0,500,500);
|
---|
110 | c1->SetLogy();
|
---|
111 | hMCEnergy->Draw();
|
---|
112 |
|
---|
113 | TCanvas *c2 = new TCanvas("c2","c2",0,0,500,500);
|
---|
114 | c2->SetLogy();
|
---|
115 | hLength->Draw();
|
---|
116 |
|
---|
117 | TCanvas *c3 = new TCanvas("c3","c3",0,0,500,500);
|
---|
118 | c3->SetLogy();
|
---|
119 | hWidth->Draw();
|
---|
120 |
|
---|
121 | TCanvas *c4 = new TCanvas("c4","c4",0,0,500,500);
|
---|
122 | hMCZd->Draw();
|
---|
123 |
|
---|
124 | TCanvas *c5 = new TCanvas("c5","c5",0,0,500,500);
|
---|
125 | hDistance->Draw();
|
---|
126 |
|
---|
127 | TCanvas *c6 = new TCanvas("c6","c6",0,0,500,500);
|
---|
128 | c6->SetLogy();
|
---|
129 | hSize->Draw();
|
---|
130 |
|
---|
131 | TCanvas *c7 = new TCanvas("c7","c7",0,0,500,500);
|
---|
132 | hTableEnergy->Draw("zcol");
|
---|
133 |
|
---|
134 | TCanvas *c8 = new TCanvas("c8","c8",0,0,500,500);
|
---|
135 | hTableLength->Draw("zcol");
|
---|
136 |
|
---|
137 | TCanvas *c9 = new TCanvas("c9","c9",0,0,500,500);
|
---|
138 | hTableWidth->Draw("zcol");
|
---|
139 |
|
---|
140 |
|
---|
141 | //Output
|
---|
142 | if( bOut )
|
---|
143 | {
|
---|
144 | fOutFile->cd();
|
---|
145 | hTableNorm->Write();
|
---|
146 | hTableEnergy->Write();
|
---|
147 | hTableLength->Write();
|
---|
148 | hTableWidth->Write();
|
---|
149 |
|
---|
150 | fOutFile->Close();
|
---|
151 | }
|
---|
152 |
|
---|
153 | }
|
---|