67 if ((*it) != 0)
delete (*it);
87 Log() << kINFO <<
"Preparing the Decorrelation transformation..." <<
Endl;
92 if (inputSize > 200) {
93 Log() << kINFO <<
"----------------------------------------------------------------------------"
96 <<
": More than 200 variables, will not calculate decorrelation matrix "
98 Log() << kINFO <<
"----------------------------------------------------------------------------"
115 Int_t whichMatrix = cls;
124 Log() << kFATAL <<
"Transformation matrix all classes is not defined"
127 Log() << kFATAL <<
"Transformation matrix for class " << whichMatrix <<
" is not defined"
132 std::vector<TString>* strVec =
new std::vector<TString>;
135 for (
Int_t ivar=0; ivar<nvar; ivar++) {
137 for (
Int_t jvar=0; jvar<nvar; jvar++) {
138 str += ((*m)(ivar,jvar) > 0) ?
" + " :
" - ";
154 Log() << kFATAL <<
"VariableDecorrTransform::GetTransformationStrings : unknown type '" << type <<
"'." <<
Endl;
157 strVec->push_back( str );
169 Log() << kFATAL <<
"Transformation matrix not yet created"
172 Int_t whichMatrix = cls;
185 Log() << kFATAL <<
"Transformation matrix all classes is not defined"
188 Log() << kFATAL <<
"Transformation matrix for class " << whichMatrix <<
" is not defined"
200 std::vector<Float_t> input;
201 std::vector<Char_t> mask;
204 if( hasMaskedEntries ){
207 if( numMasked>0 && numOK>0 ){
208 Log() << kFATAL <<
"You mixed variables and targets in the decorrelation transformation. This is not possible." <<
Endl;
215 for (
Int_t ivar=0; ivar<nvar; ivar++)
vec(ivar) = input.at(ivar);
221 for (
Int_t ivar=0; ivar<nvar; ivar++) input.push_back(
vec(ivar) );
234 Log() << kFATAL <<
"Inverse transformation for decorrelation transformation not yet implemented. Hence, this transformation cannot be applied together with regression if targets should be transformed. Please contact the authors if necessary." <<
Endl;
248 if (0 != (*it) ) {
delete (*it); *it=0; }
252 const UInt_t matNum = (maxCls<=1)?maxCls:maxCls+1;
258 for (
UInt_t cls=0; cls<matNum; cls++) {
261 Log() << kFATAL <<
"<GetSQRMats> Zero pointer returned for SQR matrix" <<
Endl;
263 delete (*covMat)[cls];
274 Int_t dp = o.precision();
276 o <<
"# correlation matrix " << std::endl;
278 o << cls <<
" " << mat->
GetNrows() <<
" x " << mat->
GetNcols() << std::endl;
281 o << std::setprecision(12) << std::setw(20) << (*mat)[row][col] <<
" ";
287 o <<
"##" << std::endl;
288 o << std::setprecision(dp);
325 if( (*it) != 0 )
delete (*it);
330 void* inpnode = NULL;
353 std::stringstream s(content);
354 for (
Int_t row = 0; row<nrows; row++) {
355 for (
Int_t col = 0; col<ncols; col++) {
356 s >> (*mat)[row][col];
371 istr.getline(buf,512);
373 Int_t nrows(0), ncols(0);
375 while (!(buf[0]==
'#'&& buf[1]==
'#')) {
377 while (*p==
' ' || *p==
'\t') p++;
378 if (*p==
'#' || *p==
'\0') {
379 istr.getline(buf,512);
382 std::stringstream sstr(buf);
385 if (strvar==
"signal" || strvar==
"background") {
387 if(strvar==
"background") cls=1;
388 if(strvar==classname) classIdx = cls;
390 sstr >> nrows >> dummy >> ncols;
397 istr >> (*mat)[row][col];
401 istr.getline(buf,512);
416 Log() << kINFO <<
"Transformation matrix "<< cls <<
":" <<
Endl;
426 Int_t dp = fout.precision();
433 fout <<
" double fDecTF_"<<trCounter<<
"["<<numC<<
"]["<<mat->
GetNrows()<<
"]["<<mat->
GetNcols()<<
"];" << std::endl;
438 fout <<
"//_______________________________________________________________________" << std::endl;
439 fout <<
"inline void " << fcncName <<
"::InitTransform_"<<trCounter<<
"()" << std::endl;
440 fout <<
"{" << std::endl;
441 fout <<
" // Decorrelation transformation, initialisation" << std::endl;
442 for (
UInt_t icls = 0; icls < numC; icls++){
444 for (
int i=0; i<matx->
GetNrows(); i++) {
445 for (
int j=0; j<matx->
GetNcols(); j++) {
446 fout <<
" fDecTF_"<<trCounter<<
"["<<icls<<
"]["<<i<<
"]["<<j<<
"] = " << std::setprecision(12) << (*matx)[i][j] <<
";" << std::endl;
450 fout <<
"}" << std::endl;
453 fout <<
"//_______________________________________________________________________" << std::endl;
454 fout <<
"inline void " << fcncName <<
"::Transform_"<<trCounter<<
"( std::vector<double>& iv, int cls) const" << std::endl;
455 fout <<
"{" << std::endl;
456 fout <<
" // Decorrelation transformation" << std::endl;
457 fout <<
" if (cls < 0 || cls > "<<
GetNClasses()<<
") {"<< std::endl;
459 fout <<
" else cls = "<<(
fDecorrMatrices.size()==1?0:2)<<
";"<< std::endl;
460 fout <<
" }"<< std::endl;
464 fout <<
" std::vector<double> tv;" << std::endl;
465 fout <<
" for (int i=0; i<"<<matx->
GetNrows()<<
";i++) {" << std::endl;
466 fout <<
" double v = 0;" << std::endl;
467 fout <<
" for (int j=0; j<"<<matx->
GetNcols()<<
"; j++)" << std::endl;
468 fout <<
" v += iv[indicesGet.at(j)] * fDecTF_"<<trCounter<<
"[cls][i][j];" << std::endl;
469 fout <<
" tv.push_back(v);" << std::endl;
470 fout <<
" }" << std::endl;
471 fout <<
" for (int i=0; i<"<<matx->
GetNrows()<<
";i++) iv[indicesPut.at(i)] = tv[i];" << std::endl;
472 fout <<
"}" << std::endl;
475 fout << std::setprecision(dp);
int Int_t
Signed integer 4 bytes (int).
char Char_t
Character 1 byte (char).
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int).
bool Bool_t
Boolean (0=false, 1=true) (bool).
TMatrixT< Double_t > TMatrixD
TVectorT< Double_t > TVectorD
Class that contains all the data information.
UInt_t GetNVariables() const
accessor to the number of variables
Singleton class for Global types used by TMVA.
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
MsgLogger & Endl(MsgLogger &ml)
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.