]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Trigger tags (8bit) are checked against first one (except empty crate events)
authorhadaq <hadaq>
Thu, 7 Nov 2002 20:40:41 +0000 (20:40 +0000)
committerhadaq <hadaq>
Thu, 7 Nov 2002 20:40:41 +0000 (20:40 +0000)
extra counter for tag mismatches. No call since 6h, seems to work -- mm

hadaq/evtbuild.c

index 3e34bb8852bc5846c40ce73f70d9ca6d8756287f..4086fb94c0a189b3c173ff8b2e96c632c6de3dde 100644 (file)
@@ -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 {