Changeset 2117 for trunk


Ignore:
Timestamp:
05/16/03 13:11:23 (22 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars
Files:
25 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/Changelog

    r2116 r2117  
    11                                                 -*-*- END OF LINE -*-*-
     2
     3 2003/05/16: Thomas Bretz
     4
     5   * mbase/MContinue.cc:
     6     - SetDisplay for filter
     7     - Set LogStream for filter
     8     
     9   * mbase/MEvtLoop.cc:
     10     - don't use pointer to fTasklist in PostProcess if not initialized
     11     - do not execute Process if fTasklist is not initialized
     12     
     13   * mbase/MTask.[h,cc]:
     14     - overwrite SetDisplay (set also display of attached filter
     15     
     16   * mbase/MTaskList.cc:
     17     - minor changes
     18     
     19   * mdata/MDataChain.[h,cc]:
     20     - implemented ParseDataMember to support constants
     21
     22   * mfileio/MCT1ReadPreProc.[h,cc]:
     23     - added fNumFile to support Rewind
     24     - added Rewind
     25     
     26   * mfileio/MRead.[h,cc]:
     27     - new virtual function Rewind
     28     
     29   * mfileio/MReadMarsFile.[h,cc]:
     30     - added Rewind
     31     
     32   * mfileio/MReadTree.[h,cc]:
     33     - added Rewind
     34     - fixed a missing 'else' in AddFile
     35     
     36   * mhist/MBinning.[h,cc]:
     37     - added SetEdges(TAxis&)
     38     - added SetEdges(TH1&, char)
     39
     40   * mhist/MFillH.[h,cc]:
     41     - added bit kDoNotDisplay
     42     
     43   * mhist/MH.h:
     44     - added a comment
     45     
     46   * mhist/MH3.[h,cc]:
     47     - implemented GetRule
     48     - implemented GetNbins
     49     - implemented FindFixBin
     50     
     51   * mimage/MHHillasSrc.cc:
     52     - replaced gPad->cd(4) by savepad
     53
     54   * mmain/MStatusDisplay.[h,cc]:
     55     - fixed locked mode for loop-in-loop cases
     56
     57
    258
    359 2003/05/15: Wolfgang Wittek
     
    1470
    1571   * mranforest/MRanForestCalc.cc
    16      - exchange arguments in 'FindCreateObj("MHadronness", fHadronnessName)'
     72     - exchange arguments in
     73       FindCreateObj("MHadronness", fHadronnessName)
    1774
    1875
  • trunk/MagicSoft/Mars/mbase/MContinue.cc

    r1937 r2117  
    137137    }
    138138
     139    GetFilter()->SetDisplay(fDisplay);
     140    GetFilter()->SetLogStream(fLog);
     141
    139142    SetBit(kFilterIsPrivate);
    140143
  • trunk/MagicSoft/Mars/mbase/MEvtLoop.cc

    r2098 r2117  
    171171Bool_t MEvtLoop::PreProcess(const char *tlist)
    172172{
     173    fTaskList = NULL;
     174
    173175    //
    174176    // check if the needed parameter list is set.
     
    328330Bool_t MEvtLoop::Process(Int_t maxcnt)
    329331{
     332    if (!fTaskList)
     333        return kFALSE;
     334
    330335    //
    331336    //   loop over all events and process all tasks for
     
    440445    //  execute the post process of all tasks
    441446    //
    442     return fTaskList->PostProcess();
     447    return fTaskList ? fTaskList->PostProcess() : kTRUE;
    443448}
    444449
  • trunk/MagicSoft/Mars/mbase/MTask.cc

    r2052 r2117  
    364364    return kFALSE;
    365365}
     366
     367void MTask::SetDisplay(MStatusDisplay *d)
     368{
     369    if (fFilter)
     370        fFilter->SetDisplay(d);
     371    MParContainer::SetDisplay(d);
     372}
  • trunk/MagicSoft/Mars/mbase/MTask.h

    r2015 r2117  
    6868    const MFilter *GetFilter() const      { return fFilter; }
    6969    MFilter *GetFilter()  { return fFilter; } // for MContinue only
     70    void SetDisplay(MStatusDisplay *d);
    7071    virtual void PrintStatistics(const Int_t lvl=0, Bool_t title=kFALSE) const;
    7172
  • trunk/MagicSoft/Mars/mbase/MTaskList.cc

    r2052 r2117  
    134134{
    135135    fTasks->ForEach(MTask, SetLogStream)(log);
    136     MParContainer::SetLogStream(log);
     136    MTask::SetLogStream(log);
    137137}
    138138
     
    140140{
    141141    fTasks->ForEach(MTask, SetDisplay)(d);
    142     MParContainer::SetDisplay(d);
     142    MTask::SetDisplay(d);
    143143}
    144144
  • trunk/MagicSoft/Mars/mdata/MDataChain.cc

    r2098 r2117  
    8282//   randl(x)  returns gRandom->Landau(0, x)
    8383//
     84//
     85// Constants are implemented in ParseDataMember, namely:
     86//   kPi:      TMath::Pi()
     87//   kRad2Deg: 180/kPi
     88//   kDeg2Rad: kPi/180
     89//
     90// You can also defined constants which are defined in TMath by:
     91//   kLn10      for   static Double_t TMath::Ln10();
     92//   kLogE      for   static Double_t TMath::LogE();
     93//   kRadToDeg  for   static Double_t TMath::RadToDeg();
     94//   kDegToRad  for   static Double_t TMath::DegToRad();
     95// Remark: In older root versions only Pi() and E() are implemented in
     96//         TMath.
     97//
     98//
    8499// REMARK:
    85100//         - All the random functions are returning 0 if gRandom==0
     
    100115
    101116#include <TRandom.h>
     117#include <TMethodCall.h>
    102118
    103119#include "MLog.h"
     
    126142// --------------------------------------------------------------------------
    127143//
    128 //  Default constructor
    129 //
    130 MDataChain::MDataChain()
    131     : fMember(NULL), fOperatorType(kENoop)
    132 {
    133 }
    134 
    135 // --------------------------------------------------------------------------
    136 //
    137144// Constructor taking a rule as an argument. For more details see
    138145// class description
    139146//
    140147MDataChain::MDataChain(const char *rule, const char *name, const char *title)
    141     : fOperatorType(kENoop)
     148    : fMember(NULL), fOperatorType(kENoop)
    142149{
    143150    fName  = name  ? name  : "MDataChain";
    144151    fTitle = title ? title : rule;
     152
     153    if (TString(rule).IsNull())
     154        return;
    145155
    146156    *fLog << inf << "Trying to resolve rule... " << flush;
     
    259269// --------------------------------------------------------------------------
    260270//
     271// Here the names of data members are interpreted. This can be used to
     272// check for constants.
     273//
     274MData *MDataChain::ParseDataMember(TString txt)
     275{
     276    //txt.ToLower();
     277
     278    if (txt=="kRad2Deg") return new MDataValue(kRad2Deg);
     279    if (txt=="kDeg2Rad") return new MDataValue(1./kRad2Deg);
     280
     281    if (!txt.BeginsWith("k"))
     282        return new MDataMember(txt.Data());
     283
     284    const TString name = txt(1, txt.Length());
     285    TMethodCall call(TMath::Class(), name, "");
     286    switch (call.ReturnType())
     287    {
     288    case TMethodCall::kLong:
     289        Long_t l;
     290        call.Execute(l);
     291        return new MDataValue(l);
     292    case TMethodCall::kDouble:
     293        Double_t d;
     294        call.Execute(d);
     295        return new MDataValue(d);
     296    default:
     297        break;
     298    }
     299
     300    return new MDataMember(txt.Data());
     301}
     302
     303// --------------------------------------------------------------------------
     304//
    261305// Core of the data chain. Here the chain is constructed out of the rule.
    262306//
     
    418462            if ((txt.IsNull() || txt[0]!='(') && text[0]!='-' && text[0]!='+')
    419463            {
    420                 newmember = new MDataMember(text.Data());
     464                newmember = ParseDataMember(text.Data());
    421465                break;
    422466            }
     
    469513    if (!fMember)
    470514    {
    471         *fLog << warn << "MDataChain not valid." << endl;
     515        //*fLog << warn << "MDataChain not valid." << endl;
    472516        return 0;
    473517    }
  • trunk/MagicSoft/Mars/mdata/MDataChain.h

    r1853 r2117  
    5959
    6060    MData *ParseString(TString txt, Int_t level);
     61    MData *ParseDataMember(TString txt);
    6162
    6263    MDataChain(const char *rule, OperatorType_t op);
    6364
    6465public:
    65     MDataChain();
    66     MDataChain(const char *rule, const char *name=NULL, const char *title=NULL);
     66    MDataChain(const char *rule=NULL, const char *name=NULL, const char *title=NULL);
    6767    ~MDataChain();
    6868
  • trunk/MagicSoft/Mars/mfileio/MCT1ReadPreProc.cc

    r2091 r2117  
    549549    // Check for the existence of a next file to read
    550550    //
    551     TNamed *file = (TNamed*)fFileNames->First();
    552     if (!file)
    553         return kFALSE;
     551    if (fNumFile >= (UInt_t)fFileNames->GetSize())
     552        return kFALSE;
     553
     554    TNamed *file = (TNamed*)fFileNames->At(fNumFile);
     555
     556    //TNamed *file = (TNamed*)fFileNames->GetFirst();
     557    //if (!file)
     558    //    return kFALSE;
    554559
    555560    //
     
    565570    // Remove this file from the list of pending files
    566571    //
    567     fFileNames->Remove(file);
     572    //fFileNames->Remove(file);
    568573
    569574    *fLog << inf << "Open file: '" << name << "'" << endl;
    570575
    571576    if (!CheckHeader(fname))
    572     {
    573         *fLog << "OpenNextFile : CheckHeader(fname) is FALSE" << endl;
    574         return kFALSE;
    575     }
     577        return kFALSE;
     578
     579    fNumFile++;
    576580
    577581    fIn = new ifstream(fname);
    578582
    579583    *fLog << inf << "-----------------------------------------------------------------------" << endl;
    580 
    581584
    582585    switch (ReadRunHeader())
     
    690693}
    691694
    692 // --------------------------------------------------------------------------
    693 //
    694 // Open the first file in the list. Check for the output containers or create
    695 // them if they don't exist.
    696 //
    697 // Initialize the size of the MPedestalCam container to 127 pixels (CT1 camera)
    698 //
    699 Bool_t MCT1ReadPreProc::PreProcess(MParList *pList)
    700 {
    701 
    702     fParList = pList;
    703 
    704     //
    705     //  look for the HourAngle container in the plist
    706     //
    707     fHourAngle = (MParameterD*)pList->FindCreateObj("MParameterD", "HourAngle");
    708     if (!fHourAngle)
    709         return kFALSE;
    710     fHourAngle->SetTitle("Store the CT1 hour angle [deg]");
    711 
    712     //
    713     //  look for the ThetaOrig container in the plist
    714     //
    715     fThetaOrig = (MParameterD*)pList->FindCreateObj("MParameterD", "ThetaOrig");
    716     if (!fThetaOrig)
    717         return kFALSE;
    718     fThetaOrig->SetTitle("Store the original CT1 zenith angle [rad]");
    719 
    720     //
    721     //  look for the MCerPhotEvt class in the plist
    722     //
    723     fNphot = (MCerPhotEvt*)pList->FindCreateObj("MCerPhotEvt");
    724     if (!fNphot)
    725         return kFALSE;
    726 
    727     //
    728     //  look for the pedestal class in the plist
    729     //
    730     fPedest = (MPedestalCam*)pList->FindCreateObj("MPedestalCam");
    731     if (!fPedest)
    732         return kFALSE;
    733 
    734     //
    735     //  look for the time class in the plist
    736     //
    737     fTime = (MTime*)pList->FindCreateObj("MTime");
    738     if (!fTime)
    739         return kFALSE;
    740 
    741     //
    742     //  look for the pedestal class in the plist
    743     //
    744     fBlinds = (MBlindPixels*)pList->FindCreateObj("MBlindPixels");
    745     if (!fBlinds)
    746         return kFALSE;
    747 
    748     //
    749     //  look for the source position in the camera
    750     //
    751     fSrcPos = (MSrcPosCam*)pList->FindCreateObj("MSrcPosCam");
    752     if (!fSrcPos)
    753         return kFALSE;
    754 
    755     //
    756     //  look for the camera geometry
    757     //
    758     fGeom = (MGeomCam*)pList->FindCreateObj("MGeomCamCT1", "MGeomCam");
    759     if (!fGeom)
    760         return kFALSE;
    761 
    762     //
    763     //  look for the mc event class
    764     //
    765     fMcEvt = (MMcEvt*)pList->FindCreateObj("MMcEvt");
    766     if (!fMcEvt)
    767         return kFALSE;
    768 
    769     //
    770     //  look for the mc trigger class
    771     //
    772     fMcTrig = (MMcTrig*)pList->FindCreateObj("MMcTrig");
    773     if (!fMcTrig)
    774         return kFALSE;
    775 
    776     //
    777     //  look for the raw run header class
    778     //
    779     fRawRunHeader = (MRawRunHeader*)pList->FindCreateObj("MRawRunHeader");
    780     if (!fRawRunHeader)
    781         return kFALSE;
    782 
    783     fBinningT = (MBinning*)pList->FindObject("BinningTheta");
    784 
     695Bool_t MCT1ReadPreProc::Rewind()
     696{
    785697    fNumFilterEvts = 0;
    786698    fNumEvents     = 0;
    787699    fNumRuns       = 0;
     700    fNumFile       = 0;
     701    if (fIn)
     702        delete fIn;
     703
     704    fIn=NULL;
     705
     706    return kTRUE;
     707}
     708
     709// --------------------------------------------------------------------------
     710//
     711// Open the first file in the list. Check for the output containers or create
     712// them if they don't exist.
     713//
     714// Initialize the size of the MPedestalCam container to 127 pixels (CT1 camera)
     715//
     716Bool_t MCT1ReadPreProc::PreProcess(MParList *pList)
     717{
     718    fParList = pList;
     719
     720    //
     721    //  look for the HourAngle container in the plist
     722    //
     723    fHourAngle = (MParameterD*)pList->FindCreateObj("MParameterD", "HourAngle");
     724    if (!fHourAngle)
     725        return kFALSE;
     726    fHourAngle->SetTitle("Store the CT1 hour angle [deg]");
     727
     728    //
     729    //  look for the ThetaOrig container in the plist
     730    //
     731    fThetaOrig = (MParameterD*)pList->FindCreateObj("MParameterD", "ThetaOrig");
     732    if (!fThetaOrig)
     733        return kFALSE;
     734    fThetaOrig->SetTitle("Store the original CT1 zenith angle [rad]");
     735
     736    //
     737    //  look for the MCerPhotEvt class in the plist
     738    //
     739    fNphot = (MCerPhotEvt*)pList->FindCreateObj("MCerPhotEvt");
     740    if (!fNphot)
     741        return kFALSE;
     742
     743    //
     744    //  look for the pedestal class in the plist
     745    //
     746    fPedest = (MPedestalCam*)pList->FindCreateObj("MPedestalCam");
     747    if (!fPedest)
     748        return kFALSE;
     749
     750    //
     751    //  look for the time class in the plist
     752    //
     753    fTime = (MTime*)pList->FindCreateObj("MTime");
     754    if (!fTime)
     755        return kFALSE;
     756
     757    //
     758    //  look for the pedestal class in the plist
     759    //
     760    fBlinds = (MBlindPixels*)pList->FindCreateObj("MBlindPixels");
     761    if (!fBlinds)
     762        return kFALSE;
     763
     764    //
     765    //  look for the source position in the camera
     766    //
     767    fSrcPos = (MSrcPosCam*)pList->FindCreateObj("MSrcPosCam");
     768    if (!fSrcPos)
     769        return kFALSE;
     770
     771    //
     772    //  look for the camera geometry
     773    //
     774    fGeom = (MGeomCam*)pList->FindCreateObj("MGeomCamCT1", "MGeomCam");
     775    if (!fGeom)
     776        return kFALSE;
     777
     778    //
     779    //  look for the mc event class
     780    //
     781    fMcEvt = (MMcEvt*)pList->FindCreateObj("MMcEvt");
     782    if (!fMcEvt)
     783        return kFALSE;
     784
     785    //
     786    //  look for the mc trigger class
     787    //
     788    fMcTrig = (MMcTrig*)pList->FindCreateObj("MMcTrig");
     789    if (!fMcTrig)
     790        return kFALSE;
     791
     792    //
     793    //  look for the raw run header class
     794    //
     795    fRawRunHeader = (MRawRunHeader*)pList->FindCreateObj("MRawRunHeader");
     796    if (!fRawRunHeader)
     797        return kFALSE;
     798
     799    fBinningT = (MBinning*)pList->FindObject("BinningTheta");
     800
     801    Rewind();
    788802
    789803    fPedest->InitSize(iMAXNUMPIX);
     
    11151129    }
    11161130
     1131    delete fIn;
     1132    fIn = NULL;
     1133
    11171134    return GetSelector() ? GetSelector()->CallPostProcess() : kTRUE;
    11181135}
  • trunk/MagicSoft/Mars/mfileio/MCT1ReadPreProc.h

    r1952 r2117  
    5050    Bool_t fIsMcFile;       // Flag whether current run is a MC run
    5151
     52    UInt_t fNumFile;
    5253    UInt_t fNumEvents;      // number of events counted in all runs in all files
    5354    UInt_t fNumEventsInRun; // number of events in the counted in th ecurrent run
     
    7677    Bool_t PostProcess();
    7778
     79    Bool_t Rewind();
     80
    7881public:
    7982    MCT1ReadPreProc(const char *filename=NULL,
  • trunk/MagicSoft/Mars/mfileio/MRead.cc

    r1902 r2117  
    4141
    4242ClassImp(MRead);
     43
     44Bool_t MRead::Rewind()
     45{
     46    *fLog << err << "ERROR - Rewind() not implemented for " << GetDescriptor() << endl;
     47    return kFALSE;
     48}
    4349
    4450// --------------------------------------------------------------------------
  • trunk/MagicSoft/Mars/mfileio/MRead.h

    r1880 r2117  
    1717
    1818    virtual UInt_t GetEntries() = 0;
     19    virtual Bool_t Rewind();
    1920
    2021    void SetSelector(MFilter *f) { fSelector = f; }
  • trunk/MagicSoft/Mars/mfileio/MReadMarsFile.h

    r1668 r2117  
    2626    Int_t AddFile(const char *fname, Int_t entries=-1);
    2727
     28    Bool_t Rewind() { if (fRun) fRun->Rewind(); MReadTree::Rewind(); return kTRUE; }
     29
    2830    ClassDef(MReadMarsFile, 1)  // Reads a tree from file(s) and the information from the 'RunHeader'-tree
    2931};
  • trunk/MagicSoft/Mars/mfileio/MReadTree.cc

    r2106 r2117  
    131131    //
    132132    // Delete all the pointers to pointers to the objects where the
    133     // branche data gets stored.
     133    // branche data gets stored. FIXME: When PreProcessed twice this
     134    // creates a memory leak!
    134135    //
    135136    TIter Next(fChain->GetStatus());
     
    239240    if (numfiles>0)
    240241        SetBit(kChainWasChanged);
    241 
    242     *fLog << warn << "WARNING: '" << fname << "' not added to " << GetDescriptor() << endl;
     242    else
     243        *fLog << warn << "WARNING: '" << fname << "' not added to " << GetDescriptor() << endl;
    243244
    244245    return numfiles;
  • trunk/MagicSoft/Mars/mfileio/MReadTree.h

    r1836 r2117  
    5757    UInt_t GetEntries();
    5858
    59     TString    GetFileName() const;
    60     Int_t      GetFileIndex() const;
     59    TString GetFileName() const;
     60    Int_t   GetFileIndex() const;
    6161
    62     virtual void   AddNotify(TObject *obj);
    63     virtual void   SetOwner(Bool_t flag=kTRUE);
    64     virtual void   Print(Option_t *opt="") const;
     62    virtual void AddNotify(TObject *obj);
     63    virtual void SetOwner(Bool_t flag=kTRUE);
    6564
    66     virtual Int_t  AddFile(const char *fname, Int_t entries=-1);
    67     virtual Int_t  AddFiles(const MReadTree &read);
     65    virtual Int_t AddFile(const char *fname, Int_t entries=-1);
     66    virtual Int_t AddFiles(const MReadTree &read);
    6867
    69     virtual Bool_t PreProcess(MParList *pList);
    70     virtual Bool_t Process();
    71     virtual Bool_t PostProcess();
     68    Bool_t PreProcess(MParList *pList);
     69    Bool_t Process();
     70    Bool_t PostProcess();
    7271
    73     virtual Bool_t Notify();
     72    Bool_t Notify();
     73    Bool_t Rewind() { SetEventNum(0); return kTRUE; }
     74    void   Print(Option_t *opt="") const;
    7475
    7576    ClassDef(MReadTree, 1)      // Reads a tree from file(s)
  • trunk/MagicSoft/Mars/mhist/MBinning.cc

    r2106 r2117  
    1616!
    1717!
    18 !   Author(s): Thomas Bretz  01/2002 <mailto:tbretz@astro.uni-wuerzburg.de>
    19 !
    20 !   Copyright: MAGIC Software Development, 2000-2002
     18!   Author(s): Thomas Bretz, 01/2002 <mailto:tbretz@astro.uni-wuerzburg.de>
     19!
     20!   Copyright: MAGIC Software Development, 2000-2003
    2121!
    2222!
     
    3030#include "MBinning.h"
    3131
     32#include <ctype.h>      // tolower
    3233#include <fstream.h>
    3334
     
    6061
    6162    fType = kIsDefault;
     63}
     64
     65void MBinning::SetEdges(const TAxis &axe)
     66{
     67    const TArrayD &arr = *((TAxis&)axe).GetXbins();
     68    if (arr.GetSize()>0)
     69    {
     70        SetEdges(arr);
     71        return;
     72    }
     73
     74    SetEdges(axe.GetNbins(), axe.GetXmin(), axe.GetXmax());
     75}
     76
     77void MBinning::SetEdges(const TH1 &h, const Char_t axis='x')
     78{
     79    TH1 &hist = (TH1&)h; // get rid of const qualifier
     80    switch (tolower(axis))
     81    {
     82    case 'x':
     83        SetEdges(*hist.GetXaxis());
     84        return;
     85    case 'y':
     86        SetEdges(*hist.GetYaxis());
     87        return;
     88    case 'z':
     89        SetEdges(*hist.GetZaxis());
     90        return;
     91    default:
     92        *fLog << warn << "MBinning::SetEdges: Axis '" << axis << "' unknown... using x." << endl;
     93        SetEdges(*hist.GetXaxis());
     94    }
    6295}
    6396
  • trunk/MagicSoft/Mars/mhist/MBinning.h

    r1962 r2117  
    77
    88#ifndef ROOT_TArrayD
    9 #include "TArrayD.h"
     9#include <TArrayD.h>
    1010#endif
    1111
    1212class TH1;
     13class TAxis;
    1314
    1415class MBinning : public MParContainer
     
    3839    }
    3940
     41    void SetEdges(const TAxis &axe);
     42    void SetEdges(const TH1 &h, const Char_t axis='x');
    4043    void SetEdges(const Int_t nbins, const Axis_t lo, Axis_t up);
    4144    void SetEdgesLog(const Int_t nbins, const Axis_t lo, Axis_t up);
  • trunk/MagicSoft/Mars/mhist/MFillH.cc

    r2015 r2117  
    341341        return kTRUE;
    342342
     343    if (TestBit(kDoNotDisplay))
     344        return kTRUE;
     345
    343346    fCanvas = &fDisplay->AddTab(fH->GetName());
    344347    fH->Draw();
  • trunk/MagicSoft/Mars/mhist/MFillH.h

    r1994 r2117  
    1616class MFillH : public MTask
    1717{
     18public:
     19    enum {
     20        kDoNotDisplay = BIT(17)
     21    };
     22
    1823private:
    1924    MParContainer *fParContainer; // Pointer to the data container storing
  • trunk/MagicSoft/Mars/mhist/MH.h

    r2109 r2117  
    3636    static TCanvas *MakeDefCanvas(const TObject *obj,
    3737                                  const UInt_t w=625, const UInt_t h=440);
     38
     39    // FIXME: * --> & !!!
    3840
    3941    static void SetBinning(TH1 *h, const MBinning *binsx);
  • trunk/MagicSoft/Mars/mhist/MH3.cc

    r2043 r2117  
    6060#include "MH3.h"
    6161
     62#include <ctype.h>   // tolower
    6263#include <fstream.h>
    6364
     
    636637    return h;
    637638}
     639
     640TString MH3::GetRule(const Char_t axis='x') const
     641{
     642    switch (tolower(axis))
     643    {
     644    case 'x':
     645        return fData[0] ? fData[0]->GetRule() : TString("");
     646    case 'y':
     647        return fData[1] ? fData[1]->GetRule() : TString("");
     648    case 'z':
     649        return fData[2] ? fData[2]->GetRule() : TString("");
     650    default:
     651        return "<n/a>";
     652    }
     653}
     654
     655// --------------------------------------------------------------------------
     656//
     657// Returns the total number of bins in a histogram (excluding under- and
     658// overflow bins)
     659//
     660Int_t MH3::GetNbins() const
     661{
     662    Int_t num = 1;
     663
     664    switch (fDimension)
     665    {
     666    case 3:
     667        num *= fHist->GetNbinsZ()+2;
     668    case 2:
     669        num *= fHist->GetNbinsY()+2;
     670    case 1:
     671        num *= fHist->GetNbinsX()+2;
     672    }
     673
     674    return num;
     675}
     676
     677// --------------------------------------------------------------------------
     678//
     679// Returns the total number of bins in a histogram (excluding under- and
     680// overflow bins) Return -1 if bin is underflow or overflow
     681//
     682Int_t MH3::FindFixBin(Double_t x, Double_t y, Double_t z) const
     683{
     684    const TAxis &axex = *fHist->GetXaxis();
     685    const TAxis &axey = *fHist->GetYaxis();
     686    const TAxis &axez = *fHist->GetZaxis();
     687
     688    Int_t binz = 0;
     689    Int_t biny = 0;
     690    Int_t binx = 0;
     691
     692    switch (fDimension)
     693    {
     694    case 3:
     695        binz = axez.FindFixBin(z);
     696        if (binz>axez.GetLast() || binz<axez.GetFirst())
     697            return -1;
     698    case 2:
     699        biny = axey.FindFixBin(y);
     700        if (biny>axey.GetLast() || biny<axey.GetFirst())
     701            return -1;
     702    case 1:
     703        binx = axex.FindFixBin(x);
     704        if (binx<axex.GetFirst() || binx>axex.GetLast())
     705            return -1;
     706    }
     707
     708    const Int_t nx = fHist->GetNbinsX()+2;
     709    const Int_t ny = fHist->GetNbinsY()+2;
     710
     711    return binx + nx*(biny +ny*binz);
     712}
  • trunk/MagicSoft/Mars/mhist/MH3.h

    r2043 r2117  
    1717protected:
    1818    // Could be const but root < 3.02/06 doesn't like this...
    19     Int_t fDimension;            // Number of dimensions of histogram
    20     TH1  *fHist;                 // Histogram to fill
    21 
    22     TString     fDataMember[3];  // Data member which should be filled into the histogram x
     19    Int_t       fDimension;      // Number of dimensions of histogram
     20    TH1        *fHist;           // Histogram to fill
    2321    MDataChain *fData[3];        // Object from which the data is filled
    2422    Double_t    fScale[3];       // Scale for the three axis (eg unit)
     
    4442
    4543    Int_t GetDimension() const { return fDimension; }
     44    Int_t GetNbins() const;
     45    Int_t FindFixBin(Double_t x, Double_t y=0, Double_t z=0) const;
    4646
    4747    void SetName(const char *name);
     
    5252
    5353    TString GetDataMember() const;
     54    TString GetRule(const Char_t axis='x') const;
    5455
    5556    TH1 &GetHist() { return *fHist; }
  • trunk/MagicSoft/Mars/mimage/MHHillasSrc.cc

    r2098 r2117  
    230230
    231231    TVirtualPad *savepad = gPad;
    232     gPad->cd(4);
     232    savepad->cd(4);
    233233    gPad->SetLogy();
    234234    gPad = savepad;
  • trunk/MagicSoft/Mars/mmain/MStatusDisplay.cc

    r2110 r2117  
    485485//
    486486MStatusDisplay::MStatusDisplay(Long_t t)
    487 : TGMainFrame(gClient->GetRoot(), 1, 1), fTimer(this, t, kTRUE), fStatus(kLoopNone), fLog(&gLog), fLogIdx(-1), fLogTimer(this, 250, kTRUE), fLogBox(NULL)
     487: TGMainFrame(gClient->GetRoot(), 1, 1), fTimer(this, t, kTRUE), fStatus(kLoopNone), fLog(&gLog), fLogIdx(-1), fLogTimer(this, 250, kTRUE), fLogBox(NULL), fIsLocked(0)
    488488{
    489489    gROOT->GetListOfSpecials()->Add(this);
     
    758758    case kLoopStop:
    759759    case kFileExit:
    760         if (id==kFileExit && !TestBit(kIsLocked))
     760        if (id==kFileExit && !fIsLocked)
    761761            delete this;
    762762        fStatus = (Status_t)id;
     
    10751075void MStatusDisplay::SetNoContextMenu(Bool_t flag)
    10761076{
     1077    if (fIsLocked>1)
     1078        return;
     1079
    10771080    flag ? SetBit(kNoContextMenu) : ResetBit(kNoContextMenu);
    10781081    for (int i=1; i<fTab->GetNumberOfTabs(); i++)
     
    12531256void MStatusDisplay::StartUpdate(Int_t millisec)
    12541257{
     1258    if (fIsLocked>1)
     1259        return;
     1260
    12551261    if (fTimer.GetTime()<TTime(0))
    12561262        return;
     
    12641270void MStatusDisplay::StopUpdate()
    12651271{
     1272    if (fIsLocked>1)
     1273        return;
     1274
    12661275    fTimer.Stop();
    12671276}
  • trunk/MagicSoft/Mars/mmain/MStatusDisplay.h

    r2110 r2117  
    7272    FontStruct_t fFont;
    7373
     74    UInt_t fIsLocked;
     75
    7476    void AddMenuBar();
    7577    void AddProgressBar();
     
    100102    void UpdatePSHeader(const TString &name) const;
    101103
    102     enum {
    103         kIsLocked = BIT(14)
    104     };
    105104public:
    106105     MStatusDisplay(Long_t t=1000);
     
    152151     void ClearStatus() { fStatus = kLoopNone; }
    153152
    154      void Lock() { SetBit(kIsLocked); }
    155      void UnLock() { ResetBit(kIsLocked); }
     153     void Lock() { fIsLocked++; }
     154     void UnLock() { if (fIsLocked>0) fIsLocked--; }
    156155
    157156     Bool_t CheckTabForCanvas(int num) const;
Note: See TracChangeset for help on using the changeset viewer.