4   gStyle->SetHistMinimumZero();
 
    6   TFile *file_in = TFile::Open(
"psi2s_jpsi2pi_jpsi_mumu_pid.root",
"READ");
 
    7   TFile *file_out = TFile::Open(
"pid_plot.root",
"RECREATE");
 
    8   TTree *
simtree = (TTree*)file_in->Get(
"pndsim");
 
   11   TH1F *hMomentum = 
new TH1F(
"hMomentum",
"Momentum",100,0,10);
 
   12   simtree->Draw(
"PidChargedCand.GetMomentum().Mag()>>hMomentum",
"",
"goff");
 
   14   TH1F *hTheta = 
new TH1F(
"hTheta",
"Theta",100,0,180);
 
   15   simtree->Draw(
"PidChargedCand.GetMomentum().Theta()*TMath::RadToDeg()>>hTheta",
"",
"goff");
 
   17   TH1F *hPhi = 
new TH1F(
"hPhi",
"Phi",100,-180,180);
 
   18   simtree->Draw(
"PidChargedCand.GetMomentum().Phi()*TMath::RadToDeg()>>hPhi",
"",
"goff");
 
   20   TH1F *hMvdHits = 
new TH1F(
"hMvdHits",
"Number of MVD hits",15,-0.5,14.5);
 
   21   simtree->Draw(
"PidChargedCand.GetMvdHits()>>hMvdHits",
"",
"goff");
 
   23   TH1F *hMvdDEDX = 
new TH1F(
"hMvdDEDX",
"MVD DEDX [MeV/cm]",200,0.,40.);
 
   24   simtree->Draw(
"PidChargedCand.GetMvdDEDX()*1000>>hMvdDEDX",
"",
"goff");
 
   26   TH1F *hSttHits = 
new TH1F(
"hSttHits",
"Number of STT hits",45,-0.5,44.5);
 
   27   simtree->Draw(
"PidChargedCand.GetSttHits()>>hSttHits",
"PidChargedCand.GetTrackBranch()==50",
"goff");
 
   29   TH1F *hSttDEDX = 
new TH1F(
"hSttDEDX",
"STT DEDX [u.a.]",200,0.,50.);
 
   30   simtree->Draw(
"PidChargedCand.GetSttMeanDEDX()>>hSttDEDX",
"PidChargedCand.GetTrackBranch()==50",
"goff");
 
   32   TH1F *hFtsHits = 
new TH1F(
"hFtsHits",
"Number of FTS hits",80,-0.5,79.5);
 
   33   simtree->Draw(
"PidChargedCand.GetSttHits()>>hFtsHits",
"PidChargedCand.GetTrackBranch()==53",
"goff");
 
   35   TH1F *hFtsDEDX = 
new TH1F(
"hFtsDEDX",
"FTS DEDX [u.a.]",200,0.,50.);
 
   36   simtree->Draw(
"PidChargedCand.GetSttMeanDEDX()>>hFtsDEDX",
"PidChargedCand.GetTrackBranch()==53",
"goff");
 
   38   TH1F *hGemHits = 
new TH1F(
"hGemHits",
"Number of GEM hits",10,-0.5,9.5);
 
   39   simtree->Draw(
"PidChargedCand.GetGemHits()>>hGemHits",
"",
"goff");
 
   41   TH1F *hTofTof = 
new TH1F(
"hTofTof",
"SciTil time-of-flight [ns]",100,0.,10.);
 
   42   simtree->Draw(
"PidChargedCand.GetTofStopTime()>>hTofTof",
"PidChargedCand.GetTrackBranch()==50&&PidChargedCand.GetTofIndex()>-1",
"goff");
 
   44   TH1F *hTofLength = 
new TH1F(
"hTofLength",
"SciTil track length [m]",100,0.,150.);
 
   45   simtree->Draw(
"PidChargedCand.GetTofTrackLength()>>hTofLength",
"PidChargedCand.GetTrackBranch()==50&&PidChargedCand.GetTofIndex()>-1",
"goff");
 
   47   TH1F *hTofM2 = 
