#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "ctbAdcs.h" #include "multiSlsDetector.h" #include "slsDetectorCommand.h" using namespace std; ctbAdc::ctbAdc(TGVerticalFrame *page, int i, multiSlsDetector *det) : TGHorizontalFrame(page, 800,800), id(i), myDet(det) { TGHorizontalFrame *hframe=this; char tit[100]; page->AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1)); hframe->MapWindow(); sprintf(tit, "ADC%d", id); sAdcLabel= new TGLabel(hframe, tit); hframe->AddFrame(sAdcLabel,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1)); sAdcLabel->MapWindow(); sAdcLabel->SetTextJustify(kTextLeft); sAdcInvert= new TGCheckButton(hframe, "Inv"); hframe->AddFrame( sAdcInvert,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1)); sAdcInvert->MapWindow(); sAdcInvert->Connect("Toggled(Bool_t)","ctbAdc",this,"ToggledInvert(Bool_t)"); sAdcEnable= new TGCheckButton(hframe, "En"); hframe->AddFrame( sAdcEnable,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1)); sAdcEnable->MapWindow(); // sAdcEnable->SetOn(kTRUE); // sAdcEnable->SetEnabled(kFALSE); sAdcEnable->Connect("Toggled(Bool_t)","ctbAdc",this,"ToggledEnable(Bool_t)"); sAdcPlot= new TGCheckButton(hframe, "Plot"); hframe->AddFrame( sAdcPlot,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1)); sAdcPlot->MapWindow(); sAdcPlot->Connect("Toggled(Bool_t)","ctbAdc",this,"ToggledPlot(Bool_t)"); fColorSel = new TGColorSelect(hframe, id+1, 0); fColorSel->Connect("ColorSelected(Pixel_t)","ctbAdc",this,"ColorChanged(Pixel_t)"); hframe->AddFrame(fColorSel, new TGLayoutHints(kLHintsTop | kLHintsLeft, 2, 0, 2, 2)); fColorSel->SetColor(TColor::Number2Pixel(id+1)); // sprintf(tit,"adc%d",id); // gADC=new TGraph(); // gADC->SetName(tit); // gADC->SetLineColor(id+1); // gADC->SetMarkerColor(id+1); }; Pixel_t ctbAdc::getColor(){ return fColorSel->GetColor(); } Bool_t ctbAdc::getEnabled(){ return getPlot(); } Bool_t ctbAdc::getPlot(){ return sAdcPlot->IsOn(); } Bool_t ctbAdc::getInverted(){ return sAdcInvert->IsOn(); } Bool_t ctbAdc::getEnable(){ return sAdcEnable->IsOn(); } void ctbAdc::setInverted(Bool_t b){ // cout << id << "set enabled " << b << endl; if (b) sAdcInvert->SetOn(kTRUE,kTRUE); else sAdcInvert->SetOn(kFALSE,kTRUE); } void ctbAdc::setEnable(Bool_t b){ // cout << id << "set enabled " << b << endl; if (b) sAdcEnable->SetOn(kTRUE,kFALSE); else sAdcEnable->SetOn(kFALSE,kFALSE); } void ctbAdc::setAdcAlias(char *tit, int plot, int color) { if (tit) sAdcLabel->SetText(tit); if (plot>0) sAdcPlot->SetOn(kTRUE,kTRUE); else if (plot==0) sAdcPlot->SetOn(kFALSE,kTRUE); if (color>=0) fColorSel->SetColor(color); fColorSel->SetEnabled(sAdcPlot->IsOn()); } string ctbAdc::getAdcAlias() { char line[1000]; sprintf(line,"ADC%d %s %d %x\n",id,sAdcLabel->GetText()->Data(),sAdcPlot->IsOn(),fColorSel->GetColor()); return string(line); } void ctbAdc::update() { //Emit("ToggledAdcEnable(Int_t)", id); } void ctbAdc::ToggledPlot(Bool_t b){ // Long_t mask=b<SetEnabled(kTRUE); else fColorSel->SetEnabled(kFALSE); // fColorSel->SetEnabled(sAdcPlot->IsOn()); Emit("ToggledAdcPlot(Int_t)", id); } void ctbAdc::ToggledInvert(Bool_t b){ // fColorSel->SetEnabled(sAdcPlot->IsOn()); Emit("ToggledAdcInvert(Int_t)", id); } void ctbAdc::ToggledEnable(Bool_t b){ fColorSel->SetEnabled(sAdcPlot->IsOn()); Emit("ToggledAdcEnable(Int_t)", id); } void ctbAdc::ColorChanged(Pixel_t) { Emit("ToggledAdcPlot(Int_t)", id); } void ctbAdc::ToggledAdcPlot(Int_t b){ Emit("ToggledAdcPlot(Int_t)", id); } void ctbAdc::ToggledAdcInvert(Int_t b){ Emit("ToggledAdcInvert(Int_t)", id); } void ctbAdc::ToggledAdcEnable(Int_t b){ Emit("ToggledAdcEnable(Int_t)", id); } void ctbAdc::setEnabled(Bool_t b){ // cout << id << "set enabled " << b << endl; if (b) sAdcPlot->SetOn(kTRUE,kFALSE); else sAdcPlot->SetOn(kFALSE,kFALSE); } void ctbAdc::setPlot(Bool_t b){ // cout << id << "set enabled " << b << endl; if (b) sAdcPlot->SetOn(kTRUE,kTRUE); else sAdcPlot->SetOn(kFALSE,kTRUE); } ctbAdcs::ctbAdcs(TGVerticalFrame *page, multiSlsDetector *det) : TGGroupFrame(page,"Adcs",kVerticalFrame), myDet(det) { SetTitlePos(TGGroupFrame::kLeft); page->AddFrame(this,new TGLayoutHints( kLHintsTop | kLHintsExpandX , 10,10,10,10)); MapWindow(); char tit[100]; TGHorizontalFrame* hframe=new TGHorizontalFrame(this, 800,800); AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1)); hframe->MapWindow(); int idac=0; TGHorizontalFrame* hhframe=new TGHorizontalFrame(this, 800,800); AddFrame(hhframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1)); hhframe->MapWindow(); TGVerticalFrame *vframe; for (idac=0; idacAddFrame(vframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1)); vframe->MapWindow(); } sAdc[idac]=new ctbAdc(vframe,idac,myDet); sAdc[idac]->Connect("ToggledAdcPlot(Int_t)","ctbAdcs",this,"ToggledAdcPlot(Int_t)"); sAdc[idac]->Connect("ToggledAdcInvert(Int_t)","ctbAdcs",this,"ToggledAdcInvert(Int_t)"); sAdc[idac]->Connect("ToggledAdcEnable(Int_t)","ctbAdcs",this,"ToggledAdcEnable(Int_t)"); } hframe=new TGHorizontalFrame(this, 800,800); AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1)); hframe->MapWindow(); bCheckHalf[0]=new TGTextButton(hframe, "All 0-15"); hframe->AddFrame(bCheckHalf[0],new TGLayoutHints(kLHintsTop | kLHintsExpandX, 5, 5, 5, 5)); bCheckHalf[0]->MapWindow(); bCheckHalf[0]->Connect("Clicked()","ctbAdcs",this,"CheckHalf0()"); bRemoveHalf[0]=new TGTextButton(hframe, "None 0-15"); hframe->AddFrame(bRemoveHalf[0],new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 5, 5, 5, 5)); bRemoveHalf[0]->MapWindow(); bRemoveHalf[0]->Connect("Clicked()","ctbAdcs",this,"RemoveHalf0()"); bCheckHalf[1]=new TGTextButton(hframe, "All 16-23"); hframe->AddFrame(bCheckHalf[1],new TGLayoutHints(kLHintsTop | kLHintsExpandX, 5, 5, 5, 5)); bCheckHalf[1]->MapWindow(); bCheckHalf[1]->Connect("Clicked()","ctbAdcs",this,"CheckHalf1()"); // bCheckAll->Connect("Clicked()","ctbAdcs",this,"CheckAll()"); bRemoveHalf[1]=new TGTextButton(hframe, "None 16-23"); hframe->AddFrame(bRemoveHalf[1],new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 5, 5, 5, 5)); bRemoveHalf[1]->MapWindow(); bRemoveHalf[1]->Connect("Clicked()","ctbAdcs",this,"RemoveHalf1()"); // bRemoveAll->Connect("Clicked()","ctbAdcs",this,"RemoveAll()"); hframe=new TGHorizontalFrame(this, 800,800); AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1)); hframe->MapWindow(); bCheckAll=new TGTextButton(hframe, "All"); hframe->AddFrame(bCheckAll,new TGLayoutHints(kLHintsTop | kLHintsExpandX, 5, 5, 5, 5)); bCheckAll->MapWindow(); bCheckAll->Connect("Clicked()","ctbAdcs",this,"CheckAll()"); bRemoveAll=new TGTextButton(hframe, "None"); hframe->AddFrame(bRemoveAll,new TGLayoutHints(kLHintsBottom | kLHintsExpandX, 5, 5, 5, 5)); bRemoveAll->MapWindow(); bRemoveAll->Connect("Clicked()","ctbAdcs",this,"RemoveAll()"); hframe=new TGHorizontalFrame(this, 800,50); AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1)); hframe->MapWindow(); TGLabel *label= new TGLabel(hframe, "Inversion mask: "); hframe->AddFrame(label,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1)); label->MapWindow(); label->SetTextJustify(kTextLeft); eInversionMask = new TGNumberEntry(hframe, 0, 16,999, TGNumberFormat::kNESHex, TGNumberFormat::kNEANonNegative, TGNumberFormat::kNELNoLimits); hframe->AddFrame(eInversionMask,new TGLayoutHints(kLHintsTop | kLHintsExpandX, 1, 1, 1, 1)); eInversionMask->MapWindow(); eInversionMask->Resize(150,30); eInversionMask->SetState(kFALSE); hframe=new TGHorizontalFrame(this, 800,50); AddFrame(hframe,new TGLayoutHints(kLHintsTop | kLHintsExpandX , 1,1,1,1)); hframe->MapWindow(); label= new TGLabel(hframe, "Enable mask: "); hframe->AddFrame(label,new TGLayoutHints(kLHintsTop | kLHintsLeft| kLHintsExpandX, 1, 1, 1, 1)); label->MapWindow(); label->SetTextJustify(kTextLeft); eEnableMask = new TGNumberEntry(hframe, 0, 16,999, TGNumberFormat::kNESHex, TGNumberFormat::kNEANonNegative, TGNumberFormat::kNELNoLimits); hframe->AddFrame(eEnableMask,new TGLayoutHints(kLHintsTop | kLHintsExpandX, 1, 1, 1, 1)); eEnableMask->MapWindow(); eEnableMask->Resize(150,30); eEnableMask->SetState(kFALSE); } int ctbAdcs::setEnable(int reg) { // char aargs[10][100]; // char *args[10]; string retval; int retreg; // for (int i=0; i<10; i++) args[i]=aargs[i]; // sprintf(args[0],"adcenable"); // sprintf(args[1],"%x",reg); // slsDetectorCommand *cmd=new slsDetectorCommand(myDet); // if (reg>-1) { // retval=cmd->executeLine(1,args,slsDetectorDefs::PUT_ACTION); // } if (reg>-1) { try { myDet->setADCEnableMask(reg); } catch (...) { cout << "Do nothing for this error" << endl; } } // retval=cmd->executeLine(1,args,slsDetectorDefs::GET_ACTION); // cout <<"enable: " << retval << endl;; // delete cmd; // sscanf(retval.c_str(),"%x",&retreg); try { retreg=myDet->getADCEnableMask(); } catch (...) { cout << "Do nothing for this error" << endl; } eEnableMask->SetHexNumber(retreg); return retreg; } int ctbAdcs::setInvert(int reg) { // char aargs[10][100]; // char *args[10]; string retval; int retreg; // for (int i=0; i<10; i++) args[i]=aargs[i]; //sprint// f(args[0],"adcinvert"); // sprintf(args[1],"%x",reg); // slsDetectorCommand *cmd=new slsDetectorCommand(myDet); if (reg>-1) { try { myDet->setADCInvert(reg); } catch (...) { cout << "Do nothing for this error" << endl; } //retval=cmd->executeLine(1,args,slsDetectorDefs::PUT_ACTION); } try { retreg=myDet->getADCInvert(); } catch (...) { cout << "Do nothing for this error" << endl; } // retval=cmd->executeLine(1,args,slsDetectorDefs::GET_ACTION); // cout <<"invert: " << retval << endl;; // delete cmd; // sscanf(retval.c_str(),"%x",&retreg); eInversionMask->SetHexNumber(retreg); return retreg; } void ctbAdcs::update() { Int_t invreg;//=myDet->readRegister(67);//(120); Int_t disreg;//=myDet->readRegister(120);//(94); // for (int i=0; i<10; i++) // args[i]=aargs[i]; // string retval; // sprintf(args[0],"adcenable"); // slsDetectorCommand *cmd=new slsDetectorCommand(myDet); // retval=cmd->executeLine(1,args,slsDetectorDefs::GET_ACTION); // delete cmd; // // cout << retval << endl; // sscanf(retval.c_str(),"adcenable %x",&disreg); // eInversionMask->SetHexNumber(invreg); // eEnableMask->SetHexNumber(disreg); disreg=setEnable(); invreg=setInvert(); for (int is=0; issetAdcAlias(NULL,-1,-1); if (invreg & (1<setInverted(kTRUE); else sAdc[is]->setInverted(kFALSE); if (disreg & (1<setEnable(kTRUE); else sAdc[is]->setEnable(kFALSE); } Emit("AdcEnable(Int_t)", disreg); } string ctbAdcs::getAdcParameters() { ostringstream line; line << "reg "<< hex << setInvert() << "# ADC invert reg" << dec << endl; line << "reg "<< hex << setEnable() << " # ADC enable reg"<< dec << endl; // line << "reg "<< hex << 67 << " " << myDet->readRegister(67) << "# ADC invert reg" << dec << endl; // line << "reg "<< hex << 120 << " " << myDet->readRegister(120) << " # ADC enable reg"<< dec << endl; // // line << "reg "<< hex << 94 << " " << myDet->readRegister(94) << " # ADC enable reg"<< dec << endl; return line.str(); } void ctbAdcs::CheckAll() { for (int is=0; issetPlot(kTRUE); // sAdc[is]->setEnabled(kTRUE); } } void ctbAdcs::RemoveAll() { for (int is=0; issetEnabled(kFALSE); sAdc[is]->setPlot(kFALSE); } } void ctbAdcs::CheckHalf0() { for (int is=0; issetPlot(kTRUE); // sAdc[is]->setEnabled(kTRUE) } } void ctbAdcs::RemoveHalf0() { for (int is=0; issetEnabled(kFALSE); sAdc[is]->setPlot(kFALSE); } } void ctbAdcs::CheckHalf1() { for (int is=NADCS/2; issetPlot(kTRUE); // sAdc[is]->setEnabled(kTRUE) } } void ctbAdcs::RemoveHalf1() { for (int is=NADCS/2; issetEnabled(kFALSE); sAdc[is]->setPlot(kFALSE); } } // TGraph* ctbAdcs::getGraph(int i) { // if (i>=0 && igetGraph(); // return NULL; // } int ctbAdcs::setAdcAlias(string line) { int is=-1, plot=0, color=-1; char tit[100]; int narg=sscanf(line.c_str(),"ADC%d %s %d %x",&is,tit,&plot, &color); if (narg<2) return -1; if (narg!=3) color=-1; if (is>=0 && issetAdcAlias(tit,plot,color); } return is; } string ctbAdcs::getAdcAlias() { ostringstream line; for (int is=0; isgetAdcAlias(); return line.str(); } void ctbAdcs::ToggledAdcPlot(Int_t b){ Emit("ToggledAdcPlot(Int_t)", b); } void ctbAdcs::AdcEnable(Int_t b){ Emit("AdcEnable(Int_t)", b); } void ctbAdcs::ToggledAdcEnable(Int_t b){ Int_t oreg=setEnable();//myDet->readRegister(67); Int_t m=1<getEnable()) oreg|=m; else oreg&=~m; // cout << dec << sizeof(Long64_t) << " " << mask << " " << hex << m << " ioreg " << oreg << endl; setEnable(oreg);//)writeRegister(67, oreg); //oreg=setEnable();//myDet->readRegister(67); Emit("AdcEnable(Int_t)", oreg); //cout << "enable!" << endl; // Emit("ToggledAdcPlot(Int_t)", b); } void ctbAdcs::ToggledAdcInvert(Int_t b){ // char val[1000]; Int_t oreg=setInvert();//myDet->readRegister(67); Int_t m=1<getInverted()) oreg|=m; else oreg&=~m; // cout << dec << sizeof(Long64_t) << " " << mask << " " << hex << m << " ioreg " << oreg << endl; setInvert(oreg);//)writeRegister(67, oreg); // oreg=setInvert();//myDet->readRegister(67); // cout << dec << sizeof(Long64_t) << " " << mask << " " << hex << m << " ioreg " << oreg << endl; //sprintf(val,"%X",oreg); //eInversionMask->SetHexNumber(oreg); } Pixel_t ctbAdcs::getColor(int i){ if (i>=0 && igetColor(); } Bool_t ctbAdcs::getEnabled(int i){ if (i>=0 && igetEnabled(); } Bool_t ctbAdcs::getEnable(int i){ if (i>=0 && igetEnable(); } Bool_t ctbAdcs::getPlot(int i){ if (i>=0 && igetPlot(); }