Skip to content

Commit

Permalink
more analysis cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
raffaelladevita committed Feb 18, 2025
1 parent 0163a14 commit 3f3b46b
Showing 1 changed file with 153 additions and 115 deletions.
268 changes: 153 additions & 115 deletions reconstruction/dc/src/main/java/org/jlab/service/dc/DCRBFirmware.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jlab.detector.base.DetectorType;
import org.jlab.detector.calib.utils.ConstantsManager;
import org.jlab.groot.base.GStyle;
import org.jlab.groot.data.H1F;
Expand All @@ -20,10 +21,10 @@
*/
public class DCRBFirmware {

private static IndexedTable tt = null;
private static IndexedTable reverse = null;
public IndexedTable tt = null;
public IndexedTable reverse = null;

private static void getReverseTT(int run) {
private void getReverseTT(int run) {
ConstantsManager manager = new ConstantsManager();
manager.init("/daq/tt/dc");
tt = manager.getConstants(run, "/daq/tt/dc");
Expand All @@ -42,7 +43,97 @@ private static void getReverseTT(int run) {
reverse.setIntValue(channel, "channel", sector, layer, comp, order);
}
}


public void getTables(DataEvent event) {
if(reverse==null && event.hasBank("RUN::config")) {
int run = event.getBank("RUN::config").getInt("run", 0);
if(run>0) this.getReverseTT(run);
}
}

public Map<Integer,Integer> getTrackMap(DataEvent event, String mode, H1F[] htracks) {
String hits = "HitBasedTrkg::HBHitTrkId";
String tracks = "HitBasedTrkg::HBTracks";
String rtracks = "RECHB::Track";
String particles = "RECHB::Particle";
String tid = "tid";
if(mode == "TB") {
hits = "TimeBasedTrkg::TBHits";
tracks = "TimeBasedTrkg::TBTracks";
rtracks = "REC::Track";
particles = "REC::Particle";
tid = "trkID";
}
Map<Integer,Integer> onTrack = new HashMap<>();
Map<Integer,Integer> goodTracks = new HashMap<>();
if(event.hasBank(hits) && event.hasBank(tracks) && event.hasBank(rtracks) && event.hasBank(particles)) {
DataBank pBank = event.getBank(particles);
DataBank rBank = event.getBank(rtracks);
DataBank tBank = event.getBank(tracks);
DataBank hBank = event.getBank(hits);
for(int i=0; i<rBank.rows(); i++) {
if(rBank.getByte("detector",i)==DetectorType.DC.getDetectorId()) {
int pindex = rBank.getShort("pindex", i);
int index = rBank.getShort("index", i);
int sector = rBank.getByte("sector", i);
int NDF = rBank.getShort("NDF", i);
double chi2pid = pBank.getFloat("chi2pid", pindex);
double vz = pBank.getFloat("vz", pindex);
if(Math.abs(chi2pid)<3 && Math.abs(vz+4)<10 && (sector==2 || sector==5)) {
goodTracks.put(tBank.getInt("id", index), index);
htracks[1].fill(NDF);
htracks[2].fill(vz);
}
}
}
htracks[0].fill(goodTracks.size());
for(int i=0; i<hBank.rows(); i++) {
if(goodTracks.containsKey(hBank.getInt(tid, i))) {
onTrack.put((int) hBank.getShort("id",i), i);
}
}
}
return onTrack;
}

public void fill(H1F[] hits, Hit h, Hit hp) {
this.fill(hits, h, hp, 1);
}

public void fill(H1F[] hits, Hit h, Hit hp, double weight) {
hits[0].fill(h.tdc(), weight);
hits[1].fill(h.tot(), weight);
if(hp!=null) {
if(h.tdc()>hp.tdc())
hits[2].fill(h.tdc()-hp.tdc()-hp.tot(), weight);
else
hits[2].fill(hp.tdc()-h.tdc()-h.tot(), weight);
}
hits[3].fill(h.order(), weight);
}


public void plot(String canvasTitle, H1F[] mult, H1F[][]... hits) {
int nrow = mult.length;
int ncol = hits[0][0].length+1;
TCanvas canvas = new TCanvas(canvasTitle, 1000, 800);
canvas.divide(ncol, nrow);
for(int r=0; r<nrow; r++) {
canvas.cd(r*ncol);
canvas.draw(mult[r]);
canvas.getCanvas().getPad().getAxisY().setLog(true);
for(int j=0; j<ncol-1; j++) {
canvas.cd(r*ncol+1+j);
for(int k=0; k<hits.length; k++) {
if(k==0)
canvas.draw(hits[k][r][j]);
else
canvas.draw(hits[k][r][j], "same");
}
}
}
}

public static class Hit implements Comparable {

private int index;
Expand Down Expand Up @@ -126,27 +217,47 @@ public int compareTo(Object o) {
public static void main(String[] args) {

GStyle.getH1FAttributes().setOptStat("10");
int[][] hmin = {{-100, -100, -100}, {-100, -100, -100}, {-50, -50, -50}};
int[][] hmax = {{600, 1500, 1300}, {1200, 1200, 1200}, {150, 150, 150}};
String[] title = {"TDC (ns)", "ToT (ns)", "Order Type"};
GStyle.getAxisAttributesX().setTitleFontSize(20);
GStyle.getAxisAttributesX().setLabelFontSize(16);
GStyle.getAxisAttributesY().setTitleFontSize(20);
GStyle.getAxisAttributesY().setLabelFontSize(16);
GStyle.getAxisAttributesZ().setLabelFontSize(12);
GStyle.getAxisAttributesX().setLabelFontName("Arial");
GStyle.getAxisAttributesY().setLabelFontName("Arial");
GStyle.getAxisAttributesZ().setLabelFontName("Arial");
GStyle.getAxisAttributesX().setTitleFontName("Arial");
GStyle.getAxisAttributesY().setTitleFontName("Arial");
GStyle.getAxisAttributesZ().setTitleFontName("Arial");
GStyle.setGraphicsFrameLineWidth(1);
GStyle.getH1FAttributes().setLineWidth(2);

int[][] hmin = {{-100, -100, -100}, {-100, -100, -100},{-100, -100, -100}, {-50, -50, -50}};
int[][] hmax = {{600, 1500, 1300}, {1200, 1200, 1200},{600, 600, 600}, {150, 150, 150}};
String[] title = {"TDC (ns)", "ToT (ns)", "#DeltaT", "Order Type"};
double[] tmin = {0, 0, -15};
double[] tmax = {10, 40, 15};
int[] tbin = {10, 40, 100};
String[] ttitle = {"Number of tracks", "NDF", "vz(cm)"};

H1F[] hMult = new H1F[3];
H1F[] hTrks = new H1F[3];
H1F[][] hAll = new H1F[3][3];
H1F[][] hFst = new H1F[3][3];
H1F[][] hSnd = new H1F[3][3];
H1F[][] hOn = new H1F[3][3];
H1F[][] hOff = new H1F[3][3];
H1F[][] hAll = new H1F[3][4];
H1F[][] hFst = new H1F[3][4];
H1F[][] hSnd = new H1F[3][4];
H1F[][] hOn = new H1F[3][4];
H1F[][] hOff = new H1F[3][4];
for(int r=0; r<3; r++) {
hMult[r] = new H1F("hMult"+r, "Hit multiplicity per group - R"+(r+1), 64, 0, 64);
hTrks[r] = new H1F("hTrks"+r, "Track multiplicity", 10, 0, 10);
hTrks[r] = new H1F("hTrks"+r, " ", tbin[r], tmin[r], tmax[r]);
hTrks[r].setTitleX(ttitle[r]);
hTrks[r].setOptStat("110");
for(int j=0; j<3; j++) {
hAll[r][j] = new H1F("hAll"+r+j, "All hits - R"+(r+1), 100, -100, hmax[j][r]);
hFst[r][j] = new H1F("hFst"+r+j, "First hit - R"+(r+1), 100, -100, hmax[j][r]);
hSnd[r][j] = new H1F("hSnd"+r+j, "First hit - R"+(r+1), 100, -100, hmax[j][r]);
hOn[r][j] = new H1F("hOn"+r+j, "Hits on track - R"+(r+1), 100, -100, hmax[j][r]);
hOff[r][j] = new H1F("hOff"+r+j, "Hits off track - R"+(r+1), 100, -100, hmax[j][r]);
hMult[r] = new H1F("hMult"+r, "Region "+(r+1), 64, 0, 64);
hMult[r].setTitleX("Number of hits per group");
for(int j=0; j<4; j++) {
hAll[r][j] = new H1F("hAll"+r+j, "Region "+(r+1), 100, hmin[j][r], hmax[j][r]);
hFst[r][j] = new H1F("hFst"+r+j, "Region "+(r+1), 100, hmin[j][r], hmax[j][r]);
hSnd[r][j] = new H1F("hSnd"+r+j, "Region "+(r+1), 100, hmin[j][r], hmax[j][r]);
hOn[r][j] = new H1F("hOn"+r+j, "Region "+(r+1), 100, hmin[j][r], hmax[j][r]);
hOff[r][j] = new H1F("hOff"+r+j, "Region "+(r+1), 100, hmin[j][r], hmax[j][r]);
hAll[r][j].setTitleX(title[j]);
hFst[r][j].setTitleX(title[j]);
hFst[r][j].setLineColor(2);
Expand All @@ -156,55 +267,16 @@ public static void main(String[] args) {
hOff[r][j].setTitleX(title[j]);
}
}
DCRBFirmware dcrb = new DCRBFirmware();

HipoDataSource reader = new HipoDataSource();
reader.open("/Users/devita/dcrb/rec_tdccut_tot50.hipo");
reader.open("/Users/devita/dcrb/rec_alltdc.hipo");
while(reader.hasEvent()) {
DataEvent event = reader.getNextEvent();

if(reverse==null && event.hasBank("RUN::config")) {
int run = event.getBank("RUN::config").getInt("run", 0);
if(run>0) getReverseTT(run);
}

if(event.hasBank("HitBasedTrkg::HBTracks")) {
int ntracks = 0;
DataBank tracks = event.getBank("HitBasedTrkg::HBTracks");
for(int i=0; i<tracks.rows(); i++) {
int sector = tracks.getByte("sector", i);
if(sector==2 || sector==5)
ntracks++;
}
hTrks[0].fill(ntracks);
}
if(event.hasBank("TimeBasedTrkg::TBTracks")) {
int ntracks = 0;
DataBank tracks = event.getBank("TimeBasedTrkg::TBTracks");
for(int i=0; i<tracks.rows(); i++) {
int sector = tracks.getByte("sector", i);
if(sector==2 || sector==5)
ntracks++;
}
hTrks[1].fill(ntracks);
}

Map<Integer,Integer> onHBtrack = new HashMap<>();
if(event.hasBank("HitBasedTrkg::HBHitTrkId")) {
DataBank hits = event.getBank("HitBasedTrkg::HBHitTrkId");
for(int i=0; i<hits.rows(); i++) {
if(hits.getInt("tid", i)>-1)
onHBtrack.put((int) hits.getShort("id",i), i);
}
}

Map<Integer,Integer> onTBtrack = new HashMap<>();
if(event.hasBank("TimeBasedTrkg::TBHits")) {
DataBank hits = event.getBank("TimeBasedTrkg::TBHits");
for(int i=0; i<hits.rows(); i++) {
if(hits.getInt("trkID", i)>-1)
onTBtrack.put((int) hits.getShort("id",i), i);
}
}
dcrb.getTables(event);

Map<Integer,Integer> onHBtrack = dcrb.getTrackMap(event, "HB", hTrks);

Map<Integer, Integer> multiplicity = new HashMap();
Map<Integer, List<Hit>> wires = new HashMap();
Expand All @@ -218,21 +290,16 @@ public static void main(String[] args) {
int time = tdc.getInt("TDC", i);
int tot = tdc.getInt("width", i);
if((sector==2 || sector==5) /*&& order==0*/) {
int crate = reverse.getIntValue("crate", sector, layer, wire, order%10);
int slot = reverse.getIntValue("slot", sector, layer, wire, order%10);
int chan = reverse.getIntValue("channel", sector, layer, wire, order%10);
int crate = dcrb.reverse.getIntValue("crate", sector, layer, wire, order%10);
int slot = dcrb.reverse.getIntValue("slot", sector, layer, wire, order%10);
int chan = dcrb.reverse.getIntValue("channel", sector, layer, wire, order%10);
int group = chan/16;

Hit h = new Hit(i, sector, layer, wire, order, time, tot);
if(!wires.containsKey(h.hashCode()))
wires.put(h.hashCode(),new ArrayList<>());
wires.get(h.hashCode()).add(h);

int r =h.region()-1;
hAll[r][0].fill(time);
hAll[r][1].fill(tot);
hAll[r][2].fill(order);

int hash = Hit.generateHashCode(crate, slot, group*16);
if(multiplicity.containsKey(hash))
multiplicity.replace(hash, multiplicity.get(hash)+1);
Expand All @@ -246,30 +313,27 @@ public static void main(String[] args) {
Collections.sort(hits);
for(int i=0; i<hits.size(); i++) {
Hit h = hits.get(i);
Hit hpre = null;
Hit hpost = null;
if(i>0) hpre = hits.get(i-1);
if(i<hits.size()-1) hpost = hits.get(i+1);
dcrb.fill(hAll[h.region()-1], h, hpost);
if(i==0) {
hFst[h.region()-1][0].fill(h.tdc());
hFst[h.region()-1][1].fill(h.tot());
hFst[h.region()-1][2].fill(h.order());
dcrb.fill(hFst[h.region()-1], h, hpost);
}
else if(hits.get(0).tot()<50) {
hSnd[h.region()-1][0].fill(h.tdc());
hSnd[h.region()-1][1].fill(h.tot());
hSnd[h.region()-1][2].fill(h.order());
else if(i>0 && hits.get(0).tot()<50 && hits.get(i).tot()>50) {
dcrb.fill(hSnd[h.region()-1], h, hpre, 10);
}
if(onHBtrack.containsKey(h.index()+1)) {
hOn[h.region()-1][0].fill(h.tdc());
hOn[h.region()-1][1].fill(h.tot());
hOn[h.region()-1][2].fill(h.order());
dcrb.fill(hOn[h.region()-1], h, hpost);
}
else {
hOff[h.region()-1][0].fill(h.tdc());
hOff[h.region()-1][1].fill(h.tot());
hOff[h.region()-1][2].fill(h.order());
dcrb.fill(hOff[h.region()-1], h, hpre);
}
}
}
for(int key : multiplicity.keySet()) {
int layer = tt.getIntValue("layer", Hit.getSector(key), Hit.getLayer(key),Hit.getComponent(key));
int layer = dcrb.tt.getIntValue("layer", Hit.getSector(key), Hit.getLayer(key),Hit.getComponent(key));
int r = (layer-1)/12;
// if(multiplicity.get(key)>16)
// System.out.println(key + " " + Hit.getSector(key) + " " +Hit.getLayer(key) + " " +Hit.getComponent(key));
Expand All @@ -278,34 +342,8 @@ else if(hits.get(0).tot()<50) {
}
}

int nrow = 3;
int ncol = 4;
TCanvas canvas1 = new TCanvas("ToT1", 1000, 800);
canvas1.divide(ncol, nrow);
for(int r=0; r<nrow; r++) {
canvas1.cd(r*ncol);
canvas1.draw(hMult[r]);
canvas1.getCanvas().getPad().getAxisY().setLog(true);
for(int j=0; j<3; j++) {
canvas1.cd(r*ncol+1+j);
canvas1.draw(hAll[r][j]);
canvas1.draw(hFst[r][j], "same");
canvas1.draw(hSnd[r][j], "same");
}
}
ncol = 7;
TCanvas canvas2 = new TCanvas("ToT2", 1200, 800);
canvas2.divide(ncol, nrow);
for(int r=0; r<nrow; r++) {
canvas2.cd(r*ncol);
canvas2.draw(hTrks[r]);
canvas2.getCanvas().getPad().getAxisY().setLog(true);
for(int j=0; j<3; j++) {
canvas2.cd(r*ncol+1+j);
canvas2.draw(hOn[r][j]);
canvas2.cd(r*ncol+4+j);
canvas2.draw(hOff[r][j]);
}
}
dcrb.plot("All Hits", hMult, hAll, hFst, hSnd);
dcrb.plot("Hits on track", hTrks, hOn);
dcrb.plot("Hits off track", hTrks, hOff);
}
}

0 comments on commit 3f3b46b

Please sign in to comment.