Author: [log in to unmask] Date: Wed Aug 10 12:33:46 2016 New Revision: 4459 Log: added lots of variables for weighting the mass and momentum for further studies Modified: java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TupleDriver.java Modified: java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TupleDriver.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TupleDriver.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TupleDriver.java Wed Aug 10 12:33:46 2016 @@ -5,6 +5,7 @@ import hep.physics.vec.Hep3Vector; import hep.physics.vec.HepLorentzVector; import hep.physics.vec.VecOp; + import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.ArrayList; @@ -12,7 +13,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; + import org.apache.commons.lang3.StringUtils; +import org.hps.analysis.ecal.MassCalculator; import org.hps.conditions.beam.BeamEnergy; import org.hps.recon.ecal.cluster.ClusterUtilities; import org.hps.recon.particle.HpsReconParticleDriver; @@ -250,7 +253,13 @@ "tarPX/D", "tarPY/D", "tarPZ/D", "tarP/D", "tarVX/D", "tarVY/D", "tarVZ/D", "tarChisq/D", "tarM/D", "vzcPX/D", "vzcPY/D", "vzcPZ/D", "vzcP/D", - "vzcVX/D", "vzcVY/D", "vzcVZ/D", "vzcChisq/D", "vzcM/D"}; + "vzcVX/D", "vzcVY/D", "vzcVZ/D", "vzcChisq/D", "vzcM/D", + "uncElePX/D", "uncElePY/D", "uncElePZ/D", "uncPosPX/D", "uncPosPY/D", "uncPosPZ/D", "uncEleP/D", "uncPosP/D", + "bscElePX/D", "bscElePY/D", "bscElePZ/D", "bscPosPX/D", "bscPosPY/D", "bscPosPZ/D", "bscEleP/D", "bscPosP/D", + "tarElePX/D", "tarElePY/D", "tarElePZ/D", "tarPosPX/D", "tarPosPY/D", "tarPosPZ/D", "tarEleP/D", "tarPosP/D", + "vzcElePX/D", "vzcElePY/D", "vzcElePZ/D", "vzcPosPX/D", "vzcPosPY/D", "vzcPosPZ/D", "vzcEleP/D", "vzcPosP/D", + "uncEleWtP/D","uncPosWtP/D","bscEleWtP/D","bscPosWtP/D","tarEleWtP/D","tarPosWtP/D", "vzcEleWtP/D","vzcPosWtP/D", + "uncWtM/D","bscWtM/D","tarWtM/D","vzcWtM/D"}; tupleVariables.addAll(Arrays.asList(newVars)); } @@ -266,6 +275,7 @@ "IsoStereo/D", "IsoAxial/D", "MinPositiveIso/D", "MinNegativeIso/D", "MatchChisq/D", "ClT/D", "ClE/D", "ClSeedE/D", "ClX/D", "ClY/D", "ClZ/D", "ClHits/I"}; + for (int i = 0; i < newVars.length; i++) { newVars[i] = prefix + newVars[i]; } @@ -279,9 +289,12 @@ int npos = 0; int ntrk = 0; for (ReconstructedParticle fsp : fspList) { - if (isGBL != TrackType.isGBL(fsp.getType())) { + if (isGBL != TrackType.isGBL(fsp.getType())) { continue; } + /*if (fsp.getClusters().isEmpty()){ + continue; + }*/ if (fsp.getCharge() != 0) { ntrk++; } @@ -302,8 +315,8 @@ tupleMap.put("isPair1/B", triggerData.isPair1Trigger() ? 1.0 : 0.0); } } - - protected TrackState fillParticleVariables(EventHeader event, ReconstructedParticle particle, String prefix) { + + protected TrackState fillParticleVariablesT(EventHeader event, ReconstructedParticle particle, String prefix) { Track track = particle.getTracks().get(0); TrackState trackState = track.getTrackStates().get(0); double[] param = new double[5]; @@ -393,6 +406,102 @@ return tweakedTrackState; } + // protected TrackState fillParticleVariables(EventHeader event, ReconstructedParticle particle, String prefix) { + protected ReconstructedParticle fillParticleVariables(EventHeader event, ReconstructedParticle particle, String prefix) { + + if (!particle.getTracks().isEmpty()){ + Track track = particle.getTracks().get(0); + TrackState trackState = track.getTrackStates().get(0); + double[] param = new double[5]; + for (int i = 0; i < 5; i++) { + param[i] = trackState.getParameters()[i] + ((trackState.getTanLambda() > 0) ? topTrackCorrection[i] : botTrackCorrection[i]); + } +// Arrays. + TrackState tweakedTrackState = new BaseTrackState(param, trackState.getReferencePoint(), trackState.getCovMatrix(), trackState.getLocation(), bfield); + Hep3Vector pRot = VecOp.mult(beamAxisRotation, CoordinateTransformations.transformVectorToDetector(new BasicHep3Vector(tweakedTrackState.getMomentum()))); + + Double[] iso = TrackUtils.getIsolations(track, TrackUtils.getHitToStripsTable(event), TrackUtils.getHitToRotatedTable(event)); + double minPositiveIso = 9999; + double minNegativeIso = 9999; + double isoStereo = -9999, isoAxial = -9999; + for (int i = 0; i < 6; i++) { + if (iso[2 * i] != null) { + if (pRot.y() < 0) { + isoStereo = iso[2 * i]; + isoAxial = iso[2 * i + 1]; + } else { + isoAxial = iso[2 * i]; + isoStereo = iso[2 * i + 1]; + } + for (int j = 2 * i; j < 2 * i + 2; j++) { + if (iso[j] < 100) { + if (iso[j] > 0) { + if (minPositiveIso > 100 || iso[j] < minPositiveIso) { + minPositiveIso = iso[j]; + } + } else { + if (minNegativeIso > 100 || iso[j] > minNegativeIso) { + minNegativeIso = iso[j]; + } + } + } + } + break; + } + } + + double trkT = TrackUtils.getTrackTime(track, TrackUtils.getHitToStripsTable(event), TrackUtils.getHitToRotatedTable(event)); + Hep3Vector atEcal = TrackUtils.getTrackPositionAtEcal(tweakedTrackState); + Hep3Vector firstHitPosition = VecOp.mult(beamAxisRotation, CoordinateTransformations.transformVectorToDetector(new BasicHep3Vector(track.getTrackerHits().get(0).getPosition()))); + GenericObject kinks = GBLKinkData.getKinkData(event, track); + + tupleMap.put(prefix + "PX/D", pRot.x()); + tupleMap.put(prefix + "PY/D", pRot.y()); + tupleMap.put(prefix + "PZ/D", pRot.z()); + tupleMap.put(prefix + "P/D", pRot.magnitude()); + tupleMap.put(prefix + "TrkZ0/D", tweakedTrackState.getZ0()); + tupleMap.put(prefix + "TrkLambda/D", tweakedTrackState.getTanLambda()); + tupleMap.put(prefix + "TrkD0/D", tweakedTrackState.getD0()); + tupleMap.put(prefix + "TrkPhi/D", tweakedTrackState.getPhi()); + tupleMap.put(prefix + "TrkOmega/D", tweakedTrackState.getOmega()); + tupleMap.put(prefix + "TrkEcalX/D", atEcal.x()); + tupleMap.put(prefix + "TrkEcalY/D", atEcal.y()); + tupleMap.put(prefix + "TrkChisq/D", track.getChi2()); + tupleMap.put(prefix + "TrkHits/I", (double) track.getTrackerHits().size()); + tupleMap.put(prefix + "TrkType/I", (double) particle.getType()); + tupleMap.put(prefix + "TrkT/D", trkT); + tupleMap.put(prefix + "HasL1/B", iso[0] != null ? 1.0 : 0.0); + tupleMap.put(prefix + "HasL2/B", iso[2] != null ? 1.0 : 0.0); + tupleMap.put(prefix + "HasL3/B", iso[4] != null ? 1.0 : 0.0); + tupleMap.put(prefix + "FirstHitX/D", firstHitPosition.x()); + tupleMap.put(prefix + "FirstHitY/D", firstHitPosition.y()); + tupleMap.put(prefix + "LambdaKink1/D", kinks!=null ? GBLKinkData.getLambdaKink(kinks, 1) : 0); + tupleMap.put(prefix + "LambdaKink2/D", kinks!=null ? GBLKinkData.getLambdaKink(kinks, 2) : 0); + tupleMap.put(prefix + "LambdaKink3/D", kinks!=null ? GBLKinkData.getLambdaKink(kinks, 3) : 0); + tupleMap.put(prefix + "PhiKink1/D", kinks!=null ? GBLKinkData.getPhiKink(kinks, 1) : 0); + tupleMap.put(prefix + "PhiKink2/D", kinks!=null ? GBLKinkData.getPhiKink(kinks, 2) : 0); + tupleMap.put(prefix + "PhiKink3/D", kinks!=null ? GBLKinkData.getPhiKink(kinks, 3) : 0); + tupleMap.put(prefix + "IsoStereo/D", isoStereo); + tupleMap.put(prefix + "IsoAxial/D", isoAxial); + tupleMap.put(prefix + "MinPositiveIso/D", minPositiveIso); + tupleMap.put(prefix + "MinNegativeIso/D", minNegativeIso); + tupleMap.put(prefix + "MatchChisq/D", particle.getGoodnessOfPID()); + } + if (!particle.getClusters().isEmpty()) { + Cluster cluster = particle.getClusters().get(0); + tupleMap.put(prefix + "ClT/D", ClusterUtilities.getSeedHitTime(cluster)); + tupleMap.put(prefix + "ClE/D", cluster.getEnergy()); + tupleMap.put(prefix + "ClSeedE/D", ClusterUtilities.findSeedHit(cluster).getCorrectedEnergy()); + tupleMap.put(prefix + "ClX/D", cluster.getPosition()[0]); + tupleMap.put(prefix + "ClY/D", cluster.getPosition()[1]); + tupleMap.put(prefix + "ClZ/D", cluster.getPosition()[2]); + tupleMap.put(prefix + "ClHits/I", (double) cluster.getCalorimeterHits().size()); + } + + //return tweakedTrackState; + return particle; + } + protected void fillVertexVariables(EventHeader event, List<BilliorTrack> billiorTracks, ReconstructedParticle electron, ReconstructedParticle positron) { BilliorVertexer vtxFitter = new BilliorVertexer(TrackUtils.getBField(event.getDetector()).y()); vtxFitter.setBeamSize(beamSize); @@ -421,8 +530,8 @@ BilliorVertex vzcVertex = vtxFitter.fitVertex(billiorTracks); ReconstructedParticle vzcV0 = HpsReconParticleDriver.makeReconstructedParticle(electron, positron, vzcVertex); Hep3Vector vzcMomRot = VecOp.mult(beamAxisRotation, vzcV0.getMomentum()); - Hep3Vector vzcVtx = VecOp.mult(beamAxisRotation, vzcV0.getStartVertex().getPosition()); - + Hep3Vector vzcVtx = VecOp.mult(beamAxisRotation, vzcV0.getStartVertex().getPosition()); + tupleMap.put("uncPX/D", uncMomRot.x()); tupleMap.put("uncPY/D", uncMomRot.y()); tupleMap.put("uncPZ/D", uncMomRot.z()); @@ -432,7 +541,17 @@ tupleMap.put("uncVZ/D", uncVtx.z()); tupleMap.put("uncChisq/D", uncV0.getStartVertex().getChi2()); tupleMap.put("uncM/D", uncV0.getMass()); - + tupleMap.put("uncElePX/D", uncVertex.getParameters().get("p1X")); + tupleMap.put("uncElePY/D", uncVertex.getParameters().get("p1Y")); + tupleMap.put("uncElePZ/D", uncVertex.getParameters().get("p1Z")); + tupleMap.put("uncEleP/D", Math.sqrt(Math.pow(uncVertex.getParameters().get("p1X"), 2)+Math.pow(uncVertex.getParameters().get("p1Y"), 2) + +Math.pow(uncVertex.getParameters().get("p1Z"), 2))); + tupleMap.put("uncPosPX/D", uncVertex.getParameters().get("p2X")); + tupleMap.put("uncPosPY/D", uncVertex.getParameters().get("p2Y")); + tupleMap.put("uncPosPZ/D", uncVertex.getParameters().get("p2Z")); + tupleMap.put("uncPosP/D", Math.sqrt(Math.pow(uncVertex.getParameters().get("p2X"), 2)+Math.pow(uncVertex.getParameters().get("p2Y"), 2) + +Math.pow(uncVertex.getParameters().get("p2Z"), 2))); + tupleMap.put("bscPX/D", bscMomRot.x()); tupleMap.put("bscPY/D", bscMomRot.y()); tupleMap.put("bscPZ/D", bscMomRot.z()); @@ -442,7 +561,17 @@ tupleMap.put("bscVZ/D", bscVtx.z()); tupleMap.put("bscChisq/D", bscV0.getStartVertex().getChi2()); tupleMap.put("bscM/D", bscV0.getMass()); - + tupleMap.put("bscElePX/D", bsconVertex.getParameters().get("p1X")); + tupleMap.put("bscElePY/D", bsconVertex.getParameters().get("p1Y")); + tupleMap.put("bscElePZ/D", bsconVertex.getParameters().get("p1Z")); + tupleMap.put("bscEleP/D", Math.sqrt(Math.pow(bsconVertex.getParameters().get("p1X"), 2)+Math.pow(bsconVertex.getParameters().get("p1Y"), 2) + +Math.pow(bsconVertex.getParameters().get("p1Z"), 2))); + tupleMap.put("bscPosPX/D", bsconVertex.getParameters().get("p2X")); + tupleMap.put("bscPosPY/D", bsconVertex.getParameters().get("p2Y")); + tupleMap.put("bscPosPZ/D", bsconVertex.getParameters().get("p2Z")); + tupleMap.put("bscPosP/D", Math.sqrt(Math.pow(bsconVertex.getParameters().get("p2X"), 2)+Math.pow(bsconVertex.getParameters().get("p2Y"), 2) + +Math.pow(bsconVertex.getParameters().get("p2Z"), 2))); + tupleMap.put("tarPX/D", tarMomRot.x()); tupleMap.put("tarPY/D", tarMomRot.y()); tupleMap.put("tarPZ/D", tarMomRot.z()); @@ -452,7 +581,17 @@ tupleMap.put("tarVZ/D", tarVtx.z()); tupleMap.put("tarChisq/D", tarV0.getStartVertex().getChi2()); tupleMap.put("tarM/D", tarV0.getMass()); - + tupleMap.put("tarElePX/D", tarVertex.getParameters().get("p1X")); + tupleMap.put("tarElePY/D", tarVertex.getParameters().get("p1Y")); + tupleMap.put("tarElePZ/D", tarVertex.getParameters().get("p1Z")); + tupleMap.put("tarEleP/D", Math.sqrt(Math.pow(tarVertex.getParameters().get("p1X"), 2)+Math.pow(tarVertex.getParameters().get("p1Y"), 2) + +Math.pow(tarVertex.getParameters().get("p1Z"), 2))); + tupleMap.put("tarPosPX/D", tarVertex.getParameters().get("p2X")); + tupleMap.put("tarPosPY/D", tarVertex.getParameters().get("p2Y")); + tupleMap.put("tarPosPZ/D", tarVertex.getParameters().get("p2Z")); + tupleMap.put("tarPosP/D", Math.sqrt(Math.pow(tarVertex.getParameters().get("p2X"), 2)+Math.pow(tarVertex.getParameters().get("p2Y"), 2) + +Math.pow(tarVertex.getParameters().get("p2Z"), 2))); + tupleMap.put("vzcPX/D", vzcMomRot.x()); tupleMap.put("vzcPY/D", vzcMomRot.y()); tupleMap.put("vzcPZ/D", vzcMomRot.z()); @@ -462,6 +601,129 @@ tupleMap.put("vzcVZ/D", vzcVtx.z()); tupleMap.put("vzcChisq/D", vzcV0.getStartVertex().getChi2()); tupleMap.put("vzcM/D", vzcV0.getMass()); + tupleMap.put("vzcElePX/D", vzcVertex.getParameters().get("p1X")); + tupleMap.put("vzcElePY/D", vzcVertex.getParameters().get("p1Y")); + tupleMap.put("vzcElePZ/D", vzcVertex.getParameters().get("p1Z")); + tupleMap.put("vzcEleP/D", Math.sqrt(Math.pow(vzcVertex.getParameters().get("p1X"), 2)+Math.pow(vzcVertex.getParameters().get("p1Y"), 2) + +Math.pow(vzcVertex.getParameters().get("p1Z"), 2))); + tupleMap.put("vzcPosPX/D", vzcVertex.getParameters().get("p2X")); + tupleMap.put("vzcPosPY/D", vzcVertex.getParameters().get("p2Y")); + tupleMap.put("vzcPosPZ/D", vzcVertex.getParameters().get("p2Z")); + tupleMap.put("vzcPosP/D", Math.sqrt(Math.pow(vzcVertex.getParameters().get("p2X"), 2)+Math.pow(vzcVertex.getParameters().get("p2Y"), 2) + +Math.pow(vzcVertex.getParameters().get("p2Z"), 2))); + + ////////////////////////////////////////////////////////////////////////////////////////// + int nEleClusters = electron.getClusters().size(); + int nPosClusters = positron.getClusters().size(); + + if (nEleClusters > 0){ + + tupleMap.put("uncEleWtP/D", MassCalculator.combinedMomentum(electron.getClusters().get(0), electron.getTracks().get(0), + Math.sqrt(Math.pow(uncV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(uncV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(uncV0.getStartVertex().getParameters().get("p1Z"), 2)))); + tupleMap.put("vzcEleWtP/D", MassCalculator.combinedMomentum(electron.getClusters().get(0), electron.getTracks().get(0), + Math.sqrt(Math.pow(vzcV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(vzcV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(vzcV0.getStartVertex().getParameters().get("p1Z"), 2)))); + tupleMap.put("tarEleWtP/D", MassCalculator.combinedMomentum(electron.getClusters().get(0), electron.getTracks().get(0), + Math.sqrt(Math.pow(tarV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(tarV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(tarV0.getStartVertex().getParameters().get("p1Z"), 2)))); + tupleMap.put("bscEleWtP/D", MassCalculator.combinedMomentum(electron.getClusters().get(0), electron.getTracks().get(0), + Math.sqrt(Math.pow(bscV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(bscV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(bscV0.getStartVertex().getParameters().get("p1Z"), 2)))); + + if (nPosClusters > 0){ + + tupleMap.put("vzcPosWtP/D", MassCalculator.combinedMomentum(positron.getClusters().get(0), positron.getTracks().get(0), + Math.sqrt(Math.pow(vzcV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(vzcV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(vzcV0.getStartVertex().getParameters().get("p2Z"), 2)))); + tupleMap.put("tarPosWtP/D", MassCalculator.combinedMomentum(positron.getClusters().get(0), positron.getTracks().get(0), + Math.sqrt(Math.pow(tarV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(tarV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(tarV0.getStartVertex().getParameters().get("p2Z"), 2)))); + tupleMap.put("bscPosWtP/D", MassCalculator.combinedMomentum(positron.getClusters().get(0), positron.getTracks().get(0), + Math.sqrt(Math.pow(bscV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(bscV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(bscV0.getStartVertex().getParameters().get("p2Z"), 2)))); + tupleMap.put("uncPosWtP/D", MassCalculator.combinedMomentum(positron.getClusters().get(0), positron.getTracks().get(0), + Math.sqrt(Math.pow(uncV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(uncV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(uncV0.getStartVertex().getParameters().get("p2Z"), 2)))); + + tupleMap.put("vzcWtM/D", MassCalculator.combinedMass(electron.getClusters().get(0), positron.getClusters().get(0), vzcV0)); + tupleMap.put("tarWtM/D", MassCalculator.combinedMass(electron.getClusters().get(0), positron.getClusters().get(0), tarV0)); + tupleMap.put("bscWtM/D", MassCalculator.combinedMass(electron.getClusters().get(0), positron.getClusters().get(0), bscV0)); + tupleMap.put("uncWtM/D", MassCalculator.combinedMass(electron.getClusters().get(0), positron.getClusters().get(0), uncV0)); + + } + + else {//e- has cluster, e+ does not + tupleMap.put("vzcPosWtP/D", Math.sqrt(Math.pow(vzcV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(vzcV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(vzcV0.getStartVertex().getParameters().get("p2Z"), 2))); + tupleMap.put("bscPosWtP/D", Math.sqrt(Math.pow(bscV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(bscV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(bscV0.getStartVertex().getParameters().get("p2Z"), 2))); + tupleMap.put("tarPosWtP/D", Math.sqrt(Math.pow(tarV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(tarV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(tarV0.getStartVertex().getParameters().get("p2Z"), 2))); + tupleMap.put("uncPosWtP/D", Math.sqrt(Math.pow(uncV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(uncV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(uncV0.getStartVertex().getParameters().get("p2Z"), 2))); + tupleMap.put("vzcWtM/D", MassCalculator.combinedMass(electron.getClusters().get(0), positron.getTracks().get(0), vzcV0)); + tupleMap.put("tarWtM/D", MassCalculator.combinedMass(electron.getClusters().get(0), positron.getTracks().get(0), tarV0)); + tupleMap.put("bscWtM/D", MassCalculator.combinedMass(electron.getClusters().get(0), positron.getTracks().get(0), bscV0)); + tupleMap.put("uncWtM/D", MassCalculator.combinedMass(electron.getClusters().get(0), positron.getTracks().get(0), uncV0)); + } + + } + + if (nPosClusters>0 && nEleClusters==0){//e+ has cluster, e- does not + tupleMap.put("vzcPosWtP/D", MassCalculator.combinedMomentum(positron.getClusters().get(0), positron.getTracks().get(0), + Math.sqrt(Math.pow(vzcV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(vzcV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(vzcV0.getStartVertex().getParameters().get("p2Z"), 2)))); + tupleMap.put("tarPosWtP/D", MassCalculator.combinedMomentum(positron.getClusters().get(0), positron.getTracks().get(0), + Math.sqrt(Math.pow(tarV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(tarV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(tarV0.getStartVertex().getParameters().get("p2Z"), 2)))); + tupleMap.put("bscPosWtP/D", MassCalculator.combinedMomentum(positron.getClusters().get(0), positron.getTracks().get(0), + Math.sqrt(Math.pow(bscV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(bscV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(bscV0.getStartVertex().getParameters().get("p2Z"), 2)))); + tupleMap.put("uncPosWtP/D", MassCalculator.combinedMomentum(positron.getClusters().get(0), positron.getTracks().get(0), + Math.sqrt(Math.pow(uncV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(uncV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(uncV0.getStartVertex().getParameters().get("p2Z"), 2)))); + tupleMap.put("vzcEleWtP/D", Math.sqrt(Math.pow(vzcV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(vzcV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(vzcV0.getStartVertex().getParameters().get("p1Z"), 2))); + tupleMap.put("bscEleWtP/D", Math.sqrt(Math.pow(bscV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(bscV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(bscV0.getStartVertex().getParameters().get("p1Z"), 2))); + tupleMap.put("tarEleWtP/D", Math.sqrt(Math.pow(tarV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(tarV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(tarV0.getStartVertex().getParameters().get("p1Z"), 2))); + tupleMap.put("uncEleWtP/D", Math.sqrt(Math.pow(uncV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(uncV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(uncV0.getStartVertex().getParameters().get("p1Z"), 2))); + + tupleMap.put("vzcWtM/D", MassCalculator.combinedMass(electron.getTracks().get(0), positron.getClusters().get(0), vzcV0)); + tupleMap.put("tarWtM/D", MassCalculator.combinedMass(electron.getTracks().get(0), positron.getClusters().get(0), tarV0)); + tupleMap.put("bscWtM/D", MassCalculator.combinedMass(electron.getTracks().get(0), positron.getClusters().get(0), bscV0)); + tupleMap.put("uncWtM/D", MassCalculator.combinedMass(electron.getTracks().get(0), positron.getClusters().get(0), uncV0)); + } + + + if (nPosClusters==0 && nEleClusters==0){ + tupleMap.put("vzcEleWtP/D", Math.sqrt(Math.pow(vzcV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(vzcV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(vzcV0.getStartVertex().getParameters().get("p1Z"), 2))); + tupleMap.put("vzcPosWtP/D", Math.sqrt(Math.pow(vzcV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(vzcV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(vzcV0.getStartVertex().getParameters().get("p2Z"), 2))); + tupleMap.put("vzcWtM/D", vzcV0.getMass()); + tupleMap.put("tarEleWtP/D", Math.sqrt(Math.pow(tarV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(tarV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(tarV0.getStartVertex().getParameters().get("p1Z"), 2))); + tupleMap.put("tarPosWtP/D", Math.sqrt(Math.pow(tarV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(tarV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(tarV0.getStartVertex().getParameters().get("p2Z"), 2))); + tupleMap.put("tarWtM/D", tarV0.getMass()); + tupleMap.put("bscEleWtP/D", Math.sqrt(Math.pow(bscV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(bscV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(bscV0.getStartVertex().getParameters().get("p1Z"), 2))); + tupleMap.put("bscPosWtP/D", Math.sqrt(Math.pow(bscV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(bscV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(bscV0.getStartVertex().getParameters().get("p2Z"), 2))); + tupleMap.put("bscWtM/D", bscV0.getMass()); + tupleMap.put("uncEleWtP/D", Math.sqrt(Math.pow(uncV0.getStartVertex().getParameters().get("p1X"), 2)+Math.pow(uncV0.getStartVertex().getParameters().get("p1Y"), 2) + +Math.pow(uncV0.getStartVertex().getParameters().get("p1Z"), 2))); + tupleMap.put("uncPosWtP/D", Math.sqrt(Math.pow(uncV0.getStartVertex().getParameters().get("p2X"), 2)+Math.pow(uncV0.getStartVertex().getParameters().get("p2Y"), 2) + +Math.pow(uncV0.getStartVertex().getParameters().get("p2Z"), 2))); + tupleMap.put("uncWtM/D", uncV0.getMass()); + + } + + ////////////////////////////////////////////////////////////////////////////// } protected void addMCTridentVariables() {