]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - RAW/dateStream.cxx
Updates.
[u/mrichter/AliRoot.git] / RAW / dateStream.cxx
index 818b5755a0b52f9fa3ace95239a8dc82b1db1d84..ca1cfc1f30a06dbef7ef9d888461d81637c83b92 100644 (file)
@@ -84,6 +84,7 @@ struct payloadDescriptorStruct {
 } *payloadsHead, *payloadsTail;
 int lineNo;
 eventGdcIdType currGdcId;
+unsigned long32 currDetPattern; 
 eventLdcIdType currLdcId;
 equipmentIdType currEquipmentId;
 int currRunNb;
@@ -96,6 +97,8 @@ eventIdType currEventId;
 int gotAliceTrigger;
 int bufferData;
 
+struct commonDataHeaderStruct *cdhRef = NULL;
+
 void dumpPayload( const struct payloadDescriptorStruct *p ) {
   char *c;
   int i;
@@ -153,16 +156,16 @@ void dumpEvents() {
            gdc = gdc->next ) {
        struct ldcEventDescriptorStruct *ldc;
 
-       printf( " GDC (%p)\n", gdc );
+       printf( " GDC (%p)\n", (void*)gdc );
        for ( ldc = gdc->head; ldc != NULL; ldc = ldc->next ) {
          struct equipmentEventDescriptorStruct *eq;
            
-         printf( "   LDC (%p): %d\n", ldc, ldc->id );
+         printf( "   LDC (%p): %d\n", (void*)ldc, ldc->id );
          for ( eq = ldc->head; eq != NULL; eq = eq->next ) {
            printf( "     EQUIPMENT (%p): %d PAYLOAD (%p):",
-                   eq,
+                   (void*)eq,
                    eq->id,
-                   eq->payload );
+                   (void*)eq->payload );
            fflush( stdout );
            printf( "\"%s\" (%d bytes)\n",
                    eq->payload->fileName,
@@ -183,9 +186,9 @@ void dumpEvents() {
        printf( "   LDC\n" );
        for ( eq = ldc->head; eq != NULL; eq = eq->next ) {
          printf( "     EQUIPMENT (%p): %d PAYLOAD (%p):",
-                 eq,
+                 (void*)eq,
                  eq->id,
-                 eq->payload );
+                 (void*)eq->payload );
          fflush( stdout );
          printf( "\"%s\" (%d bytes)\n",
                  eq->payload->fileName,
@@ -489,9 +492,10 @@ void loadPayload( const char *fileName ) {
       printf( "%d)       Payload \"%s\" loaded at %p\n",
              lineNo,
              fileName,
-             payload );
+             (void*)payload );
       if ( bufferData ) {
-       if ( handleCDH ) {
+       if ( handleCDH &&
+            strncmp(fileName,"TRG_",4) != 0 ) {
          struct commonDataHeaderStruct *cdh =
            (struct commonDataHeaderStruct *)payload->data;
 
@@ -648,7 +652,7 @@ void loadPayload( const char *fileName ) {
       printf( "%d)       Payload \"%s\" already loaded at %p\n",
              lineNo,
              fileName,
-             payload );
+             (void*)payload );
   }
 
   currEvent->payload = payload;
@@ -763,7 +767,7 @@ void parseGdc( char * const line ) {
                 lineNo );
        exit( 1 );
       }
-      if ( sscanf( idNum, "%d", &currGdcId ) != 1 ) {
+      if ( sscanf( idNum, "%d", (int*)&currGdcId ) != 1 ) {
        fprintf( stderr,
                 "%s: line:%d GDC declaration, numeric ID needed (%s)",
                 myName,
@@ -774,6 +778,27 @@ void parseGdc( char * const line ) {
       DBG_VERBOSE printf( "%d)     GDC - ID:%d\n",
                          lineNo,
                          currGdcId );
+    } else if ( strcasecmp( "DetectorPattern", keyword ) == 0 ) {
+      char *detPattern;
+
+      if ( (detPattern = strtok_r( p, " \t", &p )) == NULL ) {
+       fprintf( stderr,
+                "%s: line:%d GDC declaration, DetectorPattern needed",
+                myName,
+                lineNo );
+       exit( 1 );
+      }
+      if ( sscanf( detPattern, "%u", &currDetPattern ) != 1 ) {
+       fprintf( stderr,
+                "%s: line:%d GDC declaration, numeric DetectorPattern needed (%s)",
+                myName,
+                lineNo,
+                detPattern );
+       exit( 1 );
+      }
+      DBG_VERBOSE printf( "%d)     GDC - DetectorPattern:%u\n",
+                         lineNo,
+                         currDetPattern );
     } else {
       fprintf( stderr,
               "%s: line:%d GDC declaration, unknown keyword \"%s\"\n",
@@ -801,7 +826,7 @@ void parseLdc( char * const line ) {
                 lineNo );
        exit( 1 );
       }
-      if ( sscanf( idNum, "%d", &currLdcId ) != 1 ) {
+      if ( sscanf( idNum, "%d", (int*)&currLdcId ) != 1 ) {
        fprintf( stderr,
                 "%s: line:%d LDC declaration, numeric ID needed (%s)",
                 myName,
@@ -828,6 +853,7 @@ void parseRules() {
 
   currLdcId = HOST_ID_MIN;
   currGdcId = HOST_ID_MIN;
+  currDetPattern = 0;
 
   for ( lineNo = 1; !feof( stdin ); lineNo++ ) {
     getLine( line, sizeof(line) );
@@ -890,7 +916,7 @@ void parseRules() {
        }
       }
     }
-  } while ( !feof( stdin ) );
+  } while ( !feof( stdin ) ) {}
   lineNo -= 2;
 
   DBG_VERBOSE {
@@ -924,7 +950,7 @@ void parseRules() {
     assert( ldcsHead != NULL );
     assert( ldcsTail != NULL );
     assert( ldcsTail->next == NULL );
-    for ( ldc = ldcsHead; ldc->next != NULL; ldc = ldc->next );
+    for ( ldc = ldcsHead; ldc->next != NULL; ldc = ldc->next ) {}
     assert ( ldc == ldcsTail );
   }
 
@@ -1158,9 +1184,13 @@ void createEor() {
 } /* End of createEor */
 
 void loadCdh( struct commonDataHeaderStruct * const cdh,
-                    eventIdType            * const eventId ) {
+                    eventIdType            * const eventId,
+                    equipmentIdType id ) {
   if ( !handleCDH ) return;
 
+  // CTP raw-data does not contain CDH
+  if ( id == 4352) return;
+
   if ( gotAliceTrigger ) {
     cdh->cdhEventId1 = EVENT_ID_GET_BUNCH_CROSSING( *eventId );
     cdh->cdhEventId2 = EVENT_ID_GET_ORBIT( *eventId );
@@ -1171,7 +1201,8 @@ void loadCdh( struct commonDataHeaderStruct * const cdh,
   cdh->cdhMiniEventId = cdh->cdhEventId1;
 }
 void decodeCDH( struct ldcEventDescriptorStruct       * const ldc,
-               const struct payloadDescriptorStruct  * const payloadDesc );
+               const struct payloadDescriptorStruct  * const payloadDesc,
+               equipmentIdType id );
 
 void createEvent( void ) {
   assert( workingAs == ldc || workingAs == gdc );
@@ -1194,10 +1225,11 @@ void createEvent( void ) {
       for ( eq = ldc->head; eq != NULL; eq = eq->next ) {
        if ( !bufferData ) {
          loadBuffer( eq->payload );
-         if ( !currGdc->loaded ) decodeCDH( ldc, eq->payload );
+         decodeCDH( ldc, eq->payload, eq->id );
        }
        loadCdh( (struct commonDataHeaderStruct*)eq->payload->data,
-                &currEventId );
+                &currEventId,
+                eq->id);
       }
 
       if ( !currGdc->loaded ) {
@@ -1210,6 +1242,7 @@ void createEvent( void ) {
        currGdc->loaded = TRUE;
       }
     }
+    cdhRef = NULL;
   } else if ( workingAs == ldc ) {
     struct equipmentEventDescriptorStruct *eq;
 
@@ -1219,12 +1252,14 @@ void createEvent( void ) {
     for ( eq = currLdc->head; eq != NULL; eq = eq->next ) {
       if ( !bufferData ) {
        loadBuffer( eq->payload );
-       if ( !currLdc->loaded ) decodeCDH( currLdc, eq->payload );
+       decodeCDH( currLdc, eq->payload, eq->id );
       }
       loadCdh( (struct commonDataHeaderStruct*)eq->payload->data,
-              &currEventId );
+              &currEventId,
+              eq->id);
       currLdc->loaded = TRUE;
     }
+    cdhRef = NULL;
   }
   ADD_EVENT_ID( currEventId, oneEventDelta );
 
@@ -1405,9 +1440,10 @@ void initEquipment( struct equipmentHeaderStruct * const eq ) {
 } /* End of initEquipment */
 
 void decodeCDH(       struct ldcEventDescriptorStruct * const ldc,
-               const struct payloadDescriptorStruct  * const payloadDesc ) {
-  if ( handleCDH ) {
-    static struct commonDataHeaderStruct *cdhRef = NULL;
+               const struct payloadDescriptorStruct  * const payloadDesc,
+                     equipmentIdType id ) {
+  if ( handleCDH && 
+       id != 4352 ) {
     struct commonDataHeaderStruct *cdh;
     static int softwareTriggerIndicator = FALSE;
     int attr;
@@ -1591,6 +1627,7 @@ void initEvents() {
       gdc->header.eventType = PHYSICS_EVENT;
       SET_SYSTEM_ATTRIBUTE( gdc->header.eventTypeAttribute, ATTR_SUPER_EVENT );
       gdc->header.eventGdcId = currGdcId;
+      COPY_DETECTOR_PATTERN(&currDetPattern, gdc->header.eventDetectorPattern);
       for ( ldc = gdc->head; ldc != NULL; ldc = ldc->next ) {
        struct equipmentEventDescriptorStruct *eq;
 
@@ -1598,6 +1635,7 @@ void initEvents() {
        ldc->header.eventSize = ldc->header.eventHeadSize;
        ldc->header.eventType = PHYSICS_EVENT;
        ldc->header.eventGdcId = currGdcId;
+       COPY_DETECTOR_PATTERN(&currDetPattern, ldc->header.eventDetectorPattern);
        ldc->header.eventLdcId = ldc->id;
        for ( eq = ldc->head; eq != NULL; eq = eq->next ) {
          initEquipment( &eq->header );
@@ -1607,7 +1645,7 @@ void initEvents() {
                                  ATTR_ORBIT_BC );
          eq->header.equipmentSize = eq->payload->size + sizeof( eq->header );
          ldc->header.eventSize += eq->header.equipmentSize;
-         decodeCDH( ldc, eq->payload );
+         decodeCDH( ldc, eq->payload, eq->id );
          OR_ALL_ATTRIBUTES( eq->header.equipmentTypeAttribute,
                             ldc->header.eventTypeAttribute );
          OR_ALL_ATTRIBUTES( eq->header.equipmentTypeAttribute,
@@ -1615,6 +1653,7 @@ void initEvents() {
        }
        gdc->header.eventSize += ldc->header.eventSize;
       }
+      cdhRef = NULL;
     }
 
     DBG_VERBOSE {
@@ -1666,10 +1705,11 @@ void initEvents() {
                                ATTR_ORBIT_BC );
        eq->header.equipmentSize = eq->payload->size + sizeof( eq->header );
        ldc->header.eventSize += eq->header.equipmentSize;
-       decodeCDH( ldc, eq->payload );
+       decodeCDH( ldc, eq->payload, eq->id );
        OR_ALL_ATTRIBUTES( eq->header.equipmentTypeAttribute,
                           ldc->header.eventTypeAttribute );
       }
+      cdhRef = NULL;
     }
     DBG_VERBOSE {
       printf( "Headers:\n" );