| 1 | /* ======================================================================== *\
 | 
|---|
| 2 | !
 | 
|---|
| 3 | ! *
 | 
|---|
| 4 | ! * This file is part of MARS, the MAGIC Analysis and Reconstruction
 | 
|---|
| 5 | ! * Software. It is distributed to you in the hope that it can be a useful
 | 
|---|
| 6 | ! * and timesaving tool in analysing Data of imaging Cerenkov telescopes.
 | 
|---|
| 7 | ! * It is distributed WITHOUT ANY WARRANTY.
 | 
|---|
| 8 | ! *
 | 
|---|
| 9 | ! * Permission to use, copy, modify and distribute this software and its
 | 
|---|
| 10 | ! * documentation for any purpose is hereby granted without fee,
 | 
|---|
| 11 | ! * provided that the above copyright notice appear in all copies and
 | 
|---|
| 12 | ! * that both that copyright notice and this permission notice appear
 | 
|---|
| 13 | ! * in supporting documentation. It is provided "as is" without express
 | 
|---|
| 14 | ! * or implied warranty.
 | 
|---|
| 15 | ! *
 | 
|---|
| 16 | !
 | 
|---|
| 17 | !
 | 
|---|
| 18 | !   Author(s): Thomas Bretz, 11/2003 <mailto:tbretz@astro.uni-wuerzburg.de>
 | 
|---|
| 19 | !
 | 
|---|
| 20 | !   Copyright: MAGIC Software Development, 2000-2003
 | 
|---|
| 21 | !
 | 
|---|
| 22 | !
 | 
|---|
| 23 | \* ======================================================================== */
 | 
|---|
| 24 | #include "MOnlineDisplay.h"
 | 
|---|
| 25 | 
 | 
|---|
| 26 | //
 | 
|---|
| 27 | // C-lib
 | 
|---|
| 28 | //
 | 
|---|
| 29 | #include <stdlib.h>              // atoi
 | 
|---|
| 30 | 
 | 
|---|
| 31 | //
 | 
|---|
| 32 | // root
 | 
|---|
| 33 | //
 | 
|---|
| 34 | #include <TList.h>               // TList::Add
 | 
|---|
| 35 | #include <TStyle.h>              // gStyle->SetOptStat
 | 
|---|
| 36 | #include <TCanvas.h>             // TCanvas::cd
 | 
|---|
| 37 | 
 | 
|---|
| 38 | //
 | 
|---|
| 39 | // root GUI
 | 
|---|
| 40 | //
 | 
|---|
| 41 | #include <TGLabel.h>             // TGLabel
 | 
|---|
| 42 | #include <TGButton.h>            // TGPictureButton
 | 
|---|
| 43 | #include <TGSlider.h>            // TGSlider
 | 
|---|
| 44 | #include <TG3DLine.h>            // TGHorizontal3DLine
 | 
|---|
| 45 | #include <TGTextEntry.h>         // TGTextEntry
 | 
|---|
| 46 | #include <TGButtonGroup.h>       // TGVButtonGroup
 | 
|---|
| 47 | #include <TRootEmbeddedCanvas.h> // TRootEmbeddedCanvas
 | 
|---|
| 48 | 
 | 
|---|
| 49 | //
 | 
|---|
| 50 | // General
 | 
|---|
| 51 | //
 | 
|---|
| 52 | #include "MGList.h"              // MGList
 | 
|---|
| 53 | 
 | 
|---|
| 54 | #include "MParList.h"            // MParList::AddToList
 | 
|---|
| 55 | #include "MEvtLoop.h"            // MEvtLoop::GetParList
 | 
|---|
| 56 | #include "MTaskList.h"           // MTaskList::AddToList
 | 
|---|
| 57 | 
 | 
|---|
| 58 | //
 | 
|---|
| 59 | // Tasks
 | 
|---|
| 60 | //
 | 
|---|
| 61 | #include "MReadMarsFile.h"       // MReadMarsFile
 | 
|---|
| 62 | #include "MGeomApply.h"          // MGeomApply
 | 
|---|
| 63 | #include "MFDataMember.h"        // MFDataMember
 | 
|---|
| 64 | #include "MMcPedestalCopy.h"     // MMcPedestalCopy
 | 
|---|
| 65 | #include "MMcPedestalNSBAdd.h"   // MMcPedestalNSBAdd
 | 
|---|
| 66 | #include "MCerPhotCalc.h"        // MCerPhotCalc
 | 
|---|
| 67 | #include "MCerPhotAnal2.h"       // MCerPhotAnal2
 | 
|---|
| 68 | #include "MImgCleanStd.h"        // MImgCleanStd
 | 
|---|
| 69 | #include "MHillasCalc.h"         // MHillasCalc
 | 
|---|
| 70 | #include "MHillasSrcCalc.h"      // MHillasSrcCalc
 | 
|---|
| 71 | #include "MFillH.h"              // MFillH
 | 
|---|
| 72 | #include "MGTask.h"              // MGTask
 | 
|---|
| 73 | 
 | 
|---|
| 74 | //
 | 
|---|
| 75 | // Container
 | 
|---|
| 76 | //
 | 
