Ignore:
Timestamp:
10/24/01 11:51:15 (23 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/mgui/MCamDisplay.cc

    r976 r979  
    1515#include "MCerPhotEvt.h"
    1616
    17 #define kItemsLegend 25
     17#define kItemsLegend 25 // see SetPalette(1,0)
    1818
    1919ClassImp(MCamDisplay);
     
    2323//  default constructor
    2424//
    25 MCamDisplay::MCamDisplay(MGeomCam *geom) : fAutoScale(kTRUE)
    26 {
    27     //
    28     //    set the color palette
    29     //
    30     gStyle->SetPalette(1, 0);
    31 
     25MCamDisplay::MCamDisplay(MGeomCam *geom)
     26    : fAutoScale(kTRUE), fW(0), fH(0), fMinPhe(-2), fMaxPhe(50), fDrawingPad(NULL)
     27{
    3228    //
    3329    //  create the hexagons of the display
    3430    //
    3531    fNumPixels = geom->GetNumPixels();
    36     fRange     = (Int_t)geom->GetMaxRadius();
    37 
    38     fPixels    = new TClonesArray("MHexagon", fNumPixels);
     32    fRange     = geom->GetMaxRadius();
    3933
    4034    //
    4135    // Construct all hexagons. Use new-operator with placement
    4236    //
     37    fPixels = new TClonesArray("MHexagon", fNumPixels);
    4338    for (UInt_t i=0; i<fNumPixels; i++)
    4439        new ((*fPixels)[i]) MHexagon((*geom)[i]);
    4540
    4641    //
    47     // set the range to default
    48     //
    49     fMinPhe = -2.;
    50     fMaxPhe = 50.;
     42    // set the color palette for the TBox elements
     43    //
     44    gStyle->SetPalette(1, 0);
    5145
    5246    //
     
    5852    for (Int_t i = 0; i<kItemsLegend; i++)
    5953    {
    60         //const Int_t y = il*40;
    61 
    62         //
    63         // Construct gui elements of legend. Use new-operator with placement
    64         //
    65         //TBox  *newbox = new ((*fLegend)[il])  TBox (650, y-500, 700, y-460);
    66         //TText *newtxt = new ((*fLegText)[il]) TText(720, y-480, text);
    67 
    6854        TBox  *newbox = new ((*fLegend)[i])  TBox;
    6955        TText *newtxt = new ((*fLegText)[i]) TText;
     
    8066// ------------------------------------------------------------------------
    8167//
     68// Destructor. Deletes TClonesArrays for hexagons and legend elements.
    8269//
    8370MCamDisplay::~MCamDisplay()
     
    9582// ------------------------------------------------------------------------
    9683//
     84// This is called at any time the canvas should get repainted.
     85// Here we maintain an aspect ratio of 5/4=1.15. This makes sure,
     86// that the camera image doesn't get distorted by resizing the canvas.
     87//
     88void MCamDisplay::Paint(Option_t *opt)
     89{
     90    const UInt_t w = gPad->GetWw();
     91    const UInt_t h = gPad->GetWh();
     92
     93    //
     94    // Check for a change in width or height, and make sure, that the
     95    // first call also sets the range
     96    //
     97    if (w*fH == h*fW && fW && fH)
     98        return;
     99
     100    //
     101    // Calculate aspect ratio (5/4=1.25 recommended)
     102    //
     103    const Double_t ratio = (Double_t)w/h;
     104
     105    Float_t x;
     106    Float_t y;
     107
     108    if (ratio>1.25)
     109    {
     110        x = (ratio*2-1)*fRange;
     111        y = fRange;
     112    }
     113    else
     114    {
     115        x = fRange*1.5;
     116        y = fRange*1.25/ratio;
     117    }
     118
     119    fH = h;
     120    fW = w;
     121
     122    //
     123    // Set new range
     124    //
     125    gPad->Range(-fRange, -y, x, y);
     126}
     127
     128// ------------------------------------------------------------------------
     129//
     130// Call this function to draw the camera layout into your canvas.
     131// Setup a drawing canvas. Add this object and all child objects
     132// (hexagons, etc) to the current pad. If no pad exists a new one is
     133// created.
    97134//
    98135void MCamDisplay::Draw(Option_t *option)
     
    110147
    111148    //
    112     // FIXME: This class should be a TPad, so that it is informed if the
    113     // ratio between height and size changes!
    114     //
    115     const Float_t ratio = (Float_t)gPad->GetWw()/gPad->GetWh();
    116 
    117     //
    118     // The recommended size ratio is 5:4
    119     //
    120     Int_t x, y;
    121 
    122     if (ratio > 5./4.)
    123     {
    124         x = (UInt_t)((ratio-1)*3*fRange);
    125         y = fRange;
    126     }
    127     else
    128     {
    129         x = 3*fRange/2;
    130         y = (UInt_t)(fRange/ratio);
    131     }
     149    // Append this object, so that the aspect ratio is maintained
     150    // (Paint-function is called)
     151    //
     152    AppendPad(option);
    132153
    133154    //
     
    136157    gStyle->SetPalette(1, 0);
    137158
    138     gPad->Range(-fRange, -y, x, y);
    139159    gPad->SetFillColor(22);
    140160
     
    172192// ------------------------------------------------------------------------
    173193//
     194// Call this function to draw the number of photo electron into the
     195// camera.
    174196//
    175197void MCamDisplay::DrawPhotNum(const MCerPhotEvt *event)
    176198{
     199    if (!fDrawingPad)
     200        Draw();
     201
    177202    fDrawingPad->cd();
    178203
    179204    //
    180     // loop over all pixels in the MCerPhotEvt and
    181     // determine the Pixel Id and the content
     205    // Reset pixel colors to default value
    182206    //
    183207    Reset();
     
    219243    gPad->Update();
    220244}
    221 
    222 // ------------------------------------------------------------------------
    223 //
    224 //
    225 void MCamDisplay::DrawPhotErr(const MCerPhotEvt *event)
    226 {
    227     fDrawingPad->cd();
    228 
    229     //
    230     // reset the all pixel colors to a default value
    231     //
    232     Reset();
    233 
    234     //
    235     // loop over all pixels in the MCerPhotEvt and
    236     // determine the Pixel Id and the content
    237     //
    238     const Int_t entries = event->GetNumPixels();
    239 
    240     for (Int_t i=0 ; i<entries; i++)
    241     {
    242         const MCerPhotPix &pix = (*event)[i];
    243 
    244         SetPixColor(pix);
    245     }
    246 
    247     //
    248     // Update display physically
    249     //
    250     gPad->Modified();
    251     gPad->Update();
    252 }
    253 
    254245
    255246// ------------------------------------------------------------------------
     
    305296    char text[10];
    306297
    307     for (Int_t il=0; il < kItemsLegend; il++)
    308     {
    309         const Float_t val = fMinPhe + (Float_t)il/kItemsLegend * (fMaxPhe-fMinPhe) ;
     298    for (Int_t i=0; i<kItemsLegend; i++)
     299    {
     300        const Float_t val = fMinPhe + (Float_t)i/kItemsLegend * (fMaxPhe-fMinPhe) ;
    310301
    311302        sprintf(text, "%5.1f", val);
    312303
    313         TText &txt = *GetText(il);
     304        TText &txt = *GetText(i);
    314305
    315306        txt.SetText(txt.GetX(), txt.GetY(), text);
Note: See TracChangeset for help on using the changeset viewer.