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" - -