Subversion Repositories f9daq

Rev

Rev 167 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

#ifndef __ROOT_APP_H__
#define __ROOT_APP_H__

//#define winWidth 1240
//#define winHeight 800
#define WINDOW_NAME "CAMAC/MPOD/4MM DAQ software"
#define measwin 3
#define analysiswin 4
#define BSIZE 10000

#include "root_include.h"
#include "substructure.h"
#include "daq.h"
#include "daqscope.h"
#include <iostream>
#include <fstream>
#include <cmath>
#include <time.h>

enum EMenuIds {
   M_FILE_SET_LAYOUT,
   M_FILE_SAVE_LAYOUT,
   M_FILE_SAVE_MSETTINGS,
   M_FILE_SAVE_ASETTINGS,
   M_FILE_CHECK_WIDTH,
   M_FILE_EXIT,

   M_ANALYSIS_HISTTYPE_1DADC,
   M_ANALYSIS_HISTTYPE_1DTDC,
   M_ANALYSIS_HISTTYPE_2D,
   M_ANALYSIS_INTEG,
   M_ANALYSIS_INTEGX,
   M_ANALYSIS_INTEGY,
   M_ANALYSIS_PHOTMU,
   M_ANALYSIS_BREAKDOWN,
   M_ANALYSIS_SURFSCAN,
   M_ANALYSIS_TIMING,

   M_HELP_WEBHELP,
   M_HELP_ABOUT
};

// Separate functions -----------------------------------------
void GetTime(int intime, char *outtime);
void remove_ext(char *inname, char *outname);
void remove_from_last(char *inname, char search, char *outname);
void remove_before_last(char *inname, char search, char *outname);
void layoutMainWindow(int *w, int *h);
void SeqNumber(int innum, int maxnum, char *outstr);
void TimeEstimate(clock_t stopw0, time_t time0, float progress, char *retEstim, int offset);
void NormateSet(int file, int nrpoint, double *min, double *max, double *setCount, double *setAcc);
double PointEstimate(int nrp, double *points);
// Separate functions -----------------------------------------


// Window classes ----------------------------------------------------
//class TGWindow;
//class TGMainFrame;

// Subwindow layout class
/*class TGMdiSubwindow
{
RQ_OBJECT("TGMdiSubwindow")

protected:
   TGMdiFrame *fMdiFrame;

public:
   TGMdiSubwindow(TGMdiMainFrame *main, int w, int h);
   TGMdiFrame *GetMdiFrame() const { return fMdiFrame; }
   // layoutchange is 0 when we close a subwindow and 1 when we change the layout (close multiple subwindows)
   virtual Bool_t CloseWindow(int layoutchange);

   // unique id is set for each subwindow
   //  settingsPane->id = 0
   int id;
};*/


// Main window class
class TGAppMainFrame
{
RQ_OBJECT("TGAppMainFrame")

protected:
   TGMainFrame *fMain;
//   TGMdiMainFrame *fMainFrame;
//   TGMdiMenuBar *fMenuBar;
   TGMenuBar *fMenuBar;
   TGLayoutHints *fMenuBarItemLayout;
   TGPopupMenu *fMenuFile, *fMenuAnalysis, *fMenuHelp, *fMenuHisttype;
   TGTab *fTab, *analTab;
   int winWidth;
   int winHeight;
//   TGMdiSubwindow *settingsPane;

   // Variables for frame layouts and titles
   TGCompositeFrame *fLayout[2];
   TGHorizontalFrame *fTitle;

   void InitMenu();
   void AppLayout();
   void OpenWindow(int winid);
   void CloseWindow();
   Bool_t About();

   int idtotal;
   bool cleanPlots;
   int logChange;
   int selChannel;
   bool acqStarted;
   unsigned int gBuf[BSIZE];
   clock_t clkt0;
   time_t timet0;
   bool liveUpdate;
   int npeaks;

public:
   TGAppMainFrame(const TGWindow *p, int w, int h);
   virtual ~TGAppMainFrame();

