CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Private Attributes
FillInfoPopConSourceHandler Class Reference

#include <FillInfoPopConSourceHandler.h>

Inheritance diagram for FillInfoPopConSourceHandler:
popcon::PopConSourceHandler< FillInfo >

Public Member Functions

 FillInfoPopConSourceHandler (const edm::ParameterSet &pset)
 
void getNewObjects () override
 
std::string id () const override
 
 ~FillInfoPopConSourceHandler () override
 
- Public Member Functions inherited from popcon::PopConSourceHandler< FillInfo >
void initialize (const cond::persistency::Session &dbSession, cond::TagInfo_t const &tagInfo, cond::LogDBEntry_t const &logDBEntry)
 
Ref lastPayload () const
 
cond::LogDBEntry_t const & logDBEntry () const
 
std::pair< Container const
*, std::string const > 
operator() (const cond::persistency::Session &session, cond::TagInfo_t const &tagInfo, cond::LogDBEntry_t const &logDBEntry) const
 
 PopConSourceHandler ()
 
Container const & returnData ()
 
cond::TagInfo_t const & tagInfo () const
 
std::string const & userTextLog () const
 
virtual ~PopConSourceHandler ()
 

Private Attributes

std::string m_authpath
 
std::string m_connectionString
 
bool m_debug
 
std::string m_dipSchema
 
unsigned short m_firstFill
 
unsigned short m_lastFill
 
std::string m_name
 

Additional Inherited Members

- Public Types inherited from popcon::PopConSourceHandler< FillInfo >
typedef std::map< Time_t,
std::shared_ptr< FillInfo > > 
Container
 
typedef std::unique_ptr< FillInfoRef
 
typedef PopConSourceHandler
< FillInfo
self
 
typedef cond::Time_t Time_t
 
typedef FillInfo value_type
 
- Protected Member Functions inherited from popcon::PopConSourceHandler< FillInfo >
cond::persistency::SessiondbSession () const
 
- Protected Attributes inherited from popcon::PopConSourceHandler< FillInfo >
Container m_iovs
 
std::vector< std::pair
< FillInfo *, Time_t > > 
m_to_transfer
 
std::string m_userTextLog
 

Detailed Description

Definition at line 10 of file FillInfoPopConSourceHandler.h.

Constructor & Destructor Documentation

FillInfoPopConSourceHandler::FillInfoPopConSourceHandler ( const edm::ParameterSet pset)

Definition at line 20 of file FillInfoPopConSourceHandler.cc.

21  : m_debug(pset.getUntrackedParameter<bool>("debug", false)),
22  m_firstFill((unsigned short)pset.getUntrackedParameter<unsigned int>("firstFill", 1)),
23  m_lastFill((unsigned short)pset.getUntrackedParameter<unsigned int>("lastFill", m_firstFill)),
24  m_name(pset.getUntrackedParameter<std::string>("name", "FillInfoPopConSourceHandler")),
25  m_connectionString(pset.getUntrackedParameter<std::string>("connectionString", "")),
26  m_dipSchema(pset.getUntrackedParameter<std::string>("DIPSchema", "")),
27  m_authpath(pset.getUntrackedParameter<std::string>("authenticationPath", "")) {}
T getUntrackedParameter(std::string const &, T const &) const
FillInfoPopConSourceHandler::~FillInfoPopConSourceHandler ( )
override

Definition at line 29 of file FillInfoPopConSourceHandler.cc.

29 {}

Member Function Documentation

void FillInfoPopConSourceHandler::getNewObjects ( )
overridevirtual

Implements popcon::PopConSourceHandler< FillInfo >.

Definition at line 31 of file FillInfoPopConSourceHandler.cc.

