This example shows a simple pulse processing code example.
*FORMATS !############################################################## grt[1:63] (e1,e2) ! Read GRT4 energy value from MWD posxy[255] (x,y,nstep) ! Position table fadcs[260:350] (pulse(250)) ! GRT4 (14 bits 80Mhz) *DATA !################################################################ gatemap 2D coincidence[512,512] (181 155 186 160 198 148 203 132 189 125 182 136) valuearray pulse[512] ! Initialise pulseshape array valuearray grtenergies[1:37] ! Initialise energy array -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 valuearray grtbases[1:37] ! Initialise base array -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 *SPECTRA !############################################################## fadchiti 128 32 ! FADC hit pattern fadchito 128 32 ! FADC hit pattern grtid 256 32 ! GRT ID foldf 128 32 ! FADC fold (should be 1) foldgrt 128 32 ! Fold grt multge 128 32 ! Segment multiplicity gehighi[1:40] 8192 32 ! Energy grtenergyi[1:40] 8192 32 ! Energy from grt4 grttot 8192 32 ! ============ Pulse Shapes ================ pulseshape[1:40] 512 2D 32 ! Shapes pulses[1:37] 256 32 ! ============ Position Table ============== posx 4096 32 ! x position (ungated) posy 4096 32 ! y position (ungated) position 128 2D 32 ! Raw position matrix *COMMANDS !############################################################# !------------------------------------------------------------------- ! Reinitialise the arrays each event !------------------------------------------------------------------- doloop loop1 from 1 to 37 step 1 { grtenergies(loop1) = -1 } !------------------------------------------------------------------- ! Increment the position matrix: density of photon interaction !------------------------------------------------------------------- inc posx(posxy.x) ! Position x (vertical) inc posy(posxy.y) ! Position y (horizontal) posxx = (posxy.x/20) ! Step corresponds to the scan step posyy = (posxy.y/20) ! inc position(posxx,posyy) !------------------------------------------------------------------- ! Now let us look at the data .... !------------------------------------------------------------------- createlist fadclist from fadcs mult = number(fadclist) inc foldf(mult) loopif $f = fadclist valid { mult = 0 energy = 0 adcvalue = 0 numfadc = group($f) numfadc = numfadc - 259 ! Renumber 1->37 numbase = numfadc inc fadchiti(numfadc) ! User routine to calculate energy ... !------------------------------------------------------------------- exec fadc_12bit $f numfadc energy init 0 !------------------------------------------------------------------- inc fadchito(numfadc) ! Output hit pattern if numbase lt 37 { doloop loop1 from 1 to 250 step 1 ! Generate pulse histogram { a = $f.pulse[loop1] a = ((a/15)+50) inc pulseshape(loop1,a) indexed numbase set pulses(loop1) indexed numbase = a } } grtbases(numbase) = adcvalue if numfadc le 37 { inc gehighi(energy) indexed numfadc } } ! Close main loop multgrt = 0 createlist grtlist from grt multgrt = number(grtlist) inc foldgrt(multgrt) loopif $g = grtlist valid { groupno = group($g) groupno = groupno - 3 inc grtid(groupno) temp = $g.e2 / 4 if temp gt 5 ! Arbitrary 0 cutoff { inc grtenergyi(temp) indexed groupno ! Raw energu grtenergies(groupno) = temp ! Store the energies } else { grtenergies(groupno) = 0 ! Store the energies } } ! ======================================================== ! ============ Now lets Analyse the Data ================= ! ======================================================== mult = 0 doloop loop1 from 1 to 36 step 1 { temp = grtenergies(loop1) if temp ge 5 { mult = mult + 1 hitsegment = loop1 inc grttot(temp) } } inc multge(mult) ! Increment segment multiplicity end *RUNFILES !########################################################### DISC /net/npr3/d1/CALIB/Run6_0 *FINISH !#############################################################