Geant4 Cross Reference |
1 1 2 #define TOOLS_WROOT_MT_NTUPLE_SET_MAX(a__type) 2 #define TOOLS_WROOT_MT_NTUPLE_SET_MAX(a__type) \ 3 {leaf_ref<a__type>* _mleaf_ = _mleaf?id_c 3 {leaf_ref<a__type>* _mleaf_ = _mleaf?id_cast<base_leaf, leaf_ref<a__type> >(*_mleaf):0;\ 4 leaf_ref<a__type>* _pleaf_ = _pleaf?id_c 4 leaf_ref<a__type>* _pleaf_ = _pleaf?id_cast<base_leaf, leaf_ref<a__type> >(*_pleaf):0;\ 5 if(_mleaf_&&!_pleaf_) {\ 5 if(_mleaf_&&!_pleaf_) {\ 6 m_out << "tools::wroot::mt_ntuple::end 6 m_out << "tools::wroot::mt_ntuple::end_leaves : merge leaves problem (1)." << std::endl;\ 7 if(_mleaf) m_out << "main leaf name " 7 if(_mleaf) m_out << "main leaf name " << _mleaf->name() << ", cid " << _mleaf->id_cls() << std::endl;\ 8 return false;\ 8 return false;\ 9 }\ 9 }\ 10 if(!_mleaf_&&_pleaf_) {\ 10 if(!_mleaf_&&_pleaf_) {\ 11 m_out << "tools::wroot::mt_ntuple::end 11 m_out << "tools::wroot::mt_ntuple::end_leaves : merge leaves problem (2)." << std::endl;\ 12 if(_pleaf) m_out << "to compare with p 12 if(_pleaf) m_out << "to compare with parallel leaf name " << _pleaf->name() << ", cid " << _pleaf->id_cls() << std::endl;\ 13 return false;\ 13 return false;\ 14 }\ 14 }\ 15 if(_mleaf_ && _pleaf_) {\ 15 if(_mleaf_ && _pleaf_) {\ 16 /*uint32 _length = _pleaf_->length();* 16 /*uint32 _length = _pleaf_->length();*/\ 17 a__type _mx = _pleaf_->get_max();\ 17 a__type _mx = _pleaf_->get_max();\ 18 a_mutex.lock(); /*do it here (and not 18 a_mutex.lock(); /*do it here (and not outside loop) because of upper m_out.*/\ 19 /*_mleaf_->set_length(max_of(_length,_ 19 /*_mleaf_->set_length(max_of(_length,_mleaf_->length()));*/\ 20 _mleaf_->set_max(max_of<a__type>(_mx,_ 20 _mleaf_->set_max(max_of<a__type>(_mx,_mleaf_->get_max()));\ 21 a_mutex.unlock();\ 21 a_mutex.unlock();\ 22 }} 22 }} 23 23 24 #define TOOLS_WROOT_MT_NTUPLE_STRING_SET_MAX \ 24 #define TOOLS_WROOT_MT_NTUPLE_STRING_SET_MAX \ 25 {leaf_string_ref* _mleaf_ = _mleaf?id_cas 25 {leaf_string_ref* _mleaf_ = _mleaf?id_cast<base_leaf,leaf_string_ref>(*_mleaf):0;\ 26 leaf_string_ref* _pleaf_ = _pleaf?id_cas 26 leaf_string_ref* _pleaf_ = _pleaf?id_cast<base_leaf,leaf_string_ref>(*_pleaf):0;\ 27 if(_mleaf_&&!_pleaf_) {\ 27 if(_mleaf_&&!_pleaf_) {\ 28 m_out << "tools::wroot::mt_ntuple::end 28 m_out << "tools::wroot::mt_ntuple::end_leaves : merge string leaves problem (1)." << std::endl;\ 29 if(_mleaf) m_out << "main leaf name " 29 if(_mleaf) m_out << "main leaf name " << _mleaf->name() << ", cid " << _mleaf->id_cls() << std::endl;\ 30 return false;\ 30 return false;\ 31 }\ 31 }\ 32 if(!_mleaf_&&_pleaf_) {\ 32 if(!_mleaf_&&_pleaf_) {\ 33 m_out << "tools::wroot::mt_ntuple::end 33 m_out << "tools::wroot::mt_ntuple::end_leaves : merge string leaves problem (2)." << std::endl;\ 34 if(_pleaf) m_out << "to compare with p 34 if(_pleaf) m_out << "to compare with parallel leaf name " << _pleaf->name() << ", cid " << _pleaf->id_cls() << std::endl;\ 35 return false;\ 35 return false;\ 36 }\ 36 }\ 37 if(_mleaf_ && _pleaf_) {\ 37 if(_mleaf_ && _pleaf_) {\ 38 /*m_out << "tools::wroot::mt_ntuple::e 38 /*m_out << "tools::wroot::mt_ntuple::end_leaves : merge string leaves ok." << std::endl;*/\ 39 uint32 _length = _pleaf_->length();\ 39 uint32 _length = _pleaf_->length();\ 40 int _mx = _pleaf_->get_max();\ 40 int _mx = _pleaf_->get_max();\ 41 a_mutex.lock(); /*do it here (and not 41 a_mutex.lock(); /*do it here (and not outside loop) because of upper m_out.*/\ 42 _mleaf_->set_length(max_of(_length,_ml 42 _mleaf_->set_length(max_of(_length,_mleaf_->length()));\ 43 _mleaf_->set_max(max_of(_mx,_mleaf_->g 43 _mleaf_->set_max(max_of(_mx,_mleaf_->get_max()));\ 44 a_mutex.unlock();\ 44 a_mutex.unlock();\ 45 }} 45 }} 46 46 47 47