/* * * S.Vanniarajan V.Suyam.Jothi@kvi.nl * * This is the Mutivariate Event classification tool * designed for PANDAROOT Analysis package for * PANDA Experiments. * TMVA(Toolkit for MultiVariate Analysis) is a * two class classifier(signal and background). * available with ROOT package. mainly used for * Event Classification in High Energy Physics Experiments. * * This tool here is Designed from TMVA, for Multiclass * Classification purpose. * * S.Vanniarajan 01-08-08 */ #include "PndMultiClassMVA.h" using namespace std; PndMultiClassMVA::PndMultiClassMVA() { fNCLASS = 0; fNVAR = 0; fNSigTrain = "100"; fNSigTest = "100"; fNSigTrain = "100"; fNSigTest = "100"; fPruneStrengthBDT = "4.0"; fBoostTypeBDT = "AdaBoost"; fNCutsBDT = "10"; fNTreeBDT = "100"; fNKNN = "40"; } /* PndMultiClassMVA::PndMultiClassMVA( Int_t NoClass, Int_t NoPar, TString fname,TString anaName ) { fNCLASS = NoClass; fNVAR = NoPar; fFILENAME = fname; fAPPNAME = anaName; } */ PndMultiClassMVA::~PndMultiClassMVA() { } void PndMultiClassMVA::AddVar(string varName) { fVarNameArray.push_back(varName); fNVAR = fNVAR +1; } void PndMultiClassMVA::AddClass(string className) { vector > stringVec; fClassNameArray.push_back(className); fInFileNameArray.insert(pair > >(className,stringVec)); fNCLASS = fNCLASS +1; } /* void PndMultiClassMVA::AddInFile(string className,string simFileName,string recoFileName) { pair stringPair; stringPair.first = simFileName; stringPair.second = recoFileName; cout<<" -I- Adding Input files for the class"<second).push_back(stringPair); } } void PndMultiClassMVA::GenerateTree() { cout<<" -I- Generating the Input Tree"< > fileNameVec; className = fClassNameArray[i]; fileNameVec = fInFileNameArray.find(className)->second; for(int j = 0; j < fileNameVec.size();j++ ) { string simFile,recoFile; pair filePair; filePair = fileNameVec.at(j); cout<AccessPathName( fINFILENAME )) { std::cout << "--- BDTAnalysis : accessing " << fINFILENAME << std::endl; input = TFile::Open( fINFILENAME ); } else if (!input) { std::cout << "ERROR: could not open data file" << std::endl; exit(0); } { TTree *TreeArray[50]; // = new TTree[10]; for (int i = 0; i < fNCLASS ; i++) { TString s,treeName; treeName = fClassNameArray.at(i); cout<< (TTree*)input->Get(treeName)<Get(treeName); } for (int i = 0 ; i < fNCLASS ; i++ ) { TString s,OutFileName,anaName; anaName = fAPPNAME +fClassNameArray.at(i); s = s +".root"; OutFileName = fClassNameArray.at(i) + ".root"; TFile* outputFile = TFile::Open( OutFileName, "RECREATE" ); cout<<"hai"<AddSignalTree(TreeArray[j],signalWeight); } else { factory->AddBackgroundTree(TreeArray[j],backgroundWeight); } } for (int k = 0 ; k < fNVAR ; k++ ) { TString varName; varName = fVarNameArray.at(k); factory->AddVariable(varName,'F'); } TCut mycuts = ""; // for example: TCut mycuts = "abs(var1)<0.5 && abs(var2-0.5)<1"; TCut mycutb = ""; // for example: TCut mycutb = "abs(var1)<0.5"; TString trainConfig = "NSigTrain=" + fNSigTrain + ":NBkgTrain=" + fNBkgTrain + ":NSigTest=" + fNSigTest + ":NBkgTest=" +fNBkgTest + "SplitMode=Random:!V"; cout<PrepareTrainingAndTestTree( mycuts, mycutb, trainConfig ); TString BdtConfig = "!H:!V:NTrees=" + fNTreeBDT + ":BoostType=" + fBoostTypeBDT + ":SeparationType=GiniIndex:nCuts=" + fNCutsBDT + "PruneMethod=CostComplexity:PruneStrength=" + fPruneStrengthBDT; factory->BookMethod( TMVA::Types::kBDT, "BDT", BdtConfig); TString kNNConfig = "nkNN=" + fNKNN + ":TreeOptDepth=6:ScaleFrac=0.8:!UseKernel:!Trim"; factory->BookMethod( TMVA::Types::kKNN, "KNN", kNNConfig); factory->BookMethod( TMVA::Types::kMLP, "MLP", "Normalise:H:!V:NeuronType=tanh:NCycles=200:HiddenLayers=N+1,N:TestRate=5"); factory->TrainAllMethods(); factory->TestAllMethods(); factory->EvaluateAllMethods(); outputFile->Close(); delete factory; } } WriteConfigFile(); } ClassImp(PndMultiClassMVA)