From 4bb08c7f73992fe07ff5845b21c376fa7e266b8d Mon Sep 17 00:00:00 2001
From: Baptiste LENIAU <baptiste.leniau@subatech.in2p3.fr>
Date: Mon, 7 Nov 2016 13:46:21 +0100
Subject: [PATCH] Add the possibility to choose the number of training events

---
 Utils/XSM/MLP/Generate/Generate_XSM.cxx       |  20 ++++++++++++------
 Utils/XSM/MLP/Generate/Train_XS.cxx           |  12 ++++++++---
 .../XSM/MLP/Generate/include/Generate_XSM.hxx |   2 +-
 Utils/cgui/html/__init__.pyc                  | Bin 216 -> 210 bytes
 Utils/cgui/html/backend.pyc                   | Bin 1351 -> 1327 bytes
 Utils/cgui/html/htmlHelper.pyc                | Bin 7633 -> 7513 bytes
 Utils/cgui/html/model.pyc                     | Bin 3114 -> 3078 bytes
 7 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/Utils/XSM/MLP/Generate/Generate_XSM.cxx b/Utils/XSM/MLP/Generate/Generate_XSM.cxx
index 72c1b525d..f241ca401 100644
--- a/Utils/XSM/MLP/Generate/Generate_XSM.cxx
+++ b/Utils/XSM/MLP/Generate/Generate_XSM.cxx
@@ -97,10 +97,14 @@ int main(int argc, char ** argv){
 	}
 	ProgressBar(1,1);
 
-
 	FillMapName();
-	DumpInputNeuron("_tmp/include_Train_XS/TrainingInput.root");
-	Generate_tmva_factory_input();
+
+	cout << "Proportion of data to be used for training ? [0-100]" <<endl;
+	double ProportionOfTraining = 0 ;
+	cin >> ProportionOfTraining ;
+		DumpInputNeuron("_tmp/include_Train_XS/TrainingInput.root");
+		Generate_tmva_factory_input(ProportionOfTraining);
+
 	CreateInfoFile();
 
 	cout << "╭─────────────────────────────────────────────────────────────────────╮" << endl; 
@@ -446,14 +450,18 @@ void  FillMapName()
 
 }
 //--------------------------------------------------------------------------------------------------
-void Generate_tmva_factory_input()
+void Generate_tmva_factory_input(double ProportionOfTraining)
 {
+
 	ofstream  InputNetwork("_tmp/include_Train_XS/InputVariables.cxx");
 	for(map<ZAI,string>::iterator it = fMapName.begin() ; it != fMapName.end() ; it++ )
 		InputNetwork <<"factory->AddVariable( \"" << it->second  << "\" , \"" << it->second << "\", \"IsotopicFraction\", 'F' );"<<endl; 
-    InputNetwork <<"factory->AddVariable( \"Time\" , \"Time\"     , \"seconds\", 'F' );"<<endl;
-    InputNetwork.close();
+    InputNetwork <<"factory->AddVariable( \"Time\" , \"Time\"     , \"seconds\", 'F' );"<<endl<<endl;
+
+	ProportionOfTraining /=100;
+    InputNetwork <<"double PropTraining = "<< ProportionOfTraining << endl;
 
+    InputNetwork.close();
 }
 
 //--------------------------------------------------------------------------------------------------
diff --git a/Utils/XSM/MLP/Generate/Train_XS.cxx b/Utils/XSM/MLP/Generate/Train_XS.cxx
index ff19949aa..f54c9d107 100644
--- a/Utils/XSM/MLP/Generate/Train_XS.cxx
+++ b/Utils/XSM/MLP/Generate/Train_XS.cxx
@@ -106,9 +106,15 @@ void Train_XS_Time(int INDICE)
    // Apply additional cuts on the signal and background samples (can be different)
    TCut mycut = ""; // for example: TCut mycut = "abs(var1)<0.5 && abs(var2-0.5)<1";
 
+   Long64_t NEvents   = regTree->GetEntries();
+   Long64_t NTraining = PropTraining * NEvents ; 
+   Long64_t NTesting  = NEvents - NTraining ; 
+
+   std::stringstream Samples_Parameters ;
+   Samples_Parameters <<  "nTrain_Regression=" << NTraining <<":"<< "nTest_Regression=" << NTesting <<":SplitMode=Random:NormMode=NumEvents:!V";
+
    // tell the factory to use all remaining events in the trees after training for testing:
-   factory->PrepareTrainingAndTestTree( mycut, 
-                                        "nTrain_Regression=0:nTest_Regression=0:SplitMode=Random:NormMode=NumEvents:!V" );
+   factory->PrepareTrainingAndTestTree( mycut, Samples_Parameter.str() );
 
    // If no numbers of events are given, half of the events in the tree are used 
    // for training, and the other half for testing:
@@ -122,7 +128,7 @@ void Train_XS_Time(int INDICE)
    // "...:CutRangeMin[2]=-1:CutRangeMax[2]=1"...", where [2] is the third input variable
 
    std::stringstream Name;
