Skip to content

Commit f682cb5

Browse files
Switch to new DC::tot bank (#645)
* detect based on schema * remove broken methods * remove old decoder and associations * add DC::tot bank schema * remove unused class * remove unused class * remove unused class * change default ToT=-1, for old firmware * write DC::tot instead of DC::tdc * short data types * detect firmware type * simplify * debug * remove unused classes * move class * remove unused classes * remove unused analysis classes * remove unused classes * more gitignore * fix oops * restore (for test deltas) * restore original type * more gitignore * add new bank to schemas * swaps for DC::tot * bg merging can now handle multiple/different raw banks per detector, needed to handle DC::tdc and DC::tot * remove unused dependency --------- Co-authored-by: Raffaella De Vita <[email protected]>
1 parent d20dcae commit f682cb5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+304
-7775
lines changed

common-tools/clas-analysis/src/main/java/org/jlab/analysis/eventmerger/ADCTDCMerger.java

Lines changed: 111 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public List<DGTZ> readADCs(DetectorType detector,DataBank bank) {
8686
ADC adcData = new ADC(detector);
8787
adcData.readFromBank(bank, i);
8888

89-
if(!adcData.isGood()) adcData.remove();
89+
if(!adcData.isGood()) adcData.skip();
9090

9191
adcStore.add(adcData);
9292
}
@@ -105,110 +105,116 @@ public List<DGTZ> readADCs(DetectorType detector,DataBank bank) {
105105
*/
106106
public List<DGTZ> readTDCs(DetectorType detector, DataBank bank) {
107107
List<DGTZ> tdcStore = new ArrayList<>();
108-
108+
109109
if(bank!=null) {
110+
boolean tot = false;
111+
for(String column : bank.getColumnList()) {
112+
if(column.equals("ToT")) {
113+
tot = true;
114+
break;
115+
}
116+
}
110117
for (int i = 0; i < bank.rows(); i++) {
111118
TDC tdcData = new TDC(detector);
112119
tdcData.readFromBank(bank, i);
113-
114-
if(!tdcData.isGood()) tdcData.remove();
115-
120+
if(tot) {
121+
tdcData.readToT(bank, i);
122+
}
123+
124+
if(!tdcData.isGood()) tdcData.skip();
125+
116126
tdcStore.add(tdcData);
117127
}
118128
}
119129
return tdcStore;
120130
}
121131

132+
122133
/**
123134
* Merge ADC banks for data (signal) and background events for the selected detector and layers
124135
* In case of multiple hit on same detector element, only first hit in time is kept
125136
* unless the double-hit suppression flag, suppressDoubleHits, is set to false
126137
*
127138
* @param detector
128139
* @param layers
140+
* @param banks
129141
* @return
130142
*/
131-
public DataBank mergeADCs(DetectorType detector, List<Integer> layers){
143+
public DataBank mergeADCs(DetectorType detector, List<Integer> layers, List<String> banks){
144+
145+
String bank = banks.get(0);
146+
147+
List<DGTZ> ADCs = new ArrayList<>();
148+
ADCs.addAll(readADCs(detector,event.getBank(bank)));
132149

133150
List<DataEvent> bgs = bgEvents[0];
134-
135-
String ADCString = detector.getName()+"::adc";
136-
for(DataEvent bg : bgs) {
137-
if(!bg.hasBank(ADCString)) {
138-
return event.getBank(ADCString);
139-
}
140-
}
141-
142151
List<DGTZ> bgADCs = new ArrayList<>();
143152
for(DataEvent bg : bgs) {
144-
for(DGTZ dgtz : readADCs(detector,bg.getBank(ADCString))) {
153+
if(!bg.hasBank(bank))
154+
continue;
155+
for(DGTZ dgtz : readADCs(detector,bg.getBank(bank))) {
145156
if(layers==null || layers.contains(dgtz.getLayer()))
146157
bgADCs.add((ADC) dgtz);
147158
}
148159
}
149-
List<DGTZ> ADCs = readADCs(detector,event.getBank(ADCString));
150-
151-
DataBank bank = this.writeToBank(event, ADCString, this.merge(ADCs, bgADCs));
152-
153-
return bank;
154-
160+
if(bgADCs.isEmpty())
161+
return this.writeToBank(detector, ADCs, bank);
162+
else
163+
return this.writeToBank(detector, this.merge(ADCs, bgADCs), bank);
155164
}
156165

157166
/**
158167
* Merge TDC banks for data (signal) and background events for the selected detector and layers
159168
* Use two background events shifted in time to extend the time range of the backgrounds
160-
* Multiple hits on the same components are kept if time distance exceed the holdoff time
169+
* Multiple hits on the same components are kept if the time distance exceeds the holdoff time
161170
*
162171
* @param detector
163172
* @param layers
173+
* @param banks
164174
* @return
165175
*/
166-
public DataBank mergeTDCs(DetectorType detector, List<Integer> layers){
167-
168-
List<DataEvent> bgs = bgEvents[0];
169-
170-
String TDCString = detector+"::tdc";
176+
public DataBank mergeTDCs(DetectorType detector, List<Integer> layers, List<String> banks){
171177

172-
// if the primary background event has no detector bank then keep the event bank
173-
for(DataEvent bg : bgs) {
174-
if(!bg.hasBank(TDCString)) {
175-
return event.getBank(TDCString);
178+
// get physics event hits
179+
List<DGTZ> TDCs = new ArrayList<>();
180+
for(String bank : banks) {
181+
if(event.hasBank(bank)) {
182+
TDCs.addAll(readTDCs(detector, event.getBank(bank)));
176183
}
177184
}
178-
// if the primary background events has the detector bank, then proceed with merging
179-
// get background hits using multiple events dependending on detector
180-
int bgSize = constants.getInt(detector, EventMergerEnum.MERGE_SIZE);
181-
if(!event.hasBank(TDCString)) bgSize = 1;
185+
186+
// get background hits using multiple events dependending on detector
187+
int bgSize = constants.getInt(detector, EventMergerEnum.MERGE_SIZE);
188+
if(TDCs.isEmpty()) bgSize = 1;
182189
// collect bg hits
183190
List<DGTZ> bgTDCs = new ArrayList<>();
184191
for(int i=0; i<Math.min(bgSize, bgEvents.length); i++) {
185192
for(DataEvent bg : bgEvents[i]) {
186-
if(bg.hasBank(TDCString)) {
187-
// get TDCs, correct them for jitter and shift them in time
188-
int jitter = this.getTDCJitter(detector, bg);
189-
for(DGTZ dgtz : readTDCs(detector, bg.getBank(TDCString))) {
190-
TDC tdc = (TDC) dgtz;
191-
int layer = tdc.getLayer();
192-
int comp = tdc.getComponent();
193-
if(layers==null || layers.contains(layer)) {
194-
int offset = constants.getInt(run, detector, EventMergerEnum.READOUT_WINDOW, 0, layer, comp);
195-
tdc.shift(jitter-i*offset);
196-
bgTDCs.add(tdc);
197-
}
193+
for(String bank : banks) {
194+
if(bg.hasBank(bank)) {
195+
// get TDCs, correct them for jitter and shift them in time
196+
int jitter = this.getTDCJitter(detector, bg);
197+
for(DGTZ dgtz : readTDCs(detector, bg.getBank(bank))) {
198+
TDC tdc = (TDC) dgtz;
199+
int layer = tdc.getLayer();
200+
int comp = tdc.getComponent();
201+
if(layers==null || layers.contains(layer)) {
202+
int offset = constants.getInt(run, detector, EventMergerEnum.READOUT_WINDOW, 0, layer, comp);
203+
tdc.shift(jitter-i*offset);
204+
bgTDCs.add(tdc);
205+
}
206+
}
198207
}
199208
}
200209
}
201210
}
202-
203-
// get physics event hits hits
204-
List<DGTZ> TDCs = readTDCs(detector, event.getBank(TDCString));
205-
206-
// merge physics and bg hit
207-
List<DGTZ> mergedTDCs = this.merge(TDCs, bgTDCs);
208-
209-
// create output bank
210-
return this.writeToBank(event, TDCString, mergedTDCs);
211-
211+
// if no backkground hits were found, return signal event banks
212+
if(bgTDCs.isEmpty())
213+
return this.writeToBank(detector, TDCs, banks.get(0));
214+
else {
215+
// merge physics and bg hit
216+
return this.writeToBank(detector, this.merge(TDCs, bgTDCs), banks.get(0));
217+
}
212218
}
213219

214220
/**
@@ -230,7 +236,7 @@ public final List<DGTZ> merge(List<DGTZ> signal, List<DGTZ> background) {
230236

231237
for(int i = 0; i < all.size(); i++) {
232238
DGTZ dgtz = all.get(i);
233-
if(dgtz.isRemoved()) {
239+
if(dgtz.isRemoved() || !dgtz.isGood()) {
234240
continue;
235241
}
236242
else if(merged.isEmpty()) {
@@ -269,21 +275,27 @@ else if(merged.isEmpty()) {
269275

270276
/**
271277
* Write list of hits to bank based on hit status
272-
* @param event hipo event
273-
* @param name bank name
278+
* @param detector detector type
274279
* @param dgtzs list of hits
280+
* @param name bank name
275281
* @return hipo bank
276282
*/
277-
public final DataBank writeToBank(DataEvent event, String name, List<DGTZ> dgtzs) {
283+
public final DataBank writeToBank(DetectorType detector, List<DGTZ> dgtzs, String name) {
278284
int size = 0;
279285
for(DGTZ dgtz : dgtzs) {
280286
if(dgtz.status()) size++;
281287
}
288+
if(size==0) return null;
289+
290+
boolean tot = name.endsWith("tot");
282291
DataBank bank = event.createBank(name, size);
283292
int row = 0;
284293
for (DGTZ dgtz : dgtzs) {
285-
if(dgtz.status())
286-
dgtz.addToBank(bank, row++);
294+
if(dgtz.status()) {
295+
dgtz.addToBank(bank, row);
296+
if(tot) ((TDC) dgtz).addToT(bank, row);
297+
row++;
298+
}
287299
}
288300
return bank;
289301
}
@@ -350,9 +362,9 @@ public int getAmplitude() {
350362
@Override
351363
public boolean isGood() {
352364
if(this.getType()==DetectorType.BST || this.getType()==DetectorType.BMT)
353-
return true;
365+
return super.isGood();
354366
else
355-
return this.adc>0;
367+
return super.isGood() && this.adc>0;
356368
}
357369

358370
@Override
@@ -411,7 +423,8 @@ public void show() {
411423

412424
public class TDC extends DGTZ {
413425

414-
private int tdc;
426+
private int tdc = 0;
427+
private int tot = -1;
415428

416429
public TDC(DetectorType detector) {
417430
super(detector);
@@ -424,14 +437,14 @@ public int getTdc() {
424437
public void setTdc(int tdc) {
425438
this.tdc = tdc;
426439
}
427-
440+
428441
public void shift(int offset) {
429442
this.tdc += offset;
430443
}
431444

432445
@Override
433446
public boolean isGood() {
434-
return this.tdc>0;
447+
return super.isGood() && this.tdc>0;
435448
}
436449

437450
@Override
@@ -440,12 +453,19 @@ public void addToBank(DataBank bank, int row) {
440453
bank.setInt("TDC", row, tdc);
441454
}
442455

456+
public void addToT(DataBank bank, int row) {
457+
bank.setShort("ToT", row, (short) tot);
458+
}
459+
443460
@Override
444461
public void readFromBank(DataBank bank, int row) {
445462
super.readFromBank(bank, row);
446463
this.tdc = bank.getInt("TDC", row);
447-
}
464+
}
448465

466+
public void readToT(DataBank bank, int row) {
467+
this.tot = bank.getShort("ToT", row);
468+
}
449469

450470
@Override
451471
public boolean pilesUp(DGTZ other){
@@ -493,7 +513,8 @@ public class DGTZ extends DetectorDescriptor {
493513

494514
private boolean background = false;
495515
private boolean removed = false;
496-
516+
private boolean skip = false;
517+
497518
public DGTZ(DetectorType detector) {
498519
super(detector);
499520
}
@@ -504,23 +525,33 @@ public DGTZ(DetectorType detector, byte sector, byte layer, short component, byt
504525
this.setOrderAndType(order);
505526
}
506527

507-
public void setOrderAndType(int order) {
528+
public final void setOrderAndType(int order) {
508529
OrderType type = OrderType.getType(order);
509530
this.setOrder(order - type.getTypeId());
510-
if(type==OrderType.BGREMOVED)
531+
if(type==OrderType.DECREMOVED)
532+
this.skip = true;
533+
else if(type==OrderType.DECREMOVED_BG) {
534+
this.skip = true;
535+
this.background = true;
536+
}
537+
else if(type==OrderType.BGREMOVED)
511538
this.removed = true;
512-
if(type==OrderType.BGADDED_NOMINAL)
539+
else if(type==OrderType.BGADDED_NOMINAL)
513540
this.background = true;
514-
if(type==OrderType.BGREMOVED_BG) {
541+
else if(type==OrderType.BGREMOVED_BG) {
515542
this.removed = true;
516543
this.background = true;
517544
}
518545
}
519546

520547
public boolean isGood() {
521-
return true;
548+
return !skip;
522549
}
523550

551+
public void skip() {
552+
this.skip = true;
553+
}
554+
524555
public boolean isRemoved() {
525556
return removed;
526557
}
@@ -550,7 +581,11 @@ public boolean status() {
550581
}
551582

552583
public RawBank.OrderType getOrderType() {
553-
if(this.isBackground() && this.isRemoved())
584+
if(this.isBackground() && !this.isGood())
585+
return OrderType.DECREMOVED_BG;
586+
else if(!this.isGood())
587+
return OrderType.DECREMOVED;
588+
else if(this.isBackground() && this.isRemoved())
554589
return OrderType.BGREMOVED_BG;
555590
else if(this.isBackground())
556591
return OrderType.BGADDED_NOMINAL;

0 commit comments

Comments
 (0)