108 def totalDecayWidth(self): # mDarkPhoton in GeV
109 """ Total decay width in GeV """
110 #return hGeV*c / cTau(mDarkPhoton, epsilon)
111 tdw = (self.leptonicDecayWidth('e-')
112 + self.leptonicDecayWidth('mu-')
113 + self.leptonicDecayWidth('tau-')
114 + self.hadronicDecayWidth())
116 #print 'Total decay width %e'%(tdw)
120 def cTau(self): # decay length in meters, dark photon mass in GeV
121 """ Dark Photon lifetime in cm"""
122 ctau=hGeV*ccm/self.totalDecayWidth()
123 #print "ctau dp.py %.3e"%(ctau)
124 return ctau #GeV/MeV conversion
129 def findBranchingRatio(self,decayString):
131 if decayString == 'A -> e- e+': br = self.leptonicBranchingRatio('e-')
132 elif decayString == 'A -> mu- mu+': br = self.leptonicBranchingRatio('mu-')
133 elif decayString == 'A -> tau- tau+': br = self.leptonicBranchingRatio('tau-')
134 elif decayString == 'A -> hadrons': br = self.hadronicBranchingRatio()
136 print('findBranchingRatio ERROR: unknown decay %s'%decayString)
141 def allowedChannels(self):
142 print("Allowed channels for dark photon mass = %3.3f"%self.mDarkPhoton)
143 allowedDecays = {'A -> hadrons':'yes'}
144 if self.mDarkPhoton > 2.*mass('e-'):
145 allowedDecays.update({'A -> e- e+':'yes'})
146 print("allowing decay to e")
147 if self.mDarkPhoton > 2.*mass('mu-'):
148 allowedDecays.update({'A -> mu- mu+':'yes'})
149 print("allowing decay to mu")
150 if self.mDarkPhoton > 2.*mass('tau-'):
151 allowedDecays.update({'A -> tau- tau+':'yes'})
152 print("allowing decay to tau")
157 def scaleNEventsIncludingHadrons(self,n):
158 """ Very simple patch to take into account A' -> hadrons """
159 brh = self.hadronicBranchingRatio()
162 if self.mDarkPhoton > 2.*mass('c'):
167 increase = brh*visible_frac
169 return n*(1. + increase)