Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -105,12 +105,13 @@ protected void process(EventHeader event) {
//accumulatedTracks.add(track);
accumulatedBTracks.add(new BilliorTrack(track));

if (track.getTrackStates().get(0).getTanLambda() > 0) {
//Avoid tracks too close to the beamline to have a more reliable result on z from single volumes
if (track.getTrackStates().get(0).getTanLambda() > 0.035) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general, I think these configuration parameters should be put into a steering file and not hard coded. Hard coding selections should be avoided in general.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah. But this code is only for monitoring.

//accumulatedTracksTop.add(track);
accumulatedBTracksTop.add(new BilliorTrack(track));
}

else {
if (track.getTrackStates().get(0).getTanLambda() < -0.035) {
//accumulatedTracksBot.add(track);
accumulatedBTracksBot.add(new BilliorTrack(track));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,15 @@ protected void detectorChanged(Detector detector) {
public void process(EventHeader event) {
List<Track> tracks = event.get(Track.class, trackCollectionName);

int TrackType = 0;
int nHits = 6;

if (trackCollectionName.contains("Kalman") || trackCollectionName.contains("KF")) {
TrackType = 1;
nHits = 12;
//System.out.println("PF:: DEBUG :: Found Kalman Tracks in the event");
}

//System.out.println("Running on "+trackCollectionName);

//RelationalTable trackMatchTable = null;
Expand All @@ -142,37 +151,49 @@ public void process(EventHeader event) {

RelationalTable hitToStrips = TrackUtils.getHitToStripsTable(event);
RelationalTable hitToRotated = TrackUtils.getHitToRotatedTable(event);

for (Track trk : tracks) {

//Some Track selection

//System.out.println("Track loop");

if (trk.getChi2() > chi2Cut)
continue;


//System.out.println("Track passed chi2");

//Remove tracks with less than 10 hits
//if (trk.getTrackerHits().size() < 10)
// continue;
if (trk.getTrackerHits().size() < nHits)
continue;


//System.out.println("Track passed hits");

Hep3Vector momentum = new BasicHep3Vector(trk.getTrackStates().get(0).getMomentum());

if (momentum.magnitude() < 2.5)
if (momentum.magnitude() < 1.5)
continue;

if (momentum.magnitude() > 7)
if (momentum.magnitude() > 6)
continue;

//System.out.println("Track passed momentum");

TrackState trackState = trk.getTrackStates().get(0);
if (Math.abs(trackState.getTanLambda()) < 0.025)
continue;


//System.out.println("Track passed tanLambda");

GenericObject gblKink = GBLKinkData.getKinkData(event, trk);

if (gblKink == null) {
System.out.println("Failed finding gblKink object");
System.out.println("Looked for: "+GBLKinkData.DATA_RELATION_COLLECTION);
System.out.println("Event has "+GBLKinkData.DATA_RELATION_COLLECTION+" "+event.hasCollection(LCRelation.class, GBLKinkData.DATA_RELATION_COLLECTION));
}
//if (gblKink == null) {
//System.out.println("Failed finding gblKink object");
//System.out.println("Looked for: "+GBLKinkData.DATA_RELATION_COLLECTION);
//System.out.println("Event has "+GBLKinkData.DATA_RELATION_COLLECTION+" "+event.hasCollection(LCRelation.class, GBLKinkData.DATA_RELATION_COLLECTION));
//}



Expand Down Expand Up @@ -303,12 +324,12 @@ private void doBasicGBLtrack(Track trk, Map<HpsSiSensor, TrackerHit> sensorHits)
// isTop = "_top";
//}

if (trk.getType()==1 && trk.getTrackerHits().size() < 12) {
return;
}
//if (trk.getType()==1 && trk.getTrackerHits().size() < 10) {
// return;
//}

List<Integer> missingHits;
missingHits = findMissingLayer(trk);
//List<Integer> missingHits;
//missingHits = findMissingLayer(trk);

if (trackState.getTanLambda() > 0) {
isTop = "_top";
Expand All @@ -318,8 +339,12 @@ private void doBasicGBLtrack(Track trk, Map<HpsSiSensor, TrackerHit> sensorHits)
if (trk.getCharge()<0)
charge = "_neg";


//Hep3Vector mom = new BasicHep3Vector(trackState.getMomentum());
//System.out.println("Track momentum " + mom.toString());
double trackp = new BasicHep3Vector(trackState.getMomentum()).magnitude();


FillGBLTrackPlot(trkpFolder+"d0",isTop,charge,trackState.getD0());
FillGBLTrackPlot(trkpFolder+"z0",isTop,charge,trackState.getZ0());
FillGBLTrackPlot(trkpFolder+"phi",isTop,charge,trackState.getPhi());
Expand Down Expand Up @@ -350,11 +375,11 @@ private void doBasicGBLtrack(Track trk, Map<HpsSiSensor, TrackerHit> sensorHits)
FillGBLTrackPlot(trkpFolder+"pT_vs_tanLambda",isTop,charge,trackState.getTanLambda(),trackp*cosLambda);


if (trk.getTrackerHits().size()==6)
FillGBLTrackPlot(trkpFolder+"p_Missing1Hit",isTop,charge,missingHits.get(0),trackp);
//if (trk.getTrackerHits().size()==6)
// FillGBLTrackPlot(trkpFolder+"p_Missing1Hit",isTop,charge,missingHits.get(0),trackp);

if (missingHits.size()==1 && missingHits.get(0)==7)
FillGBLTrackPlot(trkpFolder+"p_MissingLastLayer",isTop,charge,trackp);
//if (missingHits.size()==1 && missingHits.get(0)==7)
// FillGBLTrackPlot(trkpFolder+"p_MissingLastLayer",isTop,charge,trackp);


FillGBLTrackPlot(trkpFolder+"Chi2",isTop,charge,trk.getChi2());
Expand Down Expand Up @@ -598,14 +623,24 @@ private void doGBLresiduals(Track trk, Map<HpsSiSensor, TrackerHit> sensorHits,
for (int i_hit =1; i_hit <= nres-1 ; i_hit+=2) {
if (trackRes.getIntVal(i_hit)!=-999) {


//Measured hit
HpsSiSensor hps_sensor = sensorMPIDs.get(trackRes.getIntVal(i_hit));
Hep3Vector hitPosG = new BasicHep3Vector(sensorHits.get(hps_sensor).getPosition());
Hep3Vector hitPosSensorG = new BasicHep3Vector(hitPosG.v());
ITransform3D g2l = hps_sensor.getGeometry().getGlobalToLocal();
g2l.transform(hitPosSensorG);


String sensorName = (sensorMPIDs.get(trackRes.getIntVal(i_hit))).getName();

//Predicted hit
Hep3Vector extrapPos = null;
Hep3Vector extrapPosSensor = null;
extrapPos = TrackUtils.extrapolateTrackPositionToSensor(trk, hps_sensor, sensors, bfield);
if (extrapPos == null)
continue;
extrapPosSensor = new BasicHep3Vector(extrapPos.v());
g2l.transform(extrapPosSensor);

if (debug) {
System.out.printf("NHits %d MPID sensor:%d %s %d\n", nres,trackRes.getIntVal(i_hit), sensorName,i_hit);
System.out.printf("Track uresiduals: %s %.5f %.5f\n",sensorName, trackRes.getDoubleVal(i_hit),trackRes.getFloatVal(i_hit));
Expand All @@ -631,6 +666,7 @@ private void doGBLresiduals(Track trk, Map<HpsSiSensor, TrackerHit> sensorHits,
aidaGBL.profile1D(resFolder+"uresidual_GBL_mod_p").fill(trackRes.getIntVal(i_hit)+spacing,trackRes.getDoubleVal(i_hit));
aidaGBL.histogram1D(resFolder+"uresidual_GBL_" + sensorName).fill(trackRes.getDoubleVal(i_hit));
aidaGBL.histogram2D(resFolder+"uresidual_GBL_vs_u_hit_" + sensorName).fill(hitPosSensorG.x(),trackRes.getDoubleVal(i_hit));
aidaGBL.histogram2D(resFolder+"uresidual_GBL_vs_v_pred_" + sensorName).fill(extrapPosSensor.y(),trackRes.getDoubleVal(i_hit));
aidaGBL.histogram1D(epullFolder+"ureserror_GBL_" + sensorName).fill(trackRes.getFloatVal(i_hit));
aidaGBL.histogram1D(epullFolder+"ures_pull_GBL_" + sensorName).fill(trackRes.getDoubleVal(i_hit) / trackRes.getFloatVal(i_hit));

Expand Down Expand Up @@ -736,6 +772,7 @@ private void setupPlots() {
aidaGBL.histogram1D(resFolder+"bresidual_GBL_" + sensor.getName(), nbins, -xmax, xmax);
aidaGBL.histogram1D(resFolder+"uresidual_GBL_" + sensor.getName(), nbins, -xmax, xmax);
aidaGBL.histogram2D(resFolder+"uresidual_GBL_vs_u_hit_" + sensor.getName(),100,-20.0,20.0,100,-0.1,0.1);
aidaGBL.histogram2D(resFolder+"uresidual_GBL_vs_v_pred_" + sensor.getName(),300,-60.0,60.0,100,-0.1,0.1);
aidaGBL.histogram2D(resFolder+"uresidual_GBL_vs_dT_hit_" + sensor.getName(),100,-10.0,10.0,100,-0.1,0.1);
aidaGBL.histogram2D(resFolder+"uresidual_GBL_vs_dTs_hit_" + sensor.getName(),100,-5.0,5.0,100,-0.1,0.1);
aidaGBL.histogram1D(epullFolder+"breserror_GBL_" + sensor.getName(), nbins, 0.0, 0.1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.sun.jna.ptr.DoubleByReference;

import java.util.List;
import org.apache.commons.math3.util.Pair;

import org.hps.recon.tracking.gbl.matrix.Matrix;
import org.hps.recon.tracking.gbl.matrix.SymMatrix;
Expand All @@ -21,9 +22,14 @@ public interface GblTrajectoryInterface extends Library {
Pointer GblTrajectoryCtorPtrArray(Pointer [] points, int npoints, int flagCurv, int flagU1dir, int flagU2dir);
Pointer GblTrajectoryCtorPtrArraySeed(Pointer [] points, int npoints, int aLabel, double [] seedArray, int flagCurv, int flagU1dir, int flagU2dir);

//Only supports 2 trajectories for e+/e- vertices or e- / e-
//Should/Could be extended to more
Pointer GblTrajectoryCtorPtrComposed(Pointer [] points_1, int npoints_1, double [] trafo_1,
Pointer [] points_2, int npoints_2, double [] trafo_2);

void GblTrajectory_fit(Pointer self, DoubleByReference Chi2, IntByReference Ndf, DoubleByReference lostWeight, char [] optionList, int aLabel);
void GblTrajectory_addPoint(Pointer self, Pointer point);
int GblTrajectory_isValid(Pointer self);
int GblTrajectory_isValid(Pointer self);
void GblTrajectory_printTrajectory(Pointer self, int level);
void GblTrajectory_printData(Pointer self);
void GblTrajectory_printPoints(Pointer self, int level);
Expand Down Expand Up @@ -57,7 +63,7 @@ public GblTrajectoryJna(List<GblPointJna> points, int flagCurv, int flagU1dir, i

}


//Simple trajectory constructor with seed
public GblTrajectoryJna(List<GblPointJna> points, int aLabel, Matrix seed, int flagCurv, int flagU1dir, int flagU2dir) {

Pointer [] ppoints = new Pointer[points.size()];
Expand All @@ -79,6 +85,36 @@ public GblTrajectoryJna(List<GblPointJna> points, int aLabel, Matrix seed, int f

}

//Composed (curved) trajectory constructor from a list of points and transformation (at inner (first) point)
//Only 2 tracks, supported for the moment

public GblTrajectoryJna(List < Pair <List<GblPointJna>, Matrix> > PointsAndTransList) {

Pointer [] ppoints_1 = new Pointer[PointsAndTransList.get(0).getFirst().size()];
Pointer [] ppoints_2 = new Pointer[PointsAndTransList.get(0).getFirst().size()];

int npoints_1 = PointsAndTransList.get(0).getFirst().size();
int npoints_2 = PointsAndTransList.get(1).getFirst().size();


int ipoint=-1;
for (GblPointJna point : PointsAndTransList.get(0).getFirst()) {
ipoint+=1;
ppoints_1[ipoint] = point.getPtr();
}

ipoint=-1;
for (GblPointJna point : PointsAndTransList.get(1).getFirst()) {
ipoint+=1;
ppoints_1[ipoint] = point.getPtr();
}

double [] trafo_1 = PointsAndTransList.get(0).getSecond().getColumnPackedCopy();
double [] trafo_2 = PointsAndTransList.get(1).getSecond().getColumnPackedCopy();

self = GblTrajectoryInterface.INSTANCE.GblTrajectoryCtorPtrComposed(ppoints_1, npoints_1, trafo_1,
ppoints_2, npoints_2, trafo_2);
}

public void fit(DoubleByReference Chi2, IntByReference Ndf, DoubleByReference lostWeight, String optionList) {

Expand Down
Loading