~vpec/maus/tof_calib_read

« back to all changes in this revision

Viewing changes to workers/Noise/ReadCellNoiseFile.py

  • Committer: tunnell
  • Date: 2010-09-20 10:52:02 UTC
  • Revision ID: tunnell@itchy-20100920105202-ce4w9jm59zvgnsxq
moving stuff from tucs

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# ReadCellNoiseFile.py
 
2
# Class for reading cell noise from ntuple
 
3
# Author: Brian Martin (brian.thomas.martin@cern.ch)
 
4
from src.ReadGenericCalibration import *
 
5
from src.region import *
 
6
 
 
7
class ReadCellNoiseFile(ReadGenericCalibration):
 
8
    '''Class to read cell noise values from calibration ntuple'''
 
9
 
 
10
    def __init__(self,processingDir='/afs/cern.ch/user/t/tilecali/w0/ntuples/ped'):
 
11
        self.processingDir = processingDir
 
12
        self.ftDict = {} # Each element is a [TTree, TFile]
 
13
        self.type='physical'
 
14
        self.gainStr = ['LGLG','LGHG','HGLG','HGHG','HG--','--HG']
 
15
        self.part2side = [-1,0,1,0,1] # [AUX,LBA,LBC,EBA,EBC]
 
16
        
 
17
    def get_index(self, side, mod, samp, tower, gain):
 
18
        return side *64*4*17*6\
 
19
            + mod      *4*17*6\
 
20
            + samp       *17*6\
 
21
            + tower         *6\
 
22
            + gain
 
23
 
 
24
    def addTree(self,runNumber):
 
25
            f, t = self.getFileTree('RawCh_NoiseCalib_%s_%s.root' % (runNumber,'Ped'), 'RawCh_NoiseCalib')
 
26
            if [f, t] == [None, None]:
 
27
                f, t = self.getFileTree('RawCh_NoiseCalib_%s_%s.root' % (runNumber,'Phys'), 'RawCh_NoiseCalib')
 
28
            if [f, t] == [None, None]:
 
29
                print 'File missing for run: ',runNumber
 
30
                return False
 
31
            else:
 
32
                self.ftDict[runNumber] = [f, t]
 
33
            
 
34
            return True
 
35
 
 
36
    def ProcessStart(self):
 
37
        pass
 
38
        
 
39
    def ProcessStop(self):
 
40
        pass
 
41
        
 
42
    def ProcessRegion(self, region):
 
43
        newevents = set()
 
44
        # only interested in cell level
 
45
        if '_t' not in region.GetHash():
 
46
            for event in region.GetEvents():
 
47
                if event.runType != 'staging':
 
48
                    newevents.add(event)
 
49
            region.SetEvents(newevents)
 
50
            return
 
51
        # check if Ped event exists (if so, use them). if staging events exist, convert to ped
 
52
        for event in region.GetEvents():
 
53
            if event.runType == 'Ped':
 
54
                if self.addTree(event.runNumber):
 
55
                    newevents.add(event)
 
56
            if event.runType == 'staging':
 
57
                if self.addTree(event.runNumber):
 
58
                    newevents.add(Event('Ped', event.runNumber, event.data, event.time))
 
59
        
 
60
        for event in newevents:
 
61
            # Get data from noise tree
 
62
            [f, t] = self.ftDict[event.runNumber]
 
63
            t.GetEntry(0) # ntuples have run info stored as single event
 
64
            # Get indices 
 
65
            [part, mod, samp, tower] = region.GetNumber()
 
66
            for gain in xrange(6):
 
67
                index = self.get_index(self.part2side[part], mod - 1, samp, tower, gain)
 
68
                event.data['cellenergy'+self.gainStr[gain]]  =  t.ecell_av[index]
 
69
                event.data['cellnoise'+self.gainStr[gain]]   =  t.ecell_rms[index]
 
70
           
 
71
        region.SetEvents(newevents)