Ignore:
Timestamp:
05/14/08 12:03:25 (17 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars/mhbase
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mhbase/MH3.cc

    r8709 r8888  
    124124// Default constructor.
    125125//
    126 MH3::MH3(const unsigned int dim)
    127     : fDimension(dim>3?3:dim), fHist(NULL), fStyleBits(0)
    128 
     126MH3::MH3(const Int_t dim, Type_t type)
     127    : fDimension(dim), fHist(NULL), fStyleBits(0)
     128{
     129    switch (type)
     130    {
     131    case kHistogram:
     132        if (fDimension>3)
     133            fDimension=3;
     134        break;
     135    case kProfile:
     136        fDimension = -TMath::Abs(fDimension);
     137        if (fDimension<-2)
     138            fDimension = -2;
     139        break;
     140    }
     141
    129142    switch (fDimension)
    130143    {
     
    132145        fHist = new TH1D;
    133146        fHist->SetYTitle("Counts");
     147        break;
     148    case -1:
     149        fHist = new TProfile;
     150        fHist->SetYTitle("Average");
    134151        break;
    135152    case 2:
     
    137154        fHist->SetZTitle("Counts");
    138155        break;
     156    case -2:
     157        fHist = new TProfile2D;
     158        fHist->SetZTitle("Average");
     159        break;
    139160    case 3:
    140161        fHist = new TH3D;
     
    194215}
    195216
     217// --------------------------------------------------------------------------
     218//
     219// Adapt a given histogram
     220//
    196221MH3::MH3(const TH1 &h1)
    197222    : fDimension(1), fStyleBits(0)
     
    237262// description above.
    238263//
    239 MH3::MH3(const char *memberx, const char *membery)
    240     : fDimension(2), fStyleBits(0)
    241 {
    242     fHist = new TH2D;
     264MH3::MH3(const char *memberx, const char *membery, Type_t type)
     265    : fDimension(type==kHistogram?2:-1), fStyleBits(0)
     266{
     267    fHist = type==kHistogram ? static_cast<TH1*>(new TH2D) : static_cast<TH1*>(new TProfile); //new TH2D;
    243268
    244269    fData[0] = new MDataPhrase(memberx);
     
    255280    fHist->UseCurrentStyle();
    256281    fHist->SetDirectory(NULL);
    257     fHist->SetZTitle("Counts");
     282    fHist->SetZTitle(fDimension>0?"Counts":"Average");
    258283
    259284    fScale[0] = 1;
     
    268293// description see the class description above.
    269294//
    270 MH3::MH3(const char *memberx, const char *membery, const char *memberz)
    271     : fDimension(3), fStyleBits(0)
    272 {
    273     fHist = new TH3D;
     295MH3::MH3(const char *memberx, const char *membery, const char *memberz, Type_t type)
     296    : fDimension(type==kHistogram?3:-2), fStyleBits(0)
     297{
     298    fHist = type==kHistogram ? static_cast<TH1*>(new TH3D) : static_cast<TH1*>(new TProfile2D); //new TH2D;
    274299
    275300    fData[0] = new MDataPhrase(memberx);
     
    357382    MBinning *binsz = NULL;
    358383
    359     switch (fDimension)
     384    switch (TMath::Abs(fDimension))
    360385    {
    361386    case 3:
     
    366391            return kFALSE;
    367392        }
    368         if (fData[2] && !fData[2]->PreProcess(plist))
    369             return kFALSE;
    370393        if (fData[2])
    371394            fHist->SetZTitle(fData[2]->GetTitle());
     
    381404            return kFALSE;
    382405        }
    383         if (fData[1] && !fData[1]->PreProcess(plist))
    384             return kFALSE;
    385406        if (fData[1])
    386407            fHist->SetYTitle(fData[1]->GetTitle());
     
    402423            }
    403424        }
    404         if (fData[0] && !fData[0]->PreProcess(plist))
    405             return kFALSE;
    406425        if (fData[0]!=NULL)
    407426            fHist->SetXTitle(fData[0]->GetTitle());
     
    412431    }
    413432
    414     TString title("Histogram for ");
     433    // PreProcess existing fData members
     434    for (int i=0; i<3; i++)
     435        if (fData[i] && !fData[i]->PreProcess(plist))
     436            return kFALSE;
     437
     438    TString title(fDimension>0?"Histogram":"Profile");
     439    title += " for ";
    415440    title += name;
    416     title += Form(" (%dD)", fDimension);
     441    title += Form(" (%dD)", TMath::Abs(fDimension));
    417442
    418443    fHist->SetName(name);
     
    420445    fHist->SetDirectory(0);
    421446
    422     switch (fDimension)
     447    switch (TMath::Abs(fDimension))
    423448    {
    424449    case 1:
     
    433458    }
    434459
    435     *fLog << err << "ERROR - MH3 has " << fDimension << " dimensions!" << endl;
     460    *fLog << err << "ERROR - MH3 has " << TMath::Abs(fDimension) << " dimensions!" << endl;
    436461    return kFALSE;
    437462}
     
    487512    switch (fDimension)
    488513    {
    489     case 3:
     514    case -2:
     515    case  3:
    490516        z = fData[2]->GetValue()*fScale[2];
    491     case 2:
     517    case -1:
     518    case  2:
    492519        y = fData[1]->GetValue()*fScale[1];
    493     case 1:
     520    case  1:
    494521        x = fData[0]->GetValue()*fScale[0];
    495522    }
     
    497524    switch (fDimension)
    498525    {
    499     case 3:
    500         ((TH3*)fHist)->Fill(x, y, z, w);
     526    case  3:
     527        static_cast<TH3*>(fHist)->Fill(x, y, z, w);
    501528        return kTRUE;
    502     case 2:
    503         ((TH2*)fHist)->Fill(x, y, w);
     529    case  2:
     530        static_cast<TH2*>(fHist)->Fill(x, y, w);
    504531        return kTRUE;
    505532    case 1:
    506533        fHist->Fill(x, w);
    507534        return kTRUE;
     535    case -1:
     536        static_cast<TProfile*>(fHist)->Fill(x, y, w);
     537        return kTRUE;
     538    case -2:
     539        static_cast<TProfile2D*>(fHist)->Fill(x, y, z, w);
     540        return kTRUE;
    508541    }
    509542
     
    549582    TProfile *p=0;
    550583
    551     if (fDimension==2)
     584    if (TMath::Abs(fDimension)==2)
    552585        MH::SetPalette("pretty");
    553586
     
    629662    str.ToLower();
    630663
    631     const Bool_t only  = str.Contains("only")  && fDimension==2;
    632     const Bool_t same  = str.Contains("same")  && fDimension<3;
    633     const Bool_t blue  = str.Contains("blue")  && fDimension==2;
    634     const Bool_t profx = str.Contains("profx") && fDimension==2;
    635     const Bool_t profy = str.Contains("profy") && fDimension==2;
     664    const Bool_t only  = str.Contains("only")  && TMath::Abs(fDimension)==2;
     665    const Bool_t same  = str.Contains("same")  && TMath::Abs(fDimension)<3;
     666    const Bool_t blue  = str.Contains("blue")  && TMath::Abs(fDimension)==2;
     667    const Bool_t profx = str.Contains("profx") && TMath::Abs(fDimension)==2;
     668    const Bool_t profy = str.Contains("profy") && TMath::Abs(fDimension)==2;
    636669
    637670    str.ReplaceAll("only",  "");
     
    641674    str.ReplaceAll(" ", "");
    642675
    643     if (same && fDimension==1)
     676    if (same && TMath::Abs(fDimension)==1)
    644677    {
    645678        fHist->SetLineColor(kBlue);
     
    702735    out << "   MH3 " << name << "(\"";
    703736    out << fData[0]->GetRule() << "\"";
    704     if (fDimension>1)
     737    if (fDimension>1 || fDimension<0)
    705738        out << ", \"" << fData[1]->GetRule() << "\"";
    706     if (fDimension>2)
     739    if (fDimension>2 || fDimension<-1)
    707740        out << ", \"" << fData[2]->GetRule() << "\"";
    708741
     
    717750    switch (fDimension)
    718751    {
     752    case -2:
    719753    case 3:
    720754        if (fScale[2]!=1)
    721755            out << "   " << name << ".SetScaleZ(" << fScale[2] << ");" << endl;
     756    case -1:
    722757    case 2:
    723758        if (fScale[1]!=1)
     
    749784            h=new MH3(fData[0]->GetRule(), fData[1]->GetRule());
    750785            break;
     786        case -1:
     787            h=new MH3(fData[0]->GetRule(), fData[1]->GetRule(), MH3::kProfile);
     788            break;
    751789        case 3:
    752790            h=new MH3(fData[0]->GetRule(), fData[1]->GetRule(), fData[2]->GetRule());
    753791            break;
     792        case -2:
     793            h=new MH3(fData[0]->GetRule(), fData[1]->GetRule(), fData[2]->GetRule(), MH3::kProfile);
     794            break;
    754795        }
    755796    switch (fDimension)
    756797    {
     798    case -2:
    757799    case 3:
    758800        h->SetScaleZ(fScale[2]);
    759801    case 2:
     802    case -1:
    760803        h->SetScaleY(fScale[1]);
    761804    case 1:
     
    789832    Int_t num = 1;
    790833
    791     switch (fDimension)
     834    switch (TMath::Abs(fDimension))
    792835    {
    793836    case 3:
     
    820863    {
    821864    case 3:
     865    case -2:
    822866        binz = axez.FindFixBin(z);
    823867        if (binz>axez.GetLast() || binz<axez.GetFirst())
    824868            return -1;
    825869    case 2:
     870    case -1:
    826871        biny = axey.FindFixBin(y);
    827872        if (biny>axey.GetLast() || biny<axey.GetFirst())
  • trunk/MagicSoft/Mars/mhbase/MH3.h

    r8709 r8888  
    2828    Byte_t      fStyleBits;      // Set the range of a histogram automatically in Finalize
    2929
     30//    TH1        *fHistDraw;       //!
     31
    3032    void HandleLogAxis(TAxis &axe) const;
    3133
     
    3941
    4042public:
    41     MH3(const unsigned int dim=0);
     43    enum Type_t {
     44        kHistogram,
     45        kProfile
     46    };
     47
     48    MH3(const Int_t dim=0, Type_t type=MH3::kHistogram);
    4249    MH3(const TH1 &h1);
    4350    MH3(const char *memberx);
    44     MH3(const char *memberx, const char *membery);
    45     MH3(const char *memberx, const char *membery, const char *memberz);
     51    MH3(const char *memberx, const char *membery, Type_t type=MH3::kHistogram);
     52    MH3(const char *memberx, const char *membery, const char *memberz, Type_t type=MH3::kHistogram);
    4653    ~MH3();
    4754
     
    7077
    7178    // Getter
    72     Int_t GetDimension() const { return fDimension; }
     79    Int_t GetDimension() const { return TMath::Abs(fDimension); }
    7380    Int_t GetNbins() const;
    7481    Int_t FindFixBin(Double_t x, Double_t y=0, Double_t z=0) const;
  • trunk/MagicSoft/Mars/mhbase/MHn.cc

    r8719 r8888  
    213213//  e.g. AddHist("MHillas.fLength", "MHillas.fSize")
    214214//
    215 Bool_t MHn::AddHist(const char *memberx, const char *membery)
     215Bool_t MHn::AddHist(const char *memberx, const char *membery, MH3::Type_t type)
    216216{
    217217    if (fNum==8)
     
    221221    }
    222222
    223     fHist[fNum] = new MH3(memberx, membery);
     223    fHist[fNum] = new MH3(memberx, membery, type);
    224224
    225225    InitHist();
     
    236236//  e.g. AddHist("MHillas.fWidth", "MHillas.fLength", "MHillas.fSize")
    237237//
    238 Bool_t MHn::AddHist(const char *memberx, const char *membery, const char *memberz)
     238Bool_t MHn::AddHist(const char *memberx, const char *membery, const char *memberz, MH3::Type_t type)
    239239{
    240240    if (fNum==8)
     
    244244    }
    245245
    246     fHist[fNum] = new MH3(memberx, membery, memberz);
     246    fHist[fNum] = new MH3(memberx, membery, memberz, type);
    247247
    248248    InitHist();
  • trunk/MagicSoft/Mars/mhbase/MHn.h

    r8700 r8888  
    22#define MARS_MHn
    33
    4 #ifndef ROOT_TH1
    5 #include <TH1.h>
     4#ifndef MARS_MH3
     5#include "MH3.h"
    66#endif
    7 #ifndef MARS_MH
    8 #include "MH.h"
    9 #endif
    10 
    11 class MH3;
    127
    138class MHn : public MH
     
    3934
    4035    Bool_t AddHist(const char *memberx);
    41     Bool_t AddHist(const char *memberx, const char *membery);
    42     Bool_t AddHist(const char *memberx, const char *membery, const char *memberz);
     36    Bool_t AddHist(const char *memberx, const char *membery, MH3::Type_t type=MH3::kHistogram);
     37    Bool_t AddHist(const char *memberx, const char *membery, const char *memberz, MH3::Type_t type=MH3::kHistogram);
    4338
    4439    void InitName(const char *n)
Note: See TracChangeset for help on using the changeset viewer.