You have to instantiate (“create objects from”) the structures and associate those instances to the Branches. And then assign values to the variables of those instances before filling the branches. E.g.
//... struct...
TrackParamater tp;
EventParameter ep;
//...
eventData->Branch("eventP",&ep.esize,"esize/I:eid/I"); // same order as in the struct!
eventData->Branch("trackP",&tp.m,"m/F:px/F:py/F:pz/F:en/F:pid/I:charge/I");
// Fill values:
ep.esize = 1;
tp.m = 1;
// etc. Then fill the tree:
eventData->Fill();
You might want 2 different tree then. Most tools expect all the branches to have the same number of entries (same number of call to Fill) but the entries can be variable size array (so each branch might have a different total number of values stored). (So usually the track branch contains arrays or std collections).
But let’s take the problem from a different angle. How are your planning on reading and using this information?