CMS 3D CMS Logo

Public Member Functions

cond::AlignSplitIOV Class Reference

Inheritance diagram for cond::AlignSplitIOV:
cond::Utilities

List of all members.

Public Member Functions

 AlignSplitIOV ()
int execute ()
 ~AlignSplitIOV ()

Detailed Description

Definition at line 35 of file aligncond_split_iov.cc.


Constructor & Destructor Documentation

cond::AlignSplitIOV::AlignSplitIOV ( )

Definition at line 43 of file aligncond_split_iov.cc.

References cond::Utilities::addAuthenticationOptions(), and cond::Utilities::addConnectOption().

 :Utilities("aligncond_split_iov")
{
  addConnectOption("sourceConnect","s","source connection string(required)");
  addConnectOption("destConnect","d","destionation connection string(required)");
  addOption<std::string>("sourceTag","i","tag to export( default = destination tag)");
  addOption<std::string>("destTag","t","destination tag (required)");
  addAuthenticationOptions();
  addOption<bool>("verbose","v","verbose");
}
cond::AlignSplitIOV::~AlignSplitIOV ( )

Definition at line 54 of file aligncond_split_iov.cc.

{

}

Member Function Documentation

int cond::AlignSplitIOV::execute ( ) [virtual]

Reimplemented from cond::Utilities.

Definition at line 59 of file aligncond_split_iov.cc.

References cond::MetaData::addMapping(), cond::IOVEditor::append(), cond::IOVProxy::begin(), cmsDriverOptions::counter, gather_cfg::cout, cond::IOVEditor::create(), idDealer::editor, cond::IOVProxy::end(), cond::TimeTypeSpecs::endValue, cond::MetaData::getToken(), cond::DbSession::getTypedObject(), o2o::iov, max(), min, cond::IOVService::payloadContainerName(), stor::utils::sleep(), cond::IOVEditor::stamp(), cond::DbTransaction::start(), cond::DbSession::storeObject(), cond::IOVProxy::timetype(), cond::IOVService::timeType(), cond::timeTypeSpecs, cond::IOVEditor::token(), cond::DbSession::transaction(), python::IdGenerator::transaction, and cond::userInfo().

{
  initializePluginManager();
 
  std::string sourceConnect = getOptionValue<std::string>("sourceConnect");
  std::string destConnect = getOptionValue<std::string>("destConnect");
  
  std::string destTag = getOptionValue<std::string>("destTag");
  std::string sourceTag(destTag);
  if (hasOptionValue("sourceTag"))
    sourceTag = getOptionValue<std::string>("sourceTag");

  bool verbose = hasOptionValue("verbose");
  
  cond::Time_t since = std::numeric_limits<cond::Time_t>::min();
  cond::Time_t till = std::numeric_limits<cond::Time_t>::max();

  std::string sourceiovtoken;
  cond::TimeType sourceiovtype;

  std::string destiovtoken;

  cond::DbSession sourcedb = openDbSession("sourceConnect", false);
  cond::DbSession destdb = openDbSession("destConnect");

  sourcedb.transaction().start(false);
  cond::MetaData sourceMetadata(sourcedb);
  sourceiovtoken = sourceMetadata.getToken(sourceTag);
  if (sourceiovtoken.empty()) 
    throw std::runtime_error(std::string("tag ") + sourceTag + std::string(" not found"));
  
  if (verbose)
    std::cout << "source iov token: " << sourceiovtoken << std::endl;

  cond::IOVService iovmanager(sourcedb);
  sourceiovtype = iovmanager.timeType(sourceiovtoken);
  std::string payloadContainer = iovmanager.payloadContainerName(sourceiovtoken);

  if (verbose)
    std::cout << "source iov type " << sourceiovtype << std::endl;

  since = std::max(since, cond::timeTypeSpecs[sourceiovtype].beginValue);
  till  = std::min(till,  cond::timeTypeSpecs[sourceiovtype].endValue);
  
  cond::IOVProxy iov(sourcedb, sourceiovtoken, true, false);
  unsigned int counter = 0;
  for (cond::IOVProxy::const_iterator ioviterator = iov.begin();
       ioviterator != iov.end();
       ++ioviterator) {

    std::stringstream newTag;
    newTag << destTag << "_" << counter;
    
    std::cout << "iov " << counter << ":\t" 
              << ioviterator->since() << " \t "
              << ioviterator->till() << std::endl;
    
    if (verbose)
      std::cout << "\t" << ioviterator->token() << std::endl;

    boost::shared_ptr<Alignments> alignments = sourcedb.getTypedObject<Alignments>(ioviterator->token());

    cond::DbScopedTransaction transaction(destdb);
    transaction.start(false);
 
    std::string objToken = destdb.storeObject(alignments.get(), "Alignments");

    cond::IOVEditor editor(destdb);
    editor.create(iov.timetype(), cond::timeTypeSpecs[sourceiovtype].endValue);
    editor.append(cond::timeTypeSpecs[sourceiovtype].beginValue, objToken);
    std::string iovToken = editor.token();
    editor.stamp(cond::userInfo(),false);
 
    cond::MetaData metadata(destdb);
    metadata.addMapping(newTag.str(), iovToken, sourceiovtype);
    transaction.commit();
    
    ::sleep(1);

    ++counter;
  }
  
  std::cout << "Total # of payload objects: " << counter << std::endl;
  
  return 0;
}