1+ package org.jlab.clas.timeline.analysis
2+ import java.util.concurrent.ConcurrentHashMap
3+ import org.jlab.groot.data.TDirectory
4+ import org.jlab.groot.data.GraphErrors
5+ import org.jlab.clas.timeline.fitter.ALERTFitter
6+
7+ class alert_atof_tdc {
8+
9+ def data = new ConcurrentHashMap ()
10+
11+ def processRun (dir , run ) {
12+
13+ data[run] = [run :run]
14+ def trigger = dir. getObject(' /TRIGGER/bits' )
15+ def reference_trigger_bit = 0
16+ data[run]. put(' bits' , trigger)
17+ (0 .. < 720 ). collect{index ->
18+ int sector = index / (12 * 4 );
19+ int layer = (index % (12 * 4 )) / 12 ;
20+ int component = index % 12 ;
21+ def file_index = ' ' ;
22+ if (component <= 10 ) file_index = String . format(' sector%d_layer%d_component%d_order0' , sector, layer, component)
23+ else file_index = String . format(' sector%d_layer%d_component%d_order1' , sector, layer, component-1 )
24+ def h1 = dir. getObject(String . format(' /ALERT/TDC_%s' , file_index))
25+ data[run]. put(String . format(' atof_tdc_%s' , file_index), h1)
26+ def f1 = ALERTFitter . tdcfitter(h1)
27+ data[run]. put(String . format(' fit_atof_tdc_%s' , file_index), f1)
28+ data[run]. put(String . format(' peak_location_atof_tdc_%s' , file_index), f1. getParameter(1 ))
29+ data[run]. put(String . format(' sigma_atof_tdc_%s' , file_index), f1. getParameter(2 ))
30+ data[run]. put(String . format(' integral_per_trigger_atof_tdc_%s' , file_index), Math . sqrt(2 * 3.141597f ) * f1. getParameter(0 ) * f1. getParameter(2 )/ trigger. getBinContent(reference_trigger_bit) )
31+ }
32+ }
33+
34+
35+
36+ def write () {
37+
38+ TDirectory out = new TDirectory ()
39+ out. mkdir(' /timelines' )
40+ [' peak_location' , ' sigma' , ' integral_per_trigger' ]. each{variable ->
41+ (0 .. < 15 ). collect{sector ->
42+ (0 .. < 4 ). collect{layer ->
43+ def names = []
44+ (0 .. < 12 ). collect{component ->
45+ def file_index = ' '
46+ if (component <= 10 ) file_index = String . format(' sector%d_layer%d_component%d_order0' , sector, layer, component)
47+ else file_index = String . format(' sector%d_layer%d_component%d_order1' , sector, layer, component-1 )
48+ names << String . format(' atof_tdc_%s' , file_index)
49+ }
50+ names. each{ name ->
51+ def gr = new GraphErrors (name)
52+ gr. setTitle(" ATOF TDC peak " + variable. replace(' _' , ' ' ))
53+ gr. setTitleY(" ATOF TDC peak " + variable. replace(' _' , ' ' ))
54+ gr. setTitleX(" run number" )
55+ data. sort{it. key}. each{run ,it ->
56+ out. mkdir(' /' + it. run)
57+ out. cd(' /' + it. run)
58+ out. addDataSet(it[name])
59+ out. addDataSet(it[' fit_' + name])
60+ gr. addPoint(it. run, it[variable + ' _' + name], 0 , 0 )
61+ }
62+ out. cd(' /timelines' )
63+ out. addDataSet(gr)
64+ }
65+ out. writeFile(String . format(' alert_atof_tdc_%s_sector%d_layer%d.hipo' , variable, sector, layer))
66+ }
67+ }
68+ }
69+ }
70+ }
0 commit comments