Changeset 1292 for trunk/MagicSoft/Mars/mhist/MHAlphaEnergyTime.cc
- Timestamp:
- 04/24/02 12:29:54 (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/MagicSoft/Mars/mhist/MHAlphaEnergyTime.cc
r1227 r1292 28 28 // MHAlphaEnergyTime // 29 29 // // 30 // 3D-histogram in alpha, E-est and time // 30 31 // // 31 32 ////////////////////////////////////////////////////////////////////////////// … … 34 35 35 36 #include <TCanvas.h> 37 38 #include <math.h> 36 39 37 40 #include "MHillasSrc.h" … … 50 53 // -------------------------------------------------------------------------- 51 54 // 52 // Default Constructor. It sets name and title only. Typically you won't 53 // need to change this. 54 // 55 #include <iostream.h> 55 // Default Constructor. It sets name and title of the histogram. 56 // 56 57 MHAlphaEnergyTime::MHAlphaEnergyTime(const char *name, const char *title) 57 58 : fHist() … … 65 66 fHist.SetDirectory(NULL); 66 67 67 fHist.GetXaxis()->SetTitle("\\alpha [\\circ]"); 68 fHist.GetYaxis()->SetTitle("E_{est} [GeV]"); 69 fHist.GetZaxis()->SetTitle("t [s]"); 70 } 71 68 fHist.SetTitle("3D-plot of alpha, E-est, time"); 69 fHist.SetXTitle("\\alpha [\\circ]"); 70 fHist.SetYTitle("E-est [GeV] "); 71 fHist.SetZTitle("time [s]"); 72 } 73 74 // -------------------------------------------------------------------------- 75 // 76 // Set binnings and prepare filling of the histogram 77 // 72 78 Bool_t MHAlphaEnergyTime::SetupFill(const MParList *plist) 73 79 { … … 102 108 } 103 109 110 // -------------------------------------------------------------------------- 111 // 112 // Fill the histogram 113 // 104 114 Bool_t MHAlphaEnergyTime::Fill(const MParContainer *par) 105 115 { … … 110 120 } 111 121 122 // -------------------------------------------------------------------------- 123 // 124 // Draw the histogram 125 // 112 126 void MHAlphaEnergyTime::Draw(Option_t *opt) 113 127 { 114 128 if (!gPad) 115 MakeDefCanvas("AlphaEnergyTime", "Distrib of alpha, E, t");129 MakeDefCanvas("AlphaEnergyTime", fTitle); 116 130 117 131 gPad->Divide(2,2); … … 120 134 121 135 gPad->cd(1); 122 h = fHist.Project3D("x"); 136 h = fHist.Project3D("ex"); 137 138 h->SetTitle("Distribution of \\alpha [\\circ]"); 139 h->SetXTitle("\\alpha [\\circ]"); 140 h->SetYTitle("Counts"); 141 123 142 h->Draw(opt); 124 143 h->SetBit(kCanDelete); 125 144 126 145 gPad->cd(2); 127 h = fHist.Project3D("y"); 128 h->Draw(opt); 129 h->SetBit(kCanDelete); 146 h = fHist.Project3D("ey"); 147 148 h->SetTitle("Distribution of E-est [GeV]"); 149 h->SetXTitle("E-est [GeV] "); 150 h->SetYTitle("Counts"); 151 152 h->Draw(opt); 153 h->SetBit(kCanDelete); 154 gPad->SetLogx(); 130 155 131 156 gPad->cd(3); 132 h = fHist.Project3D("z"); 157 h = fHist.Project3D("ez"); 158 159 h->SetTitle("Distribution of time [s]"); 160 h->SetXTitle("time [s]"); 161 h->SetYTitle("Counts"); 162 133 163 h->Draw(opt); 134 164 h->SetBit(kCanDelete); … … 139 169 gPad->Modified(); 140 170 gPad->Update(); 141 } 142 171 172 } 173 174 // -------------------------------------------------------------------------- 175 // 176 // Draw copies of the histogram 177 // 143 178 TObject *MHAlphaEnergyTime::DrawClone(Option_t *opt) const 144 179 { 145 TCanvas *c = MakeDefCanvas("AlphaEnergyTime", "Distrib of alpha, E, t"); 146 c->Divide(2, 2); 180 TCanvas &c = *MakeDefCanvas("AlphaEnergyTime", fTitle); 181 182 c.Divide(2, 2); 147 183 148 184 gROOT->SetSelectedPad(NULL); 149 185 150 //151 // FIXME: ProjectionX,Y is not const within root152 //153 186 TH1 *h; 154 187 155 c->cd(1); 156 h = ((TH3D*)(&fHist))->Project3D("x"); 157 h->Draw(opt); 158 h->SetBit(kCanDelete); 159 160 c->cd(2); 161 h = ((TH3D*)(&fHist))->Project3D("y"); 162 h->Draw(opt); 163 h->SetBit(kCanDelete); 164 165 c->cd(3); 166 h = ((TH3D*)(&fHist))->Project3D("z"); 167 h->Draw(opt); 168 h->SetBit(kCanDelete); 169 170 c->cd(4); 188 c.cd(1); 189 h = ((TH3D*)(&fHist))->Project3D("ex"); 190 191 h->SetTitle("Distribution of \\alpha [\\circ]"); 192 h->SetXTitle("\\alpha [\\circ]"); 193 h->SetYTitle("Counts"); 194 195 h->Draw(opt); 196 h->SetBit(kCanDelete); 197 198 c.cd(2); 199 h = ((TH3D*)(&fHist))->Project3D("ey"); 200 201 h->SetTitle("Distribution of E-est [GeV]"); 202 h->SetXTitle("E-est [GeV] "); 203 h->SetYTitle("Counts"); 204 205 h->Draw(opt); 206 h->SetBit(kCanDelete); 207 gPad->SetLogx(); 208 209 c.cd(3); 210 h = ((TH3D*)(&fHist))->Project3D("ez"); 211 212 h->SetTitle("Distribution of time [s]"); 213 h->SetXTitle("time [s]"); 214 h->SetYTitle("Counts"); 215 216 h->Draw(opt); 217 h->SetBit(kCanDelete); 218 219 c.cd(4); 171 220 ((TH3D&)fHist).DrawCopy(opt); 172 221 173 c->Modified(); 174 c->Update(); 175 176 return c; 177 } 178 179 void MHAlphaEnergyTime::Substract(const TH3D *h1, const TH3D *h2) 180 { 181 MH::SetBinning(&fHist, (TH1*)h1); 182 183 fHist.Sumw2(); 222 c.Modified(); 223 c.Update(); 224 225 return &c; 226 } 227 228 // -------------------------------------------------------------------------- 229 // 230 // Calculate the histogram as the difference of two histograms : 231 // fHist(gamma) = h1(source) - h2(antisource) 232 // 233 void MHAlphaEnergyTime::Subtract(const TH3D *h1, const TH3D *h2) 234 { 235 // MH::SetBinning(&fHist, (TH1*)h1); 236 237 // fHist.Sumw2(); 184 238 fHist.Add((TH1*)h1, (TH1*)h2, 1, -1); // ROOT: FIXME! 185 239 } 186 240 187 void MHAlphaEnergyTime::SetAlphaRange(Axis_t lo, Axis_t up) 188 { 241 // -------------------------------------------------------------------------- 242 // 243 // Integrate fHist(gamma) in the alpha range (lo, up) 244 // 245 TH2D *MHAlphaEnergyTime::GetAlphaProjection(Axis_t lo, Axis_t up) 246 { 247 if (up < lo) 248 { 249 *fLog << err << fName << ": Alpha projection not possible: lo=" << lo << " up=" << up << endl; 250 return NULL; 251 } 252 189 253 TAxis &axe = *fHist.GetXaxis(); 190 254 191 // 192 // FIXME: ROOT Binning??? of projection 193 // root 3.02: SetRangeUser 194 axe.SetRange(axe.FindFixBin(lo), axe.FindFixBin(up)); 195 } 196 197 TH2D *MHAlphaEnergyTime::GetAlphaProjection(Axis_t lo, Axis_t up) 198 { 199 SetAlphaRange(lo, up); 200 return (TH2D*)fHist.Project3D("yz"); 201 } 255 Int_t ilo = axe.FindFixBin(lo); 256 Int_t iup = axe.FindFixBin(up); 257 258 const Double_t epslo1 = lo-axe.GetBinLowEdge(ilo); 259 const Double_t epslo2 = axe.GetBinUpEdge(ilo)-lo; 260 261 const Double_t epsup1 = up-axe.GetBinLowEdge(iup); 262 const Double_t epsup2 = axe.GetBinUpEdge(iup)-up; 263 264 const Double_t epslo = epslo1<epslo2 ? epslo1 : epslo2; 265 const Double_t epsup = epsup1<epsup2 ? epsup1 : epsup2; 266 267 if (epslo1>epslo2) 268 ilo++; 269 270 if (epsup1<epsup2) 271 iup--; 272 273 if (epslo>0.01*axe.GetBinWidth(ilo) || epsup>0.01*axe.GetBinWidth(iup)) 274 { 275 *fLog << err << fName << ": binning is not adequate for the requested projection:" << endl; 276 *fLog << "Please specify a lower or upper limit which is not more than 1% away from a bin edge" << endl; 277 *fLog << " epslo = " << epslo << endl; 278 *fLog << " epsup = " << epsup << endl; 279 *fLog << " dwl = " << axe.GetBinWidth(ilo) << endl; 280 *fLog << " dwu = " << axe.GetBinWidth(iup) << endl; 281 return NULL; 282 } 283 284 axe.SetRange(ilo, iup); 285 286 TH2D &h2D = *(TH2D *)fHist.Project3D("ezy"); 287 288 h2D.SetTitle("2D-plot of time vs. E-est"); 289 h2D.SetXTitle("E-est [GeV] "); 290 h2D.SetYTitle("time [s]"); 291 292 return &h2D; 293 } 294 295 //--------------------------------------------------------- 296 // 297 // Draw the projected histogram 298 // 299 TH2D *MHAlphaEnergyTime::DrawAlphaProjection(Axis_t lo, Axis_t up, Option_t *opt) 300 { 301 TH2D *h2D = GetAlphaProjection(lo, up); 302 303 if (!h2D) 304 return NULL; 305 306 char txt[100]; 307 sprintf(txt, "No.of Gammas vs. E-est and Time (%.1f < alpha < %.1f deg)", lo, up); 308 309 // TCanvas *c = MakeDefCanvas("AlphaEnergyTime", "2D histogram of gamma signal in energy and time"); 310 TCanvas &c = *MakeDefCanvas("AlphaEnergyTime", txt); 311 312 c.Divide(2, 2); 313 314 gROOT->SetSelectedPad(NULL); 315 316 TH1 *h; 317 318 c.cd(1); 319 h = h2D->ProjectionX("Eest", -1, 9999, "E"); 320 h->SetTitle("Distribution of E-est [GeV]"); 321 h->SetXTitle("E-est [GeV] "); 322 h->SetYTitle("Counts"); 323 324 h->Draw(opt); 325 h->SetBit(kCanDelete); 326 gPad->SetLogx(); 327 328 c.cd(2); 329 h = h2D->ProjectionY("time", -1, 9999, "E"); 330 h->SetTitle("Distribution of time [s]"); 331 h->SetXTitle("time [s]"); 332 h->SetYTitle("Counts"); 333 334 h->Draw(opt); 335 h->SetBit(kCanDelete); 336 337 c.cd(3); 338 339 h2D->DrawCopy(opt); 340 gPad->SetLogx(); 341 342 c.Modified(); 343 c.Update(); 344 345 return h2D; 346 } 347
Note:
See TracChangeset
for help on using the changeset viewer.