|---|
| 77 | #include "MHEvent.h"             // MHEvent
 | 
|---|
| 78 | #include "MHCamera.h"            // MHCamera
 | 
|---|
| 79 | #include "MRawEvtData.h"         // MRawEvtData
 | 
|---|
| 80 | 
 | 
|---|
| 81 | ClassImp(MOnlineDisplay);
 | 
|---|
| 82 | 
 | 
|---|
| 83 | // --------------------------------------------------------------------------
 | 
|---|
| 84 | //
 | 
|---|
| 85 | //  Constructor.
 | 
|---|
| 86 | //
 | 
|---|
| 87 | MOnlineDisplay::MOnlineDisplay() : MStatusDisplay(), fTask(0)
 | 
|---|
| 88 | {
 | 
|---|
| 89 |     //
 | 
|---|
| 90 |     // Add MOnlineDisplay GUI elements to the display
 | 
|---|
| 91 |     //
 | 
|---|
| 92 |     AddUserFrame();
 | 
|---|
| 93 | 
 | 
|---|
| 94 |     //
 | 
|---|
| 95 |     // Show new part of the window, resize to correct aspect ratio
 | 
|---|
| 96 |     //
 | 
|---|
| 97 |     // FIXME: This should be done by MStatusDisplay automatically
 | 
|---|
| 98 |     Resize(GetWidth(), GetHeight() + fUserFrame->GetDefaultHeight());
 | 
|---|
| 99 |     SetWindowName("Online Display");
 | 
|---|
| 100 |     MapSubwindows();
 | 
|---|
| 101 | }
 | 
|---|
| 102 | 
 | 
|---|
| 103 | // --------------------------------------------------------------------------
 | 
|---|
| 104 | //
 | 
|---|
| 105 | //  Add the top part of the frame: This is filename and treename display
 | 
|---|
| 106 | //
 | 
|---|
| 107 | void MOnlineDisplay::AddTopFramePart1(TGCompositeFrame *vf1)
 | 
|---|
| 108 | {
 | 
|---|
| 109 |     TGLabel *file = new TGLabel(vf1, new TGString("Magic Online Analysis -- MONA"));
 | 
|---|
| 110 |     TGLayoutHints *laystd = new TGLayoutHints(kLHintsCenterX, 5, 5);
 | 
|---|
| 111 |     fList->Add(file);
 | 
|---|
| 112 |     fList->Add(laystd);
 | 
|---|
| 113 |     vf1->AddFrame(file,  laystd);
 | 
|---|
| 114 | }
 | 
|---|
| 115 | 
 | 
|---|
| 116 | // --------------------------------------------------------------------------
 | 
|---|
| 117 | //
 | 
|---|
| 118 | //  Add the second part of the top frame: This are the event number controls
 | 
|---|
| 119 | //
 | 
|---|
| 120 | void MOnlineDisplay::AddTopFramePart2(TGCompositeFrame *vf1)
 | 
|---|
| 121 | {
 | 
|---|
| 122 |     //
 | 
|---|
| 123 |     // --- the top2 part of the window ---
 | 
|---|
| 124 |     //
 | 
|---|
| 125 |     TGHorizontalFrame *top2 = new TGHorizontalFrame(vf1, 1, 1);
 | 
|---|
| 126 |     fList->Add(top2);
 | 
|---|
| 127 | 
 | 
|---|
| 128 |     //
 | 
|---|
| 129 |     // Create the gui elements
 | 
|---|
| 130 |     //
 | 
|---|
| 131 |     TGTextButton *freeze = new TGTextButton(top2, " Freeze ", kFreeze);
 | 
|---|
| 132 |     freeze->SetUserData(freeze);
 | 
|---|
| 133 |     freeze->Associate(this);
 | 
|---|
| 134 |     freeze->SetToolTipText("Freeze the current Event");
 | 
|---|
| 135 | 
 | 
|---|
| 136 |     fList->Add(freeze);
 | 
|---|
| 137 | 
 | 
|---|
| 138 |     //
 | 
|---|
| 139 |     // add the gui elements to the frame
 | 
|---|
| 140 |     //
 | 
|---|
| 141 |     TGLayoutHints *laystd = new TGLayoutHints(kLHintsLeft|kLHintsCenterY, 5, 5);
 | 
|---|
| 142 |     fList->Add(laystd);
 | 
|---|
| 143 | 
 | 
|---|
| 144 |     top2->AddFrame(freeze, laystd);
 | 
|---|
| 145 | 
 | 
|---|
| 146 |     TGLayoutHints *laystd2 = new TGLayoutHints(kLHintsCenterX, 5, 5, 5, 5);
 | 
|---|
| 147 |     fList->Add(laystd2);
 | 
|---|
| 148 |     vf1->AddFrame(top2, laystd2);
 | 
|---|
| 149 | 
 | 
|---|
| 150 |     //
 | 
|---|
| 151 |     // Add trailing line...
 | 
|---|
| 152 |     //
 | 
|---|
| 153 |     TGHorizontal3DLine *line = new TGHorizontal3DLine(vf1);
 | 
|---|
| 154 |     TGLayoutHints *layline = new TGLayoutHints(kLHintsExpandX);
 | 
|---|
| 155 |     fList->Add(line);
 | 
|---|
| 156 |     fList->Add(layline);
 | 
|---|
| 157 |     vf1->AddFrame(line, layline);
 | 
|---|
| 158 | }
 | 