References FillInfo::availableBunchSlots, cond::persistency::Session::close(), cond::persistency::Transaction::commit(), cond::persistency::ConnectionPool::configure(), cond::persistency::Session::coralSession(), FillInfo::COSMICS, cond::persistency::ConnectionPool::createSession(), BeamSpotPI::creationTime, Debug, relval_parameters_module::energy, first, cond::time::from_boost(), FillInfo::GAP, FillInfo::IONS, cond::TagInfo_t::lastInterval, popcon::PopConSourceHandler< FillInfo >::lastPayload(), m_authpath, m_connectionString, m_debug, m_dipSchema, m_firstFill, m_lastFill, m_name, popcon::PopConSourceHandler< FillInfo >::m_to_transfer, popcon::PopConSourceHandler< FillInfo >::m_userTextLog, cond::TagInfo_t::name, cond::persistency::Session::nominalSchema(), FillInfo::NONE, cond::time::pack(), cond::Iov_t::payloadId, FillInfo::PB82, FillInfo::PROTON, FillInfo::PROTONS, edm::second(), run_AlCaRecoTriggerBitsUpdateWorkflow::session, cond::persistency::ConnectionPool::setAuthenticationPath(), FillInfo::setBeamInfo(), cond::persistency::ConnectionPool::setMessageVerbosity(), cond::Iov_t::since, cond::TagInfo_t::size, findQualityFiles::size, contentValuesCheck::ss, cond::persistency::Transaction::start(), AlCaHLTBitMon_QueryRunRegistry::string, popcon::PopConSourceHandler< FillInfo >::tagInfo(), cond::time::to_boost(), cond::persistency::Session::transaction(), FillInfo::UNKNOWN, and cond::time::unpack().