   void HandleMenu(Int_t id);

   // Splitter to a set number of frames
   bool TGSplitter(TGWindow *parent, const char *majorSplit, int *vertSplits, int *horSplits, const char *frameTitles[512], TGCompositeFrame **frames, int *frameWidth, int *frameHeight);
   void TGTitleLabel(TGWindow *parent, TGHorizontalFrame *fTitle, const char *title, Pixel_t foreColor, Pixel_t backColor, const char *font);

   // Layout setup
   void LayoutRead(int nrframes, int *w, int *h);
   void LayoutSave();
   void LayoutSet();
   void ToolTipSet();

   // Subframes where we display everything
   TGCompositeFrame *measLayout[measwin];
   TGCompositeFrame *analysisLayout[analysiswin];

   // Substructures for Settings pane (measurement layout)
   TSubStructure *scansOn;
   TSubStructure *vHardlimit;
   TSubStructure *NCH;
   TSubStructure *posUnits;
   TSubStructure *rotUnits;
   TSubStructure *oscConnect;
   TSubStructure *laserInfo;
   TSubStructure *chtemp;
   TSubStructure *liveDisp;

   // Substructures for Measurement pane (measurement layout)
   TSubStructure *vOutCh;
   TSubStructure *vOut;
   TSubStructure *vOutOpt;
   TSubStructure *vOutButtons;
   TSubStructure *vOutStart;
   TSubStructure *vOutStop;
   TSubStructure *vOutStep;
   TSubStructure *xPos;
   TSubStructure *yPos;
   TSubStructure *zPos;
   TSubStructure *zPosMin;
   TSubStructure *zPosMax;
   TSubStructure *zPosStep;
   TSubStructure *posButtons;
   TSubStructure *xPosMin;
   TSubStructure *xPosMax;
   TSubStructure *xPosStep;
   TSubStructure *yPosMin;
   TSubStructure *yPosMax;
   TSubStructure *yPosStep;
   TSubStructure *rotPos;
   TSubStructure *rotButtons;
   TSubStructure *rotPosMin;
   TSubStructure *rotPosMax;
   TSubStructure *rotPosStep;
   TSubStructure *evtNum;
   TSubStructure *timeStamp;
   TSubStructure *fileName;
   TSubStructure *measProgress;

   // Substructures for Display pane (measurement layout)
   TRootEmbeddedCanvas *measCanvas;

   // Action connections for Settings pane (measurement layout)
   void EnableScan(int type);
   void VoltageLimit();
   void ChangeUnits(int type);
   void ChangeUnitsRot(int type);
   void EnableLiveUpdate();

   // Action connections for Measurement pane (measurement layout)
   int GetChannel();
   void NegativePolarity();
   void VoltOut(int opt);
   void PositionSet(int opt);
   void RotationSet(int opt);
   void SaveFile();
   void StartAcq();

   // Substructures for Histogram selection pane (analysis layout)
   TSubStructure *selectDir;
   TGListBox *fileList;
   TSubStructure *multiSelect;
   TSubStructure *fileListCtrl;
   TSubStructure *dispTime;
   TSubStructure *dispBias;
   TSubStructure *dispPos;
   TSubStructure *dispTemp;
   TSubStructure *dispAngle;
   TSubStructure *dispLaser;

   // Substructures for Histogram pane (analysis layout)
   TRootEmbeddedCanvas *analysisCanvas;

   // Substructures for Histogram controls pane (analysis layout)
   TSubStructure *adcRange;
   TSubStructure *tdcRange;
   TSubStructure *yRange;
   TSubStructure *selectCh;
   TSubStructure *plotType;
   TSubStructure *histOpt;
   TSubStructure *exportHist;
   TSubStructure *editSelHist;

   // Substructures for analysis pane (analysis layout)
   TSubStructure *intSpect;
   TSubStructure *resol2d;
   TSubStructure *intSpectButtons;

