diff --git a/common-tools/clas-tracking/src/main/java/org/jlab/clas/tracking/utilities/MatrixOps.java b/common-tools/clas-tracking/src/main/java/org/jlab/clas/tracking/utilities/MatrixOps.java index c1ce8072ab..afdf17834d 100644 --- a/common-tools/clas-tracking/src/main/java/org/jlab/clas/tracking/utilities/MatrixOps.java +++ b/common-tools/clas-tracking/src/main/java/org/jlab/clas/tracking/utilities/MatrixOps.java @@ -128,7 +128,7 @@ public double[][] MatrixTranspose(Object obj1) { for(int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { - result[i][j] = arr1[j][i]; + result[j][i] = arr1[i][j]; } } arr1 = null; diff --git a/etc/bankdefs/hipo4/dc.json b/etc/bankdefs/hipo4/dc.json index 4558300006..54ce6acbb6 100644 --- a/etc/bankdefs/hipo4/dc.json +++ b/etc/bankdefs/hipo4/dc.json @@ -529,36 +529,47 @@ "name": "TimeBasedTrkg::TBCovMat", "group": 20600, "item" : 37, - "info": "reconstructed track covariance matrix", + "info": "reconstructed track covariance matrix in lab frame", "entries": [ {"name":"id", "type":"S", "info":"id of the track"}, - {"name":"C11", "type":"F", "info":"C11 covariance matrix element at last superlayer used in the fit"}, - {"name":"C12", "type":"F", "info":"C12 covariance matrix element at last superlayer used in the fit"}, - {"name":"C13", "type":"F", "info":"C13 covariance matrix element at last superlayer used in the fit"}, - {"name":"C14", "type":"F", "info":"C14 covariance matrix element at last superlayer used in the fit"}, - {"name":"C15", "type":"F", "info":"C15 covariance matrix element at last superlayer used in the fit"}, - {"name":"C21", "type":"F", "info":"C21 covariance matrix element at last superlayer used in the fit"}, - {"name":"C22", "type":"F", "info":"C22 covariance matrix element at last superlayer used in the fit"}, - {"name":"C23", "type":"F", "info":"C23 covariance matrix element at last superlayer used in the fit"}, - {"name":"C24", "type":"F", "info":"C24 covariance matrix element at last superlayer used in the fit"}, - {"name":"C25", "type":"F", "info":"C25 covariance matrix element at last superlayer used in the fit"}, - {"name":"C31", "type":"F", "info":"C31 covariance matrix element at last superlayer used in the fit"}, - {"name":"C32", "type":"F", "info":"C32 covariance matrix element at last superlayer used in the fit"}, - {"name":"C33", "type":"F", "info":"C33 covariance matrix element at last superlayer used in the fit"}, - {"name":"C34", "type":"F", "info":"C34 covariance matrix element at last superlayer used in the fit"}, - {"name":"C35", "type":"F", "info":"C35 covariance matrix element at last superlayer used in the fit"}, - {"name":"C41", "type":"F", "info":"C41 covariance matrix element at last superlayer used in the fit"}, - {"name":"C42", "type":"F", "info":"C42 covariance matrix element at last superlayer used in the fit"}, - {"name":"C43", "type":"F", "info":"C43 covariance matrix element at last superlayer used in the fit"}, - {"name":"C44", "type":"F", "info":"C44 covariance matrix element at last superlayer used in the fit"}, - {"name":"C45", "type":"F", "info":"C45 covariance matrix element at last superlayer used in the fit"}, - {"name":"C51", "type":"F", "info":"C51 covariance matrix element at last superlayer used in the fit"}, - {"name":"C52", "type":"F", "info":"C52 covariance matrix element at last superlayer used in the fit"}, - {"name":"C53", "type":"F", "info":"C53 covariance matrix element at last superlayer used in the fit"}, - {"name":"C54", "type":"F", "info":"C54 covariance matrix element at last superlayer used in the fit"}, - {"name":"C55", "type":"F", "info":"C55 covariance matrix element at last superlayer used in the fit"} + {"name":"C11", "type":"F", "info":"var(x) at vertex in lab frame"}, + {"name":"C12", "type":"F", "info":"cov(x, y) at vertex in lab frame"}, + {"name":"C13", "type":"F", "info":"cov(x, z) at vertex in lab frame"}, + {"name":"C14", "type":"F", "info":"cov(x, p_theta) at vertex in lab frame"}, + {"name":"C15", "type":"F", "info":"cov(x, p_phi) at vertex in lab frame"}, + {"name":"C16", "type":"F", "info":"cov(x, p) at vertex in lab frame"}, + {"name":"C21", "type":"F", "info":"cov(y, x) at vertex in lab frame"}, + {"name":"C22", "type":"F", "info":"var(y) at vertex in lab frame"}, + {"name":"C23", "type":"F", "info":"cov(y, z) at vertex in lab frame"}, + {"name":"C24", "type":"F", "info":"cov(y, p_theta) at vertex in lab frame"}, + {"name":"C25", "type":"F", "info":"cov(y, p_phi) at vertex in lab frame"}, + {"name":"C26", "type":"F", "info":"cov(y, p) at vertex in lab frame"}, + {"name":"C31", "type":"F", "info":"cov(z, x) at vertex in lab frame"}, + {"name":"C32", "type":"F", "info":"cov(z, y) at vertex in lab frame"}, + {"name":"C33", "type":"F", "info":"var(z) at vertex in lab frame"}, + {"name":"C34", "type":"F", "info":"cov(z, p_theta) at vertex in lab frame"}, + {"name":"C35", "type":"F", "info":"cov(z, p_phi) at vertex in lab frame"}, + {"name":"C36", "type":"F", "info":"cov(z, p) at vertex in lab frame"}, + {"name":"C41", "type":"F", "info":"cov(p_theta, x) at vertex in lab frame"}, + {"name":"C42", "type":"F", "info":"cov(p_theta, y) at vertex in lab frame"}, + {"name":"C43", "type":"F", "info":"cov(p_theta, z) at vertex in lab frame"}, + {"name":"C44", "type":"F", "info":"var(p_theta) at vertex in lab frame"}, + {"name":"C45", "type":"F", "info":"cov(p_theta, p_phi) at vertex in lab frame"}, + {"name":"C46", "type":"F", "info":"cov(p_theta, p) at vertex in lab frame"}, + {"name":"C51", "type":"F", "info":"cov(p_phi, x) at vertex in lab frame"}, + {"name":"C52", "type":"F", "info":"cov(p_phi, y) at vertex in lab frame"}, + {"name":"C53", "type":"F", "info":"cov(p_phi, z) at vertex in lab frame"}, + {"name":"C54", "type":"F", "info":"cov(p_phi, p_theta) at vertex in lab frame"}, + {"name":"C55", "type":"F", "info":"var(p_phi) at vertex in lab frame"}, + {"name":"C56", "type":"F", "info":"cov(p_phi, p) at vertex in lab frame"}, + {"name":"C61", "type":"F", "info":"cov(p, x) at vertex in lab frame"}, + {"name":"C62", "type":"F", "info":"cov(p, y) at vertex in lab frame"}, + {"name":"C63", "type":"F", "info":"cov(p, z) at vertex in lab frame"}, + {"name":"C64", "type":"F", "info":"cov(p, p_theta) at vertex in lab frame"}, + {"name":"C65", "type":"F", "info":"cov(p, p_phi) at vertex in lab frame"}, + {"name":"C66", "type":"F", "info":"var(p) at vertex in lab frame"} ] - }, + }, { "name": "TimeBasedTrkg::Trajectory", "group": 20600, diff --git a/etc/bankdefs/hipo4/dcnn.json b/etc/bankdefs/hipo4/dcnn.json index 74276a745d..145f3cba6b 100644 --- a/etc/bankdefs/hipo4/dcnn.json +++ b/etc/bankdefs/hipo4/dcnn.json @@ -390,36 +390,47 @@ "name": "TimeBasedTrkg::AICovMat", "group": 20600, "item" : 77, - "info": "reconstructed track covariance matrix", + "info": "reconstructed track covariance matrix in lab frame", "entries": [ {"name":"id", "type":"S", "info":"id of the track"}, - {"name":"C11", "type":"F", "info":"C11 covariance matrix element at last superlayer used in the fit"}, - {"name":"C12", "type":"F", "info":"C12 covariance matrix element at last superlayer used in the fit"}, - {"name":"C13", "type":"F", "info":"C13 covariance matrix element at last superlayer used in the fit"}, - {"name":"C14", "type":"F", "info":"C14 covariance matrix element at last superlayer used in the fit"}, - {"name":"C15", "type":"F", "info":"C15 covariance matrix element at last superlayer used in the fit"}, - {"name":"C21", "type":"F", "info":"C21 covariance matrix element at last superlayer used in the fit"}, - {"name":"C22", "type":"F", "info":"C22 covariance matrix element at last superlayer used in the fit"}, - {"name":"C23", "type":"F", "info":"C23 covariance matrix element at last superlayer used in the fit"}, - {"name":"C24", "type":"F", "info":"C24 covariance matrix element at last superlayer used in the fit"}, - {"name":"C25", "type":"F", "info":"C25 covariance matrix element at last superlayer used in the fit"}, - {"name":"C31", "type":"F", "info":"C31 covariance matrix element at last superlayer used in the fit"}, - {"name":"C32", "type":"F", "info":"C32 covariance matrix element at last superlayer used in the fit"}, - {"name":"C33", "type":"F", "info":"C33 covariance matrix element at last superlayer used in the fit"}, - {"name":"C34", "type":"F", "info":"C34 covariance matrix element at last superlayer used in the fit"}, - {"name":"C35", "type":"F", "info":"C35 covariance matrix element at last superlayer used in the fit"}, - {"name":"C41", "type":"F", "info":"C41 covariance matrix element at last superlayer used in the fit"}, - {"name":"C42", "type":"F", "info":"C42 covariance matrix element at last superlayer used in the fit"}, - {"name":"C43", "type":"F", "info":"C43 covariance matrix element at last superlayer used in the fit"}, - {"name":"C44", "type":"F", "info":"C44 covariance matrix element at last superlayer used in the fit"}, - {"name":"C45", "type":"F", "info":"C45 covariance matrix element at last superlayer used in the fit"}, - {"name":"C51", "type":"F", "info":"C51 covariance matrix element at last superlayer used in the fit"}, - {"name":"C52", "type":"F", "info":"C52 covariance matrix element at last superlayer used in the fit"}, - {"name":"C53", "type":"F", "info":"C53 covariance matrix element at last superlayer used in the fit"}, - {"name":"C54", "type":"F", "info":"C54 covariance matrix element at last superlayer used in the fit"}, - {"name":"C55", "type":"F", "info":"C55 covariance matrix element at last superlayer used in the fit"} + {"name":"C11", "type":"F", "info":"var(x) at vertex in lab frame"}, + {"name":"C12", "type":"F", "info":"cov(x, y) at vertex in lab frame"}, + {"name":"C13", "type":"F", "info":"cov(x, z) at vertex in lab frame"}, + {"name":"C14", "type":"F", "info":"cov(x, p_theta) at vertex in lab frame"}, + {"name":"C15", "type":"F", "info":"cov(x, p_phi) at vertex in lab frame"}, + {"name":"C16", "type":"F", "info":"cov(x, p) at vertex in lab frame"}, + {"name":"C21", "type":"F", "info":"cov(y, x) at vertex in lab frame"}, + {"name":"C22", "type":"F", "info":"var(y) at vertex in lab frame"}, + {"name":"C23", "type":"F", "info":"cov(y, z) at vertex in lab frame"}, + {"name":"C24", "type":"F", "info":"cov(y, p_theta) at vertex in lab frame"}, + {"name":"C25", "type":"F", "info":"cov(y, p_phi) at vertex in lab frame"}, + {"name":"C26", "type":"F", "info":"cov(y, p) at vertex in lab frame"}, + {"name":"C31", "type":"F", "info":"cov(z, x) at vertex in lab frame"}, + {"name":"C32", "type":"F", "info":"cov(z, y) at vertex in lab frame"}, + {"name":"C33", "type":"F", "info":"var(z) at vertex in lab frame"}, + {"name":"C34", "type":"F", "info":"cov(z, p_theta) at vertex in lab frame"}, + {"name":"C35", "type":"F", "info":"cov(z, p_phi) at vertex in lab frame"}, + {"name":"C36", "type":"F", "info":"cov(z, p) at vertex in lab frame"}, + {"name":"C41", "type":"F", "info":"cov(p_theta, x) at vertex in lab frame"}, + {"name":"C42", "type":"F", "info":"cov(p_theta, y) at vertex in lab frame"}, + {"name":"C43", "type":"F", "info":"cov(p_theta, z) at vertex in lab frame"}, + {"name":"C44", "type":"F", "info":"var(p_theta) at vertex in lab frame"}, + {"name":"C45", "type":"F", "info":"cov(p_theta, p_phi) at vertex in lab frame"}, + {"name":"C46", "type":"F", "info":"cov(p_theta, p) at vertex in lab frame"}, + {"name":"C51", "type":"F", "info":"cov(p_phi, x) at vertex in lab frame"}, + {"name":"C52", "type":"F", "info":"cov(p_phi, y) at vertex in lab frame"}, + {"name":"C53", "type":"F", "info":"cov(p_phi, z) at vertex in lab frame"}, + {"name":"C54", "type":"F", "info":"cov(p_phi, p_theta) at vertex in lab frame"}, + {"name":"C55", "type":"F", "info":"var(p_phi) at vertex in lab frame"}, + {"name":"C56", "type":"F", "info":"cov(p_phi, p) at vertex in lab frame"}, + {"name":"C61", "type":"F", "info":"cov(p, x) at vertex in lab frame"}, + {"name":"C62", "type":"F", "info":"cov(p, y) at vertex in lab frame"}, + {"name":"C63", "type":"F", "info":"cov(p, z) at vertex in lab frame"}, + {"name":"C64", "type":"F", "info":"cov(p, p_theta) at vertex in lab frame"}, + {"name":"C65", "type":"F", "info":"cov(p, p_phi) at vertex in lab frame"}, + {"name":"C66", "type":"F", "info":"var(p) at vertex in lab frame"} ] - }, + }, { "name": "TimeBasedTrkg::AITrajectory", "group": 20600, diff --git a/reconstruction/dc/src/main/java/org/jlab/rec/dc/banks/Banks.java b/reconstruction/dc/src/main/java/org/jlab/rec/dc/banks/Banks.java index aac1368be3..b677dd8f90 100644 --- a/reconstruction/dc/src/main/java/org/jlab/rec/dc/banks/Banks.java +++ b/reconstruction/dc/src/main/java/org/jlab/rec/dc/banks/Banks.java @@ -136,7 +136,7 @@ public String getTrajBank() { public String getCovmatBank() { return this.getOutputBank("CovMat"); - } + } public String getRecEventBank() { return this.getRecBank("Event"); diff --git a/reconstruction/dc/src/main/java/org/jlab/rec/dc/banks/RecoBankWriter.java b/reconstruction/dc/src/main/java/org/jlab/rec/dc/banks/RecoBankWriter.java index 529be90740..01e734df15 100644 --- a/reconstruction/dc/src/main/java/org/jlab/rec/dc/banks/RecoBankWriter.java +++ b/reconstruction/dc/src/main/java/org/jlab/rec/dc/banks/RecoBankWriter.java @@ -446,50 +446,69 @@ public DataBank fillHBTracksBank(DataEvent event, List candlist) { public DataBank fillHBTrajectoryBank(DataEvent event, List candlist) { return this.fillTrajectoryBank(event, candlist); } - + /** * * @param event hipo event * @param candlist tracks - * @return covariance matrix from HB fits to be used for starting TB tracking + * @return covariance matrix for momentum and vertex in lab frame */ - private DataBank fillTrackCovMatBank(DataEvent event, List candlist) { + private DataBank fillTrackCovMatLabBank(DataEvent event, List candlist) { DataBank bank = event.createBank(bankNames.getCovmatBank(), candlist.size()); for (int i = 0; i < candlist.size(); i++) { bank.setShort("id", i, (short) candlist.get(i).get_Id()); - if(candlist.get(i).get_CovMat()!=null) { - bank.setFloat("C11", i, (float) candlist.get(i).get_CovMat().get(0, 0)); - bank.setFloat("C12", i, (float) candlist.get(i).get_CovMat().get(0, 1)); - bank.setFloat("C13", i, (float) candlist.get(i).get_CovMat().get(0, 2)); - bank.setFloat("C14", i, (float) candlist.get(i).get_CovMat().get(0, 3)); - bank.setFloat("C15", i, (float) candlist.get(i).get_CovMat().get(0, 4)); - bank.setFloat("C21", i, (float) candlist.get(i).get_CovMat().get(1, 0)); - bank.setFloat("C22", i, (float) candlist.get(i).get_CovMat().get(1, 1)); - bank.setFloat("C23", i, (float) candlist.get(i).get_CovMat().get(1, 2)); - bank.setFloat("C24", i, (float) candlist.get(i).get_CovMat().get(1, 3)); - bank.setFloat("C25", i, (float) candlist.get(i).get_CovMat().get(1, 4)); - bank.setFloat("C31", i, (float) candlist.get(i).get_CovMat().get(2, 0)); - bank.setFloat("C32", i, (float) candlist.get(i).get_CovMat().get(2, 1)); - bank.setFloat("C33", i, (float) candlist.get(i).get_CovMat().get(2, 2)); - bank.setFloat("C34", i, (float) candlist.get(i).get_CovMat().get(2, 3)); - bank.setFloat("C35", i, (float) candlist.get(i).get_CovMat().get(2, 4)); - bank.setFloat("C41", i, (float) candlist.get(i).get_CovMat().get(3, 0)); - bank.setFloat("C42", i, (float) candlist.get(i).get_CovMat().get(3, 1)); - bank.setFloat("C43", i, (float) candlist.get(i).get_CovMat().get(3, 2)); - bank.setFloat("C44", i, (float) candlist.get(i).get_CovMat().get(3, 3)); - bank.setFloat("C45", i, (float) candlist.get(i).get_CovMat().get(3, 4)); - bank.setFloat("C51", i, (float) candlist.get(i).get_CovMat().get(4, 0)); - bank.setFloat("C52", i, (float) candlist.get(i).get_CovMat().get(4, 1)); - bank.setFloat("C53", i, (float) candlist.get(i).get_CovMat().get(4, 2)); - bank.setFloat("C54", i, (float) candlist.get(i).get_CovMat().get(4, 3)); - bank.setFloat("C55", i, (float) candlist.get(i).get_CovMat().get(4, 4)); + if(candlist.get(i).get_CMInLab()!=null) { + double[][] CM = candlist.get(i).get_CMInLab(); + bank.setFloat("C11", i, (float) CM[0][0]); + bank.setFloat("C12", i, (float) CM[0][1]); + bank.setFloat("C13", i, (float) CM[0][2]); + bank.setFloat("C14", i, (float) CM[0][3]); + bank.setFloat("C15", i, (float) CM[0][4]); + bank.setFloat("C16", i, (float) CM[0][5]); + + bank.setFloat("C21", i, (float) CM[1][0]); + bank.setFloat("C22", i, (float) CM[1][1]); + bank.setFloat("C23", i, (float) CM[1][2]); + bank.setFloat("C24", i, (float) CM[1][3]); + bank.setFloat("C25", i, (float) CM[1][4]); + bank.setFloat("C26", i, (float) CM[1][5]); + + bank.setFloat("C31", i, (float) CM[2][0]); + bank.setFloat("C32", i, (float) CM[2][1]); + bank.setFloat("C33", i, (float) CM[2][2]); + bank.setFloat("C34", i, (float) CM[2][3]); + bank.setFloat("C35", i, (float) CM[2][4]); + bank.setFloat("C36", i, (float) CM[2][5]); + + bank.setFloat("C41", i, (float) CM[3][0]); + bank.setFloat("C42", i, (float) CM[3][1]); + bank.setFloat("C43", i, (float) CM[3][2]); + bank.setFloat("C44", i, (float) CM[3][3]); + bank.setFloat("C45", i, (float) CM[3][4]); + bank.setFloat("C46", i, (float) CM[3][5]); + + bank.setFloat("C51", i, (float) CM[4][0]); + bank.setFloat("C52", i, (float) CM[4][1]); + bank.setFloat("C53", i, (float) CM[4][2]); + bank.setFloat("C54", i, (float) CM[4][3]); + bank.setFloat("C55", i, (float) CM[4][4]); + bank.setFloat("C56", i, (float) CM[4][5]); + + bank.setFloat("C61", i, (float) CM[5][0]); + bank.setFloat("C62", i, (float) CM[5][1]); + bank.setFloat("C63", i, (float) CM[5][2]); + bank.setFloat("C64", i, (float) CM[5][3]); + bank.setFloat("C65", i, (float) CM[5][4]); + bank.setFloat("C66", i, (float) CM[5][5]); + } } //bank.show(); return bank; } + /** * * @param event the EvioEvent @@ -939,7 +958,7 @@ public void fillAllTBBanks(DataEvent event, List fhits, List kfStateVecsAlongTrajectory = setKFStateVecsAlongTrajectory(kFZRef, deltaPathToVtx); @@ -306,9 +307,10 @@ public boolean processDataEvent(DataEvent event) { continue; } - // get CovMat at vertex - Point3D VTCS = crosses.get(0).getCoordsInTiltedSector(TrackArray1.get_Vtx0().x(), TrackArray1.get_Vtx0().y(), TrackArray1.get_Vtx0().z()); - TrackArray1.set_CovMat(kFZRef.propagateToVtx(crosses.get(0).get_Sector(), VTCS.z())); + // get CovMat at vertex + Point3D VTCS = TrackArray1.get(TrackArray1.size()-1).getCoordsInTiltedSector(TrackArray1.get_Vtx0().x(), TrackArray1.get_Vtx0().y(), TrackArray1.get_Vtx0().z()); + TrackArray1.set_CovMat(kFZRef.propagateToVtx(TrackArray1.get(TrackArray1.size()-1).get_Sector(), VTCS.z())); + TrackArray1.transCMToGlobal(); double deltaPathToVtx = kFZRef.getDeltaPathToVtx(TrackArray1.get(TrackArray1.size()-1).get_Sector(), VTCS.z()); List kfStateVecsAlongTrajectory = setKFStateVecsAlongTrajectory(kFZRef, deltaPathToVtx);