// Globals.cc // Kevin Karplus // 22 Nov 1995 #include #include // for getrusage #include "Input/Input.h" #include "NamedClass/NameToPtr.h" #include "Regularizer/BackgroundProbs.h" #include "gen_sequence/GenSequence.h" #include "Globals.h" #include "TrainSet.h" #include "InterfaceDescription.h" #include "NeuralNet.h" #include "NetActivation.h" #include "NetQuality.h" #include "OneChain.h" vectorGlobals::NNs; vector Globals::FreezeTheseColumns; vector Globals::ChangeTheseColumns; TrainSet *Globals::training= 0; TrainSet *Globals::cross_training= 0; TrainSet *Globals::testing= 0; TrainSet *Globals::predicting= 0; TrainSet *Globals::which_set_to_add_to=predicting; NameToPtr Globals::BackgroundProbsByName(97); vector Globals::design_chains; GenSequence *Globals::SequenceGenerator=NULL; struct timeval Globals::StartWallTime; struct timeval Globals::StartCpuTime; ofstream* Globals::ReportSequenceWeightsTo=0; ofstream* Globals::ReportNetQualityForTrainTo=0; ofstream* Globals::ReportNetQualityForCrossTrainTo=0; ofstream* Globals::ReportNetQualityForTestTo=0; ofstream* Globals::ReportNetQualityForTestChainTo=0; ofstream* Globals::ReportNetQualityForTrainChainTo=0; ofstream* Globals::ReportNetQualityForCrossTrainChainTo=0; ofstream* Globals::ReportUnitUsageTo=0; ofstream* Globals::ReportQvsPhatTo=0; void Globals::clear_all(void) { clear_design_chains(); if (ReportSequenceWeightsTo) { ReportSequenceWeightsTo->close(); delete ReportSequenceWeightsTo; ReportSequenceWeightsTo =0; } if (ReportNetQualityForTrainTo) { ReportNetQualityForTrainTo->close(); delete ReportNetQualityForTrainTo; ReportNetQualityForTrainTo =0; } if (ReportNetQualityForCrossTrainTo) { ReportNetQualityForCrossTrainTo->close(); delete ReportNetQualityForCrossTrainTo; ReportNetQualityForCrossTrainTo =0; } if (ReportNetQualityForTestChainTo) { ReportNetQualityForTestChainTo->close(); delete ReportNetQualityForTestChainTo; ReportNetQualityForTestChainTo =0; } if (ReportNetQualityForTrainChainTo) { ReportNetQualityForTrainChainTo->close(); delete ReportNetQualityForTrainChainTo; ReportNetQualityForTrainChainTo =0; } if (ReportNetQualityForCrossTrainChainTo) { ReportNetQualityForCrossTrainChainTo->close(); delete ReportNetQualityForCrossTrainChainTo; ReportNetQualityForCrossTrainChainTo =0; } if (ReportUnitUsageTo) { ReportUnitUsageTo->close(); delete ReportUnitUsageTo; ReportUnitUsageTo=0; } if (ReportQvsPhatTo) { ReportQvsPhatTo->close(); delete ReportQvsPhatTo; ReportQvsPhatTo=0; } delete training; training=0; delete cross_training; cross_training=0; delete testing; testing=0; for(int i=NNs.size()-1; i>=0; i--) { NeuralNet *NN = NNs[i]; if (NN != NULL) { // Although NeuralNet does not own the Regularizers in the // InterfaceDescriptions, there are no other pointers left when // clearing all Globals, so let's delete them now. // This may have to change if we start registering all Regularizers // and sharing them. for (int i=NN->num_interfaces()-1; i>=0; i--) { NN->interface(i)->delete_regularizers(); } } delete NN; NNs[i]=NULL; } } void Globals::clear_design_chains(void) { for (unsigned int c=0; c0) { // check for compatibility of input interfaces InterfaceDescription* old_ifd=Globals::nn(0)->interface(0); InterfaceDescription* new_ifd=n->interface(0); if (!new_ifd->is_compatible(old_ifd, Globals::nn(0)->name(), n->name(), &cerr)) return 0; } NNs.push_back(n); return 1; } const BackgroundProbs* Globals::background_probs( const AlphabetTuple*al, OptionIfNew opt) { return dynamic_cast (BackgroundProbsByName.FindOldName(al->name(),opt)); } void Globals::initialize_freeze(void) { assert(design_chains.size()>0 && design_chains[0]!=NULL); FreezeTheseColumns.assign(design_chains[0]->num_cols(), false); } void Globals::initialize_change(void) { assert(design_chains.size()>0 && design_chains[0]!=NULL); ChangeTheseColumns.assign(design_chains[0]->num_cols(), false); } // CHANGE LOG: // 21 July 1997 Kevin Karplus // copied from estimat-dist and removed everything related to // TestSet or regularizer stack. // 23 July 1997 Kevin Karplus // modified open_input to try gunzipping file if the file // doesn't exist but the file.gz does // 14 Sept 1997 Kevin Karplus // FINALLY fixed open_input to use popen and zcat if need to gunzip // 21 March 1998 Kevin Karplus // Added clear_all() to clean up all globals. // 22 March 1998 Kevin Karplus // Repaired damage Christian did to open_input, by providing // option of adding prefix and suffix or not. // 2 May 1998 Kevin Karplus // Moved filename handling to Filenames.cc // 20 July 1998 Kevin Karplus // Added ReportnetQualityFor...ChainTo variables. // 21 May 2004 Sol Katzman // Added time functions // Mon Jun 13 03:23:15 PDT 2005 Kevin Karplus // Picked up Jes Frellsen's addition of "design_chain" // Sat Jun 18 10:54:12 PDT 2005 Kevin Karplus // Added BackgroundProbsByName // Removed some includes that were no longer needed. // Sat Jun 18 21:57:46 PDT 2005 Kevin Karplus // Added background_probs() // Sat Jun 25 20:38:13 PDT 2005 Kevin Karplus // Moved add_neural_net from Globals.h and added some // consistency checks. // Sat Jul 9 04:36:31 PDT 2005 Kevin Karplus // Changed design_chain to design_chains // Added clear_design_chains // Thu Jul 14 22:03:04 PDT 2005 Kevin Karplus // Added FreezeTheseColumns // Thu Jul 21 17:55:20 PDT 2005 Kevin Karplus // added SequenceGenerator // Sun Feb 5 02:41:02 PST 2006 Kevin Karplus // added ChangeTheseColumns