File indexing completed on 2025-08-05 08:14:27
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);
0036 factory->AddSignalTree(signalTree,1.0);
0037 factory->AddBackgroundTree(backTree,1.0);
0038 if(bgTree2){
0039 factory->AddBackgroundTree(bgTree2,1.0);
0040 }
0041 factory->AddSpectator("track_layer",'I');
0042 factory->AddSpectator("track_pT",'F');
0043 factory->AddSpectator("track_dca",'F');
0044 factory->AddSpectator("cluster_prob",'F');
0045 factory->AddSpectator("abs(track_deta)",'F');
0046 factory->AddSpectator("abs(cluster_deta)",'F');
0047 factory->AddSpectator("abs(cluster_dphi)",'F');
0048 factory->AddSpectator("abs(track_dlayer)",'I');
0049 factory->AddSpectator("approach_dist",'F');
0050 factory->AddVariable("vtx_radius",'F');
0051
0052
0053
0054 factory->AddVariable("photon_m",'F');
0055 factory->AddVariable("photon_pT",'F');
0056
0057 string track_layer_cut = "track_layer>-1.";
0058 string track_pT_cut = "track_pT>2.0";
0059 string track_dca_cut = "50>track_dca>0";
0060 string em_prob_cut = "cluster_prob>-0.1";
0061 string track_deta_cut = ".0082>=track_deta";
0062 string track_dlayer_cut = "2>=abs(track_dlayer)";
0063 string approach_dist_cut = "69.34>approach_dist>0";
0064 string vtx_radius_cut = "vtx_radius>0";
0065
0066 string tCutInitializer = track_pT_cut+"&&"+em_prob_cut+"&&"+track_layer_cut;
0067 TCut preTraingCuts(tCutInitializer.c_str());
0068
0069 factory->PrepareTrainingAndTestTree(preTraingCuts,"nTrain_Signal=0:nTrain_Background=0:nTest_Signal=0:nTest_Background=0");
0070
0071
0072
0073
0074
0075 factory->BookMethod(Types::kCuts,"Cuts");
0076 factory->TrainAllMethods();
0077 factory->TestAllMethods();
0078 factory->EvaluateAllMethods();
0079 targetFile->Write();
0080 targetFile->Close();
0081 }
0082
0083
0084 int train(){
0085 using namespace std;
0086 string treePath = "/sphenix/user/vassalli/RecoConversionTests/truthconversionembededonlineanalysis";
0087 string treeExtension = ".root";
0088 string outname = "cutTrainA.root";
0089 unsigned int nFiles=100;
0090
0091
0092
0093
0094
0095 TChain *signalTree = handleFile(treePath,treeExtension,"cutTreeSignal",nFiles);
0096 TChain *backtrackTree = handleFile(treePath,treeExtension,"trackBackTree",nFiles);
0097 TChain *backpairTree = handleFile(treePath,treeExtension,"pairBackTree",nFiles);
0098 TChain *backVtxTree = handleFile(treePath,treeExtension,"vtxBackTree",nFiles);
0099
0100
0101 makeFactory(signalTree,backVtxTree,outname,"vtxback");
0102
0103
0104 }