238 FILE *fswitches = NULL;
239 fswitches = fopen(gSwitchesPath,
"r");
241 char inputstring[200];
243 if(fswitches != NULL)
245 printf(
"Switches being read from the file: %s\n",gSwitchesPath);
246 while(!feof(fswitches))
249 if(fgets(dummychar,2,fswitches) == NULL)
break;
250 else fseek(fswitches,-1,SEEK_CUR);
254 fgets(inputstring,199,fswitches);
255 if(strchr(inputstring,
'#')==NULL)
260 parsestring = strtok(inputstring,
" ");
263 parsestring = strtok(NULL,
" ");
266 parsestring = strtok(NULL,
" ");
269 parsestring = strtok(NULL,
" ");
272 parsestring = strtok(NULL,
" ");
275 parsestring = strtok(NULL,
" ");
278 parsestring = strtok(NULL,
" ");
281 parsestring = strtok(NULL,
" ");
284 parsestring = strtok(NULL,
" ");
287 parsestring = strtok(NULL,
" ");
290 parsestring = strtok(NULL,
" ");
293 parsestring = strtok(NULL,
" ");
304 if((!isspace(*parsestring))||(title==
true))
307 if (*parsestring == 10 || *parsestring == 13 || *parsestring == 0)
320 printf(
"Cannot open %s!\n",gSwitchesPath);
323 printf(
"Exceeded maximum number of switches!\n");
517 int sequencestartchannel = 7;
518 int mixingtimestampchannel = 5;
519 int recordingchannel = 2;
523 if(Channel == sequencestartchannel){
526 printf(
"Starting of mixingsequence\n");
533 printf(
"Mixing dump start signal called when already in a sequence!\n");
537 else if(Channel == mixingtimestampchannel) {
552 sprintf(title,
"Dump (mixing) number %d, spill %d, run%d",
dumpnumber,gbeamSpill,gRunNumber);
587 printf(
"No histogram to record to!\n");
608 gOutputFile->cd(
"SIS");
609 if((gSisData->cptr<gSisData->wptr)&&(gSisData->cptr<gSisData->wmax))
611 while(gSisData->cptr<gSisData->wptr)
613 for(
int i = 0;
i<kMaxSisChannels;
i++)
616 double counts = gSisData->sisChannels[
i].sisData[gSisData->cptr];
617 uint64_t clock = gSisData->sisClock[gSisData->cptr];
624 if(gDisplayDetailedSIS)
630 else if ((gSisData->cptr>gSisData->wptr)&&(gSisData->cptr<gSisData->wmax))
632 while(gSisData->cptr<gSisData->wmax)
634 for(
int i = 0;
i<kMaxSisChannels;
i++)
637 double counts = gSisData->sisChannels[
i].sisData[gSisData->cptr];
638 uint64_t clock = gSisData->sisClock[gSisData->cptr];
645 if(gDisplayDetailedSIS)
651 else if((gSisData->cptr>gSisData->wptr)&&(gSisData->cptr==gSisData->wmax))
655 gOutputFile->cd(
"../");
664 const uint32_t *sis = (uint32_t*)ptr;
670 for (
i=0;
i<size;
i+=numChan, sis+=numChan)
673 uint64_t clock = sis[0];
675 for (
int j=0;
j<numChan;
j++)
677 gSisData->sisChannels[
j].sisData[gSisData->wptr] = sis[
j];
680 gSisData->clock += clock;
681 gSisData->sisClock[gSisData->wptr] = gSisData->clock;
684 if (gSisData->wptr >= kMaxSisBufferSize)
687 if (gSisData->wptr > gSisData->wmax)
688 gSisData->wmax = gSisData->wptr;
694 time_t now = time(NULL);
696 static time_t gNow = 0;
701 printf(
"time drift: %d %f %f\n",(
int)now,sistime,sistime-now);
709 FILE *fmonitor = NULL;
710 fmonitor = fopen(gOLMPath,
"r");
712 char inputstring[120];
713 bool divideinit =
false;
717 printf(
"Online Monitor values being read from file: %s\n",gOLMPath);
718 while(!feof(fmonitor))
721 if(fgets(dummychar,2,fmonitor) == NULL)
break;
722 else fseek(fmonitor,-1,SEEK_CUR);
726 fgets(inputstring,119,fmonitor);
727 if(strchr(inputstring,
'#')==NULL)
732 if(divideinit==
false)
734 parsestring = strtok(inputstring,
" ");
737 parsestring = strtok(NULL,
" ");
740 parsestring = strtok(NULL,
" ");
743 parsestring = strtok(NULL,
" ");
746 parsestring = strtok(NULL,
" ");
749 parsestring = strtok(NULL,
" ");
752 parsestring = strtok(NULL,
" ");
755 parsestring = strtok(NULL,
" ");
758 parsestring = strtok(NULL,
" ");
765 parsestring = strtok(inputstring,
" ");
768 parsestring = strtok(NULL,
" ");
773 printf(
"Too many histograms in panel %d!\n",
numpanels);
784 if((!isspace(*parsestring))||(title==
true))
787 if (*parsestring == 10 || *parsestring == 13 || *parsestring == 0)
796 fgets(inputstring,119,fmonitor);
797 if(strchr(inputstring,
'#')==NULL)
799 parsestring = strtok(inputstring,
" ");
801 parsestring = strtok(NULL,
" ");
803 parsestring = strtok(NULL,
" ");
805 parsestring = strtok(NULL,
" ");
807 parsestring = strtok(NULL,
" ");
809 parsestring = strtok(NULL,
" ");
816 printf(
"Exceeded maximum number of panels!\n");
826 printf(
"Cannot open %s!\n",gOLMPath);
829 if(gMainWindow==NULL)
831 gMainWindow =
new TCanvas(
"SIS Display",
"SIS Display",
xcanvas,
ycanvas);
835 gStyle->SetOptStat(kFALSE);
886 if(gOutputFile!=NULL)
888 sprintf(title,
"data/run%d.root:/",gRunNumber);
893 printf(
"Data file improperly initialized\n");
896 gStyle->SetOptStat(kTRUE);
911 if(gMainWindow!=NULL)
925 if(gSisData->wptr==gSisData->wmax)
929 for(
int k = 0;
k<gSisData->wptr;
k++)
942 for(
int k = 0;
k<gSisData->wptr;
k++)
962 if(gSisData->wptr==gSisData->wmax)
968 for(
int k=0;
k<(gSisData->wptr-1);
k++)
970 now =
clock2time(gSisData->sisClock[gSisData->wptr-1]);
972 diff = datatime - now;
989 now =
clock2time(gSisData->sisClock[gSisData->wptr-1]);
991 diff = datatime - now;
1006 for(
int k=0;
k<gSisData->wptr;
k++)
1008 now =
clock2time(gSisData->sisClock[gSisData->wptr-1]);
1010 diff = datatime - now;
1017 now =
clock2time(gSisData->sisClock[gSisData->wptr-1]);
1019 diff = datatime - now;
1031 now =
clock2time(gSisData->sisClock[gSisData->wptr-1]);
1033 diff = now - datatime;
1057 printf(
"cptr: %d, wptr: %d, wmax: %d\n",gSisData->cptr,gSisData->wptr, gSisData->wmax);
1059 gMainWindow->GetCanvas()->Modified();
1060 gMainWindow->GetCanvas()->Update();
1065 if(gDisplayTimeTest&&gIsRunning&&!gIsPedestalsRun)
1071 timetestcanvas=
new TCanvas(
"Time Between Signals",
"Time Between Signals");
1073 sprintf(
name,
"Number of Seconds Between Signals, Channel %d, Run %d",gtestchannel,gRunNumber);
1077 if((tptr<gSisData->wptr)&&(tptr<gSisData->wmax))
1079 while(tptr<gSisData->wptr)
1081 if(gSisData->sisChannels[gtestchannel].sisData[
tptr]!=0)
1098 else if ((
tptr>gSisData->wptr)&&(tptr<gSisData->wmax))
1100 while(tptr<gSisData->wmax)
1102 if(gSisData->sisChannels[gtestchannel].sisData[
tptr]!=0)
1111 else if((
tptr>gSisData->wptr)&&(
tptr==gSisData->wmax))