CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EcalADCToGeVHandler.cc
Go to the documentation of this file.
5 
6 
7 #include<iostream>
8 
10  : m_name(ps.getUntrackedParameter<std::string>("name","EcalADCToGeVHandler")) {
11 
12  std::cout << "EcalADCToGeV Source handler constructor\n" << std::endl;
13  m_firstRun=static_cast<unsigned int>(atoi( ps.getParameter<std::string>("firstRun").c_str()));
14  m_lastRun=static_cast<unsigned int>(atoi( ps.getParameter<std::string>("lastRun").c_str()));
15  m_sid= ps.getParameter<std::string>("OnlineDBSID");
16  m_user= ps.getParameter<std::string>("OnlineDBUser");
17  m_pass= ps.getParameter<std::string>("OnlineDBPassword");
18  m_locationsource= ps.getParameter<std::string>("LocationSource");
19  m_location=ps.getParameter<std::string>("Location");
20  m_gentag=ps.getParameter<std::string>("GenTag");
21  m_file_lowfield= ps.getParameter<std::string>("FileLowField");
22  m_file_highfield= ps.getParameter<std::string>("FileHighField");
23 
24 
25 
26  std::cout << m_sid<<"/"<<m_user<<"/"<<m_location<<"/"<<m_gentag << std::endl;
27 
28 }
29 
31 {
32 }
33 
34 
36 {
37 
38  std::cout << "------- Ecal - > getNewObjects\n";
39 
40  std::ostringstream ss;
41  ss<<"ECAL ";
42 
43  unsigned int max_since=0;
44  max_since=static_cast<unsigned int>(tagInfo().lastInterval.first);
45  std::cout << "max_since : " << max_since << std::endl;
46  bool magnet_high = false;
47  bool something_to_transfer = false;
48  if(tagInfo().size) {
49  Ref ped_db = lastPayload();
50 
51  // we parse the last record in the DB and check if it is low or high field
52 
53  std::cout << "retrieved last payload " << std::endl;
54 
55 
56  EcalADCToGeVConstant the_cal ;
57 
58  //unused float adc_eb=ped_db->getEBValue();
59  float adc_ee=ped_db->getEEValue();
60 
61  // float the_value_high_eb=0.03894;
62  // float the_value_high_ee=0.06285;
63  // float the_value_high_eb=0.03894;
64  // float the_value_high_ee=0.06378;
65 
66 
67  // bool magnet_high=true;
68  // if(adc_eb!= the_value_high_eb || adc_ee!= the_value_high_ee ) magnet_high=false;
69 
70 
71  //unused float the_value_low_eb=0.03894;
72  // Run 1 : float the_value_low_ee=0.05678;
73  float the_value_low_ee=0.0590975;
74  if( adc_ee > the_value_low_ee ) magnet_high=true;
75  } // check if there is already a payload
76  else something_to_transfer = true;
77 
78  // here we connect to the online DB to check the value of the magnetic field
79  std::cout << "Connecting to ONLINE DB ... " << std::endl;
80  econn = new EcalCondDBInterface( m_sid, m_user, m_pass );
81  std::cout << "Connection done" << std::endl;
82 
83  if (!econn)
84  {
85  std::cout << " Problem with OMDS: connection parameters " <<m_sid <<"/"<<m_user<<"/"<<m_pass<<std::endl;
86  throw cms::Exception("OMDS not available");
87  }
88 
89 
90  std::cout << "Retrieving last run from ONLINE DB ... " << std::endl;
91  std::map<EcalLogicID, RunDat> rundat;
92  RunIOV rp ;
93  run_t runmax=10000000;
94  std::string location_p5="P5_Co";
95  econn->fetchValidDataSet(&rundat , &rp, location_p5 ,runmax);
96 
97  unsigned long long irun=(unsigned long long) rp.getRunNumber();
98 
99  std::cout<< "retrieved run number "<< irun <<std::endl;
100 
101  if(irun>max_since) {
102  // retrieve from last value data record
103  // always call this method at first run
104 
105  std::map<EcalLogicID, RunDCSMagnetDat> dataset;
106 
107  econn->fetchDataSet(&dataset, &rp);
108 
109  if (!dataset.size()) {
110  throw(std::runtime_error("Zero rows read back"));
111  } else {
112  std::cout<< "retrieved magnet current"<<std::endl;
113  }
114 
115 
116  float mag_cur=0;
117 
118  std::map< EcalLogicID, RunDCSMagnetDat >::iterator it;
119  for (it=dataset.begin(); it!=dataset.end(); ++it){
120 
121  RunDCSMagnetDat a_mag = (*it).second;
122  mag_cur= a_mag.getMagnetCurrent();
123 
124  }
125 
126 
127  std::string file_=m_file_highfield;
128  if(tagInfo().size) {
129  if(mag_cur>7000. && magnet_high ) {
130 
131  std::cout << " the magnet is ON and the constants are for magnet ON " << std::endl;
132 
133  } else if(mag_cur>7000. && !magnet_high ) {
134  something_to_transfer=true;
135  std::cout << " the magnet is ON and the constants are for magnet OFF " << std::endl;
136  std::cout << " I transfer the ON constants "<< std::endl;
137  file_=m_file_highfield;
138 
139  } else if(mag_cur<6000. && magnet_high ) {
140  something_to_transfer=true;
141  std::cout << " the magnet is OFF and the constants are for magnet ON "<< std::endl;
142  std::cout << " I transfer the OFF constants "<< std::endl;
143  file_=m_file_lowfield;
144 
145  } else if( mag_cur<6000. && !magnet_high ){
146 
147  std::cout << " the magnet is OFF and the constants are for magnet OFF "<< std::endl;
148  file_=m_file_lowfield;
149 
150  } else {
151 
152  std::cout << " the magnet is in a strange situation I do nothing ... just be patient "<< std::endl;
153 
154  }
155  }
156  else {
157  if(mag_cur>7000.)
158  std::cout <<" first payload, the magnet is ON " << std::endl;
159  else if( mag_cur<6000.) {
160  std::cout <<" first payload, the magnet is OFF " << std::endl;
161  file_=m_file_lowfield;
162  }
163  else
164  std::cout << " the magnet is in a strange situation I do nothing ... just be patient "<< std::endl;
165  }
166 
167  if(something_to_transfer) {
168 
169  std::cout << "Generating popcon record for run " << irun << "..." << std::flush;
170  std::cout << "going to open file "<<file_ << std::flush;
171 
172 
173  EcalCondHeader header;
175  EcalADCToGeVXMLTranslator::readXML(file_,header,*payload);
176 
177 
178  Time_t snc= (Time_t) irun ;
179 
181  std::make_pair(payload,snc));
182 
183  ss << "Run=" << irun << "_Magnet_changed_"<<std::endl;
184  m_userTextLog = ss.str()+";";
185 
186  } else {
187  std::cout << "Run " << irun << " nothing sent to the DB"<< std::endl;
188 
189  ss<< "Run=" << irun << "_Magnet_NOT_changed_"<<std::endl;
190  m_userTextLog = ss.str()+";";
191  }
192 
193  delete econn;
194  } // irun > max_since
195  else {
196  std::cout << "Run " << irun << " nothing sent to the DB"<< std::endl;
197  ss<< "Run=" << irun << "_no_new_runs_"<<std::endl;
198  m_userTextLog = ss.str()+";";
199 
200 
201  }
202 
203  std::cout << "Ecal - > end of getNewObjects -----------\n";
204 }
205 
T getParameter(std::string const &) const
int run_t
Definition: CaliIOV.h:11
static int readXML(const std::string &filename, EcalCondHeader &header, EcalADCToGeVConstant &record)
float getMagnetCurrent() const
run_t getRunNumber() const
Definition: RunIOV.cc:45
cond::Time_t Time_t
Definition: Time.h:17
EcalADCToGeVHandler(edm::ParameterSet const &)
tuple cout
Definition: gather_cfg.py:145
Definition: RunIOV.h:13
tuple size
Write out results.