用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题 Chi WANG Yifeng WEI Liu DONG
描述问题 以前的TClonesArray的方式读出的数据都没问题 单纯的event class读取数据有问题 (刘栋 用以前的DmpEvtHeader读数据时发现的) ---------------------------------------------------------------- 现在都不用TClonesArray的方式读写数据,读数据有问题 2019/2/23
描述问题 Input root文件是simulation 的MC truth 读取bgo的信息 fEvtMCBgo是空指针被赋值 运行时break 2019/2/23
分析 DmpDataBuffer中会自动获取input的root 文件,并拿到指定的Tree,返回需要绑定的指针 2019/2/23
尝试 逸丰尝试不通过DmpDataBuffer,自己手动读取branch 读取正常 2019/2/23
分析 本质差别 2019/2/23
证明 Break 成功 2019/2/23
分析 DmpEvtMCBgo必须要创建对象再关联 DmpEvtMCPrimaryParticle可以直接使用空指针关联 DmpDataBuffer中都不会为event class创建对象,而是使用的TObject的空指针关联 为什么有的event class可以使用空指针而有的不行? 2019/2/23
DmpEvtMCBgo和DmpEvtMCPrimaryParticle的主要区别 2019/2/23
之前刘栋发现问题时 使用的event class 2019/2/23
结论 数据成员是简单类型(int,short等)的event class 可以用空指针去关联branch;如果含有复杂类型(vector或map),不能用空指针关联,必须要用户创建一个对象去关联 2019/2/23
解决方案 用户手动创建需要读取的event class的对象 将event class的指针交给DmpDataBuffer DmpDataBuffer::ReadObject函数内部利用传入的指针关联到Branch Note: 用户创建的event class对象因为已经交给了DmpDataBuffer管理,所以用户不能再delete这个对象 2019/2/23
实现与使用 实现请具体参考DmpDataBuffer::ReadObject() 使用 例: 2019/2/23
Thank you 2019/2/23