new TH1F(
"hTofM2",
"SciTil mass^{2} [GeV^{2}/c^{4}]",200,-2.,2.);
 
   48   simtree->Draw(
"PidChargedCand.GetTofM2()>>hTofM2",
"PidChargedCand.GetTrackBranch()==50&&PidChargedCand.GetTofIndex()>-1",
"goff");
 
   50   TH1F *hTofQ = 
new TH1F(
"hTofQ",
"SciTil Quality",200,0.,20.);
 
   51   simtree->Draw(
"PidChargedCand.GetTofQuality()>>hTofQ",
"PidChargedCand.GetTrackBranch()==50&&PidChargedCand.GetTofIndex()>-1",
"goff");
 
   53   TH1F *hFTofTof = 
new TH1F(
"hFTofTof",
"FTOF time-of-flight [ns]",200,0.,50.);
 
   54   simtree->Draw(
"PidChargedCand.GetTofStopTime()>>hFTofTof",
"PidChargedCand.GetTrackBranch()==53&&PidChargedCand.GetTofIndex()>-1",
"goff");
 
   56   TH1F *hFTofLength = 
new TH1F(
"hFTofLength",
"FTOF track length [m]",100,600.,900.);
 
   57   simtree->Draw(
"PidChargedCand.GetTofTrackLength()>>hFTofLength",
"PidChargedCand.GetTrackBranch()==53&&PidChargedCand.GetTofIndex()>-1",
"goff");
 
   59   TH1F *hFTofM2 = 
new TH1F(
"hFTofM2",
"FTOF mass^{2} [GeV^{2}/c^{4}]",200,-2.,2.);
 
   60   simtree->Draw(
"PidChargedCand.GetTofM2()>>hFTofM2",
"PidChargedCand.GetTrackBranch()==53&&PidChargedCand.GetTofIndex()>-1",
"goff");
 
   62   TH1F *hFTofQ = 
new TH1F(
"hFTofQ",
"FTOF Quality",200,0.,2000.);
 
   63   simtree->Draw(
"PidChargedCand.GetTofQuality()>>hFTofQ",
"PidChargedCand.GetTrackBranch()==53&&PidChargedCand.GetTofIndex()>-1",
"goff");
 
   65   TH1F *hDrcThetaC = 
new TH1F(
"hDrcThetaC",
"DIRC Cherenkov angle",100,0.,1.);
 
   66   simtree->Draw(
"PidChargedCand.GetDrcThetaC()>>hDrcThetaC",
"PidChargedCand.GetDrcIndex()>-1",
"goff");
 
   68   TH1F *hDrcThetaCErr = 
new TH1F(
"hDrcThetaCErr",
"DIRC Cherenkov angle error",100,0.,1.);
 
   69   simtree->Draw(
"PidChargedCand.GetDrcThetaCErr()>>hDrcThetaCErr",
"PidChargedCand.GetDrcIndex()>-1",
"goff");
 
   71   TH1F *hDrcQ = 
new TH1F(
"hDrcQ",
"DIRC Quality",100,0,.00001);
 
   72   simtree->Draw(
"PidChargedCand.GetDrcQuality()>>hDrcQ",
"PidChargedCand.GetDrcIndex()>-1",
"goff");
 
   74   TH1F *hDrcNPhotons = 
new TH1F(
"hDrcNPhotons",
"DIRC Number of Photons",20,-0.5,19.5);
 
   75   simtree->Draw(
"PidChargedCand.GetDrcNumberOfPhotons()>>hDrcNPhotons",
"PidChargedCand.GetDrcIndex()>-1",
"goff");
 
   77   TH1F *hDiscThetaC = 
new TH1F(
"hDiscThetaC",
"DISC Cherenkov angle",100,0.,1.);
 
   78   simtree->Draw(
"PidChargedCand.GetDiscThetaC()>>hDiscThetaC",
"PidChargedCand.GetDiscIndex()>-1",
"goff");
 
   80   TH1F *hDiscThetaCErr = 
