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..12a482b050 100644 --- a/etc/bankdefs/hipo4/dc.json +++ b/etc/bankdefs/hipo4/dc.json @@ -559,6 +559,51 @@ {"name":"C55", "type":"F", "info":"C55 covariance matrix element at last superlayer used in the fit"} ] }, + { + "name": "TimeBasedTrkg::TBCovMatLab", + "group": 20600, + "item" : 38, + "info": "reconstructed track covariance matrix in lab frame", + "entries": [ + {"name":"id", "type":"S", "info":"id of the track"}, + {"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..234e7091c2 100644 --- a/etc/bankdefs/hipo4/dcnn.json +++ b/etc/bankdefs/hipo4/dcnn.json @@ -420,6 +420,51 @@ {"name":"C55", "type":"F", "info":"C55 covariance matrix element at last superlayer used in the fit"} ] }, + { + "name": "TimeBasedTrkg::AICovMatLab", + "group": 20600, + "item" : 78, + "info": "reconstructed track covariance matrix in lab frame", + "entries": [ + {"name":"id", "type":"S", "info":"id of the track"}, + {"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..088526caa1 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 @@ -138,6 +138,10 @@ public String getCovmatBank() { return this.getOutputBank("CovMat"); } + public String getCovmatLabBank() { + return this.getOutputBank("CovMatLab"); + } + 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..72094282af 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 @@ -490,6 +490,69 @@ private DataBank fillTrackCovMatBank(DataEvent event, List candlist) { //bank.show(); return bank; } + + /** + * + * @param event hipo event + * @param candlist tracks + * @return covariance matrix for momentum and vertex in lab frame + */ + private DataBank fillTrackCovMatLabBank(DataEvent event, List candlist) { + + DataBank bank = event.createBank(bankNames.getCovmatLabBank(), 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_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 +1002,8 @@ 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);