//Author: Dariusz Mi$kowiec
//Date: 1999
///////////////////////////////////////////////////////////////////////////////
// DGTrigger is a GUI for DTrigger
///////////////////////////////////////////////////////////////////////////////
//
//
//
#include "DGTrigger.h"
#ifdef COMPIL
ClassImp(DGTrigger)
#endif
//-----------------------------------------------------------------------------
DGTrigger::DGTrigger(DTrigger *trigger) : TGMainFrame(gClient->GetRoot(), 0, 0) {
TGLayoutHints *fL0,*fL1,*fL2,*fL3,*fL4,*fL10,*fL11,*fL12;
TGLayoutHints *fL200,*fL201,*fL210,*fL211;
TGLayoutHints *fL300,*fL301,*fL310,*fL311;
ULong_t color;
Int_t i;
TGLabel *xTGLabel;
cout << "constructing DGTrigger...n";
fTrigger = trigger;
gClient->GetColorByName("red", color);
ChangeBackground(color);
fL0 = new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsCenterX,5,5,5,0);
fL10 = new TGLayoutHints(kLHintsTop | kLHintsCenterX | kLHintsExpandX,5,5,0,5);
fL11 = new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY | kLHintsCenterX,5,5,5,5);
fL12 = new TGLayoutHints(kLHintsTop | kLHintsExpandY | kLHintsCenterX,5,5,5,5);
fL1 = new TGLayoutHints(kLHintsLeft , 5,0,3,3);
fL2 = new TGLayoutHints(kLHintsRight, 0,0,1,3);
fL3 = new TGLayoutHints(kLHintsLeft | kLHintsExpandX,0,20,1,1);
fL4 = new TGLayoutHints(kLHintsBottom | kLHintsExpandX | kLHintsCenterX,1,1,1,1);
fL200 = new TGLayoutHints(kLHintsLeft | kLHintsTop,5,5,2,5);
fL211 = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX | kLHintsExpandY,5,5,2,5);
fL201 = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandY,5,5,2,5);
fL210 = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,5,5,2,5);
fL300 = new TGLayoutHints(kLHintsLeft | kLHintsTop,5,5,5,5);
fL311 = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX | kLHintsCenterY,5,5,5,5);
fL301 = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterY,5,5,5,5);
fL310 = new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsCenterX,5,5,5,5);
fMenuBar = new TGMenuBar(this, 1, 1, kHorizontalFrame);
fControlFrame = new TGHorizontalFrame(this, 0, 0, kSunkenFrame);
fCanvasFrame = new TRootEmbeddedCanvas("CanvasFrame", this, 0, 280, kSunkenFrame);
AddFrame(fMenuBar, fL0);
AddFrame(fControlFrame, fL10);
AddFrame(fCanvasFrame, fL10);
fLogicFrame = new TGVerticalFrame(fControlFrame, 0, 0, 0);
fFLTFrame = new TGVerticalFrame(fControlFrame, 0, 0, 0);
fSLTFrame = new TGVerticalFrame(fControlFrame, 0, 0, 0);
fBusyFrame = new TGVerticalFrame(fControlFrame, 0, 0, 0);
fControlFrame->AddFrame(fLogicFrame, fL201);
fControlFrame->AddFrame(fFLTFrame, fL201);
fControlFrame->AddFrame(fSLTFrame, fL201);
fControlFrame->AddFrame(fBusyFrame, fL201);
// menu
fMenuFile = new TGPopupMenu(gClient->GetRoot());
fMenuExpert = new TGPopupMenu(gClient->GetRoot());
fMenuHelp = new TGPopupMenu(gClient->GetRoot());
fMenuBar->AddPopup("&File", fMenuFile, fL1);
fMenuBar->AddPopup("&Expert", fMenuExpert, fL1);
fMenuBar->AddPopup("&Help", fMenuHelp, fL2);
fMenuFile->Associate(this);
fMenuExpert->Associate(this);
fMenuHelp->Associate(this);
// file menu
fMenuFile->AddEntry("&Load setup", 11);
fMenuFile->AddEntry("&Save setup", 12);
fMenuFile->AddEntry("&Exit", 13);
// expert menu
fMenuDebug = new TGPopupMenu(gClient->GetRoot());
fMenuExpert->AddEntry("Manual Abort", 50);
fMenuExpert->AddEntry("Manual FLT Reset", 51);
fMenuExpert->AddEntry("Read logic RAMs", 52);
fMenuExpert->AddEntry("Initialize setup", 53);
fMenuExpert->AddPopup("Debug VME module",fMenuDebug);
fMenuDebug->AddEntry("logic0 (test pattern)", 21);
fMenuDebug->AddEntry("logic1 (logic)", 22);
fMenuDebug->AddEntry("downscaler0 (physics)", 23);
fMenuDebug->AddEntry("downscaler1 (MT)", 24);
fMenuDebug->AddEntry("downscaler2 (CAL)", 25);
fMenuDebug->AddEntry("discriminator (SDD)", 26);
fMenuDebug->AddEntry("downscaler3 (SDD)", 27);
fMenuDebug->AddEntry("DL633 (FLT inp)", 28);
fMenuDebug->AddEntry("DL634 (FLT out)", 29);
fMenuDebug->AddEntry("DL633 (Abort inp)", 30);
fMenuDebug->AddEntry("DL634 (Abort out)", 31);
fMenuDebug->AddEntry("DL633 (Busy 1/2)", 32);
fMenuDebug->AddEntry("DL633 (Busy 2/2)", 33);
fMenuDebug->AddEntry("DL633 (Busy or)", 34);
fMenuDebug->AddEntry("DL634 (Busy out)", 35);
fMenuDebug->AddEntry("DL631 (Busy Pat 1/2)", 36);
fMenuDebug->AddEntry("DL631 (Busy Pat 2/2)", 37);
fMenuDebug->AddEntry("scaler0 (logic1 inp/out)", 38);
fMenuDebug->AddEntry("scaler1 (trigger etc)", 39);
fMenuDebug->Associate(this);
// help menu
fMenuHelp->AddEntry("logic" , 61);
fMenuHelp->AddEntry("FLT" , 62);
fMenuHelp->AddEntry("SLT" , 63);
fMenuHelp->AddEntry("Busy" , 64);
fMenuHelp->AddEntry("monitor", 65);
// logic frame
fLogicLab = new TGLabel(fLogicFrame, new TGString("logic"));
fLogicPhysFrame = new TGGroupFrame(fLogicFrame, "physics");
fLogicMTCALFrame = new TGGroupFrame(fLogicFrame, "MT/CAL");
fLogicFrame->AddFrame(fLogicLab, fL210);
fLogicFrame->AddFrame(fLogicPhysFrame, fL200);
fLogicFrame->AddFrame(fLogicMTCALFrame, fL211);
// physics logic frame
fLogicPhysBbp = new TGCheckButton(fLogicPhysFrame, "beam before-prot.", 20902);
fLogicPhysIbp = new TGCheckButton(fLogicPhysFrame, "inter. before-prot", 20903);
fLogicPhysFrame->AddFrame(fLogicPhysBbp, fL1);
fLogicPhysFrame->AddFrame(fLogicPhysIbp, fL1);
fLogicPhysBbp->Associate(this);
fLogicPhysIbp->Associate(this);
xTGLabel = new TGLabel(fLogicPhysFrame,new TGString(""));
fLogicPhysFrame->AddFrame(xTGLabel, fL3);
fLogicPhysEditLogic = new TGTextButton(fLogicPhysFrame, "edit physics logic", 20911);
fLogicPhysTestLogic = new TGTextButton(fLogicPhysFrame, "test physics logic", 20912);
fLogicPhysFrame->AddFrame(fLogicPhysEditLogic, fL210);
fLogicPhysFrame->AddFrame(fLogicPhysTestLogic, fL210);
fLogicPhysEditLogic->Associate(this);
fLogicPhysTestLogic->Associate(this);
// MT/CAL logic frame
xTGLabel = new TGLabel(fLogicMTCALFrame,new TGString(" inb outb"));
fLogicMTCALFrame->AddFrame(xTGLabel, fL1);
for (i=0; i<6; i++) {
fLogicMTCALFrameSlice[i] = new TGHorizontalFrame(fLogicMTCALFrame,0,0,0);
fLogicMTCALFrame->AddFrame(fLogicMTCALFrameSlice[i],fL0);
}
fLogicMTCALBut[0][0] = new TGCheckButton(fLogicMTCALFrameSlice[0], "", 20200);
fLogicMTCALBut[0][1] = new TGCheckButton(fLogicMTCALFrameSlice[1], "", 20201);
fLogicMTCALBut[0][2] = new TGCheckButton(fLogicMTCALFrameSlice[2], "", 20202);
fLogicMTCALBut[0][3] = new TGCheckButton(fLogicMTCALFrameSlice[3], "", 20203);
fLogicMTCALBut[0][4] = new TGCheckButton(fLogicMTCALFrameSlice[4], "", 20204);
fLogicMTCALBut[0][5] = new TGCheckButton(fLogicMTCALFrameSlice[5], "", 20205);
fLogicMTCALBut[1][0] = new TGCheckButton(fLogicMTCALFrameSlice[0], " MT", 20300);
fLogicMTCALBut[1][1] = new TGCheckButton(fLogicMTCALFrameSlice[1], "", 20301);
fLogicMTCALBut[1][2] = new TGCheckButton(fLogicMTCALFrameSlice[2], " SDD inj", 20302);
fLogicMTCALBut[1][3] = new TGCheckButton(fLogicMTCALFrameSlice[3], " UV1", 20303);
fLogicMTCALBut[1][4] = new TGCheckButton(fLogicMTCALFrameSlice[4], " UV2", 20304);
fLogicMTCALBut[1][5] = new TGCheckButton(fLogicMTCALFrameSlice[5], " laser", 20305);
for (i=0; i<6; i++) {
fLogicMTCALFrameSlice[i]->AddFrame(fLogicMTCALBut[0][i], fL1);
fLogicMTCALFrameSlice[i]->AddFrame(fLogicMTCALBut[1][i], fL1);
fLogicMTCALBut[0][i]->Associate(this);
fLogicMTCALBut[1][i]->Associate(this);
}
// FLT frame
fFLTLab = new TGLabel(fFLTFrame, new TGString("FLT"));
fFLTEnableFrame = new TGGroupFrame(fFLTFrame, "enable", kVerticalFrame);
fFLTFrame->AddFrame(fFLTLab, fL210);
fFLTFrame->AddFrame(fFLTEnableFrame, fL201);
fFLTDownLab = new TGLabel(fFLTEnableFrame, new TGString("downsc "));
fFLTEnableFrame->AddFrame(fFLTDownLab, fL2);
// FLT enable frame
for (i=0; i<NFLT; i++) {
fFLTEnableFrameSlice[i] = new TGHorizontalFrame(fFLTEnableFrame, 0, 0);
fFLTEnableFrame->AddFrame(fFLTEnableFrameSlice[i], fL0);
}
fFLTEnableBut[0] = new TGCheckButton(fFLTEnableFrameSlice[0], "beam", 20000);
fFLTEnableBut[1] = new TGCheckButton(fFLTEnableFrameSlice[1], "minb", 20001);
fFLTEnableBut[2] = new TGCheckButton(fFLTEnableFrameSlice[2], "central", 20002);
fFLTEnableBut[3] = new TGCheckButton(fFLTEnableFrameSlice[3], "SOB", 20003);
fFLTEnableBut[4] = new TGCheckButton(fFLTEnableFrameSlice[4], "EOB", 20004);
fFLTEnableBut[5] = new TGCheckButton(fFLTEnableFrameSlice[5], "MT", 20005);
fFLTEnableBut[6] = new TGCheckButton(fFLTEnableFrameSlice[6], "SDDinj", 20006);
fFLTEnableBut[7] = new TGCheckButton(fFLTEnableFrameSlice[7], "UV1", 20007);
fFLTEnableBut[8] = new TGCheckButton(fFLTEnableFrameSlice[8], "UV2", 20008);
fFLTEnableBut[9] = new TGCheckButton(fFLTEnableFrameSlice[9], "laser", 20009);
for (i=0; i<NFLT; i++) {
fFLTDownB[i] = new TGTextBuffer(80);
fFLTDownE[i] = new TGTextEntry(fFLTEnableFrameSlice[i], fFLTDownB[i], 20100+i);
fFLTDownE[i]->Resize(80,fFLTDownE[i]->GetDefaultHeight());
fFLTEnableFrameSlice[i]->AddFrame(fFLTEnableBut[i], fL0);
fFLTEnableFrameSlice[i]->AddFrame(fFLTDownE[i], fL0);
fFLTEnableBut[i]->Associate(this);
fFLTDownE[i]->Associate(this);
}
// SLT frame
fSLTLab = new TGLabel(fSLTFrame, new TGString("SLT"));
fSLTRequireFrame = new TGGroupFrame(fSLTFrame, "require", kVerticalFrame);
fSLTSDDMultFrame = new TGGroupFrame(fSLTFrame, "SDD multiplicity", kVerticalFrame);
fSLTFrame->AddFrame(fSLTLab, fL210);
fSLTFrame->AddFrame(fSLTRequireFrame, fL211);
fSLTFrame->AddFrame(fSLTSDDMultFrame, fL210);
// SLT require frame
xTGLabel = new TGLabel(fSLTRequireFrame,new TGString(" "));
fSLTRequireFrame->AddFrame(xTGLabel, fL0);
fSLTRequireBut[0] = new TGCheckButton(fSLTRequireFrame, "SDD (for central FLT)", 20400);
fSLTRequireBut[1] = new TGCheckButton(fSLTRequireFrame, "beam after-protection", 20401);
fSLTRequireBut[2] = new TGCheckButton(fSLTRequireFrame, "inter. after-protection", 20402);
for (i=0; i<3; i++) {
fSLTRequireFrame->AddFrame(fSLTRequireBut[i], fL1);
fSLTRequireBut[i]->Associate(this);
}
// SLT SDD multiplicity frame
xTGLabel = new TGLabel(fSLTSDDMultFrame,new TGString(" threshold downsc"));
fSLTSDDMultFrame->AddFrame(xTGLabel, fL10);
for (i=0; i<4; i++) {
fSLTSDDMultFrameSlice[i] = new TGHorizontalFrame(fSLTSDDMultFrame, 0, 0);
fSLTSDDMultFrame->AddFrame(fSLTSDDMultFrameSlice[i], fL0);
fSLTSDDMultBut[i] = new TGCheckButton(fSLTSDDMultFrameSlice[i], "", 20500+i);
fSLTSDDMultFrameSlice[i]->AddFrame(fSLTSDDMultBut[i], fL1);
fSLTSDDMultBut[i]->Associate(this);
fSDDThrB[i] = new TGTextBuffer(80);
fSDDThrE[i] = new TGTextEntry(fSLTSDDMultFrameSlice[i], fSDDThrB[i], 20600+i);
fSDDThrE[i]->Resize(40,fSDDThrE[i]->GetDefaultHeight());
fSLTSDDMultFrameSlice[i]->AddFrame(fSDDThrE[i], fL1);
fSDDThrE[i]->Associate(this);
fSDDDowB[i] = new TGTextBuffer(80);
fSDDDowE[i] = new TGTextEntry(fSLTSDDMultFrameSlice[i], fSDDDowB[i], 20700+i);
fSDDDowE[i]->Resize(50,fSDDDowE[i]->GetDefaultHeight());
fSLTSDDMultFrameSlice[i]->AddFrame(fSDDDowE[i], fL1);
fSDDDowE[i]->Associate(this);
}
// Busy frame
fBusyLab = new TGLabel(fBusyFrame, new TGString("Busy"));
fBusyWaitFrame = new TGGroupFrame(fBusyFrame, "wait for", kVerticalFrame);
fBusyFrame->AddFrame(fBusyLab, fL210);
fBusyFrame->AddFrame(fBusyWaitFrame, fL201);
xTGLabel = new TGLabel(fBusyWaitFrame,new TGString(" "));
fBusyWaitFrame->AddFrame(xTGLabel, fL0);
// Busy Wait frame
fBusyWaitBut[0] = new TGCheckButton(fBusyWaitFrame, "DACOX", 20800);
fBusyWaitBut[1] = new TGCheckButton(fBusyWaitFrame, "SDD", 20801);
fBusyWaitBut[2] = new TGCheckButton(fBusyWaitFrame, "RICH 1", 20802);
fBusyWaitBut[3] = new TGCheckButton(fBusyWaitFrame, "RICH 2", 20803);
fBusyWaitBut[4] = new TGCheckButton(fBusyWaitFrame, "TPC", 20804);
fBusyWaitBut[5] = new TGCheckButton(fBusyWaitFrame, "DAQ", 20805);
fBusyWaitBut[6] = new TGCheckButton(fBusyWaitFrame, "Always on", 20806);
for (i=0; i<NBUSY; i++) {
fBusyWaitFrame->AddFrame(fBusyWaitBut[i], fL1);
fBusyWaitBut[i]->Associate(this);
}
// Canvas frame
fCanvasFrame->GetCanvas()->Range(0,-100, 1000, 1100);
fCanvasFrame->GetCanvas()->SetFillColor(171);
fCanvasFrame->GetCanvas()->SetEditable(kFALSE);
fMonitor = new DGMonitor(fTrigger, fCanvasFrame->GetCanvas());
MapSubwindows();
this->Resize(this->GetDefaultSize());
SetWindowName("CERES trigger control");
MapWindow();
fTick = 0;
fTimer = new TTimer(this,500);
fTimer->TurnOn();
fDatime = new TDatime();
// logfile
fLog = new ofstream("/data/trilog.txt", ios::out|ios::ate);
*fLog << fDatime->AsString() << "........" << "new DGTrigger" << endl;
// scalers data base
OpenScalerDatabase("/data/scalers.dat");
cout << "...done." << endl;
}
//-----------------------------------------------------------------------------
DGTrigger::~DGTrigger() {
cout <<"destroying DGTrigger" << endl;
fTimer->TurnOff();
delete fTimer;
delete fLog;
delete fDatime;
cout<<"I do not care about deleting all the stuff..."<<endl;
}
//-----------------------------------------------------------------------------
void DGTrigger::Refresh() {
// Update display so it represents actual contents of fTrigger.
Char_t buf[80];
Int_t i;
// Phys logic
if (fTrigger->IsEnabledBBP()) fLogicPhysBbp->SetState(kButtonDown);
else fLogicPhysBbp->SetState(kButtonUp);
if (fTrigger->IsEnabledIBP()) fLogicPhysIbp->SetState(kButtonDown);
else fLogicPhysIbp->SetState(kButtonUp);
// MT/CAL logic
for (i=0; i<6; i++) {
if (fTrigger->IsOnMTCAL(i+2,1)) fLogicMTCALBut[0][i]->SetState(kButtonDown);
else fLogicMTCALBut[0][i]->SetState(kButtonUp);
if (fTrigger->IsOnMTCAL(i+2,0)) fLogicMTCALBut[1][i]->SetState(kButtonDown);
else fLogicMTCALBut[1][i]->SetState(kButtonUp);
}
// FLT
for (i=0; i<NFLT; i++) {
if (fTrigger->IsEnabledFLT(i)) fFLTEnableBut[i]->SetState(kButtonDown);
else fFLTEnableBut[i]->SetState(kButtonUp);
sprintf(buf, "%d", fTrigger->GetFLTDownscal(i));
fFLTDownB[i]->Clear();
fFLTDownB[i]->AddText(0,buf);
fClient->NeedRedraw(fFLTDownE[i]);
}
// SLT
for (i=0; i<NABORT; i++) {
if (fTrigger->IsEnabledAbort(i)) fSLTRequireBut[i]->SetState(kButtonDown);
else fSLTRequireBut[i]->SetState(kButtonUp);
}
for (i=0; i<4; i++) {
if (fTrigger->IsEnabledSDDMult(i)) fSLTSDDMultBut[i]->SetState(kButtonDown);
else fSLTSDDMultBut[i]->SetState(kButtonUp);
sprintf(buf, "%d", fTrigger->GetSDDMultThr(i));
fSDDThrB[i]->Clear();
fSDDThrB[i]->AddText(0,buf);
fClient->NeedRedraw(fSDDThrE[i]);
sprintf(buf, "%d", fTrigger->GetSDDMultDownscal(i));
fSDDDowB[i]->Clear();
fSDDDowB[i]->AddText(0,buf);
fClient->NeedRedraw(fSDDDowE[i]);
}
// Busy
for (i=0; i<NBUSY; i++) {
if (fTrigger->IsEnabledBusy(i)) fBusyWaitBut[i]->SetState(kButtonDown);
else fBusyWaitBut[i]->SetState(kButtonUp);
}
}
//-----------------------------------------------------------------------------
Bool_t DGTrigger::HandleTimer(TTimer *tim) {
static Int_t noburst_old;
Int_t noburst;
fTrigger->ReadVME();
fMonitor->Refresh();
if (fTick/5*5 == fTick) Refresh();
noburst = fTrigger->fLogic1->GetInputReg() >> 9 & 1;
// end-of-burst (more exactly, start-of-noburst)
if ((noburst == 1) && (noburst_old == 0)) {
// save scaler counts in scalers database
// cout << "fillingn";
FillScalerDatabase();
}
// start-of-burst (more exactly, end-of-noburst)
if ((noburst == 0) && (noburst_old == 1)) {
// clear downscaler counters before sob
fTrigger->fDown[0]->ClearCounters();
fTrigger->fDown[1]->ClearCounters();
fTrigger->fDown[2]->ClearCounters();
fTrigger->fDown2->ClearCounters();
}
noburst_old = noburst;
fTimer->Reset();
fTick++;
return kTRUE;
}
//-----------------------------------------------------------------------------
Bool_t DGTrigger::ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2)
{
Int_t i, j;
Int_t inb, outb;
int temp;
TGFileInfo fi;
const char *filetypes[] = { "Trigger setup files", "*.tri",
"All files", "*",
0,0,
0,0};
fi.fFileTypes = (char **)filetypes;
fDatime->Set();
*fLog << fDatime->AsString() << "........";
switch(GET_MSG(msg)) {
case kC_COMMAND:
switch(GET_SUBMSG(msg)) {
case kCM_MENU:
switch (parm1) {
case 11:
// load setup
new TGFileDialog(fClient->GetRoot(), this, kFDOpen,&fi);
if (fi.fFilename) fTrigger->Load(fi.fFilename);
*fLog << "load setup from " << fi.fFilename;
break;
case 12:
// save setup
new TGFileDialog(fClient->GetRoot(), this, kFDSave,&fi);
if (fi.fFilename) fTrigger->Save(fi.fFilename);
*fLog << "save setup on " << fi.fFilename;
break;
case 13:
// exit
*fLog << "exitn";
exit(0);
break;
case 21:
new DGLogic(fTrigger->fLogic0);
*fLog << "debug logic0n";
break;
case 22:
new DGLogic(fTrigger->fLogic1);
*fLog << "debug logic1n";
break;
case 23:
new DGDownscaler(fTrigger->fDown[0]);
*fLog << "debug down0n";
break;
case 24:
new DGDownscaler(fTrigger->fDown[1]);
*fLog << "debug down1n";
break;
case 25:
new DGDownscaler(fTrigger->fDown[2]);
*fLog << "debug down2n";
break;
case 26:
new DGDisc(fTrigger->fDisc);
*fLog << "debug discn";
break;
case 27:
new DGDownscaler(fTrigger->fDown2);
*fLog << "debug SDD downn";
break;
case 28:
new DGDL633(fTrigger->fFltinp);
*fLog << "debug fltinpn";
break;
case 29:
new DGDL634(fTrigger->fFltout);
*fLog << "debug fltoutn";
break;
case 30:
new DGDL633(fTrigger->fAboinp);
*fLog << "debug aboinpn";
break;
case 31:
new DGDL634(fTrigger->fAboout);
*fLog << "debug abooutn";
break;
case 32:
new DGDL633(fTrigger->fBusy[0]);
*fLog << "debug busy0n";
break;
case 33:
new DGDL633(fTrigger->fBusy[1]);
*fLog << "debug busy1n";
break;
case 34:
new DGDL633(fTrigger->fBusyor);
*fLog << "debug busyorn";
break;
case 35:
new DGDL634(fTrigger->fBusyout);
*fLog << "debug busyoutn";
break;
case 36:
new DGDL631(fTrigger->fBusypat[0]);
*fLog << "debug busypat0n";
break;
case 37:
new DGDL631(fTrigger->fBusypat[2]);
*fLog << "debug busypat1n";
break;
case 38:
new DGScaler(fTrigger->fScaler0);
*fLog << "debug scaler0n";
break;
case 39:
new DGScaler(fTrigger->fScaler1);
*fLog << "debug scaler1n";
break;
case 50:
fTrigger->ManualAbort();
*fLog << "manual abort";
break;
case 51:
fTrigger->ManualFLTReset();
*fLog << "manual reset";
break;
case 52:
fTrigger->fLogic0->ReadRAM();
fTrigger->fLogic1->ReadRAM();
fTick=0;
fTimer->Reset();
*fLog << "read ram";
break;
case 53:
fTrigger->ResetModules();
fTrigger->Initialize();
*fLog << "initialize";
break;
case 54:
break;
case 61:
new DGHelp("/home/misko/trigger/logic.hlp");
*fLog << "logic help";
break;
case 62:
new DGHelp("/home/misko/trigger/flt.hlp");
*fLog << "flt help";
break;
case 63:
new DGHelp("/home/misko/trigger/slt.hlp");
*fLog << "slt help";
break;
case 64:
new DGHelp("/home/misko/trigger/busy.hlp");
*fLog << "busy help";
break;
case 65:
new DGHelp("/home/misko/trigger/monitor.hlp");
*fLog << "monitor help";
break;
default:
break;
}
case kCM_CHECKBUTTON:
if (parm1 == 20902) {
fTrigger->fLogic0->ReadRAM();
fTrigger->fLogic1->ReadRAM();
temp = (int) fLogicPhysBbp->GetState();
if (temp) fTrigger->EnableBBP();
else fTrigger->DisableBBP();
*fLog << "beam before-protection " << temp;
}
if (parm1 == 20903) {
fTrigger->fLogic0->ReadRAM();
fTrigger->fLogic1->ReadRAM();
temp = (int) fLogicPhysIbp->GetState();
if (temp) fTrigger->EnableIBP();
else fTrigger->DisableIBP();
*fLog << "interaction before-protection " << temp;
}
if (parm1 >= 20200 && parm1 < 20400) {
fTrigger->fLogic0->ReadRAM();
fTrigger->fLogic1->ReadRAM();
i = parm1 - parm1/100*100;
inb = fLogicMTCALBut[0][i]->GetState();
outb = fLogicMTCALBut[1][i]->GetState();
fTrigger->SwitchMTCAL(i+2,inb,outb);
*fLog << "MTCAL " << i << " " << inb << " " << outb;
}
if (parm1 >= 20000 && parm1 < 20100) {
i = parm1 - parm1/100*100;
temp = (int) fFLTEnableBut[i]->GetState();
if (temp) fTrigger->EnableFLT(i);
else fTrigger->DisableFLT(i);
*fLog << "FLT " << i << " " << temp;
}
if (parm1 >= 20400 && parm1 < 20500) {
i = parm1 - parm1/100*100;
temp = (int) fSLTRequireBut[i]->GetState();
if (temp) fTrigger->EnableAbort(i);
else fTrigger->DisableAbort(i);
*fLog << "SLT " << i << " " << temp;
}
if (parm1 >= 20500 && parm1 < 20600) {
i = parm1 - parm1/100*100;
temp = (int) fSLTSDDMultBut[i]->GetState();
if (temp) fTrigger->EnableSDDMult(i);
else fTrigger->DisableSDDMult(i);
*fLog << "SDD mult " << i << " " << temp;
}
if (parm1 >= 20800 && parm1 < 20900) {
i = parm1 - parm1/100*100;
temp = (int) fBusyWaitBut[i]->GetState();
if (i == 6) { // always on
fBusyWaitBut[i]->SetState(kButtonDown);
new TGMsgBox(gClient->GetRoot(), 0, "dupa",
"Man, do you want to crash the system? ",
kMBIconStop, kMBYes | kMBNo, &j);
// if (j == kMBYes) cout << "dupan";
} else {
if (temp) fTrigger->EnableBusy(i);
else fTrigger->DisableBusy(i);
}
*fLog << "busy " << i << " " << temp;
}
break;
case kCM_BUTTON:
if (parm1 == 20911) {
new DGLogEditor(this, fTrigger->fLogic1, 0);
*fLog << "physics log editor ";
}
if (parm1 == 20912) {
fTrigger->ManualFLTReset();
new DGPatEditor(this, fTrigger->fLogic0, 0, kRestore);
*fLog << "physics pat editor ";
}
break;
default:
break;
}
fTick = 0; // refresh
break;
case kC_TEXTENTRY:
switch (GET_SUBMSG(msg)) {
case kTE_ENTER:
if (parm1 >= 20100 && parm1 < 20200) { // FLT downscaling
i = parm1 - 20100;
j = atoi(fFLTDownB[i]->GetString());
fTrigger->WriteFLTDownscal(i, j);
*fLog << "FLT " << i << " downscaling " << j;
}
if (parm1 >= 20600 && parm1 < 20700) { // SLT threshold
i = parm1 - 20600;
j = atoi(fSDDThrB[i]->GetString());
fTrigger->WriteSDDMultThr(i, j);
*fLog << "SDD mult " << i << " threshold " << j;
}
if (parm1 >= 20700 && parm1 < 20800) { // SLT downscaling
i = parm1 - 20700;
j = atoi(fSDDDowB[i]->GetString());
fTrigger->WriteSDDMultDownscal(i, j);
*fLog << "SDD mult " << i << " downscaling " << j;
}
fTick = 0; // refresh
fTimer->Reset();
break;
case kTE_TEXTCHANGED:
// postpone refreshing as much as possible, otherwise it could
// happen that the field is overwritten by the automatic
// refreshment routine while you are editing; not a nice thing
fTick = 1;
fTimer->Reset();
*fLog << "editing";
break;
default:
break;
}
break;
default:
break;
}
*fLog << endl;
return kTRUE;
}
//-----------------------------------------------------------------------------
/*
void DGTrigger::OpenScalerDatabase_obsolete(Char_t *scalfilename) {
// open scaler database in update mode and get the tree
// open file
TFile *fScalFile = new TFile(scalfilename, "UPDATE","scalers database");
if (!fScalFile->IsOpen()) {
cout << "DGTrigger: " << scalfilename;
cout << " does not exist. Creating one.n";
fScalFile = new TFile(scalfilename,"NEW","scalers database");
}
// get on tree
fScalTree = (TTree*) fScalFile->Get("scalers_tree");
cout << "fscaltree = " << fScalTree << endl;
if (fScalTree) {
fScalTree->SetBranchAddress("time", fDatime);
fScalTree->SetBranchAddress("scaler0", fTrigger->fScaler0->Data());
fScalTree->SetBranchAddress("scaler1", fTrigger->fScaler1->Data());
} else {
cout << "scalers_tree does not exist. Creating one.n";
fScalTree = new TTree("scalers_tree", "scalers_tree", 0);
fScalTree->Branch("time", fDatime, "time/i", 256);
fScalTree->Branch("scaler0", fTrigger->fScaler0->Data(),
"c0/i:c1:c2:c3:c4:c5:c6:c7:c8:c9:ca:cb:cc:cd:ce:cf", 256);
fScalTree->Branch("scaler1", fTrigger->fScaler1->Data(),
"c0/i:c1:c2:c3:c4:c5:c6:c7:c8:c9:ca:cb:cc:cd:ce:cf", 256);
}
}
//-----------------------------------------------------------------------------
void DGTrigger::CloseScalerDatabase_obsolete() {
fScalFile->Close();
delete fScalFile;
}
//-----------------------------------------------------------------------------
void DGTrigger::FillScalerDatabase_obsolete() {
// write actual scaler counts on scaler database
fDatime->Set();
fScalTree->Fill();
fScalFile->Purge();
fScalFile->Write();
}
*/
//-----------------------------------------------------------------------------
void DGTrigger::OpenScalerDatabase(Char_t *scalfilename) {
// Open scaler database file.
// Sorry guys but for safety reasons I preferred a simple ASCII file
// than a ROOT file and a ROOT tree. After I managed to corrupt ROOT
// file by crashing the writing program, I got scared and went back
// to simple ASCII which I always can edit if something goes wrong.
fScalFile = new ofstream(scalfilename, ios::out|ios::app);
*fScalFile << hex;
if (!fScalFile->good()) {
cout << "cannot open " << scalfilename << endl;
return;
}
}
//-----------------------------------------------------------------------------
void DGTrigger::CloseScalerDatabase() {
}
//-----------------------------------------------------------------------------
void DGTrigger::FillScalerDatabase() {
// write actual scaler counts on scaler database
Int_t i;
fDatime->Set();
*fScalFile << fDatime->Get();
for (i=0; i<16; i++) *fScalFile << " " << fTrigger->fScaler0->GetCount(i);
for (i=0; i<16; i++) *fScalFile << " " << fTrigger->fScaler1->GetCount(i);
*fScalFile << endl;
}
//-----------------------------------------------------------------------------
ROOT page - Class index - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.