ROOT logo
/*!\class SPMRoot
\author Alexandre A. P. Suaide 

<p>
This class is the basic CAMAC data acquisition system interface in the ROOT
framework. 
*/
#ifndef SPMRoot_HH
#define SPMRoot_HH

#include "CamacIO.h"
#include "UsbIO.h"
#include "PelTools.h"
#include "ScanRoot.h"
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <TGClient.h>
#include <TGButton.h>
#include <TGMenu.h>
#include "TApplication.h"
#include "TTimer.h"
#include "TString.h"
#include "TGButton.h"
#include "TGLabel.h"
#include "TGTextEntry.h"
#include "TGFileDialog.h"
#include "TROOT.h"
#include "TSystem.h"
#include "TInterpreter.h"
#include "TDatime.h"
#include "TH2.h"
#include "TNamed.h"
#include "TGTextView.h"
#include "TBrowser.h"
#include "TCanvas.h"
#include "TGMsgBox.h"
#include "TFile.h"
#include "TStopwatch.h"
#include "TStyle.h"
#include "TSystemDirectory.h"
#include "TDialog.h"
#include "log.hh"
#include "version.h"

#define NLABELS 13
#define NMENUS 11
#define NBUTTONS 4
#define NFLAGS 9
#define NSTRINGS 7
#define NREGISTERS 12
#define MAXHIST 1000
#define MAXSCALERS 6

#define RUNNINGCOLOR 0x00FF00
#define STOPPEDCOLOR 0xFF0000
#define PAUSEDCOLOR  0x0000FF
#define ID1D 10000
#define ID2D 20000
#define MAXPARAM 8192

using namespace std;

class SPMRoot : public TGMainFrame 
{
  public:
                        SPMRoot(const TGWindow*,int,int,bool = false,char* = "/dev/c111a0");
    virtual             ~SPMRoot();
          bool          ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
    virtual Bool_t      HandleConfigureNotify(Event_t*);
          void          CloseWindow();
  
  private:
         
         void           setCamac(char* a) { mString[kCAMAC] = a;}
         void           loadConfig();
         void           saveConfig();
         void           updateGUI();
         void           updateSTATS();
         bool           HandleTimer(TTimer*);
         bool           startRun();
         bool           stopRun(int = 0);
         bool           pauseRun();
         bool           loadEVO();
         bool           loadHist();
         bool           saveHist(char* = NULL);
         bool           setAutoSaveHist();
         bool           setFilMode(int);
         bool           l2Load();
         bool           l2Unload();
         bool           zeroAll();
         bool           zero(int);
         bool           about();
         bool           eventLoop(int = 0);
         bool           readScalers();
         bool           zeroScalers();
         bool           setNScalers();
         bool           configScalers();
         bool           setScalersCrate();
         bool           setCamacBuffer();
         bool           setMaxNpar();
          
         PelTools*      mTools;         
         PelIO*         mIO;
         ScanRoot*      mSCAN;
         TTimer*        mAquisTimer;
         TTimer*        mUpdateTimer;         
         TDatime*       mTimeStart;
         TDatime*       mTimeStop;
         TStopwatch*    timing;
				 
				 bool           mDebug;
                  
         TString        mString[NSTRINGS];         
         bool           mFlag[NFLAGS];
         int            mRegister[NREGISTERS];
         int            mScalerId[MAXSCALERS];
                  
         short          npar;
         float          par[MAXPARAM];  
                                 
         float          mDeadTime;         
         float          mRunTime;           
         double         mNBytesSaved;
         double         mSplitSize;

         
         //////////////////////////////////////////////////
         // GUI components
         //
         TGMenuBar*       mMenu;         
         TGPopupMenu*     mPop[NMENUS];
         TGTextButton*    mButton[NBUTTONS];