31  {
32  //reference to the last payload in the tag
33  Ref previousFill;
34 
35  //if a new tag is created, transfer fake fill from 1 to the first fill for the first time
36  if (tagInfo().size == 0) {
37  edm::LogInfo(m_name) << "New tag " << tagInfo().name << "; from " << m_name << "::getNewObjects";
38  } else {
39  //check what is already inside the database
40  edm::LogInfo(m_name) << "got info for tag " << tagInfo().name << ": size " << tagInfo().size
41  << ", last object valid since " << tagInfo().lastInterval.since << " ( "
42  << boost::posix_time::to_iso_extended_string(
43  cond::time::to_boost(tagInfo().lastInterval.since))
44  << " ); from " << m_name << "::getNewObjects";
45  //retrieve the last payload...
46  previousFill = this->lastPayload();
47  //checking its content
48  edm::LogInfo(m_name) << "The last payload in tag " << tagInfo().name << " valid since "
49  << tagInfo().lastInterval.since << " has token " << tagInfo().lastInterval.payloadId
50  << " and values:\n"
51  << *previousFill << "from " << m_name << "::getNewObjects";
52  if (m_firstFill <= previousFill->fillNumber()) {
53  //either we are trying to put the same value, or we want to put an older fill:
54  //the first fill will become the previous one plus one
55  std::ostringstream es;
56  es << "Trying to insert fill number " << m_firstFill
57  << ((m_firstFill < previousFill->fillNumber()) ? ", which is an older fill than "
58  : ", which is the same fill as ")
59  << "the last one in the destination tag " << previousFill->fillNumber()
60  << ": the first fill to be looked for will become " << previousFill->fillNumber() + 1;
61  edm::LogWarning(m_name) << es.str() << "; from " << m_name << "::getNewObjects";
62  m_firstFill = previousFill->fillNumber() + 1;
63  }
64  }
65 
66  //if the last fill to be looked for is smaller than the first one send error message and return
67  //this check cannot be done before, as we should find which is the first fill to query
68  if (m_firstFill > m_lastFill) {
69  edm::LogError(m_name) << "WRONG CONFIGURATION! The first fill " << m_firstFill
70  << " cannot be larger than the last one " << m_lastFill << " EXITING. from " << m_name
71  << "::getNewObjects";
72  return;
73  }
74 
75  //retrieve the data from the relational database source
77  //configure the connection
78  if (m_debug) {
80  } else {
82  }
84  connection.configure();
85  //create a sessiom
87  //run the first query against the schema logging fill information
88  coral::ISchema &runTimeLoggerSchema = session.nominalSchema();
89  //start the transaction against the fill logging schema
90  session.transaction().start(true);
91  //prepare the query:
92  std::unique_ptr<coral::IQuery> fillDataQuery(runTimeLoggerSchema.newQuery());
93  //FROM clause
94  fillDataQuery->addToTableList(std::string("RUNTIME_SUMMARY"));
95  //SELECT clause
96  fillDataQuery->addToOutputList(std::string("LHCFILL"));
97  fillDataQuery->addToOutputList(std::string("NBUNCHESBEAM1"));
98  fillDataQuery->addToOutputList(std::string("NBUNCHESBEAM2"));
99  fillDataQuery->addToOutputList(std::string("NCOLLIDINGBUNCHES"));
100  fillDataQuery->addToOutputList(std::string("NTARGETBUNCHES"));
101  fillDataQuery->addToOutputList(std::string("RUNTIME_TYPE_ID"));
102  fillDataQuery->addToOutputList(std::string("PARTY1"));
103  fillDataQuery->addToOutputList(std::string("PARTY2"));
104  fillDataQuery->addToOutputList(std::string("CROSSINGANGLE"));
105  fillDataQuery->addToOutputList(std::string("BETASTAR"));
106  fillDataQuery->addToOutputList(std::string("INTENSITYBEAM1"));
107  fillDataQuery->addToOutputList(std::string("INTENSITYBEAM2"));
108  fillDataQuery->addToOutputList(std::string("ENERGY"));
109  fillDataQuery->addToOutputList(std::string("CREATETIME"));
110  fillDataQuery->addToOutputList(std::string("BEGINTIME"));
111  fillDataQuery->addToOutputList(std::string("ENDTIME"));
112  fillDataQuery->addToOutputList(std::string("INJECTIONSCHEME"));
113  //WHERE clause
114  coral::AttributeList fillDataBindVariables;
115  fillDataBindVariables.extend(std::string("firstFillNumber"), typeid(unsigned short));
116  fillDataBindVariables[std::string("firstFillNumber")].data<unsigned short>() = m_firstFill;
117  fillDataBindVariables.extend(std::string("lastFillNumber"), typeid(unsigned short));
118  fillDataBindVariables[std::string("lastFillNumber")].data<unsigned short>() = m_lastFill;
119  //by imposing BEGINTIME IS NOT NULL, we remove fills which never went into stable beams,
120  //or the most recent one, just declared but not yet in stable beams
121  std::string conditionStr("BEGINTIME IS NOT NULL AND LHCFILL BETWEEN :firstFillNumber AND :lastFillNumber");
122  fillDataQuery->setCondition(conditionStr, fillDataBindVariables);
123  //ORDER BY clause
124  fillDataQuery->addToOrderList(std::string("LHCFILL"));
125  //define query output
126  coral::AttributeList fillDataOutput;
127  fillDataOutput.extend<unsigned short>(std::string("LHCFILL"));
128  fillDataOutput.extend<unsigned short>(std::string("NBUNCHESBEAM1"));
129  fillDataOutput.extend<unsigned short>(std::string("NBUNCHESBEAM2"));
130  fillDataOutput.extend<unsigned short>(std::string("NCOLLIDINGBUNCHES"));
131  fillDataOutput.extend<unsigned short>(std::string("NTARGETBUNCHES"));
132  fillDataOutput.extend<int>(std::string("RUNTIME_TYPE_ID"));
133  fillDataOutput.extend<int>(std::string("PARTY1"));
134  fillDataOutput.extend<int>(std::string("PARTY2"));
135  fillDataOutput.extend<float>(std::string("CROSSINGANGLE"));
136  fillDataOutput.extend<float>(std::string("BETASTAR"));
137  fillDataOutput.extend<float>(std::string("INTENSITYBEAM1"));
138  fillDataOutput.extend<float>(std::string("INTENSITYBEAM2"));
139  fillDataOutput.extend<float>(std::string("ENERGY"));
140  fillDataOutput.extend<coral::TimeStamp>(std::string("CREATETIME"));
141  fillDataOutput.extend<coral::TimeStamp>(std::string("BEGINTIME"));
142  fillDataOutput.extend<coral::TimeStamp>(std::string("ENDTIME"));
143  fillDataOutput.extend<std::string>(std::string("INJECTIONSCHEME"));
144  fillDataQuery->defineOutput(fillDataOutput);
145  //execute the query
146  coral::ICursor &fillDataCursor = fillDataQuery->execute();
147  //initialize loop variables
148  unsigned short previousFillNumber = 1;
149  unsigned short currentFill = m_firstFill;
150  cond::Time_t previousFillEndTime = 0ULL, afterPreviousFillEndTime = 0ULL, beforeStableBeamStartTime = 0ULL;
151  if (tagInfo().size > 0) {
152  previousFillNumber = previousFill->fillNumber();
153  previousFillEndTime = previousFill->endTime();
154  }
155  unsigned short bunches1 = 0, bunches2 = 0, collidingBunches = 0, targetBunches = 0;
157  FillInfo::ParticleTypeId particleType1 = FillInfo::NONE, particleType2 = FillInfo::NONE;
158  float crossingAngle = 0., betastar = 0., intensityBeam1 = 0., intensityBeam2 = 0., energy = 0.;
159  coral::TimeStamp stableBeamStartTimeStamp, beamDumpTimeStamp;
160  cond::Time_t creationTime = 0ULL, stableBeamStartTime = 0ULL, beamDumpTime = 0ULL;
161  std::string injectionScheme("None");
162  std::ostringstream ss;
163  //loop over the cursor where the result of the query were fetched
164  while (fillDataCursor.next()) {
165  if (m_debug) {
166  std::ostringstream qs;
167  fillDataCursor.currentRow().toOutputStream(qs);
168  edm::LogInfo(m_name) << qs.str() << "\nfrom " << m_name << "::getNewObjects";
169  }
170  currentFill = fillDataCursor.currentRow()[std::string("LHCFILL")].data<unsigned short>();
171  coral::Attribute const &bunches1Attribute = fillDataCursor.currentRow()[std::string("NBUNCHESBEAM1")];
172  if (bunches1Attribute.isNull()) {
173  bunches1 = 0;
174  } else {
175  bunches1 = bunches1Attribute.data<unsigned short>();
176  }
177  coral::Attribute const &bunches2Attribute = fillDataCursor.currentRow()[std::string("NBUNCHESBEAM2")];
178  if (bunches2Attribute.isNull()) {
179  bunches2 = 0;
180  } else {
181  bunches2 = bunches2Attribute.data<unsigned short>();
182  }
183  coral::Attribute const &collidingBunchesAttribute = fillDataCursor.currentRow()[std::string("NCOLLIDINGBUNCHES")];
184  if (collidingBunchesAttribute.isNull()) {
185  collidingBunches = 0;
186  } else {
187  collidingBunches = collidingBunchesAttribute.data<unsigned short>();
188  }
189  coral::Attribute const &targetBunchesAttribute = fillDataCursor.currentRow()[std::string("NTARGETBUNCHES")];
190  if (targetBunchesAttribute.isNull()) {
191  targetBunches = 0;
192  } else {
193  targetBunches = targetBunchesAttribute.data<unsigned short>();
194  }
195  //RUNTIME_TYPE_ID IS NOT NULL
196  fillType =
197  static_cast<FillInfo::FillTypeId>(fillDataCursor.currentRow()[std::string("RUNTIME_TYPE_ID")].data<int>());
198  coral::Attribute const &particleType1Attribute = fillDataCursor.currentRow()[std::string("PARTY1")];
199  if (particleType1Attribute.isNull()) {
200  particleType1 = FillInfo::NONE;
201  } else {
202  particleType1 = static_cast<FillInfo::ParticleTypeId>(particleType1Attribute.data<int>());
203  }
204  coral::Attribute const &particleType2Attribute = fillDataCursor.currentRow()[std::string("PARTY2")];
205  if (particleType2Attribute.isNull()) {
206  particleType2 = FillInfo::NONE;
207  } else {
208  particleType2 = static_cast<FillInfo::ParticleTypeId>(particleType2Attribute.data<int>());
209  }
210  coral::Attribute const &crossingAngleAttribute = fillDataCursor.currentRow()[std::string("CROSSINGANGLE")];
211  if (crossingAngleAttribute.isNull()) {
212  crossingAngle = 0.;
213  } else {
214  crossingAngle = crossingAngleAttribute.data<float>();
215  }
216  coral::Attribute const &betastarAttribute = fillDataCursor.currentRow()[std::string("BETASTAR")];
217  if (betastarAttribute.isNull()) {
218  betastar = 0.;
219  } else {
220  betastar = betastarAttribute.data<float>();
221  }
222  coral::Attribute const &intensityBeam1Attribute = fillDataCursor.currentRow()[std::string("INTENSITYBEAM1")];
223  if (intensityBeam1Attribute.isNull()) {
224  intensityBeam1 = 0.;
225  } else {
226  intensityBeam1 = intensityBeam1Attribute.data<float>();
227  }
228  coral::Attribute const &intensityBeam2Attribute = fillDataCursor.currentRow()[std::string("INTENSITYBEAM2")];
229  if (intensityBeam2Attribute.isNull()) {
230  intensityBeam2 = 0.;
231  } else {
232  intensityBeam2 = intensityBeam2Attribute.data<float>();
233  }
234  coral::Attribute const &energyAttribute = fillDataCursor.currentRow()[std::string("ENERGY")];
235  if (energyAttribute.isNull()) {
236  energy = 0.;
237  } else {
238  energy = energyAttribute.data<float>();
239  }
240  //CREATETIME IS NOT NULL
241  creationTime =
242  cond::time::from_boost(fillDataCursor.currentRow()[std::string("CREATETIME")].data<coral::TimeStamp>().time());
243  //BEGINTIME is imposed to be NOT NULL in the WHERE clause
244  stableBeamStartTimeStamp = fillDataCursor.currentRow()[std::string("BEGINTIME")].data<coral::TimeStamp>();
245  stableBeamStartTime = cond::time::from_boost(stableBeamStartTimeStamp.time());
246  coral::Attribute const &beamDumpTimeAttribute = fillDataCursor.currentRow()[std::string("ENDTIME")];
247  if (beamDumpTimeAttribute.isNull()) {
248  beamDumpTime = 0;
249  } else {
250  beamDumpTimeStamp = beamDumpTimeAttribute.data<coral::TimeStamp>();
251  beamDumpTime = cond::time::from_boost(beamDumpTimeStamp.time());
252  }
253  coral::Attribute const &injectionSchemeAttribute = fillDataCursor.currentRow()[std::string("INJECTIONSCHEME")];
254  if (injectionSchemeAttribute.isNull()) {
255  injectionScheme = std::string("None");
256  } else {
257  injectionScheme = injectionSchemeAttribute.data<std::string>();
258  }
259  //fix an inconsistency in RunTimeLogger: if the fill type is defined, the particle type should reflect it!
260  if (fillType != FillInfo::UNKNOWN && (particleType1 == FillInfo::NONE || particleType2 == FillInfo::NONE)) {
261  switch (fillType) {
262  case FillInfo::PROTONS:
263  particleType1 = FillInfo::PROTON;
264  particleType2 = FillInfo::PROTON;
265  break;
266  case FillInfo::IONS:
267  particleType1 = FillInfo::PB82;
268  particleType2 = FillInfo::PB82;
269  break;
270  case FillInfo::UNKNOWN:
271  case FillInfo::COSMICS:
272  case FillInfo::GAP:
273  break;
274  }
275  }
276  //if the end time of the fill is 0 (i.e. timestamp null), it is still ongoing: do not store!
277  if (beamDumpTime == 0) {
278  edm::LogWarning(m_name) << "NO TRANSFER NEEDED: the fill number " << currentFill << " is still ongoing"
279  << "; from " << m_name << "::getNewObjects";
280  continue;
281  }
282  //run the second and third query against the schema hosting detailed DIP information
283  coral::ISchema &beamCondSchema = session.coralSession().schema(m_dipSchema);
284  //start the transaction against the DIP "deep" database backend schema
285  session.transaction().start(true);
286  //prepare the WHERE clause for both queries
287  coral::AttributeList bunchConfBindVariables;
288  bunchConfBindVariables.extend<coral::TimeStamp>(std::string("stableBeamStartTimeStamp"));
289  bunchConfBindVariables[std::string("stableBeamStartTimeStamp")].data<coral::TimeStamp>() = stableBeamStartTimeStamp;
290  conditionStr = std::string("DIPTIME <= :stableBeamStartTimeStamp");
291  //define the output types for both queries
292  coral::AttributeList bunchConfOutput;
293  bunchConfOutput.extend<coral::TimeStamp>(std::string("DIPTIME"));
294  bunchConfOutput.extend<unsigned short>(std::string("BUCKET"));
295  //execute query for Beam 1
296  std::unique_ptr<coral::IQuery> bunchConf1Query(beamCondSchema.newQuery());
297  bunchConf1Query->addToTableList(std::string("LHC_CIRCBUNCHCONFIG_BEAM1"),
298  std::string("BEAMCONF\", TABLE( BEAMCONF.VALUE ) \"BUCKETS"));
299  bunchConf1Query->addToOutputList(std::string("BEAMCONF.DIPTIME"), std::string("DIPTIME"));
300  bunchConf1Query->addToOutputList(std::string("BUCKETS.COLUMN_VALUE"), std::string("BUCKET"));
301  bunchConf1Query->setCondition(conditionStr, bunchConfBindVariables);
302  bunchConf1Query->addToOrderList(std::string("DIPTIME DESC"));
303  bunchConf1Query->limitReturnedRows(FillInfo::availableBunchSlots); //maximum number of filled bunches
304  bunchConf1Query->defineOutput(bunchConfOutput);
305  coral::ICursor &bunchConf1Cursor = bunchConf1Query->execute();
306  std::bitset<FillInfo::bunchSlots + 1> bunchConfiguration1(0ULL);
307  while (bunchConf1Cursor.next()) {
308  if (m_debug) {
309  std::ostringstream b1s;
310  fillDataCursor.currentRow().toOutputStream(b1s);
311  edm::LogInfo(m_name) << b1s.str() << "\nfrom " << m_name << "::getNewObjects";
312  }
313  //bunchConf1Cursor.currentRow().toOutputStream( std::cout ) << std::endl;
314  if (bunchConf1Cursor.currentRow()[std::string("BUCKET")].data<unsigned short>() != 0) {
315  unsigned short slot =
316  (bunchConf1Cursor.currentRow()[std::string("BUCKET")].data<unsigned short>() - 1) / 10 + 1;
317  bunchConfiguration1[slot] = true;
318  }
319  }
320  //execute query for Beam 2
321  std::unique_ptr<coral::IQuery> bunchConf2Query(beamCondSchema.newQuery());
322  bunchConf2Query->addToTableList(std::string("LHC_CIRCBUNCHCONFIG_BEAM2"),
323  std::string("BEAMCONF\", TABLE( BEAMCONF.VALUE ) \"BUCKETS"));
324  bunchConf2Query->addToOutputList(std::string("BEAMCONF.DIPTIME"), std::string("DIPTIME"));
325  bunchConf2Query->addToOutputList(std::string("BUCKETS.COLUMN_VALUE"), std::string("BUCKET"));
326  bunchConf2Query->setCondition(conditionStr, bunchConfBindVariables);
327  bunchConf2Query->addToOrderList(std::string("DIPTIME DESC"));
328  bunchConf2Query->limitReturnedRows(FillInfo::availableBunchSlots); //maximum number of filled bunches
329  bunchConf2Query->defineOutput(bunchConfOutput);
330  coral::ICursor &bunchConf2Cursor = bunchConf2Query->execute();
331  std::bitset<FillInfo::bunchSlots + 1> bunchConfiguration2(0ULL);
332  while (bunchConf2Cursor.next()) {
333  if (m_debug) {
334  std::ostringstream b2s;
335  fillDataCursor.currentRow().toOutputStream(b2s);
336  edm::LogInfo(m_name) << b2s.str() << "\nfrom " << m_name << "::getNewObjects";
337  }
338  if (bunchConf2Cursor.currentRow()[std::string("BUCKET")].data<unsigned short>() != 0) {
339  unsigned short slot =
340  (bunchConf2Cursor.currentRow()[std::string("BUCKET")].data<unsigned short>() - 1) / 10 + 1;
341  bunchConfiguration2[slot] = true;
342  }
343  }
344  //commit the transaction against the DIP "deep" database backend schema
345  session.transaction().commit();
346 
347  //store dummy fill information if empty fills are found beetween the two last ones in stable beams
348  afterPreviousFillEndTime = cond::time::pack(std::make_pair(cond::time::unpack(previousFillEndTime).first,
349  cond::time::unpack(previousFillEndTime).second + 1));
350  beforeStableBeamStartTime = cond::time::pack(std::make_pair(cond::time::unpack(stableBeamStartTime).first,
351  cond::time::unpack(stableBeamStartTime).second - 1));
352  if (afterPreviousFillEndTime < stableBeamStartTime) {
353  edm::LogInfo(m_name) << "Entering fake fill between fill number " << previousFillNumber
354  << " and current fill number " << currentFill << ", from " << afterPreviousFillEndTime
355  << " ( "
356  << boost::posix_time::to_iso_extended_string(cond::time::to_boost(afterPreviousFillEndTime))
357  << " ) to " << beforeStableBeamStartTime << " ( "
358  << boost::posix_time::to_iso_extended_string(cond::time::to_boost(beforeStableBeamStartTime))
359  << " ); from " << m_name << "::getNewObjects";
360  m_to_transfer.push_back(std::make_pair(new FillInfo(), afterPreviousFillEndTime));
361  } else {
362  //the current fill cannot start before the previous one!
363  edm::LogError(m_name) << "WRONG DATA! In the previous fill number " << previousFillNumber
364  << " beams were dumped at timestamp "
365  << boost::posix_time::to_iso_extended_string(cond::time::to_boost(previousFillEndTime))
366  << ", which is not before the timestamp "
367  << boost::posix_time::to_iso_extended_string(cond::time::to_boost(stableBeamStartTime))
368  << " when current fill number " << currentFill << " entered stable beams. EXITING. from "
369  << m_name << "::getNewObjects";
370  return;
371  }
372  //construct an instance of FillInfo and set its values
373  FillInfo *fillInfo = new FillInfo(currentFill);
374  fillInfo->setBeamInfo(const_cast<unsigned short const &>(bunches1),
375  const_cast<unsigned short const &>(bunches2),
376  const_cast<unsigned short const &>(collidingBunches),
377  const_cast<unsigned short const &>(targetBunches),
378  const_cast<FillInfo::FillTypeId const &>(fillType),
379  const_cast<FillInfo::ParticleTypeId const &>(particleType1),
380  const_cast<FillInfo::ParticleTypeId const &>(particleType2),
381  const_cast<float const &>(crossingAngle),
382  const_cast<float const &>(betastar),
383  const_cast<float const &>(intensityBeam1),
384  const_cast<float const &>(intensityBeam2),
385  const_cast<float const &>(energy),
386  const_cast<cond::Time_t const &>(creationTime),
387  const_cast<cond::Time_t const &>(stableBeamStartTime),
388  const_cast<cond::Time_t const &>(beamDumpTime),
389  const_cast<std::string const &>(injectionScheme),
390  const_cast<std::bitset<FillInfo::bunchSlots + 1> const &>(bunchConfiguration1),
391  const_cast<std::bitset<FillInfo::bunchSlots + 1> const &>(bunchConfiguration2));
392  //store this payload
393  m_to_transfer.push_back(std::make_pair((FillInfo *)fillInfo, stableBeamStartTime));
394  edm::LogInfo(m_name) << "The new payload to be inserted into tag " << tagInfo().name << " with validity "
395  << stableBeamStartTime << " ( "
396  << boost::posix_time::to_iso_extended_string(cond::time::to_boost(stableBeamStartTime))
397  << " ) has values:\n"
398  << *fillInfo << "from " << m_name << "::getNewObjects";
399  //add log information
400  ss << " fill = " << currentFill << ";\tinjection scheme: " << injectionScheme
401  << ";\tstart time: " << boost::posix_time::to_iso_extended_string(stableBeamStartTimeStamp.time())
402  << ";\tend time: " << boost::posix_time::to_iso_extended_string(beamDumpTimeStamp.time()) << "." << std::endl;
403  //prepare variables for next iteration
404  previousFillNumber = currentFill;
405  previousFillEndTime = beamDumpTime;
406  }
407  //commit the transaction against the fill logging schema
408  session.transaction().commit();
409  //close the session
410  session.close();
411  //store log information
412  m_userTextLog = ss.str();
413  edm::LogInfo(m_name) << "Transferring " << m_to_transfer.size() << " payload(s); from " << m_name
414  << "::getNewObjects";
415 }
edm::ErrorSummaryEntry Error
ParticleType
Definition: FillInfo.h:16
void setBeamInfo(unsigned short const &bunches1, unsigned short const &bunches2, unsigned short const &collidingBunches, unsigned short const &targetBunches, FillTypeId const &fillType, ParticleTypeId const &particleType1, ParticleTypeId const &particleType2, float const &angle, float const &beta, float const &intensity1, float const &intensity2, float const &energy, cond::Time_t const &createTime, cond::Time_t const &beginTime, cond::Time_t const &endTime, std::string const &scheme, std::bitset< bunchSlots+1 > const &bunchConf1, std::bitset< bunchSlots+1 > const &bunchConf2)
Definition: FillInfo.cc:238
Iov_t lastInterval
Definition: Types.h:73
void start(bool readOnly=true)
Definition: Session.cc:18
Time_t since
Definition: Types.h:53
size_t size
Definition: Types.h:74
cond::Time_t pack(cond::UnpackedTime iValue)
Log< level::Error, false > LogError
static size_t const availableBunchSlots
Definition: FillInfo.h:27
Transaction & transaction()
Definition: Session.cc:52
std::string name
Definition: Types.h:72
U second(std::pair< T, U > const &p)
unsigned long long Time_t
Definition: Time.h:14
std::vector< std::pair< FillInfo *, Time_t > > m_to_transfer
coral::ISchema & nominalSchema()
Definition: Session.cc:224
Hash payloadId
Definition: Types.h:55
Session createSession(const std::string &connectionString, bool writeCapable=false)
void setMessageVerbosity(coral::MsgLevel level)
Time_t from_boost(boost::posix_time::ptime bt)
Log< level::Info, false > LogInfo
coral::ISessionProxy & coralSession()
Definition: Session.cc:218
Log< level::Warning, false > LogWarning
void setAuthenticationPath(const std::string &p)
const bool Debug
tuple size
Write out results.
boost::posix_time::ptime to_boost(Time_t iValue)
cond::TagInfo_t const & tagInfo() const
cond::UnpackedTime unpack(cond::Time_t iValue)
std::string FillInfoPopConSourceHandler::id ( ) const
overridevirtual

