static void Main(string[] args) { WriteLine("Finding the files"); var backgroundEvents = Files.GetJZ(2).Select(e => e.Data); //var signalHV125pi15Events = Files.Get125pi15(); //var signalHV125pi40Events = Files.Get125pi40(); var signalHV600pi100Events = Files.Get600pi150lt9m(); //var signalGet200pi25lt5mEvents = Files.Get200pi25lt5m(); // // Do a simple cut training here // var t = TrainingIQueriable(signalHV600pi100Events, true) .AsSignal("HV600pi100") .Background(TrainingIQueriable(backgroundEvents, false), "J2Z") .IgnoreVariables(p => p.lowestPtTrack); var mCuts = t.AddMethod(ROOTNET.Interface.NTMVA.NTypes.EMVA.kCuts, "SimpleCuts") .Option("!H:V:FitMethod=MC:EffSel:SampleSize=200000:VarTransform=Decorrelate") .ParameterOption(p => p.logR, "VarProp", "FSmart") .ParameterOption(p => p.nTracks, "VarProp", "FSmart") .ParameterOption(p => p.lowestPtTrack, "VarProp", "FSmart"); var mMVA = t.AddMethod(ROOTNET.Interface.NTMVA.NTypes.EMVA.kBDT, "SimpleBDT") .Option("MaxDepth=3"); t.Train("VerySimpleTraining"); // Lets make a measurement of the efficiency for the standard cut. var effResults = new FutureTFile(Path.Combine(FileInfoUtilities.FindDirectoryWithFileMatching("*.sln").FullName,"trainingResults.root")); var stdCutVale = CalcEff(effResults.mkdir("std"), td => (td.logR > 1.2 && td.nTracks == 0) ? 1.0 : 0.0, 0.5, TrainingIQueriable(backgroundEvents, false), TrainingIQueriable(signalHV600pi100Events, true)); // Next, do it with a reader #if false var r = new ROOTNET.NTMVA.NReader(); var s = new FileInfo("C:\\Users\\gordo\\Documents\\Code\\calratio2015\\JetCutStudies\\SimpleJetCutTraining\\bin\\x86\\Debug\\weights\\VerySimpleTraining_SimpleCuts.weights.xml"); float[] logR = new float[2]; float[] nTracks = new float[2]; r.AddVariable("logR".AsTS(), logR); r.AddVariable("nTracks".AsTS(), nTracks); r.BookMVA("SimpleCuts".AsTS(), s.FullName.AsTS()); Expression<Func<TrainingData, double>> simpleCutsReader = tv => TMVAReaders.TMVASelectorSimpleCutsTest(r, tv.logR, tv.lowestPtTrack, stdCutVale.Value); #else Expression<Func<TrainingData, double>> simpleCutsReader = tv => TMVAReaders.TMVASelectorSimpleCuts(tv.logR, tv.nTracks, 0.72); #endif var simpleCutValue = CalcEff(effResults.mkdir("SimpleCuts"), simpleCutsReader, 0.5, TrainingIQueriable(backgroundEvents, false), TrainingIQueriable(signalHV600pi100Events, true)); // Next, we need to get the MVA and figure out the efficiency. Expression<Func<TrainingData, double>> simpleMVAReader = tv => TMVAReaders.TMVASelectorSimpleBDT(tv.logR, tv.nTracks); var simpleBDTValue = CalcEff(effResults.mkdir("SimpleBDT"), simpleMVAReader, 0.99999, TrainingIQueriable(backgroundEvents, false), TrainingIQueriable(signalHV600pi100Events, true)); // Write out everything effResults.Write(); effResults.Close(); //Emit(); }
public void FutureFileEmpty() { // Create an empty TFile, make sure that is good! var f = new FileInfo("FutureFileEmpty.root"); if (f.Exists) { f.Delete(); } var ftf = new FutureTFile(f); ftf.Write(); ftf.Close(); f.Refresh(); Assert.IsTrue(f.Exists); }
/// <summary> /// Make generic plots of the signal or background /// </summary> /// <param name="args"></param> /// <remarks> /// TODO: Would studies of efficiencies here be better served by splitting into forward and central eta regions? /// TODO: What is going on with the jetPT? /// TODO: What is eta distribution of the jets that make it through, in particular with NTrack = 0? /// It could be those are far forward and thus have no tracks. /// TODO: Should any of these plots look at stuff in the way that Heather has (2D heat maps for cuts)? /// </remarks> static void Main(string[] args) { var opt = CommandLineUtils.ParseOptions<Options>(args); Console.WriteLine("Finding the files"); // All the background samples have to be done first. var backgroundSamples = SampleMetaData.AllSamplesWithTag("background") .Select(info => Tuple.Create(Files.GetSampleAsMetaData(info), info.NickName)) .ToArray(); var backgroundEvents = Files.GetAllJetSamples().Select(e => e.Data); // All the signal we are going to make plots of. var signalSamples = SampleMetaData.AllSamplesWithTag("signal") .Select(info => Tuple.Create(Files.GetSampleAsMetaData(info), info.NickName)) .ToArray(); // Output file Console.WriteLine("Opening output file"); using (var outputHistograms = new FutureTFile("GenericPerformancePlots.root")) { // First, lets do a small individual thing for each individual background sample. var bkgDir = outputHistograms.mkdir("background"); Console.WriteLine("Making background plots."); foreach (var background in backgroundSamples) { BuildSuperJetInfo(background.Item1.Select(md => md.Data)) .PlotBasicDataPlots(bkgDir.mkdir(background.Item2), "all"); } // Do a quick study for each signal sample, using all the backgrounds at once to make // performance plots. Console.WriteLine("Making the signal/background plots."); foreach (var sample in signalSamples) { var status = PerSampleStudies(backgroundEvents, sample.Item1.Select(md => md.Data), outputHistograms.mkdir(sample.Item2)); DumpResults($"Sample {sample.Item2}:", status); } // Write out the histograms outputHistograms.Write(); } }