Ignore:
Timestamp:
04/24/02 12:29:54 (22 years ago)
Author:
wittek
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mhist/MHAlphaEnergyTime.cc

    r1227 r1292  
    2828//  MHAlphaEnergyTime                                                       //
    2929//                                                                          //
     30//  3D-histogram in alpha, E-est and time                                   //
    3031//                                                                          //
    3132//////////////////////////////////////////////////////////////////////////////
     
    3435
    3536#include <TCanvas.h>
     37
     38#include <math.h>
    3639
    3740#include "MHillasSrc.h"
     
    5053// --------------------------------------------------------------------------
    5154//
    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//
    5657MHAlphaEnergyTime::MHAlphaEnergyTime(const char *name, const char *title)
    5758  : fHist()
     
    6566    fHist.SetDirectory(NULL);
    6667
    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//
    7278Bool_t MHAlphaEnergyTime::SetupFill(const MParList *plist)
    7379{
     
    102108}
    103109
     110// --------------------------------------------------------------------------
     111//
     112// Fill the histogram
     113//
    104114Bool_t MHAlphaEnergyTime::Fill(const MParContainer *par)
    105115{
     
    110120}
    111121
     122// --------------------------------------------------------------------------
     123//
     124// Draw the histogram
     125//
    112126void MHAlphaEnergyTime::Draw(Option_t *opt)
    113127{
    114128    if (!gPad)
    115         MakeDefCanvas("AlphaEnergyTime", "Distrib of alpha, E, t");
     129        MakeDefCanvas("AlphaEnergyTime", fTitle);
    116130
    117131    gPad->Divide(2,2);
     
    120134
    121135    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
    123142    h->Draw(opt);
    124143    h->SetBit(kCanDelete);
    125144
    126145    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();
    130155
    131156    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
    133163    h->Draw(opt);
    134164    h->SetBit(kCanDelete);
     
    139169    gPad->Modified();
    140170    gPad->Update();
    141 }
    142 
     171
     172}
     173
     174// --------------------------------------------------------------------------
     175//
     176// Draw copies of the histogram
     177//
    143178TObject *MHAlphaEnergyTime::DrawClone(Option_t *opt) const
    144179{
    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);
    147183
    148184    gROOT->SetSelectedPad(NULL);
    149185
    150     //
    151     // FIXME: ProjectionX,Y is not const within root
    152     //
    153186    TH1 *h;
    154187
    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);
    171220    ((TH3D&)fHist).DrawCopy(opt);
    172221
    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//
     233void MHAlphaEnergyTime::Subtract(const TH3D *h1, const TH3D *h2)
     234{
     235  //    MH::SetBinning(&fHist, (TH1*)h1);
     236
     237  //    fHist.Sumw2();
    184238    fHist.Add((TH1*)h1, (TH1*)h2, 1, -1); // ROOT: FIXME!
    185239}
    186240
    187 void MHAlphaEnergyTime::SetAlphaRange(Axis_t lo, Axis_t up)
    188 {
     241// --------------------------------------------------------------------------
     242//
     243// Integrate fHist(gamma) in the alpha range (lo, up)
     244//
     245TH2D *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
    189253    TAxis &axe = *fHist.GetXaxis();
    190254
    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//
     299TH2D *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.