From be27076f341dcfdc2b87ea4db82f1db0964091e6 Mon Sep 17 00:00:00 2001 From: hadaq Date: Thu, 7 Nov 2002 20:40:41 +0000 Subject: [PATCH] Trigger tags (8bit) are checked against first one (except empty crate events) extra counter for tag mismatches. No call since 6h, seems to work -- mm --- hadaq/evtbuild.c | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/hadaq/evtbuild.c b/hadaq/evtbuild.c index 3e34bb8..4086fb9 100644 --- a/hadaq/evtbuild.c +++ b/hadaq/evtbuild.c @@ -1,4 +1,4 @@ -static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.49 2002-11-07 12:48:49 hadaq Exp $"; +static char *rcsId = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/hadaq/evtbuild.c,v 6.50 2002-11-07 20:40:41 hadaq Exp $"; #define _POSIX_C_SOURCE 199309L @@ -53,6 +53,7 @@ typedef struct TheStatsS { unsigned long *evtsDiscarded; unsigned long *evtsComplete; unsigned long *evtsDataError; + unsigned long *evtsTagError; unsigned long *bytesWritten; unsigned long *triggerType[NTRIGTYPES]; unsigned long *trigNr[32]; @@ -232,6 +233,7 @@ static char *unit(unsigned long v) { static void statsDump(TheArgs *theArgs, TheStats *my, int interval) { static unsigned long lastEC; static unsigned long lastEE; + static unsigned long lastTE; static unsigned long lastED; static unsigned long lastBW; static time_t lastTime = 0; @@ -251,6 +253,7 @@ static void statsDump(TheArgs *theArgs, TheStats *my, int interval) { fprintf(stderr, "%19s:%6s", "bytesWritten ", unit(*my->bytesWritten)); fputc('\n', stderr); fprintf(stderr, "%19s:%6s", "evtsDataError ", unit(*my->evtsDataError)); + fprintf(stderr, "%19s:%6s", "evtsTagError ", unit(*my->evtsTagError)); fputc('\n', stderr); fprintf(stderr, "%19s:%6s", "evtsComplete/s", unit(*my->evtsComplete - lastEC)); @@ -258,9 +261,11 @@ static void statsDump(TheArgs *theArgs, TheStats *my, int interval) { fprintf(stderr, "%19s:%6s", "bytesWritten/s", unit(*my->bytesWritten - lastBW)); fputc('\n', stderr); fprintf(stderr, "%19s:%6s", "evtsDataError/s", unit(*my->evtsDataError - lastEE)); + fprintf(stderr, "%19s:%6s", "evtsTagError/s", unit(*my->evtsTagError - lastTE)); fputc('\n', stderr); lastEC = *my->evtsComplete; lastEE = *my->evtsDataError; + lastTE = *my->evtsTagError; lastED = *my->evtsDiscarded; lastBW = *my->bytesWritten; @@ -355,6 +360,7 @@ int main(int argc, char *argv[]) int scanWasSuccessful; uint32_t currTrigNr; + uint32_t currTrigTag; uint32_t currId; ourTime = time(NULL); @@ -463,6 +469,7 @@ int main(int argc, char *argv[]) theStats->evtsDiscarded = Worker_addStatistic(worker, "evtsDiscarded"); theStats->evtsComplete = Worker_addStatistic(worker, "evtsComplete"); theStats->evtsDataError = Worker_addStatistic(worker, "evtsDataError"); + theStats->evtsTagError = Worker_addStatistic(worker, "evtsTagError"); theStats->bytesWritten = Worker_addStatistic(worker, "bytesWritten"); for (i = 0; i < NTRIGTYPES; i++) { char buf[WORKER_MAX_NAME_LEN]; @@ -497,11 +504,14 @@ int main(int argc, char *argv[]) while (setjmp(terminateJmp) == 0) { int step; int evtIsBroken = 0; + int dataError = 0; + int tagError = 0; statsDump(theArgs, theStats, 1); evt = newEvt(EvtDecoding_64bitAligned, EvtId_data, theArgs->runNr, theArgs->expId); for (i = 0; i < theArgs->nrOfMsgs && !evtIsBroken; i += step) { uint32_t trigNr; + uint32_t trigTag; if (hadTuQueue[i] == NULL) { void *storage; @@ -521,20 +531,28 @@ int main(int argc, char *argv[]) if (i == 0) { currTrigNr = SubEvt_trigNr(subEvt) >> 8; + currTrigTag = SubEvt_trigNr(subEvt) & 0xff; currId = SubEvt_pureId(subEvt); Evt_setId(evt, currId); #ifndef NDEBUG syslog(LOG_DEBUG, - "currTrigNr: 0x%08x, currId 0x%08x", currTrigNr, currId); + "currTrigNr: 0x%06x, currTrigTag 0x%02x, currId 0x%08x", currTrigNr, currTrigTag, currId); #endif } trigNr = SubEvt_trigNr(subEvt) >> 8; + trigTag = SubEvt_trigNr(subEvt) & 0xff; if (trigNr == currTrigNr) { - if (SubEvt_dataError(subEvt)) { - Evt_setDataError(evt); + if (SubEvt_size(subEvt) > SubEvt_hdrSize()) { + /* sub evt is not empty */ + if (SubEvt_dataError(subEvt)) { + dataError = 1; + } + if (trigNr != currTrigNr) { + tagError = 1; + } + evt = Evt_appendSubEvt(evt, subEvt); } - evt = Evt_appendSubEvt(evt, subEvt); HadTuQueue_pop(hadTuQueue[i]); step = 1; } else if (trigNr < currTrigNr) { @@ -552,6 +570,14 @@ int main(int argc, char *argv[]) } } if (!evtIsBroken) { + if (dataError) { + Evt_setDataError(evt); + (*theStats->evtsDataError)++; + } + if (tagError) { + Evt_setDataError(evt); + (*theStats->evtsTagError)++; + } if (outFile != NULL) { fwrite(evt, 1, Evt_paddedSize(evt), outFile); } else if (outTape != NULL) { @@ -559,9 +585,6 @@ int main(int argc, char *argv[]) } Evt_online(evt); (*theStats->evtsComplete)++; - if (Evt_dataError(evt)) { - (*theStats->evtsDataError)++; - } (*theStats->triggerType[currId & (NTRIGTYPES - 1)])++; (*theStats->bytesWritten) += Evt_size(evt); } else { -- 2.43.0