-   Name<<   OUTPUT[INDICE];
+   Name <<  OUTPUT[INDICE];
    // Neural network (MLP)                                                                                    
       factory->BookMethod( TMVA::Types::kMLP, Name.str().c_str(), "!H:!V:VarTransform=Norm:NeuronType=tanh:NCycles=20000:HiddenLayers=N,N:TestRate=6:TrainingMethod=BFGS:Sampling=0.3:SamplingEpoch=0.8:ConvergenceImprove=1e-6:ConvergenceTests=15:!UseRegulator" );
 
diff --git a/Utils/XSM/MLP/Generate/include/Generate_XSM.hxx b/Utils/XSM/MLP/Generate/include/Generate_XSM.hxx
index 5057cd3b1..200b25cf9 100644
--- a/Utils/XSM/MLP/Generate/include/Generate_XSM.hxx
+++ b/Utils/XSM/MLP/Generate/include/Generate_XSM.hxx
@@ -68,7 +68,7 @@ void Run_Sequential();
 
 /* PRINT INFO */
 void PrintFinalSteps();
-void Generate_tmva_factory_input();
+void Generate_tmva_factory_input(double ProportionOfTraining);
 
 /* SCRIPT GENERATION */
 void GenerateScript_Parallel(int threads);
diff --git a/Utils/cgui/html/__init__.pyc b/Utils/cgui/html/__init__.pyc
index 21f5311380d76192cd164204a4940c1be178f634..8159a1886485e300be9e536568a2eb68fc16252f 100644
GIT binary patch
delta 55
zcmcb?c!`mN`7<w<kg9ORM2=ErYX$}e{o>@J#FFF;{hZXi%*0ZC$ASX=oc!d(9DQdW
K$Kc?J%ZvcNVi7C=

delta 61
zcmcb_c!QCH`7<w<Q0M>fi5#VxjtmS8`k}?CMaB9h8JYPxIhm>Y0YU!m!TQcVj=@ke
L-aWHq;sPT8U-J{+

diff --git a/Utils/cgui/html/backend.pyc b/Utils/cgui/html/backend.pyc
index fc3f0a6847ee4f86cddf8c19843ba954d21b93c5..0e6798a87b752db8e18843a730a73842305229db 100644
GIT binary patch
delta 190
zcmX@kwVsQE`7<w<kg9ORMvgj0Wh({-2L0mXqQsKq4E>zcyv)Q>eaC_V{ha*d#2kHR
iAIIR}$q6jdn@=$o5v_P~1M_ww4Q?h<o%CdNRs{gG(mMwL

delta 214
zcmZ3_b)1WX`7<w<Q0M>fjU081nhp#M4EmwPsYS*5B^jCdIXRiB`T;@y?!o%bK90dq
jGTuG2WU?QN^yVXsMI>sOT*ADaBukn}QY}51pH%?>&B#HF

diff --git a/Utils/cgui/html/htmlHelper.pyc b/Utils/cgui/html/htmlHelper.pyc
index b5e515edb14b87b70e5f90f020ce9ed8d7b275ec..2510b5a4e48791376c96bd1d9146d525373eba5b 100644
GIT binary patch
delta 902
zcmca;ebb7A`7<w<kg9ORMvhiSWm^UY2L0mXqQsKq4E>zcyv)Q>eaC_V{ha*d#2kHR
zAIIR}$%#VBlW#JfB~q>Y<abOLh*YaQnTzEKk!s~9o3XAWR_$hWHcKX=6|dl6CtmS)
zE)o>G@um?Q#`2rL@LeNbv5=q|v5G$s8xWIc3V$J5?NyPBM5}!#O02o+la0jJ5Nqyc
iHHl_o13`ZCM@eSl728M)6RmjibeYY>I(hOWS$hDL;~<Fu

delta 1026
zcmca<b<vuG`7<w<Q0M>fjU26vn$8Ri4EmwPsYS*5B^jCdIXRiB`T;@y?!o%bK90dq
zGTuG2Wb#Ha<;j;B&yu7=e)1!x3nb}Kp8SLP2}wHSC(E&}Bu&R=PBu#>(zHxI%f+#|
zhvPqKAtt~1EEhYeHtpl%*eu5zN2*Qx_^y$v<(hyRX<F1Ly9u2nG2jA)zmTY-UF0H(
xI%bKIX2)gH%-?)WyqUCslHc4d$xMQl%^RhRNKg*UjPjFJWj2%Mjmc87_5k-DM#=yH

diff --git a/Utils/cgui/html/model.pyc b/Utils/cgui/html/model.pyc
index 88f5e87b3412035d3f5fa06275934bd57de88310..a60ed5e549f50a46c2a4ff8312be46450f579b37 100644
GIT binary patch
delta 279
zcmZ1_(I&yc{F#?aNL4suBZob!vIPSJgMM*xQDRAQhJH?JUS?vczGFdweolUJVvfGE
zk7ID~<cVxjle<{&5u<kVM7DlLVibZ6P3HJWtlG`fIlG88SaNbQcQTO%%T4Cxkp%#v
C30M>W

delta 315
zcmZpZSS7*1{F#?asPljLMh<&cO*;k#2K~_D)S_bjl8ns!oSe*5{eU2U_h5ZzAID%Q
w8SkE1GFgXPa&j~4ebRJnp2t?kNSc<(0UV!5)3LdZvzs(aYDlwS@)K?)0BuQNcmMzZ

-- 
GitLab