15def extrapolateToPlane(fT,z):
16
17 rc,pos,mom = False,None,None
18 fst = fT.getFitStatus()
19 if fst.isFitConverged() and fst.getNdf() > minNdf:
20
21 if fT.getPoint(0).getFitterInfo() and fT.getPoint(1).getFitterInfo():
22 fstate0,fstate1 = fT.getFittedState(0),fT.getFittedState(1)
23 fPos0,fPos1 = fstate0.getPos(),fstate1.getPos()
24 if abs(z-fPos0.z()) < abs(z-fPos1.z()): fstate = fstate0
25 else: fstate = fstate1
26 zs = min(z,z_ecal)
27 NewPosition = ROOT.TVector3(0., 0., zs)
28 rep = ROOT.genfit.RKTrackRep(13*cmp(fstate.getPDG(),0) )
29 state = ROOT.genfit.StateOnPlane(rep)
30 pos,mom = fstate.getPos(),fstate.getMom()
31 rep.setPosMom(state,pos,mom)
32 try:
33 rep.extrapolateToPlane(state, NewPosition, parallelToZ )
34 pos,mom = state.getPos(),state.getMom()
35 rc = True
36 except:
37
38 pass
39 if not rc or z>z_ecal:
40
41 px,py,pz = mom.X(),mom.Y(),mom.Z()
42 lam = (z-pos.Z())/pz
43 pos = ROOT.TVector3( pos.X()+lam*px, pos.Y()+lam*py, z )
44 return rc,pos,mom