/search.css" rel="stylesheet" type="text/css"/> /search.js">
00001 #!/usr/bin/env python 00002 ''' 00003 AmC Data 00004 Usage: 00005 nuwa.py --no-history -A "0.1*s" -n -1 -m"Quickstart.EH1Tables" -m"Quickstart.Calibrate" -m"Quickstart.CalculateCalibStats" -m"Quickstart.Reconstruct" -m"MuonTagging.MuonTagLoose" -m"CalibrationTagging.AmCTag" -m"CalibrationTagging.AmCData" -o output.root input.root 00006 Help: 00007 nuwa.py -m"CalibrationTagging.AmCData -h" 00008 00009 Created By: tsang@caltech.edu 2011/08/22 00010 Based on: ADCoincData.py by zhang@caltech.edu 00011 ''' 00012 00013 from UserTagging.UserTaggingAlg import UserTaggingAlg 00014 from Tagger.DataHelpers import RecDataHelper, CalibDataHelper 00015 from Tagger.DataHelpers import GenDataHelper, SimDataHelper 00016 00017 from GaudiPython import SUCCESS, FAILURE 00018 from GaudiPython import gbl 00019 import GaudiKernel.SystemOfUnits as units 00020 00021 ServiceMode = gbl.ServiceMode 00022 00023 # =========================================== 00024 class AmCData(UserTaggingAlg): 00025 'Coincidence Data for AD coincidence events' 00026 00027 def __init__(self, name): 00028 UserTaggingAlg.__init__(self, name) 00029 00030 self.runStartTime = None 00031 self.isSimulation = False 00032 00033 # ------------------------------------------- 00034 def initTagList(self): 00035 myTag = self.addTag('/Event/Tag/Calib/AmC', '').setBaseHeader('/Events/Rec/AdSimple') 00036 myData = myTag.addData('/Event/Tag/Calib/AmC' , '/Event/Data/Calib/AmC') 00037 myData.addFloat('ePrompt' , 'xPrompt' , 'yPrompt' , 'zPrompt' , 00038 'eDelayed', 'xDelayed', 'yDelayed', 'zDelayed', 'deltaT_us') 00039 00040 # ------------------------------------------- 00041 def check(self, evt): 00042 00043 tagHeader = evt['/Event/Tag/Calib/AmC'] # '/Event/Tag/Calib/AmC' == tagPath 00044 if not tagHeader: 00045 return 00046 00047 myData = self.getTag('/Event/Tag/Calib/AmC').getData('/Event/Tag/Calib/AmC') 00048 self.SaveAmCData(myData, tagHeader) 00049 self.tagIt('/Event/Tag/Calib/AmC') 00050 return SUCCESS 00051 00052 # ------------------------------------------- 00053 def SaveAmCData(self, myData, tagHeader): 00054 ''' 00055 Keyword arguments: 00056 myData -- the Data object defined in UserTagging.Models 00057 tagHeader -- the AD coincidence UserTag object 00058 ''' 00059 00060 savedRecHdrs = tagHeader.inputHeaders() 00061 promptRecHdr = savedRecHdrs[0] 00062 delayedRecHdr = savedRecHdrs[1] 00063 00064 # Don't process SAB data 00065 #if(promptRecHdr.context().GetSite() == Site.kSAB): 00066 # return 00067 00068 if promptRecHdr == None: 00069 print 'promptRecHdr == None' 00070 return FAILURE 00071 if delayedRecHdr == None: 00072 print 'delayedRecHdr == None' 00073 return FAILURE 00074 00075 promptRecResult = promptRecHdr.recTrigger() 00076 delayedRecResult = delayedRecHdr.recTrigger() 00077 00078 # Position-related info 00079 pRecPosStat = promptRecResult.positionStatus() 00080 pRecX = promptRecResult.position().x() 00081 pRecY = promptRecResult.position().y() 00082 pRecZ = promptRecResult.position().z() 00083 myData.set('xPrompt',pRecX) 00084 myData.set('yPrompt',pRecY) 00085 myData.set('zPrompt',pRecZ) 00086 dRecPosStat = delayedRecResult.positionStatus() 00087 dRecX = delayedRecResult.position().x() 00088 dRecY = delayedRecResult.position().y() 00089 dRecZ = delayedRecResult.position().z() 00090 myData.set('xDelayed',dRecX) 00091 myData.set('yDelayed',dRecY) 00092 myData.set('zDelayed',dRecZ) 00093 00094 # Energy-related info 00095 pRecEStat = promptRecResult.energyStatus() 00096 pRecE = promptRecResult.energy() 00097 pRecE *= 184./160. 00098 myData.set('ePrompt',pRecE) 00099 dRecEStat = delayedRecResult.energyStatus() 00100 dRecE = delayedRecResult.energy() 00101 dRecE *= 184./160. 00102 myData.set('eDelayed',dRecE) 00103 00104 # Time-related info 00105 deltaT = gbl.TimeStamp( delayedRecResult.triggerTime() ) 00106 deltaT.Subtract( promptRecResult.triggerTime() ) 00107 myData.set('deltaT_us',deltaT.GetSeconds() * 1e6) 00108 00109 # Calibstats 00110 # nPERMS = calibStats.get('nPERMS').value() 00111 # Co60Data.set('nPERMS_co60',nPERMS) 00112 # nPESum = calibStats.get('nPESum').value() 00113 # Co60Data.set('nPESum_co60',nPESum) 00114 00115 ##### Job Configuration for nuwa.py ######################################## 00116 options = None 00117 00118 def configure(argv=[]): 00119 """Configuration with command line arguments""" 00120 global options 00121 from optparse import OptionParser 00122 00123 parser = OptionParser() 00124 parser.add_option('--simulation', 00125 dest='isSimulation', 00126 action='store_true', default=False, 00127 help='flag for simulation files (save extra gen/truth info)') 00128 (options, args) = parser.parse_args(args=argv) 00129 00130 def run(app): 00131 from DybPython.Tools import mapify 00132 #app.ExtSvc += ["CoordSysSvc"] 00133 00134 myAlg = AmCData("AmCData") 00135 myAlg.isSimulation = options.isSimulation 00136 app.addAlgorithm(myAlg)