From 725294e96a6c6c4930f7eacf3afc5be9eff9e876 Mon Sep 17 00:00:00 2001 From: Stefan Ritt Date: Mon, 27 May 2019 17:15:08 +0200 Subject: [PATCH] Made read_binary.C work with current data format --- .../drscl/drs_exam.xcodeproj/project.pbxproj | 16 +- .../drscl/drscl.xcodeproj/project.pbxproj | 8 +- .../drsosc/drsosc.xcodeproj/project.pbxproj | 12 +- software/drsosc/read_binary.C | 245 ++++++++++++------ software/drsosc/read_binary.cpp | 2 +- .../read_binary.xcodeproj/project.pbxproj | 11 +- 6 files changed, 200 insertions(+), 94 deletions(-) diff --git a/software/drscl/drs_exam.xcodeproj/project.pbxproj b/software/drscl/drs_exam.xcodeproj/project.pbxproj index 4e1a65a..14edc3a 100644 --- a/software/drscl/drs_exam.xcodeproj/project.pbxproj +++ b/software/drscl/drs_exam.xcodeproj/project.pbxproj @@ -121,7 +121,7 @@ D5446422141E1BB40027AF52 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0920; + LastUpgradeCheck = 0930; ORGANIZATIONNAME = PSI; }; buildConfigurationList = D5446425141E1BB40027AF52 /* Build configuration list for PBXProject "drs_exam" */; @@ -166,11 +166,13 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -212,11 +214,13 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -245,6 +249,7 @@ D5446436141E1BB40027AF52 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", @@ -254,9 +259,8 @@ ); GCC_WARN_64_TO_32_BIT_CONVERSION = NO; HEADER_SEARCH_PATHS = ( + /usr/local/include, /drs4eb/software/include, - /usr/local/inlucde, - /opt/local/include, ); OTHER_LDFLAGS = ( "-L/usr/local/lib", @@ -265,6 +269,7 @@ IOKit, "-framework", Carbon, + "--stdlib=libc++", ); PRELINK_LIBS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -274,11 +279,11 @@ D5446437141E1BB40027AF52 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = NO; HEADER_SEARCH_PATHS = ( + /usr/local/include, /drs4eb/software/include, - /usr/local/inlucde, - /opt/local/include, ); OTHER_LDFLAGS = ( "-L/usr/local/lib", @@ -287,6 +292,7 @@ IOKit, "-framework", Carbon, + "--stdlib=libc++", ); PRELINK_LIBS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/software/drscl/drscl.xcodeproj/project.pbxproj b/software/drscl/drscl.xcodeproj/project.pbxproj index 43209de..75c272b 100644 --- a/software/drscl/drscl.xcodeproj/project.pbxproj +++ b/software/drscl/drscl.xcodeproj/project.pbxproj @@ -121,7 +121,7 @@ D5446422141E1BB40027AF52 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0900; + LastUpgradeCheck = 0930; ORGANIZATIONNAME = PSI; }; buildConfigurationList = D5446425141E1BB40027AF52 /* Build configuration list for PBXProject "drscl" */; @@ -166,11 +166,13 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -212,11 +214,13 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -245,6 +249,7 @@ D5446436141E1BB40027AF52 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", @@ -274,6 +279,7 @@ D5446437141E1BB40027AF52 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = NO; HEADER_SEARCH_PATHS = ( /usr/local/include, diff --git a/software/drsosc/drsosc.xcodeproj/project.pbxproj b/software/drsosc/drsosc.xcodeproj/project.pbxproj index 32b394c..5f67e6c 100644 --- a/software/drsosc/drsosc.xcodeproj/project.pbxproj +++ b/software/drsosc/drsosc.xcodeproj/project.pbxproj @@ -241,7 +241,7 @@ D54FC049142777CD00A7A6B0 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0920; + LastUpgradeCheck = 0930; ORGANIZATIONNAME = PSI; TargetAttributes = { D54FC051142777CE00A7A6B0 = { @@ -322,11 +322,13 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -369,11 +371,13 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; @@ -405,6 +409,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LIBRARY = "compiler-default"; + CLANG_ENABLE_OBJC_WEAK = YES; "CODE_SIGN_IDENTITY[sdk=macosx*]" = ""; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -430,6 +435,8 @@ ); INFOPLIST_FILE = drsosc.xcodeproj/Info.plist; MACOSX_DEPLOYMENT_TARGET = 10.7; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; OTHER_LDFLAGS = ( "-L/usr/local/lib", "/usr/local/lib/libusb-1.0.a", @@ -476,6 +483,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_CXX_LIBRARY = "compiler-default"; + CLANG_ENABLE_OBJC_WEAK = YES; "CODE_SIGN_IDENTITY[sdk=macosx*]" = ""; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -499,6 +507,8 @@ ); INFOPLIST_FILE = drsosc.xcodeproj/Info.plist; MACOSX_DEPLOYMENT_TARGET = 10.7; + OTHER_CFLAGS = ""; + OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; OTHER_LDFLAGS = ( "-L/usr/local/lib", "/usr/local/lib/libusb-1.0.a", diff --git a/software/drsosc/read_binary.C b/software/drsosc/read_binary.C index f2a5c0b..8a1b5db 100644 --- a/software/drsosc/read_binary.C +++ b/software/drsosc/read_binary.C @@ -29,39 +29,58 @@ #include "Getline.h" typedef struct { - char time_header[4]; - char bn[2]; - unsigned short board_serial_number; + char tag[3]; + char version; +} FHEADER; + +typedef struct { + char time_header[4]; } THEADER; typedef struct { - char event_header[4]; - unsigned int event_serial_number; - unsigned short year; - unsigned short month; - unsigned short day; - unsigned short hour; - unsigned short minute; - unsigned short second; - unsigned short millisecond; - unsigned short reserved1; - char bs[2]; - unsigned short board_serial_number; - char tc[2]; - unsigned short trigger_cell; + char bn[2]; + unsigned short board_serial_number; +} BHEADER; + +typedef struct { + char event_header[4]; + unsigned int event_serial_number; + unsigned short year; + unsigned short month; + unsigned short day; + unsigned short hour; + unsigned short minute; + unsigned short second; + unsigned short millisecond; + unsigned short range; } EHEADER; +typedef struct { + char tc[2]; + unsigned short trigger_cell; +} TCHEADER; + +typedef struct { + char c[1]; + char cn[3]; +} CHEADER; + /*-----------------------------------------------------------------------------*/ -void decode(char *filename) { - THEADER th; - EHEADER eh; - char hdr[4]; +void decode(const char *filename) { + FHEADER fh; + THEADER th; + BHEADER bh; + EHEADER eh; + TCHEADER tch; + CHEADER ch; + + unsigned int scaler; unsigned short voltage[1024]; - double waveform[4][1024], time[4][1024]; - float bin_width[4][1024]; + double waveform[16][4][1024], time[16][4][1024]; + float bin_width[16][4][1024]; char rootfile[256]; - int i, j, ch, n, chn_index; + int i, j, b, chn, n, chn_index, n_boards; double t1, t2, dt; // open the binary waveform file @@ -73,8 +92,11 @@ void decode(char *filename) { //open the root file strcpy(rootfile, filename); - if (strchr(rootfile, '.')) - *strchr(rootfile, '.') = 0; + for (i=0 ; i 10 || bin_width[b][i][1023] < 0.01) { + for (j=0 ; j<512 ; j++) + bin_width[b][i][j+512] = bin_width[b][i][j]; } } - - // align cell #0 of all channels - t1 = time[0][(1024-eh.trigger_cell) % 1024]; - for (ch=1 ; ch<4 ; ch++) { - t2 = time[ch][(1024-eh.trigger_cell) % 1024]; - dt = t1 - t2; - for (i=0 ; i<1024 ; i++) - time[ch][i] += dt; - } + } + n_boards = b; - // fill root tree - rec->Fill(); + // loop over all events in the data file + for (n=0 ; ; n++) { + // read event header + i = (int)fread(&eh, sizeof(eh), 1, f); + if (i < 1) + break; - // fill graph - for (i=0 ; i<1024 ; i++) - g->SetPoint(i, time[0][i], waveform[0][i]); + printf("Found event #%d %d %d\n", eh.event_serial_number, eh.second, eh.millisecond); - // draw graph and wait for user click - g->Draw("ACP"); - c1->Update(); - gPad->WaitPrimitive(); + // loop over all boards in data file + for (b=0 ; b 1) + printf("Found data for board #%d\n", bh.board_serial_number); + + // reach channel data + for (chn=0 ; chn<4 ; chn++) { + + // read channel header + fread(&ch, sizeof(ch), 1, f); + if (ch.c[0] != 'C') { + // event header found + fseek(f, -4, SEEK_CUR); + break; + } + chn_index = ch.cn[2] - '0' - 1; + fread(&scaler, sizeof(int), 1, f); + fread(voltage, sizeof(short), 1024, f); + + for (i=0 ; i<1024 ; i++) { + // convert data to volts + waveform[b][chn_index][i] = (voltage[i] / 65536. + eh.range/1000.0 - 0.5); + + // calculate time for this cell + for (j=0,time[b][chn_index][i]=0 ; jFill(); + + // fill graph + for (i=0 ; i<1024 ; i++) + g->SetPoint(i, time[b][0][i], waveform[b][0][i]); + + // draw graph and wait for user click + g->Draw("ACP"); + c1->Update(); + gPad->WaitPrimitive(); + } } // print number of events diff --git a/software/drsosc/read_binary.cpp b/software/drsosc/read_binary.cpp index d977e1f..262276d 100644 --- a/software/drsosc/read_binary.cpp +++ b/software/drsosc/read_binary.cpp @@ -129,7 +129,7 @@ int main(int argc, const char * argv[]) printf("Found data for board #%d\n", bh.board_serial_number); // read time bin widths - memset(bin_width[b], sizeof(bin_width[0]), 0); + memset(bin_width[b], 0, sizeof(bin_width[0])); for (chn=0 ; chn<5 ; chn++) { fread(&ch, sizeof(ch), 1, f); if (ch.c[0] != 'C') { diff --git a/software/drsosc/read_binary.xcodeproj/project.pbxproj b/software/drsosc/read_binary.xcodeproj/project.pbxproj index dd0633c..0d7ddc0 100644 --- a/software/drsosc/read_binary.xcodeproj/project.pbxproj +++ b/software/drsosc/read_binary.xcodeproj/project.pbxproj @@ -88,15 +88,16 @@ D526879018C8A2A800D244A2 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0900; + LastUpgradeCheck = 1020; ORGANIZATIONNAME = "Stefan Ritt"; }; buildConfigurationList = D526879318C8A2A800D244A2 /* Build configuration list for PBXProject "read_binary" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = D526878F18C8A2A800D244A2; productRefGroup = D526879918C8A2A800D244A2 /* Products */; @@ -124,6 +125,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; @@ -131,12 +133,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -173,6 +177,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; @@ -180,12 +185,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;