Ignore:
Timestamp:
03/18/05 17:21:58 (20 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars/mhist
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mhist/HistLinkDef.h

    r5068 r6855  
    1818#pragma link C++ class MHAlphaEnergyTheta+;
    1919#pragma link C++ class MHGamma+;
    20 #pragma link C++ class MHSigmaTheta;
     20//#pragma link C++ class MHSigmaTheta;
    2121#pragma link C++ class MHThetabarTime+;
    2222#pragma link C++ class MHThetabarTheta+;
  • trunk/MagicSoft/Mars/mhist/MHCamEvent.cc

    r6513 r6855  
    3333// =====
    3434//
    35 // To plot sqrt(variance) instead of the rms use:
    36 //    MHCamEvent::SetBit(MHCamera::kSqrtVariance);
    37 //  or
    38 //    MHCamEvent::EnableSqrtVariance()
    39 //
    4035// To count how often a certain pixel is above or below a threshold do:
    4136//    MHCamEvent::SetThreshold(5.5);  // Default=LowerBound
     
    121116    if (fSum)
    122117        delete fSum;
    123 }
    124 
    125 // --------------------------------------------------------------------------
    126 //
    127 // use this to display the variance instead of the rms.
    128 //
    129 void MHCamEvent::EnableSqrtVariance(Bool_t b)
    130 {
    131     b ? SetBit(MHCamera::kSqrtVariance) : ResetBit(MHCamera::kSqrtVariance);
    132118}
    133119
     
    173159        fSum->SetYTitle("a.u.");
    174160    fSum->SetBit(MHCamera::kProfile);
    175     if (TestBit(MHCamera::kSqrtVariance))
    176         fSum->SetBit(MHCamera::kSqrtVariance);
    177161
    178162    fSum->SetXTitle("Pixel Idx");
     
    261245{
    262246    TVirtualPad *pad = gPad ? gPad : MakeDefCanvas(this);
     247    const Int_t col = pad->GetFillColor();
    263248    pad->SetBorderMode(0);
    264249
    265250    AppendPad();
    266251
    267     TString name = Form("%s_5", pad->GetName());
    268     TPad *p = new TPad(name,name,6./8,0.25,0.99,0.5,pad->GetFillColor(),0,0);
    269     p->SetNumber(5);
    270     p->Draw();
    271 
    272     name = Form("%s_6", pad->GetName());
    273     p = new TPad(name,name,6./8,0.01,0.99,0.25,pad->GetFillColor(),0,0);
    274     p->SetNumber(6);
    275     p->Draw();
    276 
    277     pad->Divide(2,2);
    278 
    279     pad->cd(1);
    280     gPad->SetBorderMode(0);
    281     gPad->SetPad(0.01, 0.5, 0.66, 0.99);
     252    TString name = Form("%s_1", pad->GetName());
     253    TPad *p = new TPad(name,name,0.005, 0.5, 0.66, 0.995,col,0,0);
     254    p->SetNumber(1);
     255    p->Draw();
     256    p->cd();
    282257    fSum->Draw("EPhist");
    283258
    284     pad->cd(2);
    285     gPad->SetBorderMode(0);
    286     gPad->SetPad(0.66, 0.5, 0.99, 0.99);
     259    pad->cd();
     260    name = Form("%s_2", pad->GetName());
     261    p = new TPad(name,name,0.66, 0.5, 0.995, 0.995,col,0,0);
     262    p->SetNumber(2);
     263    p->Draw();
     264    p->cd();
    287265    TH1 *h = fSum->Projection(Form("%s;proj", fName.Data()), 50);
    288266    h->SetTitle("Projection");
     
    290268    h->Draw();
    291269
    292     pad->cd(3);
    293     gPad->SetPad(0.01, 0.01, 3./8, 0.5);
    294     gPad->SetBorderMode(0);
     270    pad->cd();
     271    name = Form("%s_3", pad->GetName());
     272    p = new TPad(name,name,0.005, 0.005, 3./8, 0.5,col,0,0);
     273    p->SetNumber(3);
     274    p->Draw();
     275    p->cd();
    295276    fSum->Draw();
    296277
    297     pad->cd(4);
    298     gPad->SetPad(3./8, 0.01, 6./8, 0.5);
    299     gPad->SetBorderMode(0);
     278    pad->cd();
     279    name = Form("%s_4", pad->GetName());
     280    p = new TPad(name,name,3./8, 0.005, 6./8-0.005, 0.5,col,0,0);
     281    p->SetNumber(4);
     282    p->Draw();
     283    p->cd();
    300284
    301285    MHCamera *cam = new MHCamera(*fSum->GetGeometry());
    302286    cam->SetName(Form("%s;err", fName.Data()));
    303     cam->SetTitle(fSum->TestBit(MHCamera::kSqrtVariance)?"Sqrt(Variance)":"Root Mean Squared (rms)");
     287    cam->SetTitle("Sqrt(Variance)");
    304288    cam->SetYTitle(fSum->GetYaxis()->GetTitle());
    305289    cam->SetCamContent(*fSum, 1);
     
    307291    cam->Draw();
    308292
    309     pad->cd(5);
     293    pad->cd();
     294    name = Form("%s_5", pad->GetName());
     295    p = new TPad(name,name,6./8,0.25,0.995,0.5,col,0,0);
     296    p->SetNumber(5);
     297    p->Draw();
     298    p->cd();
    310299    h = (TH1*)fSum->RadialProfile(Form("%s;rad", fName.Data()), 20);
    311300    h->SetTitle("Radial Profile");
     
    313302    h->Draw();
    314303
    315     pad->cd(6);
     304    pad->cd();
     305    name = Form("%s_6", pad->GetName());
     306    p = new TPad(name,name,6./8,0.005,0.995,0.25,col,0,0);
     307    p->SetNumber(6);
     308    p->Draw();
     309    p->cd();
    316310    h = (TH1*)fSum->AzimuthProfile(Form("%s;az", fName.Data()), 30);
    317311    h->SetTitle("Azimuth Profile");
  • trunk/MagicSoft/Mars/mhist/MHCamEvent.h

    r6276 r6855  
    1515    static const TString gsDefTitle;
    1616
     17protected:
    1718    MHCamera  *fSum;       // storing the sum
    1819    MCamEvent *fEvt;       //! the current event
     
    5051
    5152    void SetThreshold(Float_t f, Char_t direction=kIsLowerBound) { fThreshold = f; fUseThreshold=direction; }
    52     void EnableSqrtVariance(Bool_t b=kTRUE);
    5353
    5454    ClassDef(MHCamEvent, 1) // Histogram to sum camera events
  • trunk/MagicSoft/Mars/mhist/MHCamera.cc

    r6457 r6855  
    164164    fUsed.Set(geom.GetNumPixels());
    165165    for (Int_t i=0; i<fNcells-2; i++)
    166       ResetUsed(i);
     166        ResetUsed(i);
     167
     168    fBinEntries.Set(geom.GetNumPixels()+2);
     169    fBinEntries.Reset();
    167170}
    168171
     
    213216   const Int_t bin = (Int_t)x+1;
    214217   AddBinContent(bin);
     218   fBinEntries[bin]++;
    215219   if (fSumw2.fN)
    216220       fSumw2.fArray[bin]++;
     
    249253   const Int_t bin = (Int_t)x+1;
    250254   AddBinContent(bin, w);
     255   fBinEntries[bin]++;
    251256   if (fSumw2.fN)
    252257       fSumw2.fArray[bin] += w*w;
     
    319324        if ((all || IsUsed(i)) && MatchSector(i, sector, aidx))
    320325        {
    321             mean += fArray[i+1];
     326            if (TestBit(kProfile) && fBinEntries[i+1]==0)
     327                continue;
     328
     329            mean += TestBit(kProfile) ? fArray[i+1]/fBinEntries[i+1] : fArray[i+1];
    322330            n++;
    323331        }
    324332    }
    325333
    326     return n==0 ? 0 : Profile(mean/n);
     334    return n==0 ? 0 : mean/n;
    327335}
    328336
     
    346354        if ((all || IsUsed(i)) && MatchSector(i, sector, aidx))
    347355        {
    348             sum += fArray[i+1];
    349             sq  += fArray[i+1]*fArray[i+1];
     356            if (TestBit(kProfile) && fBinEntries[i+1]==0)
     357                continue;
     358
     359            const Double_t val = TestBit(kProfile) ? fArray[i+1]/fBinEntries[i+1] : fArray[i+1];
     360
     361            sum += val;
     362            sq  += val*val;
    350363            n++;
    351364        }
     
    358371    sq  /= n;
    359372
    360     return Profile(TMath::Sqrt(sq-sum*sum));
     373    return TMath::Sqrt(sq-sum*sum);
    361374}
    362375
     
    377390    Double_t minimum=FLT_MAX;
    378391
    379     for (Int_t idx=0; idx<fNcells-2; idx++)
    380         if (MatchSector(idx, sector, aidx) && (all || IsUsed(idx)) && fArray[idx+1]<minimum)
    381             minimum = fArray[idx+1];
    382 
    383     return Profile(minimum);
     392    for (Int_t i=0; i<fNcells-2; i++)
     393    {
     394        if (TestBit(kProfile) && fBinEntries[i+1]==0)
     395            continue;
     396
     397        const Double_t val = TestBit(kProfile) ? fArray[i+1]/fBinEntries[i+1] : fArray[i+1];
     398        if (MatchSector(i, sector, aidx) && (all || IsUsed(i)) && val<minimum)
     399            minimum = val;
     400    }
     401
     402    return minimum;
    384403}
    385404
     
    399418
    400419    Double_t maximum=-FLT_MAX;
    401     for (Int_t idx=0; idx<fNcells-2; idx++)
    402         if (MatchSector(idx, sector, aidx) && (all || IsUsed(idx)) && fArray[idx+1]>maximum)
    403             maximum = fArray[idx+1];
    404 
    405     return Profile(maximum);
     420    for (Int_t i=0; i<fNcells-2; i++)
     421    {
     422        if (TestBit(kProfile) && fBinEntries[i+1]==0)
     423            continue;
     424
     425        const Double_t val = TestBit(kProfile) ? fArray[i+1]/fBinEntries[i+1] : fArray[i+1];
     426        if (MatchSector(i, sector, aidx) && (all || IsUsed(i)) && val>maximum)
     427            maximum = val;
     428    }
     429
     430    return maximum;
    406431}
    407432
     
    458483        // resized in paint to keep the correct aspect ratio
    459484        //
    460         pad->Divide(1, 1, 0, 0, col);
     485        // The margin != 0 is a workaround for a problem in root 4.02/00
     486        pad->Divide(1, 1, 1e-10, 1e-10, col);
    461487        pad->cd(1);
    462488        gPad->SetBorderMode(0);
     
    11251151        Double_t val=0;
    11261152        if (event.GetPixelContent(val, idx, *fGeomCam, type)/* && !IsUsed(idx)*/)
     1153        {
    11271154            SetUsed(idx);
    1128 
    1129         Fill(idx, val); // FIXME: Slow!
     1155            Fill(idx, val); // FIXME: Slow!
     1156        }
    11301157    }
    11311158    fEntries++;
     
    11531180}
    11541181
     1182Stat_t MHCamera::GetBinContent(Int_t bin) const
     1183{
     1184    if (fBuffer) ((TProfile*)this)->BufferEmpty();
     1185    if (bin < 0) bin = 0;
     1186    if (bin >= fNcells) bin = fNcells-1;
     1187    if (!fArray) return 0;
     1188
     1189    if (!TestBit(kProfile))
     1190        return Stat_t (fArray[bin]);
     1191
     1192    if (fBinEntries.fArray[bin] == 0) return 0;
     1193    return fArray[bin]/fBinEntries.fArray[bin];
     1194}
     1195
    11551196Stat_t MHCamera::GetBinError(Int_t bin) const
    11561197{
     1198    if (!TestBit(kProfile))
     1199        return TH1D::GetBinError(bin);
     1200
     1201    const UInt_t n = (UInt_t)fBinEntries[bin];
     1202
     1203    if (n==0)
     1204        return 0;
     1205
     1206    const Double_t sqr = fSumw2.fArray[bin] / n;
     1207    const Double_t val = fArray[bin]        / n;
     1208
     1209    return sqr>val*val ? TMath::Sqrt(sqr - val*val) / n : 0;
     1210
     1211    /*
    11571212    Double_t rc = 0;
    11581213    if (TestBit(kSqrtVariance) && GetEntries()>0) // error on the mean
     
    11651220        rc = TH1D::GetBinError(bin);
    11661221
    1167     return Profile(rc);
     1222    return Profile(rc);*/
    11681223}
    11691224
     
    12661321    {
    12671322        Double_t val=threshold;
    1268         if (event.GetPixelContent(val, idx, *fGeomCam, type)/* && !IsUsed(idx)*/)
     1323        const Bool_t rc = event.GetPixelContent(val, idx, *fGeomCam, type);
     1324        if (rc)
     1325            SetUsed(idx);
     1326
     1327        const Bool_t cond =
     1328            ( isabove && val>threshold) ||
     1329            (!isabove && val<threshold);
     1330
     1331        Fill(idx, rc && cond ? 1 : 0);
     1332    }
     1333    fEntries++;
     1334}
     1335
     1336// ------------------------------------------------------------------------
     1337//
     1338// Call this function to add a MCamEvent on top of the present contents.
     1339// - the contents of the pixels in event are added to each pixel
     1340//   if the pixel of thresevt<threshold (in case isabove is set
     1341//   to kTRUE == default)
     1342// - the contents of the pixels in event are  added to each pixel
     1343//   if the pixel of thresevt<threshold (in case isabove is set
     1344//   to kFALSE)
     1345//
     1346// in unused pixel is not counted if it didn't fullfill the condition.
     1347//
     1348void MHCamera::CntCamContent(const MCamEvent &event, Int_t type1, const MCamEvent &thresevt, Int_t type2, Double_t threshold, Bool_t isabove)
     1349{
     1350    if (fNcells<=1 || IsFreezed())
     1351        return;
     1352
     1353    // FIXME: Security check missing!
     1354    for (Int_t idx=0; idx<fNcells-2; idx++)
     1355    {
     1356        Double_t th=0;
     1357        if (!thresevt.GetPixelContent(th, idx, *fGeomCam, type2))
     1358            continue;
     1359
     1360        if ((isabove && th>threshold) || (!isabove && th<threshold))
     1361            continue;
     1362
     1363        Double_t val=th;
     1364        if (event.GetPixelContent(val, idx, *fGeomCam, type1))
    12691365        {
    12701366            SetUsed(idx);
    1271 
    1272             if (isabove && val>threshold)
    1273                 Fill(idx);
    1274             if (!isabove && val<threshold)
    1275                 Fill(idx);
     1367            Fill(idx, val);
    12761368        }
    12771369    }
     
    16721764        return;
    16731765
    1674     gLog << all << GetTitle() << " <" << GetName() << ">" << endl;
     1766    gLog << all << GetTitle() << " <" << GetName() << ">" << dec << endl;
    16751767    gLog << "Software Pixel Idx: " << idx << endl;
    16761768    gLog << "Hardware Pixel Id:  " << idx+1 << endl;
     
    16781770    if (GetBinError(idx+1)>0)
    16791771        gLog << " +/- " << GetBinError(idx+1);
    1680     gLog << "  <" << (IsUsed(idx)?"on":"off") << ">" << endl;
     1772    gLog << "  <" << (IsUsed(idx)?"on":"off") << ">  n=" << fBinEntries[idx+1] << endl;
    16811773
    16821774    if (fNotify && fNotify->GetSize()>0)
  • trunk/MagicSoft/Mars/mhist/MHCamera.h

    r6276 r6855  
    1010#ifndef ROOT_TArrayI
    1111#include <TArrayI.h>
    12 #endif
    13 #ifndef ROOT_TArrayD
    14 #include <TArrayD.h>
    1512#endif
    1613#ifndef ROOT_MArrayD
     
    4037public:
    4138    enum {
    42         kProfile      = BIT(18), // FIXME: When changing change max/min!
    43         kFreezed      = BIT(19),
    44         kNoLegend     = BIT(20),
    45         kSqrtVariance = BIT(21)
     39        kProfile            = BIT(18), // FIXME: When changing change max/min!
     40        kFreezed            = BIT(19),
     41        kNoLegend           = BIT(20)/*,
     42        kSqrtVariance       = BIT(21),
     43        kSinglePixelProfile = BIT(22)*/
    4644    };
    4745private:
    4846    MGeomCam      *fGeomCam;     // pointer to camera geometry (y-axis)
    4947    TArrayC        fUsed;        // array containing flags
     48    TArrayI        fBinEntries;  // number of entries per bin
    5049
    5150    TArrayI        fColors;      //! Color conversion table
     
    5958
    6059    void Init();
    61 
     60/*
    6261    Stat_t Profile(Stat_t val) const
    6362    {
     
    6867        return n>0 ? val/n : val;
    6968    }
    70 
     69  */
    7170    Int_t GetColor(Float_t val, Float_t min, Float_t max, Bool_t islog);
    7271
     
    162161    virtual void     CntCamContent(const MCamEvent &evt, TArrayD threshold, Int_t type=0, Bool_t isabove=kTRUE);
    163162    virtual void     CntCamContent(const TArrayD &evt, Double_t threshold, Bool_t ispos=kTRUE);
    164 
    165     Stat_t   GetBinContent(Int_t bin) const { return Profile(TH1D::GetBinContent(bin)); }
     163    virtual void     CntCamContent(const MCamEvent &event, Int_t type1, const MCamEvent &thresevt, Int_t type2, Double_t threshold, Bool_t isabove);
     164
     165    Stat_t   GetBinContent(Int_t bin) const;
    166166    Stat_t   GetBinContent(Int_t binx, Int_t biny) const { return GetBinContent(binx); }
    167167    Stat_t   GetBinContent(Int_t binx, Int_t biny, Int_t binz) const { return GetBinContent(binx); }
  • trunk/MagicSoft/Mars/mhist/MHEvent.cc

    r6569 r6855  
    5959#include "MTaskList.h"
    6060#include "MParList.h"
    61 #include "MCerPhotEvt.h"
     61#include "MSignalCam.h"
    6262#include "MRawEvtHeader.h"
    6363#include "MRawRunHeader.h"
     
    239239        break;
    240240    case kEvtArrTime:
    241         fHist->SetCamContent(*event, 0);
     241        fHist->SetCamContent(*event, 6);
    242242        break;
    243243    case kEvtTrigPix:
  • trunk/MagicSoft/Mars/mhist/MHEvent.h

    r5807 r6855  
    1313class MMcEvt;
    1414class MMcTrig;
    15 class MCerPhotEvt;
     15class MSignalCam;
    1616class MImgCleanStd;
    1717
     
    3434    MMcEvt        *fMcEvt;         //!
    3535    MMcTrig       *fMcTrig;        //!
    36     MCerPhotEvt   *fCerPhotEvt;    //!
     36    MSignalCam    *fCerPhotEvt;    //!
    3737    MImgCleanStd  *fImgCleanStd;   //!
    3838
  • trunk/MagicSoft/Mars/mhist/Makefile

    r5676 r6855  
    4040           MHThetabarTheta.cc \
    4141           MHGamma.cc \
    42            MHSigmaTheta.cc \
    4342           MHSigmaPixel.cc \
    4443           MHSigmabarTheta.cc \
Note: See TracChangeset for help on using the changeset viewer.