Author: [log in to unmask] Date: Fri Oct 2 16:25:07 2015 New Revision: 3755 Log: yeah ok. runtime exc gone 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 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 Fri Oct 2 16:25:07 2015 @@ -41,8 +41,9 @@ // Initialize the logger - protected static Logger logger = LogUtil.create(AbstractSvtEvioReader.class.getName(), new BasicLogFormatter(), Level.INFO); - + protected static Level logLevel = Level.INFO; + public static Logger logger = LogUtil.create(AbstractSvtEvioReader.class.getName(), new BasicLogFormatter(), Level.INFO); + // A Map from DAQ pair (FPGA/Hybrid or FEB ID/FEB Hybrid ID) to the // corresponding sensor protected Map<Pair<Integer /* FPGA */, Integer /* Hybrid */>, 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 Fri Oct 2 16:25:07 2015 @@ -21,12 +21,12 @@ * */ public AugmentedSvtEvioReader() { - super(); - } - - - - + super(); + } + + + + @Override protected SvtHeaderDataInfo extractSvtHeader(int num, int[] data) { // Extract the header information @@ -34,7 +34,7 @@ // Extract the tail information int svtTail = SvtEvioUtils.getSvtTail(data); return new SvtHeaderDataInfo(num, svtHeader, svtTail); - + } @Override @@ -47,25 +47,25 @@ logger.fine("checkSvtHeaderData skipcount " + Integer.toHexString(SvtEvioUtils.getSvtTailMultisampleSkipCount(tail))); } if( SvtEvioUtils.getSvtTailSyncErrorBit(tail) != 0) { - throw new SvtEvioHeaderApvBufferAddressException("This SVT header had a SyncError"); + throw new SvtEvioHeaderApvBufferAddressException("This SVT header had a SyncError " + header.toString()); } else if( SvtEvioUtils.getSvtTailOFErrorBit(tail) != 0) { - throw new SvtEvioHeaderOFErrorException("This header had a OverFlowError"); + throw new SvtEvioHeaderOFErrorException("This header had a OverFlowError " + header.toString()); } else if( SvtEvioUtils.getSvtTailMultisampleSkipCount(tail) != 0) { - throw new SvtEvioHeaderSkipCountException("This header had a skipCount " + SvtEvioUtils.getSvtTailMultisampleSkipCount(tail) + " error"); + throw new SvtEvioHeaderSkipCountException("This header had a skipCount " + SvtEvioUtils.getSvtTailMultisampleSkipCount(tail) + " error " + header.toString()); } logger.fine("checkSvtHeaderData passed all I guess"); } - + @Override protected void addSvtHeadersToEvents(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 - lcsimEvent.put(SVT_HEADER_COLLECTION_NAME, headers, SvtHeaderDataInfo.class, flag); - -} + // Turn on 64-bit cell ID. + int flag = LCIOUtil.bitSet(0, 31, true); + // Add the collection of raw hits to the LCSim event + lcsimEvent.put(SVT_HEADER_COLLECTION_NAME, headers, SvtHeaderDataInfo.class, flag); + + } @Override protected void checkSvtSampleCount(int sampleCount, SvtHeaderDataInfo headerData) throws SvtEvioHeaderException { @@ -81,30 +81,51 @@ //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); - - } - + //else + // logger.fine("extractMultisampleHeaderTail: this is a NOT multisample header at index " + index); + + } + @Override protected int extractMultisampleHeaderData(int[] samples, int index, int[] multisampleHeaderData) { - logger.fine("extractMultisampleHeaderData: index " + index); + logger.finest("extractMultisampleHeaderData: index " + index); if( SvtEvioUtils.isMultisampleHeader(samples) && !SvtEvioUtils.isMultisampleTail(samples) ) { - logger.fine("extractMultisampleHeaderData: this is a multisample header so add the words to index " + index); + 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.fine("extractMultisampleHeaderData: this is a NOT multisample header "); + logger.finest("extractMultisampleHeaderData: this is a NOT multisample header "); return 0; } } + private String getMultisampleDebugString(SvtHeaderDataInfo headerDataInfo, int multisampleHeaderTailWord) { + String s = " header" + headerDataInfo.toString() + + " multisample: feb " + SvtEvioUtils.getFebIDFromMultisampleTail(multisampleHeaderTailWord) + + " hybrid " + SvtEvioUtils.getFebHybridIDFromMultisampleTail(multisampleHeaderTailWord) + + " apv " + SvtEvioUtils.getApvFromMultisampleTail(multisampleHeaderTailWord); + return s; + } + + private String getDebugString(int[] bufAddresses, int[] frameCounts, int[] readError ) { + String s = ""; + for (int i=0; i<bufAddresses.length; ++i) + s+="\nbuffer address " + i + " " + bufAddresses[i] + " ( " + Integer.toHexString( bufAddresses[i]) + " )"; + for (int i=0; i<frameCounts.length; ++i) + s+="\nframe count " + i + " " + frameCounts[i] + " ( " + Integer.toHexString( frameCounts[i]) + " )"; + for (int i=0; i<readError.length; ++i) + s+="\nread error " + i + " " + readError[i] + " ( " + Integer.toHexString( readError[i]) + " )"; + return s; + } + + + @Override protected void checkSvtHeaders(List<SvtHeaderDataInfo> headers) throws SvtEvioHeaderException { logger.fine("check " + headers.size() + " headers "); @@ -119,30 +140,28 @@ int multisampleHeaderTailerrorBit; for( SvtHeaderDataInfo headerDataInfo : headers ) { logger.fine("checking header: " + headerDataInfo.toString()); - - + + // Check the header data this.checkSvtHeaderData(headerDataInfo); - + int nMultisampleHeaders = headerDataInfo.getNumberOfMultisampleHeaders(); for(int iMultisampleHeader = 0; iMultisampleHeader < nMultisampleHeaders; iMultisampleHeader++) { logger.fine("iMultisampleHeader " + iMultisampleHeader); - + multisampleHeader = SvtHeaderDataInfo.getMultisampleHeader(iMultisampleHeader, headerDataInfo); - - // get multisample tail error bit and check it + + // get multisample tail error bit multisampleHeaderTailerrorBit = SvtEvioUtils.getErrorBitFromMultisampleHeader(SvtEvioUtils.getMultisampleTailWord(multisampleHeader)); - logger.fine("multisampleHeaderTailerrorBit " + multisampleHeaderTailerrorBit + " from multisampleHeaderTail " + SvtEvioUtils.getMultisampleTailWord(multisampleHeader) + " ( " + Integer.toHexString( SvtEvioUtils.getMultisampleTailWord(multisampleHeader) ) + " )"); - if( multisampleHeaderTailerrorBit != 0) - throw new SvtEvioHeaderMultisampleErrorBitException("This multisampleheader had the error bit set."); - // get buffer addresses bufAddresses = SvtEvioUtils.getApvBufferAddresses(multisampleHeader); - + // get frame counts frameCounts = SvtEvioUtils.getApvFrameCount(multisampleHeader); + // check if there was any read errors + readError = SvtEvioUtils.getApvReadErrors(multisampleHeader); if( bufAddresses.length != 6) throw new SvtEvioHeaderApvBufferAddressException("Invalid number of APV buffer addresses."); @@ -150,80 +169,76 @@ if( frameCounts.length != 6) throw new SvtEvioHeaderApvFrameCountException("Invalid number of APV frame counts."); + if( readError.length != 6) + throw new SvtEvioHeaderApvFrameCountException("Invalid number of read errors."); + + // Check for error bit + if( multisampleHeaderTailerrorBit != 0) { + throw new SvtEvioHeaderMultisampleErrorBitException("A multisample header error bit was set for " + + this.getMultisampleDebugString(headerDataInfo, SvtEvioUtils.getMultisampleTailWord(multisampleHeader)) + + this.getDebugString(bufAddresses, frameCounts, readError)); + } + + // print debug if(logger.getLevel().intValue() >= Level.FINE.intValue()) { - for (int i=0; i<bufAddresses.length; ++i) { - logger.fine("buffer address " + i + " " + bufAddresses[i] + " ( " + Integer.toHexString( bufAddresses[i]) + " )"); - } - for (int i=0; i<frameCounts.length; ++i) { - logger.fine("frame count " + i + " " + frameCounts[i] + " ( " + Integer.toHexString( frameCounts[i]) + " )"); - } + logger.fine(this.getMultisampleDebugString(headerDataInfo, SvtEvioUtils.getMultisampleTailWord(multisampleHeader)) + + this.getDebugString(bufAddresses, frameCounts, readError)); } // Get a reference for comparison if(firstHeader) { - + System.arraycopy(bufAddresses, 0, bufferAddresses, 0, bufAddresses.length); - + System.arraycopy(frameCounts, 0, firstFrameCounts, 0, frameCounts.length); - + firstHeader = false; } else { - + // Check that apv buffer addresses match if( !Arrays.equals(bufferAddresses, bufAddresses)) { - for (int i=0; i<bufAddresses.length; ++i) { - logger.info("buffer address " + i + " " + bufAddresses[i] + " ( " + Integer.toHexString( bufAddresses[i]) + " )"); - } - for (int i=0; i<bufferAddresses.length; ++i) { - logger.info("ref buffer address " + i + " " + bufferAddresses[i] + " ( " + Integer.toHexString( bufferAddresses[i]) + " )"); - } - throw new SvtEvioHeaderApvBufferAddressException("The APV buffer addresses in this event do not match!"); - } - + throw new SvtEvioHeaderApvBufferAddressException("The APV buffer addresses in this event do not match " + + this.getMultisampleDebugString(headerDataInfo, SvtEvioUtils.getMultisampleTailWord(multisampleHeader)) + + this.getDebugString(bufAddresses, frameCounts, readError)); + } + // Check that apv frame count match if( !Arrays.equals(firstFrameCounts, frameCounts)) { - for (int i=0; i<frameCounts.length; ++i) { - logger.info("frame count " + i + " " + frameCounts[i] + " ( " + Integer.toHexString( frameCounts[i]) + " )"); - } - for (int i=0; i<firstFrameCounts.length; ++i) { - logger.info("ref frame count " + i + " " + firstFrameCounts[i] + " ( " + Integer.toHexString( firstFrameCounts[i]) + " )"); - } - throw new SvtEvioHeaderApvFrameCountException("The APV frame counts in this event do not match!"); + throw new SvtEvioHeaderApvFrameCountException("The APV frame counts in this event do not match " + + this.getMultisampleDebugString(headerDataInfo, SvtEvioUtils.getMultisampleTailWord(multisampleHeader)) + + this.getDebugString(bufAddresses, frameCounts, readError)); } } // Check that the APV frame counts are incrementing // remember to take into account the 2-bit rollover (duh!) - + count = -1; - for (int i=0; i<frameCounts.length; ++i) { - logger.fine("frame count " + i + " " + frameCounts[i] + " ( " + Integer.toHexString( frameCounts[i]) + " )"); - - if( frameCounts[i] > 15 ) - throw new SvtEvioHeaderApvFrameCountException("Frame count " + frameCounts[i] + " is larger than 2-bit number?"); - - if( (count < 15 && frameCounts[i] < count) || ( count == 15 && frameCounts[i] != 0 ) ) { - //logger.severe("Frame count " + frameCounts[i] + " was not increasing compared to previous " + count + " for APV " + i); - throw new SvtEvioHeaderApvFrameCountException("Frame count " + frameCounts[i] + " was not increasing compared to previous " + count + " for index " + i + " ( tailword: " + Integer.toHexString( SvtEvioUtils.getMultisampleTailWord(multisampleHeader) ) + " )"); - } - count = frameCounts[i]; - } - - - // check if there was any read errors - readError = SvtEvioUtils.getApvReadErrors(multisampleHeader); - - for (int i=0; i<readError.length; ++i) { - logger.fine("i " + i + " " + readError[i] + " ( " + Integer.toHexString( readError[i]) + " )"); - if( readError[i] != 1) // active low - throw new SvtEvioHeaderApvReadErrorException("Read error for apv " + i); - } - - + for (int iFrame=0; iFrame<frameCounts.length; ++iFrame) { + logger.fine("frame count " + iFrame + " " + frameCounts[iFrame] + " ( " + Integer.toHexString( frameCounts[iFrame]) + " )"); + + if( frameCounts[iFrame] > 15 || (count < 15 && frameCounts[iFrame] < count) || ( count == 15 && frameCounts[iFrame] != 0 ) ) { + throw new SvtEvioHeaderApvFrameCountException("The APV frame counts in this events are invalid " + + this.getMultisampleDebugString(headerDataInfo, SvtEvioUtils.getMultisampleTailWord(multisampleHeader)) + + this.getDebugString(bufAddresses, frameCounts, readError)); + } + count = frameCounts[iFrame]; + } + + for (int iReadError=0; iReadError<readError.length; ++iReadError) { + logger.fine("read error " + iReadError + " " + readError[iReadError] + " ( " + Integer.toHexString( readError[iReadError]) + " )"); + if( readError[iReadError] != 1) {// active low + throw new SvtEvioHeaderApvReadErrorException("Read error occurred " + + this.getMultisampleDebugString(headerDataInfo, SvtEvioUtils.getMultisampleTailWord(multisampleHeader)) + + this.getDebugString(bufAddresses, frameCounts, readError)); + } + } + + } // multisampleheaders } - - } - + + } + } 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 Fri Oct 2 16:25:07 2015 @@ -145,32 +145,36 @@ } catch (final Exception e) { 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); } catch (final SvtEvioHeaderMultisampleErrorBitException e) { - LOGGER.log(Level.SEVERE, "Error reading header information from the SVT. Stop!", e); - throw new RuntimeException(e); + LOGGER.log(Level.SEVERE, "Error reading header information from the SVT for run " + lcsimEvent.getRunNumber() + " event " + lcsimEvent.getEventNumber() + ". Don't stop!", e); + //throw new RuntimeException(e); } catch (final SvtEvioHeaderSkipCountException e) { - LOGGER.log(Level.SEVERE, "Error reading header information from the SVT. Stop!", e); - throw new RuntimeException(e); + LOGGER.log(Level.SEVERE, "Error reading header information from the SVT for run " + lcsimEvent.getRunNumber() + " event " + lcsimEvent.getEventNumber() + ". Don't stop!", e); + //throw new RuntimeException(e); } catch (final SvtEvioHeaderOFErrorException e) { - LOGGER.log(Level.SEVERE, "Error reading header information from the SVT. Stop!", e); - throw new RuntimeException(e); + LOGGER.log(Level.SEVERE, "Error reading header information from the SVT for run " + lcsimEvent.getRunNumber() + " event " + lcsimEvent.getEventNumber() + ". Don't stop!", e); + //throw new RuntimeException(e); } catch (final SvtEvioHeaderApvBufferAddressException e) { - LOGGER.log(Level.SEVERE, "Error reading header information from the SVT. Stop!", e); - throw new RuntimeException(e); + LOGGER.log(Level.SEVERE, "Error reading header information from the SVT for run " + lcsimEvent.getRunNumber() + " event " + lcsimEvent.getEventNumber() + ". Don't stop!", e); + //throw new RuntimeException(e); } catch (final SvtEvioHeaderApvFrameCountException e) { - LOGGER.log(Level.SEVERE, "Error reading header information from the SVT. Stop!", e); - throw new RuntimeException(e); + LOGGER.log(Level.SEVERE, "Error reading header information from the SVT for run " + lcsimEvent.getRunNumber() + " event " + lcsimEvent.getEventNumber() + ". Don't stop!", e); + //throw new RuntimeException(e); } catch (final SvtEvioHeaderApvReadErrorException e) { - LOGGER.log(Level.SEVERE, "Error reading header information from the SVT. Stop!", e); - throw new RuntimeException(e); + LOGGER.log(Level.SEVERE, "Error reading header information from the SVT for run " + lcsimEvent.getRunNumber() + " event " + lcsimEvent.getEventNumber() + ". Don't stop!", e); + //throw new RuntimeException(e); } catch (final SvtEvioHeaderException e) { - LOGGER.log(Level.SEVERE, "General error reading header information from the SVT. Don't stop", e); + LOGGER.log(Level.SEVERE, "Generic error reading header information from the SVT for run " + lcsimEvent.getRunNumber() + " event " + lcsimEvent.getEventNumber() + ". Don't stop!", e); } catch (final SvtEvioReaderException e) { - LOGGER.log(Level.SEVERE, "Error making SVT hits.", 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); }