JPetTaskChainExecutor::JPetTaskChainExecutor(const TaskGeneratorChain& taskGeneratorChain, int processedFileId, const jpet_options_tools::OptsStrAny& opts):
  fInputSeqId(processedFileId),
  ftaskGeneratorChain(taskGeneratorChain)
{
  /// ParamManager is generated and added to fParams
  fParams = jpet_params_factory::generateParams(opts);
  assert(fParams.getParamManager());
  for (auto taskGenerator : ftaskGeneratorChain) {
    auto task = taskGenerator();
    fTasks.push_back(std::move(task));
  }
}
JPetTaskChainExecutor::JPetTaskChainExecutor(TaskGeneratorChain* taskGeneratorChain, int processedFileId, JPetOptions opt) :
  fInputSeqId(processedFileId),
  fParamManager(0),
  ftaskGeneratorChain(taskGeneratorChain),
  fOptions(opt)
{
  fParamManager = JPetTaskChainExecutorUtils::generateParamManager(fOptions);
  if (taskGeneratorChain) {
    for (auto taskGenerator : *ftaskGeneratorChain) {
      auto task = taskGenerator();
      ///@todo change it
      (dynamic_cast<JPetTaskIO*>(task))->setParamManager(fParamManager);
      fTasks.push_back(task);
    }
  } else {
    ERROR("taskGeneratorChain is null while constructing JPetTaskChainExecutor");
  }
}