Timing Scan

【概要】
Timing Scanの引き継ぎ(2019.4.9~12)のときのlog
詰まったところ。

Raw Data Analysis

CERNのサーバーがslc6からCentOS7に変わった(2019.4.2?)こともあり2018年のままのコードでは動かなかった。

コンパイル

source setup.shができなかった。

-bash: /afs/cern.ch/sw/lcg/external/gcc/4.9/x86_64-slc6/setup.sh: 許可がありません
-bash: /afs/cern.ch/sw/lcg/app/releases/ROOT/6.04.14/x86_64-slc6-gcc49-opt/root/bin/thisroot.sh: 許可がありません

といわれた
setup.shとconfig/localconfig.lxplusの2つを変更。afsじゃなくてcvmfsに変えたかつrootのversionとコンパイラのversionをおとした。
setup.shの中身は

thisDir=$(dirname $(readlink -f ${BASH_SOURCE[0]}))
echo $thisDir

if [ -d /cvmfs/sft.cern.ch/lcg ] ; then
source /cvmfs/sft.cern.ch/lcg/releases/LCG_72a/ROOT/5.34.25/x86_64-slc6-gcc48-opt/bin/thisroot.sh
source /cvmfs/sft.cern.ch/lcg/external/gcc/4.8.4/x86_64-slc6/setup.sh
fi

export LD_LIBRARY_PATH=$thisDir/lib:$LD_LIBRARY_PATH
export PATH=$thisDir/bin:$thisDir/script:$PATH
export RAWDATADECODER_PATH=$thisDir

他にもDSO missing from command lineとかいうエラーが出た。config/localconfig.lxplusの中身を書き換えた。

ROOTFLAGS= -pthread -Wno-deprecated-declarations -m64 -I/cvmfs/sft.cern.ch/lcg/releases/LCG_72a/ROOT/5.34.25/x86_64-slc6-gcc48-opt/include
ROOTLIBS= $(shell root-config --libs)

CXXFLAGS= $(ROOTFLAGS) -std=c++11 -O3 -Iinc -Isrc

LIBS += $(ROOTLIBS) -Llib -lRawDataAnalysis -lz

OUT= RawDataDecoder_Pixel RawDataDecoder_IBL skim_pixel
SO= libRawDataAnalysis

.PHONY: all clean

SRC_EXTS := cxx cpp
SO_EXTS := so
BIN_DIR := bin
LIB_DIR := lib
MACRO_DIR := macros

SRCS := $(foreach E,$(SRC_EXTS),$(wildcard src/*.$(E)))
BINS := $(foreach E,$(SRC_EXTS),$(patsubst src/%.$(E),$(BIN_DIR)/%,$(filter %.$(E),$(SRCS))))
MACROS := $(wildcard $(MACRO_DIR)/*.C)
MACROS_SO := $(foreach E, C, $(patsubst $(MACRO_DIR)/%.$(E), $(MACRO_DIR)/%_C.so, $(filter %.$(E), $(MACROS)) ) )

-lzを加えた。これが具体的に何に効いたのかは不明。

skimming

src/skim_pixel.cxxを変更
read_payload()の中のbufferの定義を、malloc()を用いたものに変えた。メモリアクセスをスタック領域からじゃなくてヒープ領域からにしないと
segmentation fault(コアダンプ)とエラーが出て止まっていた。
buf_sizeの付近とBUF_MAXの付近の2箇所を変更。

unsigned char* buf = nullptr;
unsigned char* uncomp_buf = nullptr;
size_t buf_size_forMalloc = static_cast< size_t >( buf_size );
size_t uncomp_size_forMalloc = static_cast< size_t >( uncomp_size );
buf = static_cast< unsigned char* >( malloc( buf_size_forMalloc ) );
uncomp_buf = static_cast< unsigned char* >( malloc( uncomp_size_forMalloc ) );

// unsigned char buf[buf_size];
// unsigned char uncomp_buf[uncomp_size];

free(buf);
free(uncompromising_buf);

malloc()は使用したあとif文の最後で必ずfree()する。

Timing Scan Analysis

コンパイル

Raw Data Analysisのときと同様にsetup.shとconfig/localsetup.lxplusを書き換えた。
TimingAnalysisのコードはROOT6に対応させてあったので、

/cvmfs/sft.cern.ch/lcg/releases/LCG_81c/ROOT/6.04.14/x86_64-slc6-gcc49-opt/include
/cvmfs/sft.cern.ch/lcg/external/gcc/4.9.1/x86_64-slc6/setup.sh

/cvmfs/sft.cern.ch/lcg/releases/LCG_81c/ROOT/6.04.14/x86_64-slc6-gcc49-opt/bin/thisroot.sh

を使用した。

batch job

batch jobがLSF batch systemからHTCondorに変わったのでbatch jobを投げるスクリプトを書き換えた。
HTCondorの説明については CernBatchSystem 参照。
各LBごとにjobを投げるsubファイルを生成するためのスクリプト(makesub.sh)をつくった。
condor batchはsubファイルに何も指定しないと実行ディレクトリに生成物を持ってきてしまうので、実行ファイルの最後で生成物を消しておく必要があった。
実行ファイルはbsub_pixel_timing.shで、subファイルは00348197test.sub
bsub_pixel_decode.shはXXX.out.rootまでは出来たけどXXX.hist.rootがbatchで出来なかったときに使うためのスクリプト。
XXX.out.rootからXXX.hist.rootへの変換だけを行う。
変更が必要なのは、bsub_pixel_timing.sh(bsub_pixel_decode.sh)の中のeos directoryとoutput directory, bsub_pixel_timing.shの中で使われているdownload_skim.shの中のコードを取ってくるディレクトリの場所。

2020 Milestone run

DAOD_INDETRACKVARIDをつくるのに、errorが出て、作れない。 
"NameError: name 'InDetPixelConditionsSummarySvc' is not defined") Using Athena/21.0.120 [cmake] with platform x86_64-centos7-gcc62-opt

関連リンク

・CERN Batch Service User Guide, Job submission http://batchdocs.web.cern.ch/batchdocs/local/submit.html

TimingScanMemo (最終更新日時 2021-04-05 05:29:40 更新者 MinoriFujimoto)