$GOOPROC;
 
 /*******************************************************************/
 /* Analysis for BIO-9109 Cave A NE-20 400 MeV/u 20./21.9.91 ********/
 /*******************************************************************/
 
 /************************/
 /* Constant declaration */
 /* Values can be        */
 /* modified in SATAN    */
 /************************/
 
 
 DCL    (i_e(4),
         I_PosXL(3), I_PosXR(3), I_PosYO(3), I_PosYU(3),
         i_sc3,  i_clock, i_trigger, i_mw2anode, i_sc3_sca,
         I_MINTDCVALUE INIT(0),
         I_MAXTDCVALUE INIT(3840)
                                   ) BIN FIXED(15),
        (
         r_posfactor init(0.03)
                                                   ) dec float(6) ,
                                         /*                         */
 (
 ABS, SQRT, CHAR, FIXED, ADD, BINARY, SIND, MOD, MIN, MAX, exp
                 ) BUILTIN;
 
 /*********************/
 /* Helper variables  */
 /*********************/
 
 DCL (i,j,k,l,m)                     BIN FIXED(31);
 
 /*******************************************/
 /* Integer variables for MWPC calculations */
 /*******************************************/
 
 DCL (I_PosXSum(3), I_PosYSum(3))    BIN FIXED(15);
 
 /****************************************/
 /* Real variables for MWPC calculations */
 /****************************************/
 
 DCL (R_PosX(3),R_PosY(3)
                             ) DEC FLOAT(6);
 
 
 /*********************************/
 /* Boolean variables MWPC        */
 /*********************************/
 
 DCL (B_Pos_X(3), B_Pos_Y(3), b_pos_xy(3) ) BIT(1) ALIGNED;
 
 
 /*********************/
 /* Generate Spectra  */
 /*********************/
 
 /* stelzer gas detectors  */
 
 $AGEN( PosXL(3)     ) TYPE(4) LIMITS( 0,4095)  BINS( 4) NCND( 0);
 $AGEN( PosXR(3)     ) TYPE(4) LIMITS( 0,4095)  BINS( 4) NCND( 0);
 $AGEN( PosYO(3)     ) TYPE(4) LIMITS( 0,4095)  BINS( 4) NCND( 0);
 $AGEN( PosYU(3)     ) TYPE(4) LIMITS( 0,4095)  BINS( 4) NCND( 0);
 $AGEN( PosXSum(3)   ) TYPE(4) LIMITS( 0,8191)  BINS( 4) NCND( 1);
 $AGEN( PosYSum(3)   ) TYPE(4) LIMITS( 0,8191)  BINS( 4) NCND( 1);
 $AGEN( PosX(3)      ) TYPE(4) LIMITS(-150,150) BINS( 1) NCND( 0);
 $AGEN( PosY(3)      ) TYPE(4) LIMITS(-150,150) BINS( 1) NCND( 0);
 $AGEN( Posxy(3)     ) TYPE(4) LIMITS(-150,150,-150,150) NCND( 1);
 
 /*music detectors         */
 
 $AGEN( e(4)        ) TYPE(4) LIMITS( 0 , 4095 ) bins(1) ncnd( 0 );
 
 $ANTRY; 
 $EVENT(EVT_PARM(21));
 
 /***************************/
 /* Variables to copy event */
 /***************************/
 
 I_PosXL(1)  = EVT_PARM(1);
 I_PosXR(1)  = EVT_PARM(2);
 I_PosYO(1)  = EVT_PARM(3);
 I_PosYU(1)  = EVT_PARM(4);
 
 I_PosXL(2)  = EVT_PARM(5);
 I_PosXR(2)  = EVT_PARM(6);
 I_PosYO(2)  = EVT_PARM(7);
 I_PosYU(2)  = EVT_PARM(8);
 
 I_PosXL(3)  = EVT_PARM(9);
 I_PosXR(3)  = EVT_PARM(10);
 I_PosYO(3)  = EVT_PARM(11);
 I_PosYU(3)  = EVT_PARM(12);
 
 I_e(1)      = EVT_PARM(13);
 I_e(2)      = EVT_PARM(14);
 I_e(3)      = EVT_PARM(15);
 I_e(4)      = EVT_PARM(16);
 I_sc3       = EVT_PARM(17);
 
 i_clock     = evt_parm(18);
 i_trigger   = evt_parm(19);
 i_mw2anode  = evt_parm(20);
 i_sc3_sca   = evt_parm(21);
 
 
 /*********************************************************************/
 /*                   Start of analysis                               */
 /*********************************************************************/
 
 /********************************************/
 /* MWPC raw spectra; zeroes are suppressed  */
 /********************************************/
 
 
 DO i = 1 TO 3;
   IF I_Posxl(i) ^= 0 THEN $anal(PosXL(i),I_PosXL(i));
   IF I_Posxr(i) ^= 0 THEN $anal(PosXR(i),I_PosXR(i));
   IF I_PosYO(i) ^= 0 THEN $anal(PosYO(i),I_PosYO(i));
   IF I_PosYU(i) ^= 0 THEN $anal(PosYU(i),I_PosYU(i));
 END; /* DO I = 1 TO 3 .. */
 
 /************************************************/
 /* Accumulate evaluated spectra for the 3 MWPCs */
 /************************************************/
 DO i = 1 TO 3; /* Two position detectors */
   R_Posx(i) = 999; R_Posy(i)=999; /* invalid start suppresses 0 */
   B_Pos_X(i) = '0'B; B_Pos_Y(i) = '0'B; b_pos_xy(i) = '0'b;
   /*-----------------------------*/
   /* Check raw data for validity */
   /*-----------------------------*/
   IF (I_Posxl(i) > I_MINTDCVALUE & I_Posxl(i) < I_MAXTDCVALUE) &
      (I_Posxr(i) > I_MINTDCVALUE & I_Posxr(i) < I_MAXTDCVALUE) THEN DO;
     $anal(PosXSum(i),I_PosXL(i) + I_PosXR(i));
     IF $AC(PosXSum(i),1) THEN DO;
       B_Pos_X(i) = '1'B;
       R_PosX(i) = (I_PosXr(i) - I_PosXl(i) ) * r_posfactor ;
       $anal(PosX(i),FLOOR(R_PosX(i)));
     END; /* IF $AC... */
   END; /* IF I_PosXL(i)... */
   /*-------------------------------------------------*/
   /* Repeat procedure for the vertical beam position */
   /*-------------------------------------------------*/
   IF (I_PosYO(i) > I_MINTDCVALUE & I_PosYO(i) < I_MAXTDCVALUE) &
      (I_PosYU(i) > I_MINTDCVALUE & I_PosYU(i) < I_MAXTDCVALUE) THEN DO;
     $anal(PosYSum(i),I_PosYO(i) + I_PosYU(i));
     IF $AC(PosYSum(i),1) THEN DO;
       B_Pos_Y(i) = '1'B;
       R_PosY(i) = (i_PosYO(i) - I_PosYU(i) ) * r_posfactor ;
       $anal(PosY(i),FLOOR(R_PosY(i)));
     END; /* IF $AC... */
   END; /* IF I_PosYo(i)... */
 
   IF B_Pos_X(i) & B_Pos_Y(i) THEN DO; /* valid x,y position signal  */
      $anal(POSXY(i),floor(R_POSX(i) ),floor(R_POSY(i) ) );
   END;
 END; /* DO i = 1 TO 3 .. */
 /***************************/
 /* music - RAW SPECTRA */
 /***************************/
 DO I = 1 TO 4;
    IF I_E(I) ^= 0 & I_E(I) < 4090 THEN DO;
       $anal( E(I), I_E(I) );
     END;
 END;
 $ENDEVT;
 $ENDANL;