00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <stdexcept>
00029
00030 #include "TMVA/Volume.h"
00031 #include "TMVA/Tools.h"
00032
00033 #ifndef ROOT_TMVA_MsgLogger
00034 #include "TMVA/MsgLogger.h"
00035 #endif
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 TMVA::Volume::Volume( std::vector<Double_t>* l, std::vector<Double_t>* u )
00048 : fLower( l ),
00049 fUpper( u ),
00050 fOwnerShip (kFALSE){
00051
00052 }
00053
00054 TMVA::Volume::Volume( std::vector<Float_t>* l, std::vector<Float_t>* u )
00055 {
00056
00057 fLower = new std::vector<Double_t>( l->size() );
00058 fUpper = new std::vector<Double_t>( u->size() );
00059 fOwnerShip = kTRUE;
00060
00061 for (UInt_t ivar=0; ivar<l->size(); ivar++) {
00062 (*fLower)[ivar] = Double_t((*l)[ivar]);
00063 (*fUpper)[ivar] = Double_t((*u)[ivar]);
00064 }
00065 }
00066
00067 TMVA::Volume::Volume( Double_t* l, Double_t* u, Int_t nvar )
00068 {
00069
00070 fLower = new std::vector<Double_t>( nvar );
00071 fUpper = new std::vector<Double_t>( nvar );
00072 fOwnerShip = kTRUE;
00073
00074 for (int ivar=0; ivar<nvar; ivar++) {
00075 (*fLower)[ivar] = l[ivar];
00076 (*fUpper)[ivar] = u[ivar];
00077 }
00078 }
00079
00080 TMVA::Volume::Volume( Float_t* l, Float_t* u, Int_t nvar )
00081 {
00082
00083 fLower = new std::vector<Double_t>( nvar );
00084 fUpper = new std::vector<Double_t>( nvar );
00085 fOwnerShip = kTRUE;
00086
00087 for (int ivar=0; ivar<nvar; ivar++) {
00088 (*fLower)[ivar] = Double_t(l[ivar]);
00089 (*fUpper)[ivar] = Double_t(u[ivar]);
00090 }
00091 }
00092
00093 TMVA::Volume::Volume( Double_t l, Double_t u )
00094 {
00095
00096 fLower = new std::vector<Double_t>(1);
00097 fUpper = new std::vector<Double_t>(1);
00098 fOwnerShip = kTRUE;
00099 (*fLower)[0] = l;
00100 (*fUpper)[0] = u;
00101 }
00102
00103 TMVA::Volume::Volume( Float_t l, Float_t u )
00104 {
00105
00106 fLower = new std::vector<Double_t>(1);
00107 fUpper = new std::vector<Double_t>(1);
00108 fOwnerShip = kTRUE;
00109 (*fLower)[0] = Double_t(l);
00110 (*fUpper)[0] = Double_t(u);
00111 }
00112
00113 TMVA::Volume::Volume( Volume& V )
00114 {
00115
00116 fLower = new std::vector<Double_t>( *V.fLower );
00117 fUpper = new std::vector<Double_t>( *V.fUpper );
00118 fOwnerShip = kTRUE;
00119 }
00120
00121 TMVA::Volume::~Volume( void )
00122 {
00123
00124
00125 if (fOwnerShip) this->Delete();
00126 }
00127
00128 void TMVA::Volume::Delete( void )
00129 {
00130
00131 if (NULL != fLower) { delete fLower; fLower = NULL; }
00132 if (NULL != fUpper) { delete fUpper; fUpper = NULL; }
00133 }
00134
00135 void TMVA::Volume::Scale( Double_t f )
00136 {
00137
00138 gTools().Scale(*fLower,f);
00139 gTools().Scale(*fUpper,f);
00140 }
00141
00142 void TMVA::Volume::ScaleInterval( Double_t f )
00143 {
00144
00145 for (UInt_t ivar=0; ivar<fLower->size(); ivar++) {
00146 Double_t lo = 0.5*((*fLower)[ivar]*(1.0 + f) + (*fUpper)[ivar]*(1.0 - f));
00147 Double_t up = 0.5*((*fLower)[ivar]*(1.0 - f) + (*fUpper)[ivar]*(1.0 + f));
00148 (*fLower)[ivar] = lo;
00149 (*fUpper)[ivar] = up;
00150 }
00151 }
00152
00153 void TMVA::Volume::Print( void ) const
00154 {
00155
00156 MsgLogger fLogger( "Volume" );
00157 for (UInt_t ivar=0; ivar<fLower->size(); ivar++) {
00158 fLogger << kINFO << "... Volume: var: " << ivar << "\t(fLower, fUpper) = ("
00159 << (*fLower)[ivar] << "\t " << (*fUpper)[ivar] <<")"<< Endl;
00160 }
00161 }
00162