Back to home page

sPhenix code displayed by LXR

 
 

    


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 // needs to be included when makecint runs (ACLIC)
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   /*loader->AddVariable("track_dlayer",'I');
0044   loader->AddVariable("track_layer",'I');*/
0045   loader->AddVariable("track_pT",'F');
0046   //loader->AddVariable("track_dca",'F');
0047   loader->AddVariable("approach_dist",'F'); //idk why this is off
0048   loader->AddVariable("vtx_radius",'F');
0049   loader->AddVariable("vtx_chi2",'F'); 
0050   //loader->AddVariable("vtxTrackRZ_dist",'F');
0051   //loader->AddVariable("abs(vtxTrackRPhi_dist-vtxTrackRZ_dist)",'F',"space diff");
0052   //loader->AddVariable("photon_m",'F');
0053   //loader->AddVariable("photon_pT",'F');
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   //string layer_cuts = "track_dlayer>=0&&track_layer>=0";
0060   string dist_cuts = "vtxTrackRZ_dist>=0&&vtxTrackRPhi_dist>=0&&approach_dist>=0";
0061   //do I need photon cuts? 
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   /*factory->BookMethod( Types::kKNN, "kNN", "" ); //>100k events
0071   factory->BookMethod( Types::kPDERS, "PDERS", "" );//>100k events*/
0072   /*factory->BookMethod( Types::kPDEFoam, "PDEFoam", "VolFrac=.0588i:SigBgSeparate=True" );//>10k events
0073   factory->BookMethod( Types::kFisher, "Fisher", "" );
0074   factory->BookMethod( Types::kLD, "LD" );*/
0075   /*would need to have the options tuned
0076    * factory->BookMethod( Types::kFDA, "FDA", "Formula=(0)+(1)*x0+(2)*x1+(3)*x2+(4)*x3:\
0077       ParRanges=(-1,1);(-10,10);(-10,10);(-10,10);(-10,10):\
0078       FitMethod=MINUIT:\
0079       ErrorLevel=1:PrintLevel=-1:FitStrategy=2:UseImprove:UseMinos:SetBatch" );*/
0080 /* nerual network that would need to be worked on 
0081  * factory->BookMethod( Types::kMLP, "MLP_ANN", "<options>" );*/
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 /*  outname="cutTrainE.root";
0102   makeFactory(signalTree,backETree,outname,"eback");*/
0103   return 0;
0104 }