Cat
EmulateFE.cpp
Go to the documentation of this file.
1 // $Id: $
2 
3 // include files
4 #include <fstream>
5 #include <iostream>
6 #include <string>
7 
8 #include "TH1D.h"
9 
10 // local
11 #include "FEB_v1.h"
12 //#include "Run.h"
13 //#include "Event.h"
14 #include "EmulateFE.h"
15 
16 //-----------------------------------------------------------------------------
17 // Implementation file for class : EmulateFE
18 //
19 // 2012-07-12 :
20 //-----------------------------------------------------------------------------
21 
22 //=============================================================================
23 // Standard constructor, initializes variables
24 //=============================================================================
26  m_filename(std::string("")),
27  m_typeGeneration (0),
28  m_signalRate(0.05),
29  m_pedestal(128),
30  m_noise(30),
31  m_ntriggersMax(0),
32  m_ntriggers(0),
33  m_options(application()->options())
34 {
35  setName ( "EmulateFE" );
36  setType ( "FEB_v1" );
37  setTitle( "FEB_v1 EmulateFE processing" );
38 }
39 //=============================================================================
40 // Destructor
41 //=============================================================================
43 
44 //=============================================================================
45 
46 //=========================================================================
47 //
48 //=========================================================================
50  debug("EmulateFE" , "initialize");
51 
52  info("" );
53  info("____________________________");
54  info("FE emulation");
55  info(" =>" + element()->path() + " " +
56  element()->name() + " " + element()->type() );
57 
58  if (m_filename==std::string("")){
59  warning("No ADC output data storage.");
60  if (m_ntriggersMax<1){
61  warning("No output file storage and no trigger. There is no processing to perform. Bad configuration.");
62  return StatusCode::FAILURE;
63  }
64  }
65  if ((m_filename!=std::string(""))&(m_options->dataStorage())){
66  info("Input data will be stored in files "+m_filename);
67  }
68  m_nFile = 0;
69  m_board=dynamic_cast<FEB_v1*>( element() );
70  return StatusCode::SUCCESS;
71 }
72 
73 //=========================================================================
74 //
75 //=========================================================================
77  debug("EmulateFE" , "execute");
79  if (m_filename!=std::string("") & m_options->dataStorage()){
80  generateFile();
81  }
82  if (m_ntriggersMax>0){
83  processingFE();
84  }
85  return StatusCode::SUCCESS;
86 }
87 
88 //=========================================================================
89 //
90 //=========================================================================
92  return StatusCode::SUCCESS;
93 }
94 
95 //=========================================================================
96 //
97 //=========================================================================
99  if (m_typeGeneration==0){
100  for (int i=0; i<4096; ++i){
101  m_adcin[4*i] = m_random.Rndm()*4096;
102  m_adcin[4*i+1] = m_random.Rndm()*4096;
103  m_adcin[4*i+2] = m_random.Rndm()*4096;
104  m_adcin[4*i+3] = m_random.Rndm()*4096;
105  }
106  }
107  else {
108  for (int i=0; i<4096; ++i){
109  float noise0 = m_random.Gaus(m_pedestal, m_noise);
110  float noise1 = m_random.Gaus(m_pedestal, m_noise);
111  float noise2 = m_random.Gaus(m_pedestal, m_noise);
112  float noise3 = m_random.Gaus(m_pedestal, m_noise);
113  float sig0 = m_random.Rndm();
114  float sig1 = m_random.Rndm();
115  float sig2 = m_random.Rndm();
116  float sig3 = m_random.Rndm();
117  if (m_random.Rndm()<m_signalRate){ m_adcin[4*i]=noise0+(m_random.Rndm()*(4096-noise0)); }
118  else m_adcin[4*i]=noise0;
119  if (m_random.Rndm()<m_signalRate){ m_adcin[4*i+1]=noise1+(m_random.Rndm()*(4096-noise1)); }
120  else m_adcin[4*i+1]=noise1;
121  if (m_random.Rndm()<m_signalRate){ m_adcin[4*i+2]=noise2+(m_random.Rndm()*(4096-noise2)); }
122  else m_adcin[4*i+2]=noise2;
123  if (m_random.Rndm()<m_signalRate){ m_adcin[4*i+3]=noise3+(m_random.Rndm()*(4096-noise3)); }
124  else m_adcin[4*i+3]=noise3;
125  }
126  }
127  return StatusCode::SUCCESS;
128 }
129 
130 //=========================================================================
131 //
132 //=========================================================================
134  std::string filename = m_options->storageFullPath();
135  filename.append("/");
136  filename.append(m_filename);
137  filename.append("_");
138  filename.append(itos(m_nFile));
139  filename.append(".data");
140  std::ofstream inputData;
141  inputData.open( filename.c_str() );
142 
143  time_t rawtime;
144  struct tm * timeinfo;
145  time ( &rawtime );
146  timeinfo = localtime ( &rawtime );
147  char* timechar = asctime (timeinfo) ;
148  std::string timing = std::string(timechar,24) + " ";
149 
150  if ( !inputData.fail() ){
151  inputData<<"#################################################"<<std::endl;
152  inputData<<"# Date : "<<timing<<std::endl;
153  inputData<<"# Type of Generation : "<<m_typeGeneration<<std::endl;
154  inputData<<"# 0 : Flat generation "<<std::endl;
155  inputData<<"# 1 : Gaussian noise + Flat signal "<<std::endl;
156  inputData<<"# Signal rate : "<<m_signalRate<<std::endl;
157  inputData<<"# Pedestal : "<<m_pedestal<<std::endl;
158  inputData<<"# Noise width : "<<m_noise<<std::endl;
159  inputData<<"#################################################"<<std::endl;
160  for (int i=0; i<4096; ++i){
161  char buffer[50];
162  sprintf (buffer, "%5i %5i %5i %5i \n",m_adcin[4*i], m_adcin[4*i+1], m_adcin[4*i+2], m_adcin[4*i+3]);
163  inputData<<buffer;
164  }
165  }
166  m_nFile++;
167  return StatusCode::SUCCESS;
168 }
169 
170 //=========================================================================
171 //
172 //=========================================================================
174  return StatusCode::SUCCESS;
175 }
void info(std::string mymsg)
Definition: Object.h:38
std::string itos(int)
Definition: Tools.cpp:46
int m_nFile
Definition: EmulateFE.h:99
StatusCode generateFile()
Definition: EmulateFE.cpp:133
void setName(std::string name)
Definition: Object.h:51
TRandom m_random
Definition: EmulateFE.h:96
virtual ~EmulateFE()
Destructor.
Definition: EmulateFE.cpp:42
int m_adcin[16384]
Definition: EmulateFE.h:106
virtual StatusCode execute()
Definition: EmulateFE.cpp:76
Application * application()
Definition: Tools.cpp:42
bool dataStorage()
Definition: Options.h:252
void setType(std::string type)
Definition: Object.h:52
EmulateFE()
Standard constructor.
Definition: EmulateFE.cpp:25
void debug(std::string mymsg)
Definition: Object.h:37
Definition: FEB_v1.h:21
FEB_v1 * m_board
Definition: EmulateFE.h:97
void setTitle(std::string title)
Definition: Object.h:54
Options * m_options
Definition: EmulateFE.h:101
float m_signalRate
Definition: EmulateFE.h:103
virtual StatusCode initialize()
Definition: EmulateFE.cpp:49
float m_noise
Definition: EmulateFE.h:105
StatusCode generateValues()
Definition: EmulateFE.cpp:98
std::string storageFullPath()
Definition: Options.h:159
StatusCode processingFE()
Definition: EmulateFE.cpp:173
std::string name() const
Definition: Object.h:28
std::string m_filename
Definition: EmulateFE.h:98
virtual StatusCode finalize()
Definition: EmulateFE.cpp:91
float m_pedestal
Definition: EmulateFE.h:104
Element * element()
Definition: Processus.h:231
int m_ntriggersMax
Definition: EmulateFE.h:107
std::string type()
Definition: Object.h:29
void warning(std::string mymsg)
Definition: Object.h:39
int m_typeGeneration
Definition: EmulateFE.h:102