| 5,7 → 5,6 |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <time.h> |
| #include <unistd.h> |
| |
| #include "daqscope.h" |
| 39,12 → 38,13 |
| TGMdiMainFrame *fMainFrame; |
| TGMdiMenuBar *fMenuBar; |
| TGLayoutHints *fMenuBarItemLayout; |
| TGPopupMenu *fMenuFile, *fMenuAnalysis, *fMenuWindow, *fMenuHelp; |
| TGPopupMenu *fMenuFile, *fMenuAnalysis, *fMenuTools, *fMenuWindow, *fMenuHelp; |
| TGPopupMenu *fMenuHisttype; |
| TGMdiSubwindow *settingsPane, *mainSubwindow, *histogramPane, *histogramPaneFile, *histogramPaneCtr; |
| |
| void InitMenu(); |
| void MeasurementLayout(); |
| void OpenWindow(int winid); |
| void CloseWindow(); |
| Bool_t About(); |
| public: |
| 91,7 → 91,13 |
| void FitSpectrum(TList *files, int q); |
| void EdgeDetection(TGraph *pdf, TGraph *cdf, char *outname, TCanvas *g1dCanvas, double pdfmax, int direction); |
| void IntegSpectrum(TList *files, int direction); |
| void PhotonMu(TList *files); |
| |
| void UpdateTempPlot(); |
| void TempEndToggle(); |
| void ExportTempPlot(); |
| void GetTempFile(int set); |
| |
| void RunMeas(void *ptr, int runCase, int zaxisscan); |
| }; |
| |
| 99,7 → 105,7 |
| const char *histExtAll = "*.root"; |
| daq *gDaq; |
| daqscope *gScopeDaq; |
| int debugSig = 0; |
| //int debugSig = 0; |
| int retTemp; |
| int gStop=0; |
| unsigned int gBuf[BSIZE]; |
| 118,6 → 124,7 |
| int ypos; |
| int zpos; |
| double temperature; |
| double angle; |
| char laserinfo[256]; |
| } evtheader; |
| |
| 150,6 → 157,7 |
| TGNumberEntry *NCH; |
| TGTextEntry *laserInfo; |
| TGNumberEntry *chtemp; |
| TGNumberEntry *incangle; |
| TGCheckButton *cleanOn; |
| |
| TGTab *setTab; |
| 194,6 → 202,13 |
| TGTextButton *prevFile; |
| TGTextButton *nextFile; |
| |
| TGTextEntry *disptime; |
| TGNumberEntry *dispbias; |
| TGTextEntry *disppos; |
| TGNumberEntry *disptemp; |
| TGNumberEntry *dispangle; |
| TGTextEntry *displaser; |
| |
| TGNumberEntry *adcMinRange; |
| TGNumberEntry *adcMaxRange; |
| TGNumberEntry *tdcMinwindow; |
| 223,6 → 238,20 |
| TGComboBox *sMeasgroup; |
| TGTextButton *scopeInit; |
| |
| TRootEmbeddedCanvas *displayCanvas; |
| TGComboBox *tempCh; |
| TGComboBox *tempDay[2]; |
| TGComboBox *tempMonth[2]; |
| TGComboBox *tempYear[2]; |
| TGComboBox *tempHour[2]; |
| TGComboBox *tempMinute[2]; |
| TGComboBox *tempSecond[2]; |
| TGTextButton *tempFile[2]; |
| TGCheckButton *tempEndOn; |
| TGTextButton *updateTemp; |
| TGTextButton *exportTemp; |
| //TGTextButton *closeTemp; |
| |
| Bool_t firstrun = kTRUE; |
| Bool_t started; |
| Bool_t cleanPlots = kTRUE; |
| 286,7 → 315,7 |
| ctemp[i] = inname[i]; |
| } |
| |
| if(debugSig) |
| if(debug) |
| printf("Outfile (remove_ext): %s\n", outname); |
| } |
| |
| 309,7 → 338,7 |
| ctemp[searchpos] = '\0'; |
| sprintf(outname, "%s", ctemp); |
| |
| if(debugSig) |
| if(debug) |
| printf("Outfile (remove_from_last): %s\n", outname); |
| } |
| |
| 393,6 → 422,452 |
| return result; |
| } |
| |
| // Temperature sensor functions ----------------------------- |
| const char* dbname = "mysql://f9lab08.ijs.si/f9phdet"; |
| const char* tblname = "fprtd122"; |
| const char* username = "f9daq"; |
| const char* userpass = "f9lab"; |
| |
| // Get the temperature from MYSQL database |
| double GetTemperature(int ch, const char *s) |
| { |
| int bin=5+7*4-ch*4; |
| char hex[16]; |
| strncpy(hex, (const char *) &s[bin], 4); |
| hex[4]=0; |
| int ix; |
| sscanf (hex,"%x",&ix); |
| //printf("0x%s\t",hex); |
| return (ix/65535.)*1050.-200.; |
| } |
| |
| // Transform local time to timestamp |
| int GetTimeStamp(int *intime) |
| { |
| time_t rawtime; |
| struct tm * timeinfo; |
| time(&rawtime); |
| timeinfo = localtime(&rawtime); |
| |
| printf("%d.%d.%d, %d:%d:%d\n", intime[0], intime[1], intime[2], intime[3], intime[4], intime[5]); |
| |
| timeinfo->tm_mday = intime[0]; |
| timeinfo->tm_mon = intime[1] - 1; |
| timeinfo->tm_year = intime[2] - 1900; |
| timeinfo->tm_hour = intime[3]; |
| timeinfo->tm_min = intime[4]; |
| timeinfo->tm_sec = intime[5]; |
| |
| return (int)mktime(timeinfo); |
| } |
| |
| // Get data from MYSQL database |
| void fieldpoint(int *timerange, int selch) |
| { |
| char humantime[256]; |
| |
| // Display selected timestamps |
| GetTime(timerange[0], humantime); |
| printf("Minimum time set to: %s (%d)\n", humantime, timerange[0]); |
| if(timerange[1] != -1) |
| { |
| GetTime(timerange[1], humantime); |
| printf("Maximum time set to: %s (%d)\n", humantime, timerange[1]); |
| } |
| printf("Selected fieldpoint channel: %d\n", selch); |
| printf("\n"); |
| |
| // Database settings |
| TSQLServer *db = TSQLServer::Connect(dbname, username, userpass); |
| printf("Server info: %s\n", db->ServerInfo()); |
| TSQLRow *row; |
| TSQLResult *res; |
| |
| // list databases available on server |
| printf("\nList all databases on server %s\n", db->GetHost()); |
| res = db->GetDataBases(); |
| while ((row = res->Next())) { |
| printf("%s\n", row->GetField(0)); |
| delete row; |
| } |
| delete res; |
| |
| // list tables in database "test" (the permission tables) |
| printf("\nList all tables in database \"f9phdet\" on server %s\n", db->GetHost()); |
| res = db->GetTables("f9phdet"); |
| while ((row = res->Next())) { |
| printf("%s\n", row->GetField(0)); |
| delete row; |
| } |
| delete res; |
| |
| // list columns in table "runcatalog" in database "mysql" |
| printf("\nList all columns in table \"f9phdet\" in database \"f9rtd122\" on server %s\n", db->GetHost()); |
| res = db->GetColumns("f9phdet", "fprtd122"); |
| while ((row = res->Next())) { |
| printf("%s\n", row->GetField(0)); |
| delete row; |
| } |
| delete res; |
| |
| // query database and print results |
| char sql[1000] = "SELECT status,data,timestamp FROM fprtd122 WHERE status='A272727272727272748' AND substring(data,1,4)='A00C' "; |
| if(timerange[1] == -1) |
| sprintf(sql,"%s AND timestamp>='%d'", sql, timerange[0]); |
| else |
| sprintf(sql,"%s AND timestamp>='%d' AND timestamp<='%d'", sql, timerange[0], timerange[1]); |
| printf("%s\n",sql); |
| |
| res = db->Query(sql); |
| |
| int nrows = res->GetRowCount(); |
| printf("\nGot %d rows in result\n", nrows); |
| |
| // Printing and plotting |
| char timeval[256]; |
| TGraph *gr; |
| gr = new TGraph(nrows); |
| gr->SetLineColor(kRed); |
| gr->SetLineWidth(1); |
| gr->SetMarkerColor(kRed); |
| gr->SetMarkerStyle(20); |
| gr->SetTitle("Temperature sensor;Time;Temperature (deg.)"); |
| |
| FILE *fp; |
| fp = fopen("./fieldpoint/dataout_fieldpoint.txt", "w"); |
| |
| if(debug) |
| printf("Time\tTemperature\n"); |
| for (int i = 0; i < nrows; i++) { |
| row = res->Next(); |
| |
| GetTime((int)atof(row->GetField(2)), timeval); |
| double x = atof(row->GetField(2)); |
| double y = GetTemperature(selch,row->GetField(1)); |
| gr->SetPoint(i,x,y); |
| |
| fprintf(fp, "%s\t%f\n",timeval,y); |
| |
| if(debug) |
| printf("%s\t%f\n",timeval,y); |
| |
| delete row; |
| } |
| |
| fclose(fp); |
| |
| delete res; |
| delete db; |
| |
| TCanvas *gCanvas = displayCanvas->GetCanvas(); |
| gCanvas->SetGrid(); |
| gr->GetXaxis()->SetTimeDisplay(1); |
| gr->GetXaxis()->SetTimeFormat("%d.%m.%H:%M"); |
| gr->GetXaxis()->SetLabelSize(0.027); |
| gr->GetXaxis()->SetTitleSize(0.038); |
| gr->GetYaxis()->SetLabelSize(0.027); |
| gr->GetYaxis()->SetTitleSize(0.038); |
| gr->GetXaxis()->SetNdivisions(515,kTRUE); |
| gr->Draw("AL"); |
| |
| gCanvas->Modified(); |
| gCanvas->Update(); |
| } |
| |
| // Update the temperature plot |
| void TGAppMainFrame::UpdateTempPlot() |
| { |
| int stime[6]; |
| int etime[6]; |
| |
| int timestamp[2]; |
| |
| time_t rtime; |
| int curyear; |
| time(&rtime); |
| curyear = (int)(localtime(&rtime))->tm_year+1900; |
| |
| int leapy = 0; |
| |
| // Getting the start time |
| stime[0] = (int)(tempDay[0]->GetSelected())+1; |
| stime[2] = curyear - (int)(tempYear[0]->GetSelected()); |
| printf("%d, %d, %d\n", stime[2], curyear, (int)(tempYear[0]->GetSelected())); |
| stime[3] = (int)(tempHour[0]->GetSelected()); |
| stime[4] = (int)(tempMinute[0]->GetSelected()); |
| stime[5] = (int)(tempSecond[0]->GetSelected()); |
| |
| switch( tempMonth[0]->GetSelected() ) |
| { |
| case 0: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 1: |
| if( stime[2]%4 == 0) |
| leapy = 1; |
| |
| if( (leapy == 1) && (stime[0] > 29) ) |
| { |
| stime[0] = 29; |
| tempDay[0]->Select(28); |
| } |
| else if( (leapy == 0) && (stime[0] > 28) ) |
| { |
| stime[0] = 28; |
| tempDay[0]->Select(27); |
| } |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 2: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 3: |
| if(stime[0] > 30) |
| { |
| stime[0] = 30; |
| tempDay[0]->Select(29); |
| } |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 4: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 5: |
| if(stime[0] > 30) |
| { |
| stime[0] = 30; |
| tempDay[0]->Select(29); |
| } |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 6: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 7: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 8: |
| if(stime[0] > 30) |
| { |
| stime[0] = 30; |
| tempDay[0]->Select(29); |
| } |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 9: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 10: |
| if(stime[0] > 30) |
| { |
| stime[0] = 30; |
| tempDay[0]->Select(29); |
| } |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| case 11: |
| stime[1] = (int)(tempMonth[0]->GetSelected())+1; |
| break; |
| default: |
| break; |
| } |
| |
| timestamp[0] = GetTimeStamp(stime); |
| printf("Start time: %d\n", timestamp[0]); |
| |
| // Getting the end time |
| etime[0] = (int)(tempDay[1]->GetSelected())+1; |
| etime[2] = curyear - (int)(tempYear[1]->GetSelected()); |
| etime[3] = (int)(tempHour[1]->GetSelected()); |
| etime[4] = (int)(tempMinute[1]->GetSelected()); |
| etime[5] = (int)(tempSecond[1]->GetSelected()); |
| |
| switch( tempMonth[1]->GetSelected() ) |
| { |
| case 0: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 1: |
| if( etime[2]%4 == 0) |
| leapy = 1; |
| |
| if( (leapy == 1) && (etime[0] > 29) ) |
| { |
| etime[0] = 29; |
| tempDay[1]->Select(28); |
| } |
| else if( (leapy == 0) && (etime[0] > 28) ) |
| { |
| etime[0] = 28; |
| tempDay[1]->Select(27); |
| } |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 2: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 3: |
| if(etime[0] > 30) |
| { |
| etime[0] = 30; |
| tempDay[1]->Select(29); |
| } |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 4: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 5: |
| if(etime[0] > 30) |
| { |
| etime[0] = 30; |
| tempDay[1]->Select(29); |
| } |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 6: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 7: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 8: |
| if(etime[0] > 30) |
| { |
| etime[0] = 30; |
| tempDay[1]->Select(29); |
| } |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 9: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 10: |
| if(etime[0] > 30) |
| { |
| etime[0] = 30; |
| tempDay[1]->Select(29); |
| } |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| case 11: |
| etime[1] = (int)(tempMonth[1]->GetSelected())+1; |
| break; |
| default: |
| break; |
| } |
| |
| if( tempEndOn->IsDown() ) |
| timestamp[1] = -1; |
| else |
| timestamp[1] = GetTimeStamp(etime); |
| printf("End time: %d\n", timestamp[1]); |
| |
| fieldpoint(timestamp, tempCh->GetSelected()); |
| } |
| |
| // Export the temperature plot to pdf |
| void TGAppMainFrame::ExportTempPlot() |
| { |
| TCanvas *gCanvas = displayCanvas->GetCanvas(); |
| gCanvas->Modified(); |
| gCanvas->Update(); |
| gCanvas->SaveAs("./fieldpoint/plotout_fieldpoint.pdf"); |
| } |
| |
| // Get time information from a saved file |
| void TGAppMainFrame::GetTempFile(int set) |
| { |
| TGFileInfo file_info; |
| const char *filetypes[] = {"Histograms",histExtAll,0,0}; |
| file_info.fFileTypes = filetypes; |
| file_info.fIniDir = StrDup("./results"); |
| file_info.fMultipleSelection = kFALSE; |
| new TGFileDialog(gClient->GetDefaultRoot(), fMain, kFDOpen, &file_info); |
| int i = 0; |
| |
| TTree *header_data; |
| time_t rtime, ctime; |
| struct tm * timeinfo; |
| |
| int curyear; |
| time(&ctime); |
| curyear = (int)(localtime(&ctime))->tm_year+1900; |
| |
| TList *files = file_info.fFileNamesList; |
| TString fname; |
| // If multiple files were selected, only use the first one |
| if(files) |
| { |
| printf("Using only the first selected file.\n"); |
| |
| TSystemFile *file; |
| TIter next(files); |
| while(i == 0) |
| { |
| file=(TSystemFile*)next(); |
| fname = file->GetName(); |
| i++; |
| } |
| } |
| // If only one file was selected, use it |
| else |
| fname = file_info.fFilename; |
| |
| if((int)fname.Length() > 0) |
| { |
| inroot = new TFile(fname, "READ"); |
| |
| inroot->GetObject("header_data", header_data); |
| |
| // Reading the timestamp information |
| header_data->SetBranchAddress("timestamp", &evtheader.timestamp); |
| header_data->GetEntry(0); |
| |
| rtime = (time_t)evtheader.timestamp; |
| timeinfo = localtime(&rtime); |
| // printf("Time: %d.%d.%d, %d:%d:%d\n", timeinfo->tm_mday, timeinfo->tm_mon+1, timeinfo->tm_year+1900, timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec); |
| |
| tempDay[set]->Select(timeinfo->tm_mday - 1); |
| tempMonth[set]->Select(timeinfo->tm_mon); |
| tempYear[set]->Select(curyear - (timeinfo->tm_year+1900)); |
| tempHour[set]->Select(timeinfo->tm_hour); |
| tempMinute[set]->Select(timeinfo->tm_min); |
| tempSecond[set]->Select(timeinfo->tm_sec); |
| } |
| else |
| printf("No file selected.\n"); |
| |
| delete inroot; |
| } |
| |
| // Toggle the endtime settings for temperature sensor |
| void TGAppMainFrame::TempEndToggle() |
| { |
| if( tempEndOn->IsDown() ) |
| { |
| tempDay[1]->SetEnabled(kFALSE); |
| tempMonth[1]->SetEnabled(kFALSE); |
| tempYear[1]->SetEnabled(kFALSE); |
| tempHour[1]->SetEnabled(kFALSE); |
| tempMinute[1]->SetEnabled(kFALSE); |
| tempSecond[1]->SetEnabled(kFALSE); |
| tempFile[1]->SetEnabled(kFALSE); |
| } |
| else |
| { |
| tempDay[1]->SetEnabled(kTRUE); |
| tempMonth[1]->SetEnabled(kTRUE); |
| tempYear[1]->SetEnabled(kTRUE); |
| tempHour[1]->SetEnabled(kTRUE); |
| tempMinute[1]->SetEnabled(kTRUE); |
| tempSecond[1]->SetEnabled(kTRUE); |
| tempFile[1]->SetEnabled(kTRUE); |
| } |
| } |
| |
| // -------------------------------------------------------------- |
| |
| // Class related functions -------------------------------------- |
| |
| // Apply the upper voltage limit from settings pane to main window |
| 889,6 → 1364,11 |
| #if WORKSTAT == 'I' || WORKSTAT == 'S' |
| scopeReturn->SetText(ret); |
| #endif |
| |
| #if WORKSTAT == 'O' |
| sprintf(ret, "Program running in offline mode. Use I or S when configuring..."); |
| scopeReturn->SetText(ret); |
| #endif |
| } |
| |
| // When we select the measurement type, change other scope settings accordingly |
| 1182,16 → 1662,23 |
| // Write out parameters to a file |
| fp = fopen(paramname, "a"); |
| |
| fprintf(fp, "%d\t", nrfit); |
| TMath::Sort(nrfit, meanparam, sortindex, kFALSE); |
| |
| // Only save the ones that do not have a too large error on peak separation for the first three peaks |
| if( ((TMath::Abs(meanparamerr[sortindex[2]]) + TMath::Abs(meanparamerr[sortindex[1]]))/(meanparam[sortindex[2]] - meanparam[sortindex[1]]) < accError->GetNumber()) && ((TMath::Abs(meanparamerr[sortindex[3]]) + TMath::Abs(meanparamerr[sortindex[2]]))/(meanparam[sortindex[3]] - meanparam[sortindex[2]]) < accError->GetNumber()) && ((TMath::Abs(meanparamerr[sortindex[4]]) + TMath::Abs(meanparamerr[sortindex[3]]))/(meanparam[sortindex[4]] - meanparam[sortindex[3]]) < accError->GetNumber()) ) |
| // if( (seperr[0][0]/sep[0][0] < accError->GetNumber()) && (seperr[1][0]/sep[1][0] < accError->GetNumber()) && (seperr[2][0]/sep[2][0] < accError->GetNumber()) ) |
| { |
| fprintf(fp, "%le\t%d\t", dtemp, nrfit); |
| |
| for(int i = 0; i < nrfit; i++) |
| { |
| if(debugSig) |
| printf("Peak %d: %lf\t%lf\n", i+1, meanparam[sortindex[i]], meanparamerr[sortindex[i]]); |
| if(debug) |
| printf("Peak %d (%lfV): %lf\t%lf\n", i+1, dtemp, meanparam[sortindex[i]], meanparamerr[sortindex[i]]); |
| fprintf(fp, "%le\t%le\t", meanparam[sortindex[i]], meanparamerr[sortindex[i]]); |
| } |
| printf("\n"); |
| fprintf(fp, "\n"); |
| } |
| |
| fclose(fp); |
| |
| 1222,7 → 1709,7 |
| volt[p] = dtemp; |
| volterr[p] = 1.e-4; |
| |
| if(debugSig) |
| if(debug) |
| printf("p=%d:\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n", p, volt[p], sep[0][p], seperr[0][p], sep[1][p], seperr[1][p], sep[2][p], seperr[2][p]); |
| |
| // Accept only the points with a small enough error |
| 1444,7 → 1931,7 |
| { |
| zb = i-j+za; |
| integralCount[zb] = integralAcc[za]/maxInteg; |
| if(debugSig) |
| if(debug) |
| printf("Integral check 2 (i=%d,j=%d,za=%d,z=%.2lf,zb=%d): %lf\t%lf\n", i, j, za, surfz[i-j], zb, integralCount[zb], integralAcc[za]/maxInteg); |
| } |
| |
| 1501,7 → 1988,7 |
| if(surfz[i] == curzval) |
| { |
| integralAcc[j] = integralCount[i]; |
| if(debugSig) |
| if(debug) |
| printf("Integral check 1 (i=%d,j=%d,z=%.2lf): %lf\t%lf\n", i, j, surfz[i], integralCount[i], integralAcc[j]); |
| j++; |
| acc++; |
| 1519,7 → 2006,7 |
| { |
| zb = i-j+za; |
| integralCount[zb] = integralAcc[za]/maxInteg; |
| if(debugSig) |
| if(debug) |
| printf("Integral check 2 (i=%d,j=%d,za=%d,z=%.2lf,zb=%d): %lf\t%lf\n", i, j, za, surfz[i-j], zb, integralCount[zb], integralAcc[za]/maxInteg); |
| } |
| |
| 1602,13 → 2089,13 |
| { |
| if(direction == 1) |
| { |
| if(debugSig) |
| if(debug) |
| printf("%.2lf\t%.2lf\t%lf\n", surfx[i], surfz[i], integralCount[i]); |
| gScan2D->SetPoint(i, surfx[i], surfz[i], integralCount[i]); |
| } |
| else if(direction == 2) |
| { |
| if(debugSig) |
| if(debug) |
| printf("%.2lf\t%.2lf\t%lf\n", surfy[i], surfz[i], integralCount[i]); |
| gScan2D->SetPoint(i, surfy[i], surfz[i], integralCount[i]); |
| } |
| 1655,6 → 2142,226 |
| } |
| } |
| |
| // Integrate the spectrum |
| void TGAppMainFrame::PhotonMu(TList *files) |
| { |
| unsigned int nrfiles = fileList->GetNumberOfEntries(); |
| char ctemp[256]; |
| int j, k = 0, m = 0, n = 0, k2 = 0, m2 = 0; |
| |
| // TCanvas *gCanvas = new TCanvas("canv","canv",900,900); |
| TTree *header_data, *meas_data; |
| double *integralCount, *integralPedestal; |
| integralCount = new double[nrfiles]; |
| integralPedestal = new double[nrfiles]; |
| // double xsurfmin, ysurfmin, zsurfmin; |
| double *angle; |
| double *muval; |
| angle = new double[nrfiles]; |
| muval = new double[nrfiles]; |
| for(int i = 0; i < (int)nrfiles; i++) {integralCount[i] = 0; integralPedestal[i] = 0; } |
| |
| // TGraph *gScan[2]; // graph for angle dependence |
| int nrentries; |
| // double minInteg, maxInteg; |
| |
| // char exportname[256]; |
| |
| TSpectrum *spec; |
| TH1F *histtemp; |
| TH1 *histback; |
| TH1F *h2; |
| float *xpeaks; |
| TF1 *fit; |
| TF1 *fittingfunc; |
| double *fparam; |
| double meanparam; |
| int adcpedestal[2]; |
| double paramsigma = 0; |
| |
| if(files->GetSize() > 0) |
| { |
| for(int i = 0; i < (int)files->GetSize(); i++) |
| { |
| n++; |
| if(files->At(i)) |
| { |
| // Find the pedestal peak and the first minimum after pedestal ---------------- |
| DisplayHistogram( (char*)(files->At(i)->GetTitle()), 0); |
| histCanvas->GetCanvas()->Modified(); |
| histCanvas->GetCanvas()->Update(); |
| |
| histtemp = (TH1F*)histCanvas->GetCanvas()->GetPrimitive(histname); |
| npeaks = 1; |
| double par[300]; |
| spec = new TSpectrum(npeaks); |
| // Find spectrum background |
| histback = spec->Background(histtemp, (int)fitInter->GetNumber(), "same"); |
| // Clone histogram and subtract background from it |
| h2 = (TH1F*)histtemp->Clone("h2"); |
| h2->Add(histback, -1); |
| // Search for the peaks |
| int found = spec->Search(h2, fitSigma->GetNumber(), "goff", fitTresh->GetNumber() ); |
| printf("Found %d candidates to fit.\n",found); |
| npeaks = found; |
| |
| xpeaks = spec->GetPositionX(); |
| for(j = 0; j < found; j++) |
| { |
| float xp = xpeaks[j]; |
| int bin = h2->GetXaxis()->FindBin(xp); |
| float yp = h2->GetBinContent(bin); |
| par[3*j] = yp; |
| par[3*j+1] = xp; |
| par[3*j+2] = (double)fitSigma->GetNumber(); |
| } |
| |
| // Fit the histogram |
| fit = new TF1("fit", FindPeaks, 0, 400, 3*npeaks); |
| TVirtualFitter::Fitter(histtemp, 3*npeaks); |
| fit->SetParameters(par); |
| fit->SetNpx(300); |
| h2->Fit("fit","Q"); // for quiet mode, add Q |
| fittingfunc = h2->GetFunction("fit"); |
| fparam = fittingfunc->GetParameters(); |
| |
| // Gather the parameters (mean peak value for now) |
| j = 1; |
| |
| meanparam = fparam[j]; |
| paramsigma = fparam[j+1]; |
| |
| /* while(1) |
| { |
| if( (fparam[j] < 1.E-30) || (fparamerr[j] < 1.E-10) ) |
| break; |
| else |
| { |
| if(fparam[j] > 0) |
| { |
| meanparam = fparam[j]; |
| meanparamerr = fparamerr[j]; |
| paramsigma = fparam[j+1]; |
| nrfit++; |
| } |
| } |
| |
| j+=3; |
| } |
| */ |
| histCanvas->GetCanvas()->Modified(); |
| histCanvas->GetCanvas()->Update(); |
| |
| j = 0; |
| adcpedestal[0] = 0; |
| adcpedestal[1] = -1; |
| while(1) |
| { |
| int bin = histtemp->GetXaxis()->FindBin((int)(j+meanparam+paramsigma)); |
| |
| int yp = histtemp->GetBinContent(bin); |
| if(adcpedestal[1] == -1) |
| { |
| adcpedestal[0] = j+meanparam+paramsigma; |
| adcpedestal[1] = yp; |
| } |
| else |
| { |
| if(adcpedestal[1] >= yp) |
| { |
| adcpedestal[0] = j+meanparam+paramsigma; |
| adcpedestal[1] = yp; |
| } |
| else |
| break; |
| } |
| |
| j++; |
| if(j > 50) break; |
| } |
| |
| cout << "Pedestal ends with ADC value: " << adcpedestal[0] << endl; |
| |
| // ---------------------------------------------------------------------------- |
| |
| sprintf(ctemp, "%s", files->At(i)->GetTitle()); |
| inroot = new TFile(ctemp, "READ"); |
| |
| inroot->GetObject("header_data", header_data); |
| inroot->GetObject("meas_data", meas_data); |
| |
| // Reading the header |
| // header_data->SetBranchAddress("angle", &evtheader.angle); |
| // header_data->GetEntry(0); |
| |
| char rdc[256]; |
| j = selectCh->GetNumber(); |
| double rangetdc[2]; |
| rangetdc[0] = tdcMinwindow->GetNumber(); |
| rangetdc[1] = tdcMaxwindow->GetNumber(); |
| |
| k = 0; |
| k2 = 0; |
| m = 0; |
| m2 = 0; |
| |
| // Reading the data |
| for(int e = 0; e < meas_data->GetEntries(); e++) |
| { |
| sprintf(rdc, "ADC%d", j); |
| meas_data->SetBranchAddress(rdc, &evtdata.adcdata[j]); |
| meas_data->GetEntry(e); |
| |
| sprintf(rdc, "TDC%d", j); |
| meas_data->SetBranchAddress(rdc, &evtdata.tdcdata[j]); |
| meas_data->GetEntry(e); |
| |
| // If our data point is inside the TDC window |
| if( ((double)evtdata.tdcdata[j]/tdctimeconversion >= rangetdc[0]) && ((double)evtdata.tdcdata[j]/tdctimeconversion <= rangetdc[1]) ) |
| { |
| // Gather only the integral of the pedestal |
| if((double)evtdata.adcdata[j] < (double)adcpedestal[0]+0.5 ) |
| { |
| k2++; |
| m2 += evtdata.adcdata[j]; |
| } |
| |
| // Gather the complete integral |
| k++; |
| m += evtdata.adcdata[j]; |
| } |
| } |
| |
| // angle[i] = (double)(evtheader.angle); |
| angle[i] = (double)(i*15.*TMath::ACos(-1.)/180.); // angle in radians |
| cout << "Angle = " << angle[i] << endl; |
| |
| // integralCount[i] += ((double)m)/((double)k); |
| integralCount[i] += (double)m; |
| cout << "Integral (" << k << " evts) = " << integralCount[i] << endl; |
| |
| integralPedestal[i] += (double)m2; |
| cout << "Integral (" << k2 << " evts) = " << integralPedestal[i] << endl; |
| |
| muval[i] = -TMath::Log((double)k2/(double)k); |
| cout << "Mu = " << muval[i] << endl; |
| |
| delete inroot; |
| } |
| } |
| |
| nrentries = n; |
| printf("%d files were selected.\n", nrentries); |
| |
| cout << "angle\tmu\trelative PDE\n" << endl; |
| for(int i = 0; i < (int)files->GetSize(); i++) |
| { |
| // Relative PDE calculation |
| cout << angle[i] << "\t" << muval[i] << "\t" << muval[i]/(muval[0]*TMath::Cos(angle[i])) << endl; |
| } |
| } |
| } |
| |
| void TGAppMainFrame::RunMeas(void *ptr, int runCase, int zaxisscan) |
| { |
| printf("Start of Run, run case %d\n", runCase); |
| 1773,6 → 2480,7 |
| evtheader.ypos = (int)yPos->GetNumber(); |
| evtheader.zpos = (int)zPos->GetNumber(); |
| evtheader.temperature = (double)chtemp->GetNumber(); |
| evtheader.angle = (double)incangle->GetNumber(); |
| sprintf(evtheader.laserinfo, "%s", laserInfo->GetText()); |
| |
| char histtime[256]; |
| 2311,7 → 3019,7 |
| { |
| if(files->At(i)) |
| { |
| if(debugSig) |
| if(debug) |
| printf("Filename: %s\n", files->At(i)->GetTitle()); |
| if( fMenuHisttype->IsEntryChecked(M_ANALYSIS_HISTTYPE_1DADC) ) |
| DisplayHistogram( (char*)(files->At(i)->GetTitle()), 0); |
| 2330,7 → 3038,7 |
| // Display the currently selected histogram in file list |
| void TGAppMainFrame::DisplayHistogram(char* histfile, int histtype) |
| { |
| if(debugSig) |
| if(debug) |
| printf("Selected file: %s\n", histfile); |
| |
| TCanvas *gCanvas = histCanvas->GetCanvas(); |
| 2356,6 → 3064,8 |
| header_data->GetEntry(0); |
| header_data->SetBranchAddress("temperature", &evtheader.temperature); |
| header_data->GetEntry(0); |
| header_data->SetBranchAddress("angle", &evtheader.angle); |
| header_data->GetEntry(0); |
| header_data->SetBranchAddress("laserinfo", &evtheader.laserinfo); |
| header_data->GetEntry(0); |
| |
| 2362,7 → 3072,8 |
| char histtime[256]; |
| GetTime(evtheader.timestamp, histtime); |
| |
| if(debugSig) |
| // Displaying header information (debug and on the GUI) |
| if(debug) |
| { |
| printf("Opened file header information:\n"); |
| printf("- Number of channels: %d\n", evtheader.nrch); |
| 2369,10 → 3080,28 |
| printf("- Timestamp: %d (%s)\n", evtheader.timestamp, histtime); |
| printf("- Bias voltage: %lf\n", evtheader.biasvolt); |
| printf("- Table position (X,Y,Z): %d, %d, %d\n", evtheader.xpos, evtheader.ypos, evtheader.zpos); |
| if(evtheader.temperature) |
| printf("- Temperature: %lf\n", evtheader.temperature); |
| if(evtheader.angle) |
| printf("- Incidence angle: %lf\n", evtheader.angle); |
| printf("- Laser and filter settings: %s\n", evtheader.laserinfo); |
| } |
| |
| char ctemp[512]; |
| disptime->SetText(histtime); |
| dispbias->SetNumber(evtheader.biasvolt); |
| sprintf(ctemp, "%d, %d, %d", evtheader.xpos, evtheader.ypos, evtheader.zpos); |
| disppos->SetText(ctemp); |
| if(evtheader.temperature) |
| disptemp->SetNumber(evtheader.temperature); |
| else |
| disptemp->SetNumber(0.0); |
| if(evtheader.angle) |
| dispangle->SetNumber(evtheader.angle); |
| else |
| dispangle->SetNumber(0.0); |
| displaser->SetText(evtheader.laserinfo); |
| |
| int j; |
| char rdc[256]; |
| char rdcsel[256]; |
| 2741,7 → 3470,7 |
| { |
| if(files->At(i)) |
| { |
| if(debugSig) |
| if(debug) |
| printf("Filename: %s\n", files->At(i)->GetTitle()); |
| if( fMenuHisttype->IsEntryChecked(M_ANALYSIS_HISTTYPE_1DADC) ) |
| DisplayHistogram( (char*)(files->At(i)->GetTitle()), 0); |
| 2771,7 → 3500,7 |
| { |
| if(files->At(i)) |
| { |
| if(debugSig) |
| if(debug) |
| printf("Filename: %s\n", files->At(i)->GetTitle()); |
| if( fMenuHisttype->IsEntryChecked(M_ANALYSIS_HISTTYPE_1DADC) ) |
| DisplayHistogram( (char*)(files->At(i)->GetTitle()), 0); |
| 2900,7 → 3629,7 |
| { |
| remove_ext((char*)files->At(i)->GetTitle(), ctemp); |
| |
| if(debugSig) |
| if(debug) |
| printf("Filename: %s\n", files->At(i)->GetTitle()); |
| if( fMenuHisttype->IsEntryChecked(M_ANALYSIS_HISTTYPE_1DADC) ) |
| { |
| 3021,6 → 3750,18 |
| IntegSpectrum(files, 2); |
| break; |
| |
| case M_ANALYSIS_PHOTMU: |
| // Integrate the current spectra and calculate mean of detected photons: mu = -log(Nped/Ntot) |
| files = new TList(); |
| fileList->GetSelectedEntries(files); |
| |
| PhotonMu(files); |
| break; |
| |
| case M_TOOLS_FIELDPOINT: |
| OpenWindow(1); |
| break; |
| |
| case M_WINDOW_HOR: |
| fMainFrame->TileHorizontal(); |
| break; |
| 3066,7 → 3807,12 |
| fMenuAnalysis->AddEntry(new TGHotString("Fit &all selected"), M_ANALYSIS_FITSEL); |
| fMenuAnalysis->AddEntry(new TGHotString("Integrate spectrum (&X direction)"), M_ANALYSIS_INTEGX); |
| fMenuAnalysis->AddEntry(new TGHotString("Integrate spectrum (&Y direction)"), M_ANALYSIS_INTEGY); |
| fMenuAnalysis->AddEntry(new TGHotString("Relative &PDE"), M_ANALYSIS_PHOTMU); |
| |
| // Popup menu in menubar for External tools |
| fMenuTools = new TGPopupMenu(gClient->GetRoot()); // adds a new popup menu to the menubar |
| fMenuTools->AddEntry(new TGHotString("&Fieldpoint temperature sensor"), M_TOOLS_FIELDPOINT); |
| |
| // Popup menu in menubar for Window controls |
| fMenuWindow = new TGPopupMenu(gClient->GetRoot()); // adds a new popup menu to the menubar |
| fMenuWindow->AddEntry(new TGHotString("Tile &Horizontally"), M_WINDOW_HOR); |
| 3080,6 → 3826,7 |
| // Connect all menu items with actions - handled by HandleMenu() |
| fMenuFile->Connect("Activated(Int_t)", "TGAppMainFrame", this, "HandleMenu(Int_t)"); |
| fMenuAnalysis->Connect("Activated(Int_t)", "TGAppMainFrame", this, "HandleMenu(Int_t)"); |
| fMenuTools->Connect("Activated(Int_t)", "TGAppMainFrame", this, "HandleMenu(Int_t)"); |
| fMenuWindow->Connect("Activated(Int_t)", "TGAppMainFrame", this, "HandleMenu(Int_t)"); |
| fMenuHelp->Connect("Activated(Int_t)", "TGAppMainFrame", this, "HandleMenu(Int_t)"); |
| |
| 3086,6 → 3833,7 |
| // Draw the created popup menus on the menubar |
| fMenuBar->AddPopup(new TGHotString("&File"), fMenuFile, fMenuBarItemLayout); |
| fMenuBar->AddPopup(new TGHotString("&Analysis"),fMenuAnalysis,fMenuBarItemLayout); |
| fMenuBar->AddPopup(new TGHotString("&Tools"),fMenuTools,fMenuBarItemLayout); |
| fMenuBar->AddPopup(new TGHotString("&Windows"),fMenuWindow,fMenuBarItemLayout); |
| fMenuBar->AddPopup(new TGHotString("&Help"), fMenuHelp, fMenuBarItemLayout); |
| } |
| 3195,6 → 3943,15 |
| fH1->AddFrame(chtemp, f0center2d); |
| mdiFrame->AddFrame(fH1, f2); |
| |
| // Incidence angle (will only be manually set until we can make it motorized) |
| fH1 = new TGHorizontalFrame(mdiFrame, subgroup[0], 30); |
| lab = new TGLabel(fH1, "Incid. angle:"); |
| fH1->AddFrame(lab, f0center2d); |
| incangle = new TGNumberEntry(fH1, 0.0, 6, 999, TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAAnyNumber, TGNumberFormat::kNELLimitMinMax, -180., 180.); |
| incangle->Resize(60,22); |
| fH1->AddFrame(incangle, f0center2d); |
| mdiFrame->AddFrame(fH1, f2); |
| |
| mdiFrame->SetMdiHints(kMdiMinimize); |
| mdiFrame->SetWindowName("Settings pane"); |
| mdiFrame->MapSubwindows(); |
| 3666,7 → 4423,7 |
| // List view of the opened files |
| fileList = new TGListBox(mdiFrame,1); |
| fileList->GetVScrollbar(); |
| fileList->Resize(300, (subwin[1]/2)-10 ); |
| fileList->Resize(300, (3*subwin[1]/7)-10 ); |
| mdiFrame->AddFrame(fileList, f2); |
| |
| // Multiple file selection toggle, previous/next controls and clear list |
| 3700,6 → 4457,57 |
| fH1->AddFrame(prevFile, f0right); |
| mdiFrame->AddFrame(fH1, f2); |
| |
| // Header information of opened file |
| fG1 = new TGGroupFrame(mdiFrame, "Opened file header information"); |
| fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
| lab = new TGLabel(fH1, "Time:"); |
| fH1->AddFrame(lab, f0centery); |
| disptime = new TGTextEntry(fH1, ""); |
| disptime->Resize(440,22); |
| disptime->SetState(kFALSE); |
| fH1->AddFrame(disptime, f0centery); |
| fG1->AddFrame(fH1, f2); |
| |
| fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
| lab = new TGLabel(fH1, "Bias voltage:"); |
| fH1->AddFrame(lab, f0centery); |
| dispbias = new TGNumberEntry(fH1, 0.00, 4, 999, TGNumberFormat::kNESRealThree, TGNumberFormat::kNEAAnyNumber); |
| dispbias->Resize(80,22); |
| dispbias->SetState(kFALSE); |
| fH1->AddFrame(dispbias, f0centery); |
| |
| lab = new TGLabel(fH1, "Position:"); |
| fH1->AddFrame(lab, f0centery); |
| disppos = new TGTextEntry(fH1, ""); |
| disppos->Resize(200,22); |
| disppos->SetState(kFALSE); |
| fH1->AddFrame(disppos, f0centery); |
| |
| lab = new TGLabel(fH1, "Temperature:"); |
| fH1->AddFrame(lab, f0centery); |
| disptemp = new TGNumberEntry(fH1, 0.0, 6, 999, TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAAnyNumber); |
| disptemp->Resize(80,22); |
| disptemp->SetState(kFALSE); |
| fH1->AddFrame(disptemp, f0centery); |
| |
| lab = new TGLabel(fH1, "Angle:"); |
| fH1->AddFrame(lab, f0centery); |
| dispangle = new TGNumberEntry(fH1, 0.0, 6, 999, TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAAnyNumber); |
| dispangle->Resize(80,22); |
| dispangle->SetState(kFALSE); |
| fH1->AddFrame(dispangle, f0centery); |
| fG1->AddFrame(fH1, f2); |
| |
| fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
| lab = new TGLabel(fH1, "Laser settings:"); |
| fH1->AddFrame(lab, f0centery); |
| displaser = new TGTextEntry(fH1, ""); |
| displaser->Resize(440,22); |
| displaser->SetState(kFALSE); |
| fH1->AddFrame(displaser, f0centery); |
| fG1->AddFrame(fH1, f2); |
| mdiFrame->AddFrame(fG1, f2); |
| |
| mdiFrame->SetMdiHints(kMdiMinimize); |
| mdiFrame->SetWindowName("Histogram file selection"); |
| mdiFrame->MapSubwindows(); |
| 3814,7 → 4622,7 |
| fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
| lab = new TGLabel(fH1, "Peak sigma:"); |
| fH1->AddFrame(lab, f0centery); |
| fitSigma = new TGNumberEntry(fH1, 1.5, 3, 999, TGNumberFormat::kNESRealThree, TGNumberFormat::kNEANonNegative); |
| fitSigma = new TGNumberEntry(fH1, 1.2, 3, 999, TGNumberFormat::kNESRealThree, TGNumberFormat::kNEANonNegative); |
| fitSigma->Resize(60,22); |
| fH1->AddFrame(fitSigma, f0centery); |
| fG1->AddFrame(fH1, f2); |
| 3830,7 → 4638,7 |
| fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
| lab = new TGLabel(fH1, "Background interpolation:"); |
| fH1->AddFrame(lab, f0centery); |
| fitInter = new TGNumberEntry(fH1, 8, 3, 999, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); |
| fitInter = new TGNumberEntry(fH1, 7, 3, 999, TGNumberFormat::kNESInteger, TGNumberFormat::kNEANonNegative); |
| fitInter->Resize(60,22); |
| fH1->AddFrame(fitInter, f0centery); |
| fG1->AddFrame(fH1, f2); |
| 3845,7 → 4653,7 |
| |
| exfitplots = new TGCheckButton(fG1, "Export fitting plots ON/OFF"); |
| exfitplots->Resize(50,22); |
| exfitplots->SetState(kButtonDown); |
| exfitplots->SetState(kButtonUp); |
| fG1->AddFrame(exfitplots, f0centerx); |
| mdiFrame->AddFrame(fG1, f2); |
| |
| 3927,6 → 4735,342 |
| } |
| |
| //--------------------------------------------------------------- |
| // Opening a new subwindow |
| |
| void TGAppMainFrame::OpenWindow(int winid) |
| { |
| /* WinID: |
| * - 1 = fieldpoint temperature sensor |
| */ |
| |
| TGMdiFrame *mdiFrame; |
| |
| // Generic horizontal and vertical frames |
| TGHorizontalFrame *fH1, *fH2; |
| TGGroupFrame *fG1; |
| TGLabel *lab; |
| |
| int subwin[2]; |
| int subgroup[2]; |
| |
| char ctemp[256]; |
| |
| // Fieldpoint pane ------------------------------------------------------------------------- |
| if(winid == 1) |
| { |
| time_t rtime; |
| int yearrange[2]; |
| |
| subwin[0] = 3*((winWidth/4)-5); subwin[1] = (int)(2*((winHeight/3)-5))+10; |
| histogramPaneCtr = new TGMdiSubwindow(fMainFrame, subwin[0], subwin[1]); |
| mdiFrame = histogramPaneCtr->GetMdiFrame(); |
| |
| subgroup[0] = subwin[0]-10; |
| subgroup[1] = 7*subwin[1]/12; |
| |
| // Display canvas for temperature sensor |
| displayCanvas = new TRootEmbeddedCanvas("displayCanvas",mdiFrame,subgroup[0],subgroup[1]); |
| mdiFrame->AddFrame(displayCanvas, f0centerx); |
| TCanvas *gCanvas = displayCanvas->GetCanvas(); |
| gCanvas->SetGridx(); |
| gCanvas->SetGridy(); |
| |
| fG1 = new TGGroupFrame(mdiFrame, "Temperature sensor settings"); |
| // Channel selector |
| fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
| lab = new TGLabel(fH1, "Fieldpoint channel:"); |
| fH1->AddFrame(lab, f0centery); |
| tempCh = new TGComboBox(fH1, 200); |
| tempCh->AddEntry("0", 0); |
| tempCh->AddEntry("1", 1); |
| tempCh->AddEntry("2", 2); |
| tempCh->AddEntry("3", 3); |
| tempCh->AddEntry("4", 4); |
| tempCh->AddEntry("5", 5); |
| tempCh->AddEntry("6", 6); |
| tempCh->AddEntry("7", 7); |
| tempCh->Resize(50,22); |
| tempCh->Select(1); |
| fH1->AddFrame(tempCh, f0centery); |
| fG1->AddFrame(fH1, f2); |
| |
| // Start and stop time ------------------------ |
| time(&rtime); |
| |
| lab = new TGLabel(fG1, "Start time:"); |
| fG1->AddFrame(lab, f0); |
| fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
| // Start day |
| lab = new TGLabel(fH1, "\tDay: "); |
| fH1->AddFrame(lab, f0centery); |
| tempDay[0] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 31; i++) |
| { |
| sprintf(ctemp, "%d", i+1); |
| tempDay[0]->AddEntry(ctemp, i); |
| } |
| tempDay[0]->Resize(50,22); |
| tempDay[0]->Select((int)(localtime(&rtime))->tm_mday-1); |
| fH1->AddFrame(tempDay[0], f0centery); |
| |
| // Start month |
| lab = new TGLabel(fH1, " Month: "); |
| fH1->AddFrame(lab, f0centery); |
| tempMonth[0] = new TGComboBox(fH1, 200); |
| tempMonth[0]->AddEntry("January", 0); |
| tempMonth[0]->AddEntry("February", 1); |
| tempMonth[0]->AddEntry("March", 2); |
| tempMonth[0]->AddEntry("April", 3); |
| tempMonth[0]->AddEntry("May", 4); |
| tempMonth[0]->AddEntry("June", 5); |
| tempMonth[0]->AddEntry("July", 6); |
| tempMonth[0]->AddEntry("August", 7); |
| tempMonth[0]->AddEntry("September", 8); |
| tempMonth[0]->AddEntry("October", 9); |
| tempMonth[0]->AddEntry("November", 10); |
| tempMonth[0]->AddEntry("December", 11); |
| tempMonth[0]->Resize(80,22); |
| tempMonth[0]->Select((int)(localtime(&rtime))->tm_mon); |
| fH1->AddFrame(tempMonth[0], f0centery); |
| |
| // Start year |
| yearrange[0] = 2010; |
| yearrange[1] = (int)(localtime(&rtime))->tm_year+1900; |
| |
| lab = new TGLabel(fH1, " Year: "); |
| fH1->AddFrame(lab, f0centery); |
| tempYear[0] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < (yearrange[1]-yearrange[0])+1; i++) |
| { |
| sprintf(ctemp, "%d", yearrange[1]-i); |
| tempYear[0]->AddEntry(ctemp, i); |
| } |
| tempYear[0]->Resize(60,22); |
| tempYear[0]->Select(0); |
| fH1->AddFrame(tempYear[0], f0centery); |
| |
| // Start hour |
| lab = new TGLabel(fH1, " Hour: "); |
| fH1->AddFrame(lab, f0centery); |
| tempHour[0] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 24; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempHour[0]->AddEntry(ctemp, i); |
| } |
| tempHour[0]->Resize(50,22); |
| tempHour[0]->Select(7); |
| fH1->AddFrame(tempHour[0], f0centery); |
| |
| // Start minute |
| lab = new TGLabel(fH1, " Minute: "); |
| fH1->AddFrame(lab, f0centery); |
| tempMinute[0] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 60; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempMinute[0]->AddEntry(ctemp, i); |
| } |
| tempMinute[0]->Resize(50,22); |
| tempMinute[0]->Select(0); |
| fH1->AddFrame(tempMinute[0], f0centery); |
| |
| // Start second |
| lab = new TGLabel(fH1, " Second: "); |
| fH1->AddFrame(lab, f0centery); |
| tempSecond[0] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 60; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempSecond[0]->AddEntry(ctemp, i); |
| } |
| tempSecond[0]->Resize(50,22); |
| tempSecond[0]->Select(0); |
| fH1->AddFrame(tempSecond[0], f0centery); |
| |
| // Get start time from file |
| lab = new TGLabel(fH1, " "); |
| fH1->AddFrame(lab, f0centery); |
| tempFile[0] = new TGTextButton(fH1, "Get from file..."); |
| tempFile[0]->SetTextJustify(36); |
| tempFile[0]->SetWrapLength(-1); |
| tempFile[0]->Resize(100,22); |
| fH1->AddFrame(tempFile[0], f0centery); |
| |
| fG1->AddFrame(fH1, f2); |
| |
| // Use the end time or not |
| tempEndOn = new TGCheckButton(fG1, "Draw to last time point (ON/OFF)"); |
| tempEndOn->Resize(100,22); |
| tempEndOn->SetState(kButtonUp); |
| fG1->AddFrame(tempEndOn, f0); |
| |
| lab = new TGLabel(fG1, "End time:"); |
| fG1->AddFrame(lab, f0); |
| fH1 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
| // End day |
| lab = new TGLabel(fH1, "\tDay: "); |
| fH1->AddFrame(lab, f0centery); |
| tempDay[1] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 31; i++) |
| { |
| sprintf(ctemp, "%d", i+1); |
| tempDay[1]->AddEntry(ctemp, i); |
| } |
| tempDay[1]->Resize(50,22); |
| tempDay[1]->Select((int)(localtime(&rtime))->tm_mday-1); |
| fH1->AddFrame(tempDay[1], f0centery); |
| |
| // End month |
| lab = new TGLabel(fH1, " Month: "); |
| fH1->AddFrame(lab, f0centery); |
| tempMonth[1] = new TGComboBox(fH1, 200); |
| tempMonth[1]->AddEntry("January", 0); |
| tempMonth[1]->AddEntry("February", 1); |
| tempMonth[1]->AddEntry("March", 2); |
| tempMonth[1]->AddEntry("April", 3); |
| tempMonth[1]->AddEntry("May", 4); |
| tempMonth[1]->AddEntry("June", 5); |
| tempMonth[1]->AddEntry("July", 6); |
| tempMonth[1]->AddEntry("August", 7); |
| tempMonth[1]->AddEntry("September", 8); |
| tempMonth[1]->AddEntry("October", 9); |
| tempMonth[1]->AddEntry("November", 10); |
| tempMonth[1]->AddEntry("December", 11); |
| tempMonth[1]->Resize(80,22); |
| tempMonth[1]->Select((int)(localtime(&rtime))->tm_mon); |
| fH1->AddFrame(tempMonth[1], f0centery); |
| |
| // End year |
| time(&rtime); |
| yearrange[0] = 2010; |
| yearrange[1] = (int)(localtime(&rtime))->tm_year+1900; |
| |
| lab = new TGLabel(fH1, " Year: "); |
| fH1->AddFrame(lab, f0centery); |
| tempYear[1] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < (yearrange[1]-yearrange[0])+1; i++) |
| { |
| sprintf(ctemp, "%d", yearrange[1]-i); |
| tempYear[1]->AddEntry(ctemp, i); |
| } |
| tempYear[1]->Resize(60,22); |
| tempYear[1]->Select(0); |
| fH1->AddFrame(tempYear[1], f0centery); |
| |
| // End hour |
| lab = new TGLabel(fH1, " Hour: "); |
| fH1->AddFrame(lab, f0centery); |
| tempHour[1] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 24; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempHour[1]->AddEntry(ctemp, i); |
| } |
| tempHour[1]->Resize(50,22); |
| tempHour[1]->Select(18); |
| fH1->AddFrame(tempHour[1], f0centery); |
| |
| // End minute |
| lab = new TGLabel(fH1, " Minute: "); |
| fH1->AddFrame(lab, f0centery); |
| tempMinute[1] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 60; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempMinute[1]->AddEntry(ctemp, i); |
| } |
| tempMinute[1]->Resize(50,22); |
| tempMinute[1]->Select(0); |
| fH1->AddFrame(tempMinute[1], f0centery); |
| |
| // End second |
| lab = new TGLabel(fH1, " Second: "); |
| fH1->AddFrame(lab, f0centery); |
| tempSecond[1] = new TGComboBox(fH1, 200); |
| for(int i = 0; i < 60; i++) |
| { |
| if(i < 10) |
| sprintf(ctemp, "0%d", i); |
| else |
| sprintf(ctemp, "%d", i); |
| tempSecond[1]->AddEntry(ctemp, i); |
| } |
| tempSecond[1]->Resize(50,22); |
| tempSecond[1]->Select(0); |
| fH1->AddFrame(tempSecond[1], f0centery); |
| |
| // Get start time from file |
| lab = new TGLabel(fH1, " "); |
| fH1->AddFrame(lab, f0centery); |
| tempFile[1] = new TGTextButton(fH1, "Get from file..."); |
| tempFile[1]->SetTextJustify(36); |
| tempFile[1]->SetWrapLength(-1); |
| tempFile[1]->Resize(100,22); |
| fH1->AddFrame(tempFile[1], f0centery); |
| |
| fG1->AddFrame(fH1, f2); |
| // Start and stop time ------------------------ |
| |
| // Control buttons |
| fH2 = new TGHorizontalFrame(fG1, subgroup[0], 30); |
| fH1 = new TGHorizontalFrame(fH2, subgroup[0], 30); |
| updateTemp = new TGTextButton(fH1, "Update"); |
| updateTemp->SetTextJustify(36); |
| updateTemp->SetWrapLength(-1); |
| updateTemp->Resize(80,22); |
| fH1->AddFrame(updateTemp, f0); |
| |
| exportTemp = new TGTextButton(fH1, "Export"); |
| exportTemp->SetTextJustify(36); |
| exportTemp->SetWrapLength(-1); |
| exportTemp->Resize(80,22); |
| fH1->AddFrame(exportTemp, f0); |
| |
| /* closeTemp = new TGTextButton(fH1, "Close"); |
| closeTemp->SetTextJustify(36); |
| closeTemp->SetWrapLength(-1); |
| closeTemp->Resize(80,22); |
| fH1->AddFrame(closeTemp, f0);*/ |
| fH2->AddFrame(fH1, f0centerx); |
| |
| fG1->AddFrame(fH2, f2); |
| |
| mdiFrame->AddFrame(fG1, f1); |
| |
| mdiFrame->SetMdiHints(kMdiMinimize | kMdiMaximize | kMdiClose); |
| mdiFrame->SetWindowName("Fieldpoint FP RTD 122 temperature sensor"); |
| mdiFrame->MapSubwindows(); |
| mdiFrame->Layout(); |
| mdiFrame->Move(1*((winWidth/12)-5)+10,(int)(1*((winHeight/12)-5))); |
| |
| // Action connections |
| updateTemp->Connect("Clicked()", "TGAppMainFrame", this, "UpdateTempPlot()"); |
| tempEndOn->Connect("Clicked()", "TGAppMainFrame", this, "TempEndToggle()"); |
| exportTemp->Connect("Clicked()", "TGAppMainFrame", this, "ExportTempPlot()"); |
| tempFile[0]->Connect("Clicked()", "TGAppMainFrame", this, "GetTempFile(=0)"); |
| tempFile[1]->Connect("Clicked()", "TGAppMainFrame", this, "GetTempFile(=1)"); |
| // closeTemp->Connect("Clicked()", "TGAppMainFrame", this, "UpdateTempPlot()"); |
| } |
| // Fieldpoint pane ------------------------------------------------------------------------- |
| } |
| |
| //--------------------------------------------------------------- |
| // Closing the main application window and checking the about information |
| |
| void TGAppMainFrame::CloseWindow() |