Cat
ADCMeasurement.cpp
Go to the documentation of this file.
1 // $Id: ADCMeasurement.cpp,v 1.4 2006/03/16 17:08:23 fmachefe Exp $
2 
3 // Include files
4 #include <ctime>
5 #include <iostream>
6 #include <sstream>
7 #include <string>
8 
9 // ROOT include files
10 #include "TRandom.h"
11 #include "TH2D.h"
12 #include "TH1D.h"
13 
14 // local
15 #include "ADCMeasurement.h"
16 
17 //-----------------------------------------------------------------------------
18 // Implementation file for class : ADCMeasurement
19 //
20 // 2004-07-23 : Fr�d�ric Machefert
21 //-----------------------------------------------------------------------------
22 
23 //=============================================================================
24 // Standard constructor, initializes variables
25 //=============================================================================
27  setName ( "ADCMeasurement" );
28  setType ( "NI6008" );
29  setTitle( "NI6008 ADC measurement" );
30 }
31 
32 //=========================================================================
33 // virtual function intialize
34 //=========================================================================
36  m_minRamp = 0.;
37  m_maxRamp = 1.2;
38  m_stepRamp = 20;
39  m_baseline = 1400;
40  m_ramp = m_minRamp;
41  time(&m_startTime);
42  m_device = dynamic_cast <NI6008*> (element());
43  if (application()->options()->dataStorage()){
44  m_tree = new TTree(name().c_str(), title().c_str());
45  m_tree->Branch("Run",&m_runNumber,"Run/I");
46  m_tree->Branch("Event",&m_evtNumber,"Event/I");
47  m_tree->Branch("Time",&m_timestamp,"Time/I");
48  m_tree->Branch("Duration",&m_duration,"Duration/I");
49  m_tree->Branch("ai0",&m_ai0,"ai0/F");
50  m_tree->Branch("ai1",&m_ai1,"ai1/F");
51  m_tree->Branch("ao0",&m_ao0,"ao0/F");
52  // m_tree->Branch("ao1",&m_ao1,"ao1/F");
53  m_tree->Branch("di_0",&m_diA,"diA/I");
54  m_tree->Branch("di_1",&m_diB,"diB/I");
55  }
56  info("Preparing dataStreams.");
57  addDataStream("Duration","Duration");
58  addDataStream("ai0", "Channel 0");
59  addDataStream("ai1", "Channel 1");
60  addDataStream("ao0", "Ramp Ampl");
61  // addDataStream("ao1", "ADC Chan Ctrl");
62  addDataStream("diA","ADC A");
63  addDataStream("diB","ADC B");
64  addDataStream("ratioA","ratio amplitude A");
65  addDataStream("ratioB","ratio amplitude B");
67  return StatusCode::SUCCESS;
68 }
69 
70 //=========================================================================
71 // Virtual function execute
72 //=========================================================================
74  // get current
75  std::string val = m_device->cmd("Dev1", "ai");
76  std::istringstream sv1(val);
77  std::string v0, v1, tmp;
78  sv1 >> v0;
79  sv1 >> v1;
80  // m_ai0=toDouble(v0);
81  // m_ai1=toDouble(v1);
82  m_ai0 = atof(v0.c_str());
83  m_ai1 = atof(v1.c_str());
84  std::cout << v0 << " " << v1 << " " << m_ai0 << " " << m_ai1 << std::endl;
85  dataFill(1, m_ai0);
86  dataFill(2, m_ai1);
87  // set ramp value and channel A
88  dataFill(3, m_ramp);
89  m_ao0 = m_ramp;
90  char cmd[80];
91  sprintf(cmd,"ao %f %f", m_ramp, 0.);
92  m_device->cmd("Dev1", cmd );
93  val = m_device->cmd("Dev1", "di");
94  std::istringstream sv2(val);
95  sv2 >> tmp;
96  sv2 >> tmp;
97  sv2 >> tmp;
98  sv2 >> v0 >> tmp >> v1 ;
99  m_diA = atoi(v0.c_str());
100  dataFill(4, m_diA);
101 
102  sprintf(cmd,"ao %f %f", m_ramp, 3.3);
103  m_device->cmd("Dev1", cmd );
104  val = m_device->cmd("Dev1", "di");
105  std::istringstream sv3(val);
106  sv3 >> tmp;
107  sv3 >> tmp;
108  sv3 >> tmp;
109  sv3 >> v0 >> tmp >> v1 ;
110  m_diB = atoi(v1.c_str());
111  dataFill(5, m_diB);
112 
113  if (m_diA>m_baseline){
114  dataFill(6, m_ramp/float(m_diA-m_baseline));
115  }
116  else {
117  dataFill(6, 0.);
118  }
119  if (m_diB>m_baseline){
120  dataFill(7, m_ramp/float(m_diB-m_baseline));
121  }
122  else {
123  dataFill(7, 0.);
124  }
125 
126  // std::cout << "digit: " << m_ramp << " " << m_diA << " " << m_diB << std::endl;
127 
128  time_t t =time(0);
129  m_duration=difftime(t, m_startTime);
130  m_timestamp = t;
131  dataFill(0, m_duration);
132 
133  if (application()->options()->dataStorage()){
135  m_tree->Fill();
136  }
137  wait(m_frequency);
138  m_ramp += (m_maxRamp-m_minRamp)/float(m_stepRamp);
139  if ( m_ramp > m_maxRamp ) { m_ramp = m_minRamp; }
140  return StatusCode::SUCCESS;
141 }
142 
143 //=========================================================================
144 // Virtual function finalize
145 //=========================================================================
147  return StatusCode::SUCCESS;
148 }
void info(std::string mymsg)
Definition: Object.h:38
unsigned long nEvt()
Definition: Options.h:317
std::string title()
Definition: Object.h:31
virtual StatusCode finalize()
void setName(std::string name)
Definition: Object.h:51
void addDataStream(std::string name, std::string title)
Definition: Processus.h:153
unsigned long runNumber()
Definition: Options.h:107
Application * application()
Definition: Tools.cpp:42
bool dataStorage()
Definition: Options.h:252
Options * options()
Definition: Application.h:86
void setType(std::string type)
Definition: Object.h:52
ADCMeasurement()
Standard constructor.
void setTitle(std::string title)
Definition: Object.h:54
NI6008 * m_device
std::string cmd(std::string, std::string)
Definition: NI6008.cpp:38
std::string name() const
Definition: Object.h:28
unsigned int m_frequency
Element * element()
Definition: Processus.h:231
virtual StatusCode initialize()
Destructor.
StatusCode dataFill(int i, double val)
Definition: Processus.h:175
void wait(int nbr_ms)
Definition: Tools.cpp:271
virtual StatusCode execute()
Definition: NI6008.h:26