|---|
| 159 | 
 | 
|---|
| 160 | // --------------------------------------------------------------------------
 | 
|---|
| 161 | //
 | 
|---|
| 162 | //  Add the user frame part of the display
 | 
|---|
| 163 | //
 | 
|---|
| 164 | void MOnlineDisplay::AddUserFrame()
 | 
|---|
| 165 | {
 | 
|---|
| 166 |     fUserFrame->ChangeOptions(kHorizontalFrame);
 | 
|---|
| 167 | 
 | 
|---|
| 168 |     // Slider
 | 
|---|
| 169 |     TGVSlider *slider = new TGVSlider(fUserFrame, 1, kSlider1, kSlider);
 | 
|---|
| 170 |     slider->SetRange(10, 300);
 | 
|---|
| 171 |     slider->SetScale(15);
 | 
|---|
| 172 |     slider->SetPosition(10);
 | 
|---|
| 173 |     slider->Associate(this);
 | 
|---|
| 174 |     //slider->SetToolTipText("Change the update frequency of the event display (1-30s)");
 | 
|---|
| 175 | 
 | 
|---|
| 176 |     // frame1/2
 | 
|---|
| 177 |     TGCompositeFrame *vf1 = new TGVerticalFrame(fUserFrame, 1, 1);
 | 
|---|
| 178 |     TGCompositeFrame *vf2 = new TGVerticalFrame(fUserFrame, 1, 1);
 | 
|---|
| 179 | 
 | 
|---|
| 180 |     AddTopFramePart1(vf1);
 | 
|---|
| 181 |     AddTopFramePart2(vf1);
 | 
|---|
| 182 | 
 | 
|---|
| 183 |     // create root embedded canvas and add it to the tab
 | 
|---|
| 184 |     TRootEmbeddedCanvas *ec = new TRootEmbeddedCanvas("Slices", vf2, vf1->GetDefaultHeight()*3/2, vf1->GetDefaultHeight(), 0);
 | 
|---|
| 185 |     vf2->AddFrame(ec);
 | 
|---|
| 186 |     fList->Add(ec);
 | 
|---|
| 187 | 
 | 
|---|
| 188 |     // set background and border mode of the canvas
 | 
|---|
| 189 |     fCanvas = ec->GetCanvas();
 | 
|---|
| 190 |     fCanvas->SetBorderMode(0);
 | 
|---|
| 191 |     gROOT->GetListOfCanvases()->Add(fCanvas);
 | 
|---|
| 192 |     //fCanvas->SetBorderSize(1);
 | 
|---|
| 193 |     //fCanvas->SetBit(kNoContextMenu);
 | 
|---|
| 194 |     //fCanvas->SetFillColor(16);
 | 
|---|
| 195 | 
 | 
|---|
| 196 |     // layout
 | 
|---|
| 197 |     TGLayoutHints *lays = new TGLayoutHints(kLHintsExpandY);
 | 
|---|
| 198 |     TGLayoutHints *lay = new TGLayoutHints(kLHintsExpandX);
 | 
|---|
| 199 |     fUserFrame->AddFrame(slider, lays);
 | 
|---|
| 200 |     fUserFrame->AddFrame(vf1, lay);
 | 
|---|
| 201 |     fUserFrame->AddFrame(vf2);
 | 
|---|
| 202 | 
 | 
|---|
| 203 |     fList->Add(lay);
 | 
|---|
| 204 |     fList->Add(lays);
 | 
|---|
| 205 |     fList->Add(vf1);
 | 
|---|
| 206 |     fList->Add(vf2);
 | 
|---|
| 207 |     fList->Add(slider);
 | 
|---|
| 208 | }
 | 
|---|
| 209 | 
 | 
|---|
| 210 | // --------------------------------------------------------------------------
 | 
|---|
| 211 | //
 | 
|---|
| 212 | //  ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
 | 
|---|
| 213 | //
 | 
|---|
| 214 | // Processes information from all GUI items.
 | 
|---|
| 215 | // Selecting an item usually generates an event with 4 parameters.
 | 
|---|
| 216 | // The first two are packed into msg (first and second bytes).
 | 
|---|
| 217 | // The other two are parm1 and parm2.
 | 
|---|
| 218 | //
 | 
|---|
| 219 | Bool_t MOnlineDisplay::ProcessMessage(Long_t msg, Long_t mp1, Long_t mp2)
 | 
|---|
| 220 | {
 | 
|---|
| 221 |     if (fTask && fTask->ProcessMessage(GET_MSG(msg), GET_SUBMSG(msg), mp1, mp2))
 | 
|---|
| 222 |         return kTRUE;
 | 
|---|
| 223 | 
 | 
|---|
| 224 |     return MStatusDisplay::ProcessMessage(msg, mp1, mp2);
 | 
|---|
| 225 | }
 | 
|---|