         TGGroupFrame*    mStatFrame;
         TGLabel*         mLabels[NLABELS];
         TGTextEntry*     mText[NLABELS];
         TGTextView*      mTextView;
         //
         //////////////////////////////////////////////////         
         
         
         //////////////////////////////////////////////////         
         // ENUMERATORS USED IN THE PROGRAM
         //
         // mPop[] 
         enum {kFILE,kAQUIS,kTOOLS,kDISPLAY,kHELP,kFIL,
               kSPLIT,kLEVEL2,kZERO,kZERO1,kZERO2}; 
         // mButton[] 
         enum {kSTARTB,kSTOPB,kPAUSEB,kSTATUSB};        
         // mFlag[] 
         enum {kEVOLOAD,kHISTLOAD,kL2LOAD,kFILENABLE,kTAPEENABLE,
               kHISTAUTOSAVE,kRUNNING,kPAUSED,kSPLITMODE}; 
         // mString[] 
         enum {kHISTLIB,kEVOFILE,kHISTFILE,kL2FILE,kFILFILE,
               kFILFILE2,kCAMAC}; 
         // mRegister[] 
         enum {kMAXNPARR,kRUNR,kNEVENTSR,kNSAVEDR,kSPLITR,kNLOSTR,
               kNEVENTSLASTR,kNLASTR,kNSCALERSR,kSCALERCRATER,
               kBUFFERSIZER,kEVENTLOOPR}; 
         // GUI commands
         enum {kCmdStart,kCmdStop,kCmdPause,kCmdLoadEvo,kCmdLoadHist,
               kCmdSaveHist,kCmdAutoSave,kCmdFilMode1,kCmdFilMode2,
               kCmdFilMode3,kCmdExit,kCmdL2Load,kCmdL2Unload,
               kCmdSplitNone,kCmdSplit1,kCmdSplit2,kCmdSplit3,
               kCmdZeroAll,kCmdReadScalers,kCmdZeroScalers,
               kCmdSetNScalers,kCmdConfigScalers,kCmdCamacBuffer,
               kCmdNPar,kCmdScalerCrate,kCmdCanvas,kCmdBrowser,
               kCmdTools,kCmdHelp,kCmdAbout,kCmdSaveConfig}; 
         //
         //////////////////////////////////////////////////         
  ClassDef(SPMRoot,1)
};
#endif
 SPMRoot.h:1
 SPMRoot.h:2
 SPMRoot.h:3
 SPMRoot.h:4
 SPMRoot.h:5
 SPMRoot.h:6
 SPMRoot.h:7
 SPMRoot.h:8
 SPMRoot.h:9
 SPMRoot.h:10
 SPMRoot.h:11
 SPMRoot.h:12
 SPMRoot.h:13
 SPMRoot.h:14
 SPMRoot.h:15
 SPMRoot.h:16
 SPMRoot.h:17
 SPMRoot.h:18
 SPMRoot.h:19
 SPMRoot.h:20
 SPMRoot.h:21
 SPMRoot.h:22
 SPMRoot.h:23
 SPMRoot.h:24
 SPMRoot.h:25
 SPMRoot.h:26
 SPMRoot.h:27
 SPMRoot.h:28
 SPMRoot.h:29
 SPMRoot.h:30
 SPMRoot.h:31
 SPMRoot.h:32
 SPMRoot.h:33
 SPMRoot.h:34
 SPMRoot.h:35
 SPMRoot.h:36
 SPMRoot.h:37
 SPMRoot.h:38
 SPMRoot.h:39
 SPMRoot.h:40
 SPMRoot.h:41
 SPMRoot.h:42
 SPMRoot.h:43
 SPMRoot.h:44
 SPMRoot.h:45
 SPMRoot.h:46
 SPMRoot.h:47
 SPMRoot.h:48
 SPMRoot.h:49
 SPMRoot.h:50
 SPMRoot.h:51
 SPMRoot.h:52
 SPMRoot.h:53
 SPMRoot.h:54
 SPMRoot.h:55
 SPMRoot.h:56
 SPMRoot.h:57
 SPMRoot.h:58
 SPMRoot.h:59
 SPMRoot.h:60
 SPMRoot.h:61
 SPMRoot.h:62
 SPMRoot.h:63
 SPMRoot.h:64
 SPMRoot.h:65
 SPMRoot.h:66
 SPMRoot.h:67
 SPMRoot.h:68
 SPMRoot.h:69
 SPMRoot.h:70
 SPMRoot.h:71
 SPMRoot.h:72
 SPMRoot.h:73
 SPMRoot.h:74
 SPMRoot.h:75
 SPMRoot.h:76
 SPMRoot.h:77
 SPMRoot.h:78
 SPMRoot.h:79
 SPMRoot.h:80
 SPMRoot.h:81
 SPMRoot.h:82
 SPMRoot.h:83
 SPMRoot.h:84
 SPMRoot.h:85
 SPMRoot.h:86
 SPMRoot.h:87
 SPMRoot.h:88
 SPMRoot.h:89
 SPMRoot.h:90
 SPMRoot.h:91
 SPMRoot.h:92
 SPMRoot.h:93
 SPMRoot.h:94
 SPMRoot.h:95
 SPMRoot.h:96
 SPMRoot.h:97
 SPMRoot.h:98
 SPMRoot.h:99
 SPMRoot.h:100
 SPMRoot.h:101
 SPMRoot.h:102
 SPMRoot.h:103
 SPMRoot.h:104
 SPMRoot.h:105
 SPMRoot.h:106
 SPMRoot.h:107
 SPMRoot.h:108
 SPMRoot.h:109
 SPMRoot.h:110
 SPMRoot.h:111
 SPMRoot.h:112
 SPMRoot.h:113
 SPMRoot.h:114
 SPMRoot.h:115
 SPMRoot.h:116
 SPMRoot.h:117
 SPMRoot.h:118
 SPMRoot.h:119
 SPMRoot.h:120
 SPMRoot.h:121
 SPMRoot.h:122
 SPMRoot.h:123
 SPMRoot.h:124
 SPMRoot.h:125
 SPMRoot.h:126
 SPMRoot.h:127
 SPMRoot.h:128
 SPMRoot.h:129
 SPMRoot.h:130
 SPMRoot.h:131
 SPMRoot.h:132
 SPMRoot.h:133
 SPMRoot.h:134
 SPMRoot.h:135
 SPMRoot.h:136
 SPMRoot.h:137
 SPMRoot.h:138
 SPMRoot.h:139
 SPMRoot.h:140
 SPMRoot.h:141
 SPMRoot.h:142
 SPMRoot.h:143
 SPMRoot.h:144
 SPMRoot.h:145
 SPMRoot.h:146
 SPMRoot.h:147
 SPMRoot.h:148
 SPMRoot.h:149
 SPMRoot.h:150
 SPMRoot.h:151
 SPMRoot.h:152
 SPMRoot.h:153
 SPMRoot.h:154
 SPMRoot.h:155
 SPMRoot.h:156
 SPMRoot.h:157
 SPMRoot.h:158
 SPMRoot.h:159
 SPMRoot.h:160
 SPMRoot.h:161
 SPMRoot.h:162
 SPMRoot.h:163
 SPMRoot.h:164
 SPMRoot.h:165
 SPMRoot.h:166
 SPMRoot.h:167
 SPMRoot.h:168
 SPMRoot.h:169
 SPMRoot.h:170
 SPMRoot.h:171
 SPMRoot.h:172
 SPMRoot.h:173
 SPMRoot.h:174