Newer
Older
STAging / scripts / STLibrary / STPositions.py
#!/usr/bin/env python
"""
STPositions.py: retrieve TT and IT sector positions (previously saved in an ntuple).
"""

__author__  = "Elena Graverini"
__email__   = "elena.graverini@cern.ch"
__version__ = "1.0"
__date__    = "09/01/2015"


import sys, os
import pickle
import ROOT as r
from STChannelID import *
from TTModules import *

def retrieveSTPositions(tracker, filename, verbose=False):
    f = r.TFile(filename, 'read')
    t = f.Get(tracker+'HitEfficiencyTuple/SectorPositions')
    positions = {}
    if verbose:
        for sector in t:
            print STNames().uniqueSectorName(STChannelID(int(sector.sectorID)))
            for (i,x) in enumerate(sector.sensor_x):
                print i, x, sector.sensor_y[i], sector.sensor_z[i]
    for sector in t:
        name = STNames().uniqueSectorName(STChannelID(int(sector.sectorID)))
        positions[ name ] = {}
        xm, ym, zm = 0., 0., 0.
        for (i,x) in enumerate(sector.sensor_x):
            positions[ name ][ i ] = ( x, sector.sensor_y[i], sector.sensor_z[i] )
            xm += x
            ym += sector.sensor_y[i]
            zm += sector.sensor_z[i]
        positions[ name ][ 'average' ] = ( xm/len(sector.sensor_x), ym/len(sector.sensor_x), zm/len(sector.sensor_x) )
    return positions

def savePositionsToPickle(tracker, filename, verbose=False):
    positions = retrieveSTPositions(tracker, filename, verbose)
    filename = filename.split('/')[-1]
    path = os.path.abspath(__file__).split("Scripts")[0] + "Pickle/"
    output = open(path+filename.replace('.root','-%spositions.pkl'%tracker), 'wb')
    pickle.dump(positions, output)
    output.close()

def loadPositionsFromPickle(picklefile):
    f = open(picklefile)
    positions = pickle.load(f)
    f.close()
    return positions

def TTHalfModuleAvgPosition(halfModuleId, positions):
    uLayer, region, moduleNum, position = locateTTHalfModule(halfModuleId)
    index = 0
    if 'b' in position:
        index = 1
    sectors = TTModulesMap().dictOfHalfModules[uLayer]['Region'+region][moduleNum][index].sectors
    xm, ym, zm = 0., 0., 0.
    for uName in sectors:
        xm += positions[uName]['average'][0]
        ym += positions[uName]['average'][1]
        zm += positions[uName]['average'][2]
    return ( xm/len(sectors), ym/len(sectors), zm/len(sectors) )