File indexing completed on 2025-08-06 08:14:56
0001 #include <TFile.h>
0002 #include <TTree.h>
0003 #include <TString.h>
0004 #include <TChain.h>
0005
0006
0007 #if not defined(__CINT__) || defined(__MAKECINT__)
0008
0009 #include "TMVA/Factory.h"
0010 #include "TMVA/Tools.h"
0011 #endif
0012
0013
0014
0015 TChain* handleFile(string name, string extension, string treename, int filecount){
0016 TChain *all = new TChain(treename.c_str());
0017 string temp;
0018 for (int i = 0; i < filecount; ++i)
0019 {
0020
0021 ostringstream s;
0022 s<<i;
0023 temp = name+string(s.str())+extension;
0024 all->Add(temp.c_str());
0025 }
0026 return all;
0027 }
0028
0029
0030 void makeFactory(TTree* signalTree, TTree* backTree,std::string outfile,std::string factoryname, TTree* bgTree2=NULL)
0031 {
0032 using namespace TMVA;
0033 TString jobname(factoryname.c_str());
0034 TFile *targetFile = new TFile(outfile.c_str(),"RECREATE");
0035 Factory *factory = new Factory(jobname,targetFile,"Correlations=True");
0036 DataLoader *loader = new DataLoader();
0037 loader->AddSignalTree(signalTree,1.0);
0038 loader->AddBackgroundTree(backTree,1.0);
0039 if(bgTree2){
0040 loader->AddBackgroundTree(bgTree2,1.0);
0041 }
0042 loader->AddVariable("track_deta",'F');
0043
0044
0045 loader->AddVariable("track_pT",'F');
0046
0047 loader->AddVariable("approach_dist",'F');
0048 loader->AddVariable("vtx_radius",'F');
0049 loader->AddVariable("vtx_chi2",'F');
0050
0051
0052
0053
0054 loader->AddVariable("cluster_prob",'F');
0055
0056 string track_pT_cut = "track_pT>0";
0057 string vtx_radius_cut = "vtx_radius>0";
0058 string em_prob_cut = "cluster_prob>=0";
0059
0060 string dist_cuts = "vtxTrackRZ_dist>=0&&vtxTrackRPhi_dist>=0&&approach_dist>=0";
0061
0062 string tCutInitializer = em_prob_cut+"&&"+ vtx_radius_cut+"&&"+track_pT_cut+"&&"+dist_cuts;
0063 TCut preTraingCuts(tCutInitializer.c_str());
0064
0065
0066 loader->PrepareTrainingAndTestTree(preTraingCuts,"nTrain_Signal=0:nTrain_Background=0:nTest_Signal=0:nTest_Background=0");
0067 factory->BookMethod( loader,TMVA::Types::kLikelihood, "LikelihoodD",
0068 "!H:!V:!TransformOutput:PDFInterpol=Spline2:NSmoothSig[0]=20:NSmoothBkg[0]=20:NSmooth=5:NAvEvtPerBin=50:VarTransform=Decorrelate" );
0069 factory->BookMethod(loader,Types::kCuts,"Cuts","");
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082 factory->TrainAllMethods();
0083 factory->TestAllMethods();
0084 factory->EvaluateAllMethods();
0085 targetFile->Write();
0086 targetFile->Close();
0087 }
0088
0089
0090 int train(){
0091 using namespace std;
0092 string treePath = "/sphenix/user/vassalli/gammasample/conversiononlineanalysis";
0093 string treeExtension = ".root";
0094 string outname = "cutTrainA.root";
0095 unsigned int nFiles=200;
0096
0097 TChain *signalTree = handleFile(treePath,treeExtension,"cutTreeSignal",nFiles);
0098 TChain *backHTree = handleFile(treePath,treeExtension,"cutTreeBackh",nFiles);
0099 TChain *backETree = handleFile(treePath,treeExtension,"cutTreeBacke",nFiles);
0100 makeFactory(signalTree,backHTree,outname,"aback",backETree);
0101
0102
0103 return 0;
0104 }