#include "TLorentzVector.h" #include #include #include #include #include #include #include #include #include #include #include //_____________________________________________________________________________ Int_t StntupleInitObspBlock(TStnDataBlock* block, AbsEvent* event, int mode) { // fill simulated particle data block (OBSP/V - names coming from Run I) // there is only one OBSP and only one OPSV bank in the record int ip, pdg_code; TObspBlock* obsp_block = (TObspBlock*) block; obsp_block->Clear(); // initialization from OBSP/V, loop over ParticleDb* db = ParticleDb::Instance(); EventRecord::ConstIterator obsp_iter(event, "OBSP_StorableBank"); if (! obsp_iter.is_valid()) return -1; ConstHandle obsp(obsp_iter); for (OBSP_StorableBank::particleIter it(*obsp); it.is_valid(); ++it) { int ip = it.particle(); pdg_code = db->ParticlePdgCode(obsp->CdfCode(it)); obsp_block->NewParticle(ip,pdg_code, obsp->Px(it), obsp->Py(it), obsp->Pz(it), obsp->Mass(it), obsp->Path(it), obsp->VertexNumber(it), obsp->DecayVertexNumber(it), obsp->HepgNumber(it), obsp->DecayCode(it)); } EventRecord::ConstIterator obsv_iter(event, "OBSV_StorableBank"); if (! obsv_iter.is_valid()) return -2; ConstHandle obsv(obsv_iter); for (OBSV_StorableBank::vertexIter iv(*obsv); iv.is_valid(); ++iv) { int ivert = iv.vertex(); obsp_block->NewVertex(ivert, obsv->X(iv), obsv->Y(iv), obsv->Z(iv), obsv->T(iv), obsv->Mother(iv), obsv->FirstDau(iv), obsv->LastDau(iv)); } // // finally store the primary vertices // EventRecord::ConstIterator obsv_iter(event, "MVTX_StorableBank"); // if (! mvtx_iter.is_valid()) return -3; // ConstHandle mvtx(mvtx_iter); // for (OBSV_StorableBank::vertexIter iv(obsv_bank); iv.is_valid(); ++iv) { // int ivert = iv.vertex(); // obsp_block->NewVertex(ivert, // obsv.X(it), // obsv.Y(it), // obsv.Z(it), // obsv.T(it), // obsv.Mother(it), // obsv.FirstDau(it), // obsv.LastDau(it)); // } return 0; }