   TSubStructure *relPde;
   TSubStructure *midPeak;
   TSubStructure *darkRun;
   TSubStructure *zeroAngle;
   TSubStructure *relPdeButtons;

   TSubStructure *minPeak;
   TSubStructure *peakSepCalc;
   TSubStructure *brDownButtons;

   TSubStructure *surfScanOpt;
   TSubStructure *resolSurf;
   TSubStructure *surfButtons;

   TSubStructure *fitSigma;
   TSubStructure *fitTresh;
   TSubStructure *fitInter;
   TSubStructure *adcOffset;
   TSubStructure *accError;
   TSubStructure *pedesLow;
   TSubStructure *fitChecks;
   TSubStructure *analysisProgress;

   // Action connections for Histogram file selection pane (analysis layout)
   void SelectDirectory();
   void ListMultiSelect(int opt);
   void FileListNavigation(int opt);
   void HeaderEdit();
   void ClearHistogramList();
   
   // Action connections for Histogram controls pane (analysis layout)
   void UpdateHistogram(int opt);
   void HistogramOptions(int opt);
   void ChangeHisttype(int type);

   // Action connections for analysis pane (analysis layout)
   void SelectDarkHist();
   void AnalysisDefaults();
   void AnalysisHandle(int type);
   void IntegSpectrum(TList *files, int direction, int edit);
   void PhotonMu(TList *files, int edit);
   void PlotEdgeDistribution(TList *files, int filenr, int points, double *min, double *max, double *xy, double *integAcc, int axis, bool edge2d, int edit);
   void BreakdownVolt(TList *files, int edit);
   void SurfaceScan(TList *files, int edit);

   // Substructures for Edit file header window (new tab)
   TGListBox *editList;
   TSubStructure *timeEditDisplay;
   TSubStructure *biasEdit;
   TSubStructure *xPosEdit;
   TSubStructure *yPosEdit;
   TSubStructure *zPosEdit;
   TSubStructure *tempEdit;
   TSubStructure *angleEdit;
   TSubStructure *laserEdit;
   TSubStructure *editHead;
   TSubStructure *editMulti;
   TGLabel *selectWarn;

   // Action connections for Edit file header window (new tab)
   void SetWarnings();
   void EditTickToggle(int type);
   void StartHeaderEdit();
   void ShowHeaderEdit(int id);
   void HeaderChange(char *histfile, bool *changetype);
   void CloseEditTab(int tabval);

   // Substructures for temporary analysis edit window (new tab)
   TRootEmbeddedCanvas *tempAnalysisCanvas;
   TSubStructure *runningAver;
   TSubStructure *runningOff;
   TSubStructure *secondAxis;
   TSubStructure *exportExitAnalysis;
   
   // Action connections for temporary analysis edit window (new tab)
   void ApplyRunningAver();
   void CloseTempAnalysisTab(int tabval);

   // Additional functions
   void DisplayHistogram(char *histfile, int histtype, int opt);
   void HeaderEditTab(TGTab *mainTab, bool create, int *tabid);
   void TempAnalysisTab(TGTab *mainTab, bool create, int *tabid, int analtype);
   void RunMeas(void *ptr, int runCase, int &scanon);
   int MyTimer();

// ROOT file variable structure -------------------------------
   struct EventHeader {
     int nrch;
     int timestamp;
     double biasvolt;
     int xpos;
     int ypos;
     int zpos;
     double temperature;
     double angle;
     char laserinfo[256];
   } evtheader;

   struct EventData {
     int adcdata[8];
     int tdcdata[8];
   } evtdata;

   struct EventMeas {
     double measdata;
   } evtmeas;

   TFile *inroot;
   TFile *outroot;
// ROOT file variable structure -------------------------------

   daq *gDaq;
   daqscope *gScopeDaq;
};

// -------------------------------------------------------------------

#endif