CMU - Naomi's secondary event readout file

From GlueXWiki
Revision as of 10:52, 2 July 2013 by Nsjarvis (Talk | contribs) (Created page with "<code> # # EVENT readout list # # Secondary readout list responsible for # getting data from the primary readout list and then # passing it to the Output queue. # # ...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

  1. EVENT readout list
  2. Secondary readout list responsible for
  3. getting data from the primary readout list and then
  4. passing it to the Output queue.
  5. David Abbott, CEBAF 1996
  6. customised NSJ June 2013

readout list ROL2

  1. maximum 128,10 <-original value

maximum 37440, 100 #nchannels = 72 nsamples=128

  1. maximum 144,100 #1 channel, 10 samples


polling event readout


const ADC125_NCHANNELS=72 const ADC125_NSAMPLES=128 # even numbers only const ADC125_MULTI=5 const ADC125_THRES=400 # 4 x (ped + 3 sig) const ADC125_NTHRES=6 #min # consec samples over threshold

  1. pedestal is ~ 60 with sigma 15 to 20 all x 4 - because my decoding programs divide by 4
  2. ped + 5 sig is 60 + 75 = 148 x 4 = 584
  3. ped + 3 sig is 60 + 45 = 105 x 4 = 420


int ii; /*counter - input buffer*/ int x; /*pos in input buffer of start of channel*/

int ok[ADC125_NCHANNELS]; /*array to identify good channels*/ int multi; /*number of good channels */ int count; /*current tally of samples over threshold in current channel*/ int ndata; /*size of data bank to output*/

int ch; /*counter - current adc channel number*/ int isamp; /*counter - sample from current adc channel*/


begin download

 log inform "User Download 2 Executed"

end download

begin prestart

 variable jj, adc_id
 log inform "Entering User Prestart 2"
 init trig source EVENT
 link sync trig source EVENT 1 to ntrig and ntrig_done
 event type 1 then read EVENT 1
 rol->poll = 1;
 log inform "User Prestart 2 executed"

end prestart

begin end

 log inform "User End 2 Executed"

end end

begin pause

 log inform "User Pause 2 Executed"

end pause

begin go

 log inform "Entering User Go 2"
 

end go

begin trigger ntrig

  1. copy event

get event

%%

/*printf("***event_list event length %i \n",EVENT_LENGTH); 
for (ii=-2; ii<2; ii++) {
  printf("input[%i] %i  \n",ii,INPUT[ii]); 
}
*/
if (rol->dabufp != NULL) {          /* Output Pointer should be set by CODA 2.1 ROC */
 /* find out which are good channels */
 multi=0;
 for (ch=0; ch<ADC125_NCHANNELS; ch++) {
   
   ok[ch]=0;     //this channel above threshold
   count=0;  //count consecutive over-threshold samples
   
   x = ch*ADC125_NSAMPLES;
   for (isamp=0; isamp<ADC125_NSAMPLES; isamp++) {
     if ( (INPUT[x+isamp] & 0xfff) > ADC125_THRES) {
       count++;
       if (count>=ADC125_NTHRES) ok[ch]=1;
     } else {
       count=0;
     }
     if (ok[ch]==1) break;
     if ( (INPUT[x+isamp] & 0xfff0000) > ADC125_THRES) {
       count++;
       if (count>=ADC125_NTHRES) ok[ch]=1;
     } else {
       count=0;
     }
         
     if (ok[ch]==1) break;
    
   }
   if (ok[ch]==1) logMsg("  ch %i over threshold\n",ch);
   //if (ok==0) logMsg("  ch %i UNDER threshold\n",ch);
   if (ok[ch]==1) multi++;
 }


 logMsg("                 multiplicity %i\n",multi);


 /* write out event header */
 ndata = 0;
 if (multi >= ADC125_MULTI) ndata = 1 + multi*(1 + ADC125_NSAMPLES);
 *rol->dabufp++ = ndata + 2;    /* event header (event number) */ 
 *rol->dabufp++ = INPUT[-1];    /* event header (event number) */
 *rol->dabufp = ndata;


 printf("output[-2] %i  \n", ndata + 2);
 printf("output[-1] %i  \n",INPUT[-1]);
 printf("output[0] %i  \n", ndata);


 /* now write out good channels */
 if (multi >= ADC125_MULTI) {
   rol->dabufp++;
   *rol->dabufp = multi;
   printf("output[1] %i \n",multi);
   for (ch=0; ch<ADC125_NCHANNELS; ch++) {
     if (ok[ch]==1) {
       rol->dabufp++;
       *rol->dabufp = ch;
 
       x = ch*ADC125_NSAMPLES;
       for (isamp=0; isamp<ADC125_NSAMPLES; isamp++) {
         rol->dabufp++;
         *rol->dabufp = INPUT[x+isamp];
       }
     }  /* end if ok */
   }  /* end for ch */
 }  /* end if multi */


//for (ii=-2;ii<EVENT_LENGTH;ii++) /* Copy event, including Header from Input to Output */ // *rol->dabufp++ = INPUT[ii];


}else{
  printf("ROL2: ERROR rol->dabufp is NULL -- Event lost\n");
}

%%

end trigger

begin done ntrig

end done

begin done

end done

begin status

end status