82 fDataSetManager ( NULL ),
84 fTransformations (
"I" ),
86 fDataAssignType ( kAssignEvents ),
100 std::vector<TMVA::VariableTransformBase*>::iterator trfIt = fDefaultTrfs.begin();
101 for (;trfIt != fDefaultTrfs.end(); ++trfIt)
delete (*trfIt);
103 delete fDataInputHandler;
107 delete fDataSetManager;
121 return fDataSetManager->AddDataSetInfo(dsi);
128 DataSetInfo* dsi = fDataSetManager->GetDataSetInfo(dsiName);
130 if (dsi!=0)
return *dsi;
132 return fDataSetManager->AddDataSetInfo(*(
new DataSetInfo(dsiName)));
139 return DefaultDataSetInfo();
150 if (trafoDefinition.
Contains(
"(")) {
154 Ssiz_t parLen = trafoDefinition.
Index(
")", parStart )-parStart+1;
156 trName = trafoDefinition(0,parStart);
157 trOptions = trafoDefinition(parStart,parLen);
158 trOptions.
Remove(parLen-1,1);
162 trName = trafoDefinition;
166 if (trName ==
"VT") {
171 Log() << kFATAL <<
" VT transformation must be passed a floating threshold value" <<
Endl;
176 threshold = trOptions.
Atof();
179 return transformedLoader;
182 Log() << kFATAL <<
"Incorrect transformation string provided, please check" <<
Endl;
184 Log() << kINFO <<
"No transformation applied, returning original loader" <<
Endl;
198 assignTree->
Branch(
"type", &fATreeType,
"ATreeType/I" );
199 assignTree->
Branch(
"weight", &fATreeWeight,
"ATreeWeight/F" );
201 std::vector<VariableInfo>& vars = DefaultDataSetInfo().GetVariableInfos();
202 std::vector<VariableInfo>& tgts = DefaultDataSetInfo().GetTargetInfos();
203 std::vector<VariableInfo>& spec = DefaultDataSetInfo().GetSpectatorInfos();
205 if (fATreeEvent.size()==0) fATreeEvent.resize(vars.size()+tgts.size()+spec.size());
207 for (
UInt_t ivar=0; ivar<vars.size(); ivar++) {
208 TString vname = vars[ivar].GetExpression();
209 assignTree->
Branch( vname, &fATreeEvent[ivar], vname +
"/F" );
212 for (
UInt_t itgt=0; itgt<tgts.size(); itgt++) {
213 TString vname = tgts[itgt].GetExpression();
214 assignTree->
Branch( vname, &fATreeEvent[vars.size()+itgt], vname +
"/F" );
217 for (
UInt_t ispc=0; ispc<spec.size(); ispc++) {
218 TString vname = spec[ispc].GetExpression();
219 assignTree->
Branch( vname, &fATreeEvent[vars.size()+tgts.size()+ispc], vname +
"/F" );
277 const std::vector<Double_t>& event,
Double_t weight )
279 ClassInfo* theClass = DefaultDataSetInfo().AddClass(className);
288 if (clIndex>=fTrainAssignTree.size()) {
289 fTrainAssignTree.resize(clIndex+1, 0);
290 fTestAssignTree.resize(clIndex+1, 0);
293 if (fTrainAssignTree[clIndex]==0) {
294 fTrainAssignTree[clIndex] = CreateEventAssignTrees(
Form(
"TrainAssignTree_%s", className.
Data()) );
295 fTestAssignTree[clIndex] = CreateEventAssignTrees(
Form(
"TestAssignTree_%s", className.
Data()) );
298 fATreeType = clIndex;
299 fATreeWeight = weight;
300 for (
UInt_t ivar=0; ivar<
event.size(); ivar++) fATreeEvent[ivar] = event[ivar];
303 else fTestAssignTree[clIndex]->Fill();
312 return fTrainAssignTree[clIndex]!=0;
320 UInt_t size = fTrainAssignTree.size();
321 for(
UInt_t i=0; i<size; i++) {
322 if(!UserAssignEvents(i))
continue;
323 const TString& className = DefaultDataSetInfo().GetClassInfo(i)->GetName();
324 SetWeightExpression(
"weight", className );
342 Log() << kFATAL <<
"<AddTree> cannot interpret tree type: \"" << treetype
343 <<
"\" should be \"Training\" or \"Test\" or \"Training and Testing\"" <<
Endl;
345 AddTree(
tree, className, weight, cut,
tt );
354 Log() << kFATAL <<
"Tree does not exist (empty pointer)." <<
Endl;
356 DefaultDataSetInfo().AddClass( className );
362 Log() << kINFO<<
"Add Tree " <<
tree->GetName() <<
" of type " << className
363 <<
" with " <<
tree->GetEntries() <<
" events" <<
Endl;
364 DataInput().AddTree(
tree, className, weight, cut,
tt );
372 AddTree( signal,
"Signal", weight,
TCut(
""), treetype );
381 TTree* signalTree =
new TTree(
"TreeS",
"Tree (S)" );
384 Log() << kINFO <<
"Create TTree objects from ASCII input files ... \n- Signal file : \""
388 AddTree( signalTree,
"Signal", weight,
TCut(
""), treetype );
395 AddTree( signal,
"Signal", weight,
TCut(
""), treetype );
403 AddTree( signal,
"Background", weight,
TCut(
""), treetype );
412 TTree* bkgTree =
new TTree(
"TreeB",
"Tree (B)" );
415 Log() << kINFO <<
"Create TTree objects from ASCII input files ... \n- Background file : \""
419 AddTree( bkgTree,
"Background", weight,
TCut(
""), treetype );
426 AddTree( signal,
"Background", weight,
TCut(
""), treetype );
433 AddTree(
tree,
"Signal", weight );
440 AddTree(
tree,
"Background", weight );
466 DataInput().AddTree( datFileS,
"Signal", signalWeight );
467 DataInput().AddTree( datFileB,
"Background", backgroundWeight );
487 DefaultDataSetInfo().AddVariable( expression, title, unit, min, max,
type );
496 DefaultDataSetInfo().AddVariable( expression,
"",
"", min, max,
type );
506 DefaultDataSetInfo().AddVariablesArray(expression, size,
"",
"", min, max,
type);
517 DefaultDataSetInfo().AddTarget( expression, title, unit, min, max );
526 DefaultDataSetInfo().AddSpectator( expression, title, unit, min, max );
534 return AddDataSet( fName );
542 for (std::vector<TString>::iterator it=theVariables->begin();
543 it!=theVariables->end(); ++it) AddVariable(*it);
550 DefaultDataSetInfo().SetWeightExpression(variable,
"Signal");
557 DefaultDataSetInfo().SetWeightExpression(variable,
"Background");
566 SetSignalWeightExpression(variable);
567 SetBackgroundWeightExpression(variable);
569 else DefaultDataSetInfo().SetWeightExpression( variable, className );
575 SetCut(
TCut(cut), className );
582 DefaultDataSetInfo().SetCut( cut, className );
589 AddCut(
TCut(cut), className );
595 DefaultDataSetInfo().AddCut( cut, className );
605 SetInputTreesFromEventAssignTrees();
609 DefaultDataSetInfo().SetSplitOptions(
Form(
"nTrain_Signal=%i:nTrain_Background=%i:nTest_Signal=%i:nTest_Background=%i:%s",
610 NsigTrain, NbkgTrain, NsigTest, NbkgTest, otherOpt.
Data()) );
619 SetInputTreesFromEventAssignTrees();
623 DefaultDataSetInfo().SetSplitOptions(
Form(
"nTrain_Signal=%i:nTrain_Background=%i:nTest_Signal=%i:nTest_Background=%i:SplitMode=Random:EqualTrainSample:!V",
624 Ntrain, Ntrain, Ntest, Ntest) );
633 SetInputTreesFromEventAssignTrees();
635 DefaultDataSetInfo().PrintClasses();
637 DefaultDataSetInfo().SetSplitOptions( opt );
646 SetInputTreesFromEventAssignTrees();
649 AddCut( sigcut,
"Signal" );
650 AddCut( bkgcut,
"Background" );
652 DefaultDataSetInfo().SetSplitOptions( splitOpt );
704 des->
AddSignalTree( (*treeinfo).GetTree(), (*treeinfo).GetWeight(),(*treeinfo).GetTreeType());
709 des->
AddBackgroundTree( (*treeinfo).GetTree(), (*treeinfo).GetWeight(),(*treeinfo).GetTreeType());
718 const TMatrixD *
m = DefaultDataSetInfo().CorrelationMatrix(className);
719 return DefaultDataSetInfo().CreateCorrelationMatrixHist(
m,
720 "CorrelationMatrix"+className,
"Correlation Matrix ("+className+
")");
char * Form(const char *fmt,...)
A specialized string object used for TTree selections.
Service class for 2-Dim histogram classes.
Class that contains all the information of a class.
virtual void RecombineKFoldDataSet(DataSetInfo &dsi, Types::ETreeType tt=Types::kTraining)
virtual void MakeKFoldDataSet(DataSetInfo &dsi)=0
virtual void PrepareFoldDataSet(DataSetInfo &dsi, UInt_t foldNumber, Types::ETreeType tt)
Set training and test set vectors of dataset described by dsi.
DataInputHandler * fDataInputHandler
TTree * CreateEventAssignTrees(const TString &name)
create the data assignment tree (for event-wise data assignment by user)
void AddVariablesArray(const TString &expression, int size, char type='F', Double_t min=0, Double_t max=0)
user inserts discriminating array of variables in data set info in case input tree provides an array ...
void SetBackgroundTree(TTree *background, Double_t weight=1.0)
void AddSignalTree(TTree *signal, Double_t weight=1.0, Types::ETreeType treetype=Types::kMaxTreeType)
number of signal events (used to compute significance)
DataSetInfo & AddDataSet(DataSetInfo &)
void AddSpectator(const TString &expression, const TString &title="", const TString &unit="", Double_t min=0, Double_t max=0)
user inserts target in data set info
void SetInputTreesFromEventAssignTrees()
assign event-wise local trees to data set
void AddTrainingEvent(const TString &className, const std::vector< Double_t > &event, Double_t weight)
add signal training event
void SetTree(TTree *tree, const TString &className, Double_t weight)
set background tree
void AddSignalTestEvent(const std::vector< Double_t > &event, Double_t weight=1.0)
add signal testing event
DataSetInfo & DefaultDataSetInfo()
default creation
void AddBackgroundTestEvent(const std::vector< Double_t > &event, Double_t weight=1.0)
add signal training event
DataSetManager * fDataSetManager
DataLoader * MakeCopy(TString name)
Copy method use in VI and CV.
void SetSignalWeightExpression(const TString &variable)
void MakeKFoldDataSet(CvSplit &s)
Function required to split the training and testing datasets into a number of folds.
void SetWeightExpression(const TString &variable, const TString &className="")
void AddBackgroundTrainingEvent(const std::vector< Double_t > &event, Double_t weight=1.0)
add signal training event
void RecombineKFoldDataSet(CvSplit &s, Types::ETreeType tt=Types::kTraining)
Recombines the dataset.
DataLoader * VarTransform(TString trafoDefinition)
Transforms the variables and return a new DataLoader with the transformed variables.
void SetBackgroundWeightExpression(const TString &variable)
void AddCut(const TString &cut, const TString &className="")
void AddEvent(const TString &className, Types::ETreeType tt, const std::vector< Double_t > &event, Double_t weight)
add event vector event : the order of values is: variables + targets + spectators
DataLoader(TString thedlName="default")
void PrepareTrainingAndTestTree(const TCut &cut, const TString &splitOpt)
prepare the training and test trees -> same cuts for signal and background
DataInputHandler & DataInput()
void AddBackgroundTree(TTree *background, Double_t weight=1.0, Types::ETreeType treetype=Types::kMaxTreeType)
number of signal events (used to compute significance)
DataSetInfo & GetDataSetInfo()
void AddTarget(const TString &expression, const TString &title="", const TString &unit="", Double_t min=0, Double_t max=0)
user inserts target in data set info
TH2 * GetCorrelationMatrix(const TString &className)
returns the correlation matrix of datasets
Bool_t UserAssignEvents(UInt_t clIndex)
void AddSignalTrainingEvent(const std::vector< Double_t > &event, Double_t weight=1.0)
add signal training event
void AddTestEvent(const TString &className, const std::vector< Double_t > &event, Double_t weight)
add signal test event
void SetSignalTree(TTree *signal, Double_t weight=1.0)
void SetInputTrees(const TString &signalFileName, const TString &backgroundFileName, Double_t signalWeight=1.0, Double_t backgroundWeight=1.0)
void AddTree(TTree *tree, const TString &className, Double_t weight=1.0, const TCut &cut="", Types::ETreeType tt=Types::kMaxTreeType)
void SetInputVariables(std::vector< TString > *theVariables)
fill input variables in data set
void SetCut(const TString &cut, const TString &className="")
void AddVariable(const TString &expression, const TString &title, const TString &unit, char type='F', Double_t min=0, Double_t max=0)
user inserts discriminating variable in data set info
void PrepareFoldDataSet(CvSplit &s, UInt_t foldNumber, Types::ETreeType tt=Types::kTraining)
Function for assigning the correct folds to the testing or training set.
Class that contains all the data information.
Class that contains all the data information.
void SetSource(const std::string &source)
virtual void SetName(const char *name)
Set the name of the TNamed.
void ToLower()
Change string to lower-case.
Double_t Atof() const
Return floating-point value contained in string.
Bool_t IsFloat() const
Returns kTRUE if string contains a floating point or integer number.
const char * Data() const
TString & Remove(Ssiz_t pos)
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
A TTree represents a columnar dataset.
virtual void SetDirectory(TDirectory *dir)
Change the tree's directory.
TBranch * Branch(const char *name, T *obj, Int_t bufsize=32000, Int_t splitlevel=99)
Add a new branch, and infer the data type from the type of obj being passed.
virtual Long64_t ReadFile(const char *filename, const char *branchDescriptor="", char delimiter=' ')
Create or simply read branches from filename.
void DataLoaderCopy(TMVA::DataLoader *des, TMVA::DataLoader *src)
MsgLogger & Endl(MsgLogger &ml)