Author: [log in to unmask] Date: Tue Oct 6 09:13:30 2015 New Revision: 3764 Log: Add stuff to meta data and clean up. Modified: java/trunk/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java java/trunk/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java java/trunk/evio/src/main/java/org/hps/evio/SvtEventFlagger.java java/trunk/evio/src/main/java/org/hps/evio/SvtEvioReader.java java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java Modified: java/trunk/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/AbstractSvtEvioReader.java Tue Oct 6 09:13:30 2015 @@ -241,9 +241,6 @@ headers.add(headerData); - // Create array for the apv headers of known length - //int multisampleHeaderTails[] = new int[sampleCount/4]; - // Store the multisample headers // Note that the length is not known but can't be longer than the multisample count // in other words the data can be only header multisamples for example. @@ -265,14 +262,8 @@ logger.fine("this is a data multisample for apv " + SvtEvioUtils.getApvFromMultiSample(samples) + " ch " + SvtEvioUtils.getChannelNumber(samples)); - // Extract tail word in multisample header - //this.extractMultisampleHeaderTail(samples, samplesN/4, multisampleHeaderTails); - // Extract data words from multisample header multisampleHeaderIndex += this.extractMultisampleHeaderData(samples, multisampleHeaderIndex, multisampleHeaderData); - - //if( SvtEvioUtils.isMultisampleHeader(samples) ) - // multisampleHeaders[samplesN/4] = SvtEvioUtils.getMultisampleTailWord(samples); // If a set of samples is associated with an APV header or tail, skip it if (!this.isValidSampleSet(samples)) continue; @@ -283,9 +274,7 @@ // add multisample header tails to header data object this.setMultiSampleHeaders(headerData, multisampleHeaderIndex, multisampleHeaderData); - //headerData.setMultisampleHeaders(multisampleHeaders); - - //this.checkSvtHeaders(headers); + } } @@ -297,12 +286,10 @@ lcsimEvent.put(SVT_HIT_COLLECTION_NAME, rawHits, RawTrackerHit.class, flag, READOUT_NAME); - // Check that the SVT header data is valid - this.checkSvtHeaders(headers); - - // Add SVT header data to the event - this.addSvtHeadersToEvents(headers, lcsimEvent); - + // Process SVT headers + this.processSvtHeaders(headers, lcsimEvent); + + return true; @@ -310,28 +297,50 @@ - protected abstract void checkSvtHeaders(List<SvtHeaderDataInfo> headers) throws SvtEvioHeaderException; - protected abstract int extractMultisampleHeaderData(int[] samples, int i, int[] multisampleHeaderData); - protected abstract void setMultiSampleHeaders(SvtHeaderDataInfo headerData, int max, int[] multisampleHeaders); - protected abstract void extractMultisampleHeaderTail(int[] multisample, int index, int[] multisampleHeaders); - protected abstract void checkSvtSampleCount(int sampleCount, SvtHeaderDataInfo headerData) throws SvtEvioHeaderException; - - /** - * Check if the SVT headers are as expected. - * @param headers - list of headers to check - */ - protected abstract void checkSvtHeaderData(SvtHeaderDataInfo header) throws SvtEvioHeaderException; - + protected abstract void processSvtHeaders(List<SvtHeaderDataInfo> headers, EventHeader lcsimEvent) throws SvtEvioHeaderException; + /** * Extract the header information and store it in a {@link SvtHeaderDataInfo} object. * @param num - bank num (ROC id) * @param data - SVT data block. * @return the {@link SvtHeaderDataInfo}. */ - protected abstract SvtHeaderDataInfo extractSvtHeader(int num, int[] data); - - - protected abstract void addSvtHeadersToEvents(List<SvtHeaderDataInfo> headers, EventHeader lcsimEvent); + protected SvtHeaderDataInfo extractSvtHeader(int num, int[] data) { + // Extract the header information + int svtHeader = SvtEvioUtils.getSvtHeader(data); + // Extract the tail information + int svtTail = SvtEvioUtils.getSvtTail(data); + return new SvtHeaderDataInfo(num, svtHeader, svtTail); + + } + + protected int extractMultisampleHeaderData(int[] samples, int index, int[] multisampleHeaderData) { + logger.finest("extractMultisampleHeaderData: index " + index); + if( SvtEvioUtils.isMultisampleHeader(samples) && !SvtEvioUtils.isMultisampleTail(samples) ) { + logger.finest("extractMultisampleHeaderData: this is a multisample header so add the words to index " + index); + System.arraycopy(samples, 0, multisampleHeaderData, index, samples.length); + return samples.length; + } else { + logger.finest("extractMultisampleHeaderData: this is a NOT multisample header "); + return 0; + } + } + + protected void checkSvtSampleCount(int sampleCount, SvtHeaderDataInfo headerData) throws SvtEvioHeaderException { + if( sampleCount != SvtEvioUtils.getSvtTailMultisampleCount(headerData.getTail())*4) + throw new SvtEvioHeaderException("multisample count is not consistent with bank size."); + } + + protected void setMultiSampleHeaders(SvtHeaderDataInfo headerData, int n, int[] multisampleHeaders) { + //copy out the headers that are non-zero + int[] vals = new int[n]; + System.arraycopy(multisampleHeaders, 0, vals, 0, n); + //logger.info("setMultiSampleHeaders: adding " + vals.length + " multisample headers"); + headerData.setMultisampleHeaders(vals); + } + + + /** * Make a {@link RawTrackerHit} from a set of samples. Modified: java/trunk/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/AugmentedSvtEvioReader.java Tue Oct 6 09:13:30 2015 @@ -25,19 +25,6 @@ } - - - @Override - protected SvtHeaderDataInfo extractSvtHeader(int num, int[] data) { - // Extract the header information - int svtHeader = SvtEvioUtils.getSvtHeader(data); - // Extract the tail information - int svtTail = SvtEvioUtils.getSvtTail(data); - return new SvtHeaderDataInfo(num, svtHeader, svtTail); - - } - - @Override protected void checkSvtHeaderData(SvtHeaderDataInfo header) throws SvtEvioHeaderException { int tail = header.getTail(); if(logger.getLevel().intValue() >= Level.FINE.intValue()) { @@ -57,9 +44,9 @@ } logger.fine("checkSvtHeaderData passed all I guess"); } - - @Override - protected void addSvtHeadersToEvents(List<SvtHeaderDataInfo> headers, EventHeader lcsimEvent) { + + + protected void addSvtHeadersToEventEventCollection(List<SvtHeaderDataInfo> headers, EventHeader lcsimEvent) { // Turn on 64-bit cell ID. int flag = LCIOUtil.bitSet(0, 31, true); // Add the collection of raw hits to the LCSim event @@ -67,43 +54,7 @@ } - @Override - protected void checkSvtSampleCount(int sampleCount, SvtHeaderDataInfo headerData) throws SvtEvioHeaderException { - if( sampleCount != SvtEvioUtils.getSvtTailMultisampleCount(headerData.getTail())*4) - throw new SvtEvioHeaderException("multisample count is not consistent with bank size."); - } - - @Override - protected void setMultiSampleHeaders(SvtHeaderDataInfo headerData, int n, int[] multisampleHeaders) { - //copy out the headers that are non-zero - int[] vals = new int[n]; - System.arraycopy(multisampleHeaders, 0, vals, 0, n); - //logger.info("setMultiSampleHeaders: adding " + vals.length + " multisample headers"); - headerData.setMultisampleHeaders(vals); - } - - @Override - protected void extractMultisampleHeaderTail(int[] multisample, int index, int[] multisampleHeaders) { - //logger.fine("extractMultisampleHeaderTail: index " + index); - if( SvtEvioUtils.isMultisampleHeader(multisample) && !SvtEvioUtils.isMultisampleTail(multisample)) - multisampleHeaders[index] = SvtEvioUtils.getMultisampleTailWord(multisample); - //else - // logger.fine("extractMultisampleHeaderTail: this is a NOT multisample header at index " + index); - - } - - @Override - protected int extractMultisampleHeaderData(int[] samples, int index, int[] multisampleHeaderData) { - logger.finest("extractMultisampleHeaderData: index " + index); - if( SvtEvioUtils.isMultisampleHeader(samples) && !SvtEvioUtils.isMultisampleTail(samples) ) { - logger.finest("extractMultisampleHeaderData: this is a multisample header so add the words to index " + index); - System.arraycopy(samples, 0, multisampleHeaderData, index, samples.length); - return samples.length; - } else { - logger.finest("extractMultisampleHeaderData: this is a NOT multisample header "); - return 0; - } - } + private String getMultisampleDebugString(SvtHeaderDataInfo headerDataInfo, int multisampleHeaderTailWord) { String s = " header" + headerDataInfo.toString() + @@ -126,7 +77,11 @@ - @Override + /** + * Check the integrity of the SVT header information. + * @param headers - headers to check + * @throws SvtEvioHeaderException + */ protected void checkSvtHeaders(List<SvtHeaderDataInfo> headers) throws SvtEvioHeaderException { logger.fine("check " + headers.size() + " headers "); int[] bufferAddresses = new int[6]; @@ -251,5 +206,35 @@ } } + + @Override + protected void processSvtHeaders(List<SvtHeaderDataInfo> headers, EventHeader lcsimEvent) throws SvtEvioHeaderException { + // Check that the SVT header data is valid + // Catch the exception locally, add stuff to the event, then throw it again + // and handle it outside + try { + + this.checkSvtHeaders(headers); + + } catch(SvtEvioHeaderException e) { + + // add skimming flag + SvtEventFlagger.voidAddHeaderCheckResultToMetaData(false, lcsimEvent); + + // add stuff to the event meta data + SvtEventFlagger.AddHeaderInfoToMetaData(headers, lcsimEvent); + + // then throw the exception again to be caught in the event builder + throw new SvtEvioHeaderException(e); + + } + + // add skimming flag - the header is OK since I would never get here otherwise + SvtEventFlagger.voidAddHeaderCheckResultToMetaData(true, lcsimEvent); + + // Add SVT header data to the event + //this.addSvtHeadersToEventEventCollection(headers, lcsimEvent); + + } } Modified: java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/LCSimEngRunEventBuilder.java Tue Oct 6 09:13:30 2015 @@ -146,10 +146,6 @@ LOGGER.log(Level.SEVERE, "Error making ECal hits.", e); } - //if(lcsimEvent.getEventNumber() >= 92296590){ - // LOGGER.info("lcsimEvent.getEventNumber() " + lcsimEvent.getEventNumber() + " set log level higher"); - // svtReader.logger.setLevel(Level.FINE); - //} // Make SVT RawTrackerHits. try { svtReader.makeHits(evioEvent, lcsimEvent); @@ -179,7 +175,7 @@ } catch (final SvtEvioReaderException e) { LOGGER.log(Level.SEVERE, "Error making SVT hits for run " + lcsimEvent.getRunNumber() + " event " + lcsimEvent.getEventNumber() + ". Don't stop!", e); } catch (final Exception e) { - LOGGER.log(Level.SEVERE, "General error making SVT hits. I should handle this exception in some way", e); + LOGGER.log(Level.SEVERE, "General error making SVT hits.", e); } // Write the current EPICS data into this event. Modified: java/trunk/evio/src/main/java/org/hps/evio/SvtEventFlagger.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/SvtEventFlagger.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/SvtEventFlagger.java Tue Oct 6 09:13:30 2015 @@ -11,6 +11,7 @@ import org.hps.conditions.svt.SvtAlignmentConstant; import org.hps.conditions.svt.SvtBiasConstant; import org.hps.conditions.svt.SvtMotorPosition; +import org.hps.record.svt.SvtHeaderDataInfo; import org.hps.record.triggerbank.AbstractIntData; import org.hps.record.triggerbank.HeadBankData; import org.lcsim.conditions.ConditionsManager; @@ -153,4 +154,33 @@ } return true; } + + public static void voidAddHeaderCheckResultToMetaData(boolean ok, EventHeader lcsimEvent) { + //System.out.println("adding svt header check "); + lcsimEvent.getIntegerParameters().put("svt_event_header_good", new int[]{ ok ? 1 : 0}); + //if(lcsimEvent.hasItem("svt_event_header_good")) + // System.out.println("event header has the svt header check "); + //else + // System.out.println("event header doesn't have the svt header check "); + } + + public static void AddHeaderInfoToMetaData(List<SvtHeaderDataInfo> headers, EventHeader lcsimEvent) { + int[] svtHeaders = new int[headers.size()]; + int[] svtTails = new int[headers.size()]; + for(int iSvtHeader=0; iSvtHeader < headers.size();++iSvtHeader) { + svtHeaders[iSvtHeader] = headers.get(iSvtHeader).getHeader(); + svtTails[iSvtHeader] = headers.get(iSvtHeader).getTail(); + int nMS = headers.get(iSvtHeader).getNumberOfMultisampleHeaders(); + int[] multisampleHeadersArray = new int[4*nMS]; + for(int iMS = 0; iMS < nMS; ++iMS ) { + int[] multisampleHeader = headers.get(iSvtHeader).getMultisampleHeader(iMS); + System.arraycopy(multisampleHeader, 0, multisampleHeadersArray, iMS*4, multisampleHeader.length); + } + lcsimEvent.getIntegerParameters().put("svt_multisample_headers_roc" + headers.get(iSvtHeader).getNum(), multisampleHeadersArray); + } + lcsimEvent.getIntegerParameters().put("svt_event_headers", svtHeaders); + lcsimEvent.getIntegerParameters().put("svt_event_tails", svtTails); + + + } } Modified: java/trunk/evio/src/main/java/org/hps/evio/SvtEvioReader.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/SvtEvioReader.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/SvtEvioReader.java Tue Oct 6 09:13:30 2015 @@ -208,53 +208,13 @@ return makeHit(data, SvtEvioUtils.getPhysicalChannelNumber(data)); } - @Override - protected void addSvtHeadersToEvents(List<SvtHeaderDataInfo> headers, - EventHeader lcsimEvent) { - - } - - @Override - protected void checkSvtHeaderData(SvtHeaderDataInfo header) + + @Override + protected void processSvtHeaders(List<SvtHeaderDataInfo> headers, EventHeader lcsimEvent) throws SvtEvioHeaderException { - } - - @Override - protected SvtHeaderDataInfo extractSvtHeader(int num, int[] data) { - return null; - } - - @Override - protected void checkSvtSampleCount(int sampleCount, - SvtHeaderDataInfo headerData) throws SvtEvioHeaderException { - } - - @Override - protected void setMultiSampleHeaders(SvtHeaderDataInfo headerData, - int max, int[] multisampleHeaders) { // TODO Auto-generated method stub } - - @Override - protected void extractMultisampleHeaderTail(int[] multisample, int index, - int[] multisampleHeaders) { - // TODO Auto-generated method stub - - } - - @Override - protected int extractMultisampleHeaderData(int[] samples, int i, - int[] multisampleHeaderData) { - return 0; - - } - - @Override - protected void checkSvtHeaders(List<SvtHeaderDataInfo> headers) throws SvtEvioHeaderException { - // TODO Auto-generated method stub - - } } Modified: java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java ============================================================================= --- java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java (original) +++ java/trunk/evio/src/main/java/org/hps/evio/TestRunSvtEvioReader.java Tue Oct 6 09:13:30 2015 @@ -165,63 +165,15 @@ return makeHit(data, SvtEvioUtils.getTestRunChannelNumber(data)); } + @Override - protected SvtHeaderDataInfo extractSvtHeader(int num, int[] data) { - // TODO Auto-generated method stub - return null; - } - - @Override - protected void checkSvtHeaderData(SvtHeaderDataInfo header) + protected void processSvtHeaders(List<SvtHeaderDataInfo> headers, EventHeader lcsimEvent) throws SvtEvioHeaderException { // TODO Auto-generated method stub } - @Override - protected void addSvtHeadersToEvents(List<SvtHeaderDataInfo> headers, - EventHeader lcsimEvent) { - // TODO Auto-generated method stub - - } - - @Override - protected void checkSvtSampleCount(int sampleCount, - SvtHeaderDataInfo headerData) throws SvtEvioHeaderException { - // TODO Auto-generated method stub - - } - - @Override - protected void setMultiSampleHeaders(SvtHeaderDataInfo headerData, - int max, int[] multisampleHeaders) { - // TODO Auto-generated method stub - - } - - @Override - protected void extractMultisampleHeaderTail(int[] multisample, int index, - int[] multisampleHeaders) { - // TODO Auto-generated method stub - - } - - @Override - protected int extractMultisampleHeaderData(int[] samples, int i, - int[] multisampleHeaderData) { - return 0; - - } - - @Override - protected void checkSvtHeaders(List<SvtHeaderDataInfo> headers) { - // TODO Auto-generated method stub - - } - - - }