new TH1F(
"hDiscThetaCErr",
"DISC Cherenkov angle error",100,0.,1.);
 
   81   simtree->Draw(
"PidChargedCand.GetDiscThetaCErr()>>hDiscThetaCErr",
"PidChargedCand.GetDiscIndex()>-1",
"goff");
 
   83   TH1F *hDiscQ = 
new TH1F(
"hDiscQ",
"DISC Quality",100,0,.01);
 
   84   simtree->Draw(
"PidChargedCand.GetDiscQuality()>>hDiscQ",
"PidChargedCand.GetDiscIndex()>-1",
"goff");
 
   86   TH1F *hDiscNPhotons = 
new TH1F(
"hDiscNPhotons",
"DISC Number of Photons",20,-0.5,19.5);
 
   87   simtree->Draw(
"PidChargedCand.GetDiscNumberOfPhotons()>>hDiscNPhotons",
"PidChargedCand.GetDiscIndex()>-1",
"goff");
 
   89   TH1F *hEmcRawEnergy = 
new TH1F(
"hEmcRawEnergy",
"EMC Raw Energy",100,0,1.);
 
   90   simtree->Draw(
"PidChargedCand.GetEmcRawEnergy()>>hEmcRawEnergy",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
   92   TH1F *hEmcCalEnergy = 
new TH1F(
"hEmcCalEnergy",
"EMC Cal Energy",100,0,1.);
 
   93   simtree->Draw(
"PidChargedCand.GetEmcCalEnergy()>>hEmcCalEnergy",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
   95   TH1F *hEmcQ = 
new TH1F(
"hEmcQ",
"EMC Quality",100,0,20.);
 
   96   simtree->Draw(
"PidChargedCand.GetEmcQuality()>>hEmcQ",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
   98   TH1F *hEmcNCrystals = 
new TH1F(
"hEmcNCrystals",
"EMC Number Of Crystals",50,-0.5,49.5);
 
   99   simtree->Draw(
"PidChargedCand.GetEmcNumberOfCrystals()>>hEmcNCrystals",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  101   TH1F *hEmcNBumps = 
new TH1F(
"hEmcNBumps",
"EMC Number Of Bumps",5,-0.5,4.5);
 
  102   simtree->Draw(
"PidChargedCand.GetEmcNumberOfBumps()>>hEmcNBumps",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  104   TH1F *hEmcModule = 
new TH1F(
"hEmcModule",
"EMC Module",10,-0.5,9.5);
 
  105   simtree->Draw(
"PidChargedCand.GetEmcModule()>>hEmcModule",
"PidChargedCand.GetEmcIndex()>-1",
"goff");
 
  107   TH1F *hEmcZ20 = 
new TH1F(
"hEmcZ20",
"EMC Z20",100,0.,1.1);
 
  108   simtree->Draw(
"PidChargedCand.GetEmcClusterZ20()>>hEmcZ20",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  110   TH1F *hEmcZ53 = 
new TH1F(
"hEmcZ53",
"EMC Z53",100,0.,0.02);
 
  111   simtree->Draw(
"PidChargedCand.GetEmcClusterZ53()>>hEmcZ53",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  113   TH1F *hEmcLat = 
new TH1F(
"hEmcLat",
"EMC Lat",100,0.,1);
 
  114   simtree->Draw(
"PidChargedCand.GetEmcClusterLat()>>hEmcLat",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  116    TH1F *hEmcE1 = 
new TH1F(
"hEmcE1",
"EMC E1",100,0.,1);
 
  117   simtree->Draw(
"PidChargedCand.GetEmcClusterE1()>>hEmcE1",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  119   TH1F *hEmcE9 = 
new TH1F(
"hEmcE9",
"EMC E9",100,0.,1);
 
  120   simtree->Draw(
"PidChargedCand.GetEmcClusterE9()>>hEmcE9",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  122   TH1F *hEmcE25 = 
new TH1F(
"hEmcE25",
"EMC E25",100,0.,1);
 
  123   simtree->Draw(
"PidChargedCand.GetEmcClusterE25()>>hEmcE25",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  125    TH1F *hFscRawEnergy = 
new TH1F(
"hFscRawEnergy",
"FSC Raw Energy",100,0,1.);
 
  126   simtree->Draw(
"PidChargedCand.GetEmcRawEnergy()>>hFscRawEnergy",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  128   TH1F *hFscCalEnergy = 
new TH1F(
"hFscCalEnergy",
"FSC Cal Energy",100,0,1.);
 
  129   simtree->Draw(
"PidChargedCand.GetEmcCalEnergy()>>hFscCalEnergy",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  131   TH1F *hFscQ = 
new TH1F(
"hFscQ",
"FSC Quality",100,0,20.);
 
  132   simtree->Draw(
"PidChargedCand.GetEmcQuality()>>hFscQ",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  134   TH1F *hFscNCrystals = 
new TH1F(
"hFscNCrystals",
"FSC Number Of Crystals",55,-0.5,49.5);
 
  135   simtree->Draw(
"PidChargedCand.GetEmcNumberOfCrystals()>>hFscNCrystals",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  137   TH1F *hFscNBumps = 
new TH1F(
"hFscNBumps",
"FSC Number Of Bumps",5,-0.5,4.5);
 
  138   simtree->Draw(
"PidChargedCand.GetEmcNumberOfBumps()>>hFscNBumps",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  140   TH1F *hFscZ20 = 
new TH1F(
"hFscZ20",
"FSC Z20",100,0.,1.1);
 
  141   simtree->Draw(
"PidChargedCand.GetEmcClusterZ20()>>hFscZ20",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  143   TH1F *hFscZ53 = 
new TH1F(
"hFscZ53",
"FSC Z53",100,0.,0.02);
 
  144   simtree->Draw(
"PidChargedCand.GetEmcClusterZ53()>>hFscZ53",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  146   TH1F *hFscLat = 
new TH1F(
"hFscLat",
"FSC Lat",100,0.,1);
 
  147   simtree->Draw(
"PidChargedCand.GetEmcClusterLat()>>hFscLat",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  149    TH1F *hFscE1 = 
new TH1F(
"hFscE1",
"FSC E1",100,0.,1);
 
  150   simtree->Draw(
"PidChargedCand.GetEmcClusterE1()>>hFscE1",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  152   TH1F *hFscE9 = 
new TH1F(
"hFscE9",
"FSC E9",100,0.,1);
 
  153   simtree->Draw(
"PidChargedCand.GetEmcClusterE9()>>hFscE9",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  155   TH1F *hFscE25 = 
new TH1F(
"hFscE25",
"FSC E25",100,0.,1);
 
  156   simtree->Draw(
"PidChargedCand.GetEmcClusterE25()>>hFscE25",
"PidChargedCand.GetEmcIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  158   TH1F *hMuoNLayers = 
new TH1F(
"hMuoNLayers",
"MUO Number Of Layers",20,-0.5,19.5);
 
  159   simtree->Draw(
"PidChargedCand.GetMuoNumberOfLayers()>>hMuoNLayers",
"PidChargedCand.GetMuoIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  161   TH1F *hMuoQ = 
new TH1F(
"hMuoQ",
"MUO Quality [cm]",100,0.,50);
 
  162   simtree->Draw(
"sqrt(PidChargedCand.GetMuoQuality())>>hMuoQ",
"PidChargedCand.GetMuoIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  164   TH1F *hMuoIron = 
new TH1F(
"hMuoIron",
"MUO Crossed Iron Thickness [cm]",100,0.,100);
 
  165   simtree->Draw(
"PidChargedCand.GetMuoIron()>>hMuoIron",
"PidChargedCand.GetMuoIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  167   TH1F *hMuoMomentumIn = 
new TH1F(
"hMuoMomentumIn",
"MUO Momentum at ingress point [GeV/c]",100,0.,10);
 
  168   simtree->Draw(
"PidChargedCand.GetMuoIron()>>hMuoMomentumIn",
"PidChargedCand.GetMuoIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  170   TH1F *hMuoModule = 
new TH1F(
"hMuoModule",
"MUO Module",6,-1.5,4.5);
 
  171   simtree->Draw(
"PidChargedCand.GetMuoModule()>>hMuoModule",
"PidChargedCand.GetMuoIndex()>-1",
"goff");
 
  173   TH1F *hMuoHits = 
new TH1F(
"hMuoHits",
"MUO Number Of Hits",25,-0.5,24.5);
 
  174   simtree->Draw(
"PidChargedCand.GetMuoHits()>>hMuoHits",
"PidChargedCand.GetMuoIndex()>-1&&PidChargedCand.GetTrackBranch()==50",
"goff");
 
  176   TH1F *hFMuoNLayers = 
new TH1F(
"hFMuoNLayers",
"MUO Number Of FWD Layers",20,-0.5,19.5);
 
  177   simtree->Draw(
"PidChargedCand.GetMuoNumberOfLayers()>>hFMuoNLayers",
"PidChargedCand.GetMuoIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  179   TH1F *hFMuoQ = 
new TH1F(
"hFMuoQ",
"MUO Quality [cm]",100,0.,10);
 
  180   simtree->Draw(
"sqrt(PidChargedCand.GetMuoQuality())>>hFMuoQ",
"PidChargedCand.GetMuoIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  182   TH1F *hFMuoIron = 
new TH1F(
"hFMuoIron",
"MUO Crossed Iron Thickness [cm]",100,0.,110);
 
  183   simtree->Draw(
"PidChargedCand.GetMuoIron()>>hFMuoIron",
"PidChargedCand.GetMuoIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  185   TH1F *hFMuoMomentumIn = 
new TH1F(
"hFMuoMomentumIn",
"MUO Momentum at ingress point [GeV/c]",100,0.,15);
 
  186   simtree->Draw(
"PidChargedCand.GetMuoMomentumIn()>>hFMuoMomentumIn",
"PidChargedCand.GetMuoIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  188   TH1F *hFMuoHits = 
new TH1F(
"hFMuoHits",
"MUO Number Of Hits",35,-0.5,34.5);
 
  189   simtree->Draw(
"PidChargedCand.GetMuoHits()>>hFMuoHits",
"PidChargedCand.GetMuoIndex()>-1&&PidChargedCand.GetTrackBranch()==53",
"goff");
 
  207   hFTofLength->Write();
 
  213   hDrcThetaCErr->Write();
 
  215   hDrcNPhotons->Write();
 
  216   hDiscThetaC->Write();
 
  217   hDiscThetaCErr->Write();
 
  219   hDiscNPhotons->Write();
 
  220   hEmcRawEnergy->Write();
 
  221   hEmcCalEnergy->Write();
 
  223   hEmcNCrystals->Write();
 
  232   hFscRawEnergy->Write();
 
  233   hFscCalEnergy->Write();
 
  235   hFscNCrystals->Write();
 
  243   hMuoNLayers->Write();
 
  246   hMuoMomentumIn->Write();
 
  249   hFMuoNLayers->Write();
 
  252   hFMuoMomentumIn->Write();
 
  257   FairSystemInfo sysInfo;
 
  258   Float_t maxMemory=sysInfo.GetMaxMemory();
 
  259   cout << 
"<DartMeasurement name=\"MaxMemory\" type=\"numeric/double\">";
 
  261   cout << 
"</DartMeasurement>" << endl;
 
  267   Float_t cpuUsage=ctime/
rtime;
 
  268   cout << 
"<DartMeasurement name=\"CpuLoad\" type=\"numeric/double\">";
 
  270   cout << 
"</DartMeasurement>" << endl;
 
  273   cout << 
"Real time " << rtime << 
" s, CPU time " << ctime
 
  275   cout << 
"CPU usage " << cpuUsage*100. << 
"%" << endl;
 
  276   cout << 
"Max Memory " << maxMemory << 
" MB" << endl;
 
  278   cout << 
"Macro finished successfully." << endl;