<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Hi Brian,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
Here are the header files:</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);" class="elementToProof">
<p class="ContentPasted0">------Begin serial_line.cxx---------</p>
<p class="ContentPasted0"></p>
<div class="ContentPasted0">// $Id: serial_line.cxx,v 1.3 2005/10/28 19:55:44 carsten Exp $</div>
<div class="ContentPasted0">// Log at end of file</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#include "serial_line.hxx"</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">//----------------------------<wbr class="ContentPasted0">------------------------------<wbr class="ContentPasted0">---------</div>
<div class="ContentPasted0">SerialLine::SerialLine(std::<wbr class="ContentPasted0">string line, int verbosity, device dev)</div>
<div class="ContentPasted0">{</div>
<div class="ContentPasted0"> fverbosity = verbosity;</div>
<div class="ContentPasted0"> fline = line;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> // O_RDWR read/write</div>
<div class="ContentPasted0"> // O_NOCTTY don't be the controlling terminal</div>
<div class="ContentPasted0"> // O_NDELAY don't care about DCD and wait until chars are present for read</div>
<div class="ContentPasted0"> fd = open(line.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);</div>
<div class="ContentPasted0"> //fd = open(line.c_str(), O_RDWR | O_NOCTTY);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0"> if (fverbosity>0)</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> std::cout<<" SerialLine: opened serial line "<<line</div>
<div class="ContentPasted0"><span></span> <<" with file handle "<<fd<<std::endl;</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0"> if (fd == -1) </div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> std::cerr<<" *** open_port: Unable to open "<<line<<std::endl;</div>
<div class="ContentPasted0"> exit(EXIT_FAILURE);</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0"> else </div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> fcntl(fd, F_SETFL, 0);</div>
<div class="ContentPasted0"> }</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> struct termios options;</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> tcgetattr(fd, &options); // get current options</div>
<div class="ContentPasted0"> foptionsOld = options; // save them for later</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> switch (dev)</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> case LSTEP:</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0"> // 8N2 at 57600 in canonical mode</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> cfsetispeed(&options, B57600);</div>
<div class="ContentPasted0"> cfsetospeed(&options, B57600);</div>
<div class="ContentPasted0"> // set parameters </div>
<div class="ContentPasted0"> // see documentation in ./doc/serial/serial.html</div>
<div class="ContentPasted0"> options.c_cflag &= ~PARENB; // do not enable parity bit</div>
<div class="ContentPasted0"> options.c_cflag |= CSTOPB; // two stop bits</div>
<div class="ContentPasted0"> options.c_cflag &= ~CSIZE; // no bit mask for data bits</div>
<div class="ContentPasted0"> options.c_cflag |= CS8; // 8 data bits</div>
<div class="ContentPasted0"> options.c_cflag |= CRTSCTS; // rts/cts hand shake</div>
<div class="ContentPasted0"> options.c_cflag |= (CLOCAL | CREAD); </div>
<div class="ContentPasted0"> options.c_lflag |= (ICANON | ECHO | ECHOE); // canonical input</div>
<div class="ContentPasted0"> options.c_oflag = 0;</div>
<div class="ContentPasted0"> //options.c_cc[VMIN] = 0;</div>
<div class="ContentPasted0"> //options.c_cc[VTIME] = 2;</div>
<div class="ContentPasted0"> options.c_cc[VMIN] = 1;//GS</div>
<div class="ContentPasted0"> options.c_cc[VTIME] = 0;//GS 21.04.2021</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> break;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> case PEAKTECH:</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> // 7E1 at 1200 in modem mode</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0"> options.c_cflag=0;</div>
<div class="ContentPasted0"> cfsetispeed(&options, B1200);</div>
<div class="ContentPasted0"> cfsetospeed(&options, B1200);</div>
<div class="ContentPasted0"> options.c_cflag |= CREAD;</div>
<div class="ContentPasted0"> options.c_cflag |= PARENB;</div>
<div class="ContentPasted0"> options.c_cflag |= CS7;</div>
<div class="ContentPasted0"> options.c_cflag |= CRTSCTS;</div>
<div class="ContentPasted0"> options.c_cc[VMIN] = 0;</div>
<div class="ContentPasted0"> options.c_cc[VTIME] = 2;</div>
<div class="ContentPasted0"> options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // raw (modem)</div>
<div class="ContentPasted0"> options.c_oflag &= ~OPOST; // modem mode</div>
<div class="ContentPasted0"> options.c_cc[VMIN] = 0;</div>
<div class="ContentPasted0"> options.c_cc[VTIME] = 1; //unit=1/10 seconds</div>
<div class="ContentPasted0"> options.c_iflag = IGNBRK | IGNPAR;</div>
<div class="ContentPasted0"> break;</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0"> case CTLAB:</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> // 8N1 at B38400 in canonical mode</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0"> // options.c_cflag=0; // never initialize cflag</div>
<div class="ContentPasted0"> cfsetispeed(&options, B38400);</div>
<div class="ContentPasted0"> cfsetospeed(&options, B38400);</div>
<div class="ContentPasted0"> options.c_cflag |= CREAD; // should be always set</div>
<div class="ContentPasted0"> options.c_cflag |= CLOCAL; // should be always set</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> // parity 8N1</div>
<div class="ContentPasted0"> options.c_cflag &= ~PARENB;</div>
<div class="ContentPasted0"> options.c_cflag &= ~CSTOPB;</div>
<div class="ContentPasted0"> options.c_cflag &= ~CSIZE; // Mask the character size bits</div>
<div class="ContentPasted0"> options.c_cflag |= CS8; // 8 bit</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0"> options.c_cflag &= ~CRTSCTS; // disable hardware flow control</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> //options.c_lflag |= (ICANON | ECHO | ECHOE); // canonical input (line oriented with CR | LF)</div>
<div class="ContentPasted0"> options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // raw (modem)</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> options.c_iflag &= ~(IXON | IXOFF | IXANY); // without-> no return from read</div>
<div class="ContentPasted0"> //options.c_iflag = IGNBRK | IGNPAR;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> options.c_oflag &= ~OPOST; // raw mode, no processed output</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> //options.c_cc[VMIN] = 0;</div>
<div class="ContentPasted0"> //options.c_cc[VTIME] = 1; //unit=1/10 seconds</div>
<div class="ContentPasted0"> options.c_cc[VMIN] = 1; //before 1 GS</div>
<div class="ContentPasted0"> options.c_cc[VTIME] = 0; //unit=1/10 seconds</div>
<div class="ContentPasted0"> break;</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0">// case HAMEG:</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0">// // 8N1 at 19200 in canonical mode</div>
<div class="ContentPasted0"> // // 8N1 at 115200 in canonical mode</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0">// options.c_cflag=0;</div>
<div class="ContentPasted0">// cfsetispeed(&options, B19200);</div>
<div class="ContentPasted0">// cfsetospeed(&options, B19200);</div>
<div class="ContentPasted0"> // options.c_cflag |= CREAD;</div>
<div class="ContentPasted0"> // options.c_cflag &= ~PARENB;</div>
<div class="ContentPasted0"> // options.c_cflag |= CS8;</div>
<div class="ContentPasted0"> // options.c_iflag &= ~(IXON | IXOFF | IXANY); // without-> no return from read</div>
<div class="ContentPasted0"> // options.c_cflag &= ~CRTSCTS; //###</div>
<div class="ContentPasted0"> // options.c_cc[VMIN] = 0;</div>
<div class="ContentPasted0"> // options.c_cflag &= ~CLOCAL; </div>
<div class="ContentPasted0"> // options.c_cc[VTIME] = 2;</div>
<div class="ContentPasted0"> // options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); // raw (modem)</div>
<div class="ContentPasted0"> // options.c_oflag &= ~OPOST; // modem mode</div>
<div class="ContentPasted0"> // options.c_cc[VMIN] = 0;</div>
<div class="ContentPasted0"> // options.c_cc[VTIME] = 1; //unit=1/10 seconds</div>
<div class="ContentPasted0"> // options.c_iflag = IGNBRK | IGNPAR;</div>
<div class="ContentPasted0"> // break;</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0"> </div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> default:</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> std::cerr<<" *** SerialLine: device not known.\n";</div>
<div class="ContentPasted0"> // close interface</div>
<div class="ContentPasted0"> if (fd!=-1)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> tcsetattr(fd, TCSANOW, &foptionsOld);</div>
<div class="ContentPasted0"><span></span> close(fd);</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> exit(EXIT_FAILURE);</div>
<div class="ContentPasted0"> break;</div>
<div class="ContentPasted0"> }</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> /* set the options */</div>
<div class="ContentPasted0"> tcsetattr(fd, TCSANOW, &options);</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0">}</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">SerialLine::~SerialLine()</div>
<div class="ContentPasted0">{</div>
<div class="ContentPasted0"> // close interface</div>
<div class="ContentPasted0"> if (fd!=-1)</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> tcsetattr(fd, TCSANOW, &foptionsOld);</div>
<div class="ContentPasted0"> close(fd);</div>
<div class="ContentPasted0"> }</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> if (fverbosity>0)</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> std::cout<<" SerialLine: closed serial line "<<fline</div>
<div class="ContentPasted0"><span></span> <<" with file handle "<<fd<<std::endl;</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0">}</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">// $Log: serial_line.cxx,v $</div>
<div class="ContentPasted0">// Revision 1.3 2005/10/28 19:55:44 carsten</div>
<div class="ContentPasted0">// added multimeter PeakTech 451 RS</div>
<div class="ContentPasted0">//</div>
<div class="ContentPasted0">// Revision 1.2 2005/10/28 14:59:44 carsten</div>
<div class="ContentPasted0">// added Peaktech 451RS</div>
<div class="ContentPasted0">//</div>
<div class="ContentPasted0">// Revision 1.1.1.1 2005/09/01 20:19:13 carsten</div>
<div class="ContentPasted0">// nitial import</div>
<div class="ContentPasted0">//</div>
<div><br class="ContentPasted0">
</div>
<br class="ContentPasted0">
<p class="ContentPasted0"></p>
<p class="ContentPasted0">------End serial_line.cxx ----------</p>
<p><br class="ContentPasted0">
</p>
<p><br class="ContentPasted0">
</p>
<p><br class="ContentPasted0">
</p>
<p class="ContentPasted0">--------Begin of serial_line.hxx ----------</p>
<p><br class="ContentPasted0">
</p>
<p class="ContentPasted0"></p>
<div class="ContentPasted0">// $Id: serial_line.hxx,v 1.5 2005/10/28 19:55:44 carsten Exp $</div>
<div class="ContentPasted0">// Log at end of file</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#ifndef __SERIAL_LINE_HXX__</div>
<div class="ContentPasted0">#define __SERIAL_LINE_HXX__</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#include <cstdlib></div>
<div class="ContentPasted0">//#include <cstdio></div>
<div class="ContentPasted0">//#include <cmath></div>
<div class="ContentPasted0">//#include <string></div>
<div class="ContentPasted0">#include <iostream> // cout cerr cin</div>
<div class="ContentPasted0">//#include <fstream></div>
<div class="ContentPasted0">//#include <ctime></div>
<div class="ContentPasted0">//#include <list></div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#include <unistd.h> /* UNIX standard function definitions */</div>
<div class="ContentPasted0">#include <fcntl.h> /* File control definitions */</div>
<div class="ContentPasted0">#include <errno.h> /* Error number definitions */</div>
<div class="ContentPasted0">#include <termios.h> /* POSIX terminal control definitions */</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#include <string></div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">/*! </div>
<div class="ContentPasted0"> \class SerialLine serial_line.hxx</div>
<div class="ContentPasted0"> \brief Serial line control.</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> Administration of a serial line</div>
<div class="ContentPasted0">*/</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">//! Enumeration of devices.</div>
<div class="ContentPasted0">/*! This parameter determines the setting of the serial line</div>
<div class="ContentPasted0"> and the way of reading the serial line. */</div>
<div class="ContentPasted0">enum device {</div>
<div class="ContentPasted0"> LSTEP, /*!< LSTEP controller card. */ </div>
<div class="ContentPasted0"> PEAKTECH, /*!< PeakTech451RS Multimeter (DMM). */</div>
<div class="ContentPasted0"> CTLAB /*!< C't Lab interfaces */</div>
<div class="ContentPasted0">};</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">class SerialLine</div>
<div class="ContentPasted0">{</div>
<div class="ContentPasted0">public:</div>
<div class="ContentPasted0"> /*! Non empty constructor</div>
<div class="ContentPasted0"> Explanation of serial line parameters can be found </div>
<div class="ContentPasted0"> <A HREF="../serial/serial.html"><wbr class="ContentPasted0">here.</A></div>
<div class="ContentPasted0"> \param line string with name eg. /dev/ttyS0 for controller</div>
<div class="ContentPasted0"> \param verbosity verbosity 0=quite</div>
<div class="ContentPasted0"> \param dev (LSTEP,PEAKTECH)</div>
<div class="ContentPasted0"> */</div>
<div class="ContentPasted0"> SerialLine(std::string line,</div>
<div class="ContentPasted0"><span></span> int verbosity=0,</div>
<div class="ContentPasted0"><span></span> device dev=LSTEP);</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0"> //! Empty destructor</div>
<div class="ContentPasted0"> ~SerialLine();</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0"> /*! \brief File handle</div>
<div class="ContentPasted0"> \return file handle for serial line</div>
<div class="ContentPasted0"> */</div>
<div class="ContentPasted0"> int fileHandle(){return fd;}</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0">private:</div>
<div class="ContentPasted0"> int fd; //!< File descriptor for interface.</div>
<div class="ContentPasted0"> struct termios foptionsOld; //!< Old status of interface.</div>
<div class="ContentPasted0"> int fverbosity; //!< Verbosity 0=quiet.</div>
<div class="ContentPasted0"> std::string fline; //!< Name of interface.</div>
<div class="ContentPasted0">};</div>
<div class="ContentPasted0">#endif</div>
<div class="ContentPasted0">// $Log: serial_line.hxx,v $</div>
<div class="ContentPasted0">// Revision 1.5 2005/10/28 19:55:44 carsten</div>
<div class="ContentPasted0">// added multimeter PeakTech 451 RS</div>
<div class="ContentPasted0">//</div>
<div class="ContentPasted0">// Revision 1.4 2005/10/28 14:59:47 carsten</div>
<div class="ContentPasted0">// added Peaktech 451RS</div>
<div class="ContentPasted0">//</div>
<div class="ContentPasted0">// Revision 1.3 2005/09/02 09:46:52 carsten</div>
<div class="ContentPasted0">// inserted documentation link</div>
<div class="ContentPasted0">//</div>
<div class="ContentPasted0">// Revision 1.2 2005/09/01 20:23:44 carsten</div>
<div class="ContentPasted0">// comments</div>
<div class="ContentPasted0">//</div>
<div class="ContentPasted0">// Revision 1.1.1.1 2005/09/01 20:19:13 carsten</div>
<div class="ContentPasted0">// nitial import</div>
<div class="ContentPasted0">//</div>
<div class="ContentPasted0">--------end of file serial_line.hxx</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">------Begin of calib_ct_lab.cxx------</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">
<div class="ContentPasted0">#include <cstdlib></div>
<div class="ContentPasted0">#include <cstdio></div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#include <cmath></div>
<div class="ContentPasted0">#include <string></div>
<div class="ContentPasted0">using std::string;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#include <iostream></div>
<div class="ContentPasted0">using std::cout;</div>
<div class="ContentPasted0">using std::cin;</div>
<div class="ContentPasted0">using std::cerr;</div>
<div class="ContentPasted0">using std::endl;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#include <fstream></div>
<div class="ContentPasted0">using std::fstream;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#include <ctime></div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#include <vector></div>
<div class="ContentPasted0">using std::vector;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#include "calib_ct_lab.h"</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">//----------------------------<wbr class="ContentPasted0">------------------------------<wbr class="ContentPasted0">------------</div>
<div class="ContentPasted0">CalibCtLab::CalibCtLab()</div>
<div class="ContentPasted0">{</div>
<div class="ContentPasted0"> m_filename_dac.resize(8);</div>
<div class="ContentPasted0"> m_filename_dac_exist.resize(8)<wbr class="ContentPasted0">;</div>
<div class="ContentPasted0"> m_filename_adc.resize(8);</div>
<div class="ContentPasted0"> m_filename_adc_exist.resize(8)<wbr class="ContentPasted0">;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> for (int icard=0; icard<8; icard++)</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> m_filename_dac[icard] = "none";</div>
<div class="ContentPasted0"> m_filename_dac_exist[icard] = false;</div>
<div class="ContentPasted0"> m_filename_adc[icard] = "none";</div>
<div class="ContentPasted0"> m_filename_adc_exist[icard] = false;</div>
<div class="ContentPasted0"> }</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> for (int icard=0; icard<8; icard++)</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> for (int n=0; n<391; n++)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> m_voltSetAdc[icard][n] = -9.5 + 0.05*n;</div>
<div class="ContentPasted0"><span></span> for (int ich=0; ich<8; ich++)</div>
<div class="ContentPasted0"><span></span> {</div>
<div class="ContentPasted0"><span></span> m_voltReadAdc[icard][ich][n]=<wbr class="ContentPasted0">999;</div>
<div class="ContentPasted0"><span></span> }</div>
<div class="ContentPasted0"><span></span>} </div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0">}</div>
<div class="ContentPasted0">//----------------------------<wbr class="ContentPasted0">------------------------------<wbr class="ContentPasted0">------------</div>
<div class="ContentPasted0">int CalibCtLab::readDacFile(int icard, string filename)</div>
<div class="ContentPasted0">{</div>
<div class="ContentPasted0"> fstream in;</div>
<div class="ContentPasted0"> in.open(filename.c_str(),std::<wbr class="ContentPasted0">ios::in);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> if (!in) </div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> return 1; // file doesn't exist</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0"> else</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> int n=0;</div>
<div class="ContentPasted0"> while(in)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> in>>m_voltSetDac[icard][n];</div>
<div class="ContentPasted0"><span></span> for (int ich=0; ich<8; ich++)</div>
<div class="ContentPasted0"><span></span> {</div>
<div class="ContentPasted0"><span></span> in>>m_voltReadDac[icard][ich][<wbr class="ContentPasted0">n];</div>
<div class="ContentPasted0"><span></span> }</div>
<div class="ContentPasted0"><span></span> n++;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> m_filename_dac_exist[icard]=<wbr class="ContentPasted0">true;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0"> in.close();</div>
<div class="ContentPasted0"> return 0;</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">}</div>
<div class="ContentPasted0">//----------------------------<wbr class="ContentPasted0">------------------------------<wbr class="ContentPasted0">------------</div>
<div class="ContentPasted0">void CalibCtLab::writeAdcFile(int icard, string filename)</div>
<div class="ContentPasted0">{</div>
<div class="ContentPasted0"> fstream out;</div>
<div class="ContentPasted0"> out.open(filename.c_str(),std:<wbr class="ContentPasted0">:ios::out | std::ios::trunc);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> if (!out) </div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> cerr<<" *** CalibCtLab::writeAdcFile: cannot open file, exit."<<endl;</div>
<div class="ContentPasted0"> exit(EXIT_FAILURE);</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0"> else</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> for (int n=0; n<391; n++)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> out<<m_voltSetAdc[icard][n]<<" ";</div>
<div class="ContentPasted0"><span></span> for (int ich=0; ich<8; ich++)</div>
<div class="ContentPasted0"><span></span> {</div>
<div class="ContentPasted0"><span></span> out<<m_voltReadAdc[icard][ich]<wbr class="ContentPasted0">[n]<<" ";</div>
<div class="ContentPasted0"><span></span> }</div>
<div class="ContentPasted0"><span></span> out<<endl;</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0"> out.close();</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">}</div>
<div class="ContentPasted0">//----------------------------<wbr class="ContentPasted0">------------------------------<wbr class="ContentPasted0">------------</div>
<div class="ContentPasted0">void CalibCtLab::readAdcFile(int icard, string filename)</div>
<div class="ContentPasted0">{</div>
<div class="ContentPasted0"> fstream in;</div>
<div class="ContentPasted0"> in.open(filename.c_str(),std::<wbr class="ContentPasted0">ios::in);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> if (!in) </div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> cerr<<" *** CalibCtLab::readAdcFile: cannot open file, exit."<<endl;</div>
<div class="ContentPasted0"> exit(EXIT_FAILURE);</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0"> else</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> for (int n=0; n<391; n++)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> in>>m_voltSetAdc[icard][n];</div>
<div class="ContentPasted0"><span></span> for (int ich=0; ich<8; ich++)</div>
<div class="ContentPasted0"><span></span> {</div>
<div class="ContentPasted0"><span></span> in>>m_voltReadAdc[icard][ich][<wbr class="ContentPasted0">n];</div>
<div class="ContentPasted0"><span></span> }</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> m_filename_adc[icard]=<wbr class="ContentPasted0">filename;</div>
<div class="ContentPasted0"> m_filename_adc_exist[icard]=<wbr class="ContentPasted0">true;</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0"> in.close();</div>
<div class="ContentPasted0">}</div>
<div class="ContentPasted0">//----------------------------<wbr class="ContentPasted0">------------------------------<wbr class="ContentPasted0">------------</div>
<div class="ContentPasted0">double CalibCtLab::dacSetValue(int icard, int ichannel, double value)</div>
<div class="ContentPasted0">{</div>
<div class="ContentPasted0"> double frac,volt_diff,volt_diff1,<wbr class="ContentPasted0">volt_diff2;</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> if (m_filename_dac_exist[icard])</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> if (value<-9.5)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> cout<<" CalibCtLab::dacSetValue: value<-9.6 Volt. "</div>
<div class="ContentPasted0"><span></span> <<" Return hardware calibration"<<endl;</div>
<div class="ContentPasted0"><span></span> return value;</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> if (value>10.0)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> cout<<" CalibCtLab::dacSetValue: value>10 Volt. "</div>
<div class="ContentPasted0"><span></span> <<" Return hardware calibration"<<endl;</div>
<div class="ContentPasted0"><span></span> return value;</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> if (m_voltReadDac[icard][<wbr class="ContentPasted0">ichannel][0]>900)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> cout<<" CalibCtLab::dacSetValue: channel not calibrated "</div>
<div class="ContentPasted0"><span></span> <<" Return hardware calibration"<<endl;</div>
<div class="ContentPasted0"><span></span> return value;</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> for (int n=0; n<1000; n++)</div>
<div class="ContentPasted0"><span></span>{</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"><span></span> //cout<<m_voltSet[icard][n]<<" "<<value<<endl;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"><span></span> if (value >= m_voltSetDac[icard][n] && value <= m_voltSetDac[icard][n+1])</div>
<div class="ContentPasted0"><span></span> {</div>
<div class="ContentPasted0"><span></span> //cout<<" found"<<endl;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"><span></span> frac = (m_voltSetDac[icard][n+1]-<wbr class="ContentPasted0">value)</div>
<div class="ContentPasted0"><span></span>/ (m_voltSetDac[icard][n+1]-m_<wbr class="ContentPasted0">voltSetDac[icard][n]);</div>
<div class="ContentPasted0"><span></span> volt_diff1 = </div>
<div class="ContentPasted0"><span></span>m_voltReadDac[icard][ichannel]<wbr class="ContentPasted0">[n ]-m_voltSetDac[icard][n ];</div>
<div class="ContentPasted0"><span></span> volt_diff2 = </div>
<div class="ContentPasted0"><span></span>m_voltReadDac[icard][ichannel]<wbr class="ContentPasted0">[n+1]-m_voltSetDac[icard][n+1]<wbr class="ContentPasted0">;</div>
<div class="ContentPasted0"><span></span> volt_diff = volt_diff1 + frac * (volt_diff2-volt_diff1);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"><span></span> return value-volt_diff;</div>
<div class="ContentPasted0"><span></span> }</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> cerr<<" *** CalibCtLab::dacSetValue: value not fond. Exit."<<endl;</div>
<div class="ContentPasted0"> exit(EXIT_FAILURE);</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0"> else</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> cerr<<" *** CalibCtLab::dacSetValue: no calib data for card. Exit."<<endl;</div>
<div class="ContentPasted0"> exit(EXIT_FAILURE);</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0">}</div>
<div class="ContentPasted0">//----------------------------<wbr class="ContentPasted0">------------------------------<wbr class="ContentPasted0">------------</div>
<div class="ContentPasted0">double CalibCtLab::adcValue(int icard, int ichannel, double value)</div>
<div class="ContentPasted0">{</div>
<div class="ContentPasted0"> double frac;</div>
<div class="ContentPasted0"> if (m_filename_adc_exist[icard])</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> if (value<-9.5)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> cout<<" CalibCtLab::adcValue: value<-9.5 Volt. "</div>
<div class="ContentPasted0"><span></span> <<" Return hardware calibration"<<endl;</div>
<div class="ContentPasted0"> return -9.5; // old: value</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> if (value>9.5) // old: 10</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> cout<<" CalibCtLab::adcValue: value>9.5 Volt. "</div>
<div class="ContentPasted0"><span></span> <<" Return hardware calibration"<<endl;</div>
<div class="ContentPasted0"> return 9.5; // old: value</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> if (m_voltReadAdc[icard][<wbr class="ContentPasted0">ichannel][0]>900)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> cout<<" CalibCtLab::adcValue: channel not calibrated "</div>
<div class="ContentPasted0"><span></span> <<" Return hardware calibration"<<endl;</div>
<div class="ContentPasted0"><span></span> return value;</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> for (int n=0; n<391; n++)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> if (value >= m_voltReadAdc[icard][ichannel]<wbr class="ContentPasted0">[n] && </div>
<div class="ContentPasted0"><span></span> value <= m_voltReadAdc[icard][ichannel]<wbr class="ContentPasted0">[n+1])</div>
<div class="ContentPasted0"><span></span> {</div>
<div class="ContentPasted0"><span></span> frac = (value-m_voltReadAdc[icard][<wbr class="ContentPasted0">ichannel][n])</div>
<div class="ContentPasted0"><span></span>/ (m_voltReadAdc[icard][<wbr class="ContentPasted0">ichannel][n+1]-</div>
<div class="ContentPasted0"><span></span> m_voltReadAdc[icard][<wbr class="ContentPasted0">ichannel][n]);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"><span></span> //cout<<" n ,read="<<n<<" "<<m_voltReadAdc[icard][<wbr class="ContentPasted0">ichannel][n]<<endl;</div>
<div class="ContentPasted0"><span></span> //cout<<" n+1,read="<<n<<" "<<m_voltReadAdc[icard][<wbr class="ContentPasted0">ichannel][n+1]<<endl;</div>
<div class="ContentPasted0"><span></span> //cout<<" n , set="<<n<<" "<<m_voltSetAdc[icard][n]<<<wbr class="ContentPasted0">endl;</div>
<div class="ContentPasted0"><span></span> //cout<<" n+1,read="<<n<<" "<<m_voltSetAdc[icard][n+1]<<<wbr class="ContentPasted0">endl;</div>
<div class="ContentPasted0"><span></span> //cout<<" frac="<<frac<<endl;</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"><span></span> return m_voltSetAdc[icard][n]+ </div>
<div class="ContentPasted0"><span></span>frac*(m_voltSetAdc[icard][n+1]<wbr class="ContentPasted0">-m_voltSetAdc[icard][n]);</div>
<div class="ContentPasted0"><span></span> }</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> cerr<<" *** CalibCtLab::adcValue: value not fond. Exit."<<endl;</div>
<div class="ContentPasted0"> exit(EXIT_FAILURE);</div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0"> else</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> cerr<<" *** CalibCtLab::valueToSet: no calib data for card. Exit."<<endl;</div>
<div class="ContentPasted0"> exit(EXIT_FAILURE); </div>
<div class="ContentPasted0"> }</div>
<div class="ContentPasted0"> return 999;</div>
<div class="ContentPasted0">}</div>
<div class="ContentPasted0">//----------------------------<wbr class="ContentPasted0">------------------------------<wbr class="ContentPasted0">------------</div>
<div class="ContentPasted0">void CalibCtLab::setAdcCalibPara(<wbr class="ContentPasted0">int icard, </div>
<div class="ContentPasted0"><span></span>int ichannel, </div>
<div class="ContentPasted0"><span></span>double volt_set, </div>
<div class="ContentPasted0"><span></span>double volt_read)</div>
<div class="ContentPasted0">{</div>
<div class="ContentPasted0"> for (int n=0; n<391; n++)</div>
<div class="ContentPasted0"> {</div>
<div class="ContentPasted0"> if (fabs(volt_set - m_voltSetAdc[icard][n])<0.01)</div>
<div class="ContentPasted0"><span></span>{</div>
<div class="ContentPasted0"><span></span> m_voltReadAdc[icard][ichannel]<wbr class="ContentPasted0">[n]=volt_read;</div>
<div class="ContentPasted0"><span></span> return;</div>
<div class="ContentPasted0"><span></span>}</div>
<div class="ContentPasted0"> }</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">}</div>
<div><br class="ContentPasted0">
</div>
-----------End of calib_ct_lab.cxx-------------</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">-----------Begin of calib_ct_lab.h--------------</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">
<div class="ContentPasted0">#ifndef CALIBCTLAB_H</div>
<div class="ContentPasted0">#define CALIBCTLAB_H 1</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">/*! </div>
<div class="ContentPasted0"> \class CalibCtLab calib_ct_lab.h</div>
<div class="ContentPasted0"> \brief Calibration of max. 8 DAC and ADC within the c't lab project.</div>
<div class="ContentPasted0"> </div>
<div class="ContentPasted0">*/</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">class CalibCtLab</div>
<div class="ContentPasted0">{</div>
<div class="ContentPasted0"> private:</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> vector<string> m_filename_dac; //!< The filename of calibration data</div>
<div class="ContentPasted0"> vector<bool> m_filename_dac_exist; //!< Flag for read </div>
<div class="ContentPasted0"> vector<string> m_filename_adc; //!< The filename of calibration data</div>
<div class="ContentPasted0"> vector<bool> m_filename_adc_exist; //!< Flag for read </div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> double m_voltSetDac[8][1000]; /*!< volt set array for max 8 cards </div>
<div class="ContentPasted0"><span></span>and max 1000 values. */</div>
<div class="ContentPasted0"> double m_voltReadDac[8][8][1000]; /*!< volt set array for max 8 cards, </div>
<div class="ContentPasted0"><span></span>8 channels, and max 1000 values. */</div>
<div class="ContentPasted0"> double m_voltSetAdc[8][1000]; /*!< volt set array for max 8 cards </div>
<div class="ContentPasted0"><span></span>and max 1000 values. */</div>
<div class="ContentPasted0"> double m_voltReadAdc[8][8][1000]; /*!< volt set array for max 8 cards, </div>
<div class="ContentPasted0"><span></span>8 channels, and max 1000 values. */</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> public:</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> CalibCtLab(); //!< Empty constructor.</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> /*! \brief Read calibration data file for DAC</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> The file is expected to have a column of set voltage values and </div>
<div class="ContentPasted0"> 8 columns of read out values covering the range between -10 to 10 Volts.</div>
<div class="ContentPasted0"> Columns which are not calibrated consist of 999 values.</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> \param icard The card for which the file is read.</div>
<div class="ContentPasted0"> \param filename The filename to read.</div>
<div class="ContentPasted0"> \return Error code: 0=success, 1=file not found.</div>
<div class="ContentPasted0"> */</div>
<div class="ContentPasted0"> int readDacFile(int icard, string filename);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> /*! \brief Write ADC calibration to file</div>
<div class="ContentPasted0"> \param icard The card for which the file is written.</div>
<div class="ContentPasted0"> \param filename The filename to write.</div>
<div class="ContentPasted0"> */</div>
<div class="ContentPasted0"> void writeAdcFile(int icard, string filename);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> /*! \brief Read ADC calibration from file</div>
<div class="ContentPasted0"> \param icard The card for which the file is read.</div>
<div class="ContentPasted0"> \param filename The filename to read.</div>
<div class="ContentPasted0"> */</div>
<div class="ContentPasted0"> void readAdcFile(int icard, string filename);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> /*! \brief Value to set for wanted voltage.</div>
<div class="ContentPasted0"> \param icard The card number [0-7].</div>
<div class="ContentPasted0"> \param ichannel The channel number [0-7].</div>
<div class="ContentPasted0"> \param value The wanted voltage in Volts.</div>
<div class="ContentPasted0"> \return The voltage to set in the DAC to get back the wanted voltage.</div>
<div class="ContentPasted0"> */</div>
<div class="ContentPasted0"> double dacSetValue(int icard, int ichannel, double value);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> /*! \brief Calibrated ADC value.</div>
<div class="ContentPasted0"> \param icard The card number [0-7].</div>
<div class="ContentPasted0"> \param ichannel The channel number [0-7].</div>
<div class="ContentPasted0"> \param value The uncalibrated value.</div>
<div class="ContentPasted0"> \return Calibrated value.</div>
<div class="ContentPasted0"> */</div>
<div class="ContentPasted0"> double adcValue(int icard, int ichannel, double value);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0"> /*! \brief Value to set for wanted voltage.</div>
<div class="ContentPasted0"> \param icard The card number [0-7].</div>
<div class="ContentPasted0"> \param ichannel The channel number [0-7].</div>
<div class="ContentPasted0"> \param volt_set Voltage applied to input.</div>
<div class="ContentPasted0"> \param volt_read Raw voltage read out.</div>
<div class="ContentPasted0"> */</div>
<div class="ContentPasted0"> void setAdcCalibPara(int icard, int ichannel, double volt_set, double volt_read);</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">};</div>
<div><br class="ContentPasted0">
</div>
<div><br class="ContentPasted0">
</div>
<div class="ContentPasted0">#endif</div>
<div><br class="ContentPasted0">
</div>
---------End of calib_ct_lab.h-----------</div>
<br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Brian Eng <beng@jlab.org><br>
<b>Sent:</b> Thursday, May 4, 2023 10:26 AM<br>
<b>To:</b> Tyler Lemon <tlemon@jlab.org>; Grzegorz Kalicy <gkalicy@jlab.org><br>
<b>Cc:</b> dsg-eic_dirc@jlab.org <dsg-eic_dirc@jlab.org><br>
<b>Subject:</b> Re: EIC DIRC DAQ and analysis macros</font>
<div> </div>
</div>
<style type="text/css" style="display:none">
<!--
p
{margin-top:0;
margin-bottom:0}
-->
</style>
<div dir="ltr">
<div class="x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Hi Greg,</div>
<div class="x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div class="x_elementToProof x_ContentPasted0" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Do you have access to the header files (or know what libraries/programs they're from) that are included from the moni_max_fast_info_Hang.cc file?</div>
<div class="x_elementToProof x_ContentPasted0" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div class="x_elementToProof x_ContentPasted0" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Also do you have any input and output files we can use as reference? So that way if we change anything we can make sure the results are consistent?</div>
<div class="x_elementToProof x_ContentPasted0" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div class="x_elementToProof x_ContentPasted0" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Thanks</div>
<div id="x_appendonsend"></div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> dsg-eic_dirc <dsg-eic_dirc-bounces@jlab.org> on behalf of Grzegorz Kalicy via dsg-eic_dirc <dsg-eic_dirc@jlab.org><br>
<b>Sent:</b> Wednesday, May 3, 2023 8:49 AM<br>
<b>To:</b> Tyler Lemon <tlemon@jlab.org><br>
<b>Cc:</b> dsg-eic_dirc@jlab.org <dsg-eic_dirc@jlab.org><br>
<b>Subject:</b> Re: [dsg-eic_dirc] EIC DIRC DAQ and analysis macros</font>
<div> </div>
</div>
<div dir="auto">
<div dir="ltr"></div>
<div dir="ltr">Hi Tyler, </div>
<div dir="ltr"><br>
</div>
<div dir="ltr">I’m fighting my laptop crash since 7am and it isn’t looking good, we might have to reschedule our meeting on the macros :/</div>
<div dir="ltr"><br>
</div>
<div dir="ltr">Greg </div>
<div dir="ltr"><br>
<blockquote type="cite">On May 2, 2023, at 09:26, Tyler Lemon <tlemon@jlab.org> wrote:<br>
<br>
</blockquote>
</div>
<blockquote type="cite">
<div dir="ltr">
<div class="x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Hi Greg and Beni,</div>
<div class="x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div class="x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
We'll plan to meet at 9:30 AM on Wednesday over Zoom, then.</div>
<div class="x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
I'll set up a Zoom meeting soon for tomorrow.</div>
<div class="x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div class="x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
-Tyler<br>
</div>
<div id="x_x_appendonsend"></div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Grzegorz Kalicy <gkalicy@jlab.org><br>
<b>Sent:</b> Monday, May 1, 2023 4:38 PM<br>
<b>To:</b> dsg-eic_dirc@jlab.org <dsg-eic_dirc@jlab.org>; Tyler Lemon <tlemon@jlab.org><br>
<b>Subject:</b> Re: EIC DIRC DAQ and analysis macros</font>
<div> </div>
</div>
<div dir="ltr">
<div class="x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
Hi Tyler,</div>
<div class="x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
<br>
</div>
<div class="x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
I have a meeting 8-9am, so I could meet at 9am on ZOOM or 9:15 in person.</div>
<div class="x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
<br>
</div>
<div class="x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
Cheers,</div>
<div class="x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
<br>
</div>
<div class="x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
Greg<br>
</div>
<div id="x_x_x_appendonsend"></div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_x_x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> dsg-eic_dirc <dsg-eic_dirc-bounces@jlab.org> on behalf of Tyler Lemon via dsg-eic_dirc <dsg-eic_dirc@jlab.org><br>
<b>Sent:</b> Monday, May 1, 2023 2:09 PM<br>
<b>To:</b> dsg-eic_dirc@jlab.org <dsg-eic_dirc@jlab.org><br>
<b>Subject:</b> [dsg-eic_dirc] EIC DIRC DAQ and analysis macros</font>
<div> </div>
</div>
<div dir="ltr">
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Hi Greg,</div>
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Would you be available Wednesday morning to go over the EIC DIRC macros?</div>
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Anytime from 8:30 AM to 10:30 AM would be good for me.<br>
</div>
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Once we settle on a time, I can set up either a place to meet in person or a Zoom link.</div>
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
Also, as an aside, I've attached the zipped file you sent me to this email in case anyone else in DSG wants to take a look at the macros.<br>
</div>
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
-Tyler</div>
<div class="x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<br>
</div>
<div id="x_x_x_x_appendonsend"></div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_x_x_x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> Grzegorz Kalicy <gkalicy@jlab.org><br>
<b>Sent:</b> Friday, April 28, 2023 8:41 AM<br>
<b>To:</b> Tyler Lemon <tlemon@jlab.org><br>
<b>Subject:</b> Data taking and analysis macros</font>
<div> </div>
</div>
<div dir="ltr">
<div class="x_x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
Hi Tyler,</div>
<div class="x_x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
<br>
</div>
<div class="x_x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
I finally got the macros that we used to take data and analyze it in GSI.</div>
<div class="x_x_x_x_x_elementToProof" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
<br>
</div>
<div class="x_x_x_x_x_elementToProof x_x_x_x_x_ContentPasted0" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
Unfortunately, as for now it still requires Root 5, since Root 6 demands “proper C++”. We could update the code in this sense, yet it was not done, since it works 😉</div>
<div class="x_x_x_x_x_elementToProof x_x_x_x_x_ContentPasted0" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
<br>
</div>
<div class="x_x_x_x_x_elementToProof x_x_x_x_x_ContentPasted0" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
Greg</div>
<div class="x_x_x_x_x_elementToProof x_x_x_x_x_ContentPasted0" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
<br>
</div>
<div class="x_x_x_x_x_elementToProof x_x_x_x_x_ContentPasted0" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0); background-color:rgb(255,255,255)">
<br>
<div class="x_x_x_x_x_ContentPasted0">Data taking:</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">- You call filter_input_220918.sh to initialize the measurement and give the proper name (built out of the parameters written)</div>
<div class="x_x_x_x_x_ContentPasted0">- This starts data taking with the shell script</div>
<div class="x_x_x_x_x_ContentPasted0">filter_work_220918.sh that gives the positions and step sizes for the motor movement and calls the program</div>
<div class="x_x_x_x_x_ContentPasted0">“moni.cc” or now “moni_max_fast_info_test_Hang_Georg_Test”</div>
<div class="x_x_x_x_x_ContentPasted0">§ and starts the same time the shell script filter_220918.sh that moves the motors</div>
<div class="x_x_x_x_x_ContentPasted0">- New is, that the program “moni” searches for a maximum position and gives this back to the motor steering script.</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">The file for the data taking “moni_max_fast_info_Hang.cc” has to be compiled as follows:</div>
<div class="x_x_x_x_x_ContentPasted0">g++ moni_max_fast_info_Hang.cc calib_ct_lab.cxx serial_line.cxx -o moni_max_fast_info_test_Hang_Georg_Test</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">--- filter_input_220918.sh---</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">- #!/bin/sh</div>
<div class="x_x_x_x_x_ContentPasted0">- #source /u/pandadrc/.bashrc</div>
<div class="x_x_x_x_x_ContentPasted0">- #. /home/greg/.bashr</div>
<div class="x_x_x_x_x_ContentPasted0">- d=`date +%y%m%d`</div>
<div class="x_x_x_x_x_ContentPasted0">- echo $d</div>
<div class="x_x_x_x_x_ContentPasted0">- </div>
<div class="x_x_x_x_x_ContentPasted0">- echo ""</div>
<div class="x_x_x_x_x_ContentPasted0">- echo ">>>>>>>>>>>>>>>>>>>>>>>> Start at: `date +%Y.%m.%d-%H:%M:%S`"</div>
<div class="x_x_x_x_x_ContentPasted0">- echo ""</div>
<div class="x_x_x_x_x_ContentPasted0">- filter_work_220918.sh IR Nikon 3 faces 442 $d 117.15 </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">---End of filter_input_220918.sh ----</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">--filter_work_220918.sh ------------</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">#!/bin/sh</div>
<div class="x_x_x_x_x_ContentPasted0">#source /u/pandadrc/.bashrc</div>
<div class="x_x_x_x_x_ContentPasted0">#. /home/greg/.bashrc</div>
<div class="x_x_x_x_x_ContentPasted0">echo DATE $6</div>
<div class="x_x_x_x_x_ContentPasted0">skill moni_max_fast_i</div>
<div class="x_x_x_x_x_ContentPasted0">skill moni_max_fast</div>
<div class="x_x_x_x_x_ContentPasted0">echo -1 -666 -666 > /tmp/filter.dat</div>
<div class="x_x_x_x_x_ContentPasted0">sleep 60</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">/u/pandadrc/georg/ctlab_gs/moni_max_fast_info_test_Hang_Georg_Test matrix &</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">#(all x,y values has to be multiplied by 10)</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"># diode scan diode Brewster position "Bar scan" (only for itterations) "Bar position" diode pure position (-half scan width) mirror-brewsterangle-mot5</div>
<div class="x_x_x_x_x_ContentPasted0">#filter.sh x_width y_width xy_step x_ref y_ref xb_width yb_width xyb_step xb_ref yb_ref x_pure_once y_pure_once</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> #442nm</div>
<div class="x_x_x_x_x_ContentPasted0">#====================</div>
<div class="x_x_x_x_x_ContentPasted0">filter_220918.sh 50 50 5 110 2090 60 200 20 650 1380 1980 2100 $7 # Nikon 3 faces IR new for series shorter</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">echo -666 > /tmp/filter.dat # end moni_ct</div>
<div class="x_x_x_x_x_ContentPasted0">sleep 2</div>
<div class="x_x_x_x_x_ContentPasted0">echo -1 > /tmp/filter.dat</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">mv -v $HOMEGREG/ctlab/moni_ct.dat $HOMEGREG/data/$1_$2-$3_$4_$5nm_$6_1.dat</div>
<div class="x_x_x_x_x_ContentPasted0">mv -v $HOMEGREG/ctlab/moni_ct2.dat $HOMEGREG/data/$1_$2-$3_$4_$5nm_$6_2.dat</div>
<div class="x_x_x_x_x_ContentPasted0">mv -v $HOMEGREG/ctlab/moni_ct3.dat $HOMEGREG/data/$1_$2-$3_$4_$5nm_$6_3.dat</div>
<div class="x_x_x_x_x_ContentPasted0">mv -v $HOMEGREG/ctlab/moni_ct4.dat $HOMEGREG/data/$1_$2-$3_$4_$5nm_$6_4.dat</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">echo ""</div>
<div class="x_x_x_x_x_ContentPasted0">echo ">>>>>>>>>>>>>>>>>>>>>>>> Stop at: `date +%Y.%m.%d-%H:%M:%S`"</div>
<div class="x_x_x_x_x_ContentPasted0">echo ""</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">---------------End of filter_work_220918.sh --------------------</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">The output files are as follows (after the run they are renamed from moni_ct.dat to the specific name you gave in filter_input_220918.sh):</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">Example: IR_Nikon-11_faces_442nm_230322_1.dat</div>
<div class="x_x_x_x_x_ContentPasted0">13.9236 1.84149 1.50045 0 0 65 138</div>
<div class="x_x_x_x_x_ContentPasted0">13.9236 1.84432 1.49195 0 0 65 138</div>
<div class="x_x_x_x_x_ContentPasted0">13.9236 1.81853 1.50557 0 0 65 138</div>
<div class="x_x_x_x_x_ContentPasted0">13.9236 1.83111 1.51421 0 0 65 138</div>
<div class="x_x_x_x_x_ContentPasted0">13.9236 1.84778 1.491 0 0 65 138</div>
<div class="x_x_x_x_x_ContentPasted0">13.9236 1.80721 1.48943 0 0 65 138</div>
<div class="x_x_x_x_x_ContentPasted0">13.9236 1.81067 1.49069 0 0 65 138</div>
<div class="x_x_x_x_x_ContentPasted0">13.9236 1.82451 1.48408 0 0 65 138</div>
<div class="x_x_x_x_x_ContentPasted0">13.9236 1.81853 1.50941 0 0 65 138</div>
<div class="x_x_x_x_x_ContentPasted0">13.9236 1.8135 1.51165 0 0 65 138</div>
<div class="x_x_x_x_x_ContentPasted0">13.9572 1.84778 1.52606 2 2 65 138</div>
<div class="x_x_x_x_x_ContentPasted0">13.9572 1.86074 1.51742 2 2 65 138</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">With time, value-diode, reference-diode, temperature (not measured, thus placeholder 0 or 2), filter (0 for “bar out” and 2 for “bar in”), bar-x position, bar y-position. The values are measured 10 times each.</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">These values represent the Maximum value on the diode after it was scanned over the laser-spot.</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">The data files “Name”_2.dat, “Name”_3.dat“, and Name”_4.dat are used only to analyze the correctness of the diode scan.</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">Using Root 5:</div>
<div class="x_x_x_x_x_ContentPasted0">This file IR_Nikon-11_faces_442nm_230322_1.dat is than converted to a root file via the program “glasstest.cc</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">root glasstest.cc'("IR_Nikon11_faces_442nm_230322_1.dat")'</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">and gives the out put file IR_Nikon11_faces_442nm_230322_1.root</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">This again is analyzed in Root5 with matrix.cc</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">.x matrix.cc("IR_Nikon-11_faces_442nm_230322_1",442,0,0,0,0,true)</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">and gives the out put file IR_Nikon11_faces_442nm_230322_1_plot3D.root</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">The parameter given to “matrix.cc” are the wavelength, that changes the mirror correction and the boundaries x_min, x_max, y_min, and y_max of the matrix that are used for the determination of the transmission. With the
value “true” and “false” choose between internal reflection and bulk absorption.</div>
<div class="x_x_x_x_x_ContentPasted0"> </div>
<div class="x_x_x_x_x_ContentPasted0">The output of matrix.cc is also a plot of the voltage values of the diodes and the transmission values of the matrix.</div>
<br>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</body>
</html>