Implements popcon::PopConSourceHandler< FillInfo >.

Definition at line 417 of file FillInfoPopConSourceHandler.cc.

References m_name.

417 { return m_name; }

Member Data Documentation

std::string FillInfoPopConSourceHandler::m_authpath
private

Definition at line 22 of file FillInfoPopConSourceHandler.h.

Referenced by getNewObjects().

std::string FillInfoPopConSourceHandler::m_connectionString
private

Definition at line 22 of file FillInfoPopConSourceHandler.h.

Referenced by getNewObjects().

bool FillInfoPopConSourceHandler::m_debug
private

Definition at line 18 of file FillInfoPopConSourceHandler.h.

Referenced by getNewObjects().

std::string FillInfoPopConSourceHandler::m_dipSchema
private

Definition at line 22 of file FillInfoPopConSourceHandler.h.

Referenced by getNewObjects().

unsigned short FillInfoPopConSourceHandler::m_firstFill
private

Definition at line 19 of file FillInfoPopConSourceHandler.h.

Referenced by getNewObjects().

unsigned short FillInfoPopConSourceHandler::m_lastFill
private

Definition at line 19 of file FillInfoPopConSourceHandler.h.

Referenced by getNewObjects().

std::string FillInfoPopConSourceHandler::m_name
private

Definition at line 20 of file FillInfoPopConSourceHandler.h.

Referenced by getNewObjects(), and id().