diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/CMakeLists.txt b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/CMakeLists.txt
deleted file mode 100644
index 9a3151b8fdd55e68f3f8e089ebe5e5f4ee8cad07..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/CMakeLists.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-################################################################################
-# Package: JetFitterCalibUtils
-################################################################################
-
-# Declare the package name:
-atlas_subdir( JetFitterCalibUtils )
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/LinkDef.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/LinkDef.h
deleted file mode 100644
index e19ee3aa34e09cd01f1560267f0a22560e15c247..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/LinkDef.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifdef __CINT__
-
-#pragma link off all globals;
-#pragma link off all classes;
-#pragma link off all functions;
-
-#pragma link C++ class TNeuralDataSet;
-#pragma link C++ class TJetNet;
-#pragma link C++ class TTrainedNetwork;
-
-#endif
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TJetNet.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TJetNet.cxx
deleted file mode 100644
index 3c9eccad9cd56a0fb9997a769036c01efe226c50..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TJetNet.cxx
+++ /dev/null
@@ -1,918 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "TJetNet.h"
-#include "jetnet.h"
-#include "TRandom3.h"
-#include "TTimeStamp.h"
-#include <unistd.h>
-#include <stdio.h>
-#include <cmath>
-#include "TTrainedNetwork.h"
-
-ClassImp( TJetNet )
- 
-//Constructors
-//______________________________________________________________________________
-TJetNet::TJetNet()
-{
-  // Default Constructor
-  mTestSetCnt = 0;
-  mTrainSetCnt = 0;
-  mLayerCount = 0;
-
-  mpLayers = 0;
-
-  mIsInitialized = kFALSE;
-  mInitLocked = kFALSE;
-
-  mpInputTrainSet = 0;
-  mpInputTestSet = 0;
-  mpOutputTrainSet = 0;
-  mpOutputTestSet = 0;
-
-  mEpochs = 0;
-  mCurrentEpoch = 0;
-}
-//______________________________________________________________________________
-TJetNet::TJetNet( Int_t aTestCount, Int_t aTrainCount,
-	 const Int_t aLayersCnt, const Int_t* aLayers )
-{
-  // Creates neural network with aLayersCnt number of layers,
-  // aTestCount number of patterns for the test set,
-  // aTrainCount patterns for the train set.
-  // aLayers contains the information for number of the units in the different layers
-
-  int i;
-  mDebug = kFALSE;
-#ifdef _DEBUG
-  mDebug = kTRUE;
-#endif
-  
-  if( mDebug ){ std::cout << "=====> Entering TJetNet::TJetNet(...)" << std::endl; }
-
-  mTestSetCnt  = aTestCount;
-  mTrainSetCnt = aTrainCount;
-  mLayerCount  = aLayersCnt; // Get the number of layers
-  
-  if( mLayerCount > 0 )
-  {  
-   //Perform deep copy of the array holding Layers count
-    mpLayers = new Int_t[ mLayerCount ];
-    for( i = 0; i < mLayerCount; ++i )
-    {
-      mpLayers[ i ] = aLayers[ i ];
-    }
-  }
-
-  mInputDim = mpLayers[ 0 ];
-  mOutputDim = mpLayers[ mLayerCount - 1 ];
-  mHiddenLayerDim = mLayerCount-2;
-  
-
-  mIsInitialized = kFALSE;
-  mInitLocked = kFALSE;
-
-  mpInputTrainSet  = new TNeuralDataSet( mTrainSetCnt, GetInputDim() );
-  mpInputTestSet = new TNeuralDataSet( mTestSetCnt, GetInputDim() );
-  mpOutputTrainSet = new TNeuralDataSet( mTrainSetCnt, GetOutputDim() );
-  mpOutputTestSet = new TNeuralDataSet( mTestSetCnt, GetOutputDim() );
-  
-  menActFunction=afSigmoid;
-
-  SetEpochs( -1 );
-
-  if( mDebug ){ std::cout << "=====> Leaving TJetNet::TJetNet(...)" << std::endl; }
-}
-//______________________________________________________________________________
-TJetNet::~TJetNet( void )
-{
-  // Default destructor
-  if( mDebug ){ std::cout << "=====> Entering TJetNet::~TJetNet(...)" << std::endl; }
-  delete [] mpLayers;
-  delete mpInputTestSet;
-  delete mpInputTrainSet;
-  delete mpOutputTestSet;
-  delete mpOutputTrainSet;
-  if( mDebug ){ std::cout << "=====> Leaving TJetNet::~TJetNet(...)" << std::endl; }
-}
-//______________________________________________________________________________
-//by Giacinto Piacquadio (18-02-2008)
-TTrainedNetwork* TJetNet::createTrainedNetwork() const
-{
-
-  Int_t nInput=GetInputDim();
-  Int_t nHidden=GetHiddenLayerDim();
-  std::vector<Int_t> nHiddenLayerSize;
-  //  Int_t* nHiddenLayerSize=new Int_t[nHidden];
-
-  for (Int_t o=0;o<nHidden;++o)
-  {
-    nHiddenLayerSize.push_back(GetHiddenLayerSize(o+1));
-  }
-  Int_t nOutput=GetOutputDim();
-
-  std::vector<TVectorD*> thresholdVectors;
-  std::vector<TMatrixD*> weightMatrices;
-
-  for (Int_t o=0;o<nHidden+1;++o)
-  {
-     int sizeActualLayer=(o<nHidden)?nHiddenLayerSize[o]:nOutput;
-     int sizePreviousLayer=(o==0)?nInput:nHiddenLayerSize[o-1];
-     thresholdVectors.push_back(new TVectorD(sizeActualLayer));
-     weightMatrices.push_back(new TMatrixD(sizePreviousLayer,sizeActualLayer));
-  }
-
-  for (Int_t o=0;o<nHidden+1;++o)
-  {
-
-    if (mDebug)
-    if (o<nHidden)
-    {
-      cout << " Iterating on hidden layer n.: " << o << endl;
-    }
-    else
-    {
-      cout << " Considering output layer " << endl;
-    }
-    
-    int sizeActualLayer=(o<nHidden)?nHiddenLayerSize[o]:nOutput;
-
-    for (Int_t s=0;s<sizeActualLayer;++s)
-    {
-      if (o<nHidden)
-      {
-	if (mDebug)
-	cout << " To hidden node: " << s << endl;
-      }
-      else
-      {
-	if (mDebug)
-	cout << " To output node: " << s << endl;
-      }
-      if (o==0)
-      {
-	for (Int_t p=0;p<nInput;++p)
-	{
-	  if (mDebug)
-	  cout << " W from inp nod: " << p << "weight: " <<
-	    GetWeight(o+1,s+1,p+1) << endl;
-	  weightMatrices[o]->operator() (p,s) = GetWeight(o+1,s+1,p+1);
-        }
-      }
-      else
-      {
-	for (Int_t p=0;p<nHiddenLayerSize[o-1];++p)
-	{
-	  if (mDebug)
-	  cout << " W from lay : " << o-1 << " nd: " << 
-	    p << " weight: " <<
-	    GetWeight(o+1,s+1,p+1) << endl;
-	  weightMatrices[o]->operator() (p,s)=GetWeight(o+1,s+1,p+1);
-	}
-      }
-      if (mDebug)
-      cout << " Threshold for node " << s << " : " << 
-	GetThreshold(o+1,s+1) << endl;
-      thresholdVectors[o]->operator() (s) = GetThreshold(o+1,s+1);
-    }
-  }
-
-  TTrainedNetwork* trainedNetwork=
-    new TTrainedNetwork(nInput,
-			nHidden,
-			nOutput,
-			nHiddenLayerSize,
-			thresholdVectors,
-			weightMatrices,
-			menActFunction);
-						
-  return trainedNetwork;
-
-}
-//______________________________________________________________________________
-//by Giacinto Piacquadio (18-02-2008)
-void TJetNet::readBackTrainedNetwork(const TTrainedNetwork* trainedNetwork)
-{
-
-  Int_t nInput=GetInputDim();
-  Int_t nHidden=GetHiddenLayerDim();
-  std::vector<Int_t> nHiddenLayerSize;
-
-  if (trainedNetwork->getnHidden()!=nHidden)
-  {
-    cout << " Network doesn't match.. not loading.." << endl;
-    return;
-  }
-
-  for (Int_t o=0;o<nHidden;++o)
-  {
-    nHiddenLayerSize.push_back(GetHiddenLayerSize(o+1));
-    if (nHiddenLayerSize[o]!=trainedNetwork->getnHiddenLayerSize()[o])
-    {
-      cout << " Network doesn't match... not loading..." << endl;
-      return;
-    }
-  }
-  Int_t nOutput=GetOutputDim();
-
-  if (trainedNetwork->getnInput()!=nInput)
-  {
-    cout << " Network doesn't match... not loading.." << endl;
-    return;
-  }
-
-
-  if (trainedNetwork->getnOutput()!=nOutput)
-  {
-    cout << " Network doesn't match.. not loading.." << endl;
-    return;
-  }
-  
-  //OK, everything matches... can go on...
-  
-  std::vector<TVectorD*> thresholdVectors=trainedNetwork->getThresholdVectors();
-  std::vector<TMatrixD*> weightMatrices=trainedNetwork->weightMatrices();
-  //ownership remains of the TTrainedNetwork
-
-  for (Int_t o=0;o<nHidden+1;++o)
-  {
-    int sizeActualLayer=(o<nHidden)?nHiddenLayerSize[o]:nOutput;
-    int sizePreviousLayer=(o==0)?nInput:nHiddenLayerSize[o-1];
-  
-    for (Int_t s=0;s<sizeActualLayer;++s)
-    {
-      Double_t nodeValue=0.;
-      if (o==0)
-      {
-	for (Int_t p=0;p<nInput;++p)
-	{
-	  mSetWeight(weightMatrices[o]->operator() (p,s),o+1,s+1,p+1);
-        }
-      }
-      else
-      {
-	for (Int_t p=0;p<nHiddenLayerSize[o-1];++p)
-	{
-	  mSetWeight(weightMatrices[o]->operator() (p,s),o+1,s+1,p+1);
-	}
-      }
-      mSetThreshold(thresholdVectors[o]->operator() (s),o+1,s+1);
-    }
-  }      
-  cout << " Successfully read back Trained Network " << endl;
-}
-//______________________________________________________________________________
-  
-void TJetNet::mSetWeight( Double_t weight,Int_t aLayerInd, Int_t aNodeInd, Int_t aConnectedNodeInd )
-{
-  JNINT1.W[ JNINDX( aLayerInd, aNodeInd, aConnectedNodeInd )-1 ]=weight;
-}
-//______________________________________________________________________________
-void TJetNet::mSetThreshold( Double_t threshold, Int_t aLayerInd, Int_t aNodeInd)
-{
-  JNINT1.T[ JNINDX( aLayerInd, aNodeInd, 0 )-1 ]=threshold;
-}
-//______________________________________________________________________________
-void TJetNet::Print( void )
-{
-  // Prints on the screen, information for the neural network
-  Int_t i;
-
-  std::cout << "TJetNet" << std::endl;
-  std::cout << "Number of layers: " << mLayerCount << std::endl;
-
-  for( i = 0; i < mLayerCount; i++ )
-  {
-      std::cout << "\t\tNumber of units in layer " << i << " : " <<  mpLayers[ i ] << std::endl;
-  }
-
-  std::cout << "Epochs: " << GetEpochs() << std::endl;
-  std::cout << "Updates Per Epoch: " << GetUpdatesPerEpoch() << std::endl;
-  std::cout << "Updating Procedure: " << GetUpdatingProcedure() << std::endl;
-  std::cout << "Error Measure: " << GetErrorMeasure() << std::endl;
-  std::cout << "Patterns Per Update: " << GetPatternsPerUpdate() << std::endl;
-  std::cout << "Learning Rate: " << GetLearningRate() << std::endl;
-  std::cout << "Momentum: " << GetMomentum() << std::endl;
-  std::cout << "Initial Weights Width: " << GetInitialWeightsWidth() << std::endl;
-  std::cout << "Learning Rate Decrease: " << GetLearningRateDecrease() << std::endl;
-  std::cout << "Activation Function: " << GetActivationFunction() << std::endl;
-}
-//______________________________________________________________________________
-Double_t TJetNet::Test( void )
-{
-  // Initiate test cycle of the neural network
-  Int_t NRight = 0;
-  Double_t fMeanError = 0.0;
-  Double_t *TMP;
-  Int_t  NPatterns = GetTestSetCnt();
- 
-  for( Int_t iPattern = 0; iPattern < NPatterns; iPattern++ )
-  {
-
-      for( Int_t i = 0; i < GetInputDim(); i++ )
-      {
-	JNDAT1.OIN[ i ] = float ( GetInputTestSet( iPattern, i ) );
-      }
-
-      JNTEST();
-
-      for( Int_t j = 0; j < GetOutputDim(); j++ )
-      {
-	fMeanError+=
-	  std::pow(JNDAT1.OUT[ j ]-float( GetOutputTestSet( iPattern, j )),2)/(float)GetOutputDim();
-      }
-
-      if( mDebug ) std::cout << "Testing [ " << iPattern << " ] - "  << JNDAT1.OIN[ 0 ] 
-			     << " => " << JNDAT1.OUT[ 0 ] << std::endl;
-
-    }
-
-  fMeanError/=2.*NPatterns;
-
-  if (mDebug)
-  std::cout << " Test error: " << fMeanError << endl;
-
-  return fMeanError;
-}
-//______________________________________________________________________________
-Double_t TJetNet::Train( void )
-{
-  // Initiate the train phase for the neural network
-  Int_t NRight = 0;
-  Double_t fMeanError = 0.0;
-  Int_t  NPatterns = GetTrainSetCnt();
-
-  //  cout << " NPatterns is: " << NPatterns << endl;
-
-  Int_t inputDim=GetInputDim();
-  Int_t outputDim=GetOutputDim();
-  Int_t updatesPerEpoch=GetUpdatesPerEpoch();
-  Int_t patternsPerUpdate=GetPatternsPerUpdate();
-  
-  if (updatesPerEpoch*patternsPerUpdate<1./2.*NPatterns) 
-  {
-    cout << "Using only: " << updatesPerEpoch*patternsPerUpdate << 
-        " patterns on available: " << NPatterns << endl;
-  } else if (updatesPerEpoch*patternsPerUpdate>NPatterns) 
-  {
-    cout << " Trying to use " << updatesPerEpoch*patternsPerUpdate << 
-        " patterns, but available: " << NPatterns << endl;
-    return -100;
-  }
-  
-  for( Int_t iPattern = 0; iPattern < updatesPerEpoch*patternsPerUpdate;
-       iPattern++ )
-  {
-    for( Int_t i = 0; i < inputDim; i++ )
-    {
-      JNDAT1.OIN[ i ] = float ( GetInputTrainSet( iPattern, i ) );
-    }
-    
-    for( Int_t j = 0; j < outputDim; j++ )
-    {
-      JNDAT1.OUT[ j ] = float ( GetOutputTrainSet( iPattern, j ) );
-    }
-    JNTRAL();
-  }
-
-  return GetPARJN(8);
-}
-//______________________________________________________________________________
-void TJetNet::writeNetworkInfo(Int_t typeOfInfo)
-{
-  cout << " Invoking info of type: " << typeOfInfo << endl;
-  JNSTAT(typeOfInfo);
-}  
-//______________________________________________________________________________
-void TJetNet::Init( void )
-{
-  // Initializes the neuaral network
-  Int_t i;
-  JNDAT1.MSTJN[ 0 ] = mLayerCount; // Set the number of layers
-
-  // Set the number of nodes for each layer
-  for( i = 0; i < mLayerCount; i++ )
-  {
-    if ( mDebug ) std::cout << "Layer " << i + 1 << " has " << mpLayers[ i ] << " units." << std::endl; 
-    JNDAT1.MSTJN[ 9 + i ] = mpLayers[ i ]; 
-  }
-   
-  cout << " calling JNINIT " << endl;
-  JNINIT();
-  cout << " finishing calling JNINIT " << endl;
-  mIsInitialized = kTRUE;
-}
-//______________________________________________________________________________
-Int_t TJetNet::Epoch( void )
-{
-  // Initiate one train/test step the network. 
-
-  Double_t aTrain, aTest;
-  if ( mCurrentEpoch < mEpochs )
-  {
-      mCurrentEpoch++;
-      aTrain = Train();
-
-      //      if (mCurrentEpoch%2)
-
-      //      std::cout << " Calls to MSTJN: " << GetMSTJN(6) << 
-      //	std::endl;
-
-      if ( mDebug ) 
-      {
-
-
-	std::cout << "[ " << mCurrentEpoch << " ] Train: " << aTrain << std::endl;
-      }
-      if ( ( mCurrentEpoch % 2 ) == 0 )
-      {
-	  aTest = Test();
-	  //	  if ( mDebug )
-	  std::cout << "[" << mCurrentEpoch << "]: " << GetPARJN(8) << " ";
-	  std::cout << "Test: " << aTest << std::endl;
-      }
-  }
-  return mCurrentEpoch;
-}
-//______________________________________________________________________________
-void TJetNet::SetInputTrainSet( Int_t aPatternInd, Int_t aInputInd, Double_t aValue )
-{
-  // Changes the value of the cell corresponding to unit aInputInd in pattern aPatternInd into INPUT TRAIN set
-  mpInputTrainSet->SetData( aPatternInd, aInputInd, aValue );
-}
-//______________________________________________________________________________
-void TJetNet::SetOutputTrainSet( Int_t aPatternInd, Int_t aOutputInd, Double_t aValue )
-{
-  // Changes the value of the cell corresponding to unit aInputInd in pattern aPatternInd into OUTPUT TRAIN set
-  mpOutputTrainSet->SetData( aPatternInd, aOutputInd, aValue );
-}
-//______________________________________________________________________________
-void TJetNet::SetInputTestSet( Int_t aPatternInd, Int_t aInputInd, Double_t aValue )
-{
-  // Changes the value of the cell corresponding to unit aInputInd in pattern aPatternInd into INPUT TEST set
-  mpInputTestSet->SetData( aPatternInd, aInputInd, aValue );
-}
-//______________________________________________________________________________
-Double_t TJetNet::GetOutputTrainSet( Int_t aPatternInd, Int_t aOutputInd )
-{
-  // Returns the value of the cell corresponding to unit aInputInd in pattern aPatternInd into OUTPUT TRAIN set
-  return mpOutputTrainSet->GetData( aPatternInd, aOutputInd );
-}
-//______________________________________________________________________________
-Double_t TJetNet::GetInputTestSet( Int_t aPatternInd, Int_t aInputInd )
-{
-  // Returns the value of the cell corresponding to unit aInputInd in pattern aPatternInd into INPUT TEST set
-  return mpInputTestSet->GetData( aPatternInd, aInputInd );
-}
-//______________________________________________________________________________
-Double_t TJetNet::GetOutputTestSet( Int_t aPatternInd, Int_t aOutputInd )
-{
-  // Returns the value of the cell corresponding to unit aInputInd in pattern aPatternInd into OUTPUT TEST set
-  return mpOutputTestSet->GetData( aPatternInd, aOutputInd );
-}
-//______________________________________________________________________________
-void  TJetNet::SaveDataAscii( TString aFileName )
-{
-  // Saves the Input/Output test and train data in plain text file
-  ofstream out;
-  int i, j;
-
-  // Open ASCII file
-  out.open( aFileName );
-
-  //Write the number of layers, including the input and output
-  out << mLayerCount << std::endl;
-
-  // Write into the file the number of units in input, hidden and output layers  
-  for ( i = 0; i < mLayerCount; i++ ) out << mpLayers[ i ] << " ";
-  out << std::endl;
-
-  // Write the size of Train and Test sets 
-  out << mTrainSetCnt << " " << mTestSetCnt << std::endl;
-
-  // Dump the Train set : Input1 Input2 ... InputN Output1 Output2 ... OutputN
-  for ( i = 0; i < mTrainSetCnt; i++ )
-  {
-    out << GetInputTrainSet( i, 0 );
-    for( j = 1; j < mpLayers[ 0 ]; j++ ) out << " " << GetInputTrainSet( i, j );
-    for( j = 0; j < mpLayers[ mLayerCount - 1 ]; j++ ) out << " " << GetOutputTrainSet( i, j );
-    out << std::endl;
-  }
-
- // Dump the Test set : Input1 Input2 ... InputN Output1 Output2 ... OutputN
-  for ( i = 0; i < mTestSetCnt; i++ )
-  {
-    out << GetInputTestSet( i, 0 );
-    for( j = 1; j < mpLayers[ 0 ]; j++ ) out << " " << GetInputTestSet( i, j );
-    for( j = 0; j < mpLayers[ mLayerCount - 1 ]; j++ ) out << " " << GetOutputTestSet( i, j );
-    out << std::endl;
-  }
-  // Close the file
-  out.close();
-}
-//______________________________________________________________________________
-void  TJetNet::LoadDataAscii( TString aFileName )
-{
-  // Loads the input/output test/train data from plain text file 
-  ifstream in;
-  int i, j, k, l, m;
-  int aiParam[ 5 ];//iTrainCount, iTestCount, iInputDim, iHiddenDim, iOutputDim;
-  Bool_t bFlag;
-  Double_t tmp;
-  Int_t iPatternLength;
-
-  in.open( aFileName );
-  bFlag = Bool_t( in.is_open() );
-  if ( in )
-  { 
-    in >> mLayerCount;
-    if( mDebug ){ std::cout << "Layers Count Set to " << mLayerCount << std::endl;}
-    i = 0;
-
-    delete [] mpLayers;
-    mpLayers = new Int_t[ mLayerCount ];
-
-    if( mDebug ){ std::cout << "Updating the Layers Nodes Counters..." << std::endl; }
-    while( ( i < mLayerCount ) && ( !in.eof() ) )
-    {
-      in >> mpLayers[ i ];
-      if( mDebug ){ std::cout << "Layer [ " << i + 1 << " ] has " << mpLayers[ i ] << " units" << std::endl; }
-      i++;
-    }
-
-    mInputDim = mpLayers[ 0 ];
-    mOutputDim = mpLayers[ mLayerCount - 1 ];
-    mHiddenLayerDim = mLayerCount-2;
-
-    //Get the patterns count per line 
-    iPatternLength = mInputDim + mOutputDim;
-    if( mDebug ){ std::cout << "Patterns per line = " << iPatternLength << std::endl; } 
-    in >> mTrainSetCnt;
-    if( mDebug ){ std::cout << "Train Set has " << mTrainSetCnt << " patterns." << std::endl; }
-    in >> mTestSetCnt;
-    if( mDebug ){ std::cout << "Test Set has " << mTestSetCnt << " patterns." << std::endl; }
-    
-    delete mpInputTestSet;
-    delete mpInputTrainSet;
-    delete mpOutputTestSet;
-    delete mpOutputTrainSet;
-    
-    mpInputTrainSet  = new TNeuralDataSet( mTrainSetCnt, GetInputDim() );
-    mpInputTestSet   = new TNeuralDataSet( mTestSetCnt, GetInputDim() );
-    mpOutputTrainSet = new TNeuralDataSet( mTrainSetCnt, GetOutputDim() );
-    mpOutputTestSet  = new TNeuralDataSet( mTestSetCnt, GetOutputDim() );
-
-    i = 0;
-    j = 0;
-    
-    while( ( i < ( mTrainSetCnt + mTestSetCnt ) ) && ( !in.eof() ) )
-    {
-      j = 0;
-      while( ( j < iPatternLength ) && ( !in.eof() ) )
-      {
-	if( i < mTrainSetCnt )
-	{
-	  if( j < mInputDim )
-	  {
-	    //Train Input Set
-	    in >> tmp;
-	    SetInputTrainSet( i, j, tmp );
-	  }
-	  else 
-	  {
-	    //Train Output Set 
-	    m = j - mInputDim;
-	    in >> tmp;
-	    SetOutputTrainSet( i, m, tmp );
-	  }
-	}
-	else
-	{
-	  l = i - mTrainSetCnt;
-	  if( j < mInputDim )
-	    {
-	      //Test Input Set
-	      in >> tmp;
-	      SetInputTestSet( l, j, tmp );
-	    }
-          else
-	    {
-	      //Test Output Set
-	      m = j - mInputDim;
-	      in >> tmp;
-	      SetOutputTestSet( l, m, tmp );
-	    }
-
-	}    
-	j++;
-      }
-      i++;
-    }
-  }
-  in.close();
-}
-//______________________________________________________________________________
-void  TJetNet::SaveDataRoot( TString aFileName )
-{
-  // Saves the neural network in ROOT file
-}
-//______________________________________________________________________________
-void  TJetNet::LoadDataRoot( TString aFileName )
-{
-  // Loads the neural network from ROOT file
-}
-//______________________________________________________________________________
-void TJetNet::Evaluate(  )
-{
-  //evaluates directly the input provided through SetInputs()
-  JNTEST();
-}
-//______________________________________________________________________________
-void TJetNet::Evaluate( Int_t aPattern  )
-{
-  // Evaluates the network output form the input data specified by the Test Pattern
-  for( Int_t i = 0; i < GetInputDim(); i++ )
-  {
-	JNDAT1.OIN[ i ] = float ( GetInputTestSet( aPattern, i ) );
-  }
-  JNTEST();
-}
-//______________________________________________________________________________
-void TJetNet::SetInputs( Int_t aIndex, Double_t aValue )
-{
-  // Directly sets the inputs of the network 
-  JNDAT1.OIN[ aIndex ] = float ( aValue );
-}
-//______________________________________________________________________________
-Double_t TJetNet::GetOutput( Int_t aIndex )
-{
-  // Returns the output of the network 
-  return Double_t ( JNDAT1.OUT[ aIndex ] );
-}
-//______________________________________________________________________________
-void TJetNet::DumpToFile( TString aFileName )
-{
-  // Dumps the network data into JETNET specific format
-  JNDUMP( -8 );
-  std::cout << close( 8 ) << std::endl;
-  rename( "./fort.8", aFileName );
-}
-//______________________________________________________________________________
-void TJetNet::ReadFromFile( TString aFileName )
-{
-  // Loads the network from JETNET specific file
-  rename( aFileName, "./fort.12" );
-  JNREAD( -12 );
-  Reinitialize();
-  rename( "./fort.12", aFileName );
-  //std::cout << close( 12 ) << std::endl;
-}
-//______________________________________________________________________________
-Double_t TJetNet::GetWeight( Int_t aLayerInd, Int_t aNodeInd, Int_t aConnectedNodeInd ) const
-{
-  // Returns the node weight in specific Layer
-  return Double_t ( JNINT1.W[ JNINDX( aLayerInd, aNodeInd, aConnectedNodeInd )-1 ] );
-  //GP: ONE HAS TO PAY ATTENTION TO THIS STUPID -1!!!
-}
-//______________________________________________________________________________
-Double_t TJetNet::GetThreshold( Int_t aLayerInd, Int_t aNodeInd) const
-{
-  //Returns the node threshold in the specific layer
-  return Double_t ( JNINT1.T[ JNINDX( aLayerInd, aNodeInd, 0 )-1 ] );
-  //GP: ONE HAS TO PAY ATTENTION TO THIS STUPID -1!!!
-}
-//______________________________________________________________________________
-void TJetNet::SelectiveFields( Int_t aLayerA, Int_t aNodeA1, Int_t aNodeA2, Int_t aNodeB1, Int_t aNodeB2, Int_t aSwitch )
-{
-  // JetNet Selective Fields
-  Int_t tmp, i1, i2, j1, j2;
-
-  if( ( aLayerA > 0 ) && ( aLayerA < mLayerCount ) )
-  {
-    i1 = TMath::Abs( aNodeA1 ); 
-    i2 = TMath::Abs( aNodeA2 );
-    j1 = TMath::Abs( aNodeB1 ); 
-    j2 = TMath::Abs( aNodeB2 );
-
-    if( i1 > i2 )
-    {
-      tmp = i1;
-      i1 = i2;
-      i2 = i1;
-    }//if
-
-    if( i1 > i2 )
-    {
-      tmp = i1;
-      i1 = i2;
-      i2 = i1;
-    }//if
-
-    if( ( i1 < mpLayers[ aLayerA ] ) && ( i2 < mpLayers[ aLayerA ] ) && 
-	( j1 < mpLayers[ aLayerA - 1 ] ) && ( j2 < mpLayers[ aLayerA - 1 ] ) )
-    {
-      JNSEFI( aLayerA, i1, i2, j1, j2, aSwitch );
-    }//if
-  } //if
-}
-//______________________________________________________________________________
-void TJetNet::Reinitialize( void )
-{
-  //Initializes the settings of the network
-    Int_t i;
-    
-   mLayerCount = JNDAT1.MSTJN[ 0 ]; // Set the number of layers
-   
-   delete [] mpLayers;
-   mpLayers = new Int_t[ mLayerCount ];
-   
-  // Set the number of nodes for each layer
-  for( i = 0; i < mLayerCount; i++ )
-  {
-    mpLayers[ i ] = JNDAT1.MSTJN[ 9 + i ]; 
-  }
-  
-  mpInputTrainSet  = new TNeuralDataSet( mTrainSetCnt, GetInputDim() );
-  mpInputTestSet   = new TNeuralDataSet( mTestSetCnt, GetInputDim() );
-  mpOutputTrainSet = new TNeuralDataSet( mTrainSetCnt, GetOutputDim() );
-  mpOutputTestSet  = new TNeuralDataSet( mTestSetCnt, GetOutputDim() );
-
-  mInputDim = mpLayers[ 0 ];
-  mOutputDim = mpLayers[ mLayerCount - 1 ];
-  mHiddenLayerDim = mLayerCount-2;
-
-
-}  
-//______________________________________________________________________________
-void TJetNet::Normalize( void )
-{
-  // Normilizes Inputs (both test and train)
-  mpInputTrainSet->Normalize();
-  mpInputTestSet->Normalize();
-}
-//______________________________________________________________________________
-void TJetNet::Randomize( void )
-{
-  // Randomizes Inputs and Outputs of both train and test sets
-  mpInputTrainSet->Randomize();
-  mpInputTestSet->Randomize();
-  mpOutputTrainSet->Randomize();
-  mpOutputTestSet->Randomize();
-}
-//______________________________________________________________________________
-Int_t TJetNet::GetUnitCount( Int_t aLayer )
-{ 
-  // Returns the number of the units in specfic layer
-  if( ( aLayer > -1 ) && ( aLayer < mLayerCount ) ) 
-    return JNDAT1.MSTJN[ 9 + aLayer ]; 
-}
-//______________________________________________________________________________
-void TJetNet::SetUpdatesPerEpoch( Int_t aValue )
-{ 
-  // Sets the number of the updates per epoch
-  JNDAT1.MSTJN[ 8 ] = aValue; 
-  if( !mInitLocked ) this->Init();
-}
-//______________________________________________________________________________
-void TJetNet::SetUpdatingProcedure( Int_t aValue )
-{  
-  // Set specific weights update function
-  JNDAT1.MSTJN[ 4 ] = aValue; 
-  if( !mInitLocked ) this->Init();
-}
-//______________________________________________________________________________
-void TJetNet::SetErrorMeasure( Int_t aValue )
-{  
-  JNDAT1.MSTJN[ 3 ] = aValue; 
-  if( !mInitLocked ) this->Init();
-}
-//______________________________________________________________________________
-void TJetNet::SetActivationFunction( Int_t aValue )
-{ 
-  // Set the kind of activation function used
-  JNDAT1.MSTJN[ 2 ] = aValue; 
-  if( !mInitLocked ) this->Init();
-}
-//______________________________________________________________________________
-void TJetNet::SetPatternsPerUpdate( Int_t aValue )
-{ 
-  JNDAT1.MSTJN[ 1 ] = aValue; 
-  if( !mInitLocked ) this->Init();
-}
-//______________________________________________________________________________
-void TJetNet::SetLearningRate( Double_t aValue )
-{ 
-  // Change the Learning Rate
-  JNDAT1.PARJN[ 0 ] = aValue; 
-  if( !mInitLocked ) this->Init();
-}
-//______________________________________________________________________________
-void TJetNet::SetMomentum( Double_t aValue )
-{ 
-  JNDAT1.PARJN[ 1 ] = aValue; 
-  if( !mInitLocked ) this->Init();
-}
-//______________________________________________________________________________
-void TJetNet::SetInitialWeightsWidth( Double_t aValue )
-{ 
-  JNDAT1.PARJN[ 3 ] = aValue; 
-  if( !mInitLocked ) this->Init();
-}
-//______________________________________________________________________________
-void TJetNet::SetLearningRateDecrease( Double_t aValue )
-{ 
-  JNDAT1.PARJN[ 10 ] = aValue; 
-  if( !mInitLocked ) this->Init();
-}
-//______________________________________________________________________________
-Int_t TJetNet::GetUpdatesPerEpoch( void )
-{ 
-  return JNDAT1.MSTJN[ 8 ]; 
-}
-//______________________________________________________________________________
-Int_t TJetNet::GetUpdatingProcedure( void )
-{  
-  return JNDAT1.MSTJN[ 3 ]; 
-}
-//______________________________________________________________________________
-Int_t TJetNet::GetErrorMeasure( void )
-{ 
-  return JNDAT1.MSTJN[ 3 ]; 
-}
-//______________________________________________________________________________
-Int_t TJetNet::GetActivationFunction( void )
-{ 
-  return JNDAT1.MSTJN[ 2 ]; 
-}
-//______________________________________________________________________________
-Int_t TJetNet::GetPatternsPerUpdate( void )
-{ 
-  return JNDAT1.MSTJN[ 1 ]; 
-}
-//______________________________________________________________________________
-Double_t TJetNet::GetLearningRate( void )
-{ 
-  return JNDAT1.PARJN[ 0 ]; 
-}
-//______________________________________________________________________________
-Double_t TJetNet::GetMomentum( void )
-{ 
-  return JNDAT1.PARJN[ 1 ]; 
-}
-//______________________________________________________________________________
-Double_t TJetNet::GetInitialWeightsWidth( void )
-{ 
-  return JNDAT1.PARJN[ 3 ]; 
-}
-//______________________________________________________________________________
-Double_t TJetNet::GetLearningRateDecrease( void )
-{ 
-  return JNDAT1.PARJN[ 10 ]; 
-}
-//______________________________________________________________________________
-Int_t TJetNet::GetMSTJN( Int_t aIndex )
-{
-  return JNDAT1.MSTJN[ aIndex ]; 
-}
-//______________________________________________________________________________
-Double_t TJetNet::GetPARJN( Int_t aIndex )
-{
-  return JNDAT1.PARJN[ aIndex ];
-}
-//______________________________________________________________________________
-void TJetNet::SetMSTJN( Int_t aIndex, Int_t aValue )
-{
-  JNDAT1.MSTJN[ aIndex ] = aValue;
-}
-//______________________________________________________________________________
-void TJetNet::SetPARJN( Int_t aIndex, Double_t aValue )
-{
-  JNDAT1.PARJN[ aIndex ] = aValue;
-}
-//______________________________________________________________________________
-void TJetNet::Shuffle( Bool_t aShuffleTrainSet, Bool_t aShuffleTestSet )
-{
-  // Shuffles the train and/or test input/output sets
-  TTimeStamp ts;
-  Int_t Seed = ts.GetSec();
-  if ( aShuffleTrainSet )
-  {
-    
-    mpInputTrainSet->Shuffle( Seed );
-    mpOutputTrainSet->Shuffle( Seed );
-  }
-  //Shuffle Test Set
-  if ( aShuffleTestSet )
-  {
-    Seed = ts.GetSec();
-    mpInputTestSet->Shuffle( Seed );
-    mpOutputTestSet->Shuffle( Seed );
-  }
-
-  return;
-} 
-
-
-//EOF
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TJetNet.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TJetNet.h
deleted file mode 100644
index 504650c783546225ee27e0d80df747603127d3c2..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TJetNet.h
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/* 
- ROOT Interface to JETNET
- Author: Vassil Verguilov
- Created: 2005.02.22 14:07 EET
- Revisited and extended by: Giacinto Piacquadio (Freiburg University)
- (ATLAS - 18-02-2008)
-*/
-
-
-
-#ifndef __TJETNET_
-#define __TJETNET_
-
-//______________________________________________________________________________
-//
-// TJetNet
-//
-// This class is a ROOT wrapper for jetnet library.
-//
-//______________________________________________________________________________
-//
-
-//#define _DEBUG
-
-#include "TROOT.h"
-#include "TObject.h"
-#include "Riostream.h"
-#include "TNeuralDataSet.h"
-#include "TF1.h"
-
-class TTrainedNetwork;
-
-
-//typedef ActivationFunction  TActivationFunction;
-
-class TJetNet : public TObject
-{
- public:
-  
-  TJetNet( void );
-
-  TJetNet( Int_t aTestCount, Int_t aTrainCount, const Int_t aLayersCnt, const Int_t* aLayers );
-
-  virtual ~TJetNet( void );
-  
-  void Print( void );
-  
-  Int_t GetTrainSetCnt( void ) const { return mTrainSetCnt; };
-  Int_t GetTestSetCnt( void ) const { return mTestSetCnt; };
-  Int_t GetInputDim( void ) const { return mpLayers[ 0 ]; };
-  Int_t GetHiddenLayerDim( void ) const { return mHiddenLayerDim; };
-  Int_t GetHiddenLayerSize(Int_t number) const { return mpLayers[ number ]; };
-  Int_t GetOutputDim( void ) const { return mpLayers[ mLayerCount - 1 ]; };
-
-  void SetInputTrainSet( Int_t aPatternInd, Int_t aInputInd, Double_t aValue );
-  void SetOutputTrainSet( Int_t aPatternInd, Int_t aOutputInd, Double_t aValue );
-  void SetInputTestSet( Int_t aPatternInd, Int_t aInputInd, Double_t aValue );
-  void SetOutputTestSet( Int_t aPatternInd, Int_t aOutputInd, Double_t aValue );
-  
-  Double_t GetInputTrainSet( Int_t aPatternInd, Int_t aInputInd );
-  Double_t GetOutputTrainSet( Int_t aPatternInd, Int_t aOutputInd );
-  Double_t GetInputTestSet( Int_t aPatternInd, Int_t aInputInd );
-  Double_t GetOutputTestSet( Int_t aPatternInd, Int_t aOutputInd );
-  
-  Double_t GetWeight( Int_t aLayerInd, Int_t aNodeInd, Int_t aConnectedNodeInd ) const; 
-  Double_t GetThreshold( Int_t aLayerInd, Int_t aNodeInd) const;
-
-  Int_t GetEpochs( void ) { return mEpochs; };
-  void SetEpochs( const Int_t aEpochs ) { mEpochs = aEpochs; mCurrentEpoch = 0; };
-  void Init( void );
-
-  Double_t Train( void );
-  Int_t Epoch( void );
-  Double_t Test( void );
-
-  void Shuffle ( Bool_t aShuffleTrainSet = true, Bool_t aShuffleTestSet = true );
- 
-  void SaveDataAscii( TString aFileName = "jndata.dat" );
-  void SaveDataRoot( TString aFileName = "jndata.root" );
-
-  void LoadDataAscii( TString aFileName = "jndata.dat" );
-  void LoadDataRoot( TString aFileName = "jndata.root" );
-  
-  void DumpToFile( TString aFileName = "fort.8" );
-  void ReadFromFile( TString aFileName = "fort.8" );
-
-  Double_t GetOutput( Int_t aIndex = 0 );
-  void SetInputs( Int_t aIndex = 0, Double_t aValue = 0.0 );
-  void Evaluate( Int_t aPattern );
-  void Evaluate();
-
-  void writeNetworkInfo(Int_t typeOfInfo = 0);
-
-  Int_t GetLayerCount( void ){ return mLayerCount; };
-  //Number of layers in NN
-  Int_t GetUnitCount( Int_t aLayer );
-  //Number of units in NN  
-
-  void SelectiveFields( Int_t aLayerA, Int_t aNodeA1, Int_t aNodeA2, Int_t aNodeB1, Int_t aNodeB2, Int_t aSwitch = 0 );
-  
-  void SetUpdatesPerEpoch( Int_t aValue );
-    void SetUpdatingProcedure( Int_t aValue );
-    void SetErrorMeasure( Int_t aValue );
-    void SetActivationFunction( Int_t aValue );
-    void SetPatternsPerUpdate( Int_t aValue );
-    void SetLearningRate( Double_t aValue );
-    void SetMomentum( Double_t aValue );
-    void SetInitialWeightsWidth( Double_t aValue );
-    void SetLearningRateDecrease( Double_t aValue );
-
-
-    Int_t GetUpdatesPerEpoch( void );
-    Int_t GetUpdatingProcedure( void );
-    Int_t GetErrorMeasure( void );
-    Int_t GetActivationFunction( void );
-    Int_t GetPatternsPerUpdate( void );
-    Double_t GetLearningRate( void );
-    Double_t GetMomentum( void );
-    Double_t GetInitialWeightsWidth( void );
-    Double_t GetLearningRateDecrease( void );
-    
-    void LockInit( void ){ mInitLocked = kTRUE; };
-    void UnlockInit( void ){ mInitLocked = kFALSE; };
-    Int_t GetMSTJN( Int_t aIndex );
-    Double_t GetPARJN( Int_t aIndex );
-    void SetMSTJN( Int_t aIndex, Int_t aValue );
-    void SetPARJN( Int_t aIndex, Double_t aValue );
-  
-    void Normalize( void );
-    void Randomize( void );
-
-    TTrainedNetwork* createTrainedNetwork() const;
-    void readBackTrainedNetwork(const TTrainedNetwork*);
-
-    enum TActivationFunction {
-      afSigmoid = 1,
-      afTanh    = 2,
-      afExp     = 3,
-      afLinear  = 4,
-      afSigmoidEntropy = 5
-    };
-    
-private:
-  
-  void mSetWeight( Double_t weight,Int_t aLayerInd, Int_t aNodeInd, Int_t aConnectedNodeInd ); 
-  void mSetThreshold( Double_t threshold, Int_t aLayerInd, Int_t aNodeInd);
-
-  Int_t CopyFile( TString aSrcFile, TString aDestFile );
-  void Reinitialize( void ); // Synchronizing the paramaters of the class object from JETNET parameters
-
-  TActivationFunction menActFunction;
-
-  Int_t  mLayerCount; // Number of Layers (including the input and output)
-  Int_t* mpLayers; //! Array which contains the number of units in each layer 
-
-  TNeuralDataSet* mpInputTrainSet;
-  TNeuralDataSet* mpOutputTrainSet;
-  TNeuralDataSet* mpInputTestSet;
-  TNeuralDataSet* mpOutputTestSet;
-
-  Int_t mTrainSetCnt, mTestSetCnt; // Size of Train and Test set
-
-  Int_t mInputDim; // Number of the elements in intput layer
-  Int_t mHiddenLayerDim; // Number of Hidden Layers
-  Int_t mOutputDim; // Number of outputs
-  Int_t mEpochs;    // Epochs
-  Int_t mCurrentEpoch;    // Current epoch
-  Bool_t mDebug; // Debug Flag
-  Bool_t mIsInitialized;
-  Bool_t mInitLocked;
-
-  ClassDef( TJetNet, 1 )
-}; 
-
-inline void TJetNet::SetOutputTestSet( Int_t aPatternInd, Int_t aOutputInd, Double_t aValue )
-{
-  // Changes the value of the cell corresponding to unit aInputInd in pattern aPatternInd into OUTPUT TEST set
-  mpOutputTestSet->SetData( aPatternInd, aOutputInd, aValue );
-}
-//______________________________________________________________________________
-inline Double_t TJetNet::GetInputTrainSet( Int_t aPatternInd, Int_t aInputInd )
-{
-  // Returns the value of the cell corresponding to unit aInputInd in pattern aPatternInd into INPUT TRAIN set
-  return mpInputTrainSet->GetData( aPatternInd, aInputInd );
-}
-//______________________________________________________________________________
-
-
-#endif
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNetworkToHistoTool.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNetworkToHistoTool.cxx
deleted file mode 100644
index 7cc7fad815288cb8183fcd4416d88259ab8535f1..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNetworkToHistoTool.cxx
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include <TH1F.h>
-#include <TH2F.h>
-#include "TTrainedNetwork.h"
-#include "TNetworkToHistoTool.h"
-#include <cmath>
-
-ClassImp( TNetworkToHistoTool)
-
-std::vector<TH1*> TNetworkToHistoTool::fromTrainedNetworkToHisto(TTrainedNetwork* trainedNetwork) const
-{
-
-  std::vector<TH1*> outputHistos;
-
-  if (trainedNetwork->getActivationFunction()!=1)
-  {
-    cout << "ERROR: activation function is different from one. Only one is supported..." << endl;
-    return outputHistos;
-  }
-    
-
-  Int_t nInput=trainedNetwork->getnInput();
-  vector<Int_t> nHiddenLayerSize=trainedNetwork->getnHiddenLayerSize();
-  Int_t nHidden=nHiddenLayerSize.size();
-
-  for (Int_t o=0;o<nHidden;++o)
-  {
-    cout << " Hidden lay: " << o << " size: " << nHiddenLayerSize[o];
-  }
-  
-  Int_t nOutput=trainedNetwork->getnOutput();
-  cout << " Output size: " << nOutput << endl;
-  
-  std::vector<TVectorD*> thresholdVectors=trainedNetwork->getThresholdVectors();
-  std::vector<TMatrixD*> weightMatrices=trainedNetwork->weightMatrices();
-
-  //LayersInfo
-
-  TH1F* histoLayersInfo=new TH1F("LayersInfo",
-                                 "LayersInfo",
-                                 nHidden+2,
-                                 0,
-                                 nHidden+2);
-
-  histoLayersInfo->SetBinContent(1,nInput);
-
-  for (Int_t i=0;i<nHidden;++i)
-  {
-    histoLayersInfo->SetBinContent(2+i,nHiddenLayerSize[i]);
-  }
-
-  histoLayersInfo->SetBinContent(2+nHidden,nOutput);
-
-  outputHistos.push_back(histoLayersInfo);
-
-  
-  //ThresholdInfo
-  for (Int_t i=0;i<nHidden+1;++i)
-  {
-    TString threName("Layer");
-    threName+=i;
-    threName+="_thresholds";
-   
-    Int_t layerSize=(i<nHidden)?nHiddenLayerSize[i]:nOutput;
-    Int_t previousLayerSize=(i==0)?nInput:nHiddenLayerSize[i-1];
-    
-    TH1F* histoThreshLayer=new TH1F(threName,
-                                    threName,
-                                    layerSize,
-                                    0,
-                                    layerSize);
-    
-    for (Int_t s=0;s<layerSize;s++)
-    {
-      histoThreshLayer->SetBinContent(s+1,thresholdVectors[i]->operator()(s));
-    }
-
-    TString weightsName("Layer");
-    weightsName+=i;
-    weightsName+="_weights";
-    
-    outputHistos.push_back(histoThreshLayer);
-
-    TH2F* histoWeightsLayer=new TH2F(weightsName,
-                                     weightsName,
-                                     previousLayerSize,
-                                     0,
-                                     previousLayerSize,
-                                     layerSize,
-                                     0,
-                                     layerSize);
-    
-    for (Int_t s=0;s<layerSize;s++)
-    {
-      for (Int_t p=0;p<previousLayerSize;++p)
-      {
-        histoWeightsLayer->SetBinContent(p+1,s+1,weightMatrices[i]->operator()(p,s));
-      }
-    }
-    
-    outputHistos.push_back(histoWeightsLayer);
-    
-  }
-  
-
-  return outputHistos;
-  
-}
-
-TH1* TNetworkToHistoTool::findHisto(TString nameOfHisto,
-                                     std::vector<TH1*> & inputHistos) const
-{
-
-  std::vector<TH1*>::const_iterator inputBegin=inputHistos.begin();
-  std::vector<TH1*>::const_iterator inputEnd=inputHistos.end();
-  
-  for ( std::vector<TH1*>::const_iterator inputIter=inputBegin;inputIter!=inputEnd;++inputIter)
-  {
-    if ((*inputIter)->GetName()==nameOfHisto)
-    {
-      return (*inputIter);
-    }
-  }
-  return 0;
-}
-
-
-
-TTrainedNetwork* TNetworkToHistoTool::fromHistoToTrainedNetwork(std::vector<TH1*> & inputHistos) const
-{
-
-  
-
-  TH1F* histoLayersInfo=dynamic_cast<TH1F*>(findHisto("LayersInfo",inputHistos));
-
-  if (histoLayersInfo==0)
-  {
-    cout << " Could not find LayersInfo histogram... Aborting " << endl;
-    return 0;
-  }
-
-
-  Int_t nHidden=histoLayersInfo->GetNbinsX()-2;
-  Int_t nInput=(Int_t)std::floor(histoLayersInfo->GetBinContent(1)+0.5);
-
-  vector<Int_t> nHiddenLayerSize;
-  for (Int_t i=0;i<nHidden;++i)
-  {
-    nHiddenLayerSize.push_back( (Int_t)std::floor(histoLayersInfo->GetBinContent(2+i)+0.5));
-  }
-
-  for (Int_t o=0;o<nHidden;++o)
-  {
-    cout << " Hidden lay: " << o << " size: " << nHiddenLayerSize[o];
-  }
-
-  Int_t nOutput=(Int_t)std::floor(histoLayersInfo->GetBinContent(2+nHidden)+0.5);
-  cout << " Output size: " << nOutput << endl;
-  
-  std::vector<TVectorD*> thresholdVectors;
-  std::vector<TMatrixD*> weightMatrices;
-
-
-  //Reconstruct thresholdInfo
-  for (Int_t i=0;i<nHidden+1;++i)
-  {
-    TString threName("Layer");
-    threName+=i;
-    threName+="_thresholds";
-
-    Int_t layerSize=(i<nHidden)?nHiddenLayerSize[i]:nOutput;
-    Int_t previousLayerSize=(i==0)?nInput:nHiddenLayerSize[i-1];
-
-    TVectorD* thresholdVector=new TVectorD(layerSize);
-    TMatrixD* weightMatrix=new TMatrixD(previousLayerSize,layerSize);
-   
-    TH1F* histoThreshLayer=dynamic_cast<TH1F*>(findHisto(threName,inputHistos));
-    if (histoThreshLayer==0)
-    {
-      cout << " Could not find " << threName << "  histogram... Aborting (mem leak also...)" << endl;
-      return 0;
-    }
-
-
-    for (Int_t s=0;s<layerSize;s++)
-    {
-      thresholdVector->operator()(s)=histoThreshLayer->GetBinContent(s+1);
-    }
-
-    TString weightsName("Layer");
-    weightsName+=i;
-    weightsName+="_weights";
-
-    TH2F* histoWeightsLayer=dynamic_cast<TH2F*>(findHisto(weightsName,inputHistos));
-    if (histoWeightsLayer==0)
-    {
-      cout << " Could not find " << weightsName << "  histogram... Aborting (mem leak also...)" << endl;
-      return 0;
-    }
-    
-    for (Int_t s=0;s<layerSize;s++)
-    {
-      for (Int_t p=0;p<previousLayerSize;++p)
-      {
-        weightMatrix->operator()(p,s)=histoWeightsLayer->GetBinContent(p+1,s+1);
-      }
-    }
-
-    thresholdVectors.push_back(thresholdVector);
-    weightMatrices.push_back(weightMatrix);
-
-  }
-
-
-  TTrainedNetwork* trainedNetwork=new TTrainedNetwork(nInput,
-                                                      nHidden,
-                                                      nOutput,
-                                                      nHiddenLayerSize,
-                                                      thresholdVectors,
-                                                      weightMatrices,
-                                                      1);
-  return trainedNetwork;
-  
-}
-        
-  
-  
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNetworkToHistoTool.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNetworkToHistoTool.h
deleted file mode 100644
index 8a1f921188d9f7158cf3bc565b6da089f99a255c..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNetworkToHistoTool.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef __TNetworkToHistoTool_
-#define __TNetworkToHistoTool_
-
-#include <TString.h>
-#include <vector>
-#include "TObject.h"
-
-class TH1;
-class TTrainedNetwork;
-
-//by Giacinto Piacquadio (19-2-2008)
-
-class TNetworkToHistoTool : public TObject
-{
-public:
-  
-  TNetworkToHistoTool() {};
-
-  ~TNetworkToHistoTool() {};
-
-  std::vector<TH1*> fromTrainedNetworkToHisto(TTrainedNetwork*) const;
-  
-  TTrainedNetwork* fromHistoToTrainedNetwork(std::vector<TH1*> &) const;
-
-private:
-
-  TH1* findHisto(TString nameOfHisto,
-                  std::vector<TH1*> & inputHistos) const;
-  
-  ClassDef( TNetworkToHistoTool, 1 );
-  
-};
-
-
-#endif
-  
-  
-  
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNeuralDataSet.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNeuralDataSet.cxx
deleted file mode 100644
index 1c71d87d9b2bc05d756db90cbb9ec9ae4fbbaa43..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNeuralDataSet.cxx
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "TNeuralDataSet.h"
-#include "TRandom3.h"
-
-ClassImp( TNeuralDataSet )
-//______________________________________________________________________________
-TNeuralDataSet::TNeuralDataSet( Int_t aNumberOfPatterns, Int_t aNumberOfUnits )
-{
-  // Default constructor
-  mpData = new TMatrixD( aNumberOfPatterns, aNumberOfUnits ); 
-  mpNormFactors = new TVectorD( aNumberOfUnits );
-  mpShiftFactors = new TVectorD(  aNumberOfUnits);
-}
-//______________________________________________________________________________
-TNeuralDataSet::~TNeuralDataSet()
-{
-  // Default destructor
-  delete mpData;
-  delete mpNormFactors;
-  delete mpShiftFactors;
-}
-//______________________________________________________________________________
-void TNeuralDataSet::SetData( const Int_t aPattern, const Int_t aIndex, Double_t aValue )
-{
-  // Changes the value of cell in the set specified by Pattern number and Unit index
-  mpData->operator() ( aPattern, aIndex ) = aValue;
-}
-//______________________________________________________________________________
-void TNeuralDataSet::Normalize( void )
-{
-  // Normalizes data
-  Double_t fMin;
-  Double_t fMax;
-  Double_t tmp;
-
-  for( UInt_t aUnitIndex = 0; aUnitIndex < this->GetUnitsCount(); aUnitIndex++ )
-  {
-    fMax = 0.0;
-    fMin = 0.0; 
-    for( UInt_t aPatternIndex = 0; aPatternIndex < this->GetPatternsCount(); aPatternIndex++ )
-    {
-	tmp = this->GetData( aPatternIndex, aUnitIndex );
-	fMin = ( tmp < fMin )? tmp : fMin;
-	fMax = ( tmp > fMax )? tmp : fMax;
-    }
-
-    for( UInt_t aPatternIndex = 0; aPatternIndex < this->GetPatternsCount(); aPatternIndex++ )
-    {
-      tmp = this->GetData( aPatternIndex, aUnitIndex );
-      tmp = (tmp - fMin)/(fMax-fMin);
-      this->SetData( aPatternIndex, aUnitIndex, tmp );
-    }
-
-    mpNormFactors->operator() (aUnitIndex) = 1./(fMax-fMin);
-    mpShiftFactors->operator() (aUnitIndex) = -fMin/(fMax-fMin);
-
-  }
-}
-//______________________________________________________________________________
-void TNeuralDataSet::Randomize( void )
-{
-  // Randomizes the data
-  TRandom3 r3;
-  for( Int_t i = 0; i < this->GetPatternsCount(); i ++ )
-    for( Int_t j = 0; j < this->GetUnitsCount(); j ++ ) 
-    {
-      this->SetData( i, j, r3.Gaus(0, 5) );  
-    }
-}
-//______________________________________________________________________________
-void TNeuralDataSet::Shuffle( Int_t aSeed )
-{
-  // Shuffles data
-  TRandom3 Random( aSeed );
-  Int_t j;
-  Double_t tmp;
-  Int_t a = this->GetPatternsCount() - 1;
-  for ( Int_t i = 0; i < this->GetPatternsCount(); i++ )
-  {
-     j = ( Int_t ) ( Random.Rndm() * a );
-     for( Int_t p = 0; p < this->GetUnitsCount(); p++ )
-     {
-	tmp = this->GetData( i, p );
-	this->SetData( i, p, this->GetData( j, p ) );
-	this->SetData( j, p, tmp );
-     }
-
-  }
-}
-
-//EOF
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNeuralDataSet.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNeuralDataSet.h
deleted file mode 100644
index 7d10063e269ad45383f04a5fc89f047aa79acb1a..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TNeuralDataSet.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-// Author: Vassil Verguilov  11/05/2006
-
-#ifndef __NEURALDATASET_
-#define __NEURALDATASET_
-
-//______________________________________________________________________________
-//
-// TNeuralData
-//
-// This class is the base class for Neural Network Input/Output patterns
-// It contains methods for manupulating the data such as Randomize(),
-// Normalize(), Shuffle() and others.
-//
-//______________________________________________________________________________
-//
-
-#include "TMatrixD.h"
-#include "TVectorD.h"
-
-
-class TNeuralDataSet
-{
- public:
-  TNeuralDataSet( Int_t aNumberOfPatterns = 0, Int_t aNumberOfUnits = 0 );
-  virtual ~TNeuralDataSet( void );
-  
-  // Returns the number of the patterns in set
-  Int_t GetPatternsCount( void ){ return mpData->GetNrows(); };
-  // Returns the number of the units in pattern
-  Int_t GetUnitsCount( void ){ return mpData->GetNcols(); };
-  // Returns the data in cell defined by pattern number and unit index in the pattern
-  Double_t GetData( const Int_t aPattern, const Int_t aIndex );
-  // Change the data in cell defined by pattern number and unit index in the pattern
-  void     SetData( const Int_t aPattern, const Int_t aIndex, Double_t aValue );
-  // Normalize all data
-  void     Normalize( void );  
-  // Randomizes the data
-  void     Randomize( void );
-  // Shuffles the patterns
-  void     Shuffle( Int_t aSeed = 0 );
-
- private:  
-
-  TMatrixD * mpData;
-  TVectorD * mpNormFactors;
-  TVectorD * mpShiftFactors;
-
-  ClassDef( TNeuralDataSet, 1 )
-
-};
-
-inline Double_t TNeuralDataSet::GetData( const Int_t aPattern, const Int_t aIndex )
-{
-  // Returns the value of cell in the set specified by Pattern number and Unit index
-  return mpData->operator() ( aPattern, aIndex );
-}
-//______________________________________________________________________________
-
-
-#endif
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TTrainedNetwork.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TTrainedNetwork.cxx
deleted file mode 100644
index 91a99d47989b66e8fc2da2ced35af7d938a9b057..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TTrainedNetwork.cxx
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "TTrainedNetwork.h"
-
-ClassImp( TTrainedNetwork)
-
-TTrainedNetwork::TTrainedNetwork()
-{
-  mnInput=0;
-  mnHidden=0;
-  mnOutput=0;
-  mActivationFunction=1;
-}
-
-TTrainedNetwork::TTrainedNetwork(Int_t nInput,
-		  Int_t nHidden,
-		  Int_t nOutput,
-		  std::vector<Int_t> & nHiddenLayerSize,
-		  std::vector<TVectorD*> & thresholdVectors,
-		  std::vector<TMatrixD*> & weightMatrices,
-		  Int_t activationFunction)
-{
-
-  mnInput=nInput;
-  mnHidden=nHidden;
-  mnOutput=nOutput;
-  mnHiddenLayerSize=nHiddenLayerSize;
-  mThresholdVectors=thresholdVectors;
-  mWeightMatrices=weightMatrices;
-  mActivationFunction=activationFunction;
-}
-
-TTrainedNetwork::~TTrainedNetwork()
-{
-  std::vector<TVectorD*>::const_iterator vectBegin=mThresholdVectors.begin();
-  std::vector<TVectorD*>::const_iterator vectEnd=mThresholdVectors.end();
-
-  for (std::vector<TVectorD*>::const_iterator vectIter=vectBegin;
-       vectIter!=vectEnd;
-       ++vectIter)
-  {
-    delete *vectIter;
-  }
-
-  std::vector<TMatrixD*>::const_iterator matrixBegin=mWeightMatrices.begin();
-  std::vector<TMatrixD*>::const_iterator matrixEnd=mWeightMatrices.end();
-
-  for (std::vector<TMatrixD*>::const_iterator matrixIter=matrixBegin;
-       matrixIter!=matrixEnd;
-       ++matrixIter)
-  {
-    delete *matrixIter;
-  }
-
-}
-
-void TTrainedNetwork::setNewWeights(std::vector<TVectorD*> & thresholdVectors,
-				    std::vector<TMatrixD*> & weightMatrices)
-{
-
-  std::vector<TVectorD*>::const_iterator vectBegin=mThresholdVectors.begin();
-  std::vector<TVectorD*>::const_iterator vectEnd=mThresholdVectors.end();
-
-  for (std::vector<TVectorD*>::const_iterator vectIter=vectBegin;
-       vectIter!=vectEnd;
-       ++vectIter)
-  {
-    delete *vectIter;
-  }
-
-  std::vector<TMatrixD*>::const_iterator matrixBegin=mWeightMatrices.begin();
-  std::vector<TMatrixD*>::const_iterator matrixEnd=mWeightMatrices.end();
-
-  for (std::vector<TMatrixD*>::const_iterator matrixIter=matrixBegin;
-       matrixIter!=matrixEnd;
-       ++matrixIter)
-  {
-    delete *matrixIter;
-  }
-
-  mThresholdVectors.clear();
-  mWeightMatrices.clear();
-
-  mThresholdVectors=thresholdVectors;
-  mWeightMatrices=weightMatrices;
-
-}
-
-std::vector<Double_t>  TTrainedNetwork::calculateOutputValues(std::vector<Double_t> & input) const 
-{
-
-  std::vector<Double_t> result;
-
-  //now calculate the value using:
-  TVectorD** resultVector=new TVectorD*[mnHidden+1];
-  
-
-  if (input.size()!=mnInput)
-  {
-    cout << " Input size: " << input.size() << " doesn't match with network: " << mnInput << endl;
-    return result;
-  }
-  
-  for (Int_t o=0;o<mnHidden+1;++o)
-  {
-
-    int sizeActualLayer=(o<mnHidden)?mnHiddenLayerSize[o]:mnOutput;
-    int sizePreviousLayer=(o==0)?mnInput:mnHiddenLayerSize[o-1];
-
-    resultVector[o]=new TVectorD(sizeActualLayer);
-    
-    for (Int_t s=0;s<sizeActualLayer;++s)
-    {
-      Double_t nodeValue=0.;
-      if (o==0)
-      {
-        for (Int_t p=0;p<mnInput;++p)
-        {
-          nodeValue+=mWeightMatrices[o]->operator() (p,s)*input[p];
-        }
-      }
-      else
-      {
-        for (Int_t p=0;p<mnHiddenLayerSize[o-1];++p)
-        {
-          nodeValue+=mWeightMatrices[o]->operator() (p,s)*resultVector[o-1]->operator()(p);
-        }
-      }
-      nodeValue+=mThresholdVectors[o]->operator() (s);
-      resultVector[o]->operator()(s) = sigmoid(nodeValue);
-    }
-  }      
-  
-  for (Int_t i=0;i<mnOutput;i++)
-  {
-    result.push_back(resultVector[mnHidden]->operator()(i));
-  }
-
-  for (Int_t o=0;o<mnHidden+1;++o)
-  {
-    int sizeActualLayer=(o<mnHidden)?mnHiddenLayerSize[o]:mnOutput;
-    delete resultVector[o];
-  }
-  delete resultVector;
-
-  return result;
-  
-}
-
-
-
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TTrainedNetwork.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TTrainedNetwork.h
deleted file mode 100644
index 62782c67e1017f2788345291bb8b577c94c84bfb..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/TTrainedNetwork.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#ifndef __TTrainedNetwork_
-#define __TTrainedNetwork_
-
-#include "TObject.h"
-#include "TMatrixD.h"
-#include "TVectorD.h"
-#include "TJetNet.h"
-#include <math.h>
-#include <vector>
-
-//by Giacinto Piacquadio (18-02-2008)
-
-class TTrainedNetwork : public TObject
-{
- public:
-  
-  TTrainedNetwork();
-
-  //class takes ownership of all pointers...
-  TTrainedNetwork(Int_t nInput,
-		  Int_t nHidden,
-		  Int_t nOutput,
-		  std::vector<Int_t> & nHiddenLayerSize,
-		  std::vector<TVectorD*> & thresholdVectors,
-		  std::vector<TMatrixD*> & weightMatrices,
-		  Int_t activationFunction);
-
-  ~TTrainedNetwork();
-
-  void setNewWeights(std::vector<TVectorD*> & thresholdVectors,
-		     std::vector<TMatrixD*> & weightMatrices);
-
-  Int_t getnInput() const {return mnInput;};
-
-  Int_t getnHidden() const {return mnHidden;};
-
-  Int_t getnOutput() const {return mnOutput;};
-
-  const std::vector<Int_t> &  getnHiddenLayerSize() const {return mnHiddenLayerSize;};
-
-  Int_t getActivationFunction() const {return mActivationFunction;};
-
-  const std::vector<TVectorD*> & getThresholdVectors() const {return mThresholdVectors;};
-
-  const std::vector<TMatrixD*> & weightMatrices() const {return mWeightMatrices;};
-
-  std::vector<Double_t> calculateOutputValues(std::vector<Double_t> & input) const;
-
- private:
-
-  Int_t mnInput;
-  Int_t mnHidden;
-  Int_t mnOutput;
-
-  std::vector<Int_t> mnHiddenLayerSize;
-  //Int_t* mnHiddenLayerSize;
-
-  std::vector<TVectorD*> mThresholdVectors;
-  std::vector<TMatrixD*> mWeightMatrices;
-  //  TVectorD** mThresholdVectors;
-  //  TMatrixD** mWeightMatrices;
-  Int_t mActivationFunction;
-
-  Double_t sigmoid(Double_t x) const { return 1./(1.+exp(-2*x)); };
-
-  ClassDef( TTrainedNetwork, 1 )
-
-};
-
-#endif
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/doNormalization.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/doNormalization.C
deleted file mode 100755
index 96e26b573df984fb641afb426ec344075a635abb..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/doNormalization.C
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include <cmath>
-
-double norm_nVTX(int nVTX)
-{
-  return (((double)nVTX)-0.3)/0.5;
-}
-
-int back_nVTX(double nVTX)
-{
-  return (int)std::floor(nVTX*0.5+0.3+0.5);
-}
-
-double norm_nTracksAtVtx(int nTracksAtVtx)
-{
-  return ((double)nTracksAtVtx-1.)/1.6;
-}
-
-int back_nTracksAtVtx(double nTracksAtVtx)
-{
-  return (int)std::floor(nTracksAtVtx*1.6+1.+0.5);
-}
-
-double norm_nSingleTracks(int nSingleTracks)
-{
-  return ((double)nSingleTracks-0.2)/0.5;
-}
-
-int back_nSingleTracks(double nSingleTracks)
-{
-  return (int)std::floor(nSingleTracks*0.5+0.2+0.5);
-}
-
-
-double norm_energyFraction(double energyFraction)
-{
-  return (energyFraction-0.23)/0.33;
-}
-
-double back_energyFraction(double energyFraction)
-{
-  return (energyFraction*0.33)+0.23;
-}
-
-double norm_mass(double mass)
-{
-  return (mass-974.)/1600.;
-}
-
-double back_mass(double mass)
-{
-  return (mass*1600.)+974.;
-}
-
-double norm_significance3d(double s3d)
-{
-  return (s3d-7.)/14.;
-}
-
-double back_significance3d(double s3d)
-{
-  return (s3d*14.)+7.;
-}
-
-double norm_IP3D(double ip3d)
-{
-  return (ip3d-6.3)/6.;
-}
-
-double back_IP3D(double ip3d)
-{
-  return (ip3d*6.)+6.3;
-}
-
-
-double norm_cat_pT(int cat_pT)
-{
-  return ((double)cat_pT-3.)/3.;
-}
-
-int back_cat_pT(double cat_pT)
-{
-  return (int)std::floor(cat_pT*3.+3.+0.5);
-}
-
-double norm_cat_eta(double cat_eta)
-{
-  return (double)(cat_eta-1.);
-}
-
-int back_cat_eta(int cat_eta)
-{
-  return (int)std::floor(cat_eta+1.+0.5);
-}
-
-
-
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/doTraining.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/doTraining.C
deleted file mode 100644
index 05538d60e9bb1187633a36edc1bc11949d940615..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/doTraining.C
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-void doTraining(TString nameCollection,bool withIP3D) {
-
-  gSystem->Load("./libTJetNet.so");
-  gSystem->Load("trainNN_cxx.so");
-
-  
-  TString path("../../../reduceddatasets/reduceddataset_");
-  path+=nameCollection;
-  path+="_forNN.root";
-  
-  TString classname("JetFitterNN_");
-  classname+=nameCollection;
-  
-  if (withIP3D)
-  {
-    trainNN(path,classname,
-            10000,//trainingEpoches
-            2,//dilution
-            false,//dummy
-            true,//withIP3D
-            14,//nHidden1
-            9);//nHidden2
-  }
-  else
-  {
-    trainNN(path,classname,
-            10000,//trainingEpoches
-            2,//dilution
-            false,//dummy
-            false,//withIP3D
-            12,//nHidden1
-            7);//nHidden2
-  }
-  
-  gROOT->ProcessLine(".q");
-
-}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/jetnet.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/jetnet.h
deleted file mode 100644
index 4897793986443ff05e78d7dccbead5f2c0baf10a..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/jetnet.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-/*
-Modified: 30.04.2005
-
-History:
-=================================================
-30.04.2005 -- Added Subroutine JNDUMP
-
-*/
-
-#ifndef f2cFortran
-#define f2cFortran
-#endif
-#include "cfortran.h"
-
-
-/*
- 1) Feed-forward network (JN):                                        C
-   ERRJN, GAUSJN, GJN, GPJN, JNCHOP, JNCOGR, JNCGBE, JNDELT, JNDUMP,  C
-   JNERR, JNFEED, JNHEAD, JNHEIG, JNHESS, JNINDX, JNINIT, JNLINS,     C
-   JNREAD, JNROLD, JNSATM, JNSCGR, JNSEFI, JNSEPA, JNSTAT, JNTEST,    C
-   JNTRAL, JNTRED, JNTQLI                                             C
-*/
-
-#define MAXI 1000;
-#define MAXO 1000;
-
-typedef struct
-{
-  int MSTJN[ 40 ];
-  float PARJN[ 40 ];
-  int MSTJM[ 20 ];
-  float PARJM[ 20 ];
-  float OIN[ 1000 ];
-  float OUT[ 1000 ];
-  int MXNDJM;
-} JNDAT1_DEF;
-
-#define JNDAT1 COMMON_BLOCK(JNDAT1,jndat1)
-COMMON_BLOCK_DEF(JNDAT1_DEF,JNDAT1);
-
-//COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-
-typedef struct
-{
-  float TINV[ 10 ];
-  int IGFN[ 10 ];
-  float ETAL[ 10 ];
-  float WIDL[ 10 ];
-  float SATM[ 10 ];
-} JNDAT2_DEF;
-
-#define JNDAT2 COMMON_BLOCK(JNDAT2,jndat2)
-COMMON_BLOCK_DEF(JNDAT2_DEF,JNDAT2);
-
-
-typedef struct
-{
-  float O [ 2000 ]; // Current value of node I in the network, does not include the input units
-  float A [ 2000 ]; // Current value of the summed input alpha_i to node I
-  float D [ 2000 ]; // Current value of delta_i at node I
-  float T [ 2000 ]; // Current value of threshold thetha_i at node I
-  float DT [ 2000 ]; // Current value of the update delta(thetha_i) for the threshold at node I
-  float W [ 150000 ]; // Current value for the weight with index IW
-  float DW [ 150000 ]; // Current value of the update for weight with index IW
-  int NSELF [ 150000 ]; // Switches for updating weight with index IW ( 0 = do not update, 1 = update )
-  int NTSELF [ 2000 ]; // Switches for updating the threshold for node I --------- " -----------------
-  float G [ 152000 ]; // Temporary weight and threshold vectors used in CG, SCG and QP
-  float ODW [ 150000 ]; // Stores old weight gradient in CG, SCG, QP and Rprop
-  float ODT [ 2000 ];  // stores old threshold gradient in CG, SCG, QP and Rprop
-  float ETAV [ 152000 ]; // Individual learning rates used in Rprop
-} JNINT1_DEF;
-
-#define JNINT1 COMMON_BLOCK(JNINT1,jnint1)
-COMMON_BLOCK_DEF(JNINT1_DEF,JNINT1);
-
-/*
-  INTEGER FUNCTION JNINDX(IL,I,J)
-*/
-
-PROTOCCALLSFFUN3(INT,JNINDX,jnindx,INT,INT,INT)
-#define JNINDX(IL,I,J) CCALLSFFUN3(JNINDX,jnindx,INT,INT,INT,IL,I,J)
-
-
-/*
-  REAL FUNCTION GAUSJN(IDUM)
-*/
-
-PROTOCCALLSFFUN1(FLOAT,GAUSJN,gausjn,INT)
-#define GAUSJN(IDUM) CCALLSFFUN1(GAUSJN,gausjn,INT,IDUM)
-
-/*
-  REAL FUNCTION RJN(IDUM)
-*/
-
-PROTOCCALLSFFUN1(FLOAT,RJN,rjn,INT)
-#define RJN(IDUM) CCALLSFFUN1(RJN,rjn,INT,IDUM)
-  
-/*
-  SUBROUTINE JNINIT
-*/
-
-PROTOCCALLSFSUB0(JNINIT,jninit)
-#define JNINIT() CCALLSFSUB0(JNINIT,jninit)
-
-/*
-  SUBROUTINE JNTRAL
-*/
-
-PROTOCCALLSFSUB0(JNTRAL,jntral)
-#define JNTRAL() CCALLSFSUB0(JNTRAL,jntral)
-
-/*
-  SUBROUTINE JNTEST
-*/
-
-PROTOCCALLSFSUB0(JNTEST,jntest)
-#define JNTEST() CCALLSFSUB0(JNTEST,jntest)
-
-/*
-SUBROUTINE JNDUMP(NF)
-*/
-PROTOCCALLSFSUB1(JNDUMP,jndump,INT)
-#define JNDUMP(NF) CCALLSFSUB1(JNDUMP,jndump,INT,NF);
-
-
-/*
-SUBROUTINE JNREAD(NF)
-*/
-PROTOCCALLSFSUB1(JNREAD,jnread,INT)
-#define JNREAD(NF) CCALLSFSUB1(JNREAD,jnread,INT,NF);
-
-/*
-SUBROUTINE JNSTAT(IS)
-*/
-PROTOCCALLSFSUB1(JNSTAT,jnstat,INT)
-#define JNSTAT(IS) CCALLSFSUB1(JNSTAT,jnstat,INT,IS);
-
-/*				      
-SUBROUTINE JNSEFI(ILA,I1,I2,J1,J2,NO)
-*/
-PROTOCCALLSFSUB6(JNSEFI,jnsefi,INT,INT,INT,INT,INT,INT)
-#define JNSEFI(ILA,I1,I2,J1,J2,NO) CCALLSFSUB6(JNSEFI,jnsefi,INT,INT,INT,INT,INT,INT,ILA,I1,I2,J1,J2,NO);
-
-/*
-SUBROUTINE REWIND(INT,INT)
-*/
-PROTOCCALLSFSUB1(REWIND,rewind,INT)
-#define REWIND(UNIT) CCALLSFSUB1(REWIND,rewind,INT,UNIT);
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/jetnet_35.f b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/jetnet_35.f
deleted file mode 100644
index 5c4a6ced443077caa1b1c9c2e6c68837d9434ba9..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/jetnet_35.f
+++ /dev/null
@@ -1,5850 +0,0 @@
-C**********************************************************************C
-C                                                                      C
-C                          J E T N E T - 3.5                           C
-C                                                                      C
-C           A Neural Network program for jet discrimination            C
-C         and other High Energy Physics triggering situations          C
-C                                                                      C
-C                    Latest date of change 97.04.16                    C
-C                                                                      C
-C                              Authors :                               C
-C                                                                      C
-C                   Leif Lonnblad, Carsten Peterson,                   C
-C                 Hong Pi and Thorsteinn Rognvaldsson                  C
-C                                                                      C
-C                   Department of Theoretical Physics                  C
-C                  University of Lund, Solvegatan 14A,                 C
-C                           S-223 62 Lund                              C
-C                               Sweden                                 C
-C                                                                      C
-C                        tel  int+46-46109073                          C
-C                        fax  int+46-46104438                          C
-C                                                                      C
-C                     internet    leif@thep.lu.se                      C
-C                                 carsten@thep.lu.se                   C
-C                                 pihong@thep.lu.se                    C
-C                                 denni@thep.lu.se                     C
-C                                                                      C
-C           Copyright 1991-1997 L. Lonnblad & Th. Rognvaldsson         C
-C                                                                      C
-C          Please report any errors to: <denni@thep.lu.se>             C
-C                                                                      C
-C**********************************************************************C
-
-C**********************************************************************C
-C                                                                      C
-C An updated version of the program is obtainable through anonymous    C
-C ftp from thep.lu.se in directory /pub/LundPrograms/Jetnet/           C
-C                                                                      C
-C**********************************************************************C
-
-C**********************************************************************C
-C  A description of the models and the program can be found in:        C
-C                                                                      C
-C  (i) Lonnblad et. al., "Self-organizing Networks for Extracting      C
-C   Jet Features", Computer Physics Communications, vol. 67,           C
-C   pp. 193-209, 1991.                                                 C
-C                                                                      C
-C  (ii) Lonnblad et. al., "Pattern recognition in High Energy Physics  C
-C  with Artificial Neural Networks - JETNET 2.0", Computer Physics     C
-C  Communications, nr. 70, pp. 167-182, 1992.                          C
-C                                                                      C
-C  (iii) Lonnblad et. al. "JETNET 3.0 - A Versatile Artificial         C
-C  Neural Network Package", Computer Physics Communications, vol. 81,  C
-C  pp. 185-220, 1994.                                                  C
-C                                                                      C
-C**********************************************************************C
-
-C**********************************************************************C
-C         Order of appearance of subroutines and functions:            C
-C                                                                      C
-C 1) Feed-forward network (JN):                                        C
-C   ERRJN, GAUSJN, GJN, GPJN, JNCHOP, JNCOGR, JNCGBE, JNDELT, JNDUMP,  C
-C   JNERR, JNESRT, JNFEED, JNHEAD, JNHEIG, JNHESS, JNINDX, JNINIT,     C
-C   JNLINS, JNREAD, JNROLD, JNSATM, JNSCGR, JNSEFI, JNSEPA, JNSTAT,    C
-C   JNTEST, JNTRAL, JNTRTQ                                             C
-C                                                                      C
-C 2) Self-organizing network (JM):                                     C
-C   GJM, JMDUMP, JMERR, JMFEED, JMINDX, JMINIT, JMINWE, JMNBHD,        C
-C   JMNORM, JMREAD, JMSEPA, JMSTAT, JMTEST, JMTRAL, JMWARN             C
-C                                                                      C
-C The block-data subroutine JNDATA is placed at the end, together      C
-C with a test-deck in the subroutine JNTDEC, and a random number       C
-C generator called RJN.                                                C
-C**********************************************************************C
-C**********************************************************************C
-
-C**********************************************************************C
-C PART ONE: FEED-FORWARD NETWORK                                       C
-C**********************************************************************C
-
-
-      REAL FUNCTION ERRJN(IDUM)
-
-C...JetNet function calculate ERRor.
-
-C...Returns the error function.
-C...The error measure is selected by MSTJN(4).
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      SAVE /JNDAT1/,/JNINT1/,/JNINT2/
-
-
-      ERR=0.0
-      IF (MSTJN(4).EQ.0) THEN
-C...Summed square error:
-
-        DO 100 I=1,M(NL)
-          OUTVAL=O(JNINDX(NL,I,0))
-          ERR=ERR+0.5*(OUT(I)-OUTVAL)**2
-          OUT(I)=OUTVAL
-100     CONTINUE
-
-      ELSEIF (MSTJN(4).EQ.1) THEN
-C...Cross Entropy error:
-
-        DO 110 I=1,M(NL)
-C...It is assumed that OUTVAL=0.0 or OUTVAL=1.0 never happens.
-          OUTVAL=O(JNINDX(NL,I,0))
-          ERR=ERR-(OUT(I)*LOG(OUTVAL)+(1.-OUT(I))*LOG(1.-OUTVAL))
-          OUT(I)=OUTVAL
-110     CONTINUE
-
-      ELSEIF (MSTJN(4).GE.2) THEN
-C...Kullback error:
-
-        DO 120 I=1,M(NL)
-C...It is assumed that OUTVAL=0.0 never happens.
-          OUTVAL=O(JNINDX(NL,I,0))
-          IF(OUT(I).GT.0.0) THEN
-            ERR=ERR+OUT(I)*LOG(OUT(I)/OUTVAL)
-          ENDIF
-          OUT(I)=OUTVAL
-120     CONTINUE
-
-      ELSEIF (MSTJN(4).EQ.-1) THEN
-C...Log-squared error:
-
-        DO 130 I=1,M(NL)
-C...It is assumed that |OUT(I)-OUTVAL|=1.0 never happens.
-          OUTVAL=O(JNINDX(NL,I,0))
-          ERR=ERR-0.5*LOG(1.-(OUT(I)-OUTVAL)**2)
-          OUT(I)=OUTVAL
-130     CONTINUE
-
-      ENDIF
-
-      ERRJN=ERR
-
-      RETURN
-
-C**** END OF ERRJN *****************************************************
-      END
-C***********************************************************************
-
-
-      REAL FUNCTION GAUSJN(IDUM)
-C...JetNet function GAUSsian random number.
-
-C...Generates Gaussian distributed random numbers with
-C...standard deviation 1.0 and mean 0.0. Polar method.
-
-      PARAMETER (TINY=1.E-20)
-
-      COMMON /JNGAUS/ ISET,GASDEV
-      SAVE /JNGAUS/
-
-      IF (ISET.EQ.0) THEN
-100     V1=2.*RJN(IDUM)-1.
-        V2=2.*RJN(IDUM)-1.
-        R=V1**2+V2**2
-        IF ((R.GE.1.).OR.(R.LE.TINY)) GOTO 100
-C...Box-Muller transformation:
-        FAC=SQRT(-2.*LOG(R)/R)
-        GAUSJN=V1*FAC
-        GASDEV=V2*FAC
-        ISET=1
-      ELSE
-        GAUSJN=GASDEV
-        ISET=0
-      ENDIF
-
-      RETURN
-
-C**** END OF GAUSJN ****************************************************
-      END
-C***********************************************************************
-
-
-      REAL FUNCTION GJN(IND,X,N)
-
-C...JetNet function G
-
-C...Gives sigmoid function N with argument X
-C...The derivative GPrime is also calculated and stored in GPJN.
-
-      PARAMETER(MAXV=2000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNSIGM/ GPJN(MAXV),GPPJN(MAXV)
-      SAVE /JNDAT1/,/JNSIGM/
-
-
-      IF(N.EQ.1) THEN
-C...        1 -> g(x)=1/(1+exp(-2x))
-        ARG=TANH(X)
-        GJN=0.5*(1.0+ARG)
-        GPJN(IND)=0.5*(1.0-ARG**2)+PARJN(23)
-        GPPJN(IND)=ARG*(ARG**2-1.)
-      ELSEIF(N.EQ.2) THEN
-C...        2 -> g(x)=tanh(x)
-        ARG=TANH(X)
-        GJN=ARG
-        GPJN(IND)=1.-ARG**2+PARJN(23)
-        GPPJN(IND)=2.*ARG*(ARG**2-1.)
-      ELSEIF(N.EQ.3) THEN
-C...        3 -> g(x)=exp(x) (only used internally for Potts-nodes)
-        GJN=EXP(MAX(-50.0,MIN(X,50.0)))
-        GPJN(IND)=1.0
-        GPPJN(IND)=0.0
-      ELSEIF(N.EQ.4) THEN
-C...        4 -> g(x)=x
-        GJN=X
-        GPJN(IND)=1.0
-        GPPJN(IND)=0.0
-      ELSEIF(N.EQ.5) THEN
-C...        5 -> g(x)=1/(1+exp(-2x)) (only used internally for
-C...             entropy error)
-        GJN=0.5*(1.0+TANH(X))
-        GPJN(IND)=2.0
-        GPPJN(IND)=0.0
-      ELSEIF(N.EQ.-1) THEN
-C...        same as above, but with fixed precision
-        ARG=TANH(X)
-        NS=2**ABS(MSTJN(28))
-        SS=1.0/(NS-1)
-        G=0.5*(1.0+ARG)
-        NG=INT(G/SS+0.5)
-        GJN=FLOAT(NG)*SS
-        GPJN(IND)=0.5*(1.0-ARG**2)+PARJN(23)
-        GPPJN(IND)=ARG*(ARG**2-1.)
-      ELSEIF(N.EQ.-2) THEN
-        ARG=TANH(X)
-        NS=2**(ABS(MSTJN(28))-1)
-        IF(NS.EQ.1) THEN
-          GJN=SIGN(1.0,ARG)
-        ELSE
-          SS=1.0/(NS-1)
-          G=ARG
-          NG=INT(ABS(G)/SS+0.5)
-          GJN=SIGN(FLOAT(NG)*SS,G)
-        ENDIF
-        GPJN(IND)=1.-ARG**2+PARJN(23)
-        GPPJN(IND)=2.*ARG*(ARG**2-1.)
-      ELSE
-        MSTJN(3)=N
-        CALL JNERR(15)
-      ENDIF
-
-      RETURN
-
-C**** END OF GJN *******************************************************
-      END 
-C***********************************************************************
-
-
-      SUBROUTINE JNCGBE(BETAK,IOP)
-C...JetNet subroutine Conjugate Gradient BEta_k.
-
-C...If IOP=0, it only saves current value of (DW,DT)*(DW,DT) to be 
-C...used later and returns BETAK=0.0. If IOP=1, it also calculates 
-C...the beta_k value used to generate next search direction. Which 
-C...formula to use is determined by MSTJN(5).
-
-C...Note: The vector (DW,DT) equals the negative gradient of E.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-      PARAMETER(TINY=1.E-8,BIG=1.E+8)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT4/ ILINON,NC,G2,NIT,ERRLN(0:3),DERRLN,STEPLN(0:3),
-     &                STEPMN,ERRMN,IEVAL,ISUCC,ICURVE,NSC,GVEC2
-      SAVE /JNDAT2/,/JNINT1/,/JNINT2/,/JNINT4/
-
-
-      BETA=1.0
-      BETAK=0.0
-      OLDG2=G2
-      G2=0.0
-
-      IF ((MSTJN(5).EQ.4).OR.(MSTJN(5).EQ.10)) THEN
-C...Polak-Ribiere's formula:
-
-        DO 100 IL=NL,1,-1
-          IF(TINV(IL).EQ.0.0) THEN
-            BETA=BETA*PARJN(3)
-          ELSE
-            BETA=BETA*ABS(TINV(IL))
-          ENDIF
-          DO 110 I=MM0(IL)+1,MM0(IL+1)
-            DW(I)=DW(I)/FLOAT(MSTJN(2))
-            G2=G2+FLOAT(NSELF(I))*(DW(I)*BETA)**2
-            BETAK=BETAK+FLOAT(NSELF(I))*
-     &                  DW(I)*ODW(I)*BETA**2
-            ODW(I)=DW(I)
-110       CONTINUE
-          DO 120 I=MV0(IL)+1,MV0(IL+1)
-            DT(I)=DT(I)/FLOAT(MSTJN(2))
-            G2=G2+FLOAT(NTSELF(I))*(DT(I)*BETA)**2
-            BETAK=BETAK+FLOAT(NTSELF(I))*
-     &                  DT(I)*ODT(I)*BETA**2
-            ODT(I)=DT(I)
-120       CONTINUE
-100     CONTINUE
-
-        IF (IOP.EQ.0) THEN
-          BETAK=0.0
-        ELSE
-          IF (ABS(OLDG2).GT.TINY) THEN
-            BETAK=(G2-BETAK)/OLDG2
-          ELSE
-            BETAK=0.0
-          ENDIF
-        ENDIF
-
-      ELSEIF ((MSTJN(5).EQ.5).OR.(MSTJN(5).EQ.11)) THEN
-C...Hestenes-Stiefel's formula:
-
-        DGDW=0.0
-        DO 200 IL=NL,1,-1
-          IF(TINV(IL).EQ.0.0) THEN
-            BETA=BETA*PARJN(3)
-          ELSE
-            BETA=BETA*ABS(TINV(IL))
-          ENDIF
-          DO 210 I=MM0(IL)+1,MM0(IL+1)
-            DW(I)=DW(I)/FLOAT(MSTJN(2))
-            G2=G2+FLOAT(NSELF(I))*(DW(I)*BETA)**2
-            BETAK=BETAK+FLOAT(NSELF(I))*
-     &                  DW(I)*ODW(I)*BETA**2
-            DGDW=DGDW+G(I)*(ODW(I)-DW(I))*BETA**2
-            ODW(I)=DW(I)
-210       CONTINUE
-          DO 220 I=MV0(IL)+1,MV0(IL+1)
-            DT(I)=DT(I)/FLOAT(MSTJN(2))
-            G2=G2+FLOAT(NTSELF(I))*(DT(I)*BETA)**2
-            BETAK=BETAK+FLOAT(NTSELF(I))*
-     &                  DT(I)*ODT(I)*BETA**2
-            DGDW=DGDW+G(MM0(NL+1)+I)*(ODT(I)-DT(I))*BETA**2
-            ODT(I)=DT(I)
-220       CONTINUE
-200     CONTINUE
-
-        IF (IOP.EQ.0) THEN
-          BETAK=0.0
-        ELSE
-          IF (ABS(DGDW).GT.TINY) THEN
-            BETAK=(G2-BETAK)/DGDW
-          ELSE
-            BETAK=0.0
-          ENDIF
-        ENDIF
-
-      ELSEIF ((MSTJN(5).EQ.6).OR.(MSTJN(5).EQ.12)) THEN
-C...Fletcher-Reeves' formula: 
-
-        DO 300 IL=NL,1,-1
-          IF(TINV(IL).EQ.0.0) THEN
-            BETA=BETA*PARJN(3)
-          ELSE
-            BETA=BETA*ABS(TINV(IL))
-          ENDIF
-          DO 310 I=MM0(IL)+1,MM0(IL+1)
-            DW(I)=DW(I)/FLOAT(MSTJN(2))
-            G2=G2+FLOAT(NSELF(I))*(DW(I)*BETA)**2
-            ODW(I)=DW(I)
-310       CONTINUE
-          DO 320 I=MV0(IL)+1,MV0(IL+1)
-            DT(I)=DT(I)/FLOAT(MSTJN(2))
-            G2=G2+FLOAT(NTSELF(I))*(DT(I)*BETA)**2
-            ODT(I)=DT(I)
-320       CONTINUE
-300     CONTINUE
-
-       IF (IOP.EQ.0) THEN
-          BETAK=0.0
-        ELSE
-          IF (ABS(OLDG2).GT.TINY) THEN
-            BETAK=G2/OLDG2
-          ELSE
-            BETAK=0.0
-          ENDIF
-        ENDIF
-
-      ELSEIF ((MSTJN(5).EQ.7).OR.(MSTJN(5).EQ.13)) THEN
-C...Shanno's formula: 
-
-        F1=0.0
-        F2=0.0
-        F3=0.0
-        F4=0.0
-        FACT1=0.0
-        FACT2=0.0
-        DO 400 IL=NL,1,-1
-          IF(TINV(IL).EQ.0.0) THEN
-            BETA=BETA*PARJN(3)
-          ELSE
-            BETA=BETA*ABS(TINV(IL))
-          ENDIF
-          DO 410 I=MM0(IL)+1,MM0(IL+1)
-            DW(I)=DW(I)/FLOAT(MSTJN(2))
-            G2=G2+FLOAT(NSELF(I))*(DW(I)*BETA)**2
-            F1=F1-G(I)*ODW(I)*BETA
-            F2=F2+G(I)*(ODW(I)-DW(I))*BETA
-            F3=F3+ODW(I)*(DW(I)-ODW(I))*BETA**2
-            F4=F4+((DW(I)-ODW(I))*BETA)**2
-            Y=(ODW(I)-DW(I))
-            ODW(I)=DW(I)
-            DW(I)=Y
-410       CONTINUE
-          DO 420 I=MV0(IL)+1,MV0(IL+1)
-            DT(I)=DT(I)/FLOAT(MSTJN(2))
-            G2=G2+FLOAT(NTSELF(I))*(DT(I)*BETA)**2
-            F1=F1-G(MM0(NL+1)+I)*ODT(I)*BETA
-            F2=F2+G(MM0(NL+1)+I)*(ODT(I)-DT(I))*BETA
-            F3=F3+ODT(I)*(DT(I)-ODT(I))*BETA**2
-            F4=F4+((DT(I)-ODT(I))*BETA)**2
-            Y=(ODT(I)-DT(I))
-            ODT(I)=DT(I)
-            DT(I)=Y
-420       CONTINUE
-          F1=F1*STEPLN(0)
-          F2=F2*STEPLN(0)
-          IF ((ABS(F2).GT.TINY).AND.(ABS(F2).LT.BIG)) THEN
-            FACT1=F1/F2
-            FACT2=(1.0+F4/F2)*FACT1-F3/F2
-          ELSE
-            FACT1=0.0
-            FACT2=0.0
-          ENDIF
-400     CONTINUE
-
-        IF (IOP.EQ.0) THEN
-          BETAK=0.0
-          DO 430 I=1,MM0(NL+1)
-            DW(I)=ODW(I)
-430       CONTINUE
-          DO 440 I=1,MV0(NL+1)
-            DT(I)=ODT(I)
-440       CONTINUE
-        ELSE
-          BETAK=-FACT2*STEPLN(0)
-          DO 450 I=1,MM0(NL+1)
-            DW(I)=ODW(I)+FACT1*DW(I)
-450       CONTINUE
-          DO 460 I=1,MV0(NL+1)
-            DT(I)=ODT(I)+FACT1*DT(I)
-460       CONTINUE
-        ENDIF
-
-      ENDIF
-
-      RETURN        
-
-C**** END OF JNCGBE ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNCHOP(ICHP)
-C...JetNet subroutine CHOP weights
-
-C...Switches on (ICHP>0) or off (ICHP<0) fixed precision weights 
-C...thresholds and sigmoid functions. For IHCP >= 0 the weights and
-C...thresholds are chopped to the fixed precision. 
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      SAVE /JNDAT1/,/JNINT1/,/JNINT2/
-
-
-      IF(ICHP.GT.0) THEN
-        ICPON=1
-        DO 100 I=1,NL-1
-          IF(ABS(NG(I)).NE.1.AND.ABS(NG(I)).NE.2) CALL JNERR(14)
-          IF(MSTJN(28).NE.0) THEN 
-            NG(I)=-ABS(NG(I))
-          ELSE
-            NG(I)=ABS(NG(I))
-          ENDIF
-100     CONTINUE
-        IF(MSTJN(28).GT.0) THEN
-          IF(ABS(NG(NL)).NE.1.AND.ABS(NG(NL)).NE.2) CALL JNERR(14)
-          NG(NL)=-ABS(NG(NL))
-        ELSE
-          NG(NL)=ABS(NG(NL))
-        ENDIF
-
-      ENDIF
-
-      IF(ICHP.LT.0) THEN
-        ICPON=0
-        DO 110 I=1,NL
-          NG(I)=ABS(NG(I))
-110     CONTINUE
-      ENDIF
-
-      IF(ICHP.GE.0) THEN
-
-        NSW=2**(MSTJN(30)-1)
-        NST=2**(MSTJN(29)-1)
-
-        DO 200 IL=1,NL
-
-          IF(MSTJN(30).GE.1) THEN
-            WMAX=0.0
-            DO 210 I=MM0(IL)+1,MM0(IL+1)
-              WMAX=MAX(WMAX,ABS(W(I)))
-210         CONTINUE
-            SS=1.0
-            IF(NSW.GT.1) THEN
-              SS=WMAX/(NSW-1)
-            ENDIF
-            DO 220 I=MM0(IL)+1,MM0(IL+1)
-             IF(NSW.GT.1) THEN
-                W(I)=SIGN(FLOAT(INT(ABS(W(I))/SS+0.5))*SS,W(I))
-              ELSE
-                W(I)=SIGN(WMAX,W(I))
-              ENDIF
-220         CONTINUE
-          ENDIF
-
-          IF(MSTJN(29).GE.1) THEN
-            TMAX=0.0
-            DO 230 I=MV0(IL)+1,MV0(IL+1)
-              TMAX=MAX(TMAX,ABS(T(I)))
-230         CONTINUE
-            SS=1.0
-            IF(NST.GT.1) THEN
-              SS=TMAX/(NST-1)
-            ENDIF
-            DO 240 I=MV0(IL)+1,MV0(IL+1)
-              IF(NST.GT.1) THEN
-                T(I)=SIGN(FLOAT(INT(ABS(T(I))/SS+0.5))*SS,T(I))
-              ELSE
-                T(I)=SIGN(TMAX,T(I))
-              ENDIF
-240         CONTINUE
-          ENDIF
-
-200     CONTINUE
-
-      ENDIF
-
-      RETURN
-
-C**** END OF JNCHOP ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNCOGR
-
-C...JetNet subroutine COnjugate GRadient
-
-C...Performs Conjugate Gradient updating. 
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT4/ ILINON,NC,G2,NIT,ERRLN(0:3),DERRLN,STEPLN(0:3),
-     &                STEPMN,ERRMN,IEVAL,ISUCC,ICURVE,NSC,GVEC2
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/,/JNINT4/
-
-
-      IF(ILINON.EQ.0) THEN
-C...Calc. new conjugate search direction + calculate gradient:
-
-        CALL JNCGBE(BETAK,MOD(NC,(MM0(NL+1)+MV0(NL+1))))
-        NC=NC+1
-        NSC=0
-        DERRLN=0.0
-        BETA=1.0
-        STEPMN=0.0
-        DO 100 IL=NL,1,-1
-
-C...set effective beta in layer IL:
-          IF(TINV(IL).EQ.0.0) THEN
-            BETA=BETA*PARJN(3)
-          ELSE
-            BETA=BETA*ABS(TINV(IL))
-          ENDIF
-
-          DO 110 I=MM0(IL)+1,MM0(IL+1)
-            G(I)=BETAK*G(I)+DW(I)*FLOAT(NSELF(I))*BETA
-            DERRLN=DERRLN-ODW(I)*FLOAT(NSELF(I))*BETA*G(I)
-110       CONTINUE
-
-          DO 120 I=MV0(IL)+1,MV0(IL+1)
-            G(I+MM0(NL+1))=BETAK*G(I+MM0(NL+1))
-     &                     +DT(I)*FLOAT(NTSELF(I))*BETA
-            DERRLN=DERRLN-ODT(I)*FLOAT(NTSELF(I))*BETA*G(I+MM0(NL+1))
-120       CONTINUE
-
-100     CONTINUE
-
-        ILINON=1
-        NIT=0
-        CALL JNLINS
-
-      ELSE
-C...Do line search
-
-        CALL JNLINS
-
-        IF (ILINON.EQ.0) THEN
-C...Zero (DW,DT)
-          DO 130 I=1,MM0(NL+1)
-            DW(I)=0.0
-130       CONTINUE
-          DO 140 I=1,MV0(NL+1)
-            DT(I)=0.0
-140       CONTINUE
-        ENDIF
-
-      ENDIF
-
-      RETURN
-
-C**** END OF JNCOGR ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNDELT
-
-C...JetNet subroutine DELTa weights
-
-C...Calculates the change in weights and thresholds to minimize the
-C...cost function according to gradient descent
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT3/ NXIN,NYIN,NXRF,NYRF,NXHRF,NYHRF,NHRF,NRFW,NHPRF
-      COMMON /JNSIGM/ GPJN(MAXV),GPPJN(MAXV)
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/,/JNINT3/,/JNSIGM/
-
-
-C...(Learning rate and inverse temperature are multiplied in JNTRAL).
-
-C...calculate the deltas at nodes in output layer
-
-      IF (MSTJN(4).EQ.-1) THEN
-        DO 101 I=1,M(NL)
-          MI=MV0(NL)+I
-          DIFF=OUT(I)-O(MI)
-          D(MI)=DIFF*GPJN(MI)/(1.-DIFF**2)
-101     CONTINUE
-      ELSE
-        DO 100 I=1,M(NL)
-          MI=MV0(NL)+I
-          D(MI)=(OUT(I)-O(MI))*GPJN(MI)
-100     CONTINUE
-      ENDIF
-
-C...calculate deltas in following layers
-
-      DO 200 IL=NL-1,1,-1
-
-C...calculate the deltas at nodes in layer IL
-
-       DO 210 J=1,M(IL)
-         MJ=MV0(IL)+J
-         MIJ=MM0(IL+1)+(J-1)*M(IL+1)
-         SUM=0.0
-         DO 220 I=MV0(IL+1)+1,MV0(IL+1)+M(IL+1)
-           MIJ=MIJ+1
-           SUM=SUM+D(I)*W(MIJ)
-220      CONTINUE
-        D(MJ)=SUM*GPJN(MJ)
-210     CONTINUE
-200   CONTINUE
-
-C...calculate deltas at all weights between first and second layer
-
-      NEXTL=2
-
-      IF(NXIN.EQ.0) THEN
-
-C...normal first layer
-
-        DO 300 I=1,M(1)
-          MIJ=I-M(1)
-          DO 310 J=1,M(0)
-            MIJ=MIJ+M(1)
-            DW(MIJ)=DW(MIJ)+D(I)*OIN(J)
-310       CONTINUE
-          DT(I)=DT(I)+D(I)
-300     CONTINUE
-
-      ELSE
-
-C...receptive fields in first layer
-
-        DO 320 IHPRF=1,NHPRF
-
-          SUMRFT=0.0
-
-          DO 330 IY=1,NYHRF
-            IH=IY-NYHRF+(IHPRF-1)*NHRF
-            DO 340 IX=1,NXHRF
-              IH=IH+NYHRF
-              DO 350 JY=1,NYRF
-                IW=JY-NYRF+(IHPRF-1)*NRFW
-                DO 360 JX=1,NXRF
-                  IW=IW+NYRF
-                  INX=IX+JX-1
-                  IF(INX.GT.ABS(NXIN)) INX=INX-ABS(NXIN)
-                  INY=IY+JY-1
-                  IF(INY.GT.ABS(NYIN)) INY=INY-ABS(NYIN)
-                  IN=(INX-1)*ABS(NYIN)+INY
-                  DW(IW)=DW(IW)+D(IH)*OIN(IN)/FLOAT(NHRF)
-360             CONTINUE
-350           CONTINUE
-              DO 370 IN=ABS(NXIN*NYIN)+1,M(0)
-                IW=NXRF*NYRF+IN-ABS(NXIN*NYIN)+(IHPRF-1)*NRFW
-                DW(IW)=DW(IW)+D(IH)*OIN(IN)/FLOAT(NHRF)
-370           CONTINUE
-              SUMRFT=SUMRFT+D(IH)
-340         CONTINUE
-330       CONTINUE
-
-          SUMRFT=SUMRFT/FLOAT(NXHRF*NYHRF)
-
-          DO 380 IH=1,NXHRF*NYHRF
-            DT(IH+(IHPRF-1)*NHRF)=DT(IH+(IHPRF-1)*NHRF)+SUMRFT
-380       CONTINUE
-
-320     CONTINUE
-
-        DO 390 IH=NHRF*NHPRF+1,M(1)
-          IW=NRFW*NHPRF+IH-M(1)
-          DO 400 IN=1,M(0)
-            IW=IW+M(1)
-            DW(IW)=DW(IW)+D(IH)*OIN(IN)
-400       CONTINUE
-          DT(IH)=DT(IH)+D(IH)
-390     CONTINUE
-
-        IF(MSTJN(27).LT.0) THEN
-
-          DO 500 I=1,M(2)
-            MI=MV0(2)+I
-            DO 510 IHPRF=1,NHPRF
-              SUMRFW=0.0
-              DO 520 J=(IHPRF-1)*NHRF+1,IHPRF*NHRF
-                SUMRFW=SUMRFW+D(MI)*O(J)
-520           CONTINUE
-              MIJ=MM0(2)+((IHPRF-1)*NHRF-1)*M(2)+I
-              SUMRFW=SUMRFW/FLOAT(NHRF)
-              DO 530 J=1,NHRF
-                MIJ=MIJ+M(2)
-                DW(MIJ)=DW(MIJ)+SUMRFW
-530           CONTINUE
-510         CONTINUE
-            MIJ=MM0(2)+I+(NHRF*NHPRF-1)*M(2)
-            DO 540 J=NHRF*NHPRF+1,M(1)
-              MIJ=MIJ+M(2)
-              DW(MIJ)=DW(MIJ)+D(MI)*O(J)
-540         CONTINUE
-            DT(MI)=DT(MI)+D(MI)
-500       CONTINUE
-
-          NEXTL=3
-
-        ENDIF
-
-      ENDIF
-
-C...calculate deltas at all weights between following layers
-
-      DO 410 IL=NEXTL,NL
-
-       DO 420 I=1,M(IL)
-         MIJ=MM0(IL)+I-M(IL)
-         MI=MV0(IL)+I
-         DO 430 J=MV0(IL-1)+1,MV0(IL-1)+M(IL-1)
-           MIJ=MIJ+M(IL)
-           DW(MIJ)=DW(MIJ)+D(MI)*O(J)
-430      CONTINUE
-         DT(MI)=DT(MI)+D(MI)
-420     CONTINUE
-410   CONTINUE
-
-      RETURN
-
-C**** END OF JNDELT ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNDUMP(NF)
-
-C...JetNet subroutine DUMP weights
-
-C...Dumps weights, threshold and other characteristics of the
-C...net to a file for use in other programs
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT3/ NXIN,NYIN,NXRF,NYRF,NXHRF,NYHRF,NHRF,NRFW,NHPRF
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/,/JNINT3/
-
-      CHARACTER C(0:1)
-
-
-      IF(NF.LT.0) THEN
-
-C...unformatted dump
-
-        JF=-NF
-        WRITE(JF) 30
-        WRITE(JF) MSTJN,PARJN,TINV,IGFN,ETAL,WIDL,SATM
-
-        DO 100 I=1,MM0(NL+1)
-          WRITE(JF) W(I)
-100     CONTINUE
-
-        DO 110 I=1,MV0(NL+1)
-          WRITE(JF) T(I)
-110     CONTINUE
-
-        DO 120 I=1,MM0(NL+1)
-          WRITE(JF) NSELF(I)
-120     CONTINUE
-
-        DO 130 I=1,MV0(NL+1)
-          WRITE(JF) NTSELF(I)
-130     CONTINUE
-
-      ELSE
-
-C...Formatted dump
-
-        C(1)=' '
-        C(0)='*'
-
-        NFSAVE=MSTJN(6)
-        MSTJN(6)=NF
-
-        WRITE(NF,600)
-        CALL JNHEAD
-        CALL JNSTAT(1)
-        CALL JNSTAT(2)
-
-        MSTJN(6)=NFSAVE
-
-        WRITE(NF,*)
-        WRITE(NF,*)
-        WRITE(NF,*)
-
-        IF(NXIN.EQ.0) THEN
-
-          WRITE(NF,610)0,1
-          DO 200 J=1,M(0)
-            WRITE(NF,*)
-            WRITE(NF,640)(W(JNINDX(1,I,J)),
-     &                    C(NSELF(JNINDX(1,I,J))),I=1,M(1))
-200       CONTINUE
-
-        ELSE
-
-          WRITE(NF,650)
-          DO 210 IHPRF=1,NHPRF
-            WRITE(NF,*)
-            WRITE(NF,640)(W(IW),C(NSELF(IW)),
-     &                      IW=NRFW*(IHPRF-1)+1,NRFW*IHPRF)
-210       CONTINUE
-          IF(NHRF*NHPRF.LT.M(1)) THEN
-            WRITE(NF,*)
-            WRITE(NF,660)
-            DO 220 J=1,M(0)
-              WRITE(NF,*)
-              WRITE(NF,640)(W(JNINDX(1,I,J)),
-     &                    C(NSELF(JNINDX(1,I,J))),I=NHRF*NHPRF+1,M(1))
-220         CONTINUE
-          ENDIF
-
-        ENDIF
-
-        WRITE(NF,*)
-        WRITE(NF,630) 1
-        WRITE(NF,*)
-        WRITE(NF,640)(T(JNINDX(1,I,0)),
-     &                C(NTSELF(JNINDX(1,I,0))),I=1,M(1))
-
-        DO 300 IL=2,NL
-
-          WRITE(NF,*)
-          WRITE(NF,610)IL-1,IL
-          DO 310 J=1,M(IL-1)
-            WRITE(NF,*)
-            WRITE(NF,640)(W(JNINDX(IL,I,J)),
-     &                    C(NSELF(JNINDX(IL,I,J))),I=1,M(IL))
-310       CONTINUE
-
-          WRITE(NF,*)
-          WRITE(NF,630)IL
-          WRITE(NF,*)
-          WRITE(NF,640)(T(JNINDX(IL,I,0)),
-     &                  C(NTSELF(JNINDX(IL,I,0))),I=1,M(IL))
-300     CONTINUE
-
-      ENDIF
-
-600   FORMAT(26X,'Dump of weights generated by')
-610   FORMAT(21X,'Values of weights between layer',I2,' (rows) and',I2,
-     &           ' (columns)')
-630   FORMAT(30X,'Thresholds in layer',I2)
-640   FORMAT(6(E12.4,A1))
-650   FORMAT(21X,'Values of weights in receptive fields')
-660   FORMAT(21X,'Values of other weights between input layer (rows)',
-     &           ' and layer  1 (columns)')
-
-      RETURN
-
-C**** END OF JNDUMP ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNERR(IERR)
-
-C...JetNet subroutine ERROR
-
-C...Writes out an error message and stops the execution
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-      PARAMETER(MAXD2E=300)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/
-
-
-      IF (MSTJM(8).EQ.1) MSTJN(6)=MSTJM(6)
-      WRITE(MSTJN(6),600) IERR
-
-      IF(IERR.EQ.1) THEN
-        WRITE(MSTJN(6),610) MSTJN(1)
-      ELSEIF(IERR.EQ.2) THEN
-        WRITE(MSTJN(6),620) MV0(NL+1),MAXV
-      ELSEIF(IERR.EQ.3) THEN
-        WRITE(MSTJN(6),630) MM0(NL+1),MAXM
-      ELSEIF(IERR.EQ.4) THEN
-        WRITE(MSTJN(6),640)
-      ELSEIF(IERR.EQ.5) THEN
-        WRITE(MSTJN(6),650) 'JNINDX'
-      ELSEIF(IERR.EQ.6) THEN
-        WRITE(MSTJN(6),650) 'JNSEFI'
-      ELSEIF(IERR.EQ.7) THEN
-        WRITE(MSTJN(6),660) MSTJN(10),MAXI
-      ELSEIF(IERR.EQ.8) THEN
-        WRITE(MSTJN(6),670) MSTJN(NL),MAXO
-      ELSEIF(IERR.EQ.9) THEN
-        WRITE(MSTJN(6),680) MSTJN(5)
-      ELSEIF(IERR.EQ.10) THEN
-        WRITE(MSTJN(6),690) (MSTJN(I),I=23,26)
-      ELSEIF(IERR.EQ.11) THEN
-        WRITE(MSTJN(6),700) MSTJN(10),MSTJN(23),MSTJN(24)
-      ELSEIF(IERR.EQ.12) THEN
-        WRITE(MSTJN(6),710)
-      ELSEIF(IERR.EQ.13) THEN
-        WRITE(MSTJN(6),720)
-      ELSEIF(IERR.EQ.14) THEN
-        WRITE(MSTJN(6),730)
-      ELSEIF(IERR.EQ.15) THEN
-        WRITE(MSTJN(6),740)MSTJN(3)
-      ELSEIF(IERR.EQ.16) THEN
-        WRITE(MSTJN(6),750)
-      ELSEIF(IERR.EQ.17) THEN
-        WRITE(MSTJN(6),760)
-      ELSEIF(IERR.EQ.18) THEN
-        WRITE(MSTJN(6),770)
-      ELSEIF(IERR.EQ.19) THEN
-        WRITE(MSTJN(6),780)
-      ELSEIF(IERR.EQ.20) THEN
-        WRITE(MSTJN(6),790)
-      ELSEIF(IERR.EQ.21) THEN
-        WRITE(MSTJN(6),800)MSTJN(38)
-        WRITE(MSTJN(6),805)MSTJN(36)
-      ELSEIF(IERR.EQ.22) THEN
-        WRITE(MSTJN(6),650) 'JNTRAL'
-      ELSEIF(IERR.EQ.23) THEN
-        WRITE(MSTJN(6),650) 'JNTEST'
-      ELSEIF(IERR.EQ.24) THEN
-        WRITE(MSTJN(6),810)MSTJN(9)
-      ELSEIF(IERR.EQ.25) THEN
-        WRITE(MSTJN(6),820)MSTJN(7)
-      ELSEIF(IERR.EQ.26) THEN
-        WRITE(MSTJN(6),650)'JNHESS'
-      ELSEIF(IERR.EQ.27) THEN
-        WRITE(MSTJN(6),830)MM0(NL+1)+MV0(NL+1)
-      ELSEIF(IERR.EQ.28) THEN
-        WRITE(MSTJN(6),650)'JNHDIA'
-      ELSEIF(IERR.EQ.29) THEN
-        WRITE(MSTJN(6),840)MSTJN(39)
-        WRITE(MSTJN(6),850)MSTJN(9)*MSTJN(2)
-      ELSEIF(IERR.EQ.30) THEN
-        WRITE(MSTJN(6),860)
-      ELSEIF(IERR.EQ.31) THEN
-        WRITE(MSTJN(6),870)MSTJN(4)
-        WRITE(MSTJN(6),880)IGFN(NL)
-      ELSEIF(IERR.EQ.32) THEN
-        WRITE(MSTJN(6),890)
-      ENDIF
-
-      IF(IERR.GT.0) STOP 0
-
-600   FORMAT(' *** JETNET ERROR:',I2,' ***')
-610   FORMAT(' Illegal number of layers (',I3,')')
-620   FORMAT(' Total number of nodes (',I6,') exceeds limit (',I6,').')
-630   FORMAT(' Total number of weights (',I6,') exceeds limit (',
-     &I6,').')
-640   FORMAT(' Number of nodes in output layer is incompatible ',/,
-     &       ' with the dimension of the Potts-nodes.')
-650   FORMAT(' JETNET must be initialized (with JNINIT or JNREAD) ',
-     &       'before ',A6,' can be called.')
-660   FORMAT(' Total number of input nodes (',I6,
-     &                   ') exceeds limit (',I6,').')
-670   FORMAT(' Total number of output nodes (',I6,
-     &                   ') exceeds limit (',I6,').')
-680   FORMAT(' Undefined updating algorithm (',I2,') chosen.')
-690   FORMAT(' Inconsistent geometry for receptive fields:',/,
-     &       ' (MSTJN(23) = ',I4,', MSTJN(24) = ',I4,
-     &       ', MSTJN(25) = ',I4,', MSTJN(26) = ',I4,')')
-700   FORMAT(' Too few input nodes (=',I4,') for receptive fields',/,
-     &       ' (MSTJN(23) = ',I4,' and MSTJN(24) = ',I4,').')
-710   FORMAT(' In JNSEFI: attempt to connect/disconnect unconnectable',
-     &       ' nodes.')
-720   FORMAT(' Cannot read file - wrong format. Try JNROLD instead.')
-730   FORMAT(' Chopping not allowed on non-sigmoid functions.')
-740   FORMAT(' Undefined transfer function (',I2,') in GJN.')
-750   FORMAT(' Call to JNINIT after calling JMINIT')
-760   FORMAT(' JNREAD cannot read data-file produced by JMDUMP')
-770   FORMAT(' JNROLD cannot read data-file produced by JMDUMP')
-780   FORMAT(' You cannot start learning by terminating Conj. Grad.')
-790   FORMAT(' Too many warnings issued by JETNET.')
-800   FORMAT(' Nr. of restarts (',I4,') in Quickprop, line search, or ')
-805   FORMAT(' Scaled Conj. Grad. exceeds maximum MSTJN(36) = ',I4)
-810   FORMAT(' MSTJN(9) (',I3,') must be > 0')
-820   FORMAT(' Layer ',I2,' has no nodes')
-830   FORMAT(' Nr. of weights (',I6,') exceeds limit in JNHESS.')
-840   FORMAT(' Nr. of calls to JNHESS (',I5,') must be an integer ')
-850   FORMAT(' multiple of MSTJN(9)*MSTJN(2) (',I5,') if JNHEIG',
-     &       ' is invoked')
-860   FORMAT(' Too many iterations in subroutine JNTRTQ.')
-870   FORMAT(' Error function, MSTJN(4) = ',I2,', incompatible with')
-880   FORMAT(' using output transfer function = ',I3)
-890   FORMAT(' Updating turned off, MSTJN(5) = 9, when calling JNINIT')
-
-      RETURN
-
-C**** END OF JNERR *****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNESRT(NWGTS,IGRAD)
-
-C...JetNet subroutine Eigenvector/value SoRT
-
-C...Sorts the eigenvectors and eigenvalues into descending order.
-C...The routine is taken from Press et al. "Numerical Recipes", where
-C...it is called eigsrt.
-C...If IGRAD =|= 0, then eigenvectors are also sorted, otherwise not.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-      PARAMETER(MAXD2E=300)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT5/ D2E(MAXD2E,MAXD2E)
-      SAVE /JNDAT1/,/JNINT5/
-
-      DO 13 I=1,NWGTS-1
-        K=I
-        TEMP=OUT(I)
-        DO 11 J=I+1,NWGTS
-          IF(OUT(J).GE.TEMP) THEN
-            K=J
-            TEMP=OUT(J)
-          ENDIF
-11      CONTINUE
-        IF(K.NE.I) THEN
-          OUT(K)=OUT(I)
-          OUT(I)=TEMP
-          IF(IGRAD.NE.0) THEN
-            DO 12 J=1,NWGTS
-              TEMP=D2E(J,I)
-              D2E(J,I)=D2E(J,K)
-              D2E(J,K)=TEMP
-12          CONTINUE
-          ENDIF
-        ENDIF
-13    CONTINUE
-
-      RETURN
-
-C**** END OF JNESRT ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNFEED
-
-C...JetNet subroutine FEED signal through net
-
-C...Takes the the values of OIN and calculates the values of
-C...the output nodes without writing to OUT
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT3/ NXIN,NYIN,NXRF,NYRF,NXHRF,NYHRF,NHRF,NRFW,NHPRF
-      SAVE /JNDAT1/,/JNDAT2/, /JNINT1/,/JNINT2/,/JNINT3/
-
-
-C...set beta in first layer
-
-      IF(TINV(1).EQ.0.0) THEN
-        BETA=PARJN(3)
-      ELSE
-        BETA=ABS(TINV(1))
-      ENDIF
-
-C...calculate nodes in first layer
-
-      IF(NXIN.EQ.0) THEN
-
-C...normal first layer
-
-        DO 100 I=1,M(1)
-          A(I)=T(I)
-          MIJ=I-M(1)
-          DO 110 J=1,M(0)
-            MIJ=MIJ+M(1)
-            A(I)=A(I)+W(MIJ)*OIN(J)
-110       CONTINUE
-          O(I)=GJN(I,BETA*A(I),NG(1))
-100     CONTINUE
-
-      ELSE
-
-C...receptive fields in first layer
-
-        DO 120 IHPRF=1,NHPRF
-
-          DO 130 IY=1,NYHRF
-            IH=IY-NYHRF+(IHPRF-1)*NHRF
-            DO 140 IX=1,NXHRF
-              IH=IH+NYHRF
-              A(IH)=T(IH)
-              DO 150 JY=1,NYRF
-                IW=JY-NYRF+(IHPRF-1)*NRFW
-                DO 160 JX=1,NXRF
-                  IW=IW+NYRF
-                  INX=IX+JX-1
-                  IF(INX.GT.ABS(NXIN)) INX=INX-ABS(NXIN)
-                  INY=IY+JY-1
-                  IF(INY.GT.ABS(NYIN)) INY=INY-ABS(NYIN)
-                  IN=(INX-1)*ABS(NYIN)+INY
-                  A(IH)=A(IH)+W(IW)*OIN(IN)
-160             CONTINUE
-150           CONTINUE
-              DO 170 IN=ABS(NXIN*NYIN)+1,M(0)
-                IW=NXRF*NYRF+IN-ABS(NXIN*NYIN)+(IHPRF-1)*NRFW
-                A(IH)=A(IH)+W(IW)*OIN(IN)
-170           CONTINUE
-              O(IH)=GJN(IH,BETA*A(IH),NG(1))
-140         CONTINUE
-130       CONTINUE
-120     CONTINUE
-
-        DO 180 IH=NHRF*NHPRF+1,M(1)
-          A(IH)=T(IH)
-          IW=NHRF*NHPRF+IH-M(1)
-          DO 190 IN=1,M(0)
-            IW=IW+M(1)
-            A(IH)=A(IH)+W(IW)*OIN(IN)
-190       CONTINUE
-          O(IH)=GJN(IH,BETA*A(IH),NG(1))
-180     CONTINUE
-
-      ENDIF
-
-C...calculate nodes in following layers
-
-      DO 200 IL=2,NL
-
-C...set beta in layer IL
-
-       IF(TINV(IL).EQ.0.0) THEN
-         BETA=PARJN(3)
-       ELSE
-         BETA=ABS(TINV(IL))
-       ENDIF
-
-C...calculate nodes in layer IL
-
-       DO 210 I=1,M(IL)
-         MI=MV0(IL)+I
-         A(MI)=T(MI)
-         MIJ=MM0(IL)-M(IL)+I
-         DO 220 J=MV0(IL-1)+1,MV0(IL-1)+M(IL-1)
-           MIJ=MIJ+M(IL)
-           A(MI)=A(MI)+W(MIJ)*O(J)
-220      CONTINUE
-         O(MI)=GJN(MI,BETA*A(MI),NG(IL))
-210     CONTINUE
-200   CONTINUE
-
-      IF(IPOTT.LT.2) RETURN
-
-C...Special treatment of output layer if Potts-nodes
-
-      DO 300 I=1,M(NL)/IPOTT
-        DD=0.0
-        JO=MV0(NL)+(I-1)*IPOTT
-        DO 310 J=1,IPOTT
-          DD=DD+O(JO+J)
-310     CONTINUE
-        DO 320 J=1,IPOTT
-          O(JO+J)=O(JO+J)/DD
-320     CONTINUE
-300   CONTINUE
-
-      RETURN
-
-C**** END OF JNFEED ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNHEAD
-
-C...JetNet subroutine write HEADer
-
-C...Writes a header on file number NF
-
-
-      PARAMETER(MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      SAVE /JNDAT1/
-
-
-      IF(MSTJM(8).EQ.1) MSTJN(6)=MSTJM(6)
-
-      WRITE(MSTJN(6),*)
-      WRITE(MSTJN(6),*)
-      WRITE(MSTJN(6),600)
-      WRITE(MSTJN(6),610)
-      WRITE(MSTJN(6),*)
-
-600   FORMAT(14X,'The Lund Neural Network Program - JETNET version 3.5')
-610   FORMAT(14X,'******  Latest date of change: April 16, 1997 ******')
-
-      RETURN
-
-C**** END OF JNHEAD ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNHEIG(IGRAD)
-
-C...JetNet subroutine Hessian EIGenvalues.
-
-C...Diagonalizes the Hessian matrix stored in D2E. The eigenvalues
-C...are placed in the vector OUT. If IGRAD isn't equal to 0 then the
-C...eigenvectors of the Hessian are calculated.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,TINY=1.E-20)
-      PARAMETER(MAXD2E=300)
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT5/ D2E(MAXD2E,MAXD2E)
-      SAVE /JNDAT1/,/JNINT2/,/JNINT5/
-
-
-      IF (MSTJN(8).EQ.0) CALL JNERR(28)
-      IF ((MOD(MSTJN(39),(MSTJN(2)*MSTJN(9))).NE.0).OR.
-     &    (MSTJN(39).LE.0)) CALL JNERR(29)
-
-      NWGTS=MM0(NL+1)+MV0(NL+1)
-C...Compute eigenvectors/values
-      CALL JNTRTQ(NWGTS,IGRAD)
-C...Sort them in descending order
-      CALL JNESRT(NWGTS,IGRAD)
-
-      RETURN
-
-C**** END OF JNHEIG ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNHESS
-
-C...JetNet subroutine calculate HESSian
-
-C...Calculates the Hessian for the network. It assumes a summed square
-C...error (MSTJN(4)=0).
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,TINY=1.E-20)
-      PARAMETER(MAXD2E=300)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT5/ D2E(MAXD2E,MAXD2E)
-      COMMON /JNSIGM/ GPJN(MAXV),GPPJN(MAXV)
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/,/JNINT5/,/JNSIGM/
-
-      DIMENSION DD(MAXD2E),Q(MAXD2E,MAXD2E)
-
-      IF (MSTJN(8).EQ.0) CALL JNERR(26)
-      IF (MSTJN(9).LE.0) CALL JNERR(24)
-
-      NWGTS=MM0(NL+1)+MV0(NL+1)
-      IF (NWGTS.GT.MAXD2E) CALL JNERR(27)
-      IF (MOD(MSTJN(39),(MSTJN(2)*MSTJN(9))).EQ.0) THEN
-C...zero Hessian:
-        DO 100 I=1,NWGTS
-          DO 110 J=1,NWGTS
-            D2E(I,J)=0.0
-110       CONTINUE
-100     CONTINUE
-      ENDIF
-
-      MSTJN(39)=MSTJN(39)+1
-
-      CALL JNFEED
-
-C...rescale GPJN and GPPJN:
-      DO 200 IL=1,NL
-        IF(TINV(IL).EQ.0.0) THEN
-          BETA=PARJN(3)
-        ELSE
-          BETA=ABS(TINV(IL))
-        ENDIF
-        DO 210 I=1,M(IL)
-          MI=JNINDX(IL,I,0)
-          GPJN(MI)=GPJN(MI)*BETA
-          GPPJN(MI)=GPPJN(MI)*BETA**2
-210     CONTINUE
-200   CONTINUE
-
-C...compute Q:
-      DO 220 IL1=NL,2,-1
-        DO 230 IL2=IL1-1,1,-1
-          DO 240 I=1,M(IL1)
-            MI=JNINDX(IL1,I,0)
-            DO 250 J=1,M(IL2)
-              MJ=JNINDX(IL2,J,0)
-              IF (IL2.EQ.IL1-1) THEN
-                MIJ=JNINDX(IL1,I,J)
-                Q(MI,MJ)=W(MIJ)
-              ELSE
-                SUM=0.0
-                DO 260 J2=1,M(IL2+1)
-                  MJ2=JNINDX(IL2+1,J2,0)
-                  MJK=JNINDX(IL2+1,J2,J)
-                  SUM=SUM+Q(MI,MJ2)*GPJN(MJ2)*W(MJK)
-260             CONTINUE
-                Q(MI,MJ)=SUM
-              ENDIF
-250         CONTINUE
-240       CONTINUE
-230     CONTINUE
-220   CONTINUE
-
-C...Loop over output units:
-      DO 300 I=1,M(NL)
-        MI=JNINDX(NL,I,0)
-        GAM=(O(MI)-OUT(I))*GPJN(MI)
-        GAMCAP=(O(MI)-OUT(I))*GPPJN(MI)
-
-C...Diagonal weights - output layer:
-        D2E(I,I)=D2E(I,I)+GAMCAP
-        IF (NL.NE.1) THEN
-          DO 310 J1=1,M(NL-1)
-            MJ1=JNINDX(NL-1,J1,0)
-            MIJ1=M(NL)+(I-1)*M(NL-1)+J1
-            TERM=GAMCAP*O(MJ1)
-            D2E(I,MIJ1)=D2E(I,MIJ1)+TERM
-            DO 320 J2=1,J1
-              MJ2=JNINDX(NL-1,J2,0)
-              MIJ2=M(NL)+(I-1)*M(NL-1)+J2
-              D2E(MIJ2,MIJ1)=D2E(MIJ2,MIJ1)+TERM*O(MJ2)
-320         CONTINUE
-310       CONTINUE
-        ELSE
-          DO 330 J1=1,M(0)
-            MIJ1=M(NL)+(I-1)*M(0)+J1
-            TERM=GAMCAP*OIN(J1)
-            D2E(I,MIJ1)=D2E(I,MIJ1)+TERM
-            DO 340 J2=1,J1
-              MIJ2=M(NL)+(I-1)*M(0)+J2
-              D2E(MIJ2,MIJ1)=D2E(MIJ2,MIJ1)+TERM*OIN(J2)
-340         CONTINUE
-330       CONTINUE
-        ENDIF
-
-C...Diagonal weights - other layers:
-        IOFST=0
-        DO 350 IL=NL-1,1,-1
-          IOFST=IOFST+M(IL+1)*(1+M(IL))
-          DO 360 J1=1,M(IL)
-            MJ1=JNINDX(IL,J1,0)
-            FACTOR=GAM*Q(MI,MJ1)*GPPJN(MJ1)
-
-            D2E(IOFST+J1,IOFST+J1)=D2E(IOFST+J1,IOFST+J1)+FACTOR
-            IF (IL.GT.1) THEN
-              DO 370 K1=1,M(IL-1)
-                MK1=JNINDX(IL-1,K1,0)
-                MJK1=M(IL)+(J1-1)*M(IL-1)+K1
-                TERM=FACTOR*O(MK1)
-                D2E(IOFST+J1,IOFST+MJK1)=
-     &          D2E(IOFST+J1,IOFST+MJK1)+TERM
-                DO 380 K2=1,K1
-                  MK2=JNINDX(IL-1,K2,0)
-                  MJK2=M(IL)+(J1-1)*M(IL-1)+K2
-                  D2E(IOFST+MJK2,IOFST+MJK1)=
-     &            D2E(IOFST+MJK2,IOFST+MJK1)+TERM*O(MK2)
-380             CONTINUE
-370           CONTINUE
-            ELSE
-              DO 390 K1=1,M(0)
-                MJK1=M(1)+(J1-1)*M(0)+K1
-                TERM=FACTOR*OIN(K1)
-                D2E(IOFST+J1,IOFST+MJK1)=
-     &          D2E(IOFST+J1,IOFST+MJK1)+TERM
-                DO 400 K2=1,K1
-                  MJK2=M(1)+(J1-1)*M(0)+K2
-                  D2E(IOFST+MJK2,IOFST+MJK1)=
-     &            D2E(IOFST+MJK2,IOFST+MJK1)+TERM*OIN(K2)
-400             CONTINUE
-390           CONTINUE
-            ENDIF
-
-            DO 410 J2=1,M(IL)
-              MJ2=JNINDX(IL,J2,0)
-              FACTOR=GAMCAP*Q(MI,MJ1)*GPJN(MJ1)*Q(MI,MJ2)*GPJN(MJ2)
-              IF (IL.LE.NL-2) THEN
-                SUM=0.0
-                DO 420 IL2=NL-1,IL+1,-1
-                  DO 430 J=1,M(IL2)
-                    MJ=JNINDX(IL2,J,0)
-                    SUM=SUM+Q(MI,MJ)*GPPJN(MJ)*Q(MJ,MJ1)*Q(MJ,MJ2)
-430               CONTINUE
-420             CONTINUE
-                FACTOR=FACTOR+SUM*GAM*GPJN(MJ1)*GPJN(MJ2)
-              ENDIF
-
-              IF (J2.GE.J1) THEN
-                D2E(IOFST+J1,IOFST+J2)=D2E(IOFST+J1,IOFST+J2)+FACTOR
-              ENDIF
-              IF (IL.GT.1) THEN
-                DO 431 K1=1,M(IL-1)
-                  MK1=JNINDX(IL-1,K1,0)
-                  MJK1=M(IL)+(J2-1)*M(IL-1)+K1
-                  TERM=FACTOR*O(MK1)
-                  D2E(IOFST+J1,IOFST+MJK1)=
-     &            D2E(IOFST+J1,IOFST+MJK1)+TERM
-                  IF (J2.EQ.J1) THEN
-                    DO 440 K2=1,K1
-                      MK2=JNINDX(IL-1,K2,0)
-                      MJK2=M(IL)+(J1-1)*M(IL-1)+K2
-                      D2E(IOFST+MJK2,IOFST+MJK1)=
-     &                D2E(IOFST+MJK2,IOFST+MJK1)+TERM*O(MK2)
-440                 CONTINUE
-                  ELSEIF (J2.GT.J1) THEN
-                    DO 450 K2=1,M(IL-1)
-                      MK2=JNINDX(IL-1,K2,0)
-                      MJK2=M(IL)+(J1-1)*M(IL-1)+K2
-                      D2E(IOFST+MJK2,IOFST+MJK1)=
-     &                D2E(IOFST+MJK2,IOFST+MJK1)+TERM*O(MK2)
-450                 CONTINUE
-                  ENDIF
-431             CONTINUE
-              ELSE
-                DO 460 K1=1,M(0)
-                  MJK1=M(1)+(J2-1)*M(0)+K1
-                  TERM=FACTOR*OIN(K1)
-                  D2E(IOFST+J1,IOFST+MJK1)=
-     &            D2E(IOFST+J1,IOFST+MJK1)+TERM
-                  IF (J2.EQ.J1) THEN
-                    DO 470 K2=1,K1
-                      MJK2=M(1)+(J1-1)*M(0)+K2
-                      D2E(IOFST+MJK2,IOFST+MJK1)=
-     &                D2E(IOFST+MJK2,IOFST+MJK1)+TERM*OIN(K2)
-470                 CONTINUE
-                  ELSEIF (J2.GT.J1) THEN
-                    DO 480 K2=1,M(0)
-                      MJK2=M(1)+(J1-1)*M(0)+K2
-                      D2E(IOFST+MJK2,IOFST+MJK1)=
-     &                D2E(IOFST+MJK2,IOFST+MJK1)+TERM*OIN(K2)
-480                 CONTINUE
-                  ENDIF
-460             CONTINUE
-              ENDIF
-
-410         CONTINUE
-360       CONTINUE
-
-350     CONTINUE
-C...End of diagonal weights.
-
-C...1st off-diagonal - output layer:
-        IOFST2=M(NL)*(1+M(NL-1))
-        DO 500 J=1,M(NL-1)
-          MJ=JNINDX(NL-1,J,0)
-          FACTOR=GAMCAP*Q(MI,MJ)*GPJN(MJ)
-
-          D2E(I,IOFST2+J)=D2E(I,IOFST2+J)+FACTOR
-
-          MIJ=M(NL)+(I-1)*M(NL-1)+J
-          FACT2=GAM*GPJN(MJ)
-
-          D2E(MIJ,IOFST2+J)=D2E(MIJ,IOFST2+J)+FACT2
-          IF (NL.GT.2) THEN
-            DO 510 K=1,M(NL-2)
-              MK=JNINDX(NL-2,K,0)
-              MJK=M(NL-1)+(J-1)*M(NL-2)+K
-              D2E(I,IOFST2+MJK)=
-     &        D2E(I,IOFST2+MJK)+FACTOR*O(MK)
-              D2E(MIJ,IOFST2+MJK)=
-     &        D2E(MIJ,IOFST2+MJK)+FACT2*O(MK)
-510         CONTINUE
-          ELSE
-            DO 520 K=1,M(0)
-              MJK=M(1)+(J-1)*M(0)+K
-              D2E(I,IOFST2+MJK)=
-     &        D2E(I,IOFST2+MJK)+FACTOR*OIN(K)
-              D2E(MIJ,IOFST2+MJK)=
-     &        D2E(MIJ,IOFST2+MJK)+FACT2*OIN(K)
-520         CONTINUE
-          ENDIF
-          DO 530 J2=1,M(NL-1)
-            MJ2=JNINDX(NL-1,J2,0)
-            MIJ2=M(NL)+(I-1)*M(NL-1)+J2
-            TERM=FACTOR*O(MJ2)
-            D2E(MIJ2,IOFST2+J)=D2E(MIJ2,IOFST2+J)+TERM
-            IF (NL.GT.2) THEN
-              DO 540 K=1,M(NL-2)
-                MK=JNINDX(NL-2,K,0)
-                MJK=M(NL-1)+(J-1)*M(NL-2)+K
-                D2E(MIJ2,IOFST2+MJK)=
-     &          D2E(MIJ2,IOFST2+MJK)+TERM*O(MK)
-540           CONTINUE
-            ELSE
-              DO 550 K=1,M(0)
-                MJK=M(1)+(J-1)*M(0)+K
-                D2E(MIJ2,IOFST2+MJK)=
-     &          D2E(MIJ2,IOFST2+MJK)+TERM*OIN(K)
-550           CONTINUE
-            ENDIF
-530       CONTINUE
-
-500     CONTINUE
-
-C...1st off-diagonal - other layers:
-        IOFST1=0
-        DO 560 IL=NL-1,2,-1
-          IOFST1=IOFST1+M(IL+1)*(1+M(IL))
-          IOFST2=IOFST2+M(IL)*(1+M(IL-1))
-          DO 570 J=1,M(IL)
-            MJ=JNINDX(IL,J,0)
-            DO 580 K=1,M(IL-1)
-              MK=JNINDX(IL-1,K,0)
-              FACTOR=GAMCAP*Q(MI,MJ)*GPJN(MJ)*Q(MI,MK)*GPJN(MK)+
-     &             GAM*Q(MI,MJ)*GPPJN(MJ)*Q(MJ,MK)*GPJN(MK)
-              IF (IL.LE.NL-2) THEN
-                SUM=0.0
-                DO 590 IL2=NL-1,IL+1,-1
-                  DO 600 J2=1,M(IL2)
-                    MJ2=JNINDX(IL2,J2,0)
-                    SUM=SUM+Q(MI,MJ2)*GPPJN(MJ2)*Q(MJ2,ML)*Q(MJ2,MJ)
-600               CONTINUE
-590             CONTINUE
-                FACTOR=FACTOR+SUM*GAM*GPJN(ML)*GPJN(MJ)
-              ENDIF
-
-              D2E(IOFST1+I,IOFST2+J)=D2E(IOFST1+I,IOFST2+J)+FACTOR
-
-              MJK=M(IL)+(J-1)*M(IL-1)+K
-              FACT2=GAM*Q(MI,MJ)*GPJN(MJ)*GPJN(MK)
-
-              D2E(IOFST1+MJK,IOFST2+J)=D2E(IOFST1+MJK,IOFST2+J)+FACT2
-
-              IF (IL-1.GT.1) THEN
-                DO 610 L=1,M(IL-2)
-                  ML=JNINDX(IL-2,L,0)
-                  MKL=M(IL-1)+(K-1)*M(IL-2)+L
-                  D2E(IOFST1+J,IOFST2+MKL)=
-     &            D2E(IOFST1+J,IOFST2+MKL)+FACTOR*O(ML)
-                  D2E(IOFST1+MJK,IOFST2+MKL)=
-     &            D2E(IOFST1+MJK,IOFST2+MKL)+FACT2*O(ML)
-610             CONTINUE
-              ELSE
-                DO 620 L=1,M(0)
-                  MKL=M(1)+(K-1)*M(0)+L
-                  D2E(IOFST1+J,IOFST2+MKL)=
-     &            D2E(IOFST1+J,IOFST2+MKL)+FACTOR*OIN(L)
-                  D2E(IOFST1+MJK,IOFST2+MKL)=
-     &            D2E(IOFST1+MJK,IOFST2+MKL)+FACT2*OIN(L)
-620             CONTINUE
-              ENDIF
-              DO 630 K2=1,M(IL-1)
-                MK2=JNINDX(IL-1,K2,0)
-                MJK2=M(IL)+(K-1)*M(IL-1)+K2
-                TERM=FACTOR*O(MK2)
-                D2E(IOFST1+MJK2,IOFST2+K)=D2E(IOFST1+MJK2,IOFST2+K)+
-     &                                    TERM
-                IF (IL-1.GT.1) THEN
-                  DO 640 L=1,M(IL-2)
-                    ML=JNINDX(IL-2,L,0)
-                    MKL=M(IL-1)+(K-1)*M(IL-2)+L
-                    D2E(IOFST1+MJK2,IOFST2+MKL)=
-     &              D2E(IOFST1+MJK2,IOFST2+MKL)+TERM*O(ML)
-640               CONTINUE
-                ELSE
-                  DO 650 L=1,M(0)
-                    MKL=M(1)+(K-1)*M(0)+L
-                    D2E(IOFST1+MJK2,IOFST2+MKL)=
-     &              D2E(IOFST1+MJK2,IOFST2+MKL)+TERM*OIN(L)
-650               CONTINUE
-                ENDIF
-630           CONTINUE
-
-580         CONTINUE
-570       CONTINUE
-560     CONTINUE
-C...End of 1st off-diagonal.
-
-C...Higher off-diagonals - output layer:
-        IOFST2=M(NL)*(1+M(NL-1))
-        DO 660 IL=NL-2,1,-1
-          IOFST2=IOFST2+M(IL+1)*(1+M(IL))
-          DO 670 K=1,M(IL)
-            MK=JNINDX(IL,K,0)
-            FACTOR=GAMCAP*Q(MI,MK)*GPJN(MK)
-
-            D2E(I,IOFST2+K)=D2E(I,IOFST2+K)+FACTOR
-            DO 690 J=1,M(NL-1)
-              MJ=JNINDX(NL-1,J,0)
-              MJK=M(NL)+(I-1)*M(NL-1)+J
-              FACT2=GAM*GPJN(MJ)*Q(MJ,MK)*GPJN(MK)
-              D2E(MJK,IOFST2+K)=D2E(MJK,IOFST2+K)+FACT2
-              IF (IL.GT.1) THEN
-                DO 700 L=1,M(IL-1)
-                  ML=JNINDX(IL-1,L,0)
-                  MKL=M(IL)+(K-1)*M(IL-1)+L
-                  D2E(I,IOFST2+MKL)=
-     &            D2E(I,IOFST2+MKL)+FACTOR*O(ML)
-                  D2E(MJK,IOFST2+MKL)=
-     &            D2E(MJK,IOFST2+MKL)+FACT2*O(ML)
-700             CONTINUE
-              ELSE
-                DO 710 L=1,M(0)
-                  MKL=M(1)+(K-1)*M(0)+L
-                  D2E(I,IOFST2+MKL)=
-     &            D2E(I,IOFST2+MKL)+FACTOR*OIN(L)
-                  D2E(MJK,IOFST2+MKL)=
-     &            D2E(MJK,IOFST2+MKL)+FACT2*OIN(L)
-710             CONTINUE
-              ENDIF
-690         CONTINUE
-670       CONTINUE
-660     CONTINUE
-
-C...Higher off-diagonals - other layers:
-        IOFST1=0
-        DO 720 IL1=NL-1,2,-1
-          IOFST1=IOFST1+M(IL1+1)*(1+M(IL1))
-          IOFST2=M(NL)*(1+M(NL-1))
-          DO 730 IL2=IL1-2,1,-1
-            IOFST2=IOFST2+M(IL2+1)*(1+M(IL2))
-            DO 740 J=1,M(IL1)
-              MJ=JNINDX(IL1,J,0)
-              DO 750 L=1,M(IL2)
-                ML=JNINDX(IL2,L,0)
-                FACTOR=GAMCAP*Q(MI,ML)*GPJN(ML)*Q(MI,MJ)*GPJN(MJ)+
-     &                 GAM*Q(MI,MJ)*GPPJN(MJ)*Q(MJ,ML)*GPJN(ML)
-                IF (IL1.LE.NL-2) THEN
-                  SUM=0.0
-                  DO 760 IL3=NL-1,IL1+1,-1
-                    DO 770 J2=1,M(IL3)
-                      MJ2=JNINDX(IL3,J2,0)
-                      SUM=SUM+Q(MI,MJ2)*GPPJN(MJ2)*Q(MJ2,MJ)*Q(MJ2,ML)
-770                 CONTINUE
-760               CONTINUE
-                  FACTOR=FACTOR+SUM*GAM*GPJN(ML)*GPJN(MJ)
-                ENDIF
-
-                D2E(IOFST1+J,IOFST2+L)=D2E(IOFST1+J,IOFST2+L)+
-     &                                 FACTOR
-                DO 780 K=1,M(IL1-1)
-                  MK=JNINDX(IL1-1,K,0)
-                  MKL=M(IL1)+(J-1)*M(IL1-1)+K
-                  FACT2=GAM*Q(MI,MJ)*GPJN(MJ)*GPJN(MK)*Q(MK,ML)*GPJN(ML)
-                  D2E(IOFST1+MKL,IOFST2+L)=D2E(IOFST1+MKL,IOFST2+L)+
-     &                                     FACT2
-                  IF (IL2.GT.1) THEN
-                    DO 790 M1=1,M(IL2-1)
-                      MM=JNINDX(IL2-1,M1,0)
-                      MLM=M(IL2)+(L-1)*M(IL2-1)+M1
-                      D2E(IOFST1+J,IOFST2+MLM)=
-     &                D2E(IOFST1+J,IOFST2+MLM)+FACTOR*O(MM)
-                      D2E(IOFST1+MKL,IOFST2+MLM)=
-     &                D2E(IOFST1+MKL,IOFST2+MLM)+FACT2*O(MM)
-790                 CONTINUE
-                  ELSE
-                    DO 800 M1=1,M(0)
-                      MLM=M(1)+(L-1)*M(0)+M1
-                      D2E(IOFST1+J,IOFST2+MLM)=
-     &                D2E(IOFST1+J,IOFST2+MLM)+FACTOR*OIN(M1)
-                      D2E(IOFST1+MKL,IOFST2+MLM)=
-     &                D2E(IOFST1+MKL,IOFST2+MLM)+FACT2*OIN(M1)
-800                 CONTINUE
-                  ENDIF
-780             CONTINUE
-
-750           CONTINUE
-740         CONTINUE
-730       CONTINUE
-720     CONTINUE
-
-300   CONTINUE
-C...End of loop over outputs.
-
-
-C...Add Jacobian part:
-      DO 900 I=1,M(NL)
-        DO 901 J=1,M(NL)
-          DD(J)=0.0
-          DO 902 K=1,M(NL-1)
-            DD(M(NL)+(J-1)*M(NL-1)+K)=0.0
-902       CONTINUE
-901     CONTINUE
-
-        MI=JNINDX(NL,I,0)
-        D(MI)=GPJN(MI)
-
-        DO 910 IL=NL-1,1,-1
-
-          DO 920 J=1,M(IL)
-            MJ=MV0(IL)+J
-            SUM=0.0
-            IF (IL.LT.NL-1) THEN
-              MIJ=MM0(IL+1)+(J-1)*M(IL+1)
-              DO 930 II=MV0(IL+1)+1,MV0(IL+1)+M(IL+1)
-                MIJ=MIJ+1
-                SUM=SUM+D(II)*W(MIJ)
-930           CONTINUE
-              D(MJ)=SUM*GPJN(MJ)
-            ELSE
-              MIJ=JNINDX(NL,I,J)
-              D(MJ)=D(MI)*W(MIJ)*GPJN(MJ)
-            ENDIF
-920       CONTINUE
-
-910     CONTINUE
-
-        DD(I)=D(MI)
-
-        IF (NL.EQ.1) THEN
-          DO 940 J=1,M(0)
-            DD(M(1)+(I-1)*M(0)+J)=D(MI)*OIN(J)
-940       CONTINUE
-        ELSE
-          DO 950 J=1,M(NL-1)
-            MJ=MV0(NL-1)+J
-            DD(M(NL)+(I-1)*M(NL-1)+J)=D(MI)*O(MJ)
-            DD(M(NL)+M(NL)*M(NL-1)+J)=D(MJ)
-950       CONTINUE
-          IOFST=M(NL)+M(NL)*M(NL-1)+M(NL-1)
-          DO 960 IL=NL-2,1,-1
-            DO 970 K=1,M(IL)
-              MK=MV0(IL)+K
-              INDX=IOFST+M(IL)*M(IL+1)+K
-              DD(INDX)=D(MK)
-              DO 980 J=1,M(IL+1)
-                MJ=MV0(IL+1)+J
-                INDX=IOFST+(J-1)*M(IL)+K
-                DD(INDX)=D(MJ)*O(MK)
-980           CONTINUE
-970         CONTINUE
-            IOFST=IOFST+M(IL)*M(IL+1)+M(IL)
-960       CONTINUE
-          DO 990 K=1,M(0)
-            DO 1000 J=1,M(1)
-              MJ=MV0(1)+J
-              INDX=IOFST+(J-1)*M(0)+K
-              DD(INDX)=D(MJ)*OIN(K)
-1000        CONTINUE
-990       CONTINUE
-        ENDIF
-
-        DO 1010 IW=1,NWGTS
-          DO 1020 IV=IW,NWGTS
-            D2E(IW,IV)=D2E(IW,IV)+DD(IW)*DD(IV)
-1020      CONTINUE
-1010    CONTINUE
-
-900   CONTINUE
-
-10    IF (MOD(MSTJN(39),(MSTJN(2)*MSTJN(9))).EQ.0) THEN
-C...Symmetrize and normalize the Hessian.
-        NWGTS=MM0(NL+1)+MV0(NL+1)
-        DO 20 I=1,NWGTS
-          D2E(I,I)=D2E(I,I)/FLOAT(MSTJN(2)*MSTJN(9))
-          DO 30 J=I+1,NWGTS
-            D2E(I,J)=D2E(I,J)/FLOAT(MSTJN(2)*MSTJN(9))
-            D2E(J,I)=D2E(I,J)
-30        CONTINUE
-20      CONTINUE
-      ENDIF
-
-      RETURN
-
-C**** END OF JNHESS ****************************************************
-      END
-C***********************************************************************
-
-
-      INTEGER FUNCTION JNINDX(IL,I,J)
-
-C...JetNet function INDeX
-
-C...Gives the node vector index of node I in layer IL for J=0
-C...else gives the weight vector index of weight between node  
-C...I of layer IL and node J of layer IL-1
-
-      PARAMETER(MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT3/ NXIN,NYIN,NXRF,NYRF,NXHRF,NYHRF,NHRF,NRFW,NHPRF
-      SAVE /JNDAT1/,/JNINT2/,/JNINT3/
-
-
-      IF(MSTJN(8).EQ.0) CALL JNERR(5)
-
-      IF(J.EQ.0) THEN
-        JNINDX=MV0(IL)+I
-      ELSE
-        IF(NXIN.EQ.0.OR.IL.GT.1) THEN
-          JNINDX=MM0(IL)+(J-1)*M(IL)+I
-        ELSE
-          IF(I.LE.NHRF*NHPRF) THEN
-            IF(J.LE.ABS(NXIN*NYIN)) THEN
-              IX=(I-1)/NYHRF+1
-              IY=MOD(I-1,NYHRF)+1
-              INX=(J-1)/ABS(NYIN)+1
-              INY=MOD(J-1,ABS(NYIN))+1
-              JX=INX-IX+1
-              IF(JX.LE.0) JX=JX+NXRF
-              IF(JX.LE.0) CALL JNERR(12)
-              IF(JX.GT.NXRF) CALL JNERR(12)
-              JY=INY-IY+1
-              IF(JY.LE.0) JY=JY+NYRF
-              IF(JY.LE.0) CALL JNERR(12)
-              IF(JY.GT.NYRF) CALL JNERR(12)
-              JNINDX=(JX-1)*NYRF+JY+((I-1)/NHRF)*NRFW
-            ELSE
-              JNINDX=NXRF*NYRF+J-ABS(NXIN*NYIN)+((I-1)/NHRF)*NRFW
-            ENDIF
-          ELSE
-            JNINDX=NHPRF*NRFW+(J-1)*M(1)+I-NXHRF*NYHRF
-          ENDIF
-        ENDIF
-      ENDIF
-
-      RETURN
-
-C**** END OF JNINDX ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNINIT
-
-C...JetNet subroutine INITialize net
-
-C...Initializes a net according to switches and parameters in 
-C.../JNDAT1/ and /JNDAT2/
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT4/ ILINON,NC,G2,NIT,ERRLN(0:3),DERRLN,STEPLN(0:3),
-     &                STEPMN,ERRMN,IEVAL,ISUCC,ICURVE,NSC,GVEC2
-      COMMON /JNINT3/ NXIN,NYIN,NXRF,NYRF,NXHRF,NYHRF,NHRF,NRFW,NHPRF
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/,/JNINT3/,/JNINT4/
-
-
-C...Check if JMINIT has been called
-
-      IF(MSTJM(8).EQ.1) CALL JNERR(16)
-
-C...Set parameters in /JNINT2/
-
-      CALL JNSEPA
-
-C...Set initial values of weights and thresholds
-
-      DO 100 IL=1,NL
-
-C...Set width in this layer
-
-        IF(WIDL(IL).LE.0) THEN
-          WIDTH=PARJN(4)
-        ELSE
-          WIDTH=WIDL(IL)
-        ENDIF
-
-C...Initialize weights
-
-        DO 110 I=MM0(IL)+1,MM0(IL+1)
-          IDUM=I
-          IF (WIDTH.GE.0.) THEN
-            W(I)=(2.0*RJN(IDUM)-1.0)*WIDTH
-          ELSE
-            W(I)=-RJN(IDUM)*WIDTH
-          ENDIF
-110     CONTINUE
-
-C...Initialize thresholds
-
-        DO 120 I=MV0(IL)+1,MV0(IL+1)
-          IDUM=I
-          IF (WIDTH.GE.0.) THEN
-            T(I)=(2.0*RJN(IDUM)-1.0)*WIDTH
-          ELSE
-            T(I)=-RJN(IDUM)*WIDTH
-          ENDIF
-120     CONTINUE
-
-100   CONTINUE
-
-      IF(NXIN.NE.0) THEN
-        DO 130 IHPRF=1,NHPRF
-          DO 140 I=2,NHRF
-            T((IHPRF-1)*NHRF+I)=T((IHPRF-1)*NHRF+1)
-140       CONTINUE
-130     CONTINUE
-
-        IF(MSTJN(27).LT.0) THEN
-          DO 150 I=1,M(2)
-            DO 160 IHPRF=1,NHPRF
-              MIJ=MM0(2)+(IHPRF-1)*NHRF*M(2)+I
-              SUMRFW=W(MIJ)
-              DO 170 J=2,NHRF
-                MIJ=MIJ+M(2)
-                W(MIJ)=SUMRFW
-170           CONTINUE
-160         CONTINUE
-150       CONTINUE
-        ENDIF
-
-      ENDIF
-
-C...Write statistics on output file
-
-      IF(MSTJN(6).LT.0) RETURN
-
-      CALL JNHEAD
-
-      CALL JNSTAT(1)
-
-      WRITE(MSTJN(6),600)
-
-600   FORMAT(22X,'Weights and thresholds set randomly')
-
-      RETURN
-
-C**** END OF JNINIT ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNLINS
-
-C...JetNet subroutine do LINe Search.
-
-C...Performs a line search in the direction of G.
-C...The algorithm is a mixture between 'golden section search' and
-C...quadratic interpolation. Termination of the search is controlled
-C...by either of two criteria: (1) If the error has decreased 
-C...sufficiently much - set by PARJN(24); or (2) if the predicted
-C...location of the error is within the preset - PARJN(25) - tolerance
-C...distance from the current best point.
-C...The first step is always equal to PARJN(1), but PARJN(1) is set to
-C...about half the size of the last successful step every time
-C...the algorithm finds a minimum (provided that this step size is
-C...smaller than the maximum allowed step size).
-
-C...ERRLN(1) = error value in current point.
-C...ERRLN(2-3) = error values in previous points.
-C...ERRLN(0) = error value in the starting point.
-C...STEPLN(1) = step to be taken (the current point is always at x=0).
-C...STEPLN(2-3) = distance to previous points.
-C...STEPLN(0) = distance to starting point.
-C...STEPMN = distance to best minimum so far.
-C...PARJN(26)=minimum allowed relative change in error.
-C...PARJN(27)=maximum allowed step size.
-
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-      PARAMETER(GOLD=1.618034,CGOLD=0.3819660,GLIMIT=10.0,
-     &          TINY=1.E-20,ZEPS=1.E-8)
-
-C...ZEPS=machine precision.
-C...TINY=small number to prevent division by zero.
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT4/ ILINON,NC,G2,NIT,ERRLN(0:3),DERRLN,STEPLN(0:3),
-     &                STEPMN,ERRMN,IEVAL,ISUCC,ICURVE,NSC,GVEC2
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/,/JNINT4/
-
-
-      IF (MSTJN(5).EQ.8) THEN
-C...Back up to best point so far and terminate updating.
-        IF (PARJN(8).LE.ERRMN) THEN
-          ERRMN=PARJN(8)
-          STEPMN=0.0
-        ENDIF
-        STEPLN(1)=-STEPMN
-C...Freeze updating:
-        MSTJN(5)=9
-        ILINON=0
-        NC=0
-        NIT=0
-        NSC=0
-        GOTO 20
-      ENDIF
-
-      NIT=NIT+1
-      IF (NIT.GT.MSTJN(35)) THEN
-C...Too many iterations -> restart from best minimum so far
-C...and rescale PARJN(1) according to previous success.
-        IF (MSTJN(38).GE.MSTJN(36)) CALL JNERR(21)
-        MSTJN(38)=MSTJN(38)+1
-        IF (ILINON.GT.0) THEN
-          IF (ERRLN(1).LE.ERRLN(0)) THEN
-            IF (ABS(STEPLN(0)).GT.TINY) THEN
-              PARJN(1)=MIN(MAX(ABS(STEPLN(0)),
-     &                     PARJN(1)*GOLD),PARJN(27))
-            ELSE
-              PARJN(1)=MIN(PARJN(1)*GOLD,PARJN(27))
-            ENDIF
-          ELSE
-            PARJN(1)=PARJN(1)*CGOLD
-          ENDIF
-        ELSE
-          PARJN(1)=PARJN(1)*CGOLD
-        ENDIF
-        PARJN(1)=MAX(PARJN(1),ZEPS)
-        STEPLN(1)=-STEPMN
-        ILINON=0
-        NC=0
-        NIT=0
-        GOTO 20
-      ENDIF
-
-      ETA=0.0
-10    IF (NIT.LT.3) THEN
-C...At least 3 points are needed
-
-        ERRLN(2)=ERRLN(1)
-C...Store last updated error 
-        ERRLN(1)=PARJN(8)
-
-        IF (NIT.EQ.1) THEN
-          ERRLN(0)=ERRLN(1)
-          ERRMN=ERRLN(1)
-          STEPLN(0)=0.0
-          STEPMN=0.0
-          DO 100 I=2,3
-            STEPLN(I)=0.0
-            ERRLN(I)=0.0
-100       CONTINUE
-          IF (ABS(DERRLN).GT.TINY) THEN
-            STEPLN(1)=-SIGN(PARJN(1),DERRLN)
-          ELSE
-            STEPLN(1)=PARJN(1)
-          ENDIF
-        ELSE
-          STEPLN(2)=-STEPLN(1)
-          DE2=2.*(ERRLN(1)-ERRLN(2)+STEPLN(2)*DERRLN)/STEPLN(2)**2
-          IF (ABS(DERRLN/STEPLN(2)).LT.(DE2*GLIMIT)) THEN
-            STEPLN(1)=-DERRLN/DE2
-          ELSE
-            STEPLN(1)=STEPLN(1)*GOLD
-          ENDIF
-        ENDIF
-
-        IF (ERRLN(1).LT.ERRMN) THEN
-          STEPMN=0.0
-          ERRMN=ERRLN(1)
-        ENDIF
-
-      ELSEIF (ILINON.GT.0) THEN
-C...Bracket the minimum
-
-C...Update error and step values:
-        ERRLN(3)=ERRLN(2)
-        ERRLN(2)=ERRLN(1)
-        STEPLN(3)=-STEPLN(1)+STEPLN(2)
-        STEPLN(2)=-STEPLN(1)
-        STEPLN(1)=0.0
-        ERRLN(1)=PARJN(8)
-        IF (ERRLN(1).LT.ERRMN) THEN
-          STEPMN=0.0
-          ERRMN=ERRLN(1)
-        ENDIF
-
-C...Check if the search is improving - else take default step.
-        IF (ABS(1.-ERRLN(0)/ERRLN(1)).LT.PARJN(26)) THEN
-          STEPLN(1)=-STEPLN(2)*GOLD
-          GOTO 20
-        ENDIF
-
-C...Quadratic fit
-        IF (((ERRLN(1)-ERRLN(3))*TINY).GT.STEPLN(3)) THEN
-          FACTOR=-1.0
-        ELSE
-          BC=((ERRLN(1)-ERRLN(3))/(STEPLN(3)+TINY) -
-     &       (ERRLN(1)-ERRLN(2))/(STEPLN(2)+TINY))/
-     &       (STEPLN(2)-STEPLN(3)+TINY)
-          AC=-BC*STEPLN(2)-(ERRLN(1)-ERRLN(2))/(STEPLN(2)+TINY)
-          ETA=-AC/(2.*BC+TINY)
-          IF (ABS(ETA).GT.TINY) THEN
-            FACTOR=(ERRLN(1)-ERRLN(2))/
-     &             (STEPLN(2)*(2.*ETA-STEPLN(2))+TINY)
-          ELSE
-            FACTOR=-1.0
-          ENDIF
-        ENDIF
-
-        IF (ERRLN(1).LT.ERRLN(2)) THEN
-          IF (ERRLN(1).LT.ERRLN(3)) THEN
-            IF (STEPLN(2)*STEPLN(3).LT.0.) THEN
-C...Minimum is bracketed -> find it
-              ILINON=-1
-              GOTO 10
-            ELSE
-C...Keep searching:
-              IF (FACTOR.GT.0.) THEN
-C...Quadratic fit OK.
-                IF ((ABS(ETA/STEPLN(2)).LT.GLIMIT).OR.
-     &              (ABS(ETA/STEPLN(3)).LT.GLIMIT)) THEN
-                  STEPLN(1)=ETA
-                ELSE
-                  STEPLN(1)=-STEPLN(2)*GOLD
-                ENDIF
-              ELSE
-                STEPLN(1)=-STEPLN(2)*GOLD
-              ENDIF
-            ENDIF
-          ELSE
-            IF (STEPLN(2)/STEPLN(3).GT.1.) THEN
-C...Back up to point (3)
-              STEPLN(1)=STEPLN(3)
-            ELSE
-C...Back up beyond point (3)
-              STEPLN(1)=GOLD*STEPLN(3)
-              STEPLN(2)=STEPLN(3)
-              ERRLN(2)=ERRLN(3)
-            ENDIF
-          ENDIF
-        ELSEIF (ERRLN(1).GT.ERRLN(2)) THEN
-          IF (ERRLN(2).LT.ERRLN(3)) THEN
-            IF (STEPLN(3)/STEPLN(2).GT.1.) THEN
-C...Minimum is bracketed -> back up towards point (2)
-              IF ((ETA/STEPLN(2).GT.0.).AND.
-     &           (ETA/STEPLN(2).LT.1.)) THEN
-                STEPLN(1)=ETA
-              ELSE
-                STEPLN(1)=STEPLN(2)
-                STEPLN(2)=STEPLN(3)
-                ERRLN(2)=ERRLN(3)
-              ENDIF
-              ILINON=-2
-            ELSE
-              STEPLN(1)=STEPLN(2)*GOLD
-            ENDIF
-          ELSE
-C...Rearrange and move beyond point (3)
-            STEPLN(1)=STEPLN(3)*GOLD
-            STEPLN(2)=STEPLN(3)
-            ERRLN(2)=ERRLN(3)
-          ENDIF
-        ELSE
-C...Take default step
-          STEPLN(1)=-STEPLN(2)*GOLD
-        ENDIF
-
-      ELSEIF (ILINON.LT.0) THEN
-C...Find minimum (knowing that minimum is bracketed)
-        ERRNOW=PARJN(8)
-        IF (ERRNOW.LT.ERRMN) THEN
-          STEPMN=0.0
-          ERRMN=ERRNOW
-        ENDIF
-C...Check bracket condition:
-        IF ((ERRNOW.GE.ERRLN(2)).OR.(ERRNOW.GE.ERRLN(3))) THEN
-          ILINON=1
-          GOTO 10
-        ENDIF
-
-        IF ((ERRLN(0)-ERRNOW).LE.
-     &       PARJN(24)*STEPLN(0)*DERRLN) THEN
-C...Satisfactory -> terminate search
-          NIT=0
-          ILINON=0
-          IF (ABS(STEPLN(0)).GT.ZEPS) THEN
-            PARJN(1)=MAX(MIN(ABS(STEPLN(0))*CGOLD,PARJN(27)),ZEPS)
-          ENDIF
-          IF (ERRNOW.GT.ERRMN) THEN
-C...Back up to best minimum so far
-            STEPLN(1)=-STEPMN
-            GOTO 20
-          ELSE
-            MSTJN(37)=0
-            RETURN
-          ENDIF
-        ELSE
-          IF (ILINON.NE.-1) THEN
-C...Rearrange points:
-            IF (ERRNOW.LE.ERRLN(1)) THEN
-              IF (STEPLN(1)/(STEPLN(2)+TINY).GT.0.) THEN
-                STEPLN(3)=-STEPLN(1)
-                ERRLN(3)=ERRLN(1)
-                STEPLN(2)=STEPLN(2)-STEPLN(1)
-                STEPLN(1)=0.0
-                ERRLN(1)=ERRNOW
-              ELSE
-                STEPLN(3)=STEPLN(3)-STEPLN(1)
-                STEPLN(2)=-STEPLN(1)
-                ERRLN(2)=ERRLN(1)
-                STEPLN(1)=0.0
-                ERRLN(1)=ERRNOW
-              ENDIF
-            ELSE
-              IF (STEPLN(1)/(STEPLN(2)+TINY).GT.0.) THEN
-                STEPLN(2)=STEPLN(1)
-                ERRLN(2)=ERRNOW
-                STEPLN(1)=0.0
-              ELSE
-                STEPLN(3)=STEPLN(1)
-                ERRLN(3)=ERRNOW
-                STEPLN(1)=0.0
-              ENDIF
-            ENDIF
-          ELSE
-            STEPLN(1)=0.0
-            ILINON=-2
-          ENDIF
-C...Quadratic fit
-          IF (((ERRLN(1)-ERRLN(3))*TINY).GT.STEPLN(3)) THEN
-            FACTOR=-1.0
-          ELSE
-            BC=((ERRLN(1)-ERRLN(3))/(STEPLN(3)+TINY) -
-     &         (ERRLN(1)-ERRLN(2))/(STEPLN(2)+TINY))/
-     &         (STEPLN(2)-STEPLN(3)+TINY)
-            AC=-BC*STEPLN(2)-(ERRLN(1)-ERRLN(2))/(STEPLN(2)+TINY)
-            ETA=-AC/(2.*BC+TINY)
-            IF (ABS(ETA).GT.TINY) THEN
-              FACTOR=(ERRLN(1)-ERRLN(2))/
-     &               (STEPLN(2)*(2.*ETA-STEPLN(2))+TINY)
-            ELSE
-              FACTOR=-1.0
-            ENDIF
-          ENDIF
-C..Tolerance:
-          TOL=MAX(PARJN(25),ZEPS)
-          IF (FACTOR.GT.0.) THEN
-C...Quadratic fit OK
-            IF (ETA/(STEPLN(2)+TINY).GT.0.) THEN
-              IF ((ETA/(STEPLN(2)+TINY).LT.1.).AND.
-     &            (ABS(ETA-STEPLN(2)).GT.TOL)) THEN
-                STEPLN(1)=ETA
-              ELSE
-                STEPLN(1)=CGOLD*STEPLN(2)
-              ENDIF
-            ELSEIF (ETA/(STEPLN(3)+TINY).GT.0.) THEN
-              IF ((ETA/(STEPLN(3)+TINY).LT.1.).AND.
-     &            (ABS(ETA-STEPLN(3)).GT.TOL)) THEN
-                STEPLN(1)=ETA
-              ELSE
-                STEPLN(1)=CGOLD*STEPLN(3)
-              ENDIF
-            ELSE
-C...Step too large -> decrease
-              STEPLN(1)=CGOLD*SIGN(MIN(STEPLN(2),STEPLN(3)),ETA)
-            ENDIF
-          ELSE
-C...Take step towards the most distant of points (2) and (3)
-            IF (STEPLN(2)/(STEPLN(3)+TINY).LT.-1.) THEN
-              STEPLN(1)=CGOLD*STEPLN(2)
-            ELSE
-              STEPLN(1)=CGOLD*STEPLN(3)
-            ENDIF
-          ENDIF
-        ENDIF
-        IF (ABS(STEPLN(1)).LE.TOL) THEN
-C...Predicted step less than tolerance from current point
-C...                                  -> terminate search
-          NIT=0
-          ILINON=0
-          IF (ABS(STEPLN(0)).GT.ZEPS) THEN
-            PARJN(1)=MAX(MIN(ABS(STEPLN(0))*CGOLD,PARJN(27)),ZEPS)
-          ENDIF
-          IF (ERRNOW.GT.ERRMN) THEN
-C...Back up to best minimum so far
-            STEPLN(1)=-STEPMN
-          ELSE
-            MSTJN(37)=ABS(ILINON)
-            RETURN
-          ENDIF
-        ENDIF
-      ENDIF
-
-20    CONTINUE
-C...Update weight vector:
-      DO 110 I=1,MM0(NL+1)
-        W(I)=W(I)+STEPLN(1)*G(I)*FLOAT(NSELF(I))
-110   CONTINUE
-      DO 120 I=1,MV0(NL+1)
-        T(I)=T(I)+STEPLN(1)*G(I+MM0(NL+1))*FLOAT(NTSELF(I))
-120   CONTINUE
-C...Keep track of starting point and best point up to now:
-      STEPLN(0)=STEPLN(0)+STEPLN(1)
-      STEPMN=STEPMN+STEPLN(1)
-
-      MSTJN(37)=ABS(ILINON)
-      RETURN
-
-C**** END OF JNLINS ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNREAD(NF)
-
-C...JetNet subroutine READ weights and parameters.
-
-C...Reads weights, thresholds and other statistics from a file NF and
-C...initializes the net
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT3/ NXIN,NYIN,NXRF,NYRF,NXHRF,NYHRF,NHRF,NRFW,NHPRF
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/,/JNINT3/
-
-      CHARACTER LINE*100
-      DIMENSION MST(6),PAR(21)
-
-
-      IF(NF.LT.0) THEN
-
-C...unformatted read
-
-        NFSAVE=MSTJN(6)
-
-        JF=-NF
-        READ(JF) IVERS
-        IF(IVERS.LT.0) CALL JNERR(17)
-        IF(IVERS.LT.20) CALL JNERR(13)
-        IF(IVERS/10.EQ.2) THEN
-C...New meanings for MSTJN(35-) and PARJN(20-)
-          DO 400 I=1,6
-            MST(I)=MSTJN(34+I)
-400       CONTINUE
-          DO 410 I=1,21
-            PAR(I)=PARJN(19+I)
-410       CONTINUE
-        ENDIF
-        READ(JF) MSTJN,PARJN,TINV,IGFN,ETAL,WIDL,SATM
-
-        IF(IVERS/10.EQ.2) THEN
-          DO 420 I=1,6
-            MSTJN(34+I)=MST(I)
-420       CONTINUE
-          DO 430 I=1,21
-            PARJN(19+I)=PAR(I)
-430       CONTINUE
-        ENDIF
-
-        CALL JNSEPA
-
-        DO 100 I=1,MM0(NL+1)
-          READ(JF) W(I)
-100     CONTINUE
-
-        DO 110 I=1,MV0(NL+1)
-          READ(JF) T(I)
-110     CONTINUE
-
-        DO 120 I=1,MM0(NL+1)
-          READ(JF) NSELF(I)
-120     CONTINUE
-
-        DO 130 I=1,MV0(NL+1)
-          READ(JF) NTSELF(I)
-130     CONTINUE
-
-        MSTJN(6)=NFSAVE
-
-      ELSE
-
-C...Formatted dump
-
-        READ(NF,690)LINE
-        IF (LINE(27:28).EQ.' D') CALL JNERR(17)
-        READ(NF,*)
-        READ(NF,*)
-        READ(NF,650)FVERS
-        IVERS=INT(FVERS*10.0+0.001)
-        IF(IVERS.LT.20) CALL JNERR(13)
-        IF(IVERS/10.EQ.2) THEN
-C...New meanings for MSTJN(35-) and PARJN(20-)
-          DO 440 I=1,6
-            MST(I)=MSTJN(34+I)
-440       CONTINUE
-          DO 450 I=1,21
-            PAR(I)=PARJN(19+I)
-450       CONTINUE
-        ENDIF
-
-900     READ(NF,690) LINE
-        IF(LINE(1:24).NE.'        I       1      2') GOTO 900
-
-        NFSAVE=MSTJN(6)
-
-        READ(NF,601)(MSTJN(I),I=1,6),TRN,(MSTJN(I),I=8,10)
-        MSTJN(7)=INT(10**TRN+0.5)
-        READ(NF,600)(MSTJN(10+I),I=1,10)
-        READ(NF,600)(MSTJN(20+I),I=1,10)
-        READ(NF,600)(MSTJN(30+I),I=1,10)
-        READ(NF,610)(PARJN(I),I=1,10)
-        READ(NF,610)(PARJN(10+I),I=1,10)
-        READ(NF,610)(PARJN(20+I),I=1,10)
-        READ(NF,610)(PARJN(30+I),I=1,10)
-        PARJN(22)=10.**PARJN(22)
-        READ(NF,600)(IGFN(I),I=1,10)
-        READ(NF,610)(TINV(I),I=1,10)
-        READ(NF,610)(ETAL(I),I=1,10)
-        READ(NF,610)(WIDL(I),I=1,10)
-        READ(NF,610)(SATM(I),I=1,10)
-        READ(NF,*)
-
-        MSTJN(6)=NFSAVE
-
-        IF(IVERS/10.EQ.2) THEN
-          DO 460 I=1,6
-            MSTJN(34+I)=MST(I)
-460       CONTINUE
-          DO 470 I=1,21
-            PARJN(19+I)=PAR(I)
-470       CONTINUE
-        ENDIF
-
-        CALL JNSEPA
-     
-        READ(NF,*)
-        READ(NF,*)
-        READ(NF,*)
-
-        IF(NXIN.EQ.0) THEN
-
-          READ(NF,*)
-          DO 200 J=1,M(0)
-            READ(NF,*)
-            READ(NF,620)(W(JNINDX(1,I,J)),
-     &                    LINE(I:I),I=1,M(1))
-            DO 210 I=1,M(1)
-              IF(LINE(I:I).EQ.'*') THEN
-                NSELF(JNINDX(1,I,J))=0
-              ELSE
-                NSELF(JNINDX(1,I,J))=1
-              ENDIF
-210         CONTINUE
-
-200       CONTINUE
-
-        ELSE
-
-
-          READ(NF,*)
-          DO 220 IHPRF=1,NHPRF
-            READ(NF,*)
-            READ(NF,620)(W(IW),LINE(IW:IW),
-     &                     IW=NRFW*(IHPRF-1)+1,NRFW*IHPRF)
-            DO 230 IW=NRFW*(IHPRF-1)+1,NRFW*IHPRF
-              IF(LINE(IW:IW).EQ.'*') THEN
-                NSELF(IW)=0
-              ELSE
-                NSELF(IW)=1
-              ENDIF
-230         CONTINUE
-220       CONTINUE
-
-          IF(NHRF*NHPRF.LT.M(1)) THEN
-            READ(NF,*)
-            READ(NF,*)
-            DO 240 J=1,M(0)
-              READ(NF,*)
-              READ(NF,620)(W(JNINDX(1,I,J)),LINE(I:I),
-     &                                I=NHRF*NHPRF+1,M(1))
-              DO 250 I=NHRF*NHPRF+1,M(1)
-                IF(LINE(I:I).EQ.'*') THEN
-                  NSELF(JNINDX(1,I,J))=0
-                ELSE
-                  NSELF(JNINDX(1,I,J))=1
-                ENDIF
-250           CONTINUE
-240         CONTINUE
-          ENDIF
-
-        ENDIF
-
-        READ(NF,*)
-        READ(NF,*)
-        READ(NF,*)
-        READ(NF,620)(T(JNINDX(1,I,0)),LINE(I:I),I=1,M(1))
-        DO 260 I=1,M(1)
-          IF(LINE(I:I).EQ.'*') THEN
-            NTSELF(JNINDX(1,I,0))=0
-          ELSE
-            NTSELF(JNINDX(1,I,0))=1
-          ENDIF
-260     CONTINUE
-
-        DO 300 IL=2,NL
-
-          READ(NF,*)
-          READ(NF,*)
-          DO 310 J=1,M(IL-1)
-            READ(NF,*)
-            READ(NF,620)(W(JNINDX(IL,I,J)),LINE(I:I),I=1,M(IL))
-            DO 320 I=1,M(IL)
-              IF(LINE(I:I).EQ.'*') THEN
-                NSELF(JNINDX(IL,I,J))=0
-              ELSE
-                NSELF(JNINDX(IL,I,J))=1
-              ENDIF
-320         CONTINUE
-310       CONTINUE
-
-          READ(NF,*)
-          READ(NF,*)
-          READ(NF,*)
-          READ(NF,620)(T(JNINDX(IL,I,0)),LINE(I:I),I=1,M(IL))
-          DO 330 I=1,M(IL)
-            IF(LINE(I:I).EQ.'*') THEN
-              NTSELF(JNINDX(IL,I,0))=0
-            ELSE
-              NTSELF(JNINDX(IL,I,0))=1
-            ENDIF
-330       CONTINUE
-
-300    CONTINUE
-
-      ENDIF
-
-C...Write statistics on output file
-
-      IF(MSTJN(6).LT.0) RETURN
-
-      CALL JNHEAD
-
-      CALL JNSTAT(1)
-
-      WRITE(MSTJN(6),640)
-
-600   FORMAT(TR11,10I7)
-601   FORMAT(TR11,6I7,F7.3,3I7)
-610   FORMAT(TR11,10F7.4)
-620   FORMAT(6(F12.4,A1))
-640   FORMAT(29X,'Weights read from file')
-650   FORMAT(TR63,F3.1)
-690   FORMAT(A)
-
-      RETURN
-
-C**** END OF JNREAD ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNROLD(NF)
-
-C...JetNet subroutine Read weights from OLD versions
-C...(JETNET 1.0 and 1.1)
-
-C...Reads weights, thresholds and other statistics from a file NF and
-C...initializes the net
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/
-
-      CHARACTER*80 LINE
-      DIMENSION MSTJNO(20),PARJNO(20)
-
-
-C...MSTJN(9) has a new meaning:
-      MSTJ9=MSTJN(9)
-
-C...PARJN(5) has new meaning:
-      PARJ5=PARJN(5)
-
-C...PARJN(11-20) have new meanings:
-      PARJ11=PARJN(11)
-      PARJ12=PARJN(12)
-      PARJ13=PARJN(13)
-      PARJ14=PARJN(14)
-      PARJ15=PARJN(15)
-      PARJ16=PARJN(16)
-      PARJ17=PARJN(17)
-      PARJ18=PARJN(18)
-      PARJ19=PARJN(19)
-      PARJ20=PARJN(20)
-
-      IF(NF.LT.0) THEN
-
-C...unformatted read
-
-        JF=-NF
-        READ(JF) MSTJNO,PARJNO,TINV,IGFN
-
-        DO 100 I=1,20
-          MSTJN(I)=MSTJNO(I)
-          PARJN(I)=PARJNO(I)
-100     CONTINUE
-
-        MSTJN(9)=MSTJ9
-        PARJN(5)=PARJ5
-        PARJN(11)=PARJ11
-        PARJN(12)=PARJ12
-        PARJN(13)=PARJ13
-        PARJN(14)=PARJ14
-        PARJN(15)=PARJ15
-        PARJN(16)=PARJ16
-        PARJN(17)=PARJ17
-        PARJN(18)=PARJ18
-        PARJN(19)=PARJ19
-        PARJN(20)=PARJ20
-
-        CALL JNSEPA
-
-        DO 110 I=1,MM0(NL+1)
-          READ(JF) W(I)
-110     CONTINUE
-
-        DO 120 I=1,MV0(NL+1)
-          READ(JF) T(I)
-120     CONTINUE
-
-        DO 130 I=1,MM0(NL+1)
-          READ(JF) NSELF(I)
-130     CONTINUE
-
-      ELSE
-
-C...Formatted dump
-
-        READ(NF,690)LINE
-        IF (LINE(27:28).EQ.' D') CALL JNERR(18)
-900     READ(NF,690) LINE
-        IF(LINE(1:24).NE.'         I      1      2'.AND.
-     &     LINE(1:25).NE.'          I      1      2') GOTO 900
-
-        NFSAVE=MSTJN(6)
-
-        READ(NF,600)(MSTJNO(I),I=1,10)
-        READ(NF,600)(MSTJNO(10+I),I=1,10)
-        READ(NF,610)(PARJNO(I),I=1,10)
-        READ(NF,600)(IGFN(I),I=1,10)
-        READ(NF,610)(TINV(I),I=1,10)
-        READ(NF,*)
-
-        DO 200 I=1,20
-          MSTJN(I)=MSTJNO(I)
-          PARJN(I)=PARJNO(I)
-200     CONTINUE
-
-        MSTJN(6)=NFSAVE
-        MSTJN(9)=MSTJ9
-        PARJN(5)=PARJ5
-        PARJN(11)=PARJ11
-        PARJN(12)=PARJ12
-        PARJN(13)=PARJ13
-        PARJN(14)=PARJ14
-        PARJN(15)=PARJ15
-        PARJN(16)=PARJ16
-        PARJN(17)=PARJ17
-        PARJN(18)=PARJ18
-        PARJN(19)=PARJ19
-        PARJN(20)=PARJ20
-
-        CALL JNSEPA
-     
-        READ(NF,*)
-        READ(NF,*)
-        DO 210 IL=1,NL
-
-          READ(NF,*)
-          READ(NF,*)
-          DO 220 J=1,M(IL-1)
-            READ(NF,*)
-            READ(NF,620)(W(JNINDX(IL,I,J)),LINE(I:I),I=1,M(IL))
-            DO 230 I=1,M(IL)
-              IF(LINE(I:I).EQ.'*') THEN
-                NSELF(JNINDX(IL,I,J))=0
-              ELSE
-                NSELF(JNINDX(IL,I,J))=1
-              ENDIF
-230         CONTINUE
-220       CONTINUE
-
-         READ(NF,*)
-         READ(NF,*)
-         READ(NF,*)
-         READ(NF,630)(T(JNINDX(IL,I,0)),I=1,M(IL))
-210    CONTINUE
-
-      ENDIF
-
-C...Write statistics on output file
-
-      IF(MSTJN(6).LT.0) RETURN
-
-      CALL JNHEAD
-
-      CALL JNSTAT(1)
-
-      WRITE(MSTJN(6),640)
-
-600   FORMAT(TR11,10I7)
-610   FORMAT(TR11,10F7.4)
-620   FORMAT(10(F7.4,A1))
-630   FORMAT(10F8.4)
-640   FORMAT(17X,'Weights read from file produced with version 1')
-690   FORMAT(A)
-
-      RETURN
-
-C**** END OF JNROLD ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNSATM
-C...JetNet subroutine SATuration Measure
-
-C...Calculates the saturation measure "S" for each layer.
-C...Note: The response function for the layer must be a sigmoid.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/
-
-
-      DO 100 IL=1,NL
-
-        IF (ABS(NG(IL)).EQ.1.OR.ABS(NG(IL)).EQ.5) THEN
-
-          SUM=0.0
-          DO 110 I=1,M(IL)
-            MI=MV0(IL)+I
-            SUM=SUM+(1.-2.*O(MI))**2
-110       CONTINUE
-          SM(IL)=SM(IL)+SUM/FLOAT(M(IL))
-
-        ELSEIF (ABS(NG(IL)).EQ.2) THEN
-
-          SUM=0.0
-          DO 120 I=1,M(IL)
-            MI=MV0(IL)+I
-            SUM=SUM+O(MI)**2
-120       CONTINUE
-          SM(IL)=SM(IL)+SUM/FLOAT(M(IL))
-
-        ELSE
-          SM(IL)=0.0
-        ENDIF
-
-100   CONTINUE
-
-      RETURN
-
-C**** END OF JNSATM ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNSCGR
-
-C...JetNet subroutine Scaled Conjugate GRadient
-
-C...Performs the Scaled Conjugate Gradient updating.
-
-C...The algorithm is described in:
-C...M. F. Moller, "A Scaled Conjugate Gradient Algorithm for Fast
-C...Supervised Learning", Neural Networks, Vol. 6, pp 525-533 (1993)
-
-C...The following notation is used (cf. Moller's article):
-C...S-vector = -(DW,DT)
-C...R-vector = (ODW,ODT)
-C...P-vector = G
-C...K = NSC
-C...MU=-DERRLN
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-      PARAMETER(ZEPS=1.E-8,TINY=1.E-20,XLAMX=1.0)
-
-C...ZEPS=Machine precision
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT4/ ILINON,NC,G2,NIT,ERRLN(0:3),DERRLN,STEPLN(0:3),
-     &                STEPMN,ERRMN,IEVAL,ISUCC,ICURVE,NSC,GVEC2
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/,/JNINT4/
-
-      REAL LAMBDA
-
-      EQUIVALENCE (ALPHA,STEPLN(1)),(LAMBDA,STEPLN(2)),
-     &            (SIGMA,ERRLN(1)),(DELTA,ERRLN(2)),(CDELTA,ERRLN(3))
-
-
-      IF (MSTJN(5).EQ.14) THEN
-C...Move to last minimum and terminate the search.
-        IF (PARJN(8).LE.ERRLN(0)) STEPLN(0)=0.0
-        DO 400 I=1,MM0(NL+1)
-          W(I)=W(I)-STEPLN(0)*G(I)
-400     CONTINUE
-        DO 410 I=1,MV0(NL+1)
-          T(I)=T(I)-STEPLN(0)*G(I+MM0(NL+1))
-410     CONTINUE
-        NSC=0
-        NIT=0
-        NC=0
-        ILINON=0
-        MSTJN(5)=9
-        MSTJN(37)=ABS(ILINON)
-        RETURN
-      ENDIF
-
-      IF (IEVAL.EQ.1) GOTO 10
-
-      IF (ISUCC.GT.0) THEN
-C...Calculate 2nd order information:
-        NSC=NSC+1
-        NC=0
-
-        IF (ICURVE.EQ.0) THEN
-C...1st sweep -> Create new search direction and 
-C...             Get curvature information
-
-          ERRLN(0)=PARJN(8)
-
-          CALL JNCGBE(BETAK,MOD((NSC-1),(MM0(NL+1)+MV0(NL+1))))
-          DERRLN=0.0
-          BETA=1.0
-          GVEC2=0.0
-          DO 100 IL=NL,1,-1
-
-C...set effective beta in layer IL:
-            IF(TINV(IL).EQ.0.0) THEN
-              BETA=BETA*PARJN(3)
-            ELSE
-              BETA=BETA*ABS(TINV(IL))
-            ENDIF
-
-            DO 110 I=MM0(IL)+1,MM0(IL+1)
-              G(I)=BETAK*G(I)+ODW(I)*FLOAT(NSELF(I))*BETA
-              DERRLN=DERRLN-ODW(I)*FLOAT(NSELF(I))*BETA*G(I)
-              GVEC2=GVEC2+G(I)**2
-110         CONTINUE
-
-            DO 120 I=MV0(IL)+1,MV0(IL+1)
-              G(I+MM0(NL+1))=BETAK*G(I+MM0(NL+1))
-     &                       +ODT(I)*FLOAT(NTSELF(I))*BETA
-              DERRLN=DERRLN-ODT(I)*FLOAT(NTSELF(I))*BETA*G(I+MM0(NL+1))
-              GVEC2=GVEC2+G(I+MM0(NL+1))**2
-120         CONTINUE
-
-100       CONTINUE
-
-C...Initial value for lambda
-          IF (NSC.EQ.1) LAMBDA=PARJN(29)
-
-          NIT=1
-          SIGMA=PARJN(28)/(SQRT(GVEC2)+TINY)
-          FACTOR=FLOAT(MSTJN(2))
-          DO 200 I=1,MM0(NL+1)
-            DW(I)=-DW(I)*FACTOR
-            W(I)=W(I)+SIGMA*G(I)
-200       CONTINUE
-          DO 210 I=1,MV0(NL+1)
-            DT(I)=-DT(I)*FACTOR
-            T(I)=T(I)+SIGMA*G(I+MM0(NL+1))
-210       CONTINUE
-          ICURVE=1
-          MSTJN(37)=ABS(ILINON)
-          STEPLN(0)=SIGMA
-          RETURN
-        ELSE
-C...2nd sweep -> Curvature information exists
-          DELTA=0.0
-          FACTOR=SIGMA*FLOAT(MSTJN(2))+TINY
-          DO 220 I=1,MM0(NL+1)
-            DW(I)=-DW(I)/FACTOR
-            DELTA=DELTA+G(I)*DW(I)
-            W(I)=W(I)-SIGMA*G(I)
-220       CONTINUE
-          DO 230 I=1,MV0(NL+1)
-            DT(I)=-DT(I)/FACTOR
-            DELTA=DELTA+G(I+MM0(NL+1))*DT(I)
-            T(I)=T(I)-SIGMA*G(I+MM0(NL+1))
-230       CONTINUE
-          ILINON=1
-          ICURVE=0
-          STEPLN(0)=0.0
-        ENDIF
-      ENDIF
-
-      IF ((DELTA+LAMBDA*GVEC2).LE.0.0) THEN
-C...Make Hessian positive definite:
-        LAMBDA=2.*(LAMBDA-DELTA/(GVEC2+TINY))
-      ENDIF
-      DELTA=DELTA+LAMBDA*GVEC2
-
-C...Update weights to calculate comparison parameter:
-      ALPHA=-DERRLN/(DELTA+TINY)
-      IF ((ABS(ALPHA).LE.ZEPS).OR.(NIT.GE.MSTJN(35)).OR.
-     &(LAMBDA.GT.XLAMX)) THEN
-C...Search is stuck! -> Restart.
-        DO 280 I=1,MM0(NL+1)
-          DW(I)=0.0
-280     CONTINUE
-        DO 290 I=1,MV0(NL+1)
-          DT(I)=0.0
-290     CONTINUE
-        STEPLN(0)=0.0
-        ISUCC=1
-        IEVAL=0
-        ILINON=0
-        NSC=0
-        MSTJN(38)=MSTJN(38)+1
-        IF (MSTJN(38).GT.MSTJN(36)) CALL JNERR(21)
-        MSTJN(37)=0
-        RETURN
-      ENDIF
-      DO 300 I=1,MM0(NL+1)
-        W(I)=W(I)+ALPHA*G(I)
-300   CONTINUE
-      DO 310 I=1,MV0(NL+1)
-        T(I)=T(I)+ALPHA*G(I+MM0(NL+1))
-310   CONTINUE
-      STEPLN(0)=ALPHA
-      IEVAL=1
-      NIT=NIT+1
-      MSTJN(37)=ABS(ILINON)
-      RETURN
-
-C...Come here if the comparison parameter is to be calculated:
-10    CDELTA=2.*DELTA*(ERRLN(0)-PARJN(8))/(DERRLN**2+TINY)
-      IEVAL=0
-
-      IF (CDELTA.GE.0.0) THEN
-C...Successful reduction in error.
-        ISUCC=1
-        DO 320 I=1,MM0(NL+1)
-          DW(I)=0.0
-320     CONTINUE
-        DO 330 I=1,MV0(NL+1)
-          DT(I)=0.0
-330     CONTINUE
-        STEPLN(0)=0.0
-        ILINON=0
-        IF (CDELTA.GE.0.75) LAMBDA=LAMBDA/4.0
-      ELSE
-C...Not a successful error reduction -> move back and make new attempt
-        ISUCC=0
-        DO 340 I=1,MM0(NL+1)
-          W(I)=W(I)-ALPHA*G(I)
-340     CONTINUE
-        DO 350 I=1,MV0(NL+1)
-          T(I)=T(I)-ALPHA*G(I+MM0(NL+1))
-350     CONTINUE
-        STEPLN(0)=0.0
-      ENDIF
-      IF (CDELTA.LT.0.25) LAMBDA=LAMBDA+DELTA*(1.-CDELTA)/GVEC2
-
-      MSTJN(37)=ABS(ILINON)
-      RETURN
-
-C**** END OF JNSCGR ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNSEFI(ILA,I1,I2,J1,J2,NO)
-
-C...JetNet subroutine SElect FIelds
-
-C...Switches the updating of the weights between nodes I1 to I2 in layer 
-C...ILA and nodes J1 to J2 in layer ILA-1 on or off according to NO. If 
-C...NO<=0 updating is turned off else it is turned on. In addition if
-C...NO=0 the weight is set to zero and if NO=1 the weight is 
-C...reinitialized.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/
-
-
-      IF(MSTJN(8).EQ.0) CALL JNERR(6)
-
-      IF=MAX(I1,1)
-      IL=MIN(I2,M(ILA))
-
-      IF(WIDL(ILA).LE.0.0) THEN
-        WIDTH=PARJN(4)
-      ELSE
-        WIDTH=WIDL(ILA)
-      ENDIF
-
-      IF(J1.NE.0.OR.J2.NE.0) THEN
-
-        JF=MAX(J1,1)
-        JL=MIN(J2,M(ILA-1))
-
-        DO 100 II=IF,IL
-          DO 110 JJ=JF,JL
-            IF(NO.GT.0) THEN
-              NSELF(JNINDX(ILA,II,JJ))=1
-            ELSE
-              NSELF(JNINDX(ILA,II,JJ))=0
-            ENDIF
-            IF(NO.EQ.1) THEN
-              IDUM=JJ
-              W(JNINDX(ILA,II,JJ))=(2.0*RJN(IDUM)-1.0)*WIDTH
-            ELSEIF(NO.EQ.0) THEN
-              W(JNINDX(ILA,II,JJ))=0.0
-            ENDIF
-110       CONTINUE
-100     CONTINUE
-
-      ELSE
-
-        DO 200 II=IF,IL
-          IF(NO.GT.0) THEN
-            NTSELF(JNINDX(ILA,II,0))=1
-          ELSE
-            NTSELF(JNINDX(ILA,II,0))=0
-          ENDIF
-          IF(NO.EQ.1) THEN
-            IDUM=II
-            T(JNINDX(ILA,II,0))=(2.0*RJN(IDUM)-1.0)*WIDTH
-          ELSEIF(NO.EQ.0) THEN
-            T(JNINDX(ILA,II,0))=0.0
-          ENDIF
-200     CONTINUE
-
-      ENDIF
-
-      RETURN
-
-C**** END OF JNSEFI ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNSEPA
-
-C...JetNet subroutine SEt PArameters
-
-C...Sets parameters in /JNINT2/
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-      PARAMETER(MAXD2E=300)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT3/ NXIN,NYIN,NXRF,NYRF,NXHRF,NYHRF,NHRF,NRFW,NHPRF
-      COMMON /JNINT4/ ILINON,NC,G2,NIT,ERRLN(0:3),DERRLN,STEPLN(0:3),
-     &                STEPMN,ERRMN,IEVAL,ISUCC,ICURVE,NSC,GVEC2
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/,/JNINT3/,/JNINT4/
-
-
-C...last layer:
-
-      NL=MSTJN(1)-1
-      IF(NL.GT.10.OR.NL.LT.1) CALL JNERR(1)
-
-C...number of nodes in each layer
-
-      IF(MSTJN(10).GT.MAXI) CALL JNERR(7)
-      IF(MSTJN(10+NL).GT.MAXO) CALL JNERR(8)
-
-      DO 400 IL=1,MSTJN(1)
-        IF(MSTJN(9+IL).EQ.0) THEN
-          MSTJN(7)=IL
-          CALL JNERR(25)
-        ENDIF
-400   CONTINUE
-
-      IF(MSTJN(23).NE.0) THEN
-
-C...receptive fields will be used, check consistency and set indexes
-
-        IF(MSTJN(24).EQ.0.OR.MSTJN(25).LE.0.OR.MSTJN(26).LE.0)
-     &      CALL JNERR(10)
-
-        NXIN=MSTJN(23)
-        NYIN=MSTJN(24)
-        NXRF=MSTJN(25)
-        NYRF=MSTJN(26)
-        NHPRF=ABS(MSTJN(27))
-        IF(MSTJN(10).LT.ABS(NXIN*NYIN)) CALL JNERR(11)
-        if(NXRF.GT.ABS(NXIN).OR.NYRF.GT.ABS(NYIN)) CALL JNERR(11)
-
-        IF(NXIN.GT.0) THEN
-          NXHRF=NXIN-NXRF+1
-        ELSE
-          NXHRF=-NXIN
-        ENDIF
-
-        IF(NYIN.GT.0) THEN
-          NYHRF=NYIN-NYRF+1
-        ELSE
-          NYHRF=-NYIN
-        ENDIF
-
-        NHRF=NXHRF*NYHRF
-        MSTJN(11)=MAX(MSTJN(11),NHRF*NHPRF)
-
-        NRFW=NXRF*NYRF+MSTJN(10)-ABS(NXIN*NYIN)
-        NRFLW=NRFW*NHPRF+(MSTJN(11)-NHRF*NHPRF)*MSTJN(10)
-
-      ELSE
-
-        NXIN=0
-        NYIN=0
-        NXRF=0
-        NYRF=0
-        NXHRF=0
-        NYHRF=0
-        NHRF=0
-        NRFW=0
-        NRFLW=0
-
-      ENDIF
-
-      DO 100 IL=0,NL
-        M(IL)=MSTJN(10+IL)
-100   CONTINUE
-
-C...offset index in node vectors and weight vectors
-
-      MV0(1)=0
-      MM0(1)=0
-      MV0(2)=M(1)
-      MM0(2)=M(0)*M(1)
-      IF(NXIN.NE.0) MM0(2)=NRFLW
-
-      DO 110 IL=3,NL+1
-        MV0(IL)=MV0(IL-1)+M(IL-1)
-        MM0(IL)=MM0(IL-1)+M(IL-1)*M(IL-2)
-110   CONTINUE
-
-      IF(MV0(NL+1).GT.MAXV) CALL JNERR(2)
-      IF(MM0(NL+1).GT.MAXM) CALL JNERR(3)
-
-C...check Potts-nodes
-
-      IPOTT=MSTJN(4)
-      IF(IPOTT.GE.2) THEN
-        IF(MOD(M(NL),IPOTT).NE.0) CALL JNERR(4)
-        IGFN(NL)=3
-      ENDIF
-      IF(IPOTT.EQ.1) IGFN(NL)=5
-
-C...set transfer functions to use
-
-      DO 120 IL=1,NL
-        IF(IGFN(IL).EQ.0) THEN
-          NG(IL)=MSTJN(3)
-        ELSE
-          NG(IL)=IGFN(IL)
-        ENDIF
-120   CONTINUE
-
-C...Check consistency between error measure and transfer function.
-      IF(MSTJN(4).EQ.1) THEN
-        IF((IGFN(NL).EQ.2).OR.(IGFN(NL).EQ.4)) CALL JNERR(31)
-      ENDIF
-
-C...Zero weight and threshold vectors
-      DO 200 I=1,MV0(NL+1)
-        DT(I)=0.0
-        NTSELF(I)=1
-200   CONTINUE
-
-      DO 210 I=1,MM0(NL+1)
-        DW(I)=0.0
-        NSELF(I)=1
-210   CONTINUE
-
-C...set precision chopping
-
-      IF((MSTJN(28).GT.0).OR.(MSTJN(29).GT.0).OR.
-     &(MSTJN(30).GT.0)) ICPON=1
-
-C...If updating is turned off, stop here.
-      IF(MSTJN(5).EQ.9) CALL JNERR(32)
-
-C...Initialize Quickprop, Rprop and Conjugate Gradient searches
-
-      IF ((MSTJN(5).GE.3).AND.(MSTJN(5).LE.14)) THEN
-        DO 300 I=1,MM0(NL+1)
-          ODW(I)=0.0
-          G(I)=0.0
-300     CONTINUE
-        DO 310 I=1,MV0(NL+1)
-          ODT(I)=0.0
-          G(MM0(NL+1)+I)=0.0
-310     CONTINUE
-      ENDIF
-      IF (MSTJN(5).EQ.8) CALL JNERR(19)
-
-      MSTJN(8)=1
-
-C...Initialize Rprop learning rate:
-      DO 500 IL=NL,1,-1
-        IF (ETAL(IL).EQ.0.0) THEN
-          ETA=PARJN(1)/FLOAT(MSTJN(2))
-        ELSE
-          ETA=ETAL(IL)/FLOAT(MSTJN(2))
-        ENDIF
-        DO 510 I=1,M(IL)
-          IT=JNINDX(IL,I,0)
-          ETAV(MM0(NL+1)+IT)=ETA
-          DO 520 J=1,M(IL-1)
-            IW=JNINDX(IL,I,J)
-            ETAV(IW)=ETA
-520       CONTINUE
-510     CONTINUE
-500   CONTINUE
-
-C...Reset restart counter
-      MSTJN(38)=0
-
-      RETURN
-
-C**** END OF JNSEPA ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNSTAT(IS)
-
-C...JetNet subroutine output STATistics 
-
-C...Statistics chosen by IS is written on the default file
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-      PARAMETER(MAXD2E=300)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT3/ NXIN,NYIN,NXRF,NYRF,NXHRF,NYHRF,NHRF,NRFW,NHPRF
-      COMMON /JNINT5/ D2E(MAXD2E,MAXD2E)
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/,/JNINT3/,/JNINT5/
-
-
-      IF(IS.EQ.1) THEN
-C...Write out number of layers, units and receptive field status
-        WRITE(MSTJN(6),*)
-        WRITE(MSTJN(6),600) NL+1
-        WRITE(MSTJN(6),615) M(NL),NL
-        DO 100 IL=NL-1,1,-1
-          WRITE(MSTJN(6),620) M(IL),IL
-100     CONTINUE
-        WRITE(MSTJN(6),610) M(0)
-        WRITE(MSTJN(6),*)
-        IF(IPOTT.GT.1) WRITE(MSTJN(6),630)IPOTT
-        IF(MSTJN(23).NE.0) THEN
-          WRITE(MSTJN(6),631) ABS(MSTJN(23)*MSTJN(24)),ABS(MSTJN(23)),
-     &    ABS(MSTJN(24)),MSTJN(25),MSTJN(26),ABS(MSTJN(27))
-        ENDIF
-        IF(MSTJN(23).LT.0) WRITE(MSTJN(6),632)
-        IF(MSTJN(24).LT.0) WRITE(MSTJN(6),633)
-        IF(MSTJN(27).LT.0) WRITE(MSTJN(6),634) 
-        IF(IPOTT.EQ.1) WRITE(MSTJN(6),635)
-        IF(MSTJN(5).EQ.0) THEN
-          WRITE(MSTJN(6),639)
-        ELSEIF(MSTJN(5).EQ.1) THEN
-          WRITE(MSTJN(6),640)
-        ELSEIF(MSTJN(5).EQ.2) THEN
-          WRITE(MSTJN(6),645)
-        ELSEIF(MSTJN(5).EQ.3) THEN
-          WRITE(MSTJN(6),646)
-        ELSEIF(MSTJN(5).EQ.4) THEN
-          WRITE(MSTJN(6),647)
-        ELSEIF(MSTJN(5).EQ.5) THEN
-          WRITE(MSTJN(6),648)
-        ELSEIF(MSTJN(5).EQ.6) THEN
-          WRITE(MSTJN(6),649)
-        ELSEIF(MSTJN(5).EQ.7) THEN
-          WRITE(MSTJN(6),651)
-        ELSEIF(MSTJN(5).EQ.10) THEN
-          WRITE(MSTJN(6),652)
-        ELSEIF(MSTJN(5).EQ.11) THEN
-          WRITE(MSTJN(6),653)
-        ELSEIF(MSTJN(5).EQ.12) THEN
-          WRITE(MSTJN(6),654)
-        ELSEIF(MSTJN(5).EQ.13) THEN
-          WRITE(MSTJN(6),655)
-        ELSEIF(MSTJN(5).EQ.15) THEN
-          WRITE(MSTJN(6),656)
-        ENDIF
-        WRITE(MSTJN(6),*)
-
-      ELSEIF(IS.EQ.2) THEN
-C...Write out values of parameters and switches
-        PAR22=PARJN(22)
-        PARJN(22)=LOG10(PAR22)
-        WRITE(MSTJN(6),*)
-        WRITE(MSTJN(6),650)
-        WRITE(MSTJN(6),*)
-        WRITE(MSTJN(6),660)'I ',(I,I=1,10)
-        WRITE(MSTJN(6),661)'MSTJN (I)',(MSTJN(I),I=1,6),
-     &   LOG10(MAX(FLOAT(MSTJN(7)),1.)),(MSTJN(I),I=8,10)
-        WRITE(MSTJN(6),660)'(10+I)',(MSTJN(10+I),I=1,10)
-        WRITE(MSTJN(6),660)'(20+I)',(MSTJN(20+I),I=1,10)
-        WRITE(MSTJN(6),660)'(30+I)',(MSTJN(30+I),I=1,10)
-        WRITE(MSTJN(6),670)'PARJN (I)',(PARJN(I),I=1,10)
-        WRITE(MSTJN(6),670)'(10+I)',(PARJN(10+I),I=1,10)
-        WRITE(MSTJN(6),670)'(20+I)',(PARJN(20+I),I=1,10)
-        WRITE(MSTJN(6),670)'(30+I)',(PARJN(30+I),I=1,10)
-        WRITE(MSTJN(6),660)'IGFN (I)',(IGFN(I),I=1,10)
-        WRITE(MSTJN(6),670)'TINV (I)',(TINV(I),I=1,10)
-        WRITE(MSTJN(6),670)'ETAL (I)',(ETAL(I),I=1,10)
-        WRITE(MSTJN(6),670)'WIDL (I)',(WIDL(I),I=1,10)
-        WRITE(MSTJN(6),670)'SATM (I)',(SATM(I),I=1,10)
-        WRITE(MSTJN(6),*)
-        PARJN(22)=PAR22
-
-      ELSEIF(IS.EQ.3) THEN
-C...Write out time factor for net
-        NWFAC=0
-        IF(NXIN.EQ.0) THEN
-          NWFAC=MM0(NL+1)+MV0(NL+1)
-          NWSUM=NWFAC
-        ELSE
-          NWFAC=MM0(NL+1)+MV0(NL+1)-MM0(2)+NHRF*NRFW*NHPRF
-     &          +(MSTJN(11)-NHRF*NHPRF)*MSTJN(10)
-          NWSUM=MM0(NL+1)+MV0(NL+1)-MM0(2)+NRFW*NHPRF-(NHRF-1)*NHPRF
-     &          +(MSTJN(11)-NHRF*NHPRF)*MSTJN(10)
-          IF(MSTJN(27).LT.0) NWSUM=NWSUM-(NHRF-1)*NHPRF*MSTJN(12)
-        ENDIF
-        WRITE(MSTJN(6),680) NWFAC
-        WRITE(MSTJN(6),690) NWSUM
-
-      ELSEIF(IS.EQ.4) THEN
-C...Write out Hessian Matrix
-        NWGTS=MM0(NL+1)+MV0(NL+1)
-        WRITE(MSTJN(6),700)NWGTS,NWGTS
-        WRITE(MSTJN(6),*)
-        NHOP=NWGTS/7
-        NEXTRA=NWGTS-NHOP*7
-        DO 200 I=1,NWGTS
-          WRITE(MSTJN(6),720)I
-          DO 210 JHOP=1,NHOP
-            WRITE(MSTJN(6),710)(D2E((JHOP-1)*7+J,I),J=1,7)
-210       CONTINUE
-          IF (NEXTRA.GT.0) THEN
-            WRITE(MSTJN(6),710)(D2E(NHOP*7+J,I),J=1,NEXTRA)
-          ENDIF
-          WRITE(MSTJN(6),*)
-200     CONTINUE
-
-      ELSEIF(IS.EQ.5) THEN
-C...Write out the diagonal elements of the Hessian Matrix and its Trace
-        TRACE=0.0
-        NWGTS=MM0(NL+1)+MV0(NL+1)
-        DO 220 IW=1,NWGTS
-          TRACE=TRACE+D2E(IW,IW)
-220     CONTINUE
-        WRITE(MSTJN(6),700)NWGTS,NWGTS
-        WRITE(MSTJN(6),730)
-        WRITE(MSTJN(6),*)
-        NHOP=NWGTS/7
-        NEXTRA=NWGTS-NHOP*7
-        DO 230 JHOP=1,NHOP
-          WRITE(MSTJN(6),710)(D2E((JHOP-1)*7+J,(JHOP-1)*7+J),J=1,7)
-230     CONTINUE
-        IF (NEXTRA.GT.0) THEN
-          WRITE(MSTJN(6),710)(D2E(NHOP*7+J,NHOP*7+J),J=1,NEXTRA)
-        ENDIF
-        WRITE(MSTJN(6),*)
-        WRITE(MSTJN(6),740)TRACE
-        WRITE(MSTJN(6),*)
-
-      ENDIF
-
-600   FORMAT(22X,'Initialized for a',I2,' layered net with')
-610   FORMAT(22X,I3,' nodes in layer number 0 (input layer)')
-615   FORMAT(22X,I3,' nodes in layer number',I2,' (output layer)')
-620   FORMAT(22X,I3,' nodes in layer number',I2)
-630   FORMAT(5X,'with',I3,'-dimensional Potts nodes in output layer.')
-631   FORMAT(5X,'receptive fields in first layer assuming the ',I4,
-     &   ' first nodes in the',/,
-     &   5X,'input layer are organised in a plane of ',
-     &   I3,'*',I3,' nodes, where the',/,
-     &   5X,'receptive field nodes scan ',
-     &   I3,'*',I3,' input nodes each with ',I3,' hidden'/,
-     &   5X,'nodes per field.')
-632   FORMAT(5X,'The input layer is assumed to be cyclic ',
-     &       'in the x-direction.')
-633   FORMAT(5X,'The input layer is assumed to be cyclic ',
-     &       'in the y-direction.')
-634   FORMAT(5X,'The weights from equivalent nodes with receptive ',
-     &           'fields are clamped.')
-635   FORMAT(22X,'Using Cross-Entropy error.')
-639   FORMAT(22X,'Standard Back-Propagation updating.')
-640   FORMAT(22X,'Manhattan updating.')
-645   FORMAT(22X,'Langevin updating.')
-646   FORMAT(22X,'Quickprop updating.')
-647   FORMAT(22X,'Conjugate Gradient updating (Polak-Ribiere).')
-648   FORMAT(22X,'Conjugate Gradient updating (Hestenes-Stiefel).')
-649   FORMAT(22X,'Conjugate Gradient updating (Fletcher-Reeves).')
-650   FORMAT(18X,'Values of parameters and switches in JETNET')
-651   FORMAT(22X,'Conjugate Gradient updating (Shanno).')
-652   FORMAT(22X,'Scaled Conj. Grad. updating (Polak-Ribiere).')
-653   FORMAT(22X,'Scaled Conj. Grad. updating (Hestenes-Stiefel).')
-654   FORMAT(22X,'Scaled Conj. Grad. updating (Fletcher-Reeves).')
-655   FORMAT(22X,'Scaled Conj. Grad. updating (Shanno).')
-656   FORMAT(22X,'Rprop updating.')
-660   FORMAT(A10,10I7)
-661   FORMAT(A10,6I7,F7.3,3I7)
-670   FORMAT(A10,10F7.4)
-680   FORMAT(5X,'Time factor for this net:',I10)
-690   FORMAT(5X,'Effective number of weights:',I7)
-700   FORMAT(5X,'The Hessian Matrix: (',I3,' x ',I3,')')
-710   FORMAT(5X,7(E9.2,1X))
-720   FORMAT(5X,'Column: ',I3)
-730   FORMAT(5X,'Diagonal elements only')
-740   FORMAT(5X,'Trace(H) = ',F10.5)
-      RETURN
-
-C**** END OF JNSTAT ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNTEST
-
-C...JetNet subroutine TEST 
-
-C...Sets the values of OUT according to given pattern in OIN and
-C...current weights
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/
-
-
-      IF (MSTJN(8).EQ.0) CALL JNERR(23)
-
-      CALL JNFEED
-
-      DO 100 I=1,M(NL)
-        OUT(I)=O(JNINDX(NL,I,0))
-100   CONTINUE
-
-      RETURN
-
-C**** END OF JNTEST ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNTRAL
-
-C...JetNet subroutine TRaining ALgorithm
-
-C...Trains the net.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,TINY=1.E-20)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT4/ ILINON,NC,G2,NIT,ERRLN(0:3),DERRLN,STEPLN(0:3),
-     &                STEPMN,ERRMN,IEVAL,ISUCC,ICURVE,NSC,GVEC2
-      SAVE /JNDAT1/,/JNDAT2/,/JNINT1/,/JNINT2/,/JNINT4/
-
-
-      IF (MSTJN(8).EQ.0) CALL JNERR(22)
-      IF (MSTJN(9).LE.0) CALL JNERR(24)
-
-      MSTJN(7)=MSTJN(7)+1
-
-      CALL JNFEED
-      IF (ILINON.EQ.0) CALL JNDELT
-
-      ERR=ERRJN(0)
-
-      ERR=ERR/FLOAT(M(NL))
-      PARJN(7)=ERR
-      ER1=ER1+ERR
-      ER2=ER2+ERR
-
-      IF (MSTJN(22).NE.0) CALL JNSATM
-
-      IF(MOD(MSTJN(7),MSTJN(2)).NE.0) RETURN
-
-C...update only every MSTJN(2) calls
-
-      PARJN(8)=ER1/FLOAT(MSTJN(2))
-      ER1=0.0
-
-
-      IF(MSTJN(21).GT.0) THEN
-
-C...Include pruning factors
-
-        BETA=1.0
-        DO 110 IL=NL,1,-1
-
-C...set beta in layer IL:
-          IF(TINV(IL).EQ.0.0) THEN
-            BETA=BETA*PARJN(3)
-          ELSE
-            BETA=BETA*ABS(TINV(IL))
-          ENDIF
-
-          FACTOR=2.0*FLOAT(MSTJN(2))*PARJN(14)*PARJN(18)**2/BETA
-
-          DO 120 I=MM0(IL)+1,MM0(IL+1)
-            DW(I)=DW(I)-FACTOR*W(I)/
-     &            (PARJN(18)**2+W(I)**2)**2
-120       CONTINUE
-
-          DO 130 I=MV0(IL)+1,MV0(IL+1)
-            DT(I)=DT(I)-FACTOR*T(I)/
-     &            (PARJN(18)**2+T(I)**2)**2
-130       CONTINUE
-
-110     CONTINUE
-
-      ENDIF
-
-      IF(MSTJN(5).EQ.0) THEN
-
-C...Normal updating:
-
-        BETA=1.0
-        DO 200 IL=NL,1,-1
-
-C...set beta in layer IL:
-          IF(TINV(IL).EQ.0.0) THEN
-            BETA=BETA*PARJN(3)
-          ELSE
-            BETA=BETA*ABS(TINV(IL))
-          ENDIF
-
-C...set eta in layer IL:
-
-          IF(ETAL(IL).EQ.0.0) THEN
-            ETA=PARJN(1)/FLOAT(MSTJN(2))*BETA
-          ELSE
-            ETA=ETAL(IL)/FLOAT(MSTJN(2))*BETA
-          ENDIF
-
-          DO 210 I=MM0(IL)+1,MM0(IL+1)
-            W(I)=(1.0-PARJN(5)*FLOAT(NSELF(I)))*W(I)+
-     &           DW(I)*FLOAT(NSELF(I))*ETA
-            DW(I)=DW(I)*PARJN(2)
-210       CONTINUE
-
-          DO 220 I=MV0(IL)+1,MV0(IL+1)
-            T(I)=(1.0-PARJN(5)*FLOAT(NTSELF(I)))*T(I)+
-     &           DT(I)*FLOAT(NTSELF(I))*ETA
-            DT(I)=DT(I)*PARJN(2)
-220       CONTINUE
-
-200     CONTINUE
-
-        ILINON=0
-        NC=0
-        NSC=0
-
-      ELSEIF(MSTJN(5).EQ.1) THEN
-
-C...Manhattan updating:
-
-C...set eta in layer IL:
-
-        DO 300 IL=1,NL
-          IF(ETAL(IL).EQ.0.0) THEN
-            ETA=PARJN(1)/FLOAT(MSTJN(2))
-          ELSE
-            ETA=ETAL(IL)/FLOAT(MSTJN(2))
-          ENDIF
-
-          DO 310 I=MM0(IL)+1,MM0(IL+1)
-            W(I)=(1.0-PARJN(5)*FLOAT(NSELF(I)))*W(I)+
-     &             SIGN(ETA,DW(I))*FLOAT(NSELF(I))
-            DW(I)=DW(I)*PARJN(2)
-310       CONTINUE
-
-          DO 320 I=MV0(IL)+1,MV0(IL+1)
-            T(I)=(1.0-PARJN(5)*FLOAT(NTSELF(I)))*T(I)+
-     &            SIGN(ETA,DT(I))*FLOAT(NTSELF(I))
-            DT(I)=DT(I)*PARJN(2)
-320       CONTINUE
-
-300     CONTINUE
-
-        ILINON=0
-        NC=0
-        NSC=0
-
-      ELSEIF(MSTJN(5).EQ.2) THEN
-
-C...Langevin updating:
-
-        BETA=1.0
-        DO 400 IL=NL,1,-1
-
-C...set effective beta in layer IL:
-          IF(TINV(IL).EQ.0.0) THEN
-            BETA=BETA*PARJN(3)
-          ELSE
-            BETA=BETA*ABS(TINV(IL))
-          ENDIF
-
-C...set eta in layer IL:
-
-          IF(ETAL(IL).EQ.0.0) THEN
-            ETA=PARJN(1)/FLOAT(MSTJN(2))*BETA
-          ELSE
-            ETA=ETAL(IL)/FLOAT(MSTJN(2))*BETA
-          ENDIF
-
-          DO 410 I=MM0(IL)+1,MM0(IL+1)
-            IDUM=I
-            W(I)=(1.0-PARJN(5)*FLOAT(NSELF(I)))*W(I)+
-     &           DW(I)*FLOAT(NSELF(I))*ETA+
-     &           GAUSJN(IDUM)*PARJN(6)
-            DW(I)=DW(I)*PARJN(2)
-410       CONTINUE
-
-          DO 420 I=MV0(IL)+1,MV0(IL+1)
-            IDUM=I
-            T(I)=(1.0-PARJN(5)*FLOAT(NTSELF(I)))*T(I)+
-     &           DT(I)*FLOAT(NTSELF(I))*ETA+
-     &           GAUSJN(IDUM)*PARJN(6)
-            DT(I)=DT(I)*PARJN(2)
-420       CONTINUE
-
-400     CONTINUE
-
-        ILINON=0
-        NC=0
-        NSC=0
-
-      ELSEIF(MSTJN(5).EQ.3) THEN
-
-C...Fahlman's Quickprop:
-
-        WMAX=0.0
-        BETA=1.0
-        DO 500 IL=NL,1,-1
-
-C...set beta in layer IL:
-          IF(TINV(IL).EQ.0.0) THEN
-            BETA=BETA*PARJN(3)
-          ELSE
-            BETA=BETA*ABS(TINV(IL))
-          ENDIF
-
-C...set eta in layer IL:
-
-          IF(ETAL(IL).EQ.0.0) THEN
-            ETA=PARJN(1)/FLOAT(MSTJN(2))*BETA
-          ELSE
-            ETA=ETAL(IL)/FLOAT(MSTJN(2))*BETA
-          ENDIF
-
-          DO 510 I=MM0(IL)+1,MM0(IL+1)
-            SCALE=MAX(-PARJN(21),
-     &            MIN(PARJN(21),DW(I)/(ODW(I)-DW(I)+TINY)))
-            SWITCH=FLOAT(NSELF(I))*(SIGN(0.5,ODW(I)*DW(I))+0.5)
-            G(I)=DW(I)*SWITCH*ETA+SCALE*G(I)
-            W(I)=(1.0-PARJN(5))*W(I)+G(I)
-            ODW(I)=DW(I)
-            DW(I)=0.0
-            IF (ABS(W(I)).GT.WMAX) WMAX=ABS(W(I))
-510       CONTINUE
-
-          DO 520 I=MV0(IL)+1,MV0(IL+1)
-            SCALE=MAX(-PARJN(21),
-     &            MIN(PARJN(21),DT(I)/(ODT(I)-DT(I)+TINY)))
-            SWITCH=FLOAT(NTSELF(I))*(SIGN(0.5,ODT(I)*DT(I))+0.5)
-            G(MM0(NL+1)+I)=DT(I)*SWITCH*ETA+SCALE*G(MM0(NL+1)+I)
-            T(I)=(1.0-PARJN(5))*T(I)+G(MM0(NL+1)+I)
-            ODT(I)=DT(I)
-            DT(I)=0.0
-            IF (ABS(T(I)).GT.WMAX) WMAX=ABS(T(I))
-520       CONTINUE
-
-500     CONTINUE
-
-        IF (WMAX.GT.PARJN(22)) THEN
-C...Quickprop is stuck -> reset weights and restart
-          DO 530 IL=1,NL
-            IF(WIDL(IL).LE.0) THEN
-              WIDTH=PARJN(4)
-            ELSE
-              WIDTH=WIDL(IL)
-            ENDIF
-            DO 540 I=MM0(IL)+1,MM0(IL+1)
-              IDUM=I
-              IF (WIDTH.GE.0.) THEN
-                W(I)=(2.0*RJN(IDUM)-1.0)*WIDTH
-              ELSE
-                W(I)=-RJN(IDUM)*WIDTH
-              ENDIF
-540         CONTINUE
-            DO 550 I=MV0(IL)+1,MV0(IL+1)
-              IDUM=I
-              IF (WIDTH.GE.0.) THEN
-                T(I)=(2.0*RJN(IDUM)-1.0)*WIDTH
-              ELSE
-                T(I)=-RJN(IDUM)*WIDTH
-              ENDIF
-550         CONTINUE
-530       CONTINUE
-          MSTJN(38)=MSTJN(38)+1
-          IF (MSTJN(38).GT.MSTJN(36)) CALL JNERR(21)
-        ENDIF
-
-        ILINON=0
-        NC=0
-        NSC=0
-
-      ELSEIF((MSTJN(5).GE.4).AND.(MSTJN(5).LE.8)) THEN
-
-C...Conjugate Gradient updating:
-
-        CALL JNCOGR
-
-      ELSEIF(MSTJN(5).EQ.9) THEN
-
-C...Minimization terminated - don't update:
-
-        RETURN
-
-      ELSEIF((MSTJN(5).GE.10).AND.(MSTJN(5).LE.14)) THEN
-
-C...Scaled Conjugate Gradient:
-
-        CALL JNSCGR
-
-      ELSEIF(MSTJN(5).EQ.15) THEN
-
-C...Riedmiller's & Braun's Rprop:
-
-        DO 700 IW=1,MM0(NL+1)
-          IF (DW(IW)*ODW(IW).GT.0.) THEN
-            ETAV(IW)=MIN(PARJN(32),MAX(PARJN(33),ETAV(IW)*PARJN(30)))
-          ELSEIF (DW(IW)*ODW(IW).LT.0.) THEN
-            ETAV(IW)=MIN(PARJN(32),MAX(PARJN(33),ETAV(IW)*PARJN(31)))
-          ENDIF
-          W(IW)=W(IW)+SIGN(ETAV(IW),DW(IW)*FLOAT(NSELF(IW)))
-          ODW(IW)=DW(IW)
-          DW(IW)=0.0
-700     CONTINUE
-        DO 710 IT=1,MV0(NL+1)
-          IF (DT(IT)*ODT(IT).GT.0.) THEN
-            ETAV(MM0(NL+1)+IT)=MIN(PARJN(32),
-     &           MAX(PARJN(33),ETAV(MM0(NL+1)+IT)*PARJN(30)))
-          ELSEIF (DT(IT)*ODT(IT).LT.0.) THEN
-            ETAV(MM0(NL+1)+IT)=MIN(PARJN(32),MAX(PARJN(33),
-     &           ETAV(MM0(NL+1)+IT)*PARJN(31)))
-          ENDIF
-          T(IT)=T(IT)+SIGN(ETAV(MM0(NL+1)+IT),
-     &                DT(IT)*FLOAT(NTSELF(IT)))
-          ODT(IT)=DT(IT)
-          DT(IT)=0.0
-710     CONTINUE
-
-      ELSE
-
-        CALL JNERR(9)
-
-      ENDIF
-
-C...do fixed precision weights
-
-      IF(ICPON.EQ.1) CALL JNCHOP(0)
-
-C...Scale temperature
-
-      IF(MSTJN(22).GE.0) THEN
-
-        SCALE=PARJN(13)**(1.0/FLOAT(MSTJN(9)))
-        PARJN(3)=PARJN(3)/SCALE
-        DO 600 I=1,NL
-          TINV(I)=TINV(I)/SCALE
-600     CONTINUE
-
-      ENDIF
-
-      IF(MOD(MSTJN(7),MSTJN(2)*MSTJN(9)).NE.0) RETURN
-
-C...Update some parameters every epoch
-
-      OLDE=PARJN(9)
-      PARJN(9)=ER2/FLOAT(MSTJN(2)*MSTJN(9))
-      ER2=0.0
-
-      IF (MSTJN(21).GT.0) THEN
-
-C...Update pruning parameters
-
-        PARJN(10)=PARJN(16)*PARJN(10)+(1.-PARJN(16))*PARJN(9)
-        IF((PARJN(9).LT.OLDE).OR.(PARJN(9).LT.PARJN(19))) THEN
-          PARJN(14)=PARJN(14)+PARJN(15)
-        ELSEIF(PARJN(9).LT.PARJN(10)) THEN
-          PARJN(14)=PARJN(14)-PARJN(15)
-        ELSE
-          PARJN(14)=PARJN(17)*PARJN(14)
-        ENDIF
-      ENDIF
-
-      IF (MSTJN(22).NE.0) THEN
-
-C...Calculate saturation measures
-
-        DO 610 IL=1,NL
-          SATM(IL)=SM(IL)/FLOAT(MSTJN(2)*MSTJN(9))
-          SM(IL)=0.0
-610     CONTINUE
-      ENDIF
-
-      IF(MSTJN(22).LT.0) THEN
-
-        DO 620 I=1,NL
-
-          IF(TINV(I).GE.0.0) GOTO 620
-
-          IF(SATM(I).GT.0.75) THEN
-            TINV(I)=TINV(I)/(1.0+16.0*(PARJN(13)-1.0)*(SATM(I)-0.5)**2)
-            GOTO 630
-          ELSEIF(SATM(I).LT.0.25) THEN
-            TINV(I)=TINV(I)*(1.0+16.0*(PARJN(13)-1.0)*(0.5-SATM(I))**2)
-            GOTO 630
-          ENDIF
-620     CONTINUE
-
-630   ENDIF
-
-
-C...Scale parameters:
-
-      IF (MSTJN(5).LE.2) THEN
-        IF (PARJN(11).GT.0.) THEN
-C...Change eta using 'bold driver':
-          IF (PARJN(9).GE.OLDE) THEN
-            PARJN(1)=PARJN(1)*PARJN(11)
-            DO 640 I=1,10
-              ETAL(I)=ETAL(I)*PARJN(11)
-640         CONTINUE
-          ELSE
-            PARJN(1)=PARJN(1)*(1.0+0.1*(1.0-PARJN(11)))
-            DO 650 I=1,10
-              ETAL(I)=ETAL(I)*(1.0+0.1*(1.0-PARJN(11)))
-650         CONTINUE
-          ENDIF
-        ELSEIF (PARJN(11).LT.0.) THEN
-C...Decrease eta geometrically:
-          PARJN(1)=PARJN(1)*ABS(PARJN(11))
-          DO 660 I=1,10
-            ETAL(I)=ETAL(I)*ABS(PARJN(11))
-660       CONTINUE
-        ENDIF
-      ENDIF
-C...Scale alpha:
-      PARJN(2)=PARJN(2)*PARJN(12)
-C...Scale Langevin noise:
-      PARJN(6)=PARJN(6)*PARJN(20)
-
-      RETURN
-
-C**** END OF JNTRAL ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JNTRTQ(N,IGRAD)
-
-C...JetNet subroutine TR and TQ.
-C...This routine changed ( = error correction) from version 3.4 to 3.5.
-
-C...Computes the eigenvalues for the Hessian Matrix.
-C...If IGRAD does not equal 0, then the eigenvectors are returned
-C...as column vectors in D2E
-
-C...First:
-C...Householder reduction of the NxN Hessian stored in D2E. 
-C...This routine is taken from "Numerical Recipes" by W.H.Press 
-C...et. al., where it is called TRED2. It has been slightly changed to
-C...fit into JETNET.
-
-      PARAMETER(MAXI=1000,MAXO=1000)
-      PARAMETER(MAXD2E=300,MAXIT=100)
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT5/ D2E(MAXD2E,MAXD2E)
-      SAVE /JNDAT1/,/JNINT5/
-      DIMENSION A(MAXD2E,MAXD2E),D(MAXD2E),E(MAXD2E)
-
-C...  First, commute matrix so that the smallest values are in the
-C...  top left corner.
-      DO 101 IW=1,N
-        DO 102 JW=1,N
-          A(N-IW+1,N-JW+1)=D2E(IW,JW)
-102     CONTINUE
-101   CONTINUE
-
-      IF(N.GT.1)THEN
-        DO 18 I=N,2,-1  
-          L=I-1
-          H=0.
-          SCALE=0.
-          IF(L.GT.1)THEN
-            DO 11 K=1,L
-              SCALE=SCALE+ABS(A(I,K))
-11          CONTINUE
-            IF(SCALE.EQ.0.)THEN
-              E(I)=A(I,L)
-            ELSE
-              DO 12 K=1,L
-                A(I,K)=A(I,K)/SCALE
-                H=H+A(I,K)**2
-12            CONTINUE
-              F=A(I,L)
-              G=-SIGN(SQRT(H),F)
-              E(I)=SCALE*G
-              H=H-F*G
-              A(I,L)=F-G
-              F=0.
-              DO 15 J=1,L
-C...If eigenvectors are needed
-                IF (IGRAD.NE.0) A(J,I)=A(I,J)/H
-                G=0.
-                DO 13 K=1,J
-                  G=G+A(J,K)*A(I,K)
-13              CONTINUE
-                IF(L.GT.J)THEN
-                  DO 14 K=J+1,L
-                    G=G+A(K,J)*A(I,K)
-14                CONTINUE
-                ENDIF
-                E(J)=G/H
-                F=F+E(J)*A(I,J)
-15            CONTINUE
-              HH=F/(H+H)
-              DO 17 J=1,L
-                F=A(I,J)
-                G=E(J)-HH*F
-                E(J)=G
-                DO 16 K=1,J
-                  A(J,K)=A(J,K)-F*E(K)-G*A(I,K)
-16              CONTINUE
-17            CONTINUE
-            ENDIF
-          ELSE
-            E(I)=A(I,L)
-          ENDIF
-          D(I)=H
-18      CONTINUE
-      ENDIF
-C...If eigenvectors are needed:
-      IF (IGRAD.NE.0) D(1)=0.
-      E(1)=0.
-      DO 23 I=1,N
-C...If eigenvectors are needed:
-        IF (IGRAD.NE.0) THEN
-          L=I-1
-          IF(D(I).NE.0.)THEN
-            DO 21 J=1,L
-              G=0.
-              DO 19 K=1,L
-                G=G+A(I,K)*A(K,J)
-19            CONTINUE
-              DO 20 K=1,L
-                A(K,J)=A(K,J)-G*A(K,I)
-20            CONTINUE
-21          CONTINUE
-          ENDIF
-        ENDIF
-C...
-        D(I)=A(I,I)
-C...If eigenvectors are needed:
-        IF (IGRAD.NE.0) THEN
-          A(I,I)=1.
-          IF(L.GE.1)THEN
-            DO 22 J=1,L
-              A(I,J)=0.
-              A(J,I)=0.
-22          CONTINUE
-          ENDIF
-        ENDIF
-C...
-23    CONTINUE
-
-C...Second:
-C...QL algorithm with implicit shifts to determine the eigenvalues and
-C...eigenvectors of the NxN Hessian. 
-C...Eigenvalues and eigenvectors are computed if IGRAD is non-zero.
-C...At return the eigenvectors are stored as columns in D2E and the
-C...eigenvalues are placed in the vector OUT.
-C...This routine is taken from "Numerical Recipes" by W.H.Press 
-C...et. al., where it is called TQLI. It has been slightly modified 
-C...to fit into JETNET.
-
-      IF (N.GT.1) THEN
-        DO 51 I=2,N
-          E(I-1)=E(I)
-51      CONTINUE
-        E(N)=0.
-        DO 55 L=1,N
-          ITER=0
-41        DO 52 M=L,N-1
-            DD=ABS(D(M))+ABS(D(M+1))
-            IF (ABS(E(M))+DD.EQ.DD) GO TO 42
-52        CONTINUE
-          M=N
-42        IF(M.NE.L)THEN
-            IF(ITER.EQ.MAXIT) CALL JNERR(30)
-            ITER=ITER+1
-            G=(D(L+1)-D(L))/(2.*E(L))
-C...        Pythagorean without under/overflow
-            ABSG=ABS(G)
-            IF(ABSG.GT.1.0) THEN
-              R=ABSG*SQRT(1.+(1./ABSG)**2)
-            ELSE
-              R=SQRT(1.+ABSG**2)
-            ENDIF
-C...
-            G=D(M)-D(L)+E(L)/(G+SIGN(R,G))
-            SS=1.
-            C=1.
-            P=0.
-            DO 54 I=M-1,L,-1
-              F=SS*E(I)
-              B=C*E(I)
-C...          Pythagorean without over/underflow
-              ABSF=ABS(F)
-              ABSG=ABS(G)
-              IF(ABSF.GT.ABSG) THEN
-                R=ABSF*SQRT(1.+(ABSG/ABSF)**2)
-              ELSE
-                IF(ABSG.EQ.0.) THEN
-                  R=0.
-                ELSE
-                  R=ABSG*SQRT(1.+(ABSF/ABSG)**2)
-                ENDIF
-              ENDIF
-C...
-              E(I+1)=R
-C...Recover from underflow
-              IF(R.EQ.0.) THEN
-                D(I+1)=D(I+1)-P
-                E(M)=0.
-                GOTO 41
-              ENDIF
-              SS=F/R
-              C=G/R
-              G=D(I+1)-P
-              R=(D(I)-G)*SS+2.*C*B
-              P=SS*R
-              D(I+1)=G+P
-              G=C*R-B
-C...If eigenvectors are needed:
-              IF (IGRAD.NE.0) THEN
-                DO 53 K=1,N
-                  F=A(K,I+1)
-                  A(K,I+1)=SS*A(K,I)+C*F
-                  A(K,I)=C*A(K,I)-SS*F
-                  D2E(N-K+1,N-I+1)=A(K,I)
-53              CONTINUE
-              ENDIF
-C...
-54          CONTINUE
-            D(L)=D(L)-P
-            E(L)=G
-            E(M)=0.
-            GO TO 41
-          ENDIF
-55      CONTINUE
-      ENDIF
-
-C...Put eigenvalues in OUT:
-      DO 100 I=1,N
-        OUT(I)=D(N-I+1)
-100   CONTINUE
-
-      RETURN
-
-C**** END OF JNTRTQ ****************************************************
-      END
-C***********************************************************************
-
-C**********************************************************************C
-C PART TWO: SELF-ORGANIZING MAP NETWORK                                C
-C**********************************************************************C
-
-
-      REAL FUNCTION GJM(X,N)
-C...JetMap function G.
-
-C...Gives response function N with argument X.
-
-      PARAMETER(MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      SAVE /JNDAT1/
-
-
-      IF(N.EQ.1) THEN
-        GJM=0.5*(1.0+TANH(X))
-      ELSEIF(N.EQ.2) THEN
-        GJM=EXP(MAX(-50.0,MIN(-X,50.0)))
-      ELSE
-        MSTJM(3)=N
-        CALL JMERR(11)
-      ENDIF
-
-      RETURN
-
-C**** END OF GJM *******************************************************
-      END 
-C***********************************************************************
-
-
-      SUBROUTINE JMDUMP(NF)
-
-C...JetMap subroutine DUMP weights
-
-C...Dumps weights and other characteristics of the
-C...net to file NF for use in other programs.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV)
-      EQUIVALENCE (NTSELF(1),INDW(1))
-
-
-      IF (MSTJM(8).NE.1) CALL JMERR(8)
-
-      IF(NF.LT.0) THEN
-
-C...Unformatted dump
-
-        JF=-NF
-        WRITE(JF) -30
-        WRITE(JF) MSTJM,PARJM
-
-        DO 100 IW=1,INDW(NODES(MAXD+1)+1)-1
-          WRITE(JF) W(IW)
-100     CONTINUE
-
-      ELSE
-
-C...Formatted dump
-
-        NFSAVE=MSTJM(6)
-        MSTJM(6)=NF
-
-        WRITE(NF,600)
-        CALL JNHEAD
-        CALL JMSTAT(1)
-        CALL JMSTAT(2)
-
-        MSTJM(6)=NFSAVE
-
-        DO 200 INOD=1,NODES(MAXD+1)
-          WRITE(NF,*)
-          CALL JMINDX(INOD,I,J)
-          IF (NDIM.EQ.1) THEN
-            WRITE(NF,610)I
-          ELSE
-            WRITE(NF,620)I,J
-          ENDIF
-         
-          IW=INDW(INOD)-1
-          WRITE(NF,630)(W(IW+K),K=1,NODES(0))
-
-200    CONTINUE
-
-      ENDIF
-
-600   FORMAT(26X,' Dump of weights generated by')
-610   FORMAT('Unit ',I2)
-620   FORMAT('Unit (',I2,',',I2,')')
-630   FORMAT(10(F8.4,1X))
-
-      RETURN
-
-C**** END OF JMDUMP ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMERR(IERR)
-C...JetMap subroutine ERRor.
-
-C...Writes out an error message and stops the execution.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV)
-      EQUIVALENCE (NTSELF(1),INDW(1))
-
-
-      IF (MSTJN(8).EQ.1) MSTJM(6)=MSTJN(6)
-      WRITE(MSTJM(6),600)IERR
-
-      IF (IERR.EQ.1) THEN
-        WRITE(MSTJM(6),610)MSTJM(1)
-      ELSEIF (IERR.EQ.2) THEN
-        WRITE(MSTJM(6),620)MSTJM(10),MAXI
-      ELSEIF (IERR.EQ.3) THEN
-        WRITE(MSTJM(6),630)ABS(MSTJM(11)*MSTJM(12)),MAXO
-      ELSEIF (IERR.EQ.4) THEN
-        WRITE(MSTJM(6),640)NODES(MAXD+1)*(NODES(0)+1),MAXM
-      ELSEIF (IERR.EQ.5) THEN
-        WRITE(MSTJM(6),650)'JMTEST'
-      ELSEIF (IERR.EQ.6) THEN
-        WRITE(MSTJM(6),650)'JMTRAL'
-      ELSEIF (IERR.EQ.7) THEN
-        WRITE(MSTJM(6),650)'JMINDX'
-      ELSEIF (IERR.EQ.8) THEN
-        WRITE(MSTJM(6),650)'JMDUMP'
-      ELSEIF (IERR.EQ.9) THEN
-        WRITE(MSTJM(6),650)'JMINWE'
-      ELSEIF (IERR.EQ.10) THEN
-        WRITE(MSTJM(6),660)
-      ELSEIF (IERR.EQ.11) THEN
-        WRITE(MSTJM(6),670)MSTJM(3)
-      ELSEIF (IERR.EQ.12) THEN
-        WRITE(MSTJM(6),680)
-      ELSEIF (IERR.EQ.13) THEN
-        WRITE(MSTJM(6),690)
-      ELSEIF (IERR.EQ.14) THEN
-        WRITE(MSTJM(6),650)'JMNBHD'
-      ENDIF
-
-      IF (IERR.GT.0) STOP 0
-
-600   FORMAT(' *** JETMAP ERROR:',I2,' ***')
-610   FORMAT(' Illegal number of dimensions (',I2,')')
-620   FORMAT(' Total number of input nodes (',I6,') exceeds limit (',
-     &I6,')')
-630   FORMAT(' Total number of network nodes (',I6,
-     &') exceeds limit (',I6,')')
-640   FORMAT(' The number of weights (',I6,') exceeds limit (',I5,')')
-650   FORMAT(' Network must be initialized (with JMINIT or JMREAD) ',
-     &'before ',A6,' can be called')
-660   FORMAT(' Call to JMINIT after calling JNINIT')
-670   FORMAT(' Undefined response function (',I2,') in GJM.')
-680   FORMAT(' JMREAD cannot read data-file produced by JNDUMP')
-690   FORMAT(' Too many warnings issued by JETMAP')
-
-      RETURN
-
-C**** END OF JMERR *****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMFEED
-C...JetMap subroutine FEED signal to net.
-
-C...Feeds the input signal into the network and calculates
-C...MXNDJM and DW.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-      PARAMETER(BIAS=0.5)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV)
-      EQUIVALENCE (NTSELF(1),INDW(1))
-
-
-      MXNDJM=0
-
-      IF (ISW(1).EQ.1) THEN
-C *** Sigmoidal unit ***
-
-        ODUM=0.0
-        IW=0
-        DO 100 J=1,NODES(MAXD+1)
-          RSUM=0.0
-          DO 110 K=1,NODES(0)
-            IW=IW+1
-            DW(IW)=OIN(K)-W(IW)
-            RSUM=RSUM+OIN(K)*W(IW)
-110       CONTINUE
-          O(J)=GJM((RSUM-BIAS)*PARJM(3),ISW(1))
-          IF (O(J).GT.ODUM) THEN
-            ODUM=O(J)
-            MXNDJM=J
-          ENDIF
-100     CONTINUE
-
-      ELSEIF(ISW(1).EQ.2) THEN
-C *** Gaussian unit ***
-
-        ODUM=EXP(-49.0)
-        IW=0
-        DO 200 J=1,NODES(MAXD+1)
-          RSUM=0.0
-          DO 210 K=1,NODES(0)
-            IW=IW+1
-            DW(IW)=OIN(K)-W(IW)
-            RSUM=RSUM+DW(IW)**2
-210       CONTINUE
-          O(J)=GJM(RSUM*PARJM(3),ISW(1))
-          IF (O(J).GT.ODUM) THEN
-            ODUM=O(J)
-            MXNDJM=J
-          ENDIF
-200     CONTINUE
-
-      ENDIF
-
-      IF (MXNDJM.EQ.0) CALL JMWARN(1)
-
-      RETURN
-
-C**** END OF JMFEED ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMINDX(INOD,I,J)
-C...JetMap subroutine INDeX.
-
-C...If INOD>0 it returns the (I,J)-coordinates for INOD, if
-C...INOD=0 it returns the INOD-number (in O array) for unit (I,J)
-C...in net.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV)
-      EQUIVALENCE (NTSELF(1),INDW(1))
-
-
-      IF (MSTJM(8).NE.1) CALL JMERR(7)
-
-      IF (INOD.GT.0) THEN
-C...INOD -> (I,J)
-
-        IF (NDIM.EQ.1) THEN
-          J=1
-          I=INOD
-        ELSEIF (NDIM.EQ.2) THEN
-          J=MOD(INOD,NODES(2))
-          I=INOD/NODES(2)+1
-          IF (J.EQ.0) THEN
-            J=NODES(2)
-            I=I-1
-          ENDIF
-        ENDIF
-
-      ELSEIF (INOD.EQ.0) THEN
-C...(I,J) -> INOD
-
-        IF (NDIM.EQ.1) THEN
-          INOD=I
-        ELSEIF (NDIM.EQ.2) THEN
-          INOD=(I-1)*NODES(2)+J
-        ENDIF
-
-      ENDIF
-
-      RETURN
-
-C**** END OF JMINDX ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMINIT
-C...JetMap subroutine INITialize net.
-
-C...Initializes the net according to switches and parameters in
-C.../JMDAT1/ and /JMDAT2/.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV)
-      EQUIVALENCE (NTSELF(1),INDW(1))
-
-
-C...Check if JNINIT has been called:
-      IF(MSTJN(8).EQ.1) CALL JMERR(10)
-
-C...Set parameters:
-      CALL JMSEPA
-
-C...Set initial values of weights:
-      DO 100 IW=1,INDW(NODES(MAXD+1)+1)-1
-        IDUM=IW
-        IF (MSTJM(2).EQ.0) THEN
-          W(IW)=RJN(IDUM)*PARJM(4)
-        ELSEIF (MSTJM(2).EQ.1) THEN
-          W(IW)=(2.*RJN(IDUM)-1.)*PARJM(4)
-        ENDIF
-100   CONTINUE
-
-C...Normalize weights: 
-      IF (MSTJM(7).EQ.1) CALL JMNORM
-
-C...Write statistics on output file:
-
-      IF (MSTJM(6).LT.0) RETURN
-
-      CALL JNHEAD
-
-      CALL JMSTAT(1)
-
-      IF (MSTJM(5).EQ.0) THEN
-        WRITE(MSTJM(6),600)
-      ELSEIF (MSTJM(5).EQ.1) THEN
-        WRITE(MSTJM(6),610)
-      ELSEIF (MSTJM(5).EQ.2) THEN
-        WRITE(MSTJM(6),660)
-      ENDIF
-
-      WRITE(MSTJM(6),*)
-
-      IF (MSTJM(2).EQ.0) THEN
-        WRITE(MSTJM(6),620) PARJM(4)
-      ELSEIF (MSTJM(2).EQ.1) THEN
-        WRITE(MSTJM(6),630) PARJM(4)
-      ENDIF
-
-      WRITE(MSTJM(6),*)
-
-      IF (MSTJM(7).EQ.0) THEN
-        WRITE(MSTJM(6),640)
-      ELSEIF (MSTJM(7).EQ.1) THEN
-        WRITE(MSTJM(6),650)
-      ENDIF
-
-      WRITE(MSTJM(6),*)
-
-600   FORMAT(26X,'Self-organized Clustering')
-610   FORMAT(25X,'Learning Vector Quantization')
-620   FORMAT(16X,'Weights set randomly between 0.0 and + ',F6.3)
-630   FORMAT(20X,'Weights set randomly between +/- ',F6.3)
-640   FORMAT(26X,'Weights are not normalized')
-650   FORMAT(28X,'Weights are normalized')
-660   FORMAT(24X,'LVQ with neighborhood function')
-
-      RETURN
-
-C**** END OF JMINIT ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMINWE(INOD)
-C...JetMap subroutine INitial WEight.
-
-C...Sets the weight vector for unit INOD equal to the 
-C...input pattern stored in OIN.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV)
-      EQUIVALENCE (NTSELF(1),INDW(1))
-
-
-      IF (MSTJM(8).NE.1) CALL JMERR(9)
-
-      DO 100 K=1,NODES(0)
-        IW=INDW(INOD)+K-1
-        W(IW)=OIN(K)
-100   CONTINUE
-
-      RETURN
-
-C**** END OF JMINWE ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMNBHD
-C...JetMap subroutine NeighBourHooD.
-
-C...Specifies the neighbourhood to update according to MSTJM(9).
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV),NBHD(MAXO,0:121)
-      EQUIVALENCE (NSELF(1),NBHD(1,0)),(NTSELF(1),INDW(1))
-
-
-      IF(MSTJM(8).NE.1) CALL JMERR(14)
-
-      IF (NDIM.EQ.1.AND.ABS(MSTJM(9)).GT.121) THEN
-        CALL JMWARN(3)
-        MSTJM(9)=SIGN(121,MSTJM(9))
-      ELSEIF (NDIM.EQ.2.AND.ABS(MSTJM(9)).GT.5) THEN
-        CALL JMWARN(2)
-        MSTJM(9)=SIGN(5,MSTJM(9))
-      ENDIF
-
-      IF (MSTJM(9).EQ.0) THEN
-        DO 200 INOD=1,NODES(MAXD+1)
-          NBHD(INOD,1)=INOD
-          NBHD(INOD,0)=1
-200     CONTINUE
-        RETURN
-      ENDIF
-
-      IF (NDIM.EQ.1) THEN
-
-        DO 100 INOD=1,NODES(MAXD+1)
-          IF (MSTJM(11).GE.0) THEN
-C...Non-periodic boundary:
-            ISTRT=MAX(1,INOD-ABS(MSTJM(9)))
-            IEND=MIN(MSTJM(11),INOD+ABS(MSTJM(9)))
-          ELSE
-C...Periodic boundary:
-            ISTRT=INOD-ABS(MSTJM(9))
-            IEND=ISTRT+2*ABS(MSTJM(9))
-          ENDIF
-          NBNUM=0
-          DO 110 I=ISTRT,IEND
-            IND=MOD(I-1,MSTJM(11))+1
-            NBNUM=NBNUM+1
-            NBHD(INOD,NBNUM)=IND
-110       CONTINUE
-          NBHD(INOD,0)=NBNUM
-100     CONTINUE
-
-      ELSEIF (NDIM.EQ.2) THEN
-
-        IF (MSTJM(9).GT.0) THEN
-C...Square neighbourhood:
-          DO 120 INOD=1,NODES(MAXD+1)
-            CALL JMINDX(INOD,IC,JC)
-            IF (MSTJM(11).GE.0) THEN
-C...Non-periodic in dim. 1:
-              ISTRT=MAX(1,IC-MSTJM(9))
-              IEND=MIN(MSTJM(11),IC+MSTJM(9))
-            ELSE
-C...Periodic in dim. 1:
-              ISTRT=ABS(MSTJM(11))+IC-MSTJM(9)
-              ISTRT=MOD(ISTRT-1,ABS(MSTJM(11)))+1
-              IEND=ISTRT+2*MSTJM(9)
-            ENDIF
-            IF (MSTJM(12).GE.0) THEN
-C...Non-periodic in dim.2:
-              JSTRT=MAX(1,JC-MSTJM(9))
-              JEND=MIN(MSTJM(12),JC+MSTJM(9))
-            ELSE
-C...Periodic in dim. 2:
-              JSTRT=ABS(MSTJM(12))+JC-MSTJM(9)
-              JSTRT=MOD(JSTRT-1,ABS(MSTJM(12)))+1
-              JEND=JSTRT+2*MSTJM(9)
-            ENDIF
-            NBNUM=0
-            DO 130 I=ISTRT,IEND
-              DO 140 J=JSTRT,JEND
-                IND=MOD(I-1,MSTJM(11))+1
-                JND=MOD(J-1,MSTJM(12))+1
-                NBNUM=NBNUM+1
-                NBNOD=0
-                CALL JMINDX(NBNOD,IND,JND)
-                NBHD(INOD,NBNUM)=NBNOD
-140           CONTINUE
-130         CONTINUE
-            NBHD(INOD,0)=NBNUM
-120       CONTINUE
-
-        ELSEIF (MSTJM(9).LT.0) THEN
-C...Circular neighbourhood:
-          DO 150 INOD=1,NODES(MAXD+1)
-            CALL JMINDX(INOD,IC,JC)
-            IF (MSTJM(11).GE.0) THEN
-C...Non-periodic in dim. 1:
-              ISTRT=MAX(1,IC+MSTJM(9))
-              IEND=MIN(MSTJM(11),IC-MSTJM(9))
-            ELSE
-C...Periodic in dim. 1:
-              ISTRT=ABS(MSTJM(11))+IC+MSTJM(9)
-              ISTRT=MOD(ISTRT-1,ABS(MSTJM(11)))+1
-              IEND=ISTRT-2*MSTJM(9)
-              IC=ISTRT-MSTJM(9)
-            ENDIF
-            IF (MSTJM(12).GE.0) THEN
-C...Non-periodic in dim.2:
-              JSTRT=MAX(1,JC+MSTJM(9))
-              JEND=MIN(MSTJM(12),JC-MSTJM(9))
-            ELSE
-C...Periodic in dim. 2:
-              JSTRT=ABS(MSTJM(12))+JC+MSTJM(9)
-              JSTRT=MOD(JSTRT-1,ABS(MSTJM(12)))+1
-              JEND=JSTRT-2*MSTJM(9)
-              JC=JSTRT-MSTJM(9)
-            ENDIF
-            NBNUM=0
-            DO 160 I=ISTRT,IEND
-              DO 170 J=JSTRT,JEND
-                RDIST=SQRT(FLOAT((IC-I)**2+(JC-J)**2))
-                IF (RDIST.LE.FLOAT(-MSTJM(9))) THEN
-                  IND=MOD(I-1,ABS(MSTJM(11)))+1
-                  JND=MOD(J-1,ABS(MSTJM(12)))+1
-                  NBNUM=NBNUM+1
-                  NBNOD=0
-                  CALL JMINDX(NBNOD,IND,JND)
-                  NBHD(INOD,NBNUM)=NBNOD
-                ENDIF
-170           CONTINUE
-160         CONTINUE
-            NBHD(INOD,0)=NBNUM
-150       CONTINUE
-        ENDIF
-
-      ENDIF
-
-      NBO=MSTJM(9)
-
-      RETURN
-
-C**** END OF JMNBHD ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMNORM
-C...JetMap subroutine NORMalize weights.
-
-C...Normalizes the weights.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXD=2)
-
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV)
-      EQUIVALENCE (NTSELF(1),INDW(1))
-
-
-      DO 100 INOD=1,NODES(MAXD+1)
-        RNORM=0.0
-        IWSTRT=INDW(INOD)
-        IWEND=INDW(INOD)+NODES(0)-1
-        DO 110 IW=IWSTRT,IWEND
-          RNORM=RNORM+W(IW)*W(IW)
-110     CONTINUE
-        RNORM=SQRT(RNORM)
-        DO 120 IW=IWSTRT,IWEND
-          W(IW)=W(IW)/RNORM
-120     CONTINUE
-100   CONTINUE
-
-      RETURN
-
-C**** END OF JMNORM ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMREAD(NF)
-C...JetMap subroutine READ weights and parameters.
-
-C...Reads weights and parameters from file NF and initializes the net.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV)
-      EQUIVALENCE (NTSELF(1),INDW(1))
-
-      CHARACTER LINE*100
-
-
-      NDUM=MSTJM(6)
-
-      IF(NF.LT.0) THEN
-
-C...Unformatted read
-       JF=-NF
-       READ(JF) IVERS
-       IF(IVERS.GE.0) CALL JMERR(12)
-       READ(JF) MSTJM,PARJM
-       
-       CALL JMSEPA
-
-       DO 100 IW=1,INDW(NODES(MAXD+1)+1)-1
-        READ(JF) W(IW)
-100    CONTINUE
-
-      ELSE
-C...Formatted read
-
-        NFSAVE=MSTJM(6)
-
-        READ(NF,690)LINE
-        IF (LINE(27:28).EQ.'Du') CALL JMERR(12)
-        READ(NF,*)
-        READ(NF,*)
-        READ(NF,710)FVERS
-        IVERS=INT(FVERS*10.0+0.001)
-
-900     READ(NF,690)LINE
-        IF (LINE(1:17).NE.'         I      1') GOTO 900
-
-        READ(NF,610)LINE(1:10),(MSTJM(I),I=1,10)
-        READ(NF,610)LINE(1:10),(MSTJM(10+I),I=1,10)
-        READ(NF,620)LINE(1:10),(PARJM(I),I=1,10)
-        READ(NF,620)LINE(1:10),(PARJM(10+I),I=1,10)
-        READ(NF,*)
-
-        MSTJM(6)=NFSAVE
-
-        CALL JMSEPA
-
-        IF (NDIM.EQ.1) THEN
-          DO 110 INOD=1,NODES(MAXD+1)
-            READ(NF,*)
-            READ(NF,630)LINE,I
-            IW=INDW(INOD)-1
-            READ(NF,640)(W(IW+K),K=1,NODES(0))
-110       CONTINUE
-        ELSEIF(NDIM.EQ.2) THEN
-          DO 120 INOD=1,NODES(MAXD+1)
-            READ(NF,*)
-            READ(NF,650)LINE,I,LINE,J,LINE
-            IW=INDW(INOD)-1
-            READ(NF,640)(W(IW+K),K=1,NODES(0))
-120       CONTINUE
-        ENDIF
-
-      ENDIF
-
-      MSTJM(6)=NDUM
-
-C...Write statistics on output file:
-      IF (MSTJM(6).LT.0) RETURN
-      CALL JNHEAD
-      CALL JMSTAT(1)
-      WRITE(MSTJM(6),600)
-
-600   FORMAT(21X,'Weights read from file')
-610   FORMAT(A,10I7)
-620   FORMAT(A,10F7.4)
-630   FORMAT(A5,I2)
-640   FORMAT(10F9.4)
-650   FORMAT(A6,I2,A1,I2,A1)
-690   FORMAT(A)
-700   FORMAT(I2,A)
-710   FORMAT(TR63,F2.1)
-
-      RETURN
-
-C**** END OF JMREAD ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMSEPA
-C...JetMap subroutine SEt PArameters.
-
-C...Sets parameters in /JMINT1/.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV)
-      EQUIVALENCE (NTSELF(1),INDW(1))
-
-
-C...Number of dimensions:
-      NDIM=MSTJM(1)
-      IF (NDIM.GT.MAXD.OR.NDIM.LE.0) CALL JMERR(1)
-
-C...Number of nodes:
-      IF (MSTJM(10).GT.MAXI) CALL JMERR(2)
-      IF (NDIM.EQ.1) THEN
-        NODES(MAXD+1)=ABS(MSTJM(11))
-      ELSEIF (NDIM.EQ.2) THEN
-        NODES(MAXD+1)=ABS(MSTJM(11)*MSTJM(12))
-      ENDIF
-      IF (NODES(MAXD+1).GT.MAXO) CALL JMERR(3)
-      DO 100 IDIM=1,MAXD+1
-        NODES(IDIM-1)=ABS(MSTJM(9+IDIM))
-100   CONTINUE
-
-C *** Set internal switches: ***
-C...Response function:
-      ISW(1)=MSTJM(3)
-C...Error measure:
-      ISW(2)=MSTJM(4)
-
-C *** Calculate weight pointers: ***
-      IF (NODES(MAXD+1)*NODES(0).GT.MAXM) CALL JMERR(4)
-      DO 110 INOD=1,NODES(MAXD+1)+1
-        INDW(INOD)=(INOD-1)*NODES(0)+1
-110   CONTINUE
-
-      MSTJM(8)=1
-
-C...Initialize neighbourhood:
-      CALL JMNBHD
-
-      RETURN
-
-C**** END OF JMSEPA ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMSTAT(IS)
-
-C...JetMap subroutine output STATistics.
-
-C...Statistics chosen by IS is written on file MSTJM(6).
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV)
-      EQUIVALENCE (NTSELF(1),INDW(1))
-
-
-      IF(IS.EQ.1) THEN
-        WRITE(MSTJM(6),*)
-        WRITE(MSTJM(6),600) NDIM
-        DO 100 IDIM=1,NDIM
-          WRITE(MSTJM(6),610) NODES(IDIM),IDIM
-100     CONTINUE
-        WRITE(MSTJM(6),620) NODES(0)
-        WRITE(MSTJM(6),*)
-        WRITE(MSTJM(6),*)
-
-      ELSEIF(IS.EQ.2) THEN
-        WRITE(MSTJM(6),*)
-        WRITE(MSTJM(6),630)
-        WRITE(MSTJM(6),*)
-        WRITE(MSTJM(6),640)'I',(I,I=1,10)
-        WRITE(MSTJM(6),640)'MSTJM I',(MSTJM(I),I=1,10)
-        WRITE(MSTJM(6),640)'MSTJM 10+I',(MSTJM(10+I),I=1,10)
-        WRITE(MSTJM(6),650)'PARJM I',(PARJM(I),I=1,10)
-        WRITE(MSTJM(6),650)'PARJM 10+I',(PARJM(10+I),I=1,10)
-        WRITE(MSTJM(6),*)
-
-      ELSE
-        NWFAC=INDW(NODES(MAXD+1)+1)-1
-        WRITE(MSTJM(6),660)NWFAC
-      ENDIF
-
-600   FORMAT(22X,'Initialized for a ',I1,'-dimensional map with')
-610   FORMAT(27X,I3,' nodes in dimension ',I1)
-620   FORMAT(27X,I3,' input nodes')
-630   FORMAT(18X,'Values of parameters and switches in JETNET')
-640   FORMAT(A10,10I7)
-650   FORMAT(A10,10F7.4)
-660   FORMAT(5X,'Time factor for this map:',I10)
-
-      RETURN
-
-C**** END OF JMSTAT ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMTEST
-C...JetMap subroutine TEST
-
-C...Sets the values of OUT according to given pattern in OIN
-C...and current values of weights.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV)
-      EQUIVALENCE (NTSELF(1),INDW(1))
-
-
-      IF (MSTJM(8).NE.1) CALL JMERR(7)
-
-      CALL JMFEED
-
-      DO 100 INOD=1,NODES(MAXD+1)
-        OUT(INOD)=O(INOD)
-100   CONTINUE
-
-      RETURN
-
-C**** END OF JMTEST ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMTRAL
-C...JetMap subroutine TRaining ALgorithm.
-
-C...Trains the net according to /JMDAT1/.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      SAVE /JNDAT1/,/JNINT1/,/JMINT1/
-
-      DIMENSION INDW(MAXV),NBHD(MAXO,0:121)
-      EQUIVALENCE (NSELF(1),NBHD(1,0)),(NTSELF(1),INDW(1))
-
-
-      IF (MSTJM(8).NE.1) CALL JMERR(6)
-
-C...Update neighbourhood:
-      IF (MSTJM(9).NE.NBO) CALL JMNBHD
-
-      CALL JMFEED
-      IF (MXNDJM.EQ.0) RETURN
-
-      IF (MSTJM(5).EQ.0) THEN
-C...Normal updating
-        DO 100 INBH=1,NBHD(MXNDJM,0)
-          IWSTRT=INDW(NBHD(MXNDJM,INBH))
-          IWEND=INDW(NBHD(MXNDJM,INBH)+1)-1
-          DO 110 IW=IWSTRT,IWEND
-            W(IW)=W(IW)+PARJM(1)*DW(IW)
-110       CONTINUE
-100     CONTINUE
-
-      ELSEIF (MSTJM(5).EQ.1) THEN
-C...Learning Vector Quantization
-        IWSTRT=INDW(MXNDJM)
-        IWEND=INDW(MXNDJM+1)-1
-        IF (OUT(MXNDJM).LT.0.5) THEN
-C...Wrong answer:
-          DO 200 IW=IWSTRT,IWEND
-            W(IW)=W(IW)-PARJM(1)*DW(IW)
-200       CONTINUE
-        ELSE
-C...Correct answer:
-          DO 210 IW=IWSTRT,IWEND
-            W(IW)=W(IW)+PARJM(1)*DW(IW)
-210       CONTINUE
-        ENDIF
-
-      ELSEIF (MSTJM(5).EQ.2) THEN
-C...LVQ with neighborhood function:
-        IWSTRT=INDW(MXNDJM)
-        IWEND=INDW(MXNDJM+1)-1
-        DO 220 IW=IWSTRT,IWEND
-          W(IW)=W(IW)+PARJM(1)*DW(IW)*OUT(MXNDJM)
-220     CONTINUE
-
-      ENDIF
-
-      DO 300 INOD=1,NODES(MAXD+1)
-        OUT(INOD)=O(INOD)
-300   CONTINUE
-
-C...If normalize:
-      IF (MSTJM(7).EQ.1) CALL JMNORM
-
-      RETURN
-
-C**** END OF JMTRAL ****************************************************
-      END
-C***********************************************************************
-
-
-      SUBROUTINE JMWARN(IWARN)
-C...JetMap subroutine WARNing.
-
-C...Writes out a warning on file MSTJM(6).
-
-      PARAMETER(MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      SAVE /JNDAT1/
-
-
-      MSTJN(34)=MSTJN(34)+1
-      MSTJN(33)=IWARN
-      IF(MSTJN(34).LT.MSTJN(32)) THEN
-
-       WRITE(MSTJM(6),600)IWARN
-
-       IF (IWARN.EQ.1) THEN
-         WRITE(MSTJM(6),610)
-       ELSEIF (IWARN.EQ.2) THEN
-         WRITE(MSTJM(6),620)MSTJM(9)
-         WRITE(MSTJM(6),630)
-         WRITE(MSTJM(6),640)
-       ELSEIF (IWARN.EQ.3) THEN
-         WRITE(MSTJM(6),620)MSTJM(9)
-         WRITE(MSTJM(6),650)
-         WRITE(MSTJM(6),660)
-       ENDIF
-
-      ELSEIF(MSTJN(31).GE.1) THEN
-
-       CALL JMERR(13)
-
-      ENDIF
-
-600   FORMAT(' *** JETMAP WARNING:',I2,' ***')
-610   FORMAT(' No response in net for presented input')
-620   FORMAT(' Illegal value of neighbourhood size (',I2,')')
-630   FORMAT(' absolute value of MSTJM(9) must be within [0,5]')
-640   FORMAT(' MSTJM(9) set to limit value 5')
-650   FORMAT(' absolute value of MSTJM(9) must be within [0,121]')
-660   FORMAT(' MSTJM(9) set to limit value 121')
-
-      RETURN
-
-C**** END OF JMWARN ****************************************************
-      END
-C***********************************************************************
-
-
-      BLOCK DATA JNDATA
-
-C...JetNet block DATA 
-
-C...Initial values for parameters and switches for JETNET.
-
-      PARAMETER(MAXV=2000,MAXM=150000,MAXI=1000,MAXO=1000,MAXD=2)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      COMMON /JNDAT2/ TINV(10),IGFN(10),ETAL(10),WIDL(10),SATM(10)
-      COMMON /JNINT1/ O(MAXV),A(MAXV),D(MAXV),T(MAXV),DT(MAXV),
-     &                W(MAXM),DW(MAXM),NSELF(MAXM),NTSELF(MAXV),
-     &                G(MAXM+MAXV),ODW(MAXM),ODT(MAXV),ETAV(MAXM+MAXV)
-      COMMON /JNINT2/ M(0:10),MV0(11),MM0(11),NG(10),NL,IPOTT,
-     &                ER1,ER2,SM(10),ICPON
-      COMMON /JNINT4/ ILINON,NC,G2,NIT,ERRLN(0:3),DERRLN,STEPLN(0:3),
-     &                STEPMN,ERRMN,IEVAL,ISUCC,ICURVE,NSC,GVEC2
-      COMMON /JMINT1/ NDIM,ISW(10),NODES(0:MAXD+1),NBO
-      COMMON /JNGAUS/ ISET,GASDEV
-      COMMON /JNDATR/ MRJN(5),RRJN(100)
-
-
-C...Brief explanation of parameters and switches :
-C...
-C.../JNDAT1/:
-C...Feed-forward net:
-C...MSTJN(1) (D=3)      number of layers in net
-C...MSTJN(2) (D=10)     number of patterns per update in JNTRAL
-C...MSTJN(3) (D=1)      overall transfer function used in net
-C...        1 -> g(x)=1/(1+exp(-2x))
-C...        2 -> g(x)=tanh(x)
-C...        3 -> g(x)=exp(x) (only used internally for Potts-nodes)
-C...        4 -> g(x)=x
-C...        5 -> g(x)=1/(1+exp(-2x)) (only used internally for
-C...             entropy error)
-C...MSTJN(4) (D=0)      error measure
-C...       -1 -> log-squared error:     E = -log(1-(o-t)**2)
-C...        0 -> summed square error:   E = 0.5*(o-t)**2
-C...        1 -> entropy error:         E = -t*log(o) + (1-t)*log(1-o)
-C...      >=2 -> Kullback measure, using Potts nodes of dimension 
-C...             MSTJN(4):              E = t*log(t/o)
-C...MSTJN(5) (D=0)      updating procedure
-C...        0 -> standard Back-Propagation updating
-C...        1 -> Manhattan updating
-C...        2 -> Langevin updating
-C...        3 -> Quickprop
-C...        4 -> Conjugate Gradient - Polak-Ribiere
-C...        5 -> Conjugate Gradient - Hestenes-Stiefel
-C...        6 -> Conjugate Gradient - Fletcher-Reeves
-C...        7 -> Conjugate Gradient - Shanno
-C...        8 -> Terminate Conjugate Gradient search
-C...        9 -> No updating
-C...       10 -> Scaled Conjugate Gradient - Polak-Ribiere
-C...       11 -> Scaled Conjugate Gradient - Hestenes-Stiefel
-C...       12 -> Scaled Conjugate Gradient - Fletcher-Reeves
-C...       13 -> Scaled Conjugate Gradient - Shanno
-C...       14 -> Terminate Scaled Conjugate Gradient Search
-C...       15 -> Rprop
-C...MSTJN(6) (D=6)      file number for output statistics
-C...MSTJN(7) (I)        number of calls to JNTRAL
-C...MSTJN(8) (I)        initialization done -> 0 = no
-C...MSTJN(9) (D=100)    number of updates per epoch 
-C...MSTJN(10+I)         number of nodes in layer I (I=0 => input layer)
-C...MSTJN(10) (D=16)
-C...MSTJN(11) (D=8)
-C...MSTJN(12) (D=1)
-C...MSTJN(13-20) (D=0)
-C...MSTJN(21) (D=0)     pruning (>0 -> on)
-C...MSTJN(22) (D=0)     saturation measure (<>0 -> on)
-C...                    <0 -> update temperature to give measure ~0.5
-C...MSTJN(23,24) (D=0)  geometry of input nodes for receptive fields
-C...MSTJN(25,26) (D=0)  geometry of receptive fields
-C...MSTJN(27)    (D=1)  number of hidden nodes per receptive field
-C...MSTJN(28-30) (D=0)  precision in bits (0 -> machine precision) for
-C...                    sigmoid functions (28), thresholds (29) and
-C...                    weights (30)
-C...MSTJN(31)    (D=1)  Warning procedure
-C...        0 -> No action is taken after a warning
-C...        1 -> The execution is stopped after the program 
-C...             has experienced MSTJN(32) warnings
-C...             in any case only MSTJN(32) warning messages are printed
-C...             out.
-C...MSTJN(32) (D=10)    Maximum number of warning messages to be  
-C...                    printed. As described above.
-C...MSTJN(33) (I)       code for latest warning issued by the program.
-C...MSTJN(34) (I)       Number of warnings issued by the program so far.
-C...MSTJN(35) (D=10)    Max. number of iterations allowed in line search.
-C...MSTJN(36) (D=10)    Max. number of allowed restarts in line search.
-C...MSTJN(37) (I)       Status of line search
-C...        0 -> Minimum found
-C...        1 -> Searching for minimum
-C...MSTJN(38) (I)       Number of restarts in Quickprop/ConjGr/ScConjGr
-C...MSTJN(39) (I)       Number of calls to JNHESS.
-C...MSTJN(40)           not used
-C...
-C...
-C...PARJN(1) (D=0.001)  learning parameter eta
-C...PARJN(2) (D=0.5)    momentum term alfa
-C...PARJN(3) (D=1.0)    overall inverse temperature beta
-C...PARJN(4) (D=0.1)    width of initial weights
-C...        > 0 -> [-width,+width]
-C...        < 0 -> [0,+width]
-C...PARJN(5) (D=0.0)    forgetting parameter epsilon
-C...PARJN(6) (D=0.0)    noise width in Langevin equation
-C...PARJN(7) (R)        last error per node
-C...PARJN(8) (R)        mean error in last update
-C...PARJN(9) (R)        mean error last epoch (equal to MSTJN(9) updates)
-C...PARJN(10)(R)        weighted mean average used in pruning
-C...PARJN(11) (D=1.0)   change in eta (scale factor per epoch)
-C...        > 0 -> Geometric with "bold driver" dynamics
-C...        < 0 -> Geometric decrease of eta
-C...PARJN(12) (D=1.0)   change in momentum alpha (scale factor per epoch)
-C...PARJN(13) (D=1.0)   change in temperature (scale factor per epoch)
-C...PARJN(14) (D=0.0)   pruning parameter lambda
-C...PARJN(15) (D=1.E-6) change in lambda
-C...PARJN(16) (D=0.9)   parameter gamma used for calculation of PARJN(10)
-C...PARJN(17) (D=0.9)   pruning "cut-off"
-C...PARJN(18) (D=1.0)   scale parameter W(0), used in pruning
-C...PARJN(19) (D=0.0)   target error when pruning
-C...PARJN(20) (D=1.0)   decrease in Langevin noise (scale factor per epoch)
-C...PARJN(21) (D=1.75)  maximum scale for Quickprop updating
-C...PARJN(22) (D=1000.) maximum allowed size of weights in Quickprop
-C...PARJN(23) (D=0.0)   constant added to g'(x) to avoid 'flat spot'
-C...PARJN(24) (D=0.1)   line search convergence parameter (0 < ... < 1)
-C...PARJN(25) (D=0.05)  tolerance of minimum in line search
-C...PARJN(26) (D=0.001) minimum allowed change in error in line search
-C...PARJN(27) (D=2.0)   maximum allowed step size in line search
-C...PARJN(28) (D=1.E-4) constant sigma_0 used in SCG
-C...PARJN(29) (D=1.E-6) initial value for lambda in SCG
-C...PARJN(30) (D=1.2)   scale-up factor used in Rprop
-C...PARJN(31) (D=0.5)   scale-down factor used in Rprop
-C...PARJN(32) (D=50.)   maximum scale-up factor in Rprop
-C...PARJN(33) (D=1.E-6) minimum scale-down factor in Rprop
-C...PARJN(34-40)        not used
-C...
-C...
-C...Self-organizing net:
-C...MSTJM(1)   (D=1)    number of dimensions in net
-C...MSTJM(2)   (D=0)    symmetry of initial weights
-C...        0 -> [0,+width]
-C...        1 -> [-width,+width]
-C...MSTJM(3)   (D=2)    response function
-C...        1 -> g(x)=0.5*(1.0+tanh(x) : for normalized data
-C...        2 -> g(x)=exp(-x)          : for unnormalized data
-C...MSTJM(4)   (D=1)    error measure
-C...        1 -> summed square error
-C...MSTJM(5)   (D=0)    updating procedure
-C...        0 -> unsupervized clustering & topological ordering
-C...        1 -> Learning Vector Quantization (LVQ 1)
-C...        2 -> as 1, but with neighborhood function.
-C...MSTJM(6)   (D=6)     output file number
-C...MSTJM(7)   (D=0)     normalize weights or not
-C...        0 -> unnormalized
-C...        1 -> normalized
-C...MSTJM(8) (I)         initialization done
-C...MSTJM(9)   (D=0)     neighbourhood size
-C...        0< -> square neighbourhood
-C...        <0 -> circular neighbourhood
-C...MSTJM(10)  (D=8)     number of input nodes
-C...MSTJM(11)  (D=10)    number of nodes in dimension 1.
-C...        <0 -> periodic boundary
-C...MSTJM(12)  (D=1)     number of nodes in dimension 2.
-C...        <0 -> periodic boundary
-C...MSTJM(13-20)         not used
-C...
-C...
-C...PARJM(1)   (D=0.001) learning parameter eta
-C...PARJM(2)   (D=0.0)   not used
-C...PARJM(3)   (D=0.01)  overall inverse temperature beta
-C...PARJM(4)   (D=0.5)   initial width of weights
-C...PARJM(5-20)          not used
-C...
-C...
-C.../JNDAT2/:
-C...TINV(I) (D=0.0)     inverse temperature of layer I (if 0 use PARJN(3))
-C...
-C...IGFN(I) (D=0)       sigmoid function for layer I (if 0 use MSTJN(3))
-C...
-C...ETAL(I) (D=0.0)     learning parameter in layer I (if 0 use PARJN(1))
-C...
-C...WIDL(I) (D=0.0)     initial width in layer I (if 0 use PARJN(4))
-C...
-C...SATM(I) (R)         saturation measure "S" for layer I.
-C...      MSTJN(3)=1 -> S = sum[(1.-2.*O(J))**2]
-C...      MSTJN(3)=2 -> S = sum[O(J)**2]
-C...
-C...End of description
-
-
-      DATA MSTJN/3,10,1,0,0,6,0,0,100,16,8,1,14*0,1,3*0,
-     &           1,10,2*0,10,10,4*0/
-      DATA PARJN/0.001,0.5,1.0,0.1,6*0.0,
-     &           3*1.0,0.0,1.E-6,0.9,0.9,1.0,0.0,1.0,
-     &           1.75,1000.0,0.0,0.1,0.05,0.001,2.0,1.E-4,1.E-6,1.2,
-     &           0.5,50.,1.E-6,7*0.0/
-      DATA MSTJM/1,0,2,1,0,6,0,0,0,10,10,1,8*0/
-      DATA PARJM/0.001,0.0,0.01,0.5,16*0.0/
-      DATA TINV/10*0.0/
-      DATA IGFN/10*0/
-      DATA ETAL/10*0.0/
-      DATA WIDL/10*0.0/
-      DATA SATM/10*0.0/
-      DATA ER1/0.0/
-      DATA ER2/0.0/
-      DATA SM/10*0.0/
-      DATA NBO/10/
-      DATA ICPON/0/
-      DATA ILINON,NC,NIT,IEVAL,ISUCC,ICURVE,NSC/4*0,1,2*0/
-      DATA G2,ERRLN,DERRLN,STEPLN,STEPMN,ERRMN,GVEC2/13*0.0/
-      DATA ISET/0/
-      DATA GASDEV/0.0/
-      DATA MRJN/19780503,0,0,97,33/
-
-C**** END OF JNDATA ****************************************************
-      END
-C***********************************************************************
-
-      SUBROUTINE JNTDEC(METHOD)
-C...JetNet subroutine Test-DECk
-
-C...Runs a test-program using data from two overlapping Gaussian
-C...distributions in the input space. The test-program uses the
-C...method specified by METHOD.
-
-      PARAMETER(MAXI=1000,MAXO=1000)
-
-      COMMON /JNDAT1/ MSTJN(40),PARJN(40),MSTJM(20),PARJM(20),
-     &                OIN(MAXI),OUT(MAXO),MXNDJM
-      SAVE /JNDAT1/
-
-      PARAMETER(INDIM=5,HIDDEN=10,NTRAIN=5000,NTEST=10000,NEPOCH=100)
-      PARAMETER(WID1=1.,WID2=2.,XI=0.00,BAYES=85.2)
-      DIMENSION TIN(NTRAIN+NTEST,INDIM),TOUT(NTRAIN+NTEST)
-
-
-      WRITE(MSTJN(6),600)
-
-      WRITE(MSTJN(6),610)INDIM
-      WRITE(MSTJN(6),620)WID1,WID2
-      WRITE(MSTJN(6),621)XI
-      WRITE(MSTJN(6),*)
-
-C...Generate data:
-      WRITE(MSTJN(6),625)
-      DO 100 IPAT=1,NTRAIN+NTEST
-        IDUM=IPAT
-        IF (RJN(IDUM).GT.0.5) THEN
-          DO 110 I=1,INDIM
-            TIN(IPAT,I)=WID1*GAUSJN(IDUM)
-110       CONTINUE
-          TOUT(IPAT)=1.0
-        ELSE
-          TIN(IPAT,1)=WID2*GAUSJN(IDUM)+XI
-          DO 120 I=2,INDIM
-            TIN(IPAT,I)=WID2*GAUSJN(IDUM)
-120       CONTINUE
-          TOUT(IPAT)=0.0
-        ENDIF
-100   CONTINUE
-      WRITE(MSTJN(6),626)
-
-C...Set network architecture: MSTJN(1)-layered network with 
-C...MSTJN(11) hidden nodes, MSTJN(12) output nodes and 
-C...MSTJN(10) inputs.
-      MSTJN(1)=3
-      MSTJN(10)=INDIM
-      MSTJN(11)=HIDDEN
-      MSTJN(12)=1
-
-C...Set sigmoid function: 
-      MSTJN(3)=1
-
-C...Initial width of weights:
-      PARJN(4)=0.5
-
-C...Choose updating method
-      MSTJN(5)=METHOD
-      IF ((MSTJN(5).EQ.8).OR.(MSTJN(5).EQ.9).OR.(MSTJN(5).EQ.14).OR.
-     &(MSTJN(5).LT.0).OR.(MSTJN(5).GT.15)) THEN
-        WRITE(MSTJN(6),660)
-        STOP 0
-      ENDIF
-
-C...Initialize network:
-      CALL JNINIT
-
-C...Set parameters suitable for the given method of updating
-      IF (MSTJN(5).EQ.0) THEN
-C...Normal Backprop
-        PARJN(1)=2.0
-        PARJN(2)=0.5
-        PARJN(11)=0.999
-      ELSEIF (MSTJN(5).EQ.1) THEN
-C...Manhattan
-        PARJN(1)=0.05
-        PARJN(2)=0.5
-        PARJN(11)=-0.99
-      ELSEIF (MSTJN(5).EQ.2) THEN
-C...Langevin
-        PARJN(1)=1.0
-        PARJN(2)=0.5
-        PARJN(6)=0.01
-        PARJN(11)=0.999
-        PARJN(20)=0.99
-      ELSEIF (MSTJN(5).EQ.3) THEN
-C...Quickprop
-        PARJN(1)=2.0
-        PARJN(2)=0.0
-        PARJN(6)=0.0
-        PARJN(11)=1.0
-        PARJN(20)=1.0
-        MSTJN(2)=NTRAIN
-      ELSEIF ((MSTJN(5).GE.4).AND.(MSTJN(5).LE.7)) THEN
-C...Conjugate Gradient
-        PARJN(1)=1.0
-        MSTJN(2)=NTRAIN
-      ELSEIF ((MSTJN(5).GE.10).AND.(MSTJN(5).LE.13)) THEN
-C...Scaled Conjugate Gradient
-        MSTJN(2)=NTRAIN
-      ELSEIF (MSTJN(5).EQ.15) THEN
-C...Rprop
-        PARJN(1)=1.0
-        MSTJN(2)=NTRAIN
-      ENDIF
-
-C...Define the size of one epoch. Note that for batch training, the
-C...number of patterns per update, MSTJN(2), must be set to the
-C...total number of training patterns, and hence MSTJN(9), the
-C...number of updates per epoch must be set to one.
-      MSTJN(9)=MAX(1,NTRAIN/MSTJN(2))
-
-C...Other parameters keep their default values.
-
-      WRITE(MSTJN(6),*)
-      WRITE(MSTJN(6),630)
-
-      TESTMX=0.0
-      TRNMX=0.0
-C...Main loop over epochs:
-      DO 300 IEPOCH=1,NEPOCH
-
-C...Training loop:
-        NRIGHT=0
-        DO 310 IP=1,NTRAIN
-          IF (MSTJN(5).LE.2) THEN
-C...Note that for non-batch training it is often a good idea to pick
-C...training patterns at random
-            IPAT=INT(RJN(IP)*FLOAT(NTRAIN))+1
-          ELSE
-            IPAT=IP
-          ENDIF
-
-C...Put pattern into OIN:
-          DO 320 I=1,MSTJN(10)
-            OIN(I)=TIN(IPAT,I)
-320       CONTINUE
-C...Put target output value into OUT:
-          OUT(1)=TOUT(IPAT)
-
-C...Invoke training algorithm:
-          CALL JNTRAL
-
-C...Calculate performance on training set:
-          IF (ABS(OUT(1)-TOUT(IPAT)).LT.0.5) NRIGHT=NRIGHT+1
-
-310     CONTINUE
-        TRAIN=FLOAT(NRIGHT)/FLOAT(NTRAIN)
-
-        IF (MOD(IEPOCH,10).EQ.0) THEN
-C...Testing loop:
-          NRIGHT=0
-          DO 330 IPAT=NTRAIN+1,NTRAIN+NTEST
-
-C...Put pattern into OIN:
-            DO 340 I=1,MSTJN(10)
-              OIN(I)=TIN(IPAT,I)
-340         CONTINUE
-
-C...Get network output:
-            CALL JNTEST
-
-C...Calculate performance on test set (=generalization):
-            IF (ABS(OUT(1)-TOUT(IPAT)).LT.0.5) NRIGHT=NRIGHT+1
-330       CONTINUE
-          TEST=FLOAT(NRIGHT)/FLOAT(NTEST)
-          IF ((MSTJN(5).GT.3).AND.(MSTJN(5).LT.15)) THEN
-            IF (TRAIN.GT.TRNMX) THEN
-              TRNMX=TRAIN
-              TESTMX=TEST
-            ENDIF
-            TEST=TESTMX
-            TRAIN=TRNMX
-          ENDIF
-
-
-C...Display performance:
-          WRITE(MSTJN(6),640)IEPOCH,TRAIN,TEST
-        ENDIF
-
-C...Terminate CG and SCG training:
-        IF (IEPOCH.EQ.NEPOCH-1) THEN
-          IF ((MSTJN(5).GT.3).AND.(MSTJN(5).LT.15)) THEN
-            IF (MSTJN(5).LT.9) THEN
-              MSTJN(5)=8
-            ELSE
-              MSTJN(5)=14
-            ENDIF
-            TRNMX=0.0
-            TESTMX=0.0
-          ENDIF
-        ENDIF
-
-300   CONTINUE
-
-      WRITE(MSTJN(6),*)
-      WRITE(MSTJN(6),650)BAYES
-      IF (METHOD.EQ.0) THEN
-        WRITE(MSTJN(6),670)
-      ELSEIF (METHOD.EQ.1) THEN
-        WRITE(MSTJN(6),680)
-      ELSEIF (METHOD.EQ.2) THEN
-        WRITE(MSTJN(6),690)
-      ELSEIF (METHOD.EQ.3) THEN
-        WRITE(MSTJN(6),700)
-      ELSEIF (METHOD.EQ.4) THEN
-        WRITE(MSTJN(6),710)
-      ELSEIF (METHOD.EQ.5) THEN
-        WRITE(MSTJN(6),720)
-      ELSEIF (METHOD.EQ.6) THEN
-        WRITE(MSTJN(6),730)
-      ELSEIF (METHOD.EQ.7) THEN
-        WRITE(MSTJN(6),740)
-      ELSEIF (METHOD.EQ.10) THEN
-        WRITE(MSTJN(6),750)
-      ELSEIF (METHOD.EQ.11) THEN
-        WRITE(MSTJN(6),760)
-      ELSEIF (METHOD.EQ.12) THEN
-        WRITE(MSTJN(6),770)
-      ELSEIF (METHOD.EQ.13) THEN
-        WRITE(MSTJN(6),780)
-      ELSEIF (METHOD.EQ.15) THEN
-        WRITE(MSTJN(6),790)
-      ENDIF
-
-600   FORMAT(31X,'JETNET Test-Deck')
-610   FORMAT(15X,'Two overlapping Gaussian distributions in ',
-     &I2,' dimensions.')
-620   FORMAT(15X,'Their standard deviations are ',F3.1,' and ',F3.1)
-621   FORMAT(15X,'Their mean values are separated by ',F4.2)
-625   FORMAT(15X,'Generating training and test patterns...')
-626   FORMAT(15X,'...done generating data.')
-630   FORMAT('   Epoch   /  Training  /  General. ')
-640   FORMAT(I8,2X,2(' /',F9.3,2X))
-650   FORMAT(' The optimal generalization performance is ',F4.1,'%')
-660   FORMAT(' Undefined training algorithm in call to JNTDEC')
-670   FORMAT(' Backprop should reach (81.0 +- 2.2)% in 100 epochs')
-680   FORMAT(' Manhattan should reach (84.3 +- 0.6)% in 100 epochs')
-690   FORMAT(' Langevin should reach (82.9 +- 1.8)% in 100 epochs')
-700   FORMAT(' Quickprop should reach (82.8 +- 8.8)% in 100 epochs')
-710   FORMAT(' Polak-Ribiere CG should reach (79.0 +- 7.0)% in 100',
-     &' epochs')
-720   FORMAT(' Hestenes-Stiefel CG should reach (79.8 +- 5.6)% in 100',
-     &' epochs')
-730   FORMAT(' Fletcher-Reeves CG should reach (79.6 +- 5.6)% in 100',
-     &' epochs')
-740   FORMAT(' Shanno CG should reach (71.7 +- 11.6)% in 100 epochs')
-750   FORMAT(' Polak-Ribiere SCG should reach (84.0 +- 1.6)% in 100',
-     &' epochs')
-760   FORMAT(' Hestenes-Stiefel SCG should reach (84.1 +- 2.6)% in 100',
-     &' epochs')
-770   FORMAT(' Fletcher-Reeves SCG should reach (81.4 +- 5.2)% in 100',
-     &' epochs')
-780   FORMAT(' Shanno SCG should reach (70.7 +- 8.1)% in 100 epochs')
-790   FORMAT(' Rprop should reach (83.5 +- 2.2)% in 100 epochs')
-
-      RETURN
-
-C**** END OF JNTDEC ****************************************************
-      END
-C***********************************************************************
-
-      REAL FUNCTION RJN(IDUM)
-C...JetNet function Random number generator.
-C...Generates random numbers uniformly distributed in ]0,1[
-
-C...This function is taken from the Lund program JETSET
-C...written by T. Sjostrand.
-C...The algorithm is due to Marsaglia, Zaman and Tsang:
-C...Stat. Prob. Lett., vol. 9, (1990)
-C...This function is very much based on a routine
-C...written by F.James: F.James, Comp. Phys. Comm., vol 60 (1990).
-
-C...Names have been changed w.r.t. the JETSET function RLU and
-C...the switch that determines the current position has been
-C...removed.
-
-
-      COMMON /JNDATR /MRJN(5),RRJN(100)
-      SAVE /JNDATR/
-
-
-C...Initialize generation from given seed.
-      IF(MRJN(2).EQ.0) THEN
-        IJ=MOD(MRJN(1)/30082,31329)
-        KL=MOD(MRJN(1),30082)
-        I=MOD(IJ/177,177)+2
-        J=MOD(IJ,177)+2
-        K=MOD(KL/169,178)+1
-        L=MOD(KL,169)
-        DO 110 II=1,97
-        S=0.
-        T=0.5
-        DO 100 JJ=1,24
-        M=MOD(MOD(I*J,179)*K,179)
-        I=J
-        J=K
-        K=M
-        L=MOD(53*L+1,169)
-        IF(MOD(L*M,64).GE.32) S=S+T
-  100   T=0.5*T
-  110   RRJN(II)=S
-        TWOM24=1.
-        DO 120 I24=1,24
-  120   TWOM24=0.5*TWOM24
-        RRJN(98)=362436.*TWOM24
-        RRJN(99)=7654321.*TWOM24
-        RRJN(100)=16777213.*TWOM24
-        MRJN(2)=1
-        MRJN(3)=0
-        MRJN(4)=97
-        MRJN(5)=33
-      ENDIF
-
-C...Generate next random number.
-  130 RUNI=RRJN(MRJN(4))-RRJN(MRJN(5))
-      IF(RUNI.LT.0.) RUNI=RUNI+1.
-      RRJN(MRJN(4))=RUNI
-      MRJN(4)=MRJN(4)-1
-      IF(MRJN(4).EQ.0) MRJN(4)=97
-      MRJN(5)=MRJN(5)-1
-      IF(MRJN(5).EQ.0) MRJN(5)=97
-      RRJN(98)=RRJN(98)-RRJN(99)
-      IF(RRJN(98).LT.0.) RRJN(98)=RRJN(98)+RRJN(100)
-      RUNI=RUNI-RRJN(98)
-      IF(RUNI.LT.0.) RUNI=RUNI+1.
-      IF(RUNI.LE.0.OR.RUNI.GE.1.) GOTO 130
-
-C...Update counters. Random number to output.
-      MRJN(3)=MRJN(3)+1
-      IF(MRJN(3).EQ.1000000000) THEN
-        MRJN(2)=MRJN(2)+1
-        MRJN(3)=0
-      ENDIF
-      RJN=RUNI
-
-      RETURN
-
-C**** END OF RJN *******************************************************
-      END
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/trainNN.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/trainNN.cxx
deleted file mode 100644
index a70d7214aa6ad1a934953e157aae3849575d1e54..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/jetnetRoot/trainNN.cxx
+++ /dev/null
@@ -1,1015 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include <TTree.h>
-#include <TFile.h>
-#include <TCanvas.h>
-#include <TH1F.h>
-#include <TLegend.h>
-#include <iostream>
-#include <TPad.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <math.h>
-#include "TJetNet.h"
-#include "doNormalization.C"
-#include "Riostream.h"
-#include "TNetworkToHistoTool.h"
-
-#include "TTrainedNetwork.h"
-
-
-#include "TMatrixD.h"
-#include "TVectorD.h"
-
-Double_t sigmoid(Double_t x)
-{
-  return 1./(1.+exp(-2*x));
-}
-
-using namespace std;
-
-void trainNN(TString inputfile,
-             TString outputclass="JetFitterNN",
-             int nIterations=10,
-             int dilutionFactor=2,
-             bool useSD=false,
-             bool withIP3D=true,
-             int nodesFirstLayer=10,
-             int nodesSecondLayer=9,
-             int restartTrainingFrom=0);
-
-
-int main()
-{
-  trainNN(
-      "../reduceddatasets/reduceddataset_Cone4H1TopoParticleJets_forNN.root",
-      "dummy",
-      10000,
-      200,
-      false,
-      false,//withIP3D
-      10,
-      10,
-      0);
-  return 0;
-}
-
-
-int doIt() 
-{
-
-  trainNN(
-      "../reduceddatasets/reduceddataset_Cone4H1TopoParticleJets_forNN.root",
-      "dummy",
-      10000,
-      200,
-      false,
-      false,//withIP3D
-      10,
-      10,
-      0);
-  return 0;
-
-}
-
-
-
-
-
-void trainNN(TString inputfile,
-             TString outputclass,
-             int nIterations,
-             int dilutionFactor,
-             bool useSD,
-             bool withIP3D,
-             int nodesFirstLayer,
-             int nodesSecondLayer,
-             int restartTrainingFrom) {
-
-  gROOT->SetStyle("Plain");
-
-  cout << "starting with settings: " << endl;
-  cout << " nIterations: " << nIterations << endl;
-  cout << " dilutionFactor: " << dilutionFactor << endl;
-  cout << " useSD: " << (useSD==true?"yes":"no") << endl;
-  cout << " withIP3D: " << (withIP3D==true?"yes":"no") << endl;
-  cout << " nodesFirstLayer: " << nodesFirstLayer << endl;
-  cout << " nodesSecondLayer: " << nodesSecondLayer << endl;
-  
-  
-  TFile *file= new TFile(inputfile);
-  TTree *simu = (TTree*)file->Get("SVTree");
-
-  Int_t           nVTX;
-  Int_t           nTracksAtVtx;
-  Int_t           nSingleTracks;
-  Double_t        energyFraction;
-  Double_t        mass;
-  Double_t        significance3d;
-  Double_t        discriminatorIP3D;
-  Int_t        cat_pT;
-  Int_t        cat_eta;
-  Double_t        weight;
-  Int_t bottom;
-  Int_t charm;
-  Int_t light;
-  
-  simu->SetBranchAddress("nVTX",&nVTX);
-  simu->SetBranchAddress("nTracksAtVtx",&nTracksAtVtx);
-  simu->SetBranchAddress("nSingleTracks",&nSingleTracks);
-  simu->SetBranchAddress("energyFraction",&energyFraction);
-  simu->SetBranchAddress("mass",&mass);
-  simu->SetBranchAddress("significance3d",&significance3d);
-  simu->SetBranchAddress("discriminatorIP3D",&discriminatorIP3D);
-  simu->SetBranchAddress("cat_pT",&cat_pT);
-  simu->SetBranchAddress("cat_eta",&cat_eta);
-  simu->SetBranchAddress("weight",&weight);
-  simu->SetBranchAddress("bottom",   &bottom);
-  simu->SetBranchAddress("charm",   &charm);
-  simu->SetBranchAddress("light",&light);
-
-
-  TString filterTrain("Entry$%");
-  filterTrain+=dilutionFactor;
-  filterTrain+="==0";
-  
-  TString filterTest("Entry$%");
-  filterTest+=dilutionFactor;
-  filterTest+="==1";
-
-  int* nneurons;
-  int nlayer=3;
-
-  int numberinputs=8;
-  if (withIP3D)
-  {
-    numberinputs=9;
-  }
-  int numberoutputs=3;
-
-  if (nodesSecondLayer!=0)
-  {
-    nlayer=4;
-  }
-
-  if (nodesSecondLayer!=0)
-  {
-    nneurons=new int[4];
-  }
-  else
-  {
-    nneurons=new int[3];
-  }
-  
-  if (withIP3D)
-  {
-    nneurons[0]=9;
-  }
-  else
-  {
-    nneurons[0]=8;
-  }
-  
-  nneurons[1]=nodesFirstLayer;
-
-  if (nodesSecondLayer!=0)
-  {
-    nneurons[2]=nodesSecondLayer;
-    nneurons[3]=3;
-  }
-  else
-  {
-    nneurons[2]=3;
-  }
-
-  //  float eventWeight(0);
-  float trainingError(0);
-  float testError(0);
-  
-  //setting learning parameters
-
-  cout << " now providing training events " << endl;
-  
-  Int_t numberTrainingEvents=0;
-  Int_t numberTestingEvents=0;
-
-  for (Int_t i = 0; i < simu->GetEntries(); i++) {
-
-    if (i % 100000 == 0 ) {
-      std::cout << " Counting training / testing events in sample. Looping over event " << i << std::endl;
-    }
-    
-    if (i%dilutionFactor==0) numberTrainingEvents+=1;
-//    if (i%dilutionFactor==1||i%dilutionFactor==2) numberTestingEvents+=1;
-    if (i%dilutionFactor==1) numberTestingEvents+=1;
-
-  }
-  
-  cout << " N. training events: " << numberTrainingEvents << 
-      " N. testing events: " << numberTestingEvents << endl;
-
-  cout << "now start to setup the network..." << endl;
-  
- 
-  TJetNet* jn = new TJetNet( numberTestingEvents, numberTrainingEvents, nlayer, nneurons );
-
-  cout <<  " setting learning method... " << endl;
-
-  //  jn->SetMSTJN(4,12); Fletscher-Rieves (Scaled Conj Grad)
-
-  int nPatternsPerUpdate=20;
-  
-  jn->SetPatternsPerUpdate( nPatternsPerUpdate );
-  jn->SetUpdatesPerEpoch( (int)std::floor((float)numberTrainingEvents/(float)nPatternsPerUpdate) );
-  jn->SetUpdatingProcedure( 0 );
-  jn->SetErrorMeasure( 0 );
-  jn->SetActivationFunction( 1 );
-  jn->SetLearningRate( 0.5 );//0.8
-  jn->SetMomentum( 0.2 );//0.3 //is now 0.5
-  jn->SetInitialWeightsWidth( 1. );
-  //  jn->SetLearningRateDecrease( 0.992 );
-  jn->SetLearningRateDecrease( 0.99 );//0.992
-  
-
-  cout << " setting pattern for training events " << endl;
-
-  int trainSampleNumber=0;
-  int testSampleNumber=1;
-  
-  cout << " copying over training events " << endl;
-  
-  int counter=0;
-  for (Int_t i = 0; i < simu->GetEntries(); i++) {
-    
-    if (i % 100000 == 0 ) {
-      std::cout << " Copying over training events. Looping over event " << i << std::endl;
-    }
-
-    if (i%dilutionFactor!=0) continue;
-
-    simu->GetEntry(i);
-
-    jn->SetInputTrainSet( counter, 0, norm_nVTX(nVTX) );
-    jn->SetInputTrainSet( counter, 1, norm_nTracksAtVtx(nTracksAtVtx) );
-    jn->SetInputTrainSet( counter, 2, norm_nSingleTracks(nSingleTracks) );
-    jn->SetInputTrainSet( counter, 3, norm_energyFraction(energyFraction) );
-    jn->SetInputTrainSet( counter, 4, norm_mass(mass) );
-    jn->SetInputTrainSet( counter, 5, norm_significance3d(significance3d ) );
-    if (withIP3D)
-    {
-      jn->SetInputTrainSet( counter, 6, norm_IP3D(discriminatorIP3D) );
-      jn->SetInputTrainSet( counter, 7, norm_cat_pT(cat_pT) );
-      jn->SetInputTrainSet( counter, 8, norm_cat_eta(cat_eta) );
-    }
-    else
-    {
-      jn->SetInputTrainSet( counter, 6, norm_cat_pT(cat_pT) );
-      jn->SetInputTrainSet( counter, 7, norm_cat_eta(cat_eta) );
-    }
-
-    jn->SetOutputTrainSet( counter, 0, bottom );
-    jn->SetOutputTrainSet( counter, 1, charm );
-    jn->SetOutputTrainSet( counter, 2, light );
-
-    counter+=1;
-
-    //not used!
-    //    eventWeight=weight;
-
-  }
-
-  if (counter!=numberTrainingEvents)
-  {
-    cout << " counter up to: " << counter << " while events in training sample are " << numberTrainingEvents << endl;
-    return;
-  }
-
-  cout << " setting pattern for testing events " << endl;
-
-  
-  cout << " copying over testing events " << endl;
-  counter=0;
-  
-  
-  for (Int_t i = 0; i < simu->GetEntries(); i++) {
-    
-    if (i % 100000 == 0 ) {
-      std::cout << " Copying over testing events. Looping over event " << i << std::endl;
-    }
-    
-    if (i%dilutionFactor!=1) continue;
-    
-    simu->GetEntry(i);
-    jn->SetInputTestSet( counter, 0, norm_nVTX(nVTX) );
-    jn->SetInputTestSet( counter, 1, norm_nTracksAtVtx(nTracksAtVtx) );
-    jn->SetInputTestSet( counter, 2, norm_nSingleTracks(nSingleTracks) );
-    jn->SetInputTestSet( counter, 3, norm_energyFraction(energyFraction) );
-    jn->SetInputTestSet( counter, 4, norm_mass(mass) );
-    jn->SetInputTestSet( counter, 5, norm_significance3d(significance3d ) );
-    if (withIP3D)
-    {
-      jn->SetInputTestSet( counter, 6, norm_IP3D(discriminatorIP3D) );
-      jn->SetInputTestSet( counter, 7, norm_cat_pT(cat_pT) );
-      jn->SetInputTestSet( counter, 8, norm_cat_eta(cat_eta) );
-    }
-    else
-    {
-      jn->SetInputTestSet( counter, 6, norm_cat_pT(cat_pT) );
-      jn->SetInputTestSet( counter, 7, norm_cat_eta(cat_eta) );
-    }
-
-    jn->SetOutputTestSet( counter, 0, bottom );
-    jn->SetOutputTestSet( counter, 1, charm );
-    jn->SetOutputTestSet( counter, 2, light );
-
-    counter+=1;
-
-    //not used!
-    //    eventWeight=weight;
-  }
-    
-  if (counter!=numberTestingEvents)
-  {
-    cout << " counter up to: " << counter << " while events in testing sample are " << numberTestingEvents << endl;
-    return;
-  }
-
-  //normalize inputvariables?
-  //jn->Normalize();
-
-  jn->Shuffle(true,false);
-  
-  if (restartTrainingFrom==0)
-  {
-    jn->Init();
-    //    jn->DumpToFile("WeightsInitial.w");
-  }
-  else
-  {
-    TString name("Weights");
-    name+=restartTrainingFrom;
-    name+=".w";
-
-    jn->ReadFromFile(name);
-  }
-  
-
-
-  float minimumError=1e10;
-  int epochesWithRisingError=0;
-  int epochWithMinimum=0;
-
-  int updatesPerEpoch=jn->GetUpdatesPerEpoch();
-
-  //prepare output stream
-
-  ofstream cronology("weights/trainingCronology.txt",ios_base::out);//|ios_base::app);
-  
-  cronology << "-------------SETTINGS----------------" << endl;
-  cronology << "Epochs: " << jn->GetEpochs() << std::endl;
-  cronology << "Updates Per Epoch: " << jn->GetUpdatesPerEpoch() << std::endl;
-  cronology << "Updating Procedure: " << jn->GetUpdatingProcedure() << std::endl;
-  cronology << "Error Measure: " << jn->GetErrorMeasure() << std::endl;
-  cronology << "Patterns Per Update: " << jn->GetPatternsPerUpdate() << std::endl;
-  cronology << "Learning Rate: " << jn->GetLearningRate() << std::endl;
-  cronology << "Momentum: " << jn->GetMomentum() << std::endl;
-  cronology << "Initial Weights Width: " << jn->GetInitialWeightsWidth() << std::endl;
-  cronology << "Learning Rate Decrease: " << jn->GetLearningRateDecrease() << std::endl;
-  cronology << "Activation Function: " << jn->GetActivationFunction() << std::endl;
-  cronology << "-------------LAYOUT------------------" << endl;
-  cronology << "Input variables: " << jn->GetInputDim() << endl;
-  cronology << "Output variables: " << jn->GetOutputDim() << endl;
-  cronology << "Hidden layers: " << jn->GetHiddenLayerDim() << endl;
-  cronology << "Layout : ";
-  for (Int_t s=0;s<jn->GetHiddenLayerDim()+2;++s)
-  {
-    cronology << jn->GetHiddenLayerSize(s);
-    if (s<jn->GetHiddenLayerDim()+1) cronology << "-";
-  }
-  cronology << endl;
-  cronology << "--------------HISTORY-----------------" << endl;
-  cronology << "History of iterations: " << endl;
-  cronology.close();
-
-  //prepare training histo
-  TH1F* histoTraining=new TH1F("training","training",(int)std::floor((float)nIterations/10.+0.5),1,std::floor((float)nIterations/10.+1.5));
-  TH1F* histoTesting=new TH1F("testing","testing",(int)std::floor((float)nIterations/10.+0.5),1,std::floor((float)nIterations/10.+1.5));
-
-  double maximumTrain=0;
-  double minimumTrain=1e10;
-
-  for(int epoch=restartTrainingFrom+1;epoch<=nIterations;++epoch)
-  {
-    trainingError = jn->Train();
-
-    if (epoch%10==0)
-    {
-
-      cronology.open("weights/trainingCronology.txt",ios_base::app);
-
-      testError = jn->Test();
-
-      if (trainingError>maximumTrain) maximumTrain=trainingError;
-      if (testError>maximumTrain) maximumTrain=testError;
-      if (trainingError<minimumTrain) minimumTrain=trainingError;
-      if (testError<minimumTrain) minimumTrain=testError;
-
-      
-      histoTraining->Fill(epoch/10.,trainingError);
-      histoTesting->Fill(epoch/10.,testError);
-
-      if (testError<minimumError)
-      {
-        minimumError=testError;
-        epochesWithRisingError=0;
-        epochWithMinimum=epoch;
-      }
-      else
-      {
-        epochesWithRisingError+=10;
-        if (trainingError>testError)
-        {
-          epochWithMinimum=epoch;
-        }
-      }
-      
-      
-      if (epochesWithRisingError>300)
-      {
-	if (trainingError<minimumError)
-	{
-	  cout << " End of training. Minimum already on epoch: " << epochWithMinimum << endl;
-          cronology << " End of training. Minimum already on epoch: " << epochWithMinimum << endl;
-	  break;
-	} 
-      }
-      
-      cronology << "Epoch: [" << epoch <<
-          "] Error: " << trainingError << 
-          " Test: " << testError << endl;
-
-      cout << "Epoch: [" << epoch <<
-	"] Error: " << trainingError << 
-	" Test: " << testError << endl;
-
-      cronology.close();
-      
-      TString name("weights/Weights");
-      name+=epoch;
-      name+=".root";
-
-      TFile* file=new TFile(name,"recreate");
-      TTrainedNetwork* trainedNetwork=jn->createTrainedNetwork();
-      trainedNetwork->Write();
-      file->Write();
-      file->Close();
-      delete file;
-
-      /*
-      TFile* file2=new TFile(name);
-      trainedNetwork=(TTrainedNetwork*)file2->Get("TTrainedNetwork");
-      cout <<" hid lay 1 size: " << trainedNetwork->getnHiddenLayerSize()[0] << endl;
-      file2->Close();
-      delete file2;
-      */
-
-      //      jn->DumpToFile(name);
-    }
-  }
-      
-  jn->writeNetworkInfo(1);
-  jn->writeNetworkInfo(2);
-  //  jn->writeNetworkInfo(3);
-  //  jn->writeNetworkInfo(4);
-  //  jn->writeNetworkInfo(5);
-
-
-  //  cout << " Now try to understand how to get the weights..." << endl;
-
-  ////////////WWWWWAAAAASSSSSS HERE
-  Int_t nInput=jn->GetInputDim();
-  
-  cout << " create Trained Network object..." << endl;
-  
-  TTrainedNetwork* trainedNetwork=jn->createTrainedNetwork();
-
-  cout << " now getting value with trained Network ";
-
-  
-
-
-  double inputexample[9]={norm_nVTX(1),
-			  norm_nTracksAtVtx(2),
-			  norm_nSingleTracks(0),
-			  norm_energyFraction(0.6),
-			  norm_mass(2500),
-			  norm_significance3d(4 ),
-			  norm_IP3D(3),
-			  norm_cat_pT(3),
-			  norm_cat_eta(1)};
-
-  for (Int_t i=0;i<nInput;++i)
-  {
-    jn->SetInputs(i,inputexample[i]);
-  }
-
-  cronology.open("weights/trainingCronology.txt",ios_base::app);
-
-  jn->Evaluate();
-
-  cronology << "----------------CONSISTENCY CHECK-----------" << endl;
-  cout << "Result 0:" << jn->GetOutput(0);
-  cronology << "Result 0:" << jn->GetOutput(0);
-  cout << " Result 1:" << jn->GetOutput(1);
-  cronology << "Result 0:" << jn->GetOutput(1);
-  cout << " Result 2:" << jn->GetOutput(2) << endl;
-  cronology << " Result 2:" << jn->GetOutput(2) << endl;
-
-  cout << " Reading back old network " << endl;
-  jn->readBackTrainedNetwork(trainedNetwork);
-
-  cout <<" resetting input " << endl;
-  for (Int_t i=0;i<nInput;++i)
-  {
-    jn->SetInputs(i,inputexample[i]);
-  }
-
-  jn->Evaluate();
- 
-  cout << "After reading back - Result 0:" << jn->GetOutput(0);
-  cronology << "After reading back - Result 0:" << jn->GetOutput(0);
-  // <<     " my: " << result[0] << endl;
-  cout << " After reading back - Result 1:" << jn->GetOutput(1);
-  cronology << "After reading back - Result 1:" << jn->GetOutput(1);
-  //<<     " my: " << result[1] << endl;
-  cout << " After reading back - Result 2:" << jn->GetOutput(2) << endl;
-  cronology << "After reading back - Result 2:" << jn->GetOutput(2);
-  // << " my: " << result[2] << endl;
-
-  cout << " Now getting histograms from trainingResult" << endl;
-  cronology << " Now getting histograms from trainingResult" << endl;
-
-  TNetworkToHistoTool myHistoTool;
-
-  cout << " From network to histo..." << endl;
-  std::vector<TH1*> myHistos=myHistoTool.fromTrainedNetworkToHisto(trainedNetwork);
-
-  cout << " From histo to network back..." << endl;
-  TTrainedNetwork* trainedNetwork2=myHistoTool.fromHistoToTrainedNetwork(myHistos);
-  
-  cout << " reading back " << endl;
-  jn->readBackTrainedNetwork(trainedNetwork2);
-   
-  cout <<" resetting input " << endl;
-  for (Int_t i=0;i<nInput;++i)
-  {
-    jn->SetInputs(i,inputexample[i]);
-  }
-
-  jn->Evaluate();
-
-  cout << "After reading back - Result 0:" << jn->GetOutput(0);
-  cronology << "After reading back - Result 0:" << jn->GetOutput(0);
-  // <<     " my: " << result[0] << endl;
-  cout << " After reading back - Result 1:" << jn->GetOutput(1);
-  cronology << "After reading back - Result 1:" << jn->GetOutput(1);
-  //<<     " my: " << result[1] << endl;
-  cout << " After reading back - Result 2:" << jn->GetOutput(2) << endl;
-  cronology << "After reading back - Result 2:" << jn->GetOutput(2);
-  // << " my: " << result[2] << endl;
-  
-  cout << " Directly from the trainedNetwork read back from HISTOS...!" << endl;
-
-  std::vector<Double_t> inputData;
-  for (Int_t u=0;u<nInput;++u)
-  {
-    inputData.push_back(inputexample[u]);
-  }
-
-  std::vector<Double_t> outputData=trainedNetwork2->calculateOutputValues(inputData);
-
-  cout << "After reading back - Result 0:" << outputData[0] << endl;
-  cout << " After reading back - Result 1:" << outputData[1] << endl;
-  cout << " After reading back - Result 2:" << outputData[2] << endl;
-   
-
-  
-
-
-  if (epochWithMinimum!=0)
-  {
-    cronology << "Minimum stored from Epoch: " << epochWithMinimum << endl;
-  }  else
-  {
-    cronology << "Minimum not reached" << endl;
-  }
-
-  cronology.close();
-
-  if (epochWithMinimum!=0)
-  {
-    
-      TString name("weights/Weights");
-      name+=epochWithMinimum;
-      name+=".root";
-
-      std::cout << " reading back from minimum " << endl;
-
-
-      TFile *_file0 = new TFile(name);
-      TTrainedNetwork* trainedNetwork=(TTrainedNetwork*)_file0->Get("TTrainedNetwork");
-
-      cout << " Reading back network with minimum" << endl;
-      jn->readBackTrainedNetwork(trainedNetwork);
-
-      TFile* file=new TFile("weights/weightMinimum.root","recreate");
-      trainedNetwork->Write();
-      file->Write();
-      file->Close();
-      delete file;
-
-      cout << " -------------------- " << endl;
-      cout << " Writing OUTPUT histos " << endl;
-      TFile* fileHistos=new TFile("weights/histoWeights.root","recreate");
-      TNetworkToHistoTool histoTool;
-      std::vector<TH1*> myHistos=histoTool.fromTrainedNetworkToHisto(trainedNetwork);
-      std::vector<TH1*>::const_iterator histoBegin=myHistos.begin();
-      std::vector<TH1*>::const_iterator histoEnd=myHistos.end();
-      for (std::vector<TH1*>::const_iterator histoIter=histoBegin;
-           histoIter!=histoEnd;++histoIter)
-      {
-        (*histoIter)->Write();
-      }
-      fileHistos->Write();
-      fileHistos->Close();
-      delete fileHistos;
-
-      //        " filename: " << name << endl;
-      
-    //    jn->ReadFromFile(name);
-
-  } 
-  else
-  {
-    cout << " using network at last iteration (minimum not reached..." << endl;
-  }
-  
-  //here you should create the class... Still open how to deal with this...
-  //  char* myname=const_cast<char*>(static_cast<const char*>(outputclass));
-  //  ierr=mlpsavecf_(myname);
- 
-  TFile* histoFile=new TFile("weights/trainingInfo.root","recreate");
-  histoTraining->Write();
-  histoTesting->Write();
-  histoFile->Write();
-  histoFile->Close();
-  delete histoFile;
-
-  TCanvas* trainingCanvas=new TCanvas("trainingCanvas","trainingCanvas");
-  histoTraining->SetLineColor(2);
-  histoTesting->SetLineColor(4);
-
-  histoTraining->GetYaxis()->SetRangeUser(minimumTrain,maximumTrain);
-  histoTraining->Draw("l");
-  histoTesting->Draw("lsame");
-  trainingCanvas->SaveAs("weights/trainingCurve.eps");
-
- 
-  TCanvas* mlpa_canvas = new TCanvas("jetnet_canvas","Network analysis");
-  mlpa_canvas->Divide(2,4);
-
-
-  
-//  TCanvas* mlpa_canvas_5=gDirectory->Get("mlpa_canvas_5");
-//  mlpa_canvas_5->SetLogy(kTrue);
-  gPad->SetLogy();
-
-  // Use the NN to plot the results for each sample
-  // This will give approx. the same result as DrawNetwork.
-  // All entries are used, while DrawNetwork focuses on 
-  // the test sample. Also the xaxis range is manually set.
-  TH1F *bg2 = new TH1F("bg2h", "NN output", 50, -.5, 1.5);
-  TH1F *bg = new TH1F("bgh", "NN output", 50, -.5, 1.5);
-  TH1F *sig = new TH1F("sigh", "NN output", 50, -.5, 1.5);
-
-  TH1F *bg2test = new TH1F("bg2htest", "NN output", 50, -.5, 1.5);
-  TH1F *bgtest = new TH1F("bghtest", "NN output", 50, -.5, 1.5);
-  TH1F *sigtest = new TH1F("sightest", "NN output", 50, -.5, 1.5);
-
-
-
-      
-  for (Int_t i = 0; i < simu->GetEntries(); i++) {
-    
-    if (i % 100000 == 0 ) {
-      std::cout << " First plot. Looping over event " << i << std::endl;
-    }
-    
-    if (i%dilutionFactor!=0&&i%dilutionFactor!=1) continue;
-    
-    simu->GetEntry(i);
-
-    jn->SetInputs(0, norm_nVTX(nVTX) );
-    jn->SetInputs(1, norm_nTracksAtVtx(nTracksAtVtx) );
-    jn->SetInputs(2, norm_nSingleTracks(nSingleTracks) );
-    jn->SetInputs(3, norm_energyFraction(energyFraction) );
-    jn->SetInputs(4, norm_mass(mass) );
-    jn->SetInputs(5, norm_significance3d(significance3d ) );
-    if (withIP3D)
-    {
-      jn->SetInputs(6, norm_IP3D(discriminatorIP3D) );
-      jn->SetInputs(7, norm_cat_pT(cat_pT) );
-      jn->SetInputs(8, norm_cat_eta(cat_eta) );
-    }
-    else
-    {
-      jn->SetInputs(6, norm_cat_pT(cat_pT) );
-      jn->SetInputs(7, norm_cat_eta(cat_eta) );
-    }
-
-    jn->Evaluate();
-
-    float bvalue=jn->GetOutput(0);
-    float lvalue=jn->GetOutput(2);
-
-
-
-    if (bottom==1)
-    {
-      if (i%dilutionFactor==0)
-      {
-        sig->Fill(bvalue/(bvalue+lvalue),weight);
-      }
-      else if (i%dilutionFactor==1)
-      {
-        sigtest->Fill(bvalue/(bvalue+lvalue),weight);
-      }
-    }
-    if (light==1)
-    {
-      if (i%dilutionFactor==0)
-      {
-        bg->Fill(bvalue/(bvalue+lvalue),weight);
-      }
-      else if (i%dilutionFactor==1)
-      {
-        bgtest->Fill(bvalue/(bvalue+lvalue),weight);
-      }
-    }
-    if (charm==1)
-    {
-      if (i%dilutionFactor==0)
-      {
-        bg2->Fill(bvalue/(bvalue+lvalue),weight);
-      }
-      else  if (i%dilutionFactor==1)
-      {
-        bg2test->Fill(bvalue/(bvalue+lvalue),weight);
-      }
-    }
-  }
-
-  //now you need the maximum
-  float maximum=1;
-  for (Int_t a=0;a<bg->GetNbinsX();a++)
-  {
-    if (bg->GetBinContent(a)>maximum)
-    {
-      maximum=1.2*bg->GetBinContent(a);
-    }
-  }
-
-
-  bg2->SetLineColor(kYellow);
-  bg2->SetFillStyle(3008);   bg2->SetFillColor(kYellow);
-  bg->SetLineColor(kBlue);
-  bg->SetFillStyle(3008);   bg->SetFillColor(kBlue);
-  sig->SetLineColor(kRed);
-  sig->SetFillStyle(3003); sig->SetFillColor(kRed);
-  bg2->SetStats(0);
-  bg->SetStats(0);
-  sig->SetStats(0);
-
-
-  bg2test->SetLineColor(kYellow);
-  bg2test->SetFillStyle(3008);   bg2test->SetFillColor(kYellow);
-  bgtest->SetLineColor(kBlue);
-  bgtest->SetFillStyle(3008);   bgtest->SetFillColor(kBlue);
-  sigtest->SetLineColor(kRed);
-  sigtest->SetFillStyle(3003); sigtest->SetFillColor(kRed);
-  bg2test->SetStats(0);
-  bgtest->SetStats(0);
-  sigtest->SetStats(0);
-
- mlpa_canvas->cd(1);
- gPad->SetLogy();
-
- bg->GetYaxis()->SetRangeUser(1,maximum);
- bgtest->GetYaxis()->SetRangeUser(1,maximum);
-
- mlpa_canvas->cd(1);
- bg->Draw();
- bg2->Draw("same");
- sig->Draw("same");
-
- TLegend *legend = new TLegend(.75, .80, .95, .95);
- legend->AddEntry(bg2, "Background2 (charm)");
- legend->AddEntry(bg, "Background (light)");
- legend->AddEntry(sig, "Signal (bottom)");
- legend->Draw();
- 
- mlpa_canvas->cd(2);
- gPad->SetLogy();
-
- bgtest->Draw();
- bg2test->Draw("same");
- sigtest->Draw("same");
-
- TLegend *legendtest = new TLegend(.75, .80, .95, .95);
- legendtest->AddEntry(bg2test, "Background2 (charm)");
- legendtest->AddEntry(bgtest, "Background (light)");
- legendtest->AddEntry(sigtest, "Signal (bottom)");
- legendtest->Draw();
-
- mlpa_canvas->cd(5);
- gPad->SetLogy();
- bg->DrawNormalized();
- bg2->DrawNormalized("same");
- sig->DrawNormalized("same");
- legend->Draw();
- 
- mlpa_canvas->cd(6);
- gPad->SetLogy();
- bgtest->DrawNormalized();
- bg2test->DrawNormalized("same");
- sigtest->DrawNormalized("same");
- legendtest->Draw();
-
-
- 
- mlpa_canvas->cd(3);
- gPad->SetLogy();
- 
- // Use the NN to plot the results for each sample
- // This will give approx. the same result as DrawNetwork.
- // All entries are used, while DrawNetwork focuses on 
- // the test sample. Also the xaxis range is manually set.
- TH1F *c_bg2 = new TH1F("c_bg2h", "NN output", 50, -.5, 1.5);
- TH1F *c_bg = new TH1F("c_bgh", "NN output", 50, -.5, 1.5);
- TH1F *c_sig = new TH1F("c_sigh", "NN output", 50, -.5, 1.5);
-
- TH1F *c_bg2test = new TH1F("c_bg2htest", "NN output", 50, -.5, 1.5);
- TH1F *c_bgtest = new TH1F("c_bghtest", "NN output", 50, -.5, 1.5);
- TH1F *c_sigtest = new TH1F("c_sightest", "NN output", 50, -.5, 1.5);
-
- for (Int_t i = 0; i < simu->GetEntries(); i++) {
-   
-   if (i % 100000 == 0 ) {
-     std::cout << " Second plot. Looping over event " << i << std::endl;
-   }
-   
-   if (i%dilutionFactor!=0&&i%dilutionFactor!=1) continue;
-   
-   simu->GetEntry(i);
-
-    jn->SetInputs(0, norm_nVTX(nVTX) );
-    jn->SetInputs(1, norm_nTracksAtVtx(nTracksAtVtx) );
-    jn->SetInputs(2, norm_nSingleTracks(nSingleTracks) );
-    jn->SetInputs(3, norm_energyFraction(energyFraction) );
-    jn->SetInputs(4, norm_mass(mass) );
-    jn->SetInputs(5, norm_significance3d(significance3d ) );
-    if (withIP3D)
-    {
-      jn->SetInputs(6, norm_IP3D(discriminatorIP3D) );
-      jn->SetInputs(7, norm_cat_pT(cat_pT) );
-      jn->SetInputs(8, norm_cat_eta(cat_eta) );
-    }
-    else
-    {
-      jn->SetInputs(6, norm_cat_pT(cat_pT) );
-      jn->SetInputs(7, norm_cat_eta(cat_eta) );
-    }
-
-    jn->Evaluate();
-
-   float bvalue=jn->GetOutput(0);
-   float cvalue=jn->GetOutput(1);
-
-    if (bottom==1)
-    {
-      if (i%dilutionFactor==0)
-      {
-        c_sig->Fill(bvalue/(bvalue+cvalue),weight);
-      }
-      else if (i%dilutionFactor==1)
-      {
-        c_sigtest->Fill(bvalue/(bvalue+cvalue),weight);
-      }
-    }
-    if (light==1)
-    {
-      if (i%dilutionFactor==0)
-      {
-        c_bg->Fill(bvalue/(bvalue+cvalue),weight);
-      }
-      else if (i%dilutionFactor==1)
-      {
-        c_bgtest->Fill(bvalue/(bvalue+cvalue),weight);
-      }
-    }
-    if (charm==1)
-    {
-      if (i%dilutionFactor==0)
-      {
-        c_bg2->Fill(bvalue/(bvalue+cvalue),weight);
-      }
-      else  if (i%dilutionFactor==1)
-      {
-        c_bg2test->Fill(bvalue/(bvalue+cvalue),weight);
-      }
-    }
-   }
-
-  //now you need the maximum
- maximum=1;
-  for (Int_t a=0;a<c_bg->GetNbinsX();a++)
-  {
-    if (c_bg->GetBinContent(a)>maximum)
-    {
-      maximum=1.2*c_bg->GetBinContent(a);
-    }
-  }
-
-   c_bg2->SetLineColor(kYellow);
-   c_bg2->SetFillStyle(3008);   c_bg2->SetFillColor(kYellow);
-   c_bg->SetLineColor(kBlue);
-   c_bg->SetFillStyle(3008);   c_bg->SetFillColor(kBlue);
-   c_sig->SetLineColor(kRed);
-   c_sig->SetFillStyle(3003); c_sig->SetFillColor(kRed);
-   c_bg2->SetStats(0);
-   c_bg->SetStats(0);
-   c_sig->SetStats(0);
- 
-   c_bg2test->SetLineColor(kYellow);
-   c_bg2test->SetFillStyle(3008);   c_bg2test->SetFillColor(kYellow);
-   c_bgtest->SetLineColor(kBlue);
-   c_bgtest->SetFillStyle(3008);   c_bgtest->SetFillColor(kBlue);
-   c_sigtest->SetLineColor(kRed);
-   c_sigtest->SetFillStyle(3003); c_sigtest->SetFillColor(kRed);
-   c_bg2test->SetStats(0);
-   c_bgtest->SetStats(0);
-   c_sigtest->SetStats(0);
-
-   mlpa_canvas->cd(3);
-   gPad->SetLogy();
-
-
-   c_bg->GetYaxis()->SetRangeUser(1,maximum);
-   c_bgtest->GetYaxis()->SetRangeUser(1,maximum);
-   
-   c_bg->Draw();
-   c_bg2->Draw("same");
-   c_sig->Draw("same");
-
-   TLegend *legend2 = new TLegend(.75, .80, .95, .95);
-   legend2->AddEntry(c_bg2, "Background2 (charm)");
-   legend2->AddEntry(c_bg, "Background (light)");
-   legend2->AddEntry(c_sig, "Signal (bottom)");
-   legend2->Draw();
-
-   mlpa_canvas->cd(4);
-   gPad->SetLogy();
-   
-   c_bgtest->Draw();
-   c_bg2test->Draw("same");
-   c_sigtest->Draw("same");
-
-   TLegend *legend2test = new TLegend(.75, .80, .95, .95);
-   legend2test->AddEntry(c_bg2test, "Background2 (charm)");
-   legend2test->AddEntry(c_bgtest, "Background (light)");
-   legend2test->AddEntry(c_sigtest, "Signal (bottom)");
-   legend2test->Draw();
-
-   mlpa_canvas->cd(7);
-   gPad->SetLogy();
-   c_bg->DrawNormalized();
-   c_bg2->DrawNormalized("same");
-   c_sig->DrawNormalized("same");
-   legend2->Draw();
- 
-   mlpa_canvas->cd(8);
-   gPad->SetLogy();
-   c_bgtest->DrawNormalized();
-   c_bg2test->DrawNormalized("same");
-   c_sigtest->DrawNormalized("same");
-   legend2test->Draw();
-
-
-   mlpa_canvas->cd(0);
-
-   mlpa_canvas->SaveAs("weights/result.eps");
-}
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/createAllHistograms.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/createAllHistograms.cxx
deleted file mode 100644
index 481281757ab9bafde1dbb881700447ad739d70ef..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/createAllHistograms.cxx
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "createTheHistograms.h"
-#include "../preparedatasets/collectionsToProcess.h"
-#include <TString.h>
-#include <vector>
-#include <iostream>
-
-using namespace std;
-
-void createAllHistograms()
-{
-
-  vector<TString> collectionsToProcess=getCollectionsToProcess();
-
-  
-  vector<TString>::const_iterator collectionsToProcessBegin=collectionsToProcess.begin();
-  vector<TString>::const_iterator collectionsToProcessEnd=collectionsToProcess.end();
-  
-  for (vector<TString>::const_iterator collectionsToProcessIter=++(collectionsToProcessBegin++);
-       collectionsToProcessIter!=collectionsToProcessEnd;
-       ++collectionsToProcessIter) 
-  {  
-
-    cout << " Processing : " << *collectionsToProcessIter << endl;
-
-    createTheHistograms(5,*collectionsToProcessIter);    
-    createTheHistograms(1,*collectionsToProcessIter);
-    createTheHistograms(4,*collectionsToProcessIter);
-
-    
-  }
-  
-  
-}
-
-void createAllHistograms(int number, int flavour)
-{
-
-
-
-  vector<TString> collectionsToProcess=getCollectionsToProcess();
-  if (number>collectionsToProcess.size()-1)
-  {
-    cout << " number to process: " << number << " not existent " << endl;
-    return;
-  }
-  
-  
-    cout << " Processing : " << collectionsToProcess[number] << endl;
-    
-    createTheHistograms(flavour,collectionsToProcess[number]);
-    
-}
-  
-
-    
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/createTheHistograms.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/createTheHistograms.cxx
deleted file mode 100644
index 50231c43dd4b0560c0b1ba73a34981cac28b9897..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/createTheHistograms.cxx
+++ /dev/null
@@ -1,1349 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "createTheHistograms.h"
-
-#include <RooCategory.h>
-#include <RooMappedCategory.h>
-#include <RooRealVar.h>
-#include <RooThresholdCategory.h>
-#include <RooFormulaVar.h>
-#include <RooArgList.h>
-#include <RooProdPdf.h>
-#include <RooAddPdf.h>
-#include <RooSuperCategory.h>
-#include <RooMappedCategory.h>
-#include <RooSimultaneous.h>
-#include <RooArgSet.h>
-#include <RooParametricStepFunction.h>
-#include <RooDataHist.h>
-#include <RooDataSet.h>
-#include <RooHistPdf.h>
-#include <RooNDKeysPdf.h>
-#include <RooBinning.h>
-#include <RooCmdArg.h>
-#include <RooGlobalFunc.h>
-#include <Roo1DTable.h>
-#include <RooPlot.h>
-
-#include <TH1.h>
-#include <TFile.h>
-#include <TTree.h>
-#include <TMath.h>
-#include <TCanvas.h>
-
-using namespace RooFit;
-using namespace std;
-
-TH1F* makeHisto(RooNDKeysPdf* myKeysPdf,const char* name,int numtot,double begin,double end,RooRealVar* dep) {
-
-  TH1F* newhisto=new TH1F(name,name,numtot,begin,end);
-
-  int nbins=newhisto->GetNbinsX();
-
-  for (int ss=1;ss<nbins+1;++ss) {
-    double center=newhisto->GetBinCenter(ss);
-    double width=newhisto->GetBinWidth(ss);
-//    std::cout << "Center is " << center << std::endl;
-    dep->setRange("selection",center-width/2.,center+width/2.) ;
-    RooAbsReal* fracInt = myKeysPdf->createIntegral(*dep,RooFit::Range("selection")) ;
-//    std::cout << " Evaluated to " << fracInt->getVal() << std::endl;
-    newhisto->Fill(center,fracInt->getVal());
-    delete fracInt;
-  }
-  return newhisto;
-}
-//RooAbsPdf* createTheFit() {
-void createTheHistograms(
-                         TString collectionName,
-                         int flavourType)
-{
-
-  TString flavourString;
-
-  if (flavourType==5)
-  {
-    flavourString=TString("bottom");
-  }
-  if (flavourType==4)
-  {
-    flavourString=TString("charm");
-  }
-  if (flavourType==1)
-  {
-    flavourString=TString("light");
-  }
-
-  TString identificationFile("../trainingResultsLikelihood/plots/");
-  identificationFile+=collectionName;
-  identificationFile+="_";
-  identificationFile+=flavourString;
-
-  RooCategory *cat_flavour=new RooCategory("cat_flavour","jet flavour");
-  cat_flavour->defineType("b",5);
-  cat_flavour->defineType("c",4);
-  cat_flavour->defineType("l",1);
-  
-
-  RooCategory *cat_nVTX=new RooCategory("nVTX","number of vertices category");
-  cat_nVTX->defineType("NoVTX",0);
-  cat_nVTX->defineType("1VTX",1);
-  cat_nVTX->defineType("2VTX",2);
-  cat_nVTX->defineType("3VTX",3);
-  cat_nVTX->defineType("4VTX",4);
-  cat_nVTX->defineType("5VTX",5);//I hope not to need more!!!
-
-  RooCategory* cat_nTracksAtVtx=new RooCategory("nTracksAtVtx","number of tracks at Vertices");
-  cat_nTracksAtVtx->defineType("NoTrackVTX",0);
-  cat_nTracksAtVtx->defineType("2TrackVTX",2);
-  cat_nTracksAtVtx->defineType("3TrackVTX",3);
-  cat_nTracksAtVtx->defineType("4TrackVTX",4);
-  cat_nTracksAtVtx->defineType("5TrackVTX",5);
-  cat_nTracksAtVtx->defineType("6TrackVTX",6);
-  cat_nTracksAtVtx->defineType("7TrackVTX",7);
-  cat_nTracksAtVtx->defineType("8TrackVTX",8);
-  cat_nTracksAtVtx->defineType("9TrackVTX",9);
-  cat_nTracksAtVtx->defineType("10TrackVTX",10);
-  cat_nTracksAtVtx->defineType("11TrackVTX",11);
-  cat_nTracksAtVtx->defineType("12TrackVTX",12);
-  cat_nTracksAtVtx->defineType("13TrackVTX",13);
-  cat_nTracksAtVtx->defineType("14TrackVTX",14);
-  cat_nTracksAtVtx->defineType("15TrackVTX",15);
-
-
-  RooCategory* cat_nSingleTracks=new RooCategory("nSingleTracks","number of single significant tracks");
-  cat_nSingleTracks->defineType("NoSingleTrack",0);
-  cat_nSingleTracks->defineType("1SingleTrack",1);
-  cat_nSingleTracks->defineType("2SingleTrack",2);
-  cat_nSingleTracks->defineType("3SingleTrack",3);
-  cat_nSingleTracks->defineType("4SingleTrack",4);
-  cat_nSingleTracks->defineType("5SingleTrack",5);
-  cat_nSingleTracks->defineType("6SingleTrack",6);
-  cat_nSingleTracks->defineType("7SingleTrack",7);
-  
-  RooMappedCategory* mycat_nVTX=new RooMappedCategory("mycat_nVTX","number of vertices categories",*cat_nVTX);//,"Undefined");
-  mycat_nVTX->map("NoVTX","NoVTX");
-  mycat_nVTX->map("1VTX","1VTX");
-  mycat_nVTX->map("2VTX","2orMoreVTX");
-  mycat_nVTX->map("3VTX","2orMoreVTX");
-  mycat_nVTX->map("4VTX","2orMoreVTX");
-  mycat_nVTX->map("5VTX","2orMoreVTX");
-  
-
-  RooMappedCategory* mycat_nTracksAtVtx6Bin=
-    new RooMappedCategory("mycat_nTracksAtVtx6Bin","number of tracks at vertices category",*cat_nTracksAtVtx);//,"Undefined");
-  mycat_nTracksAtVtx6Bin->map("NoTrackVTX","NoTrackVTX");
-  mycat_nTracksAtVtx6Bin->map("2TrackVTX","2TrackVTX");
-  mycat_nTracksAtVtx6Bin->map("3TrackVTX","3TrackVTX");
-  mycat_nTracksAtVtx6Bin->map("4TrackVTX","4TrackVTX");
-  mycat_nTracksAtVtx6Bin->map("5TrackVTX","5or6TrackVTX");
-  mycat_nTracksAtVtx6Bin->map("6TrackVTX","5or6TrackVTX");
-  mycat_nTracksAtVtx6Bin->map("7TrackVTX","7orMoreTrackVTX");
-  mycat_nTracksAtVtx6Bin->map("8TrackVTX","7orMoreTrackVTX");
-  mycat_nTracksAtVtx6Bin->map("9TrackVTX","7orMoreTrackVTX");
-  mycat_nTracksAtVtx6Bin->map("10TrackVTX","7orMoreTrackVTX");
-  mycat_nTracksAtVtx6Bin->map("11TrackVTX","7orMoreTrackVTX");
-  mycat_nTracksAtVtx6Bin->map("12TrackVTX","7orMoreTrackVTX");
-  mycat_nTracksAtVtx6Bin->map("13TrackVTX","7orMoreTrackVTX");
-  mycat_nTracksAtVtx6Bin->map("14TrackVTX","7orMoreTrackVTX");
-  mycat_nTracksAtVtx6Bin->map("15TrackVTX","7orMoreTrackVTX");
-
-   RooMappedCategory* mycat_nTracksAtVtx4Bin=
-     new RooMappedCategory("mycat_nTracksAtVtx4Bin","number of tracks at vertices category",*cat_nTracksAtVtx);//,"Undefined");
-  mycat_nTracksAtVtx4Bin->map("NoTrackVTX","NoTrackVTX");
-  //mycat_nTracksAtVtx4Bin->map("NoTrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("2TrackVTX","2TrackVTX");
-  mycat_nTracksAtVtx4Bin->map("3TrackVTX","3TrackVTX");
-  mycat_nTracksAtVtx4Bin->map("4TrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("5TrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("6TrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("7TrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("8TrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("9TrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("10TrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("11TrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("12TrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("13TrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("14TrackVTX","4orMoreTrackVTX");
-  mycat_nTracksAtVtx4Bin->map("15TrackVTX","4orMoreTrackVTX");
-
-  RooMappedCategory* mycat_nTracksAtVtx3Bin=
-    new RooMappedCategory("mycat_nTracksAtVtx3Bin","number of tracks at vertices category",*cat_nTracksAtVtx);//,"Undefined");
-  mycat_nTracksAtVtx3Bin->map("NoTrackVTX","NoTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("2TrackVTX","2TrackVTX");
-  mycat_nTracksAtVtx3Bin->map("3TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("4TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("5TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("6TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("7TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("8TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("9TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("10TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("11TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("12TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("13TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("14TrackVTX","3orMoreTrackVTX");
-  mycat_nTracksAtVtx3Bin->map("15TrackVTX","3orMoreTrackVTX");
-
-
-  RooMappedCategory* mycat_nSingleTracks=
-    new RooMappedCategory("mycat_nSingleTracks","number of single significant tracks category",*cat_nSingleTracks);//,"Undefined");
-  mycat_nSingleTracks->map("NoSingleTrack","NoSingleTrack");
-  mycat_nSingleTracks->map("1SingleTrack","1SingleTrack");
-  mycat_nSingleTracks->map("2SingleTrack","2SingleTrack");
-  mycat_nSingleTracks->map("3SingleTrack","3orMoreSingleTrack");
-  mycat_nSingleTracks->map("4SingleTrack","3orMoreSingleTrack");
-  mycat_nSingleTracks->map("5SingleTrack","3orMoreSingleTrack");
-  mycat_nSingleTracks->map("6SingleTrack","3orMoreSingleTrack");
-  mycat_nSingleTracks->map("7SingleTrack","3orMoreSingleTrack");
-
-  /*
-  RooMappedCategory* mycat_nSingleTracksMain=
-    new RooMappedCategoryMain("mycat_nSingleTracksMain","number of single significant tracks category only two bins",*cat_nSingleTracks,"Undefined");
-  mycat_nSingleTracks->map("NoSingleTrack","NoSingleTrack");
-  mycat_nSingleTracks->map("1SingleTrack","1orMoreSingleTrack");
-  mycat_nSingleTracks->map("2SingleTrack","1orMoreSingleTrack");
-  mycat_nSingleTracks->map("3SingleTrack","1orMoreSingleTrack");
-  mycat_nSingleTracks->map("4SingleTrack","1orMoreSingleTrack");
-  mycat_nSingleTracks->map("5SingleTrack","1orMoreSingleTrack");
-  mycat_nSingleTracks->map("6SingleTrack","1orMoreSingleTrack");
-  mycat_nSingleTracks->map("7SingleTrack","1orMoreSingleTrack");
-  */
-  
-  RooRealVar *energyFraction=new RooRealVar("energyFraction","energyFraction",0.5,0.,1.00001);
-  RooRealVar *significance3d=new RooRealVar("significance3d","significance3d",5.,0.,100.);
-  RooRealVar *mass=new RooRealVar("mass","mass",2000.,0.,10000.);
-  //  RooRealVar* nVTX=new RooRealVar("nVTX","nVTX",1,-0.5,5.5);
-  RooRealVar* nTracksAtVtx=new RooRealVar("nTracksAtVtx2","nTracksAtVtx2",2,-0.5,15.5);
-  RooRealVar* nSingleTracks=new RooRealVar("nSingleTracks2","nSingleTracks2",0,-0.5,7.5);
-
-  RooThresholdCategory* energyFractionCat=new RooThresholdCategory("energyFractionCat","energyFractionCat",
-								   *energyFraction,"NoFrag");
-  energyFractionCat->addThreshold(0.999,"Normal");
-
-
-
-  Double_t significance3d_bins[50];
-
-  for (int jj=0;jj<49;jj++) {
-//    std::cout << " bin " << jj << std::endl;
-    significance3d_bins[jj]=((Double_t)jj)*(40./48.);
-//    std::cout << " significance 3d " << significance3d_bins[jj] << std::endl;
-  }
-  significance3d_bins[49]=1000.;
-    
-  std::cout << " before roobinning " << std::endl;
-  RooBinning* significance3d_binning=new RooBinning(49,significance3d_bins,"significance3d_binning");
-  significance3d_binning->Print("v");
-  
-  Double_t mass_bins[50];
-  
-  for (int ss=0;ss<49;ss++) {
-    mass_bins[ss]=((Double_t)ss)*(5000./48);
-//    std::cout << " mass " << mass_bins[ss] << std::endl;
-
-  }
-  mass_bins[49]=20000.;
-    
-  RooBinning* mass_binning=new RooBinning(49,mass_bins,"mass_binning");
-  mass_binning->Print("v");
-
-  Double_t energyFraction_bins[50];
-  
-  for (int ii=0;ii<49;ii++) {
-    energyFraction_bins[ii]=(Double_t(ii))*(1./48);
-//    std::cout << " energyFraction " << energyFraction_bins[ii] << std::endl;
-  }
-  energyFraction_bins[49]=1.000001;
-    
-  RooBinning* energyFraction_binning=new RooBinning(49,energyFraction_bins,"energyFraction_binning");
-  energyFraction_binning->Print("v");
-
-  
-//  std::cout << " here " << std::endl;
-  
-  TString fileName("../../../reduceddatasets/reduceddataset_");
-  fileName+=collectionName;
-  fileName+=".root";
-  
-  TFile *file=new TFile(fileName);
-  TTree* tree=(TTree*)file->Get("SVTree");
-
-  TString outputFileName("../trainingResultsLikelihood/smoothedhistos_");
-  outputFileName+=collectionName;
-  outputFileName+="_";
-  outputFileName+=flavourString;
-  outputFileName+=".root";
-  TFile *filehistos=new TFile(outputFileName,"recreate");
-
-  TString eventListString("cat_flavour==");
-  eventListString+=flavourType;
-  
-
-  tree->Draw(">>eventlist",eventListString);
-  
-//  TEventList* eventlist=(TEventList*)gDirectory->Get("eventlist");
-  
-//  tree->SetEventList(eventlist);
-
-
-  //  mass->setBinning(*mass_binning);
-  //  energyFraction->setBinning(*energyFraction_binning);
-  //  significance3d->setBinning(*significance3d_binning);
-
-
-  mass->Print("v");
-  energyFraction->Print("v");
-  significance3d->Print("v");
-
-  RooArgSet before(*cat_nVTX,*cat_nTracksAtVtx,
-                   *cat_nSingleTracks,*energyFraction,
-                   *mass,*significance3d,*cat_flavour);
-  
-
-  before.add(*cat_flavour);
-
-  
-  before.Print("v");
-  cout << "  Reading in dataset " << endl;
-
-  TString set("MC");
-  set+=collectionName;
-  if (flavourType==1)
-  {
-    set+="1";
-  }
-  else if (flavourType==4)
-  {
-    set+="4";
-  }
-  else if (flavourType==5)
-  {
-    set+="5";
-  }
-  
-  
-
-  RooDataSet* dataset2=new RooDataSet(set,set,before);
-
-
-  int var_nVTX;
-  int var_nTracksAtVtx;
-  int var_nSingleTracks;
-  double var_energyFraction;
-  double var_mass;
-  double var_significance3d;
-  int var_cat_flavour;
-
-  tree->SetBranchAddress("nVTX",&var_nVTX);
-  tree->SetBranchAddress("nTracksAtVtx",&var_nTracksAtVtx);
-  tree->SetBranchAddress("nSingleTracks",&var_nSingleTracks);
-  tree->SetBranchAddress("energyFraction",&var_energyFraction);
-  tree->SetBranchAddress("mass",&var_mass);
-  tree->SetBranchAddress("significance3d",&var_significance3d);
-  tree->SetBranchAddress("cat_flavour",&var_cat_flavour);
-  
-  for (int i=0;i<tree->GetEntries();i++)
-  {
-    tree->GetEntry(i);
-
-
-    cat_nVTX->setIndex(var_nVTX);
-    cat_nTracksAtVtx->setIndex(var_nTracksAtVtx);
-    cat_nSingleTracks->setIndex(var_nSingleTracks);
-    energyFraction->setVal(var_energyFraction);
-    mass->setVal(var_mass);
-    significance3d->setVal(var_significance3d);
-    cat_flavour->setIndex(var_cat_flavour);
-  
-    dataset2->add(RooArgSet(*cat_nVTX,
-                            *cat_nTracksAtVtx,
-                            *cat_nSingleTracks,
-                            *energyFraction,
-                            *mass,
-                            *significance3d,
-                            *cat_flavour));
-
-  }
-
-
-
-//  RooDataSet* dataset2=new RooDataSet("MC","MC",tree,before);
-  cout << "  Reading in dataset FINISHED " << endl;
-  
-  RooDataSet* dataset=(RooDataSet*)dataset2->reduce(eventListString);
-
-  dataset->addColumn(*energyFractionCat);
-  dataset->addColumn(*mycat_nVTX);
-  dataset->addColumn(*mycat_nSingleTracks);
-  dataset->addColumn(*mycat_nTracksAtVtx3Bin);
-  dataset->addColumn(*mycat_nTracksAtVtx4Bin);
-  dataset->addColumn(*mycat_nTracksAtVtx6Bin);
-  
-  const RooArgSet* obsindata2  = dataset->get(0);
-  RooCategory* cat_energyFractionCat = static_cast<RooCategory*>(obsindata2->find("energyFractionCat"));
-
-
-  /*
-  RooDataHist* datahist=new RooDataHist("MC_binned","MC_binned",RooArgSet(*cat_nVTX,*cat_nTracksAtVtx,
-									  *cat_nSingleTracks,*energyFraction,
-									  *mass,*significance3d),*dataset);
-  datahist->Print("v");
-  cout << " datahist created " << endl;
-
-  
-  datahist->addColumn(*mycat_nVTX);
-  //  datahist->addColumn(*mycat_nSingleTracks);
-  //  datahist->addColumn(*mycat_nTracksAtVtx3Bin);
-  //  datahist->addColumn(*mycat_nTracksAtVtx4Bin);
-  datahist->addColumn(*mycat_nTracksAtVtx6Bin);
-
-  //  datahist->Print("v");
-
-  cout << "datahist created DONE" << endl;
-  */
-  //jetzt die PDF...
-  
-  dataset->Print("v");
-
-  dataset->table(*mycat_nVTX)->Print();
-  dataset->table(*mycat_nSingleTracks)->Print();
-  dataset->table(*mycat_nTracksAtVtx3Bin)->Print();
-  dataset->table(*mycat_nTracksAtVtx4Bin)->Print();
-
-  
-  RooRealVar* bottom_coef=new RooRealVar(flavourString+"_coef","bottom jet component",100000.,0.,1000000.);
-  //  RooRealVar* light_coef=new RooRealVar("light_coef","light jet component",0.2,0.,1.);
-  //  RooFormulaVar* charm_coef=new RooFormulaVar("charm_coef","charm jet component","1.-@0-@1",RooArgList(*light_coef,*bottom_coef));
-
-  //////NNNNNNOOOOOOOOOWWWWWWWW    BBBBBBOOOOOOOOTTTTTTTTOOOOOOOOMMMMMMMMM
-
-  RooRealVar* bottom_e_NoVTX=new RooRealVar(flavourString+"_e_NoVTX","no vertex coefficient",0.2,0.,1.);
-  RooRealVar* bottom_e_1VTX=new RooRealVar(flavourString+"_e_1VTX","1 vertex coefficient",0.2,0.,1.);
-  //RooFormulaVar* bottom_e_2orMoreVTX=new RooFormulaVar(flavourString+"_e_2orMoreVTX","2 vertex coefficient","1.-@0-@1",RooArgList(*bottom_e_NoVTX,*bottom_e_1VTX));
-  RooFormulaVar* bottom_e_2orMoreVTX=new RooFormulaVar(flavourString+"_e_2orMoreVTX","2 vertex coefficient","1.-@0-@1",RooArgList(*bottom_e_NoVTX,
-															  *bottom_e_1VTX));
-  
-
-  RooRealVar* bottom_e_1VTX_2TrackVTX=new RooRealVar(flavourString+"_e_1VTX_2TrackVTX",
-						     flavourString+"_e_1VTX_2TrackVTX",0.2,0.,1.);
-  RooRealVar* bottom_e_1VTX_3TrackVTX=new RooRealVar(flavourString+"_e_1VTX_3TrackVTX",
-						     flavourString+"_e_1VTX_3TrackVTX",0.2,0.,1.);
-  RooRealVar* bottom_e_1VTX_4TrackVTX=new RooRealVar(flavourString+"_e_1VTX_4TrackVTX",
-						     flavourString+"_e_1VTX_4TrackVTX",0.2,0.,1.);
-  RooRealVar* bottom_e_1VTX_5or6TrackVTX=new RooRealVar(flavourString+"_e_1VTX_5or6TrackVTX",
-							flavourString+"_e_1VTX_5or6TrackVTX",0.2,0.,1.);
-  RooFormulaVar* bottom_e_1VTX_7orMoreTrackVTX =new RooFormulaVar(flavourString+"_e_1VTX_7orMoreTrackVTX",
-								  flavourString+"_e_1VTX_7orMoreTrackVTX",
-								  "1.-@0-@1-@2-@3",RooArgList(*bottom_e_1VTX_2TrackVTX,
-											      *bottom_e_1VTX_3TrackVTX,
-											      *bottom_e_1VTX_4TrackVTX,
-											      *bottom_e_1VTX_5or6TrackVTX));
-
-
-   RooRealVar* bottom_e_1Vtx_NoSingleTrack=new RooRealVar(flavourString+"_e_1Vtx_NoSingleTrack",
-							  flavourString+"_e_1Vtx_NoSingleTrack",
-							  0.4,0.,1.);
-   RooRealVar* bottom_e_1Vtx_1SingleTrack=new RooRealVar(flavourString+"_e_1Vtx_1SingleTrack",
-							  flavourString+"_e_1Vtx_1SingleTrack",
-							  0.4,0.,1.);
-   RooFormulaVar* bottom_e_1Vtx_2orMoreSingleTrack=new RooFormulaVar(flavourString+"_e_1Vtx_2orMoreSingleTrack",
-								     flavourString+"_e_1Vtx_2orMoreSingleTrack",
-								     "1.-@0-@1",RooArgList(*bottom_e_1Vtx_NoSingleTrack,
-											   *bottom_e_1Vtx_1SingleTrack));
-     
-
-   RooRealVar* bottom_e_2orMoreVTX_4TrackVTX=new RooRealVar(flavourString+"_e_2orMoreVTX_4TrackVTX",
-							    flavourString+"_e_2orMoreVTX_4TrackVTX",0.2,0.,1.);
-   RooFormulaVar* bottom_e_2orMoreVTX_5orMoreTrackVTX=new RooFormulaVar(flavourString+"_e_2orMoreVTX_5orMoreTrackVTX",
-								       flavourString+"_e_2orMoreVTX_5orMoreTrackVTX",
-								       "1.-@0",RooArgList(*bottom_e_2orMoreVTX_4TrackVTX));
-
-
-   //energyFraction normal...
-
-   RooRealVar* bottom_e_NoVtx_1SingleTrack_energyFraction_normal=new RooRealVar(flavourString+"_e_NoVtx_1SingleTrack_energyFraction_normal",
-										flavourString+"_e_NoVtx_1SingleTrack_energyFraction_normal",
-										0.8,0.,1.);
-  
-
-  
-   RooFormulaVar* bottom_e_NoVtx_1SingleTrack_energyFraction_nofrag=new RooFormulaVar(flavourString+"_e_NoVtx_1SingleTrack_energyFraction_nofrag",
-										      flavourString+"_e_NoVtx_1SingleTrack_energyFraction_nofrag",
-										      "1.-@0",RooArgList(*bottom_e_NoVtx_1SingleTrack_energyFraction_normal));
-  
-  
-   RooRealVar* bottom_e_NoVtx_2orMoreSingleTrack_energyFraction_normal=new RooRealVar(flavourString+"_e_NoVtx_2orMoreSingleTrack_energyFraction_normal",
-										      flavourString+"_e_NoVtx_2orMoreSingleTrack_energyFraction_normal",
-										      0.8,0.,1.);
-  
-  
-  
-   RooFormulaVar* bottom_e_NoVtx_2orMoreSingleTrack_energyFraction_nofrag=new RooFormulaVar(flavourString+"_e_NoVtx_2orMoreSingleTrack_energyFraction_nofrag",
-											    flavourString+"_e_NoVtx_2orMoreSingleTrack_energyFraction_nofrag",
-											    "1-@0",RooArgList(*bottom_e_NoVtx_2orMoreSingleTrack_energyFraction_normal));
-
-
-   RooRealVar* bottom_e_1orMoreVTX_2TrackVTX_energyFraction_normal=new RooRealVar(flavourString+"_e_1orMoreVTX_2TrackVTX_energyFraction_normal",
-										  flavourString+"_e_1orMoreVTX_2TrackVTX_energyFraction_normal",
-										  0.8,0.,1.);
-  
-  
-  
-  RooFormulaVar* bottom_e_1orMoreVTX_2TrackVTX_energyFraction_nofrag=new RooFormulaVar(flavourString+"_e_1orMoreVTX_2TrackVTX_energyFraction_nofrag",
-										       flavourString+"_e_1orMoreVTX_2TrackVTX_energyFraction_nofrag",
-										       "1-@0",RooArgList(*bottom_e_1orMoreVTX_2TrackVTX_energyFraction_normal));
-  
-  
-  RooRealVar* bottom_e_1orMoreVTX_3TrackVTX_energyFraction_normal=new RooRealVar(flavourString+"_e_1orMoreVTX_3TrackVTX_energyFraction_normal",
-										 flavourString+"_e_1orMoreVTX_3TrackVTX_energyFraction_normal",
-										 0.8,0.,1.);
-  
-  
-  
-  RooFormulaVar* bottom_e_1orMoreVTX_3TrackVTX_energyFraction_nofrag=new RooFormulaVar(flavourString+"_e_1orMoreVTX_3TrackVTX_energyFraction_nofrag",
-										       flavourString+"_e_1orMoreVTX_3TrackVTX_energyFraction_nofrag",
-										       "1-@0",RooArgList(*bottom_e_1orMoreVTX_3TrackVTX_energyFraction_normal));
-  
-  RooRealVar* bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal=new RooRealVar(flavourString+"_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal",
-										       flavourString+"_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal",
-										       0.8,0.,1.);
-  
-  RooFormulaVar* bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag=new RooFormulaVar(flavourString+"_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag",
-											     flavourString+"_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag",
-											     "1-@0",RooArgList(*bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-  
-
-
-  //0ST
-
-  RooFormulaVar* bottom_1VTX_0ST_2VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_0ST_2VTX_normal",
-								    flavourString+"_1VTX_0ST_2VTX_normal",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_NoSingleTrack,
-												*bottom_e_1VTX_2TrackVTX,
-												*bottom_e_1orMoreVTX_2TrackVTX_energyFraction_normal));
-
-
-  RooFormulaVar* bottom_1VTX_0ST_3VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_0ST_3VTX_normal",
-								    flavourString+"_1VTX_0ST_3VTX_normal",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_NoSingleTrack,
-												*bottom_e_1VTX_3TrackVTX,
-												*bottom_e_1orMoreVTX_3TrackVTX_energyFraction_normal));
-
-  RooFormulaVar* bottom_1VTX_0ST_4VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_0ST_4VTX_normal",
-								    flavourString+"_1VTX_0ST_4VTX_normal",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_NoSingleTrack,
-												*bottom_e_1VTX_4TrackVTX,
-												*bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-
-  RooFormulaVar* bottom_1VTX_0ST_5or6VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_0ST_5or6VTX_normal",
-								       flavourString+"_1VTX_0ST_5or6VTX_normal",
-								       "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												   *bottom_e_1VTX,
-												   *bottom_e_1Vtx_NoSingleTrack,
-												   *bottom_e_1VTX_5or6TrackVTX,
-												   *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-
-  RooFormulaVar* bottom_1VTX_0ST_7orMoreVTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_0ST_7orMoreVTX_normal",
-									  flavourString+"_1VTX_0ST_7orMoreVTX_normal",
-									  "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												      *bottom_e_1VTX,
-												      *bottom_e_1Vtx_NoSingleTrack,
-												      *bottom_e_1VTX_7orMoreTrackVTX,
-												      *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-  
-  //1ST
-  
-  RooFormulaVar* bottom_1VTX_1ST_2VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_1ST_2VTX_normal",
-								    flavourString+"_1VTX_1ST_2VTX_normal",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_1SingleTrack,
-												*bottom_e_1VTX_2TrackVTX,
-												*bottom_e_1orMoreVTX_2TrackVTX_energyFraction_normal));
-  
-  
-  RooFormulaVar* bottom_1VTX_1ST_3VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_1ST_3VTX_normal",
-								    flavourString+"_1VTX_1ST_3VTX_normal",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_1SingleTrack,
-												*bottom_e_1VTX_3TrackVTX,
-												*bottom_e_1orMoreVTX_3TrackVTX_energyFraction_normal));
-  
-  RooFormulaVar* bottom_1VTX_1ST_4VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_1ST_4VTX_normal",
-								    flavourString+"_1VTX_1ST_4VTX_normal",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_1SingleTrack,
-												*bottom_e_1VTX_4TrackVTX,
-												*bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-  
-  RooFormulaVar* bottom_1VTX_1ST_5or6VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_1ST_5or6VTX_normal",
-								       flavourString+"_1VTX_1ST_5or6VTX_normal",
-								       "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												   *bottom_e_1VTX,
-												   *bottom_e_1Vtx_1SingleTrack,
-												   *bottom_e_1VTX_5or6TrackVTX,
-												   *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-  
-  RooFormulaVar* bottom_1VTX_1ST_7orMoreVTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_1ST_7orMoreVTX_normal",
-									  flavourString+"_1VTX_1ST_7orMoreVTX_normal",
-									  "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												      *bottom_e_1VTX,
-												      *bottom_e_1Vtx_1SingleTrack,
-												      *bottom_e_1VTX_7orMoreTrackVTX,
-												      *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-  
-  
-  //2orMoreST
-  
-  RooFormulaVar* bottom_1VTX_2orMoreST_2VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_2orMoreST_2VTX_normal",
-									  flavourString+"_1VTX_2orMoreST_2VTX_normal",
-									  "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												      *bottom_e_1VTX,
-												      *bottom_e_1Vtx_2orMoreSingleTrack,
-												      *bottom_e_1VTX_2TrackVTX,
-												      *bottom_e_1orMoreVTX_2TrackVTX_energyFraction_normal));
-  
-  
-  RooFormulaVar* bottom_1VTX_2orMoreST_3VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_2orMoreST_3VTX_normal",
-									  flavourString+"_1VTX_2orMoreST_3VTX_normal",
-									  "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												      *bottom_e_1VTX,
-												      *bottom_e_1Vtx_2orMoreSingleTrack,
-												      *bottom_e_1VTX_3TrackVTX,
-												      *bottom_e_1orMoreVTX_3TrackVTX_energyFraction_normal));
-  
-  RooFormulaVar* bottom_1VTX_2orMoreST_4VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_2orMoreST_4VTX_normal",
-									  flavourString+"_1VTX_2orMoreST_4VTX_normal",
-									  "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												      *bottom_e_1VTX,
-												      *bottom_e_1Vtx_2orMoreSingleTrack,
-												      *bottom_e_1VTX_4TrackVTX,
-												      *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-
-  RooFormulaVar* bottom_1VTX_2orMoreST_5or6VTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_2orMoreST_5or6VTX_normal",
-									     flavourString+"_1VTX_2orMoreST_5or6VTX_normal",
-									     "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-													 *bottom_e_1VTX,
-													 *bottom_e_1Vtx_2orMoreSingleTrack,
-													 *bottom_e_1VTX_5or6TrackVTX,
-													 *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-  
-  RooFormulaVar* bottom_1VTX_2orMoreST_7orMoreVTX_normal_coef=new RooFormulaVar(flavourString+"_1VTX_2orMoreST_7orMoreVTX_normal",
-										flavourString+"_1VTX_2orMoreST_7orMoreVTX_normal",
-										"@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-													    *bottom_e_1VTX,
-													    *bottom_e_1Vtx_2orMoreSingleTrack,
-													    *bottom_e_1VTX_7orMoreTrackVTX,
-													    *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-  
-
-  
-  //2orMoreVTX
-  
-  RooFormulaVar* bottom_2orMoreVTX_4VTX_normal_coef=new RooFormulaVar(flavourString+"_2orMoreVTX_4VTX_normal",
-								      flavourString+"_2orMoreVTX_4VTX_normal",
-								      "@0*@1*@2*@3",RooArgList(*bottom_coef,
-											       *bottom_e_2orMoreVTX,
-											       *bottom_e_2orMoreVTX_4TrackVTX,
-											       *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-  
-  RooFormulaVar* bottom_2orMoreVTX_5orMoreVTX_normal_coef=new RooFormulaVar(flavourString+"_2orMoreVTX_5orMoreVTX_normal",
-									    flavourString+"_2orMoreVTX_5orMoreVTX_normal",
-									    "@0*@1*@2*@3",RooArgList(*bottom_coef,
-												     *bottom_e_2orMoreVTX,
-												     *bottom_e_2orMoreVTX_5orMoreTrackVTX,
-												     *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal));
-
-												       
-  //
-
-  RooRealVar* bottom_e_NoVtx_NoSingleTrack=new RooRealVar(flavourString+"_e_NoVtx_NoSingleTrack",
-							  flavourString+"_e_NoVtx_NoSingleTrack",
-							  0.4,0.,1.);
-  RooRealVar* bottom_e_NoVtx_1SingleTrack=new RooRealVar(flavourString+"_e_NoVtx_1SingleTrack",
-							 flavourString+"_e_NoVtx_1SingleTrack",
-							 0.2,0.,1.);
-  RooRealVar* bottom_e_NoVtx_2SingleTrack=new RooRealVar(flavourString+"_e_NoVtx_2SingleTrack",
-							 flavourString+"_e_NoVtx_2SingleTrack",
-							 0.2,0.,1.);
-  RooFormulaVar* bottom_e_NoVtx_3orMoreSingleTrack=new RooFormulaVar(flavourString+"_e_NoVtx_3orMoreSingleTrack",
-								     flavourString+"_e_NoVtx_3orMoreSingleTrack",
-								     "1.-@0-@1-@2",RooArgList(*bottom_e_NoVtx_NoSingleTrack,
-											      *bottom_e_NoVtx_1SingleTrack,
-											      *bottom_e_NoVtx_2SingleTrack));
-  
-  //coef for noVTX case
-  
-  RooFormulaVar* bottom_noVTX_0ST_coef=new RooFormulaVar(flavourString+"_noVTX_0ST",
-							 flavourString+"_noVTX_0ST",
-							 "@0*@1*@2",RooArgList(*bottom_coef,
-									       *bottom_e_NoVTX,
-									       *bottom_e_NoVtx_NoSingleTrack));
-  
-  RooFormulaVar* bottom_noVTX_1ST_normal_coef=new RooFormulaVar(flavourString+"_noVTX_1ST_normal",
-								flavourString+"_noVTX_1ST_normal",
-								"@0*@1*@2*@3",RooArgList(*bottom_coef,
-											 *bottom_e_NoVTX,
-											 *bottom_e_NoVtx_1SingleTrack,
-											 *bottom_e_NoVtx_1SingleTrack_energyFraction_normal));
-
-  RooFormulaVar* bottom_noVTX_2ST_normal_coef=new RooFormulaVar(flavourString+"_noVTX_2ST_normal",
-								flavourString+"_noVTX_2ST_normal",
-								"@0*@1*@2*@3",RooArgList(*bottom_coef,
-											 *bottom_e_NoVTX,
-											 *bottom_e_NoVtx_2SingleTrack,
-											 *bottom_e_NoVtx_2orMoreSingleTrack_energyFraction_normal));
-
-  RooFormulaVar* bottom_noVTX_3orMoreST_normal_coef=new RooFormulaVar(flavourString+"_noVTX_3orMoreST_normal",
-								      flavourString+"_noVTX_3orMoreST_normal",
-								      "@0*@1*@2*@3",RooArgList(*bottom_coef,
-											       *bottom_e_NoVTX,
-											       *bottom_e_NoVtx_3orMoreSingleTrack,
-											       *bottom_e_NoVtx_2orMoreSingleTrack_energyFraction_normal));
-
-  //ALL COEFFICIENTS FOR NOFRAG CASE AGAIN
-
-
-  //0ST
-
-  RooFormulaVar* bottom_1VTX_0ST_2VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_0ST_2VTX_nofrag",
-								    flavourString+"_1VTX_0ST_2VTX_nofrag",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_NoSingleTrack,
-												*bottom_e_1VTX_2TrackVTX,
-												*bottom_e_1orMoreVTX_2TrackVTX_energyFraction_nofrag));
-
-
-  RooFormulaVar* bottom_1VTX_0ST_3VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_0ST_3VTX_nofrag",
-								    flavourString+"_1VTX_0ST_3VTX_nofrag",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_NoSingleTrack,
-												*bottom_e_1VTX_3TrackVTX,
-												*bottom_e_1orMoreVTX_3TrackVTX_energyFraction_nofrag));
-
-  RooFormulaVar* bottom_1VTX_0ST_4VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_0ST_4VTX_nofrag",
-								    flavourString+"_1VTX_0ST_4VTX_nofrag",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_NoSingleTrack,
-												*bottom_e_1VTX_4TrackVTX,
-												*bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag));
-
-  RooFormulaVar* bottom_1VTX_0ST_5or6VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_0ST_5or6VTX_nofrag",
-								       flavourString+"_1VTX_0ST_5or6VTX_nofrag",
-								       "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												   *bottom_e_1VTX,
-												   *bottom_e_1Vtx_NoSingleTrack,
-												   *bottom_e_1VTX_5or6TrackVTX,
-												   *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag));
-
-  RooFormulaVar* bottom_1VTX_0ST_7orMoreVTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_0ST_7orMoreVTX_nofrag",
-									  flavourString+"_1VTX_0ST_7orMoreVTX_nofrag",
-									  "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												      *bottom_e_1VTX,
-												      *bottom_e_1Vtx_NoSingleTrack,
-												      *bottom_e_1VTX_7orMoreTrackVTX,
-												      *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag));
-  
-  //1ST
-
-  RooFormulaVar* bottom_1VTX_1ST_2VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_1ST_2VTX_nofrag",
-								    flavourString+"_1VTX_1ST_2VTX_nofrag",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_1SingleTrack,
-												*bottom_e_1VTX_2TrackVTX,
-												*bottom_e_1orMoreVTX_2TrackVTX_energyFraction_nofrag));
-  
-  
-  RooFormulaVar* bottom_1VTX_1ST_3VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_1ST_3VTX_nofrag",
-								    flavourString+"_1VTX_1ST_3VTX_nofrag",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_1SingleTrack,
-												*bottom_e_1VTX_3TrackVTX,
-												*bottom_e_1orMoreVTX_3TrackVTX_energyFraction_nofrag));
-
-  RooFormulaVar* bottom_1VTX_1ST_4VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_1ST_4VTX_nofrag",
-								    flavourString+"_1VTX_1ST_4VTX_nofrag",
-								    "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												*bottom_e_1VTX,
-												*bottom_e_1Vtx_1SingleTrack,
-												*bottom_e_1VTX_4TrackVTX,
-												*bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag));
-
-  RooFormulaVar* bottom_1VTX_1ST_5or6VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_1ST_5or6VTX_nofrag",
-								       flavourString+"_1VTX_1ST_5or6VTX_nofrag",
-								       "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												   *bottom_e_1VTX,
-												   *bottom_e_1Vtx_1SingleTrack,
-												   *bottom_e_1VTX_5or6TrackVTX,
-												   *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag));
-
-  RooFormulaVar* bottom_1VTX_1ST_7orMoreVTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_1ST_7orMoreVTX_nofrag",
-									  flavourString+"_1VTX_1ST_7orMoreVTX_nofrag",
-									  "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												      *bottom_e_1VTX,
-												      *bottom_e_1Vtx_1SingleTrack,
-												      *bottom_e_1VTX_7orMoreTrackVTX,
-												      *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag));
-
-
-  //2orMoreST
-
-  RooFormulaVar* bottom_1VTX_2orMoreST_2VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_2orMoreST_2VTX_nofrag",
-									  flavourString+"_1VTX_2orMoreST_2VTX_nofrag",
-									  "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												      *bottom_e_1VTX,
-												      *bottom_e_1Vtx_2orMoreSingleTrack,
-												      *bottom_e_1VTX_2TrackVTX,
-												      *bottom_e_1orMoreVTX_2TrackVTX_energyFraction_nofrag));
-  
-  
-  RooFormulaVar* bottom_1VTX_2orMoreST_3VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_2orMoreST_3VTX_nofrag",
-									  flavourString+"_1VTX_2orMoreST_3VTX_nofrag",
-									  "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												      *bottom_e_1VTX,
-												      *bottom_e_1Vtx_2orMoreSingleTrack,
-												      *bottom_e_1VTX_3TrackVTX,
-												      *bottom_e_1orMoreVTX_3TrackVTX_energyFraction_nofrag));
-
-  RooFormulaVar* bottom_1VTX_2orMoreST_4VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_2orMoreST_4VTX_nofrag",
-									  flavourString+"_1VTX_2orMoreST_4VTX_nofrag",
-									  "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-												      *bottom_e_1VTX,
-												      *bottom_e_1Vtx_2orMoreSingleTrack,
-												      *bottom_e_1VTX_4TrackVTX,
-												      *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag));
-
-  RooFormulaVar* bottom_1VTX_2orMoreST_5or6VTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_2orMoreST_5or6VTX_nofrag",
-									     flavourString+"_1VTX_2orMoreST_5or6VTX_nofrag",
-									     "@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-													 *bottom_e_1VTX,
-													 *bottom_e_1Vtx_2orMoreSingleTrack,
-													 *bottom_e_1VTX_5or6TrackVTX,
-													 *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag));
-  
-  RooFormulaVar* bottom_1VTX_2orMoreST_7orMoreVTX_nofrag_coef=new RooFormulaVar(flavourString+"_1VTX_2orMoreST_7orMoreVTX_nofrag",
-										flavourString+"_1VTX_2orMoreST_7orMoreVTX_nofrag",
-										"@0*@1*@2*@3*@4",RooArgList(*bottom_coef,
-													    *bottom_e_1VTX,
-													    *bottom_e_1Vtx_2orMoreSingleTrack,
-													    *bottom_e_1VTX_7orMoreTrackVTX,
-													    *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag));
-  
-
-
-  //2orMoreVTX
-
-  RooFormulaVar* bottom_2orMoreVTX_4VTX_nofrag_coef=new RooFormulaVar(flavourString+"_2orMoreVTX_4VTX_nofrag",
-								      flavourString+"_2orMoreVTX_4VTX_nofrag",
-								      "@0*@1*@2*@3",RooArgList(*bottom_coef,
-											       *bottom_e_2orMoreVTX,
-											       *bottom_e_2orMoreVTX_4TrackVTX,
-											       *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag));
-  
-  RooFormulaVar* bottom_2orMoreVTX_5orMoreVTX_nofrag_coef=new RooFormulaVar(flavourString+"_2orMoreVTX_5orMoreVTX_nofrag",
-									    flavourString+"_2orMoreVTX_5orMoreVTX_nofrag",
-									    "@0*@1*@2*@3",RooArgList(*bottom_coef,
-												     *bottom_e_2orMoreVTX,
-												     *bottom_e_2orMoreVTX_5orMoreTrackVTX,
-												     *bottom_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_nofrag));
-
-
-
-  //coef for noVTX case
-  
-  RooFormulaVar* bottom_noVTX_1ST_nofrag_coef=new RooFormulaVar(flavourString+"_noVTX_1ST_nofrag",
-								flavourString+"_noVTX_1ST_nofrag",
-								"@0*@1*@2*@3",RooArgList(*bottom_coef,
-											 *bottom_e_NoVTX,
-											 *bottom_e_NoVtx_1SingleTrack,
-											 *bottom_e_NoVtx_1SingleTrack_energyFraction_nofrag));
-
-  RooFormulaVar* bottom_noVTX_2ST_nofrag_coef=new RooFormulaVar(flavourString+"_noVTX_2ST_nofrag",
-								flavourString+"_noVTX_2ST_nofrag",
-								"@0*@1*@2*@3",RooArgList(*bottom_coef,
-											 *bottom_e_NoVTX,
-											 *bottom_e_NoVtx_2SingleTrack,
-											 *bottom_e_NoVtx_2orMoreSingleTrack_energyFraction_nofrag));
-
-  RooFormulaVar* bottom_noVTX_3orMoreST_nofrag_coef=new RooFormulaVar(flavourString+"_noVTX_3orMoreST_nofrag",
-								      flavourString+"_noVTX_3orMoreST_nofrag",
-								      "@0*@1*@2*@3",RooArgList(*bottom_coef,
-											       *bottom_e_NoVTX,
-											       *bottom_e_NoVtx_3orMoreSingleTrack,
-											       *bottom_e_NoVtx_2orMoreSingleTrack_energyFraction_nofrag));
-
-
-  //
-
-  /*
-  RooRealVar* bottom_e_NoVTX_noSingleTrack=new RooRealVar(flavourString+"_e_NoVTX_noSingleTrack",flavourString+"_e_NoVTX_noTracks",0.2,0.,1.);
-  RooRealVar* bottom_e_NoVTX_1SingleTrack=new RooRealVar(flavourString+"_e_NoVTX_1SingleTrack",flavourString+"_e_NoVTX_1SingleTrack",0.2,0.,1.);
-  RooRealVar* bottom_e_NoVTX_2SingleTracks=new RooRealVar(flavourString+"_e_NoVTX_2SingleTracks",flavourString+"_e_NoVTX_2SingleTracks",0.1,0.,1.);
-  RooFormulaVar* bottom_e_NoVTX_3orMoreSingleTracks=new RooFormulaVar(flavourString+"_e_NoVTX_2orMoreSingleTracks",
-								      flavourString+"_e_NoVTX_2orMoreSingleTracks",
-								      "1.-@0-@1-@2",RooArgList(*bottom_e_NoVTX_noSingleTrack,
-											       *bottom_e_NoVTX_1SingleTrack,
-											       *bottom_e_NoVTX_2SingleTracks));
-
-  */
-								      /*
-								      "1.-@0-@1",RooArgList(*bottom_e_NoVTX_1SingleTrack,
-											    *bottom_e_NoVTX_2SingleTracks));
-									*/
-  
-  //DUMMY PDF  
-  Int_t bottom_noVTX_noSingleTrack_nbins(1);
-  TArrayD bottom_noVTX_noSingleTrack_limits(bottom_noVTX_noSingleTrack_nbins+1);
-  bottom_noVTX_noSingleTrack_limits[0]=-0.5;
-  bottom_noVTX_noSingleTrack_limits[1]=7.5;
-  RooArgList* bottom_noVTX_noSingleTrack_list = new RooArgList(flavourString+"_noVTX_noSingleTrack_list");
-  RooParametricStepFunction* bottom_noVTX_noSingleTrack_pdf=new RooParametricStepFunction(flavourString+"_noVTX_noSingleTrack_pdf",
-											  flavourString+"_noVTX_noSingleTrack_pdf",
-											  *nSingleTracks,
-											  *bottom_noVTX_noSingleTrack_list,
-											  bottom_noVTX_noSingleTrack_limits,
-											  bottom_noVTX_noSingleTrack_nbins);
-  
-  
-  
-  std::cout << "First smoothing " << std::endl;
-  
-  
-  RooDataSet* data_noVTX=(RooDataSet*)dataset->reduce("nVTX==0&&nSingleTracks>0");
-  RooNDKeysPdf* bottom_noVTX_significance3d_pdf=new RooNDKeysPdf(flavourString+"_noVTX_significance3d_pdf",
-                                                                 flavourString+"_noVTX_significance3d_pdf",
-                                                                 *significance3d,
-                                                                 *data_noVTX,
-                                                                 RooNDKeysPdf::NoMirror,1);
-  
-  TH1F* bottom_noVTX_significance3d_histo=makeHisto(bottom_noVTX_significance3d_pdf,
-						    flavourString+"_noVTX_significance3d_histo",
-						    500,0,100,
-						    significance3d);
-
-  /*
-    RooDataHist* bottom_noVTX_significance3d_histo2=new RooDataHist(flavourString+"_noVTX_significance3d_histo2",
-    flavourString+"_noVTX_significance3d_histo2",
-    *significance3d,
-    bottom_noVTX_significance3d_histo,
-    1.0);
-    
-    std::cout << " 1 " << std::endl;
-    
-    RooHistPdf* bottom_noVTX_significance3d_pdf2=new RooHistPdf(flavourString+"_noVTX_significance3d_pdf2",
-    flavourString+"_noVTX_significance3d_pdf2",
-    *significance3d,
-    *bottom_noVTX_significance3d_histo2);
-    */
-  
-  TCanvas c1("c1","c1");						
-  RooPlot* bottom_noVTX_significance3d_pdf_plot=significance3d->frame();
-  data_noVTX->plotOn(bottom_noVTX_significance3d_pdf_plot);
-  bottom_noVTX_significance3d_pdf->plotOn(bottom_noVTX_significance3d_pdf_plot);
-  bottom_noVTX_significance3d_pdf_plot->Draw();
-
-
-  c1.Update();
-  c1.SaveAs(identificationFile+"_noVTX_significance3d_pdf.eps");
-  
-
-  std::cout << "new smoothing " << std::endl;
-  
-  RooDataSet* data_noVTX_1SingleTrack=(RooDataSet*)dataset->reduce("nVTX==0&&nSingleTracks==1&&energyFractionCat==energyFractionCat::Normal");
-
-  RooNDKeysPdf* bottom_noVTX_1SingleTrack_energyFraction_normal_pdf=new RooNDKeysPdf(flavourString+"_noVTX_1SingleTrack_energyFraction_normal_pdf",
-										 flavourString+"_noVTX_1SingleTrack_energyFraction_normal_pdf",
-										 *energyFraction,
-										 *data_noVTX_1SingleTrack,
-                                                                                 RooNDKeysPdf::NoMirror,1);
-
-  TH1F* bottom_noVTX_1SingleTrack_energyFraction_normal_histo=makeHisto(bottom_noVTX_1SingleTrack_energyFraction_normal_pdf,
-									flavourString+"_noVTX_1SingleTrack_energyFraction_normal_histo",
-									500,0,1.00001,
-									energyFraction);
-
-
-  Int_t bottom_dummy1_nbins(1);
-  TArrayD bottom_dummy1_limits(bottom_dummy1_nbins+1);
-  bottom_dummy1_limits[0]=0.;
-  bottom_dummy1_limits[1]=1.00001;
-  RooArgList* bottom_dummy1_list = new RooArgList(flavourString+"_dummy1_list");
-  RooParametricStepFunction* bottom_dummy1_pdf=new RooParametricStepFunction(flavourString+"_dummy1_pdf",
-									     flavourString+"_dummy1_pdf",
-									     *energyFraction,
-									     *bottom_dummy1_list,
-									     bottom_dummy1_limits,
-									     bottom_dummy1_nbins);
-
-
-  
-  
-  
-  TCanvas c2("c2","c2");						
-  RooPlot* bottom_noVTX_1SingleTrack_energyFraction_pdf_plot=energyFraction->frame();
-  data_noVTX_1SingleTrack->plotOn(bottom_noVTX_1SingleTrack_energyFraction_pdf_plot);
-  bottom_noVTX_1SingleTrack_energyFraction_normal_pdf->plotOn(bottom_noVTX_1SingleTrack_energyFraction_pdf_plot);
-  bottom_noVTX_1SingleTrack_energyFraction_pdf_plot->Draw();
-  c2.Update();
-  c2.SaveAs(identificationFile+"_noVTX_1SingleTrack_energyFraction_pdf.eps");
-  
-
-
-
-
-  std::cout << "new smoothing " << std::endl;
-  RooDataSet* data_noVTX_2orMoreSingleTrack=(RooDataSet*)dataset->reduce("nVTX==0&&nSingleTracks>1&&energyFractionCat==energyFractionCat::Normal");
-  RooNDKeysPdf* bottom_noVTX_2orMoreSingleTrack_energyFraction_normal_pdf=new RooNDKeysPdf(flavourString+"_noVTX_2orMoreSingleTrack_energyFraction_normal_pdf",
-										       flavourString+"_noVTX_2orMoreSingleTrack_energyFraction_normal_pdf",
-										       *energyFraction,
-										       *data_noVTX_2orMoreSingleTrack,
-                                                                                       RooNDKeysPdf::NoMirror,1);
-
-  
-  TH1F* bottom_noVTX_2orMoreSingleTrack_energyFraction_normal_histo=makeHisto(bottom_noVTX_2orMoreSingleTrack_energyFraction_normal_pdf,
-									      flavourString+"_noVTX_2orMoreSingleTrack_energyFraction_normal_histo",
-									      500,0,1.00001,
-									      energyFraction);
-  
-  
-
-  TCanvas c3("c3","c3");						
-  RooPlot* bottom_noVTX_2orMoreSingleTrack_energyFraction_pdf_plot=energyFraction->frame();
-  data_noVTX_2orMoreSingleTrack->plotOn(bottom_noVTX_2orMoreSingleTrack_energyFraction_pdf_plot);
-  bottom_noVTX_2orMoreSingleTrack_energyFraction_normal_pdf->plotOn(bottom_noVTX_2orMoreSingleTrack_energyFraction_pdf_plot);
-  bottom_noVTX_2orMoreSingleTrack_energyFraction_pdf_plot->Draw();
-  c3.Update();
-  c3.SaveAs(identificationFile+"_noVTX_2orMoreSingleTrack_energyFraction_pdf.eps");
-  
-
-
-
-  /*
-  Int_t bottom_1VTX_nSingleTracks_nbins(4);
-  TArrayD bottom_1VTX_nSingleTracks_limits(bottom_1VTX_nSingleTracks_nbins+1);
-  bottom_1VTX_nSingleTracks_limits[0]=-0.5;
-  bottom_1VTX_nSingleTracks_limits[1]=0.5;
-  bottom_1VTX_nSingleTracks_limits[2]=1.5;
-  bottom_1VTX_nSingleTracks_limits[3]=2.5;
-  bottom_1VTX_nSingleTracks_limits[4]=7.5;
-  
-  RooArgList* bottom_1VTX_nSingleTracks_list = new RooArgList(flavourString+"_1VTX_nSingleTracks_list");
-  RooRealVar* bottom_1VTX_nSingleTracks_noTracks=new RooRealVar(flavourString+"_1VTX_nSingleTracks_noTracks","bin 0 value",
-								0.1,0.0,20.0);
-  RooRealVar* bottom_1VTX_nSingleTracks_1Track=new RooRealVar(flavourString+"_1VTX_nSingleTracks_1Track","bin 1 value",
-							      0.1,0.0,20.0);
-  RooRealVar* bottom_1VTX_nSingleTracks_2Track=new RooRealVar(flavourString+"_1VTX_nSingleTracks_2Track","bin 2 value",
-							      0.1,0.0,20.0);
-
-  bottom_1VTX_nSingleTracks_list->add(*bottom_1VTX_nSingleTracks_noTracks);
-  bottom_1VTX_nSingleTracks_list->add(*bottom_1VTX_nSingleTracks_1Track);
-  bottom_1VTX_nSingleTracks_list->add(*bottom_1VTX_nSingleTracks_2Track);
-
-  RhhBinnedPdf* bottom_1VTX_nSingleTracks_pdf=new RhhBinnedPdf(flavourString+"_1VTX_nSingleTracks_pdf",
-							       flavourString+"_1VTX_nSingleTracks_pdf",
-							       *nSingleTracks,
-							       *bottom_1VTX_nSingleTracks_list,
-							       bottom_1VTX_nSingleTracks_limits);
-  */
-
- 
-
-
-  Int_t bottom_1VTX_nTracksAtVtx_nbins(5);
-  TArrayD bottom_1VTX_nTracksAtVtx_limits(bottom_1VTX_nTracksAtVtx_nbins+1);
-  // bottom_1VTX_nTracksAtVtx_limits[0]=1.5;
-  bottom_1VTX_nTracksAtVtx_limits[0]=-.5;
-  bottom_1VTX_nTracksAtVtx_limits[1]=2.5;
-  bottom_1VTX_nTracksAtVtx_limits[2]=3.5;
-  bottom_1VTX_nTracksAtVtx_limits[3]=4.5;
-  bottom_1VTX_nTracksAtVtx_limits[4]=6.5;
-  bottom_1VTX_nTracksAtVtx_limits[5]=15.5;
-  
-  
-  RooArgList* bottom_1VTX_nTracksAtVtx_list = new RooArgList(flavourString+"_1VTX_nTracksAtVtx_list");
-  RooRealVar* bottom_1VTX_nTracksAtVtx_2Tracks=new RooRealVar(flavourString+"_1VTX_nTracksAtVtx_2Tracks","bin 0 value",
-							      0.1,0.0,1.0);
-  RooRealVar* bottom_1VTX_nTracksAtVtx_3Tracks=new RooRealVar(flavourString+"_1VTX_nTracksAtVtx_3Tracks","bin 1 value",
-							     0.1,0.0,1.0);
-  RooRealVar* bottom_1VTX_nTracksAtVtx_4Tracks=new RooRealVar(flavourString+"_1VTX_nTracksAtVtx_4Tracks","bin 2 value",
-							     0.1,0.0,1.0);
-  RooRealVar* bottom_1VTX_nTracksAtVtx_56Tracks=new RooRealVar(flavourString+"_1VTX_nTracksAtVtx_56Tracks","bin 3 value",
-							       0.1,0.0,1.0);
-  bottom_1VTX_nTracksAtVtx_list->add(*bottom_1VTX_nTracksAtVtx_2Tracks);
-  bottom_1VTX_nTracksAtVtx_list->add(*bottom_1VTX_nTracksAtVtx_3Tracks);
-  bottom_1VTX_nTracksAtVtx_list->add(*bottom_1VTX_nTracksAtVtx_4Tracks);
-  bottom_1VTX_nTracksAtVtx_list->add(*bottom_1VTX_nTracksAtVtx_56Tracks);
-  bottom_1VTX_nTracksAtVtx_list->add(*bottom_1VTX_nTracksAtVtx_2Tracks);
-  
-
-  RooParametricStepFunction* bottom_1VTX_nTracksAtVtx_pdf=new RooParametricStepFunction(flavourString+"_1VTX_nTracksAtVtx_pdf",
-											flavourString+"_1VTX_nTracksAtVtx_pdf",
-											*nTracksAtVtx,
-											*bottom_1VTX_nTracksAtVtx_list,
-											bottom_1VTX_nTracksAtVtx_limits,
-											bottom_1VTX_nTracksAtVtx_nbins);
-
-  Int_t bottom_2orMoreVTX_nTracksAtVtx_nbins(2);
-  TArrayD bottom_2orMoreVTX_nTracksAtVtx_limits(bottom_2orMoreVTX_nTracksAtVtx_nbins+1);
-  bottom_2orMoreVTX_nTracksAtVtx_limits[0]=-0.5;
-  //  bottom_2orMoreVTX_nTracksAtVtx_limits[0]=3.5;
-  bottom_2orMoreVTX_nTracksAtVtx_limits[1]=4.5;
-  bottom_2orMoreVTX_nTracksAtVtx_limits[2]=15.5;
-  
-  RooArgList* bottom_2orMoreVTX_nTracksAtVtx_list = new RooArgList(flavourString+"_2orMoreVTX_nTracksAtVtx_list");
-  RooRealVar* bottom_2orMoreVTX_nTracksAtVtx_4Tracks=new RooRealVar(flavourString+"_2orMoreVTX_nTracksAtVtx_4Tracks","bin 0 value",
-								    0.4,0.0,1.0);
-  bottom_2orMoreVTX_nTracksAtVtx_list->add(*bottom_2orMoreVTX_nTracksAtVtx_4Tracks);
-
-  RooParametricStepFunction* bottom_2orMoreVTX_nTracksAtVtx_pdf=new RooParametricStepFunction(flavourString+"_2orMoreVTX_nTracksAtVtx_normal_pdf",
-											      flavourString+"_2orMoreVTX_nTracksAtVtx_normal_pdf",
-											      *nTracksAtVtx,
-											      *bottom_2orMoreVTX_nTracksAtVtx_list,
-											      bottom_2orMoreVTX_nTracksAtVtx_limits,
-											      bottom_2orMoreVTX_nTracksAtVtx_nbins);
-  
-
-  
-  std::cout << "new smoothing " << std::endl;
-  RooDataSet* data_1orMoreVTX_2TrackVTX=(RooDataSet*)dataset->reduce("nVTX>0&&nTracksAtVtx==2&&energyFractionCat==energyFractionCat::Normal"); 
-  RooNDKeysPdf* bottom_1orMoreVTX_2TrackVTX_energyFraction_normal_pdf=new RooNDKeysPdf(flavourString+"_1orMoreVTX_2TrackVTX_energyFraction_normal_pdf",
-									    flavourString+"_1orMoreVTX_2TrackVTX_energyFraction_normal_pdf",
-									    *energyFraction,
-									    *data_1orMoreVTX_2TrackVTX,
-                                                             RooNDKeysPdf::NoMirror,1.);
-
-  TH1F* bottom_1orMoreVTX_2TrackVTX_energyFraction_normal_histo=makeHisto(bottom_1orMoreVTX_2TrackVTX_energyFraction_normal_pdf,
-									  flavourString+"_1orMoreVTX_2TrackVTX_energyFraction_normal_histo",
-									  500,0,1.00001,
-									  energyFraction);
-
-
-  Int_t bottom_dummy3_nbins(1);
-  TArrayD bottom_dummy3_limits(bottom_dummy1_nbins+1);
-  bottom_dummy3_limits[0]=0.;
-  bottom_dummy3_limits[1]=1.00001;
-  RooArgList* bottom_dummy3_list = new RooArgList(flavourString+"_dummy3_list");
-  RooParametricStepFunction* bottom_dummy3_pdf=new RooParametricStepFunction(flavourString+"_dummy3_pdf",
-									     flavourString+"_dummy3_pdf",
-									     *energyFraction,
-									     *bottom_dummy3_list,
-									     bottom_dummy3_limits,
-									     bottom_dummy3_nbins);
-
-
-
-
-
-  TCanvas c4("c4","c4");						
-  RooPlot* bottom_1orMoreVTX_2TrackVTX_energyFraction_pdf_plot=energyFraction->frame();
-  data_1orMoreVTX_2TrackVTX->plotOn(bottom_1orMoreVTX_2TrackVTX_energyFraction_pdf_plot);
-  bottom_1orMoreVTX_2TrackVTX_energyFraction_normal_pdf->plotOn(bottom_1orMoreVTX_2TrackVTX_energyFraction_pdf_plot);
-  bottom_1orMoreVTX_2TrackVTX_energyFraction_pdf_plot->Draw();
-  c4.Update();
-  c4.SaveAs(identificationFile+"_1orMoreVTX_2TrackVTX_energyFraction_pdf.eps");
-  
-  
-
-  std::cout << "new smoothing " << std::endl;
-  RooDataSet* data_1orMoreVTX_3TrackVTX=(RooDataSet*)dataset->reduce("nVTX>0&&(nTracksAtVtx+nSingleTracks)==3&&energyFractionCat==energyFractionCat::Normal"); 
-  RooNDKeysPdf* bottom_1orMoreVTX_3TrackVTX_energyFraction_normal_pdf=new RooNDKeysPdf(flavourString+"_1orMoreVTX_3TrackVTX_energyFraction_normal_pdf",
-										   flavourString+"_1orMoreVTX_3TrackVTX_energyFraction_normal_pdf",
-										   *energyFraction,
-										   *data_1orMoreVTX_3TrackVTX,
-                                                             RooNDKeysPdf::NoMirror,1);
-  
-  TH1F* bottom_1orMoreVTX_3TrackVTX_energyFraction_normal_histo=makeHisto(bottom_1orMoreVTX_3TrackVTX_energyFraction_normal_pdf,
-									  flavourString+"_1orMoreVTX_3TrackVTX_energyFraction_normal_histo",
-									  500,0,1.00001,
-									  energyFraction);
-
-  
-
-  Int_t bottom_dummy4_nbins(1);
-  TArrayD bottom_dummy4_limits(bottom_dummy1_nbins+1);
-  bottom_dummy4_limits[0]=0.;
-  bottom_dummy4_limits[1]=1.00001;
-  RooArgList* bottom_dummy4_list = new RooArgList(flavourString+"_dummy4_list");
-  RooParametricStepFunction* bottom_dummy4_pdf=new RooParametricStepFunction(flavourString+"_dummy4_pdf",
-									     flavourString+"_dummy4_pdf",
-									     *energyFraction,
-									     *bottom_dummy4_list,
-									     bottom_dummy4_limits,
-									     bottom_dummy4_nbins);
-
-
-
-
-  TCanvas c5("c5","c5");						
-  RooPlot* bottom_1orMoreVTX_3TrackVTX_energyFraction_pdf_plot=energyFraction->frame();
-  data_1orMoreVTX_3TrackVTX->plotOn(bottom_1orMoreVTX_3TrackVTX_energyFraction_pdf_plot);
-  bottom_1orMoreVTX_3TrackVTX_energyFraction_normal_pdf->plotOn(bottom_1orMoreVTX_3TrackVTX_energyFraction_pdf_plot);
-  bottom_1orMoreVTX_3TrackVTX_energyFraction_pdf_plot->Draw();
-  c5.Update();
-  c5.SaveAs(identificationFile+"_1orMoreVTX_3TrackVTX_energyFraction_pdf.eps");
-  
- 
-
-
-  std::cout << "new smoothing " << std::endl;
-  RooDataSet* data_1orMoreVTX_4orMoreTrackVTX=(RooDataSet*)dataset->reduce("nVTX>0&&(nTracksAtVtx+nSingleTracks)>3&&energyFractionCat==energyFractionCat::Normal"); 
-  RooNDKeysPdf* bottom_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal_pdf=new RooNDKeysPdf(flavourString+"_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal_pdf",
-											 flavourString+"_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal_pdf",
-											 *energyFraction,
-											 *data_1orMoreVTX_4orMoreTrackVTX,
-                                                             RooNDKeysPdf::NoMirror,1);
-
-  TH1F* bottom_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal_histo=makeHisto(bottom_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal_pdf,
-										flavourString+"_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal_histo",
-										500,0,1.00001,
-										energyFraction);
-
-  
-
-  
-  
-  Int_t bottom_dummy5_nbins(1);
-  TArrayD bottom_dummy5_limits(bottom_dummy1_nbins+1);
-  bottom_dummy5_limits[0]=0.;
-  bottom_dummy5_limits[1]=1.00001;
-  RooArgList* bottom_dummy5_list = new RooArgList(flavourString+"_dummy5_list");
-  RooParametricStepFunction* bottom_dummy5_pdf=new RooParametricStepFunction(flavourString+"_dummy5_pdf",
-									     flavourString+"_dummy5_pdf",
-									     *energyFraction,
-									     *bottom_dummy5_list,
-									     bottom_dummy5_limits,
-									     bottom_dummy5_nbins);
-
-
-
-
-  TCanvas c6("c6","c6");						
-  RooPlot* bottom_1orMoreVTX_4orMoreTrackVTX_energyFraction_pdf_plot=energyFraction->frame();
-  data_1orMoreVTX_4orMoreTrackVTX->plotOn(bottom_1orMoreVTX_4orMoreTrackVTX_energyFraction_pdf_plot);
-  bottom_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal_pdf->plotOn(bottom_1orMoreVTX_4orMoreTrackVTX_energyFraction_pdf_plot);
-  bottom_1orMoreVTX_4orMoreTrackVTX_energyFraction_pdf_plot->Draw();
-  c6.Update();
-  c6.SaveAs(identificationFile+"_1orMoreVTX_4orMoreTrackVTX_energyFraction_pdf.eps");
-  
-  
-
-  
-  std::cout << "new smoothing " << std::endl;
-  RooDataSet* data_1orMoreVTX=(RooDataSet*)dataset->reduce("nVTX>0"); 
-  RooNDKeysPdf* bottom_1orMoreVTX_significance3d_pdf=new RooNDKeysPdf(flavourString+"_1orMoreVTX_significance3d_pdf",
-								  flavourString+"_1orMoreVTX_significance3d_pdf",
-								  *significance3d,
-								  *data_1orMoreVTX,
-                                                             RooNDKeysPdf::NoMirror,1);
-
-  TH1F* bottom_1orMoreVTX_significance3d_histo=makeHisto(bottom_1orMoreVTX_significance3d_pdf,
-						    flavourString+"_1orMoreVTX_significance3d_histo",
-						    500,0,100,
-						    significance3d);
-
- 
-
-  TCanvas c7("c7","c7");						
-  RooPlot* bottom_1orMoreVTX_significance3d_pdf_plot=significance3d->frame();
-  data_1orMoreVTX->plotOn(bottom_1orMoreVTX_significance3d_pdf_plot);
-  bottom_1orMoreVTX_significance3d_pdf->plotOn(bottom_1orMoreVTX_significance3d_pdf_plot);
-  bottom_1orMoreVTX_significance3d_pdf_plot->Draw();
-  c7.Update();
-  c7.SaveAs(identificationFile+"_1orMoreVTX_significance3d_pdf_plot.eps");
-  
-
-
-
-
-
-  std::cout << "new smoothing " << std::endl;
-  //RooDataSet* data_1orMoreVTX_2TrackVTX=dataset->reduce("cat_nVTX>0&&cat_nTracksAtVtx==2"); 
-  RooNDKeysPdf* bottom_1orMoreVTX_2TrackVTX_mass_pdf=new RooNDKeysPdf(flavourString+"_1orMoreVTX_2TrackVTX_mass_pdf",
-								  flavourString+"_1orMoreVTX_2TrackVTX_mass_pdf",
-								  *mass,
-								  *data_1orMoreVTX_2TrackVTX,
-                                                             RooNDKeysPdf::NoMirror,1);
-
-  TH1F* bottom_1orMoreVTX_2TrackVTX_mass_histo=makeHisto(bottom_1orMoreVTX_2TrackVTX_mass_pdf,
-						    flavourString+"_1orMoreVTX_2TrackVTX_mass_histo",
-						    500,0,10000,
-						    mass);
-
-
-  //,
-
-  TCanvas c8("c8","c8");						
-  RooPlot* bottom_1orMoreVTX_2TrackVTX_mass_pdf_plot=mass->frame();
-  data_1orMoreVTX_2TrackVTX->plotOn(bottom_1orMoreVTX_2TrackVTX_mass_pdf_plot);
-  bottom_1orMoreVTX_2TrackVTX_mass_pdf->plotOn(bottom_1orMoreVTX_2TrackVTX_mass_pdf_plot);
-  bottom_1orMoreVTX_2TrackVTX_mass_pdf_plot->Draw();
-  c8.Update();
-  c8.SaveAs(identificationFile+"_1orMoreVTX_2TrackVTX_mass_pdf.eps");
-  
-
-
-  //							      bottom_1orMoreVTX_2TrackVTX_mass_nbins);
-  //  RooNumIntConfig* cfg = RooAbsReal::defaultIntegratorConfig();
-  //  cfg->setEpsAbs(1E-4);
-  //  cfg->setEpsRel(1E-4);
-  //    cfg->method1D().setLabel("RooIntegrator1D");
-  //  cfg->method1D()->Print("v");
-  //  cfg->getConfigSection("RooIntegrator1D")->setRealValue("maxSteps",100);
-  //  bottom_1orMoreVTX_2TrackVTX_mass_pdf->setIntegratorConfig(*cfg);
-  
-  //bottom_1orMoreVTX_2TrackVTX_mass_pdf->->setIntegratorConfig(*cfg);
-
-  
-  std::cout << "new smoothing " << std::endl;
-  RooDataSet* data_1orMoreVTX_3orMoreTrackVTX=(RooDataSet*)dataset->reduce("nVTX>0&&(nTracksAtVtx+nSingleTracks)>2"); 
-  RooNDKeysPdf* bottom_1orMoreVTX_3orMoreTrackVTX_mass_pdf=new RooNDKeysPdf(flavourString+"_1orMoreVTX_3orMoreTrackVTX_mass_pdf",
-									flavourString+"_1orMoreVTX_3orMoreTrackVTX_mass_pdf",
-									*mass,
-									*data_1orMoreVTX_3orMoreTrackVTX,
-                                                             RooNDKeysPdf::NoMirror,1.);
-
-  
-  TH1F* bottom_1orMoreVTX_3orMoreTrackVTX_mass_histo=makeHisto(bottom_1orMoreVTX_3orMoreTrackVTX_mass_pdf,
-						    flavourString+"_1orMoreVTX_3orMoreTrackVTX_mass_histo",
-						    500,0,10000,
-						    mass);
-
-  TCanvas c9("c9","c9");						
-  RooPlot* bottom_1orMoreVTX_3orMoreTrackVTX_mass_pdf_plot=mass->frame();
-  data_1orMoreVTX_3orMoreTrackVTX->plotOn(bottom_1orMoreVTX_3orMoreTrackVTX_mass_pdf_plot);
-  bottom_1orMoreVTX_3orMoreTrackVTX_mass_pdf->plotOn(bottom_1orMoreVTX_3orMoreTrackVTX_mass_pdf_plot);
-  bottom_1orMoreVTX_3orMoreTrackVTX_mass_pdf_plot->Draw();
-  c9.Update();
-  c9.SaveAs(identificationFile+"_1orMoreVTX_3orMoreTrackVTX_mass_pdf_plot.eps");
-  
-
-  bottom_noVTX_significance3d_histo->Write();
-  bottom_noVTX_1SingleTrack_energyFraction_normal_histo->Write();
-  bottom_noVTX_2orMoreSingleTrack_energyFraction_normal_histo->Write();
-  bottom_1orMoreVTX_2TrackVTX_energyFraction_normal_histo->Write();
-  bottom_1orMoreVTX_3TrackVTX_energyFraction_normal_histo->Write();
-  bottom_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal_histo->Write();
-  bottom_1orMoreVTX_significance3d_histo->Write();
-  bottom_1orMoreVTX_2TrackVTX_mass_histo->Write();
-  bottom_1orMoreVTX_3orMoreTrackVTX_mass_histo->Write();
-  filehistos->Write();
-  filehistos->Close();
-  
-
-}
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/createTheHistograms.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/createTheHistograms.h
deleted file mode 100644
index 3b00e03d56a8f5b10bded6c90d089dd15fce1a3b..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/createTheHistograms.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "TString.h"
-
-class TH1F;
-class RooNDKeysPdf;
-class RooRealVar;
-void createTheHistograms(TString collectionName,
-                         int flavourType);
-
-void createTheHistograms(int flavourType,
-                         TString collectionName)
-{
-  createTheHistograms( collectionName,
-                       flavourType);
-}
-
-
-
-TH1F* makeHisto(RooNDKeysPdf* myKeysPdf,const char* name,int numtot,double begin,double end,RooRealVar* dep);
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/doCreateTheHistograms.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/doCreateTheHistograms.C
deleted file mode 100644
index 7c8fbb3dcbe67861ab395ed3ae46d4d9d6c8d203..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/doCreateTheHistograms.C
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-void doCreateTheHistograms(TString collectionName,
-                           int flavour)
-{
-  gROOT->ProcessLine(".L createTheHistograms.cxx+");
-  createTheHistograms(flavour,
-                      collectionName);
-}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/executeCreateAllHistograms.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/executeCreateAllHistograms.C
deleted file mode 100644
index 34086a3702916c22df640b0b95c3056f62da1071..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/executeCreateAllHistograms.C
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-executeCreateAllHistograms(int number=0,int flavour=0) {
-  gROOT->ProcessLine(".L createTheHistograms.cxx+g");
-  gROOT->ProcessLine(".L createAllHistograms.cxx+g");
-//  createAllHistograms(number,flavour);
-  createAllHistograms();
-
-}
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/executeDoGetAllValues.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/executeDoGetAllValues.C
deleted file mode 100644
index 341bea462c87fa517f8d868793b5d381345a4c1e..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/executeDoGetAllValues.C
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-{
-gROOT->ProcessLine(".L macroToGetAllValues.cxx+");
-gROOT->ProcessLine(".L macroDoGetAllValues.C+");
-
-prepareCalibrationFileForCOOL();
-
-}
-
-
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroDoGetAllValues.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroDoGetAllValues.C
deleted file mode 100644
index de9c587021ceeb6b6fd7b45b25573f61f3ce8800..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroDoGetAllValues.C
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "../preparedatasets/collectionsToProcess.h"
-#include "macroToGetAllValues.h"
-#include <TString.h>
-
-using namespace std;
-
-void prepareCalibrationFileForCOOL()
-{
-
-  vector<TString> collectionsToProcess=getCollectionsToProcess();
-  
-  vector<TString>::const_iterator collectionsToProcessBegin=collectionsToProcess.begin();
-  vector<TString>::const_iterator collectionsToProcessEnd=collectionsToProcess.end();
-  
-  for (vector<TString>::const_iterator collectionsToProcessIter=collectionsToProcessBegin;
-       collectionsToProcessIter!=collectionsToProcessEnd;
-       ++collectionsToProcessIter) 
-  {
-
-    TString filename("../reduceddatasets/reduceddataset_");
-    filename+=*collectionsToProcessIter;
-    filename+=".root";
-
-    getAllValues(filename,
-                 *collectionsToProcessIter,
-                 5);
-    
-    getAllValues(filename,
-                 *collectionsToProcessIter,
-                 4);
-    
-    getAllValues(filename,
-                 *collectionsToProcessIter,
-                 1);
-
-    mergeFiles(*collectionsToProcessIter);
-
-  }
-  
-}
-
-    
-
-    
-                  
-                  
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroToGetAllValues.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroToGetAllValues.cxx
deleted file mode 100644
index 15840038b8c81ce9464b96efcd9115d04e021592..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroToGetAllValues.cxx
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include <iostream>
-#include <TTree.h>
-#include <TFile.h>
-#include <TEventList.h>
-#include "Riostream.h"
-#include <TH1D.h>
-#include <TString.h>
-#include <vector>
-#include <iostream>
-
-using namespace std;
-
-void makeHisto(TString title, double value)
-{
-  TH1D* newHisto=new TH1D(title,title,1,0,1);
-  newHisto->Fill(0.5,value);
-  newHisto->Write();
-}
-
-
-void getAllValues(TString fileName,TString jetCollection,int flavourType)
-{
-
-  TString flavourString;
-
-  if (flavourType==5)
-  {
-    flavourString=TString("bottom");
-  }
-  if (flavourType==4)
-  {
-    flavourString=TString("charm");
-  }
-  if (flavourType==1)
-  {
-    flavourString=TString("light");
-  }
-
-  TString identificationFile("../trainingResultsLikelihood/coefficientsHistos_");
-  identificationFile+=jetCollection;
-  identificationFile+="_";
-  identificationFile+=flavourString;
-  identificationFile+=".root";
-
-  TString identificationFile2("../trainingResultsLikelihood/coefficientsFile_");
-  identificationFile2+=jetCollection;
-  identificationFile2+="_";
-  identificationFile2+=flavourString;
-  identificationFile2+=".txt";
-
-  TString flavourCondition="cat_flavour==";
-  flavourCondition+=flavourType;
-
-  ofstream cronology(identificationFile2,ios_base::out|ios_base::app);
-
-  TFile file(fileName);
-  TTree* myTTree=(TTree*)file.Get("SVTree");
-
-  TFile* output=new TFile(identificationFile,"recreate");
-
-  TH1::AddDirectory(kFALSE);
-
-  myTTree->Draw(">>myList",flavourCondition+"&&nTracksAtVtx>-998.");
-  TEventList* myEventList=(TEventList*)gDirectory->Get("myList");
-  int allnumber=myTTree->GetEntries();
-  cronology << flavourString <<  "_"<<jetCollection<<"_coef = " << myEventList->GetN()  << " L(0 - 1e+08)" <<  endl;
-  makeHisto(flavourString+"_coef",(double)myEventList->GetN());
-
-  myTTree->Draw(">>myList2",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==1");
-  TEventList* myEventList2=(TEventList*)gDirectory->Get("myList2");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_1VTX = " << (double)myEventList2->GetN()/(double)myEventList->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_1VTX",(double)myEventList2->GetN()/(double)myEventList->GetN());
-
-  myTTree->Draw(">>myList3",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==1&&nTracksAtVtx==2");
-  TEventList* myEventList3=(TEventList*)gDirectory->Get("myList3");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_1VTX_2TrackVTX = " << (double)myEventList3->GetN()/(double)myEventList2->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_1VTX_2TrackVTX",(double)myEventList3->GetN()/(double)myEventList2->GetN());
-
-  myTTree->Draw(">>myList4",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==1&&nTracksAtVtx==3");
-  TEventList* myEventList4=(TEventList*)gDirectory->Get("myList4");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_1VTX_3TrackVTX = " << (double)myEventList4->GetN()/(double)myEventList2->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_1VTX_3TrackVTX",(double)myEventList4->GetN()/(double)myEventList2->GetN());
-
-  myTTree->Draw(">>myList5",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==1&&nTracksAtVtx==4");
-  TEventList* myEventList5=(TEventList*)gDirectory->Get("myList5");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_1VTX_4TrackVTX = " << (double)myEventList5->GetN()/(double)myEventList2->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_1VTX_4TrackVTX",(double)myEventList5->GetN()/(double)myEventList2->GetN());
-
-  myTTree->Draw(">>myList6",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==1&&(nTracksAtVtx==5||nTracksAtVtx==6)");
-  TEventList* myEventList6=(TEventList*)gDirectory->Get("myList6");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_1VTX_5or6TrackVTX = " << (double)myEventList6->GetN()/(double)myEventList2->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_1VTX_5or6TrackVTX",(double)myEventList6->GetN()/(double)myEventList2->GetN());
-
-  myTTree->Draw(">>myList7",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==1&&nSingleTracks==1");
-  TEventList* myEventList7=(TEventList*)gDirectory->Get("myList7");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_1Vtx_1SingleTrack = " << (double)myEventList7->GetN()/(double)myEventList2->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_1Vtx_1SingleTrack",(double)myEventList7->GetN()/(double)myEventList2->GetN());
-
-  myTTree->Draw(">>myList8",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==1&&nSingleTracks==0");
-  TEventList* myEventList8=(TEventList*)gDirectory->Get("myList8");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_1Vtx_NoSingleTrack = " << (double)myEventList8->GetN()/(double)myEventList2->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_1Vtx_NoSingleTrack",(double)myEventList8->GetN()/(double)myEventList2->GetN());
-
-  myTTree->Draw(">>myList11",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX>0&&nTracksAtVtx>3");
-  TEventList* myEventList11=(TEventList*)gDirectory->Get("myList11");
-  //  cronology << flavourString <<  "_"<<jetCollection<<"_e_1VTX " << (double)myEventList2->GetN()/(double)myEventList->GetN() << " L(0 - 1) " << endl;
-
-  myTTree->Draw(">>myList28",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX>0&&nTracksAtVtx==2&&energyFraction<.9999");
-  TEventList* myEventList28=(TEventList*)gDirectory->Get("myList28");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_1orMoreVTX_2TrackVTX_energyFraction_normal = " << (double)myEventList28->GetN()/(double)myEventList3->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_1orMoreVTX_2TrackVTX_energyFraction_normal",(double)myEventList28->GetN()/(double)myEventList3->GetN());
-
-  myTTree->Draw(">>myList9",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX>0&&nTracksAtVtx==3&&energyFraction<.9999");
-  TEventList* myEventList9=(TEventList*)gDirectory->Get("myList9");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_1orMoreVTX_3TrackVTX_energyFraction_normal = " << (double)myEventList9->GetN()/(double)myEventList4->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_1orMoreVTX_3TrackVTX_energyFraction_normal",(double)myEventList9->GetN()/(double)myEventList4->GetN());
-
-  myTTree->Draw(">>myList10",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX>0&&nTracksAtVtx>3&&energyFraction<.9999");
-  TEventList* myEventList10=(TEventList*)gDirectory->Get("myList10");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal = " << (double)myEventList10->GetN()/(double)myEventList11->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal" ,(double)myEventList10->GetN()/(double)myEventList11->GetN());
-
-  myTTree->Draw(">>myList12",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX>1");
-  TEventList* myEventList12=(TEventList*)gDirectory->Get("myList12");
-
-  myTTree->Draw(">>myList13",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX>1&&nTracksAtVtx==4");
-  TEventList* myEventList13=(TEventList*)gDirectory->Get("myList13");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_2orMoreVTX_4TrackVTX = " << (double)myEventList13->GetN()/(double)myEventList12->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_2orMoreVTX_4TrackVTX",(double)myEventList13->GetN()/(double)myEventList12->GetN());
-
-
-  myTTree->Draw(">>myList14",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==0");
-  TEventList* myEventList14=(TEventList*)gDirectory->Get("myList14");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_NoVTX = " << (double)myEventList14->GetN()/(double)myEventList->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_NoVTX",(double)myEventList14->GetN()/(double)myEventList->GetN());
-
-  myTTree->Draw(">>myList15",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==0&&nSingleTracks==1");
-  TEventList* myEventList15=(TEventList*)gDirectory->Get("myList15");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_NoVtx_1SingleTrack = " << (double)myEventList15->GetN()/(double)myEventList14->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_NoVtx_1SingleTrack",(double)myEventList15->GetN()/(double)myEventList14->GetN());
-
-  myTTree->Draw(">>myList16",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==0&&nSingleTracks==2");
-  TEventList* myEventList16=(TEventList*)gDirectory->Get("myList16");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_NoVtx_2SingleTrack = " << (double)myEventList16->GetN()/(double)myEventList14->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_NoVtx_2SingleTrack",(double)myEventList16->GetN()/(double)myEventList14->GetN());
-
-  myTTree->Draw(">>myList17",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==0&&nSingleTracks>1");
-  TEventList* myEventList17=(TEventList*)gDirectory->Get("myList17");
-  //  cronology << flavourString <<  "_"<<jetCollection<<"_e_NoVtx_3SingleTrack " << (double)myEventList17->GetN()/(double)myEventList14->GetN() << " L(0 - 1) " << endl;
-  myTTree->Draw(">>myList18",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==0&&nSingleTracks==0");
-  TEventList* myEventList18=(TEventList*)gDirectory->Get("myList18");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_NoVtx_NoSingleTrack = " << (double)myEventList18->GetN()/(double)myEventList14->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_NoVtx_NoSingleTrack",(double)myEventList18->GetN()/(double)myEventList14->GetN());
-
-  myTTree->Draw(">>myList19",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==0&&nSingleTracks==1&&energyFraction<.9999");
-  TEventList* myEventList19=(TEventList*)gDirectory->Get("myList19");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_NoVtx_1SingleTrack_energyFraction_normal = " << (double)myEventList19->GetN()/(double)myEventList15->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_NoVtx_1SingleTrack_energyFraction_normal", (double)myEventList19->GetN()/(double)myEventList15->GetN());
-
-  myTTree->Draw(">>myList20",flavourCondition+"&&nTracksAtVtx>-998.&&nVTX==0&&nSingleTracks>1&&energyFraction<.9999");
-  TEventList* myEventList20=(TEventList*)gDirectory->Get("myList20");
-  cronology << flavourString <<  "_"<<jetCollection<<"_e_NoVtx_2orMoreSingleTrack_energyFraction_normal = " << (double)myEventList20->GetN()/(double)myEventList17->GetN() << " L(0 - 1) " << endl;
-  makeHisto(flavourString+"_e_NoVtx_2orMoreSingleTrack_energyFraction_normal",(double)myEventList20->GetN()/(double)myEventList17->GetN());
-  
-  output->Write();
-  output->Close();
-
-  cronology.close();
-
-}
-
-void mergeFiles(TString jetCollection)
-{
-
-  std::vector<int> allFlavours;
-  allFlavours.push_back(1);
-  allFlavours.push_back(4);
-  allFlavours.push_back(5);
-  
-  std::vector<int>::const_iterator begin=allFlavours.begin();
-  std::vector<int>::const_iterator end=allFlavours.end();
-  
-  TString identificationFile("../trainingResultsLikelihood/coefficientsHistos_");
-  identificationFile+=jetCollection;
-  identificationFile+=".root";
-
-  TFile* outputFile=new TFile(identificationFile,"recreate");
-
-  for (std::vector<int>::const_iterator iter=begin;iter!=end;++iter)
-  {
-
-    TString flavourString;
-    
-    int flavourType=*iter;
-
-    if (flavourType==5)
-    {
-      flavourString=TString("bottom");
-    }
-    if (flavourType==4)
-    {
-      flavourString=TString("charm");
-    }
-    if (flavourType==1)
-    {
-      flavourString=TString("light");
-    }
-
-    TString identificationFile("../trainingResultsLikelihood/coefficientsHistos_");
-    identificationFile+=jetCollection;
-    identificationFile+="_";
-    identificationFile+=flavourString;
-    identificationFile+=".root";
-    
-    TFile openFile(identificationFile);
-    
-    outputFile->cd();
-    
-    TList* list=openFile.GetListOfKeys();
-    TIterator* firstIter=list->MakeIterator();
-
-
-    do {
-    
-      TObject* inList=firstIter->Next();
-      
-      if (inList==0)
-      {
-        break;
-      }
-      
-      std::cout << " Name: " << inList->ClassName() << std::endl;
-
-      if ( openFile.Get(inList->GetName())->ClassName()!=TString("TH1D") ){
-        continue;
-      }
-
-      TH1D* histo=(TH1D*) openFile.Get(inList->GetName());
-
-      histo->Write();
-      
-   } while(true);
-  } 
-  
-  outputFile->Write();
-  outputFile->Close();
-  
-}
-
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroToGetAllValues.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroToGetAllValues.h
deleted file mode 100644
index 8386957e6963421cf8129cfc3aa8031aa09c9d10..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroToGetAllValues.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include <TString.h>
-
-void getAllValues(TString fileName,TString jetCollection,int flavourType);
-
-void makeHisto(TString title, double value);
-
-void mergeFiles(TString jetCollection);
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroToMerge.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroToMerge.C
deleted file mode 100644
index c895b787a359a6eb874fd17528a9566abb24e373..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/macroToMerge.C
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-{
-  TFile filebottom("smoothedhistosbottom.root");
-  TFile filecharm("smoothedhistoscharm.root");
-  TFile filelight("smoothedhistoslight.root");
-  TFile fileoutput("smoothedhistos.root","recreate");
-  TH1F* histobottom1=filebottom.Get("bottom_noVTX_significance3d_histo");
-  TH1F* histobottom2=filebottom.Get("bottom_noVTX_1SingleTrack_energyFraction_normal_histo");
-  TH1F* histobottom3=filebottom.Get("bottom_noVTX_2orMoreSingleTrack_energyFraction_normal_histo");
-  TH1F* histobottom4=filebottom.Get("bottom_1orMoreVTX_2TrackVTX_energyFraction_normal_histo");
-  TH1F* histobottom5=filebottom.Get("bottom_1orMoreVTX_3TrackVTX_energyFraction_normal_histo");
-  TH1F* histobottom6=filebottom.Get("bottom_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal_histo");
-  TH1F* histobottom7=filebottom.Get("bottom_1orMoreVTX_significance3d_histo");
-  TH1F* histobottom8=filebottom.Get("bottom_1orMoreVTX_2TrackVTX_mass_histo");
-  TH1F* histobottom9=filebottom.Get("bottom_1orMoreVTX_3orMoreTrackVTX_mass_histo");
-  TH1F* histocharm1=filecharm.Get("charm_noVTX_significance3d_histo");
-  TH1F* histocharm2=filecharm.Get("charm_noVTX_1SingleTrack_energyFraction_normal_histo");
-  TH1F* histocharm3=filecharm.Get("charm_noVTX_2orMoreSingleTrack_energyFraction_normal_histo");
-  TH1F* histocharm4=filecharm.Get("charm_1orMoreVTX_2TrackVTX_energyFraction_normal_histo");
-  TH1F* histocharm5=filecharm.Get("charm_1orMoreVTX_3TrackVTX_energyFraction_normal_histo");
-  TH1F* histocharm6=filecharm.Get("charm_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal_histo");
-  TH1F* histocharm7=filecharm.Get("charm_1orMoreVTX_significance3d_histo");
-  TH1F* histocharm8=filecharm.Get("charm_1orMoreVTX_2TrackVTX_mass_histo");
-  TH1F* histocharm9=filecharm.Get("charm_1orMoreVTX_3orMoreTrackVTX_mass_histo");
-  TH1F* histolight1=filelight.Get("light_noVTX_significance3d_histo");
-  TH1F* histolight2=filelight.Get("light_noVTX_1SingleTrack_energyFraction_normal_histo");
-  TH1F* histolight3=filelight.Get("light_noVTX_2orMoreSingleTrack_energyFraction_normal_histo");
-  TH1F* histolight4=filelight.Get("light_1orMoreVTX_2TrackVTX_energyFraction_normal_histo");
-  TH1F* histolight5=filelight.Get("light_1orMoreVTX_3TrackVTX_energyFraction_normal_histo");
-  TH1F* histolight6=filelight.Get("light_1orMoreVTX_4orMoreTrackVTX_energyFraction_normal_histo");
-  TH1F* histolight7=filelight.Get("light_1orMoreVTX_significance3d_histo");
-  TH1F* histolight8=filelight.Get("light_1orMoreVTX_2TrackVTX_mass_histo");
-  TH1F* histolight9=filelight.Get("light_1orMoreVTX_3orMoreTrackVTX_mass_histo");
-  histobottom1->Write();
-  histobottom2->Write();
-  histobottom3->Write();
-  histobottom4->Write();
-  histobottom5->Write();
-  histobottom6->Write();
-  histobottom7->Write();
-  histobottom8->Write();
-  histobottom9->Write();
-  histocharm1->Write();
-  histocharm2->Write();
-  histocharm3->Write();
-  histocharm4->Write();
-  histocharm5->Write();
-  histocharm6->Write();
-  histocharm7->Write();
-  histocharm8->Write();
-  histocharm9->Write();
-  histolight1->Write();
-  histolight2->Write();
-  histolight3->Write();
-  histolight4->Write();
-  histolight5->Write();
-  histolight6->Write();
-  histolight7->Write();
-  histolight8->Write();
-  histolight9->Write();
-  fileoutput.Write();
-}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/writeNtuple.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/writeNtuple.cxx
deleted file mode 100644
index e436af4afa7e7a35489670d04942db569f5bda1c..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/likelihoodRoot/writeNtuple.cxx
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "readBTag.h"
-#include "readParticleJetTree.h"
-#include <TTree.h>
-#include <iostream>
-#include <TMath.h>
-
-using namespace std;
-
-int writeNtuple(void) {
-
-  cout << "starting" << endl;
-
-  readParticleJetTree* t=new readParticleJetTree();
-  readBTag* myBTag=new readBTag();
-  
-
-  Int_t nVTX;
-  Int_t nTracksAtVtx;
-  Int_t nSingleTracks;
-  Float_t energyFraction;
-  Float_t mass;
-  Float_t significance3d;
-  Int_t cat_nVTX;
-  Int_t cat_nTracksAtVtx;
-  Int_t cat_nSingleTracks;
-  Int_t cat_flavour;
-  Float_t IP3dlike;
-  Float_t IPlikecombold;
-  Int_t cat_oneVTX;
-  Float_t pT;
-  Float_t eta;
-  
-//  Int_t cat_twoTracks;
-  
-
-
-  const double s_pion=139.57018;
-
-  TFile *file=new TFile("simpleTree.root","recreate");
-  
-  TTree* myTree=new TTree("SVTree","SVTree");
-  
-  myTree->Branch("nVTX",&nVTX,"nVTX/I");
-  myTree->Branch("nTracksAtVtx",&nTracksAtVtx,"nTracksAtVtx/I");
-  myTree->Branch("nSingleTracks",&nSingleTracks,"nSingleTracks/I");
-  myTree->Branch("energyFraction",&energyFraction,"energyFraction/F");
-  myTree->Branch("mass",&mass,"mass/F");
-  myTree->Branch("significance3d",&significance3d,"significance3d/F");
-  myTree->Branch("cat_nVTX",&cat_nVTX,"cat_nVTX/I");
-  myTree->Branch("cat_nTracksAtVtx",&cat_nTracksAtVtx,"cat_nTracksAtVtx/I");
-  myTree->Branch("cat_nSingleTracks",&cat_nSingleTracks,"cat_nSingleTracks/I");
-  myTree->Branch("cat_flavour",&cat_flavour,"cat_flavour/I");
-  myTree->Branch("IP3dlike",&IP3dlike,"IP3dlike/F");
-  myTree->Branch("IPlikecombold",&IPlikecombold,"IPlikecombold/F");
-  myTree->Branch("cat_oneVTX",&cat_oneVTX,"cat_oneVTX/I");
-  myTree->Branch("pT",&pT,"pT/F");
-  myTree->Branch("eta",&eta,"eta/F");
-//  myTree->Branch("cat_twoTracks",&cat_twoTracks,"cat_twoTracks/I");
-  
-
-
-  Int_t num_entries=t->fChain->GetEntries();
-  
-  if (num_entries!=myBTag->fChain->GetEntries()) {
-    throw;
-  }
-
-  cout << "Total entries are: " << num_entries << endl;
-  for (Int_t i=0;i<num_entries;i++) {
-
-//    std::cout << " get entry " << i << std::endl;
-    myBTag->GetEntry(i);
-    IP3dlike=myBTag->WeightIP3D;
-    IPlikecombold=myBTag->Discriminator;
-//    std::cout << " finished get entry" << IP3dlike << " " << IPlikecombold << std::endl;
-   
-      
-    //    cout << " IP3dlike " << IP3dlike << endl;
-    
-    if (i % 10000 == 0 ) {
-      std::cout << " processing event number " << i << std::endl;
-    }
-
-    t->GetEntry(i);
-    cat_flavour=(Int_t)t->m_jet_flavour;
-    
-    // energy from primary vertex
-
-    if (fabs(t->m_jet_momentum_eta)<2.5&&t->m_jet_momentum_pt>15000.) {
-
-      eta=t->m_jet_momentum_eta;
-      pT=t->m_jet_momentum_pt;
-      
-    double primaryVertexEnergy=0;
-    
-    for (int j=0;j<t->number_primary;++j) {
-      
-      if (fabs(t->primary_IPd0[j])<3.5&&
-          fabs(t->primary_IPz0[j])<5.&&
-          t->primary_pT[j]>500.) 
-      {
-        primaryVertexEnergy+=TMath::Sqrt(t->primary_p[j]*t->primary_p[j]+s_pion*s_pion);
-      }
-      
-    }
-    
-    for (int o=0;o<t->neutral_particle_number;++o) 
-    {
-      if (t->neutral_particle_forIP[o]>0
-          &&
-          TMath::Sqrt(fabs(t->neutral_particle_IPchi2[o]))<3)
-      {
-        primaryVertexEnergy+=TMath::Sqrt(t->neutral_particle_mass[o]*
-                                         t->neutral_particle_mass[o]+
-                                         1./t->neutral_particle_qOverP[o]*
-                                         1./t->neutral_particle_qOverP[o]);
-      }
-    }
-    
-    primaryVertexEnergy+=t->jetVTXfit_energyFromPrimaryVtx;
-
-
-      
- 
-      nVTX=0;
-      nSingleTracks=0;
-
-     for (int q=0;q<t->jetVTXfit_clusternum;q++) 
-    {
-      if (t->jetVTXfit_dist[q]>0)
-      {
-        if (t->jetVTXfit_ntracks[q]>1)
-        {
-          nVTX+=1;
-        }
-        else
-        {
-          nSingleTracks+=1;
-        }
-      }
-    }
-
-
-      cat_nVTX=nVTX;
-      cat_nSingleTracks=nSingleTracks;
-
-      nTracksAtVtx=0;
-      energyFraction=0.;
-
-      for (int u=0;u<t->jetVTXfit_clusternum;++u) {
-        if (t->jetVTXfit_dist[u]>0) 
-        {
-          
-          if (t->jetVTXfit_ntracks[u]>1) {
-            nTracksAtVtx+=t->jetVTXfit_ntracks[u];
-
-          }
-
-          if (nVTX>0)
-          {
-            nTracksAtVtx+=t->jetVTXfit_nNeutracks[u];
-          }
-          //    if (t->jetVTXfit_ntracks[u]>1||nVTX==0) {
-//          if (t->jetVTXfit_ntracks[u]>1||nVTX==0) {
-          energyFraction+=TMath::Sqrt(t->jetVTXfit_p[u]*t->jetVTXfit_p[u]+
-                                      t->jetVTXfit_mass[u]*t->jetVTXfit_mass[u]);
-//                                      t->jetVTXfit_massWithNeu[u]*t->jetVTXfit_massWithNeu[u]);
-//            std::cout << " energy from sec: " << energyFraction << std::endl;
-            //}
-        }
-      }
-      
-      if (energyFraction+primaryVertexEnergy>0) {
-        energyFraction=energyFraction/(energyFraction+primaryVertexEnergy);
-      }
-      
-      cat_nTracksAtVtx=nTracksAtVtx;
-      mass=0.;
-      significance3d=0.;
-      if (nVTX>0) {
-	Float_t px(0.);
-	Float_t py(0.);
-	Float_t pz(0.);
-	Float_t dist(0.);
-	Float_t inverror(0.);
-	Float_t e(0.);
-	for (int u=0;u<t->jetVTXfit_clusternum;++u) {
-          if (t->jetVTXfit_dist[u]>0) 
-          {
-	  if (t->jetVTXfit_ntracks[u]>1) {
-	    dist+=t->jetVTXfit_dist[u]/t->jetVTXfit_errdist[u]/t->jetVTXfit_errdist[u];
-	    inverror+=1./t->jetVTXfit_errdist[u]/t->jetVTXfit_errdist[u];
-          }
-          px+=t->jetVTXfit_px[u];
-          py+=t->jetVTXfit_py[u];
-          pz+=t->jetVTXfit_pz[u];
-          e+=TMath::Sqrt(t->jetVTXfit_p[u]*t->jetVTXfit_p[u]+t->jetVTXfit_mass[u]*t->jetVTXfit_mass[u]);
-          }
-	}
-	if (e*e-px*px-py*py-pz*pz>0.) {
-	  mass=TMath::Sqrt(e*e-px*px-py*py-pz*pz);
-	  if (mass>5000.) {
-	    Double_t touse=mass-5000.;
-	    Double_t pi=TMath::Pi();
-	    mass = 5000.+5000./pi*2.*TMath::ATan(pi/2./5000.*touse);
-	  }
-	}
-        if (inverror>0) 
-        {
-          significance3d=dist/TMath::Sqrt(inverror);
-          significance3d=100./(TMath::Pi()/2.)*TMath::ATan(TMath::Pi()/2./100.*significance3d);
-        }
-        
-	//	}
-      } else {
-	Float_t px(0.);
-	Float_t py(0.);
-	Float_t pz(0.);
-	Float_t e(0.);
-	Float_t dist(0.);
-	Float_t inverror(0.);
-	for (int u=0;u<t->jetVTXfit_clusternum;++u) {
-          if (t->jetVTXfit_dist[u]>0) 
-          {
-            
-	  if (t->jetVTXfit_ntracks[u]==1) {
-	    dist+=t->jetVTXfit_dist[u]/t->jetVTXfit_errdist[u]/t->jetVTXfit_errdist[u];
-	    inverror+=1./t->jetVTXfit_errdist[u]/t->jetVTXfit_errdist[u];
-	    px+=t->jetVTXfit_px[u];
-	    py+=t->jetVTXfit_py[u];
-	    pz+=t->jetVTXfit_pz[u];
-	    e+=TMath::Sqrt(t->jetVTXfit_p[u]*t->jetVTXfit_p[u]+t->jetVTXfit_mass[u]*t->jetVTXfit_mass[u]);
-	  } else {
-	    //	    throw;
-	    std::cout << "ERRORE " << std::endl;
-	  }
-          }
-          
-	}
-	if (t->jetVTXfit_clusternum>0) {
-	  significance3d=dist/TMath::Sqrt(inverror);
-	  significance3d=100./(TMath::Pi()/2.)*TMath::ATan(TMath::Pi()/2./100.*significance3d);
-	}
-	if (e*e-px*px-py*py-pz*pz>0.) {
-	  mass=TMath::Sqrt(e*e-px*px-py*py-pz*pz);
-	  if (mass>5000.) {
-	    Double_t touse=mass-5000.;
-	    Double_t pi=TMath::Pi();
-	    mass = 5000.+5000./pi*2.*TMath::ATan(pi/2./5000.*touse);
-	  }
-	}
-      }
-      
-      //      if (nVTX>0) {
-
-      if (nVTX==0) 
-      {
-        if (nSingleTracks<2) 
-        {
-          cat_oneVTX=0;
-        }
-        else
-        {
-          cat_oneVTX=1;
-        }
-      }
-      else
-      {
-        if (nSingleTracks+nTracksAtVtx==2) 
-        {
-          cat_oneVTX=2;
-        }
-        else if (nSingleTracks+nTracksAtVtx==3)
-        {
-          cat_oneVTX=3;
-        }
-        else if (nSingleTracks+nTracksAtVtx>3)
-        {
-          cat_oneVTX=4;
-        }
-        else
-        {
-          std::cout <<" WRONG " << std::endl;
-        }
-        
-      }
-      
-        
-
-
-      myTree->Fill();
-      //      }
-    }
-  }
-  myTree->Write();
-  file->Write();
-}
-  
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/prepareFinalCalibrationFiles/doCalibrationForCOOL.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/prepareFinalCalibrationFiles/doCalibrationForCOOL.C
deleted file mode 100644
index a67194eba817fe9a489e4b78e1e99a7b29804fb7..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/prepareFinalCalibrationFiles/doCalibrationForCOOL.C
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-{
-
-gSystem->Load("../jetnetRoot/libTJetNet.so");
-gSystem->Load("prepareCalibrationFileForCOOL_C.so");
-prepareCalibrationFileForCOOL(true);
-
-}
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/prepareFinalCalibrationFiles/prepareCalibrationFileForCOOL.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/prepareFinalCalibrationFiles/prepareCalibrationFileForCOOL.C
deleted file mode 100644
index dd33d0b2f1c110453a241dadb67696e2ebe979de..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/prepareFinalCalibrationFiles/prepareCalibrationFileForCOOL.C
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "../preparedatasets/collectionsToProcess.h"
-#include <TFile.h>
-#include <TH1.h>
-#include "../jetnetRoot/TNetworkToHistoTool.h"
-#include "../jetnetRoot/TTrainedNetwork.h"
-#include <vector>
-
-using namespace std;
-
-void prepareCalibrationFileForCOOL(bool withLikelihood=false,
-                                   TString calibrationFileName="../finalCalibFile/BTaggingCalibV2_JetFitter",
-                                   TString mainDirectoryName="../trainingResultsJetNet",
-                                   TString tagToUse="NeuralNetwork",
-                                   TString tagToUseForLikelihood="RooFitLikelihood",
-                                   TString likelihoodPDFDir="../trainingResultsLikelihoodHistos",
-                                   TString likelihoodCoefDir="../trainingResultsLikelihood")
-{
-
-
-  TNetworkToHistoTool networkToHisto;
-
-  vector<TString> collectionsToProcess=getCollectionsToProcess();
-  
-  vector<TString>::const_iterator collectionsToProcessBegin=collectionsToProcess.begin();
-  vector<TString>::const_iterator collectionsToProcessEnd=collectionsToProcess.end();
-  
-  for (vector<TString>::const_iterator collectionsToProcessIter=collectionsToProcessBegin;
-       collectionsToProcessIter!=collectionsToProcessEnd;
-       ++collectionsToProcessIter) 
-  {
-
-
-    
-    TString calibrationFileToWrite(calibrationFileName);
-    calibrationFileToWrite+="_";
-    calibrationFileToWrite+=*collectionsToProcessIter;
-    calibrationFileToWrite+=".root";
-
-    cout << " Writing calibration file: " << calibrationFileToWrite << endl;
-    TFile* calibrationFile=new TFile(calibrationFileToWrite,"recreate");
-  
-    calibrationFile->cd("/");
-
-    TString calibrationFileToTake=*collectionsToProcessIter;
-//    if (calibrationFileToTake=="Cone7H1TowerParticleJets")
-//    {
-//      calibrationFileToTake="Cone7H1TopoParticleJets";
-//    }
-    if (calibrationFileToTake=="Cone7H1TowerJets")
-    {
-      continue;
-    }
-    
-    calibrationFile->cd("/");
-    gDirectory->mkdir(tagToUse);
-    gDirectory->cd(tagToUse);
-
-    if (withLikelihood)
-    {
-      gDirectory->cd("/");
-      gDirectory->mkdir(tagToUseForLikelihood);
-    }
-
-
-    TString histoDirBase=mainDirectoryName+"/"+calibrationFileToTake+"/";
-
-    //now first work on combined with IP3
-    gDirectory->cd("/"+tagToUse);
-
-    gDirectory->mkdir("comb");
-    gDirectory->cd("comb");
-
-    TString inputRootFileName=histoDirBase+"comb/weights/weightMinimum.root";
-
-    cout << " Considering " << inputRootFileName << endl;
-
-    TFile* actualFile=new TFile(inputRootFileName);
-    TTrainedNetwork* myNetwork=(TTrainedNetwork*)actualFile->Get("TTrainedNetwork");
-    
-    cout << " Hidden Layers: " << myNetwork->getnHidden() << endl;
-    std::vector<TH1*> histoVector=networkToHisto.fromTrainedNetworkToHisto(myNetwork);
-
-    calibrationFile->cd("/"+tagToUse+"/comb/");
-
-    std::vector<TH1*>::const_iterator histoBegin=histoVector.begin();
-    std::vector<TH1*>::const_iterator histoEnd=histoVector.end();
-    
-    for (std::vector<TH1*>::const_iterator histoIter=histoBegin;histoIter!=histoEnd;
-         ++histoIter)
-    {
-
-      cout << " Iterator pointer: " << *histoIter << endl;
-      if ((*histoIter)->GetName()!="TObject")
-      {
-        cout << "--> writing out  histogram: " << (*histoIter)->GetName() << endl;
-        (*histoIter)->Write();
-      }
-      
-    }
-
-
-    //now first work on combined with IP3D
-    gDirectory->cd("/"+tagToUse);
-    gDirectory->mkdir("standalone");
-    gDirectory->cd("standalone");
-
-    inputRootFileName=histoDirBase+"standalone/weights/weightMinimum.root";
-
-    cout << " Considering " << inputRootFileName << endl;
-
-    TFile* actualFile2=new TFile(inputRootFileName);
-    myNetwork=(TTrainedNetwork*)actualFile2->Get("TTrainedNetwork");
-    histoVector=networkToHisto.fromTrainedNetworkToHisto(myNetwork);
-
-    calibrationFile->cd("/"+tagToUse+"/standalone/");
-
-    histoBegin=histoVector.begin();
-    histoEnd=histoVector.end();
-    
-    for (std::vector<TH1*>::const_iterator histoIter=histoBegin;histoIter!=histoEnd;
-         ++histoIter)
-    {
-     if ((*histoIter)->GetName()!="TObject")
-     {
-       cout << "--> writing out  histogram: " << (*histoIter)->GetName() << endl;
-       (*histoIter)->Write();
-     }
-    }
-
-//likelihoodPDFDir
-//likelihoodCoefDir
-
-    std::vector<TString> flavours;
-    flavours.push_back("bottom");
-    flavours.push_back("charm");
-    flavours.push_back("light");
-    
-
-    if (withLikelihood)
-    {
-      TString histoDirBasePDFs=likelihoodPDFDir+"/"+calibrationFileToTake+"/trainingResultsLikelihood/smoothedhistos_"+calibrationFileToTake+"_";
-//      gDirectory->cd("/"+tagToUseForLikelihood);
-        
-      for (std::vector<TString>::const_iterator iterFlavour=flavours.begin();iterFlavour!=flavours.end();++iterFlavour)
-      {
-
-        TString inputLikelihoodHistoFileName=histoDirBasePDFs+*iterFlavour+".root";
-      
-        cout << " Considering for likelihood " << inputLikelihoodHistoFileName << endl;
-
-        TFile* actualHistoFile=new TFile(inputLikelihoodHistoFileName);
-      
-        TList* myHistoList=gDirectory->GetListOfKeys();
-      
-        TIterator* myHistoListIterator=myHistoList->MakeIterator();
-      
-        do
-        {
-          actualHistoFile->cd("/");
-          TObject* next=myHistoListIterator->Next();
-          if (next==0) break;
-          if (gDirectory->Get(next->GetName())->ClassName()==TString("TH1F"))
-          {
-            TH1F* myHisto=(TH1F*)gDirectory->Get(next->GetName());
-            cout << " Writing out histogram: " << next->GetName() << endl;
-            calibrationFile->cd("/"+tagToUseForLikelihood);
-            myHisto->Write();
-          } else 
-          {
-            cout << " Cannot cast to a TH1F " << endl;
-          }
-        }
-        while (true);
-
-        actualHistoFile->Close();
-        delete actualHistoFile;
-        actualHistoFile=0;
-
-      }//end flavour loop
-
-      
-      TString histoDirBaseCoef=likelihoodCoefDir+"/coefficientsHistos_"+calibrationFileToTake;
-      gDirectory->cd("/"+tagToUseForLikelihood);
-        
-      TString inputLikelihoodCoefFileName=histoDirBaseCoef+".root";
-      
-      cout << " Considering for likelihood " << inputLikelihoodCoefFileName << endl;
-
-      TFile* actualCoefFile=new TFile(inputLikelihoodCoefFileName);
-      
-      TList* myCoefList=gDirectory->GetListOfKeys();
-      
-      TIterator* myCoefListIterator=myCoefList->MakeIterator();
-      
-      do
-      {
-        actualCoefFile->cd("/");
-        TObject* next=myCoefListIterator->Next();
-        if (next==0) break;
-        if (gDirectory->Get(next->GetName())->ClassName()==TString("TH1D"))
-        {
-          TH1D* myHisto=(TH1D*)gDirectory->Get(next->GetName());
-          cout << " Writing out histogram: " << next->GetName() << endl;
-          calibrationFile->cd("/"+tagToUseForLikelihood);
-          myHisto->Write();
-        } else 
-        {
-          cout << " Cannot cast to a TH1D " << endl;
-        }
-      }
-      while (true);
-
-      
-      actualCoefFile->Close();
-      delete actualCoefFile;
-      actualCoefFile=0;
-    }
-    
-
-
-    //now close collection file
-    calibrationFile->Write();
-    calibrationFile->Close();
-    delete calibrationFile;
-    calibrationFile=0;
-
-  }//end collections
-
-}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/collectionsToProcess.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/collectionsToProcess.h
deleted file mode 100644
index 3309218a1b10d14e7cef167260c9a0c176844c4a..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/collectionsToProcess.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include <vector>
-#include <TString.h>
-
-using namespace std;
-
-vector<TString> getCollectionsToProcess() 
-{
-  
-  vector<TString> collectionsToProcess;
-  
-  //collectionsToProcess.push_back("Cone4H1TowerParticleJets");
-  //collectionsToProcess.push_back("Cone7H1TowerParticleJets");
-  //collectionsToProcess.push_back("Kt6H1TowerParticleJets");
-  //collectionsToProcess.push_back("Kt4H1TowerParticleJets");
-
-  collectionsToProcess.push_back("Cone4H1TopoJets");
-  collectionsToProcess.push_back("Cone7LCTopoJets");
-  collectionsToProcess.push_back("Kt4LCTopoJets");
-  collectionsToProcess.push_back("Kt6LCTopoJets");
-
-  collectionsToProcess.push_back("Cone4H1TowerJets");
- collectionsToProcess.push_back("Cone7H1TowerJets");
-
-  collectionsToProcess.push_back("Kt4TruthJets");
-  collectionsToProcess.push_back("Kt6TruthJets");
-  collectionsToProcess.push_back("Cone7TruthJets");
-  collectionsToProcess.push_back("Cone4TruthJets");
-
-  
-  return collectionsToProcess;
-  
-}
-
-vector<TString> getAllCollections() 
-{
-  
-  vector<TString> collectionsToProcess;
-  
-  collectionsToProcess.push_back("Cone4H1TowerParticleJets");
-  collectionsToProcess.push_back("Cone7H1TowerParticleJets");
-  collectionsToProcess.push_back("Kt6H1TowerParticleJets");
-  collectionsToProcess.push_back("Kt4H1TowerParticleJets");
-
-  collectionsToProcess.push_back("Cone4H1TopoParticleJets");
-  collectionsToProcess.push_back("Cone7H1TopoParticleJets");
-  collectionsToProcess.push_back("Kt6H1TopoParticleJets");
-  collectionsToProcess.push_back("Kt4H1TopoParticleJets");
-
-  collectionsToProcess.push_back("Cone4TruthParticleJets");
-  collectionsToProcess.push_back("Cone7TruthParticleJets");
-  collectionsToProcess.push_back("Kt6TruthParticleJets");
-  collectionsToProcess.push_back("Kt4TruthParticleJets");
-  
-
-//  collectionsToProcess.push_back("Cone4H1TowerParticleJets");
-
-  return collectionsToProcess;
-  
-}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/getPtEtaCategoryLikelihood.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/getPtEtaCategoryLikelihood.h
deleted file mode 100644
index b283abab04755963a084214985d717ea3fdd93ae..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/getPtEtaCategoryLikelihood.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include <vector>
-#include <utility>
-#include <math.h>
-
-using namespace std;
-
-pair<int,double> getPtCategory(double Pt)
-{
-
-  double correctionfactor=1.;
-  int actualpT=-1;
-  double interval=1;
-  
-  if (fabs(Pt)<25*correctionfactor){
-    actualpT=0;
-  } else if (fabs(Pt)>=25*correctionfactor&&fabs(Pt)<35*correctionfactor) {
-    actualpT=1;
-//    interval=5;
-  } else if (fabs(Pt)>=35*correctionfactor&&fabs(Pt)<50*correctionfactor) {
-    actualpT=2;
-//    interval=15;
-  } else if (fabs(Pt)>=50*correctionfactor&&fabs(Pt)<80*correctionfactor) {
-    actualpT=3;
-//    interval=20;
-  } else if (fabs(Pt)>=80*correctionfactor&&fabs(Pt)<120*correctionfactor) {
-    actualpT=4;
-//    interval=40;
-  } else if (fabs(Pt)>=120*correctionfactor&&fabs(Pt)<200*correctionfactor) {
-    actualpT=5;
-//    interval=65/2;
-  } else if (fabs(Pt)>=200*correctionfactor) {
-    actualpT=6;
-//    interval=200/6;
-  }
-
-  return pair<int,double>(actualpT,interval);
-}
-
-pair<int,double> getEtaCategory(double eta)
-{
-
-  int actualeta=-1;
-  double interval=1;
-  
-  if (fabs(eta)>1.5){
-    actualeta=2;
-//    interval=2.;
-  } else if (fabs(eta)>=0.7&&fabs(eta)<1.5){
-    actualeta=1;
-//    interval=1.;
-  } else {
-    actualeta=0;
-//    interval=0.6;
-  }
-  
-  return pair<int,double>(actualeta,interval);
-}
-
-int getNPtBins()
-{
-  return 7;
-}
-
-int getNEtaBins()
-{
-  return 3;
-}
-
- 
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/prepareAllNtuplesForLikelihood.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/prepareAllNtuplesForLikelihood.C
deleted file mode 100644
index 180df20dc13a741607fb4a3590ad787b24c3dd8f..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/prepareAllNtuplesForLikelihood.C
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-{
-gROOT->ProcessLine(".L readJFBTagAna.C+");
-gROOT->ProcessLine(".L readBaseBTagAnaTree.C+");
-gROOT->ProcessLine(".L writeNtuple_Official.cxx+");
-gROOT->ProcessLine(".L writeNtupleAll.C+");
-
-writeAllNtuples("../datasets/all.root",false);
-
-}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/prepareAllNtuplesForNN.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/prepareAllNtuplesForNN.C
deleted file mode 100644
index 9d19a20968b7a559d20b4cb292425580de01bd9f..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/prepareAllNtuplesForNN.C
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-{
-gROOT->ProcessLine(".L readJFBTagAna.C+");
-gROOT->ProcessLine(".L readBaseBTagAnaTree.C+");
-gROOT->ProcessLine(".L writeNtuple_Official.cxx+");
-gROOT->ProcessLine(".L writeNtupleAll.C+");
-
-writeAllNtuples("../datasets/all.root",true);
-
-}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readBaseBTagAnaTree.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readBaseBTagAnaTree.C
deleted file mode 100644
index 3e355bb3cb9b263e196dae528ed340e86e800e27..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readBaseBTagAnaTree.C
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#define readBaseBTagAnaTree_cxx
-#include "readBaseBTagAnaTree.h"
-#include <TH2.h>
-#include <TStyle.h>
-#include <TCanvas.h>
-
-void readBaseBTagAnaTree::Loop()
-{
-//   In a ROOT session, you can do:
-//      Root > .L readBaseBTagAnaTree.C
-//      Root > readBaseBTagAnaTree t
-//      Root > t.GetEntry(12); // Fill t data members with entry number 12
-//      Root > t.Show();       // Show values of entry 12
-//      Root > t.Show(16);     // Read and show values of entry 16
-//      Root > t.Loop();       // Loop on all entries
-//
-
-//     This is the loop skeleton where:
-//    jentry is the global entry number in the chain
-//    ientry is the entry number in the current Tree
-//  Note that the argument to GetEntry must be:
-//    jentry for TChain::GetEntry
-//    ientry for TTree::GetEntry and TBranch::GetEntry
-//
-//       To read only selected branches, Insert statements like:
-// METHOD1:
-//    fChain->SetBranchStatus("*",0);  // disable all branches
-//    fChain->SetBranchStatus("branchname",1);  // activate branchname
-// METHOD2: replace line
-//    fChain->GetEntry(jentry);       //read all branches
-//by  b_branchname->GetEntry(ientry); //read only this branch
-   if (fChain == 0) return;
-
-   Long64_t nentries = fChain->GetEntriesFast();
-
-   Long64_t nbytes = 0, nb = 0;
-   for (Long64_t jentry=0; jentry<nentries;jentry++) {
-      Long64_t ientry = LoadTree(jentry);
-      if (ientry < 0) break;
-      nb = fChain->GetEntry(jentry);   nbytes += nb;
-      // if (Cut(ientry) < 0) continue;
-   }
-}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readBaseBTagAnaTree.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readBaseBTagAnaTree.h
deleted file mode 100644
index 44b5d800f5ae1219d1d4c4951f6b88749b3b68f8..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readBaseBTagAnaTree.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-//////////////////////////////////////////////////////////
-// This class has been automatically generated on
-// Fri Feb  8 11:44:02 2008 by ROOT version 5.18/00
-// from TTree PerfTreeAll/Performance Tree for All
-// found on file: all5212.root
-//////////////////////////////////////////////////////////
-
-#ifndef readBaseBTagAnaTree_h
-#define readBaseBTagAnaTree_h
-
-#include <TROOT.h>
-#include <TChain.h>
-#include <TFile.h>
-
-class readBaseBTagAnaTree {
-public :
-   TTree          *fChain;   //!pointer to the analyzed TTree or TChain
-   Int_t           fCurrent; //!current Tree number in a TChain
-
-   // Declaration of leaf types
-   Int_t           Flavour;
-   Double_t        DeltaRtoBorCorTau;
-   Double_t        Discriminator;
-   Double_t        JetMomentum;
-   Double_t        JetPt;
-   Double_t        JetEta;
-   Double_t        JetPhi;
-
-   // List of branches
-   TBranch        *b_Flavour;   //!
-   TBranch        *b_DeltaRtoBorCorTau;   //!
-   TBranch        *b_Discriminator;   //!
-   TBranch        *b_JetMomentum;   //!
-   TBranch        *b_JetPt;   //!
-   TBranch        *b_JetEta;   //!
-   TBranch        *b_JetPhi;   //!
-
-   readBaseBTagAnaTree(TTree *tree=0);
-   virtual ~readBaseBTagAnaTree();
-   virtual Int_t    Cut(Long64_t entry);
-   virtual Int_t    GetEntry(Long64_t entry);
-   virtual Long64_t LoadTree(Long64_t entry);
-   virtual void     Init(TTree *tree);
-   virtual void     Loop();
-   virtual Bool_t   Notify();
-   virtual void     Show(Long64_t entry = -1);
-};
-
-#endif
-
-#ifdef readBaseBTagAnaTree_cxx
-readBaseBTagAnaTree::readBaseBTagAnaTree(TTree *tree)
-{
-// if parameter tree is not specified (or zero), connect the file
-// used to generate this class and read the Tree.
-   if (tree == 0) {
-      TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject("all5212.root");
-      if (!f) {
-         f = new TFile("all5212.root");
-      }
-      tree = (TTree*)gDirectory->Get("PerfTreeAll");
-
-   }
-   Init(tree);
-}
-
-readBaseBTagAnaTree::~readBaseBTagAnaTree()
-{
-   if (!fChain) return;
-   delete fChain->GetCurrentFile();
-}
-
-Int_t readBaseBTagAnaTree::GetEntry(Long64_t entry)
-{
-// Read contents of entry.
-   if (!fChain) return 0;
-   return fChain->GetEntry(entry);
-}
-Long64_t readBaseBTagAnaTree::LoadTree(Long64_t entry)
-{
-// Set the environment to read one entry
-   if (!fChain) return -5;
-   Long64_t centry = fChain->LoadTree(entry);
-   if (centry < 0) return centry;
-   if (!fChain->InheritsFrom(TChain::Class()))  return centry;
-   TChain *chain = (TChain*)fChain;
-   if (chain->GetTreeNumber() != fCurrent) {
-      fCurrent = chain->GetTreeNumber();
-      Notify();
-   }
-   return centry;
-}
-
-void readBaseBTagAnaTree::Init(TTree *tree)
-{
-   // The Init() function is called when the selector needs to initialize
-   // a new tree or chain. Typically here the branch addresses and branch
-   // pointers of the tree will be set.
-   // It is normally not necessary to make changes to the generated
-   // code, but the routine can be extended by the user if needed.
-   // Init() will be called many times when running on PROOF
-   // (once per file to be processed).
-
-   // Set branch addresses and branch pointers
-   if (!tree) return;
-   fChain = tree;
-   fCurrent = -1;
-   fChain->SetMakeClass(1);
-
-   fChain->SetBranchAddress("Flavour", &Flavour, &b_Flavour);
-   fChain->SetBranchAddress("DeltaRtoBorCorTau", &DeltaRtoBorCorTau, &b_DeltaRtoBorCorTau);
-   fChain->SetBranchAddress("Discriminator", &Discriminator, &b_Discriminator);
-   fChain->SetBranchAddress("JetMomentum", &JetMomentum, &b_JetMomentum);
-   fChain->SetBranchAddress("JetPt", &JetPt, &b_JetPt);
-   fChain->SetBranchAddress("JetEta", &JetEta, &b_JetEta);
-   fChain->SetBranchAddress("JetPhi", &JetPhi, &b_JetPhi);
-   Notify();
-}
-
-Bool_t readBaseBTagAnaTree::Notify()
-{
-   // The Notify() function is called when a new file is opened. This
-   // can be either for a new TTree in a TChain or when when a new TTree
-   // is started when using PROOF. It is normally not necessary to make changes
-   // to the generated code, but the routine can be extended by the
-   // user if needed. The return value is currently not used.
-
-   return kTRUE;
-}
-
-void readBaseBTagAnaTree::Show(Long64_t entry)
-{
-// Print contents of entry.
-// If entry is not specified, print current entry
-   if (!fChain) return;
-   fChain->Show(entry);
-}
-Int_t readBaseBTagAnaTree::Cut(Long64_t entry)
-{
-// This function may be called from Loop.
-// returns  1 if entry is accepted.
-// returns -1 otherwise.
-   return 1;
-}
-#endif // #ifdef readBaseBTagAnaTree_cxx
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readJFBTagAna.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readJFBTagAna.C
deleted file mode 100644
index 0bad72e11fe7da545b01fd4dcda8526f3ddb5ebf..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readJFBTagAna.C
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#define readJFBTagAna_cxx
-#include "readJFBTagAna.h"
-#include <TH2.h>
-#include <TStyle.h>
-#include <TCanvas.h>
-
-void readJFBTagAna::Loop()
-{
-//   In a ROOT session, you can do:
-//      Root > .L readJFBTagAna.C
-//      Root > readJFBTagAna t
-//      Root > t.GetEntry(12); // Fill t data members with entry number 12
-//      Root > t.Show();       // Show values of entry 12
-//      Root > t.Show(16);     // Read and show values of entry 16
-//      Root > t.Loop();       // Loop on all entries
-//
-
-//     This is the loop skeleton where:
-//    jentry is the global entry number in the chain
-//    ientry is the entry number in the current Tree
-//  Note that the argument to GetEntry must be:
-//    jentry for TChain::GetEntry
-//    ientry for TTree::GetEntry and TBranch::GetEntry
-//
-//       To read only selected branches, Insert statements like:
-// METHOD1:
-//    fChain->SetBranchStatus("*",0);  // disable all branches
-//    fChain->SetBranchStatus("branchname",1);  // activate branchname
-// METHOD2: replace line
-//    fChain->GetEntry(jentry);       //read all branches
-//by  b_branchname->GetEntry(ientry); //read only this branch
-   if (fChain == 0) return;
-
-   Long64_t nentries = fChain->GetEntriesFast();
-
-   Long64_t nbytes = 0, nb = 0;
-   for (Long64_t jentry=0; jentry<nentries;jentry++) {
-      Long64_t ientry = LoadTree(jentry);
-      if (ientry < 0) break;
-      nb = fChain->GetEntry(jentry);   nbytes += nb;
-      // if (Cut(ientry) < 0) continue;
-   }
-}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readJFBTagAna.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readJFBTagAna.h
deleted file mode 100644
index 167ee3978851de91a89dc0205cbb026a51fc9e3c..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/readJFBTagAna.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-//////////////////////////////////////////////////////////
-// This class has been automatically generated on
-// Fri Feb  8 11:45:23 2008 by ROOT version 5.18/00
-// from TTree PerfTreeAll/Performance Tree for All
-// found on file: all5212.root
-//////////////////////////////////////////////////////////
-
-#ifndef readJFBTagAna_h
-#define readJFBTagAna_h
-
-#include <TROOT.h>
-#include <TChain.h>
-#include <TFile.h>
-
-class readJFBTagAna {
-public :
-   TTree          *fChain;   //!pointer to the analyzed TTree or TChain
-   Int_t           fCurrent; //!current Tree number in a TChain
-
-   // Declaration of leaf types
-   Int_t           Flavour;
-   Double_t        DeltaRtoBorCorTau;
-   Double_t        Discriminator;
-   Double_t        JetMomentum;
-   Double_t        JetPt;
-   Double_t        JetEta;
-   Double_t        JetPhi;
-   Int_t           nVTX;
-   Int_t           nTracksAtVtx;
-   Int_t           nSingleTracks;
-   Double_t        energyFraction;
-   Double_t        mass;
-   Double_t        significance3d;
-   Double_t        deltaphi;
-   Double_t        deltaeta;
-
-   // List of branches
-   TBranch        *b_Flavour;   //!
-   TBranch        *b_DeltaRtoBorCorTau;   //!
-   TBranch        *b_Discriminator;   //!
-   TBranch        *b_JetMomentum;   //!
-   TBranch        *b_JetPt;   //!
-   TBranch        *b_JetEta;   //!
-   TBranch        *b_JetPhi;   //!
-   TBranch        *b_nVTX;   //!
-   TBranch        *b_nTracksAtVtx;   //!
-   TBranch        *b_nSingleTracks;   //!
-   TBranch        *b_energyFraction;   //!
-   TBranch        *b_mass;   //!
-   TBranch        *b_significance3d;   //!
-   TBranch        *b_deltaphi;   //!
-   TBranch        *b_deltaeta;   //!
-
-   readJFBTagAna(TTree *tree=0);
-   virtual ~readJFBTagAna();
-   virtual Int_t    Cut(Long64_t entry);
-   virtual Int_t    GetEntry(Long64_t entry);
-   virtual Long64_t LoadTree(Long64_t entry);
-   virtual void     Init(TTree *tree);
-   virtual void     Loop();
-   virtual Bool_t   Notify();
-   virtual void     Show(Long64_t entry = -1);
-};
-
-#endif
-
-#ifdef readJFBTagAna_cxx
-readJFBTagAna::readJFBTagAna(TTree *tree)
-{
-// if parameter tree is not specified (or zero), connect the file
-// used to generate this class and read the Tree.
-   if (tree == 0) {
-      TFile *f = (TFile*)gROOT->GetListOfFiles()->FindObject("all5212.root");
-      if (!f) {
-         f = new TFile("all5212.root");
-      }
-      tree = (TTree*)gDirectory->Get("PerfTreeAll");
-
-   }
-   Init(tree);
-}
-
-readJFBTagAna::~readJFBTagAna()
-{
-   if (!fChain) return;
-   delete fChain->GetCurrentFile();
-}
-
-Int_t readJFBTagAna::GetEntry(Long64_t entry)
-{
-// Read contents of entry.
-   if (!fChain) return 0;
-   return fChain->GetEntry(entry);
-}
-Long64_t readJFBTagAna::LoadTree(Long64_t entry)
-{
-// Set the environment to read one entry
-   if (!fChain) return -5;
-   Long64_t centry = fChain->LoadTree(entry);
-   if (centry < 0) return centry;
-   if (!fChain->InheritsFrom(TChain::Class()))  return centry;
-   TChain *chain = (TChain*)fChain;
-   if (chain->GetTreeNumber() != fCurrent) {
-      fCurrent = chain->GetTreeNumber();
-      Notify();
-   }
-   return centry;
-}
-
-void readJFBTagAna::Init(TTree *tree)
-{
-   // The Init() function is called when the selector needs to initialize
-   // a new tree or chain. Typically here the branch addresses and branch
-   // pointers of the tree will be set.
-   // It is normally not necessary to make changes to the generated
-   // code, but the routine can be extended by the user if needed.
-   // Init() will be called many times when running on PROOF
-   // (once per file to be processed).
-
-   // Set branch addresses and branch pointers
-   if (!tree) return;
-   fChain = tree;
-   fCurrent = -1;
-   fChain->SetMakeClass(1);
-
-   fChain->SetBranchAddress("Flavour", &Flavour, &b_Flavour);
-   fChain->SetBranchAddress("DeltaRtoBorCorTau", &DeltaRtoBorCorTau, &b_DeltaRtoBorCorTau);
-   fChain->SetBranchAddress("Discriminator", &Discriminator, &b_Discriminator);
-   fChain->SetBranchAddress("JetMomentum", &JetMomentum, &b_JetMomentum);
-   fChain->SetBranchAddress("JetPt", &JetPt, &b_JetPt);
-   fChain->SetBranchAddress("JetEta", &JetEta, &b_JetEta);
-   fChain->SetBranchAddress("JetPhi", &JetPhi, &b_JetPhi);
-   fChain->SetBranchAddress("nVTX", &nVTX, &b_nVTX);
-   fChain->SetBranchAddress("nTracksAtVtx", &nTracksAtVtx, &b_nTracksAtVtx);
-   fChain->SetBranchAddress("nSingleTracks", &nSingleTracks, &b_nSingleTracks);
-   fChain->SetBranchAddress("energyFraction", &energyFraction, &b_energyFraction);
-   fChain->SetBranchAddress("mass", &mass, &b_mass);
-   fChain->SetBranchAddress("significance3d", &significance3d, &b_significance3d);
-   fChain->SetBranchAddress("deltaphi", &deltaphi, &b_deltaphi);
-   fChain->SetBranchAddress("deltaeta", &deltaeta, &b_deltaeta);
-   Notify();
-}
-
-Bool_t readJFBTagAna::Notify()
-{
-   // The Notify() function is called when a new file is opened. This
-   // can be either for a new TTree in a TChain or when when a new TTree
-   // is started when using PROOF. It is normally not necessary to make changes
-   // to the generated code, but the routine can be extended by the
-   // user if needed. The return value is currently not used.
-
-   return kTRUE;
-}
-
-void readJFBTagAna::Show(Long64_t entry)
-{
-// Print contents of entry.
-// If entry is not specified, print current entry
-   if (!fChain) return;
-   fChain->Show(entry);
-}
-Int_t readJFBTagAna::Cut(Long64_t entry)
-{
-// This function may be called from Loop.
-// returns  1 if entry is accepted.
-// returns -1 otherwise.
-   return 1;
-}
-#endif // #ifdef readJFBTagAna_cxx
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/writeNtupleAll.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/writeNtupleAll.C
deleted file mode 100644
index 3658fab2deb2cd9700fe397d04885d191f8a20cf..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/writeNtupleAll.C
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "writeNtuple_Official.h"
-#include "collectionsToProcess.h"
-#include <TString.h>
-#include <iostream>
-
-using namespace std;
-
-
-void writeAllNtuples (TString inputfilename,
-                      bool forNN=false) 
-{
-  vector<TString> collectionsToProcess=getCollectionsToProcess();
-
-  vector<TString>::const_iterator collectionsToProcessBegin=collectionsToProcess.begin();
-  vector<TString>::const_iterator collectionsToProcessEnd=collectionsToProcess.end();
-  
-  for (vector<TString>::const_iterator collectionsToProcessIter=collectionsToProcessBegin;
-       collectionsToProcessIter!=collectionsToProcessEnd;
-       ++collectionsToProcessIter) 
-  {
-    
-    cout << " Writing ALL Ntuples: processing " << *collectionsToProcessIter << endl;
-    writeNtuple_Official(inputfilename,
-                         *collectionsToProcessIter,
-                         "AOD",
-                         forNN,
-                         false);
-  }
-
-  
-}
-
-
-
-        
-        
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/writeNtuple_Official.cxx b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/writeNtuple_Official.cxx
deleted file mode 100644
index e158b912c38f4773796126b499e29789d998a4b1..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/writeNtuple_Official.cxx
+++ /dev/null
@@ -1,562 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "readBaseBTagAnaTree.h"
-#include "readJFBTagAna.h"
-#include <TFile.h>
-#include <TTree.h>
-#include <iostream>
-#include "writeNtuple_Official.h"
-#include "getPtEtaCategoryLikelihood.h"
-#include "TRandom.h"
-#include <cmath>
-#include <vector>
-#include <algorithm>
-
-using namespace std;
-
-struct number_pair
-{
-  int first;
-  double second;
-  number_pair(int p1, double p2)
-    : first (p1), second (p2) {}
-  bool operator< (const number_pair& other) const
-  { return second > other.second; }
-};
-
-struct allinfos
-{
-  Int_t nVTX;
-  Int_t nTracksAtVtx;
-  Int_t nSingleTracks;
-  Double_t energyFraction;
-  Double_t mass;
-  Double_t significance3d;
-
-  Int_t cat_flavour;
-  Int_t bottom;
-  Int_t charm;
-  Int_t light;
-
-  Double_t discriminatorIP2D;
-  Double_t discriminatorIP3D;
-  Double_t discriminatorSV1;
-  Double_t discriminatorCOMB;
- 
-  Double_t weight;
- 
-  Double_t deltaR;
-  Double_t JetPt;
-  Double_t JetEta;
-  Int_t cat_pT;
-  Int_t cat_eta;
-};
-
-
-
-
-void writeNtuple_Official(TString inputFileName,
-                          TString jetCollectionName,
-                          TString suffix,
-                          bool forNN,
-                          bool randomize) 
-{
-  
-
-  TString jetCollection=jetCollectionName+suffix;
-
-  cout << " opening input file: " << inputFileName << endl << " processing to obtain: " << 
-      jetCollection << " root file "  << endl;
-  
-  TFile inputFile(inputFileName);
-
-
-  TString baseBTag("BTag_");
-  TString suffixIP2D("_IP2D/PerfTreeAll");
-  TString suffixIP3D("_IP3D/PerfTreeAll");
-  TString suffixSV1("_SV1/PerfTreeAll");
-  TString suffixCOMB("_COMB/PerfTreeAll");
-  TString suffixJF("_JetFitterTag/PerfTreeAll");
-
-  cout << "instantiating IP2D " << endl;
-  TTree* treeIP2D=(TTree*)inputFile.Get(baseBTag+jetCollection+suffixIP2D);
-  if (treeIP2D==0) throw std::string("Problem IP2D");
-  readBaseBTagAnaTree* readTreeIP2D= new readBaseBTagAnaTree(treeIP2D);
-  
-  cout << "instantiating IP3D " << endl;
-  TTree* treeIP3D=(TTree*)inputFile.Get(baseBTag+jetCollection+suffixIP3D);
-  if (treeIP3D==0) throw std::string("Problem IP3D");
-  readBaseBTagAnaTree* readTreeIP3D= new readBaseBTagAnaTree(treeIP3D);
-
-  cout << "instantiating SV1 " << endl;
-  TTree* treeSV1=(TTree*)inputFile.Get(baseBTag+jetCollection+suffixSV1);
-  if (treeSV1==0) throw std::string("Problem SV1");
-  readBaseBTagAnaTree* readTreeSV1= new readBaseBTagAnaTree(treeSV1);
-
-  cout << "instantiating COMB " << endl;
-  TTree* treeCOMB=(TTree*)inputFile.Get(baseBTag+jetCollection+suffixCOMB);
-  if (treeCOMB==0) throw std::string("Problem COMB");
-  readBaseBTagAnaTree* readTreeCOMB= new readBaseBTagAnaTree(treeCOMB);
-
-  cout << "instantiating JetFitterTag " << endl;
-  TTree* treeJF=(TTree*)inputFile.Get(baseBTag+jetCollection+suffixJF);
-  if (treeJF==0) throw std::string("Problem JF");
-  readJFBTagAna* readTreeJF=new readJFBTagAna(treeJF);
-  
-
-  Int_t nVTX;
-  Int_t nTracksAtVtx;
-  Int_t nSingleTracks;
-  Double_t energyFraction;
-  Double_t mass;
-  Double_t significance3d;
-
-  Int_t cat_flavour;
-  Int_t bottom;
-  Int_t charm;
-  Int_t light;
-
-  Double_t discriminatorIP2D;
-  Double_t discriminatorIP3D;
-  Double_t discriminatorSV1;
-  Double_t discriminatorCOMB;
- 
-  Double_t weight;
- 
-  Double_t deltaR;
-  Double_t JetPt;
-  Double_t JetEta;
-  Int_t cat_pT;
-  Int_t cat_eta;
-
-  //for the NN you need to get the number of b,c or light jets
-
-  Int_t num_entries=readTreeJF->fChain->GetEntries();
-
-  int numberb=0;
-  int numberc=0;
-  int numberl=0;
-
-  if (forNN) 
-  {
-
-    for (Long64_t i=0;i<num_entries;i++) {
-      
-      readTreeJF->GetEntry(i);
-      
-      if (readTreeJF->mass>-100)
-      {
-        if (abs(readTreeJF->Flavour)==5){
-          numberb+=1;
-        }
-        if (abs(readTreeJF->Flavour)==4){
-          numberc+=1;
-        }
-        if (abs(readTreeJF->Flavour==1)){
-          numberl+=1;
-        }
-      }
-    }
-  }
-  
-  //now you have to calculate the weights...
-  //(store them in a matrix for b,c or light jets...
-
-  cout << " number of b found : " << numberb << " c: " << numberc << " l: " << numberl << endl;
-
-  double correctionfactor=1;
-
-  
-  int numPtBins=getNPtBins();
-  int numEtaBins=getNEtaBins();
-
-  Double_t* weightsb=0;
-  Double_t* weightsl=0;
-  Double_t* weightsc=0;
-
-  Double_t* countb=0;
-  Double_t* countl=0;
-  Double_t* countc=0;
-
-  Double_t toleranceb=1;
-  Double_t tolerancec=1;
-  Double_t tolerancel=1;
-  TRandom random;
-
-
-  Double_t maxweightb=0;
-  Double_t maxweightl=0;
-  Double_t maxweightc=0;
-  
-  
-  if (forNN) 
-  {
-    
-    weightsb=new Double_t[numPtBins*numEtaBins];
-    weightsl=new Double_t[numPtBins*numEtaBins];
-    weightsc=new Double_t[numPtBins*numEtaBins];
-
-    countb=new Double_t[numPtBins*numEtaBins];
-    countl=new Double_t[numPtBins*numEtaBins];
-    countc=new Double_t[numPtBins*numEtaBins];
-
-    for (int i=0;i<numPtBins*numEtaBins;i++){
-      weightsb[i]=0;
-      weightsl[i]=0;
-      weightsc[i]=0;
-      countb[i]=0;
-      countl[i]=0;
-      countc[i]=0;
-    }
-    
-    for (Long64_t i=0;i<num_entries;i++) {
-      
-      readTreeJF->GetEntry(i);
-      
-      if (readTreeJF->mass<-100) continue;
-      
-      if (fabs(readTreeJF->JetEta)>2.5||readTreeJF->JetPt<=15.)  continue;
-
-      
-      pair<int,double> ptInfo=getPtCategory(readTreeJF->JetPt);
-      pair<int,double> etaInfo=getEtaCategory(readTreeJF->JetEta);
-
-      int actualpT=ptInfo.first;
-      int actualeta=etaInfo.first;
-      
-      int flavour=abs(readTreeJF->Flavour);
-
-//      cout << " actualpT " << actualpT << " actualeta " << actualeta << endl;
-      
-      switch (flavour)
-      {
-      case 5:
-        countb[actualpT+numPtBins*actualeta]+=1./(ptInfo.second*etaInfo.second);
-        break;
-      case 4:
-        countc[actualpT+numPtBins*actualeta]+=1./(ptInfo.second*etaInfo.second);
-        break;
-      case 1:
-        countl[actualpT+numPtBins*actualeta]+=1./(ptInfo.second*etaInfo.second);
-        break;
-      }
-
-    }
-    
-      
-    for (int i=0;i<numPtBins*numEtaBins;i++){
-//      cout << " for i=ptxeta = " << i << " weightsb[i] " << weightsb[i]
-//           << " weightsl[i] " << weightsl[i] << " weightsc[i] " << weightsc[i] << endl;
-      weightsb[i]= (Double_t)numberb / (Double_t)countb[i] ;
-      weightsl[i]= (Double_t)numberl / (Double_t)countl[i] ;
-      weightsc[i]= (Double_t)numberc / (Double_t)countc[i];
-
-      if (weightsb[i]>maxweightb) maxweightb=weightsb[i];
-      if (weightsl[i]>maxweightl) maxweightl=weightsl[i];
-      if (weightsc[i]>maxweightc) maxweightc=weightsc[i];
-
-    }
-  
-  }
-  
-
-  cout << " maxweightb: " << maxweightb << " maxweightc: " << maxweightc << 
-      " maxweightl: " << maxweightl << endl;
-
-  TFile* file=0;
-  
-  TString filename("../reduceddatasets/reduceddataset_");
-  filename+=jetCollectionName;
-  if (forNN)
-  {
-    filename+="_forNN";
-  }
-  filename+=".root";
-
-  file=new TFile(filename,"recreate");
-  
-  TTree* myTree=new TTree("SVTree","SVTree");
-
-  
-  myTree->Branch("nVTX",&nVTX,"nVTX/I");
-  myTree->Branch("nTracksAtVtx",&nTracksAtVtx,"nTracksAtVtx/I");
-  myTree->Branch("nSingleTracks",&nSingleTracks,"nSingleTracks/I");
-  myTree->Branch("energyFraction",&energyFraction,"energyFraction/D");
-  myTree->Branch("mass",&mass,"mass/D");
-  myTree->Branch("significance3d",&significance3d,"significance3d/D");
-
-  
-  if (forNN)
-  {
-    myTree->Branch("cat_pT",&cat_pT,"cat_pT/I");
-    myTree->Branch("cat_eta",&cat_eta,"cat_eta/I");
-    myTree->Branch("weight",&weight,"weight/D");
-    myTree->Branch("discriminatorIP3D",&discriminatorIP3D,"discriminatorIP3D/D");
-    myTree->Branch("bottom",&bottom,"bottom/I");
-    myTree->Branch("charm",&charm,"charm/I");
-    myTree->Branch("light",&light,"light/I");
-  }
-  
-
-
-  if (!forNN)
-  {
-    myTree->Branch("cat_flavour",&cat_flavour,"cat_flavour/I");
-//    myTree->Branch("deltaR",&deltaR,"deltaR/D");    
-//    myTree->Branch("JetPt",&JetPt,"JetPt/D");
-//    myTree->Branch("JetEta",&JetEta,"JetEta/D");
-//    myTree->Branch("discriminatorIP2D",&discriminatorIP2D,"discriminatorIP2D/D");
-//    myTree->Branch("discriminatorSV1",&discriminatorSV1,"discriminatorSV1/D");
-//    myTree->Branch("discriminatorCOMB",&discriminatorCOMB,"discriminatorCOMB/D");
-  }
-  
-
-  
-
-
-//  if (num_entries!=readTreeCOMB->fChain->GetEntries()) {
-//    throw std::string("event number doesn't match");
-//  }
-
-  //now randomize entries
-
-/*
-  std::vector<int> inputvalues;
-  
-  for (Int_t i=0;i<num_entries;i++) 
-  {
-    inputvalues.push_back(i);
-  }
-  
-  std::vector<int> outputvalues;
-  int counter=0;
-  do
-  {
-
-    int size=inputvalues.size();
-    if (size==0)
-    {
-      break;
-    }
-    double randomNumber=random.Uniform(0,size);
-    int nToTransfer=(int)(std::floor(randomNumber<size?randomNumber:0)+0.5);
-    vector<int>::iterator begin=inputvalues.begin();
-    begin+=nToTransfer;
-    outputvalues.push_back(inputvalues[nToTransfer]);
-    if (counter%100000==0)
-    {
-    cout << " Processing randomizing event: " << counter << 
-        " inputvalue " << inputvalues[nToTransfer] <<  endl;
-    }
-    
-    inputvalues.erase(begin);
-    counter+=1;
-
-
-  }
-  while (true);
-*/
-
-  std::vector<number_pair> outputvalues;
-  
-  for (Int_t i=0;i<num_entries;i++) 
-  {
-    outputvalues.push_back(number_pair(i,random.Uniform()));
-  }
-  
-  if (randomize)
-  {
-    
-    cout << " Doing sorting... " << endl;
-    std::sort (outputvalues.begin(), outputvalues.end());
-    cout << " End sorting ... " << endl;
-  }
-  
-
-  cout << "Total entries are: " << num_entries << endl;
-  Int_t i=0;
-
-  
-  vector<number_pair>::const_iterator begin=outputvalues.begin();
-  vector<number_pair>::const_iterator end=outputvalues.end();
-  
-  Int_t counter=0;
-  for (vector<number_pair>::const_iterator iter=begin;iter!=end;++iter)
-  {
-    i=(*iter).first;
-
-    //take only every fifth data point
-    if (!forNN)
-    {
-      if (counter%5 != 0)
-      {
-        counter+=1;
-        continue;
-      }
-    }
-    
-
-//    if (counter>1000000)
-//      break;
-//    }
-    
-
-    if (counter % 500000 == 0 ) {
-      std::cout << " processing event number " << counter << " data event: " << i << " which was event n. " << std::endl;
-    }
-    
-    counter+=1;
-     
-    
-    readTreeJF->GetEntry(i);
-
-
-    if (fabs(readTreeJF->JetEta)<2.5&&readTreeJF->JetPt>15.&&readTreeJF->mass>-100) {
-
-
-      JetPt=readTreeJF->JetPt;
-      JetEta=readTreeJF->JetEta;
-      cat_pT=getPtCategory(JetPt).first;
-      cat_eta=getEtaCategory(JetEta).first;
-      
-      cat_flavour=abs(readTreeJF->Flavour);
-      if (forNN)
-      {
-        bottom=0;
-        charm=0;
-        light=0;
-
-        bool throwevent(false);
-
-        switch (cat_flavour)
-        {
-        case 5:
-          bottom=1;
-          weight=weightsb[cat_pT+numPtBins*cat_eta];
-
-          if (forNN)
-          {
-            
-            if (weight<maxweightb/toleranceb)
-            {
-              if (random.Uniform()>weight*toleranceb/maxweightb)
-              {
-                throwevent=true;
-              }
-              weight=1.;//maxweightb/toleranceb;
-            }
-            else
-            {
-              weight/=(maxweightb/toleranceb);
-            }
-          } 
-            
-          
-          break;
-        case 4:
-          charm=1;
-          weight=weightsc[cat_pT+numPtBins*cat_eta];
-
-          if (forNN)
-          {
-            if (weight<maxweightc/tolerancec)
-            {
-              if (random.Uniform()>weight*tolerancec/maxweightc)
-              {
-                throwevent=true;
-              }
-              weight=1.;//maxweightc/tolerancec;
-            }
-            else
-            {
-              weight/=(maxweightc/tolerancec);
-            }
-          }
-          
-
-
-          break;
-        case 1:
-          light=1;
-          weight=weightsl[cat_pT+numPtBins*cat_eta];
-
-          if (forNN)
-          {
-            
-            if (weight<maxweightl/tolerancel)
-            {
-              if (random.Uniform()>weight*tolerancel/maxweightl)
-              {
-                throwevent=true;
-              }
-              weight=1.;//maxweightl/tolerancel;
-            }
-            else 
-            {
-              weight/=(maxweightl/tolerancel);
-            }
-            
-          }
-          
-          break;
-        }
-
-        if (throwevent) continue;
-
-      }
-      
-
- 
-
-      //read the others only on demand (faster)
-      readTreeIP2D->GetEntry(i);
-      readTreeIP3D->GetEntry(i);
-      readTreeSV1->GetEntry(i);
-      readTreeCOMB->GetEntry(i);
-
-      discriminatorIP3D=readTreeIP3D->Discriminator;
-//          readTreeIP3D->Discriminator>-10?readTreeIP3D->Discriminator:-10;
-      
-      if (!forNN)
-      {
-        discriminatorIP2D=readTreeIP2D->Discriminator;
-        discriminatorSV1=readTreeSV1->Discriminator;
-        discriminatorCOMB=readTreeCOMB->Discriminator;
-        deltaR=readTreeCOMB->DeltaRtoBorCorTau;
-      }
-      
-
-      nVTX=readTreeJF->nVTX;
-      nSingleTracks=readTreeJF->nSingleTracks;
-      nTracksAtVtx=readTreeJF->nTracksAtVtx;
-      energyFraction=readTreeJF->energyFraction;
-      mass=readTreeJF->mass;
-      significance3d=readTreeJF->significance3d;
-      myTree->Fill();
-      
-    }
-    
-  }
-
-
-  myTree->Write();
-  file->Write();
-  file->Close();
-  
-
-
-  /*
-  delete readTreeIP2D;
-  delete readTreeIP3D;
-  delete readTreeSV1;
-  delete readTreeCOMB;
-  delete readTreeJF;
-  */
-
-  inputFile.Close();
-
-  
-}
-  
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/writeNtuple_Official.h b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/writeNtuple_Official.h
deleted file mode 100644
index 3bcc19c8ae17555f337ed3c9b78ca6d093fd2f77..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/preparedatasets/writeNtuple_Official.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include <TString.h>
-
-using namespace std;
-
-void writeNtuple_Official(TString inputFileName="all.root",
-                          TString jetCollectionName="Cone4H1TowerParticleJets",
-                          TString suffix = "AOD",
-                          bool forNN = false,
-                          bool randomize = false);
-  
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/cleanAll.sh b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/cleanAll.sh
deleted file mode 100755
index 54c6cbe21a0d3aa497b856bd9307f81d076a0b79..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/cleanAll.sh
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/sh
-for a in $(ls); do
-    echo "Cleaning directory: " $a
-    cd $a
-    rm -r comb
-    rm -r standalone
-    rm -r likelihood
-    rm -r trainingResultsLikelihood
-    cd ..
-done
\ No newline at end of file
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/createDirectories.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/createDirectories.C
deleted file mode 100644
index d40e50a6185e99a08377cd3e6725e237578072c7..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/createDirectories.C
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-{
-gROOT->ProcessLine(".L createDirectoriesMacro.C+");
-createDirectoriesMacro();
-}
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/createDirectoriesMacro.C b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/createDirectoriesMacro.C
deleted file mode 100644
index d894cdc9b554c0335c8a93c153e83880f5b88347..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/createDirectoriesMacro.C
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
-*/
-
-#include "../preparedatasets/collectionsToProcess.h"
-#include <vector>
-#include "TSystem.h"
-
-using namespace std;
-
-void createDirectoriesMacro()
-{
-
-  gSystem->Exec("mkdir ../trainingResultsJetNet");
-  gSystem->Exec("mkdir ../trainingResultsLikelihoodHistos");
-  
-  std::vector<TString> collections=getCollectionsToProcess();
-
-  for (std::vector<TString>::const_iterator iter=collections.begin();
-       iter!=collections.end();iter++)
-  {
-    
-    TString command("mkdir ../trainingResultsJetNet/");
-    command+=*iter;
-    gSystem->Exec(command);
-    TString command2("mkdir ../trainingResultsLikelihoodHistos/");
-    command2+=*iter;
-    gSystem->Exec(command2);
-  }
-}
-
-
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/sendToBatch_jetnet.sh b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/sendToBatch_jetnet.sh
deleted file mode 100755
index 2256d0fa9280afd9c50d971d43c22b88b5bf74a8..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/sendToBatch_jetnet.sh
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/sh
-for a in $(ls); do
-    echo "Processing directory: " $a
-    cd $a
-
-    echo "Creating directories if missing"
-    if $(test ! -e comb);then mkdir comb;fi
-    if $(test ! -e standalone);then mkdir standalone;fi
-
-    echo "Processing comb"
-
-    cd comb
-
-    mkdir weights
-
-    echo "Linking necessary macros..."
-    ln -s ../../../jetnetRoot/libTJetNet.so
-    ln -s ../../../jetnetRoot/trainNN_cxx.so
-    ln -s ../../../jetnetRoot/doTraining.C
-
-    actualdir=$(pwd)
-
-    echo "Create batch comb file for " $a
-    
-    echo '================='
-    echo 'NNtraincomb' $a '.pbs'
-    echo '================='
-
-    filename=$(echo 'NNtraincomb'$a'.pbs')
-
-    
-
-    echo "#!/bin/sh" > $filename
-    echo "" >> $filename
-    echo "unset DISPLAY" >> $filename
-    echo "echo Runnin on host \`hostname\`" >> $filename
-    echo "cd  "$actualdir" " >> $filename
-    echo "root -b \"doTraining.C(\\\""$a"\\\",true)\"|tee logTraining.txt " >> $filename
-    echo "echo \"Finished\" " >> $filename
-    chmod a+x $filename
-
-    qsub -N $(echo "NN"$a"comb") -l qt=1nw,mem_alloc=100M,systemtype=4 $HOME/bin/SGE_Start $filename
-
-    cd ..
- 
-    echo "Processing standalone"
-    cd standalone
-    
-    mkdir weights
-
-    echo "Linking necessary macros..."
-    ln -s ../../../jetnetRoot/libTJetNet.so
-    ln -s ../../../jetnetRoot/trainNN_cxx.so
-    ln -s ../../../jetnetRoot/doTraining.C
-
-
-    actualdir=$(pwd)
-
-    echo "Create batch standalone file for " $a
-    
-    echo '================='
-    echo 'NNtrainstandalone' $a '.pbs'
-    echo '================='
-
-    filename=$(echo 'NNtrainstandalone'$a'.pbs')
-
-    
-
-    echo "#!/bin/sh" > $filename
-    echo "" >> $filename
-    echo "unset DISPLAY" >> $filename
-    echo "echo Runnin on host \`hostname\`" >> $filename
-    echo "cd  " $actualdir " " >> $filename
-    echo "root -b \"doTraining.C(\\\""$a"\\\",false)\"|tee logTraining.txt " >> $filename
-    echo "echo \"Finished\" " >>$filename
-
-    chmod a+x $filename
-
-    qsub -N $(echo "NN"$a"standalone") -l qt=1nw,mem_alloc=100M,systemtype=4 $HOME/bin/SGE_Start $filename
-
-    cd ../..;
-done
-
-   
-    
-	
- 
-    
-    
-    
-    
\ No newline at end of file
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/sendToBatch_likelihood.sh b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/sendToBatch_likelihood.sh
deleted file mode 100755
index 465b53805a0b0fd0658fadb8490e90d0d83f4521..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/sendToBatch/sendToBatch_likelihood.sh
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/bin/sh
-for a in $(ls); do
-    echo "Processing directory: " $a
-    cd $a
-
-    echo "Creating directories if missing"
-    if $(test ! -e likelihood);then mkdir likelihood;fi
-
-    echo "Processing b"
-
-    mkdir trainingResultsLikelihood
-    mkdir trainingResultsLikelihood/plots
-
-    cd likelihood
-
-    ln -s ../../../likelihoodRoot/createTheHistograms.cxx
-    ln -s ../../../likelihoodRoot/createTheHistograms.h
-    ln -s ../../../likelihoodRoot/doCreateTheHistograms.C
-
-
-    actualdir=$(pwd)
-
-    echo "Create batch comb file for " $a
-    
-    echo '================='
-    echo 'LLtrainB' $a '.pbs'
-    echo '================='
-
-    filename=$(echo 'LLtrainB'$a'.pbs')
-
-    
-
-    echo "#!/bin/sh" > $filename
-    echo "" >> $filename
-    echo "unset DISPLAY" >> $filename
-    echo "echo Runnin on host \`hostname\`" >> $filename
-    echo "cd  "$actualdir" " >> $filename
-    echo "root -b \"doCreateTheHistograms.C(\\\""$a"\\\",5)\"|tee "$actualdir"/logTrainingB.txt " >> $filename
-    echo "echo \"Finished\" " >> $filename
-    chmod a+x $filename
-
-    qsub -N $(echo "LL"$a"B") -l qt=1nw,mem_alloc=2000M,systemtype=4 $HOME/bin/SGE_Start $filename
-
-    cd ..
- 
-    echo "Processing c"
-    cd likelihood
-
-    actualdir=$(pwd)
-
-    echo "Create batch comb file for " $a
-    
-    echo '================='
-    echo 'LLtrainC' $a '.pbs'
-    echo '================='
-
-    filename=$(echo 'LLtrainC'$a'.pbs')
-
-    
-
-    echo "#!/bin/sh" > $filename
-    echo "" >> $filename
-    echo "unset DISPLAY" >> $filename
-    echo "echo Runnin on host \`hostname\`" >> $filename
-    echo "cd  "$actualdir" " >> $filename
-    echo "root -b \"doCreateTheHistograms.C(\\\""$a"\\\",4)\"|tee "$actualdir"/logTrainingC.txt " >> $filename
-    echo "echo \"Finished\" " >> $filename
-    chmod a+x $filename
-    
-    qsub -N $(echo "LL"$a"C") -l qt=1nw,mem_alloc=2000M,systemtype=4 $HOME/bin/SGE_Start $filename
-
-    cd ..
-    echo "Processing l"
-    cd likelihood
-
-    actualdir=$(pwd)
-
-    echo "Create batch comb file for " $a
-    
-    echo '================='
-    echo 'LLtrainL' $a '.pbs'
-    echo '================='
-
-    filename=$(echo 'LLtrainL'$a'.pbs')
-
-    
-
-    echo "#!/bin/sh" > $filename
-    echo "" >> $filename
-    echo "unset DISPLAY" >> $filename
-    echo "echo Runnin on host \`hostname\`" >> $filename
-    echo "cd  "$actualdir" " >> $filename
-    echo "root -b \"doCreateTheHistograms.C(\\\""$a"\\\",1)\"|tee "$actualdir"/logTrainingL.txt " >> $filename
-    echo "echo \"Finished\" " >> $filename
-    chmod a+x $filename
-
-    qsub -N $(echo "LL"$a"L") -l qt=1nw,mem_alloc=2000M,systemtype=4 $HOME/bin/SGE_Start $filename
-
-    cd ../..;
-done
-
-   
-    
-	
- 
-    
-    
-    
-    
\ No newline at end of file
diff --git a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/share/BTagAna_Rerun_forJetFitter.py b/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/share/BTagAna_Rerun_forJetFitter.py
deleted file mode 100644
index 85c40f049ae510088c5fdbd7f7d65fedcf085275..0000000000000000000000000000000000000000
--- a/PhysicsAnalysis/JetTagging/JetTagCalibUtils/JetFitterCalibUtils/share/BTagAna_Rerun_forJetFitter.py
+++ /dev/null
@@ -1,201 +0,0 @@
-
-# Python job to run b-tagging+analysis job on a pre-existing AOD
-
-#
-# run in 'Standard' mode or with all tracking algos?
-#
-from IOVDbSvc.IOVDbSvcConf import IOVDbSvc
-IOVDbSvc.GlobalTag="OFLCOND-SIM-00-00-03"
-
-
-allTrackingAlgos = False
-
-
-#theApp.Dlls += [ "GaudiAud" ]
-#theAuditorSvc = AuditorSvc()
-#theAuditorSvc.Auditors += [ "ChronoAuditor" ]
-#theApp.AuditAlgorithms = True 
-
-
-
-# ------ Geometry:
-#include( "AthenaCommon/AthenaCommonFlags.py" )
-#include( "RecExCommon/AllDet_detDescr.py")
-
-from AthenaCommon.AthenaCommonFlags  import athenaCommonFlags
-from AthenaCommon.AppMgr import theApp
-from AthenaCommon.AppMgr import ServiceMgr
-from AthenaCommon.GlobalFlags  import globalflags
-
-#DetDescrVersion = "ATLAS-CSC-02-01-00"
-DetDescrVersion = "ATLAS-GEO-02-01-00"
-#DetDescrVersion = "ATLAS-CSC-05-00-00"
-#GeoModelSvc.IgnoreTagDifference = True
-
-include( "RecExCommon/AllDet_detDescr.py")
-
-
-
-import AthenaPoolCnvSvc.ReadAthenaPool
-ServiceMgr.EventSelector.InputCollections = ["ZEBRA.P"]
-
-theApp.EvtMax = -1
-
-# ------ POOL:
-include( "PartPropSvc/PartPropSvc.py" )
-include( "AthenaPoolCnvSvc/ReadAthenaPool_jobOptions.py" )
-include( "EventAthenaPool/EventAthenaPool_joboptions.py" )
-#theApp.Dlls += [ "AthenaPoolUtilities" ]
-theApp.Dlls += ["CaloTools" ]
-theApp.Dlls += ["TileRecAlgs"]
-theApp.Dlls += ["LArClusterRec"]
-theApp.Dlls += ["CaloRec"]
-theApp.Dlls += ["TileRec"]
-include( "ParticleBuilderOptions/ESD_PoolCnv_jobOptions.py")
-include( "ParticleBuilderOptions/AOD_PoolCnv_jobOptions.py")
-include( "InDetEventCnvTools/InDetEventCnvTools_jobOptions.py" )
-include( "ParticleBuilderOptions/McAOD_PoolCnv_jobOptions.py")
-
-
-####################################################END VERTEXING
-
-#REOBTAIN some of the Jet algorithms...
-from JetRec.JetGetters import *
-from JetRec.JetRecFlags import jetFlags
-
-jetFlags.inputFileType.set_Value('AOD')
-
-
-Kt6alg = make_StandardJetGetter('Kt', 0.6, 'LCTopo').jetAlgorithmHandle()
-Cone7alg = make_StandardJetGetter('Cone', 0.7, 'LCTopo').jetAlgorithmHandle()
-Kt4alg = make_StandardJetGetter('Kt', 0.4, 'LCTopo').jetAlgorithmHandle()
-#Cone4alg = make_StandardJetGetter('Cone', 0.4, 'LCTopo').jetAlgorithmHandle()
-
-Kt6Truthalg = make_StandardJetGetter('Kt', 0.6, 'Truth').jetAlgorithmHandle()
-Cone7Truthalg = make_StandardJetGetter('Cone', 0.7, 'Truth').jetAlgorithmHandle()
-Kt4Truthalg = make_StandardJetGetter('Kt', 0.4, 'Truth').jetAlgorithmHandle()
-#Cone4Truthalg = make_StandardJetGetter('Cone', 0.4, 'Truth').jetAlgorithmHandle()
-
-#Kt7alg.OutputLevel = 3
-#Kt5alg.OutputLevel = 2
-
-# ------ BTagging configuration:
-if not 'BTaggingFlags' in dir():
-          from BTagging.BTaggingFlags import BTaggingFlags
-BTaggingFlags.Print()
-BTaggingFlags.Runmodus      = "analysis" 
-BTaggingFlags.PoolInputType = "AOD"
-#BTaggingFlags.SoftEl = False
-#BTaggingFlags.SoftMu = False
-#BTaggingFlags.JetFitterTag = True
-BTaggingFlags.OutputLevel = INFO
-# rerun only cone 0.4 Jets
-BTaggingFlags.Jets=['Cone4H1Topo',
-                    'Cone4H1Tower',
-                    'Cone4Truth',
-                    'Cone7H1Tower',
-                    'Cone7LCTopo',
-                    'Kt4LCTopo',
-                    'Kt6LCTopo',
-                    'Kt6Truth',
-                    'Kt4Truth',
-                    'Cone7Truth'] 
-BTaggingFlags.CalibrationChannelAliases=['Cone4H1Tower->Cone4H1Topo',
-                                         'Cone4Truth->Cone4H1Topo',
-                                         'Cone7H1Tower->Cone4H1Topo',
-                                         'Cone7LCTopo->Cone4H1Topo',
-                                         'Kt4LCTopo->Cone4H1Topo',
-                                         'Kt6LCTopo->Cone4H1Topo',
-                                         'Kt6Truth->Cone4H1Topo',
-                                         'Kt4Truth->Cone4H1Topo',
-                                         'Cone7Truth->Cone4H1Topo']
-#
-# Steering (BEFORE including the other job options files)
-#
-
-if allTrackingAlgos:
-  include( "BTagging/MyBTagging_jobOptions.py" )
-else:	
-  BTaggingFlags.PrimaryVertexCollectionName = "VxPrimaryCandidate"
-  BTaggingFlags.TrackParticleCollectionName = "TrackParticleCandidate"
-  BTaggingFlags.CalibrationTag = "BTagCalib-02-00"
-  include( "BTagging/BTagging_jobOptions.py" )
-#  redo only on cone0.4 jets, disable b-tagging on other jet collections:
-#CW  import AthenaCommon.PropertiesManip as manip
-#  manip.removeFromList(theApp,'TopAlg',"Analysis::BJetBuilder/BJetBuilderCone7")
-#  manip.removeFromList(theApp,'TopAlg',"Analysis::BJetBuilder/BJetBuilderKt")
-
-
-
-
-
-
-# ------ BTagAna part:
-
-theApp.Dlls += [ "JetTagRTT" ]
-theApp.TopAlg += [ "BTagAna" ]
-Analysis = Algorithm( "BTagAna" )
-
-Analysis.JetCollection =  "Cone4H1TowerJets"
-Analysis.HistogramStreamName = "File1"
-Analysis.OutputLevel = INFO
-
-Analysis.SaveTrees = True
-
-Analysis.FlavourTrees = False
-
-# note that the new collection has a different name:
-# NOW: Has the tracking appendix added!!
-#      also run over the existing one without re-reconstructing
-Analysis.JetCollectionsForTree = [
-    'Cone4H1TopoJetsAOD',
-    'Cone4H1TowerJetsAOD',
-    'Cone4TruthJetsAOD',
-    'Cone7H1TowerJetsAOD',
-    'Cone7LCTopoJetsAOD',
-    'Kt4LCTopoJetsAOD',
-    'Kt6LCTopoJetsAOD',
-    'Kt6TruthJetsAOD',
-    'Kt4TruthJetsAOD',
-    'Cone7TruthJetsAOD'
-    ]
-
-#if allTrackingAlgos:
-#Analysis.JetCollectionsForTree += [
-#  "Cone4TowerJetsAODIP", 
-#  "Cone4TowerJetsAODXK", 
-#  "Cone4TowerJetsAODNT",
-#  ]
-
-Analysis.BTagAlgorithms = [
-    "JetProb",   
-    "IP2D"            ,
-    "IP3D"		  ,
-    "SV1" 		  ,
-    "SV2" 		  ,
-    "COMB"		  ,
-    "JetFitterTag"    ,
-    "JetFitterCOMB"   ,
-    "JetFitterTagNN",
-    "JetFitterCOMBNN",
-    "SoftMuon",
-    "SoftElectron"]
-
-Analysis.OutputLevel = INFO
-#
-
-
-# histogram file (rm file first otherwise crash):
-import commands
-stat, out = commands.getstatusoutput('rm BTagAna.root')
-THistSvc = Service("THistSvc")
-THistSvc.Output += ["File1 DATAFILE='BTagAna.root' OPT='RECREATE'"]
-
-
-
-MessageSvc = Service( "MessageSvc" )
-MessageSvc.OutputLevel = INFO
-MessageSvc.defaultLimit = 9999999  # all messages
-MessageSvc.Format = "% F%50W%S%7W%R%T %0W%M"
-
-