Skip to content

Commit

Permalink
added functionality to merge multiple bg events
Browse files Browse the repository at this point in the history
  • Loading branch information
raffaelladevita authored and baltzell committed Dec 31, 2024
1 parent f155c51 commit 86dc443
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ public class ADCTDCMerger {
private OrderType[] selectedOrders = {OrderType.NOMINAL, OrderType.BGADDED_NOMINAL, OrderType.BGREMOVED};
private EventMergerConstants constants;

private DataEvent event;
private List<DataEvent> bgEvents;
private DataEvent event;
private List<DataEvent[]> bgEvents;
private int run;

/**
Expand All @@ -39,13 +39,13 @@ public class ADCTDCMerger {
* @param signal physics events
* @param bgs background events
*/
public ADCTDCMerger(EventMergerConstants constants, DataEvent signal, DataEvent... bgs) {
public ADCTDCMerger(EventMergerConstants constants, DataEvent signal, DataEvent[]... bgs) {
this.constants = constants;
this.event = signal;
this.bgEvents = new ArrayList<>();
this.bgEvents.addAll(Arrays.asList(bgs));
if(!bgEvents.isEmpty() && bgEvents.get(0).hasBank("RUN::config"))
run = bgEvents.get(0).getBank("RUN::config").getInt("run", 0);
if(!bgEvents.isEmpty() && bgEvents.get(0)[0].hasBank("RUN::config"))
run = bgEvents.get(0)[0].getBank("RUN::config").getInt("run", 0);
}

/**
Expand Down Expand Up @@ -131,20 +131,25 @@ public List<DGTZ> readTDCs(DetectorType detector, DataBank bank) {
*/
public DataBank mergeADCs(DetectorType detector){

DataEvent bg = bgEvents.get(0);
DataEvent[] bgs = bgEvents.get(0);

String ADCString = detector.getName()+"::adc";
if(!bg.hasBank(ADCString)) {
return event.getBank(ADCString);
for(DataEvent bg : bgs) {
if(!bg.hasBank(ADCString)) {
return event.getBank(ADCString);
}
}
else {
List<DGTZ> bgADCs = readADCs(detector,bg.getBank(ADCString));
List<DGTZ> ADCs = readADCs(detector,event.getBank(ADCString));

DataBank bank = this.writeToBank(event, ADCString, this.merge(ADCs, bgADCs));

return bank;
List<DGTZ> bgADCs = new ArrayList<>();
for(DataEvent bg : bgs) {
bgADCs.addAll(readADCs(detector,bg.getBank(ADCString)));
}
List<DGTZ> ADCs = readADCs(detector,event.getBank(ADCString));

DataBank bank = this.writeToBank(event, ADCString, this.merge(ADCs, bgADCs));

return bank;

}

/**
Expand All @@ -157,21 +162,24 @@ public DataBank mergeADCs(DetectorType detector){
*/
public DataBank mergeTDCs(DetectorType detector){

DataEvent[] bgs = bgEvents.get(0);

String TDCString = detector+"::tdc";

// if the primary background event has no detector bank then keep the event bank
if(!bgEvents.get(0).hasBank(TDCString)) {
return event.getBank(TDCString);
}
// if the primary background events has the detector bank, then proceed with merging
else {
// get background hits using multiple events dependending on detector
int bgSize = constants.getInt(detector, EventMergerEnum.MERGE_SIZE);
if(!event.hasBank(TDCString)) bgSize = 1;
// collect bg hits
List<DGTZ> bgTDCs = new ArrayList<>();
for(int i=0; i<Math.min(bgSize, bgEvents.size()); i++) {
DataEvent bg = bgEvents.get(i);
for(DataEvent bg : bgs) {
if(!bg.hasBank(TDCString)) {
return event.getBank(TDCString);
}
}
// if the primary background events has the detector bank, then proceed with merging
// get background hits using multiple events dependending on detector
int bgSize = constants.getInt(detector, EventMergerEnum.MERGE_SIZE);
if(!event.hasBank(TDCString)) bgSize = 1;
// collect bg hits
List<DGTZ> bgTDCs = new ArrayList<>();
for(int i=0; i<Math.min(bgSize, bgEvents.size()); i++) {
for(DataEvent bg : bgEvents.get(i)) {
if(bg.hasBank(TDCString)) {
// get TDCs, correct them for jitter and shift them in time
int jitter = this.getTDCJitter(detector, bg);
Expand All @@ -185,16 +193,17 @@ public DataBank mergeTDCs(DetectorType detector){
}
}
}

// get physics event hits hits
List<DGTZ> TDCs = readTDCs(detector, event.getBank(TDCString));

// merge physics and bg hit
List<DGTZ> mergedTDCs = this.merge(TDCs, bgTDCs);

// create output bank
return this.writeToBank(event, TDCString, mergedTDCs);
}

// get physics event hits hits
List<DGTZ> TDCs = readTDCs(detector, event.getBank(TDCString));

// merge physics and bg hit
List<DGTZ> mergedTDCs = this.merge(TDCs, bgTDCs);

// create output bank
return this.writeToBank(event, TDCString, mergedTDCs);

}

/**
Expand Down Expand Up @@ -497,6 +506,10 @@ public void setOrderAndType(int order) {
this.removed = true;
if(type==OrderType.BGADDED_NOMINAL)
this.background = true;
if(type==OrderType.BGREMOVED_BG) {
this.removed = true;
this.background = true;
}
}

public boolean isGood() {
Expand All @@ -522,8 +535,6 @@ public void markAsBackground() {
public boolean status() {
if(!this.isInTime())
return false;
else if(this.isBackground() && this.isRemoved())
return false;
else {
for(OrderType o : selectedOrders) {
if(this.getOrderType()==o)
Expand All @@ -534,7 +545,9 @@ else if(this.isBackground() && this.isRemoved())
}

public RawBank.OrderType getOrderType() {
if(this.isBackground())
if(this.isBackground() && this.isRemoved())
return OrderType.BGREMOVED_BG;
else if(this.isBackground())
return OrderType.BGADDED_NOMINAL;
else if(this.isRemoved())
return OrderType.BGREMOVED;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,16 @@ private boolean openNextFile() {
return true;
}

synchronized public DataEvent getBackgroundEvent() {
if (!bgReader.hasEvent()) {
if(!openNextFile())
return null;
synchronized public DataEvent[] getBackgroundEvents(int n) {
DataEvent[] events = new DataEvent[n];
for(int i=0; i<n; i++) {
if (!bgReader.hasEvent()) {
if(!openNextFile())
return null;
}
events[i] = bgReader.getNextEvent();
}
return bgReader.getNextEvent();
return events;
}

private void printConfiguration() {
Expand All @@ -144,11 +148,15 @@ private void printOrders() {
System.out.println("\n");
}

private void mergeEvents(DataEvent event, DataEvent bg1, DataEvent bg2) {
private void mergeEvents(DataEvent event, DataEvent[] bg1, DataEvent[] bg2) {

if(!event.hasBank("RUN::config") || !bg1.hasBank("RUN::config") || !bg2.hasBank("RUN::config")) {
if(!event.hasBank("RUN::config"))
return;
}
if(bg1.length != bg2.length)
return;
for(int i=0; i<bg1.length; i++)
if(!bg1[i].hasBank("RUN::config") || bg1[i].hasBank("RUN::config"))
return;

if(event.hasBank("DC::doca")) event.removeBank("DC::doca");

Expand Down Expand Up @@ -183,11 +191,13 @@ private void mergeEvents(DataEvent event, DataEvent bg1, DataEvent bg2) {
* Append merged banks to hipo event
*
* @param event
* @param nBgEvents
* @return
*/
public boolean mergeEvents(DataEvent event) {
public boolean mergeEvents(DataEvent event, int nBgEvents) {

DataEvent eventBg1 = this.getBackgroundEvent();
DataEvent eventBg2 = this.getBackgroundEvent();
DataEvent[] eventBg1 = this.getBackgroundEvents(nBgEvents);
DataEvent[] eventBg2 = this.getBackgroundEvents(nBgEvents);

if(eventBg1==null || eventBg2==null) return false;

Expand All @@ -208,7 +218,8 @@ public static void main(String[] args) {
parser.addOption("-r" ,"1", "reuse background events: 0-false, 1-true");
parser.addOption("-s" ,"1", "suppress double TDC hits on the same component, 0-no suppression, 1-suppression");
parser.addOption("-l" ,"1", "preserve initial hit order (for compatibility with truth matching, 0-false, 1-true");
parser.addOption("-t" ,"NOMINAL,BGADDED_NOMINAL,BGREMOVED", "list of hit OrderTypes to be saved");
parser.addOption("-t" ,"NOMINAL,BGADDED_NOMINAL,BGREMOVED,BGREMOVED_BG", "list of hit OrderTypes to be saved");
parser.addOption("-x" ,"1", "background scale factor");
parser.parse(args);

if(parser.hasOption("-i") && parser.hasOption("-o")){
Expand All @@ -221,6 +232,7 @@ public static void main(String[] args) {
String detectors = parser.getOption("-d").stringValue();
String ordertypes = parser.getOption("-t").stringValue();
boolean doubleHits = (parser.getOption("-s").intValue()==1);
int nBG = parser.getOption("-x").intValue();
boolean reuseBG = (parser.getOption("-r").intValue()==1);
boolean hitOrder = (parser.getOption("-l").intValue()==1);

Expand Down Expand Up @@ -248,7 +260,7 @@ public static void main(String[] args) {
//System.out.println("************************************************************* ");
DataEvent eventData = readerData.getNextEvent();

if(merger.mergeEvents(eventData))
if(merger.mergeEvents(eventData, nBG))
writer.writeEvent(eventData);
else
maxEvents = counter;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public static enum OrderType {
NOMINAL ( 0), // normal hits retained by denoising level-0
BGADDED_NOMINAL ( 10), // hits added by background merging and retained by level-0
BGREMOVED ( 20), // hits removed during background merging
RESERVED ( 30), // reserved for later use
BGREMOVED_BG ( 30), // background hits removed by background merging
NOISE1 ( 40), // normal hits retained by level-1 denoising
NOISE2 ( 50), // normal hits retained by level-2 denoising
NOISE3 ( 60), // normal hits retained by level-3 denoising
Expand Down

0 comments on commit 86dc443

Please sign in to comment.