def VariabilityIndex(self): LcOutPath = self.LCfolder + self.config['target']['name'] utils._log('Computing Variability index ') self.config['Spectrum']['FitsGeneration'] = 'no' # ValueDC = self.GetDCValue() ResultDicDC = utils.ReadResult(self.config) LogL1 = [] LogL0 = [] Time = [] for i in xrange(self.Nbin): CurConfig = get_config(self.configfile[i]) #Read the result. If it fails, it means that the bins has not bin computed. A warning message is printed try : ResultDic = utils.ReadResult(CurConfig) except : print "WARNING : fail reading the config file : ",CurConfig print "Job Number : ",i print "Please have a look at this job log file" continue # LogL1.append(ResultDic.get("log_like")) #Update the time and time error array Time.append((ResultDic.get("tmax")+ResultDic.get("tmin"))/2.) ############################################################## # Compute the loglike value using the DC flux or prefactor ############################################################## # Create one obs instance CurConfig['Spectrum']['FitsGeneration'] = 'no' _,Fit = GenAnalysisObject(CurConfig,verbose=0)#be quiet Fit.ftol = float(self.config['fitting']['ftol']) #Spectral index management! utils.FreezeParams(Fit, self.srcname, 'Index', -self.config['LightCurve']['SpectralIndex']) LogL1.append(-Fit.fit(0,optimizer=CurConfig['fitting']['optimizer'])) Model_type = Fit.model.srcs[self.srcname].spectrum().genericName() if (Model_type == 'PowerLaw') : utils.FreezeParams(Fit, self.srcname, 'Prefactor', utils.fluxNorm(ResultDicDC['Prefactor'])) if (Model_type == 'PowerLaw2') : utils.FreezeParams(Fit, self.srcname, 'Integral', utils.fluxNorm(ResultDicDC['Integral'])) LogL0.append(-Fit.fit(0,optimizer=CurConfig['fitting']['optimizer'])) Can = _GetCanvas() TgrDC = ROOT.TGraph(len(Time),np.array(Time),np.array(LogL0)) TgrDC.Draw("ALP*") TgrDC = ROOT.TGraph(len(Time),np.array(Time),np.array(LogL0)) TgrDC.SetMarkerColor(2) TgrDC.Draw("PL*") #Save the canvas in the LightCurve subfolder Can.Print(LcOutPath+'_VarIndex.eps') Can.Print(LcOutPath+'_VarIndex.C') print print "TSvar = ",2*(sum(LogL1)-sum(LogL0)) print "NDF = ",len(LogL0)-1 print "Chi2 prob = ",ROOT.TMath.Prob(2*(sum(LogL1)-sum(LogL0)),len(LogL0)-1)
def ChangeModel(Fit, E1, E2, name, Pref, Gamma): """Change the spectral model of a source called name to allow a fit between E1 and E2 If the spectral model is PowerLaw, the prefactor is updated if not the model is change to PowerLaw. The index is frozen in all cases""" Eav = utils.GetE0(E1, E2) # Set Parameters Fit.logLike.getSource(name).getSrcFuncs()['Spectrum'].getParam('Prefactor').setBounds(1e-5,1e5) Fit.logLike.getSource(name).getSrcFuncs()['Spectrum'].getParam('Prefactor').setScale(utils.fluxScale(Pref)) Fit.logLike.getSource(name).getSrcFuncs()['Spectrum'].getParam('Prefactor').setValue(utils.fluxNorm(Pref)) Fit.logLike.getSource(name).getSrcFuncs()['Spectrum'].getParam('Index').setBounds(-5,0) Fit.logLike.getSource(name).getSrcFuncs()['Spectrum'].getParam('Index').setValue(Gamma) Fit.logLike.getSource(name).getSrcFuncs()['Spectrum'].getParam('Index').setFree(0) Fit.logLike.getSource(name).getSrcFuncs()['Spectrum'].getParam('Scale').setValue(Eav) Fit.logLike.getSource(name).getSrcFuncs()['Spectrum'].getParam('Scale').setBounds(20,3e6) return Fit