【问题标题】:How to disable screen output in ROOT (CERN)如何在 ROOT (CERN) 中禁用屏幕输出
【发布时间】:2012-07-12 19:44:46
【问题描述】:

我正在将曲线拟合到大约 25000 个检测器事件中的峰值。我的代码只是循环遍历所有事件,适合它找到的所有峰值并获取参数信息。这需要永远!

我停止了我的代码实际绘制曲线,但我想知道我是否可以做任何其他事情来加速这个处理。我想如果我阻止 ROOT 将每个适合的参数打印到屏幕上,它可能会运行得更快。

这是真的吗?如果是这样,我该怎么做?还有其他想法吗?

  TGraphErrors * gr1 = view_waveform_ebars(run,evtNum,21);    
  mygaus -> SetParameters(671.55e3,-1000,S2loc,500);
  gr1 -> Fit(mygaus,"","",tspulse_sum[j],tepulse_sum[j]);
  fitResult = gr1 -> GetFunction("mygaus");

  pchi2[j] =  fitResult -> GetChisquare();

我希望不需要将我正在使用的功能复制到我的帖子中。但是mygaus 有4 个参数,每次我使用gr1-> Fit(mygaus,...) 调用它时,我都会在屏幕上看到参数。所以问题是屏幕输出是否会减慢我的速度,如果是,我该如何关闭它?

谢谢

【问题讨论】:

  • 如果您可以发布一些相关代码供我们查看,这将非常有帮助。
  • “ROOT”到底是什么? gr1->Fit(...) 是否打印到 stdout、stderr、/dev/console 或其他地方?如果将程序的输出重定向到 /dev/null(或系统的等效项)会发生什么?
  • 你试过“Q”选项吗?
  • @molbdnilo:这就是答案。

标签: c++ performance screen root-framework


【解决方案1】:

这更像是一条评论:

还有“N”选项,强制ROOT不存储图形函数,不绘制任何东西。

所以我会同时使用两者,即:

gr1 -> Fit(mygaus,"QN","",tspulse_sum[j],tepulse_sum[j]);

【讨论】:

    【解决方案2】:

    也许,只是也许,您想以批处理模式运行 ROOT,如下所示:

    {
      gROOT->SetBatch(1);
      ...
    }
    

    【讨论】:

      【解决方案3】:

      您也可以使用选项 -b 启动 root

      root -b
      

      【讨论】:

        【解决方案4】:

        您是否尝试使用限制一般 ROOT 输出

        gROOT->ProcessLine( "gErrorIgnoreLevel = 1001;")
        

        ?

        忽略级别越高,您获得的打印输出就越少。 要忽略 INFO 消息,1001 就足够了。要忽略 WARNING,它必须高于 2001。要忽略 ERROR,它必须高于 3001。检查打印输出的级别并根据需要进行设置。

        【讨论】:

          猜你喜欢
          • 2020-10-21
          • 2015-09-05
          • 2012-05-31
          • 2011-04-26
          • 2018-05-25
          • 2018-05-24
          • 2015-05-12
          • 2019-08-27
          • 2014-03-05
          相关资源
          最近更新 更多