コード例 #1
0
ファイル: qualityStudies.C プロジェクト: Andrej-CMS/cmssw
void qualityStudiesZGoldenNotIso(TFile * output_file, TChain *Events){

  gStyle->SetOptStat();
  gROOT->SetStyle("Plain");
  using namespace std;


  // zGolden plots
  TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1TrkIso> 3.0 || zGoldenDau2TrkIso > 3.0 ) && zGoldenDau1Eta<2.1 &&  zGoldenDau2Eta<2.1");
  TDirectory * dir = output_file->mkdir("nonIsolatedZToMuMuPlots");
  dir->cd();

  TH1F * zMass = getTH1Histo(Events, "zMass", "zGoldenMass", 200, 0, 200,  cut_zGolden) ;
  zMass->Write();
  delete zMass;

  //Quality checks
  // Chi2

  // quality variables
  // caveat: I'm  requiring isolations
  TH1F * dauChi2 = getTH1Histo(Events, "dauChi2", "zGoldenDau1Chi2", 1000, 0, 100,  cut_zGolden) ;
  TH1F * dau2Chi2 = getTH1Histo(Events, "dau2Chi2", "zGoldenDau2Chi2", 1000, 0, 100,  cut_zGolden) ;
  dauChi2->Add(dau2Chi2);
  dauChi2->Write();
  delete dauChi2;
  delete dau2Chi2;
   

  dir->cd();
  TH1F * zMassOneDauChi2Higher10 = getTH1Histo(Events, "zMassOneDauChi2Higher10", "zGoldenMass", 200, 0, 200,  cut_zGolden +"zGoldenDau1Chi2>10 || zGoldenDau2Chi2>10") ;  
  zMassOneDauChi2Higher10->Write();
  delete   zMassOneDauChi2Higher10;

  dir->cd();
  TH1F * zMassBothDauChi2Higher10 = getTH1Histo(Events, "zMassBothDauChi2Higher10", "zGoldenMass", 200, 0, 200,  cut_zGolden +"zGoldenDau1Chi2>10 && zGoldenDau2Chi2>10") ;
  zMassBothDauChi2Higher10->Write();
  delete   zMassBothDauChi2Higher10;

  dir->cd();  
  TH1F *dauChi2NofMuonHits0  = getTH1Histo(Events, "dauChi2NofMuonHits0", "zGoldenDau1Chi2", 1000, 0, 100,  cut_zGolden + "zGoldenDau1NofMuonHits==0") ;
  TH1F *dau2Chi2NofMuonHits0  = getTH1Histo(Events, "dau2Chi2NofMuonHits0", "zGoldenDau2Chi2", 1000, 0, 100,  cut_zGolden + "zGoldenDau2NofMuonHits==0") ;
  dauChi2NofMuonHits0->Add(dau2Chi2NofMuonHits0);
  dauChi2NofMuonHits0->Write();
  delete dauChi2NofMuonHits0;
  delete dau2Chi2NofMuonHits0;


  dir->cd();

  TH1F *dauSaChi2NofSaMuonHits0  = getTH1Histo(Events, "dauSaChi2NofSaMuonHits0", "zGoldenDau1SaChi2", 1000, 0, 100,  cut_zGolden + "zGoldenDau1SaNofMuonHits==0") ;
  TH1F *dau2SaChi2NofSaMuonHits0  = getTH1Histo(Events, "dau2SaChi2NofSaMuonHits0", "zGoldenDau2SaChi2", 1000, 0, 100,  cut_zGolden + "zGoldenDau2SaNofMuonHits==0") ;
  dauSaChi2NofSaMuonHits0->Add(dau2SaChi2NofSaMuonHits0);
  dauSaChi2NofSaMuonHits0->Write();
  delete dauSaChi2NofSaMuonHits0;
  delete dau2SaChi2NofSaMuonHits0;



  TH1F *dauChi2NofStripHits0  = getTH1Histo(Events, "dauChi2NofStripHits0", "zGoldenDau1Chi2", 1000, 0, 100,  cut_zGolden + "zGoldenDau1NofStripHits<10") ;
  TH1F *dau2Chi2NofStripHits0  = getTH1Histo(Events, "dau2Chi2NofStripHits0", "zGoldenDau2Chi2", 1000, 0, 100,  cut_zGolden + "zGoldenDau2NofStripHits<10") ;
  dauChi2NofStripHits0->Add(dau2Chi2NofStripHits0);
  dauChi2NofStripHits0->Write();
  //cout<<"Number of zCandidate with at least one daughter with Chi2 higher: "<<zMass->GetEntries()<<endl;
  delete dauChi2NofStripHits0;
  delete dau2Chi2NofStripHits0;
  
  
 

 // Number of  Strips Hits for global track
  dir->cd();
  // caveat: I'm  requiring isolations
  
  TH1F *dauNofStripHits  = getTH1Histo(Events, "dauNofStripHits", "zGoldenDau1NofStripHits", 100, 0, 100,  cut_zGolden ) ;
  TH1F *dau2NofStripHits  = getTH1Histo(Events, "dau2NofStripHits", "zGoldenDau2NofStripHits", 100, 0, 100,  cut_zGolden ) ;
  dauNofStripHits->Add(dau2NofStripHits);
  dauNofStripHits->Write();
  delete dauNofStripHits;
  delete dau2NofStripHits;


  dir->cd();
  TH1F * zMassBothDauNofStripsHitsLower10 = getTH1Histo(Events, "zMassBothDauNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofStripHits<10 && zGoldenDau2NofStripHits<10" );
  zMassBothDauNofStripsHitsLower10->Write();
  delete zMassBothDauNofStripsHitsLower10;

  dir->cd();
  TH1F * zMassOneDauNofStripsHitsLower10 = getTH1Histo(Events, "zMassOneDauNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofStripHits<10 || zGoldenDau2NofStripHits<10" );
  zMassOneDauNofStripsHitsLower10->Write();
  delete zMassOneDauNofStripsHitsLower10;

  

// Number of  Strips Hits for inner track
  dir->cd();
  // caveat: I'm  requiring isolations
   
  TH1F *dauTrkNofStripHits  = getTH1Histo(Events, "dauTrkNofStripHits", "zGoldenDau1TrkNofStripHits", 100, 0, 100,  cut_zGolden ) ;
  TH1F *dau2TrkNofStripHits  = getTH1Histo(Events, "dau2TrkNofStripHits", "zGoldenDau2TrkNofStripHits", 100, 0, 100,  cut_zGolden ) ;
  dauTrkNofStripHits->Add(dau2TrkNofStripHits);
  dauTrkNofStripHits->Write();
  delete dauTrkNofStripHits;
  delete dau2TrkNofStripHits;


  dir->cd();
  TH1F * zMassBothDauTrkNofStripsHitsLower10 = getTH1Histo(Events, "zMassBothDauTrkNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofStripHits<10 && zGoldenDau2TrkNofStripHits<10" );
  zMassBothDauTrkNofStripsHitsLower10->Write();
  delete zMassBothDauTrkNofStripsHitsLower10;

  dir->cd();
  TH1F * zMassOneDauTrkNofStripsHitsLower10 = getTH1Histo(Events, "zMassOneDauTrkNofStripsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofStripHits<10 || zGoldenDau2TrkNofStripHits<10" );
  zMassOneDauTrkNofStripsHitsLower10->Write();
  delete zMassOneDauTrkNofStripsHitsLower10;

  


 // Number of  Pixel Hits for global track
  dir->cd();
  // caveat: I'm  requiring isolations
  
  TH1F *dauNofPixelHits  = getTH1Histo(Events, "dauNofPixelHits", "zGoldenDau1NofPixelHits", 100, 0, 100,  cut_zGolden ) ;
  TH1F *dau2NofPixelHits  = getTH1Histo(Events, "dau2NofPixelHits", "zGoldenDau2NofPixelHits", 100, 0, 100,  cut_zGolden ) ;
  dauNofPixelHits->Add(dau2NofPixelHits);
  dauNofPixelHits->Write();
  delete dauNofPixelHits;
  delete dau2NofPixelHits;


  dir->cd();
  TH1F * zMassBothDauNofPixelsHitsLower10 = getTH1Histo(Events, "zMassBothDauNofPixelsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofPixelHits<10 && zGoldenDau2NofPixelHits<10" );
  zMassBothDauNofPixelsHitsLower10->Write();
  delete zMassBothDauNofPixelsHitsLower10;

  dir->cd();
  TH1F * zMassOneDauNofPixelsHitsLower10 = getTH1Histo(Events, "zMassOneDauNofPixelsHitsLower10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofPixelHits<10 || zGoldenDau2NofPixelHits<10" );
  zMassOneDauNofPixelsHitsLower10->Write();
  delete zMassOneDauNofPixelsHitsLower10;

  


 // Number of  Pixel Hits for inner track
 dir->cd();
  // caveat: I'm  requiring isolations
   
  TH1F *dauTrkNofPixelHits  = getTH1Histo(Events, "dauTrkNofPixelHits", "zGoldenDau1TrkNofPixelHits", 100, 0, 100,  cut_zGolden ) ;
  TH1F *dau2TrkNofPixelHits  = getTH1Histo(Events, "dau2TrkNofPixelHits", "zGoldenDau2TrkNofPixelHits", 100, 0, 100,  cut_zGolden ) ;
  dauTrkNofPixelHits->Add(dau2TrkNofPixelHits);
  dauTrkNofPixelHits->Write();
  delete dauTrkNofPixelHits;
  delete dau2TrkNofPixelHits;


  dir->cd();
  TH1F * zMassBothDauTrkNofPixelsHitsLower1 = getTH1Histo(Events, "zMassBothDauTrkNofPixelsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofPixelHits<1 && zGoldenDau2TrkNofPixelHits<1" );
  zMassBothDauTrkNofPixelsHitsLower1->Write();
  delete zMassBothDauTrkNofPixelsHitsLower1;

  dir->cd();
  TH1F * zMassOneDauTrkNofPixelsHitsLower1 = getTH1Histo(Events, "zMassOneDauTrkNofPixelsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1TrkNofPixelHits<1 || zGoldenDau2TrkNofPixelHits<1" );
  zMassOneDauTrkNofPixelsHitsLower1->Write();
  delete zMassOneDauTrkNofPixelsHitsLower1;
  






  // Number of  Muon Hits for global track
  dir->cd();
  // caveat: I'm  requiring isolations
  
  TH1F *dauNofMuonHits  = getTH1Histo(Events, "dauNofMuonHits", "zGoldenDau1NofMuonHits", 100, 0, 100,  cut_zGolden ) ;
  TH1F *dau2NofMuonHits  = getTH1Histo(Events, "dau2NofMuonHits", "zGoldenDau2NofMuonHits", 100, 0, 100,  cut_zGolden ) ;
  dauNofMuonHits->Add(dau2NofMuonHits);
  dauNofMuonHits->Write();
  delete dauNofMuonHits;
  delete dau2NofMuonHits;


  dir->cd();
  TH1F * zMassBothDauNofMuonsHitsLower1 = getTH1Histo(Events, "zMassBothDauNofMuonsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofMuonHits<1 && zGoldenDau2NofMuonHits<1" );
  zMassBothDauNofMuonsHitsLower1->Write();
  delete zMassBothDauNofMuonsHitsLower1;

  dir->cd();
  TH1F * zMassOneDauNofMuonsHitsLower1 = getTH1Histo(Events, "zMassOneDauNofMuonsHitsLowe10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1NofMuonHits<1 || zGoldenDau2NofMuonHits<1" );
  zMassOneDauNofMuonsHitsLower1->Write();
  delete zMassOneDauNofMuonsHitsLower1;

  

  // Number of  Muon Hits for outer track
 dir->cd();
  // caveat: I'm  requiring isolations
  
  TH1F *dauSaNofMuonHits  = getTH1Histo(Events, "dauSaNofMuonHits", "zGoldenDau1SaNofMuonHits", 100, 0, 100,  cut_zGolden ) ;
  TH1F *dau2SaNofMuonHits  = getTH1Histo(Events, "dau2SaNofMuonHits", "zGoldenDau2SaNofMuonHits", 100, 0, 100,  cut_zGolden ) ;
  dauSaNofMuonHits->Add(dau2SaNofMuonHits);
  dauSaNofMuonHits->Write();
  delete dauSaNofMuonHits;
  delete dau2SaNofMuonHits;


  dir->cd();
  TH1F * zMassBothDauSaNofMuonsHitsLower1 = getTH1Histo(Events, "zMassBothDauSaNofMuonsHitsLower1","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1SaNofMuonHits<1 && zGoldenDau2SaNofMuonHits<1" );
  zMassBothDauSaNofMuonsHitsLower1->Write();
  delete zMassBothDauSaNofMuonsHitsLower1;

  dir->cd();
  TH1F * zMassOneDauSaNofMuonsHitsLower1 = getTH1Histo(Events, "zMassOneDauSaNofMuonsHitsLowe10","zGoldenMass", 200, 0, 200,cut_zGolden +"zGoldenDau1SaNofMuonHits<1 || zGoldenDau2SaNofMuonHits<1" );
  zMassOneDauSaNofMuonsHitsLower1->Write();
  delete zMassOneDauSaNofMuonsHitsLower1;
 
 



  // dxyFromBS
  dir->cd();

  TH1F *dauDxy  = getTH1Histo(Events, "dauDxy", "zGoldenDau1dxyFromBS", 200, -1, 1,  cut_zGolden ) ;
  TH1F *dau2Dxy  = getTH1Histo(Events, "dau2Dxy", "zGoldenDau2dxyFromBS", 200, -1, 1,  cut_zGolden ) ;
  dauDxy->Add(dau2Dxy);
  dauDxy->Write();
  delete dauDxy;
  delete dau2Dxy;


  TH1F * zMassBothDaudxyFromBSHigher0_2  = getTH1Histo(Events, "zMassBothDaudxyFromBSHigher0_2", "zGoldenMass", 200, -1, 1,  cut_zGolden + "zGoldenDau1dxyFromBS>0.2 && zGoldenDau2dxyFromBS>0.2" ) ;
  zMassBothDaudxyFromBSHigher0_2->Write();
  delete zMassBothDaudxyFromBSHigher0_2;



  dir->cd();
  TH1F * zMassOneDaudxyFromBSHigher0_2  = getTH1Histo(Events, "zMassOneDaudxyFromBSHigher0_2", "zGoldenMass", 200, -1, 1,  cut_zGolden + "zGoldenDau1dxyFromBS>0.2 || zGoldenDau2dxyFromBS>0.2" ) ;
  zMassOneDaudxyFromBSHigher0_2->Write();
  delete zMassOneDaudxyFromBSHigher0_2;
 

  // isTrackerMuon
  dir->cd(); 
  TH1F * zMassBothDauNoTrackerMuon    = getTH1Histo(Events, "zMassBothDauNoTrackerMuon", "zGoldenMass", 200, 0, 200,  cut_zGolden + "zGoldenDau1TrackerMuonBit==0 && zGoldenDau2TrackerMuonBit==0");
  zMassBothDauNoTrackerMuon->Write();
  delete zMassBothDauNoTrackerMuon;

  dir->cd(); 
  TH1F * zMassOneDauNoTrackerMuon    = getTH1Histo(Events, "zMassOneDauNoTrackerMuon", "zGoldenMass", 200, 0, 200,  cut_zGolden + "zGoldenDau1TrackerMuonBit==0 || zGoldenDau2TrackerMuonBit==0");
  zMassOneDauNoTrackerMuon->Write();
  delete zMassOneDauNoTrackerMuon;
  


  // Eta distribution if MuonHits is zero
  
  dir->cd();
  TH1F * dauEtaNofMuonHits0 = getTH1Histo(Events, "dauEtaNofMuonHits0", "zGoldenDau1Eta", 200, -5, 5,  cut_zGolden +  "zGoldenDau1NofMuonHits==0" );
  TH1F * dau2EtaNofMuonHits0 = getTH1Histo(Events, "dau2EtaNofMuonHits0", "zGoldenDau2Eta", 200, -5, 5,  cut_zGolden +  "zGoldenDau2NofMuonHits==0" );
  dauEtaNofMuonHits0->Add(dau2EtaNofMuonHits0);
  dauEtaNofMuonHits0->Write();
  delete dauEtaNofMuonHits0;
  delete dau2EtaNofMuonHits0;
  

  // Correlation study

  // *** Chi2 vs MuonHits  ***
 
  dir->cd();
  TH2F * Chi2VsMuonHits = new TH2F("Chi2VsMuonHits", "Chi2VsMuonHits", 100, 0, 60, 100, 0, 6);
  //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5);
  Events->Project("Chi2VsMuonHits", "zGoldenDau1Chi2:zGoldenDau1NofMuonHits", cut_zGolden);         
  Chi2VsMuonHits->SetDrawOption("Box"); 

  Chi2VsMuonHits->Write();

  delete Chi2VsMuonHits;


  // *** Chi2 vs StripHits  ***
 
  dir->cd();
  TH2F * Chi2VsStripHits = new TH2F("Chi2VsStripHits", "Chi2VsStripHits", 100, 0, 30, 100, 0, 6);
  //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5);
  Events->Project("Chi2VsStripHits", "zGoldenDau1Chi2:zGoldenDau1NofStripHits", cut_zGolden);         
  Chi2VsStripHits->SetDrawOption("Box"); 

  Chi2VsStripHits->Write();

  delete Chi2VsStripHits;

   // *** MuonHits vs Eta  ***
 
  dir->cd();
  TH2F * MuonHitsVsEta = new TH2F("MuonHitsVsEta", "MuonHitsVsEta", 100, -2.5, 2.5, 100, 0, 60);
  //TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5);
  Events->Project("MuonHitsVsEta", "zGoldenDau1NofMuonHits:zGoldenDau1Eta", cut_zGolden);         
  MuonHitsVsEta->SetDrawOption("Box"); 

  MuonHitsVsEta->Write();

  delete MuonHitsVsEta;


  output_file->cd("/");

  
 

  //   output_file->Close(); 
 
}
コード例 #2
0
void plotsAfterCuts_OneLeg(){

  gStyle->SetOptStat();
  gROOT->SetStyle("Plain");
  using namespace std;

  //  #include <exception>;

  //    TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/incl15WithBsPv/NtupleLoose_test_inclu15_1_2.root");
  // TFile *file = TFile::Open("../NutpleLooseTestNew_oneshot_all_10_1.root");
//TFile *file = TFile::Open("rfio:/castor/cern.ch/user/d/degrutto/zmmWithBsPv/NtupleLoose_test.root");
//    TTree * Events = dynamic_cast< TTree *> (file->Get("Events"));

  TChain Events("Events"); 
  // one need 130 events... each file has 1000 ev
 Events.Add("../zmmNtuple/NtupleLooseTestNew.root");
  /*  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_1_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_2_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_3_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_4_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_5_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_6_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_7_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_8_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_9_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_10_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_11_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_12_None.root");
  Events.Add("../zmmNtuple/NtupleLooseTestNew_oneshot_all_Test_13_None.root");
  */

  
  
  TFile * output_file = TFile::Open("histoZmm_OneCut.root", "RECREATE");
  // TFile * output_file = TFile::Open("histo_test.root", "RECREATE");
  
  // zGolden plots
  TCut cut_zGolden("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 &&  abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1) ");
  TDirectory * dir = output_file->mkdir("goodZToMuMuPlots");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
  //  Events.Draw("zGoldenMass");
  Events.Project("zMass", "zGoldenMass", cut_zGolden );
  cout<<"Number of zGoldenAA : "<<zMass->GetEntries()<<endl;
  setGraphics(zMass);
  zMass->Write();
  delete zMass;

  
  TCut cut_zGoldenPt15("zGoldenMass>20 && zGoldenDau1Pt> 15 && zGoldenDau2Pt>15 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0  &&  abs(zGoldenDau1Eta)<2.1 &&  abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && (zGoldenDau1HLTBit==1 || zGoldenDau2HLTBit==1)");
  dir->cd();
  
  TH1F * zMassPt15 = new TH1F("zMassPt15", "zMassPt15", 200, 0, 200);
  Events.Project("zMassPt15", "zGoldenMass", cut_zGoldenPt15  );
  setGraphics(zMassPt15);
  cout<<"Number of zGoldenPt15 : "<<zMassPt15->GetEntries()<<endl;
  zMassPt15->Write();
  delete zMassPt15;



  output_file->cd("/");
  
   TCut cut2_zGolden1HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 &&  abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ( (zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || ((zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10)) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==0 || zGoldenDau2HLTBit ==0)");
  TDirectory * dir = output_file->mkdir("goodZToMuMu1HLTPlots");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
    Events.Project("zMass", "zGoldenMass", cut2_zGolden1HLT );
  cout<<"Number of zGolden1HLT : "<<zMass->GetEntries()<<endl;
 zMass->Write();
  delete zMass;
 //zMass2->Write();

  output_file->cd("/");


  output_file->cd("/");
  
   TCut cut2_zGoldenAB1HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && ( abs(zGoldenDau1Eta)>2.1 ||  abs(zGoldenDau2Eta)>2.1 )   && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)");
  TDirectory * dir = output_file->mkdir("goodZToMuMuAB1HLTPlots");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
    Events.Project("zMass", "zGoldenMass", cut2_zGoldenAB1HLT );
  cout<<"Number of zGoldenAB1HLT : "<<zMass->GetEntries()<<endl;
 zMass->Write();
  delete zMass;
 //zMass2->Write();

  output_file->cd("/");


   TCut cut2_zGolden2HLT("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0 && abs(zGoldenDau1Eta)<2.1 &&  abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==1 && zGoldenDau2HLTBit ==1)");

  TDirectory * dir = output_file->mkdir("goodZToMuMu2HLTPlots");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
  Events.Project("zMass", "zGoldenMass", cut2_zGolden2HLT );
  zMass->Write();
  cout<<"Number of zGolden2HLT : "<<zMass->GetEntries()<<endl;
  delete zMass;
  output_file->cd("/");


 // zGoldenOneNotIso plots
  TCut cut_zGoldenOneNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && ( (zGoldenDau1TrkIso> 3.0 &&  zGoldenDau2TrkIso < 3.0) || (zGoldenDau2TrkIso> 3.0 &&  zGoldenDau1TrkIso < 3.0))  && abs(zGoldenDau1Eta)<2.1 &&  abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)");
  TDirectory * dir = output_file->mkdir("oneNonIsolatedZToMuMuPlots");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
  Events.Project("zMass", "zGoldenMass", cut_zGoldenOneNotIso );
  zMass->Write();
  cout<<"Number of zGoldenOneNotIso : "<<zMass->GetEntries()<<endl;
  delete zMass;
  output_file->cd("/");

//  // zGoldenTwoNotIso plots
  TCut cut_zGoldenTwoNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1TrkIso> 3.0 &&  zGoldenDau2TrkIso > 3.0) && abs(zGoldenDau1Eta)<2.1 &&  abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)");
  TDirectory * dir = output_file->mkdir("twoNonIsolatedZToMuMuPlots");
   dir->cd();
   TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
   Events.Project("zMass","zGoldenMass", cut_zGoldenTwoNotIso );
   zMass->Write();
  cout<<"Number of zGoldenTwoNotIso : "<<zMass->GetEntries()<<endl;
   delete zMass;
   output_file->cd("/");

 // zGoldenNotIso plots
  TCut cut_zGoldenNotIso("zGoldenMass>60 && zGoldenMass<120 && zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && (zGoldenDau1TrkIso> 3.0 ||  zGoldenDau2TrkIso > 3.0) && abs(zGoldenDau1Eta)<2.1 &&  abs(zGoldenDau2Eta)<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && abs(zGoldenDau1dxyFromBS)<0.2 && abs(zGoldenDau2dxyFromBS)<0.2 && ((zGoldenDau1NofStripHits + zGoldenDau1NofPixelHits)>=10 || (zGoldenDau2NofStripHits + zGoldenDau2NofPixelHits)>=10) && (zGoldenDau1NofMuonHits>0 || zGoldenDau2NofMuonHits>0) && ( zGoldenDau1HLTBit ==1 || zGoldenDau2HLTBit ==1)");
  TDirectory * dir = output_file->mkdir("nonIsolatedZToMuMuPlots");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
  Events.Project("zMass", "zGoldenMass", cut_zGoldenNotIso );
  zMass->Write() ;
  cout<<"Number of zGoldenNotIso : "<<zMass->GetEntries()<<endl;
  delete zMass;
  output_file->cd("/");

  // zGoldenSameCharge plots........
  TCut cut_zSameCharge("zSameChargeMass>60 && zSameChargeMass<120 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && zSameChargeDau1TrkIso< 3.0 && zSameChargeDau2TrkIso < 3.0 && abs(zSameChargeDau1Eta)<2.1 &&  abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<10 && zSameChargeDau2Chi2<10 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 && ((zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>=10 || (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>=10)  && (zSameChargeDau1NofMuonHits>0 || zSameChargeDau2NofMuonHits>0) && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) ");
  TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargePlots");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
  Events.Project("zMass", "zSameChargeMass", cut_zSameCharge );
  zMass->Write();
  cout<<"Number of zGoldenSameCharge : "<<zMass->GetEntries()<<endl;
  delete zMass;
  output_file->cd("/");

 // zGoldenSameChargeNotIso plots........
  TCut cut_zSameChargeNotIso("zSameChargeMass>60 && zSameChargeMass<120 && zSameChargeDau1Pt> 20 && zSameChargeDau2Pt>20 && ( zSameChargeDau1TrkIso> 3.0 || zSameChargeDau2TrkIso > 3.0) && abs(zSameChargeDau1Eta)<2.1 &&  abs(zSameChargeDau2Eta)<2.1 && zSameChargeDau1Chi2<10 && zSameChargeDau2Chi2<10 && abs(zSameChargeDau1dxyFromBS)<0.2 && abs(zSameChargeDau2dxyFromBS)<0.2 && ( (zSameChargeDau1NofStripHits + zSameChargeDau1NofPixelHits)>=10 || (zSameChargeDau2NofStripHits + zSameChargeDau2NofPixelHits)>=10) && (zSameChargeDau1NofMuonHits>0 || zSameChargeDau2NofMuonHits>0) && (zSameChargeDau1HLTBit==1 || zSameChargeDau2HLTBit==1) ");
  TDirectory * dir = output_file->mkdir("goodZToMuMuSameChargeNotIsoPlots");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
  Events.Project("zMass", "zSameChargeMass", cut_zSameChargeNotIso );
  zMass->Write();
  cout<<"Number of zGoldenSameChargeNotIso : "<<zMass->GetEntries()<<endl;
  delete zMass;
  output_file->cd("/");

  
// zMuTrk plots
  TCut cut_zMuTrk("zMuTrkMass>60 && zMuTrkMass<120 && zMuTrkDau1Pt> 20 && zMuTrkDau2Pt>20 && zMuTrkDau1TrkIso< 3.0 && zMuTrkDau2TrkIso < 3.0 && abs(zMuTrkDau1Eta)<2.1 &&  abs(zMuTrkDau2Eta)<2.1 && (zMuTrkDau1Chi2<10) && abs(zMuTrkDau1dxyFromBS)<0.2 && abs(zMuTrkDau2dxyFromBS)<0.2 && ((zMuTrkDau1TrkNofStripHits + zMuTrkDau1TrkNofPixelHits)>=10) && (zMuTrkDau1NofMuonHits>0) &&  (zMuTrkDau1HLTBit==1) ");
  TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackPlots");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
  Events.Project("zMass", "zMuTrkMass", cut_zMuTrk );
  zMass->Write();
  cout<<"Number of zMuTrk : "<<zMass->GetEntries()<<endl;
  delete zMass;
  output_file->cd("/");

// zMuTrkMu plots
  TCut cut_zMuTrkMu("zMuTrkMuMass>60 && zMuTrkMuMass<120 && zMuTrkMuDau1Pt>20 && zMuTrkMuDau2Pt>20 && zMuTrkMuDau1TrkIso< 3.0 && zMuTrkMuDau2TrkIso<3.0 && abs(zMuTrkMuDau1Eta)<2.1 &&  abs(zMuTrkMuDau2Eta)<2.1 && (( zMuTrkMuDau1Chi2<10 &&  zMuTrkMuDau1GlobalMuonBit==1 ) || ( zMuTrkMuDau2Chi2<10 &&  zMuTrkMuDau2GlobalMuonBit==1))  && abs(zMuTrkMuDau1dxyFromBS)<0.2 && abs(zMuTrkMuDau2dxyFromBS)<0.2 && (( zMuTrkMuDau1GlobalMuonBit==1  && (zMuTrkMuDau1TrkNofStripHits + zMuTrkMuDau1TrkNofPixelHits)>=10) || ( zMuTrkMuDau2GlobalMuonBit==1  && (zMuTrkMuDau2TrkNofStripHits + zMuTrkMuDau2TrkNofPixelHits)>=10)  ) && (( zMuTrkMuDau1GlobalMuonBit==1 && zMuTrkMuDau1NofMuonHits>0) || (  zMuTrkMuDau2GlobalMuonBit==1 && zMuTrkMuDau2NofMuonHits>0 )) && ( (zMuTrkMuDau1HLTBit==1 && zMuTrkMuDau1GlobalMuonBit==1 ) || (zMuTrkMuDau2HLTBit==1 && zMuTrkMuDau2GlobalMuonBit==1 )) ");
  TDirectory * dir = output_file->mkdir("goodZToMuMuOneTrackerMuonPlots");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
  Events.Project("zMass", "zMuTrkMuMass", cut_zMuTrkMu );
  zMass->Write();
  cout<<"Number of zMuTrkMu : "<<zMass->GetEntries()<<endl;
  delete zMass;
  output_file->cd("/");



  // zMuSta plots
  TCut cut_zMuSta("zMuStaMass>60 && zMuStaMass<120 && zMuStaDau1Pt>20 && zMuStaDau2Pt>20 && zMuStaDau1TrkIso< 3.0 && zMuStaDau2TrkIso<3.0 && abs(zMuStaDau1Eta)<2.1 &&  abs(zMuStaDau2Eta)<2.1 && (( zMuStaDau1Chi2<10 &&  zMuStaDau1GlobalMuonBit==1 ) || ( zMuStaDau2Chi2<10 &&  zMuStaDau2GlobalMuonBit==1))  && abs(zMuStaDau1dxyFromBS)<0.2 && abs(zMuStaDau2dxyFromBS)<0.2 && (( zMuStaDau1GlobalMuonBit==1  && (zMuStaDau1TrkNofStripHits + zMuStaDau1TrkNofPixelHits)>=10) || ( zMuStaDau2GlobalMuonBit==1  && (zMuStaDau2TrkNofStripHits + zMuStaDau2TrkNofPixelHits)>=10)  ) && (( zMuStaDau1GlobalMuonBit==1 && zMuStaDau1NofMuonHits>0) || (  zMuStaDau2GlobalMuonBit==1 && zMuStaDau2NofMuonHits>0 )) && ( (zMuStaDau1HLTBit==1 && zMuStaDau1GlobalMuonBit==1 ) || (zMuStaDau2HLTBit==1 && zMuStaDau2GlobalMuonBit==1 )) ");

  TDirectory * dir = output_file->mkdir("goodZToMuMuOneStandAloneMuonPlots");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
  Events.Project("zMass", "zMuStaMass", cut_zMuSta );
  zMass->Write();
  cout<<"Number of zMuSta : "<<zMass->GetEntries()<<endl;
  delete zMass;
  output_file->cd("/");

// zMuSta plots
  TCut cut_zMuMuSta("zGoldenDau1Pt> 20 && zGoldenDau2Pt>20 && zGoldenDau1TrkIso< 3.0 && zGoldenDau2TrkIso < 3.0  && zGoldenDau1Eta<2.1 &&  zGoldenDau2Eta<2.1 && (zGoldenDau1Chi2<10 || zGoldenDau2Chi2<10) && zGoldenDau1dxyFromBS<0.02 && zGoldenDau2dxyFromBS<0.02");
  TDirectory * dir = output_file->mkdir("zmumuSaMassHistogram");
  dir->cd();
  TH1F * zMass = new TH1F("zMass", "zMass", 200, 0, 200);
  Events.Project("zMass", "zGoldenMassSa", cut_zMuMuSta );
  zMass->Write();
  delete zMass;
  output_file->cd("/");

  
  TDirectory * dir = output_file->mkdir("zPlots");
  dir->cd();
  TH1F * zGoldenPt = new TH1F("zGoldenPt", "zGoldenPt", 200, 0, 200);
  Events.Project("zGoldenPt", "zGoldenPt", cut_zGolden );
  zGoldenPt->Write();
  delete zGoldenPt;
   

  TH1F * zGoldenY = new TH1F("zGoldenY", "zGoldenY", 200, -5, 5);
  Events.Project("zGoldenY", "zGoldenY", cut_zGolden );
  zGoldenY->Write();
  delete zGoldenY;
  
  output_file->cd("/");



  TDirectory * dir = output_file->mkdir("MuPlots");
  dir->cd();
  

  TH1F * muNotTriggeredEta = new TH1F("muNotTriggeredEta", "muNotTriggeredEta", 240, -6, 6.);
  TH1F * h2 = new TH1F("h2", "h2", 240, -6, 6.);
  
  Events.Project("muNotTriggeredEta","zGoldenDau1Eta", "zGoldenDau1HLTBit==0");
  Events.Project("h2","zGoldenDau2Eta", "zGoldenDau2HLTBit==0");

  muNotTriggeredEta->Add(h2);
  muNotTriggeredEta->Write();
  delete muNotTriggeredEta;
  delete h2;
  
  TH1F * zGoldenDauHighPt = new TH1F("zGoldenDauHighPt", "zGoldenDauHighPt", 200, 0, 200);
  Events.Project("zGoldenDauHighPt", "max(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden );
  zGoldenDauHighPt->Write();
  delete zGoldenDauHighPt;
  
  TH1F * zGoldenDauLowPt = new TH1F("zGoldenDauLowPt", "zGoldenDauLowPt", 200, 0, 200);
  Events.Project("zGoldenDauLowPt", "min(zGoldenDau1Pt, zGoldenDau2Pt)", cut_zGolden );
  zGoldenDauLowPt->Write();
  delete zGoldenDauLowPt;

  //(mu1.phi -mu2.phi)
  TH1F * deltaPhi = new TH1F("deltaPhi", "deltaPhi", 120, 0, 6.);
  TH1F * h2 = new TH1F("h2", "h2", 120, 0, 6. );
  TH1F * h3 = new TH1F("h3", "h3", 120, 0, 6. );
  
  /*    result = phi1 - phi2;
040     while (result > M_PI) result -= 2*M_PI;
041     while (result <= -M_PI) result += 2*M_PI;
042     return result;
  */ 

  Events.Project("deltaPhi", "abs(zGoldenDau1Phi - zGoldenDau2Phi)", "-TMath::Pi() < (zGoldenDau1Phi - zGoldenDau2Phi) < TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20"  + cut_zGolden);
  Events.Project("h2", "abs(zGoldenDau1Phi - zGoldenDau2Phi - 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) > TMath::Pi()" , "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + + cut_zGolden);
  Events.Project("h3", "abs(zGoldenDau1Phi - zGoldenDau2Phi + 2 * TMath::Pi())", "(zGoldenDau1Phi - zGoldenDau2Phi) <=  -TMath::Pi()", "zGoldenDau1Pt>20 && zGoldenDau2Pt >20" + cut_zGolden );
  
  deltaPhi->Add(h2, h3);
  deltaPhi->Write();
  delete deltaPhi;;
  delete h2;
  delete h3;
  
  

  // mu1.eta -mu2.eta
  TH1F * deltaEta = new TH1F("deltaEta", "deltaEta", 120, 0, 6.);
  Events.Project("deltaEta", "abs(zGoldenDau1Eta - zGoldenDau2Eta)", cut_zGolden );
  deltaEta->Write();
  delete deltaEta;
  
  TH1F * dua1Phi = new TH1F("dau1Phi", "dau1Phi", 120, -6, 6.);
  Events.Project("dau1Phi", "zGoldenDau1Phi" , cut_zGolden);
  dau1Phi->Write();
  delete dau1Phi;
  
  TH1F * dua2Phi = new TH1F("dau2Phi", "dau2Phi", 120, -6, 6.);
  Events.Project("dau2Phi", "zGoldenDau2Phi" , cut_zGolden);
  dau2Phi->Write();
  delete dau2Phi;
  
  TH1F * dau1Eta = new TH1F("dua1Eta", "dau1Eta", 120, -6, 6.);
  Events.Project("dau1Eta", "zGoldenDau1Eta", cut_zGolden );
  dau1Eta->Write();
  delete dau1Eta;
  
  TH1F * dau2Eta = new TH1F("dua2Eta", "dau2Eta", 120, -6, 6.);
  Events.Project("dau2Eta", "zGoldenDau2Eta" , cut_zGolden);
  dau2Eta->Write();
  delete dau2Eta;
  
  // quality variables
  // caveat: I'm  requiring isolations
  TH1F * dau1Chi2 = new TH1F("dua1Chi2", "dau1Chi2", 1000, 0, 100);
  Events.Project("dua1Chi2", "zGoldenDau1Chi2", cut_zGolden );
  dau1Chi2->Write();
  delete dau1Chi2;
  
  TH1F * dau2Chi2 = new TH1F("dua2Chi2", "dau2Chi2", 1000, 0, 100);
  Events.Project("dau2Chi2", "zGoldenDau2Chi2", cut_zGolden );
  dau2Chi2->Write();
  delete dau2Chi2;
  
  
  TH1F * dau1Dxy = new TH1F("dua1Dxy", "dau1Dxy", 500, 0, 5);
  Events.Project("dua1Dxy", "zGoldenDau1dxyFromBS", cut_zGolden );
  dau1Dxy->Write();
  delete dau1Dxy;
  
  TH1F * dau2Dxy = new TH1F("dua2Dxy", "dau2Dxy", 500, 0, 5);
  Events.Project("dua2Dxy", "zGoldenDau2dxyFromBS", cut_zGolden );
  dau2Dxy->Write();
  delete dau2Dxy;
  
   
  TH1F * dau1Dz= new TH1F("dua1Dz", "dau1Dz", 500, 0, 20);
  Events.Project("dua1Dz", "zGoldenDau1dzFromBS", cut_zGolden );
  dau1Dz->Write();
  delete dau1Dz;
  
  TH1F * dau2Dz = new TH1F("dua2Dz", "dau2Dz", 500, 0, 20);
  Events.Project("dua2Dz", "zGoldenDau2dzFromBS", cut_zGolden);
  dau2Dz->Write();
  delete dau2Dz;
  
  /*
  TH1F * dau1NofHit = new TH1F("dua1NofHit", "dau1NofHit", 100, -0.5, 99.5);
  Events.Project("dua1NofHit", "zGoldenDau1NofHit", cut_zGolden );
  dau1NofHit->Write();
  delete dau1NofHit;
  
  TH1F * dau2NofHit = new TH1F("dua2NofHit", "dau2NofHit", 100, -0.5, 99.5);
  Events.Project("dua2NofHit", "zGoldenDau2NofHit", cut_zGolden );
  dau2NofHit->Write();
  delete dau2NofHit;
  */ 
  
  TH1F * dau1NofMuCh = new TH1F("dua1NofMuCh", "dau1NofMuCh", 20, -0.5, 19.5);
  Events.Project("dua1NofMuCh", "zGoldenDau1NofMuChambers", cut_zGolden );
  dau1NofMuCh->Write();
  delete dau1NofMuCh;
  
  TH1F * dau2NofMuCh = new TH1F("dua2NofMuCh", "dau2NofMuCh", 20, -0.5, 19.5);
  Events.Project("dua2NofMuCh", "zGoldenDau2NofMuChambers", cut_zGolden );
  dau2NofMuCh->Write();
  delete dau2NofMuCh;
  
  
  TH1F * dau1NofMuMatches = new TH1F("dua1NofMuMatches", "dau1NofMuMatches", 20, -0.5, 19.5);
  Events.Project("dua1NofMuMatches", "zGoldenDau1NofMuMatches", cut_zGolden );
  dau1NofMuMatches->Write();
  delete dau1NofMuMatches;
  
  TH1F * dau2NofMuMatches = new TH1F("dua2NofMuMatches", "dau2NofMuMatches", 20, -0.5, 19.5);
  Events.Project("dua2NofMuMatches", "zGoldenDau2NofMuMatches", cut_zGolden );
  dau2NofMuMatches->Write();
  delete dau2NofMuMatches;
  
  TH1F * dau1EmEnergy  = new TH1F("dua1EmEnergy", "dau1EmEnergy", 200, -0.1, 19.9);
  Events.Project("dua1EmEnergy", "zGoldenDau1MuEnergyEm", cut_zGolden );
  dau1EmEnergy->Write();
  delete dau1EmEnergy;
  
  TH1F * dau2EmEnergy  = new TH1F("dua2EmEnergy", "dau2EmEnergy", 200, -0.1, 19.9);
  Events.Project("dua2EmEnergy", "zGoldenDau2MuEnergyEm", cut_zGolden );
  dau2EmEnergy->Write();
  delete dau2EmEnergy;
  
  TH1F * dau1HadEnergy  = new TH1F("dua1HadEnergy", "dau1HadEnergy", 200, -0.1, 19.9);
  Events.Project("dua1HadEnergy", "zGoldenDau1MuEnergyHad", cut_zGolden );
  dau1HadEnergy->Write();
  delete dau1HadEnergy;
  
  TH1F * dau2HadEnergy  = new TH1F("dua2HadEnergy", "dau2HadEnergy", 200, -0.1, 19.9);
  Events.Project("dua2HadEnergy", "zGoldenDau2MuEnergyHad", cut_zGolden );
  dau2HadEnergy->Write();
  delete dau2HadEnergy;
  

   

  TH2F * MuChambersVsMuMatches = new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5);
  TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5);
  Events.Project("MuChambersVsMuMatches", "zGoldenDau1NofMuChambers:zGoldenDau1NofMuMatches", cut_zGolden);         
  Events.Project("hh2", "zGoldenDau2NofMuChambers:zGoldenDau2NofMuMatches", cut_zGolden);         
  
  MuChambersVsMuMatches->Add(hh2);
  MuChambersVsMuMatches->Write();
  MuChambersVsMuMatches->SetDrawOption("Box");
  //  MuChambersVsMuMatches->Draw("BOX");
  delete MuChambersVsMuMatches;
  delete hh2;
  output_file->cd("/");
  
  TDirectory * dir = output_file->mkdir("TrkPlots");
  dir->cd();
  
  
  
  /*  TH1F * nofHitTrk = new TH1F("nofHitTrk", "nofHitTrk", 100, -0.5, 99.5);
  Events.Project("nofHitTrk", "zMuTrkDau2NofHitTk", cut_zMuTrk );
  nofHitTrk->Write();
  delete nofHitTrk;
  */ 
  
  TH1F * trkChi2 = new TH1F("trkChi2", "trkChi2", 100, -0.5, 99.5);
  Events.Project("trkChi2", "zMuTrkDau2Chi2", cut_zMuTrk );
  trkChi2->Write();
  delete trkChi2;
  

  output_file->cd("/");
   
   
  
  TDirectory * dir = output_file->mkdir("StaPlots");
  dir->cd();
  
  // sta as zDaudxyFromBS=-1 by construction....

  TH1F *  staNofMuCh = new TH1F("staNofMuCh", "staNofMuCh", 20, -0.5, 19.5);
  TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5);
  Events.Project("staNofMuCh", "zMuStaDau1NofMuChambers", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" );
  Events.Project("h2", "zMuStaDau2NofMuChambers", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" );
  staNofMuCh->Add(h2);
  staNofMuCh->Write();
  delete staNofMuCh; 
  delete h2; 
  
  TH1F *  staNofMuMatches = new TH1F("staNofMuMatches", "staNofMuMatches", 20, -0.5, 19.5);
  TH1F * h2 = new TH1F("h2", "h2", 20, -0.5, 19.5);
  Events.Project("staNofMuMatches", "zMuStaDau1NofMuMatches", cut_zMuSta + "zMuStaDau1dxyFromBS==-1" );
  Events.Project("h2", "zMuStaDau2NofMuMatches", cut_zMuSta + "zMuStaDau2dxyFromBS==-1" );
  staNofMuMatches->Add(h2);
  staNofMuMatches->Write();
  delete staNofMuMatches; 
  delete h2; 
  
  TH2F * MuChambersVsMuMatches= new TH2F("MuChambersVsMuMatches", "MuChambersVsMuMatches", 21, -0.5, 20.5, 21, -0.5, 20.5);
  TH2F * hh2= new TH2F("hh2", "hh2", 21, -0.5, 20.5, 21, -0.5, 20.5);
  Events.Project("MuChambersVsMuMatches", "zMuStaDau1NofMuChambers:zMuStaDau1NofMuMatches", cut_zMuSta);         
  Events.Project("hh2", "zMuStaDau2NofMuChambers:zMuStaDau2NofMuMatches", cut_zMuSta);         
  MuChambersVsMuMatches->Add(hh2);
  MuChambersVsMuMatches->SetDrawOption("Box");
  MuChambersVsMuMatches->Write();
  delete MuChambersVsMuMatches;
  delete hh2;
  output_file->cd("/");
  
  // isolations...
   TDirectory * dir = output_file->mkdir("IsoPlots");
   dir->cd();
   

   TH1F * TrkIsoPt20= new TH1F("TrkIsoPt20", "TrkIsoPt20", 200, 0, 20);
   TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20);
   Events.Project("TkIsoPt20", "zGoldenDau1TrkIso" , "zGoldenDau2Pt>20");
   Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>20" );
   TrkIsoPt20->Add(h2);
   TrkIsoPt20->Write();
   delete TrkIsoPt20;
   delete h2;
   
   TH1F * EcalIsoPt20 = new TH1F("EcalIsoPt20", "EcalIsoPt20", 200, 0, 20);
   TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20);
   Events.Project("TkIsoPt20", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20");
   Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>20" );
   EcalIsoPt20->Add(h2);
   EcalIsoPt20->Write();
   delete EcalIsoPt20;
   delete h2;
   
   TH1F * HcalIsoPt20 = new TH1F("HcalIsoPt20", "HcalIsoPt20", 200, 0, 20);
   TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20);
   Events.Project("TkIsoPt20", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" );
   Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>20");
   HcalIsoPt20->Add(h2);
   HcalIsoPt20->Write();
   delete HcalIsoPt20;
   delete h2;
   
   TH1F * TrkIsoPt15= new TH1F("TrkIsoPt15", "TrkIsoPt15", 200, 0, 20);
   TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20);
   Events.Project("TkIsoPt15", "zGoldenDau1TrkIso" , "zGoldenDau1Pt>20");
   Events.Project("h2", "zGoldenDau2TrkIso", "zGoldenDau2Pt>15" );
   TrkIsoPt15->Add(h2);
   TrkIsoPt15->Write();
   delete TrkIsoPt15;
   delete h2;

   TH1F * EcalIsoPt15 = new TH1F("EcalIsoPt15", "EcalIsoPt15", 200, 0, 20);
   TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20);
   Events.Project("TkIsoPt15", "zGoldenDau1EcalIso" , "zGoldenDau1Pt>20");
   Events.Project("h2", "zGoldenDau2EcalIso", "zGoldenDau2Pt>15" );
   EcalIsoPt15->Add(h2);
   
   EcalIsoPt15->Write();
   delete EcalIsoPt15;
   delete h2;

   TH1F * HcalIsoPt15 = new TH1F("HcalIsoPt15", "HcalIsoPt15", 200, 0, 20);
   TH1F * h2 = new TH1F("h2", "h2", 200, 0, 20);
   Events.Project("TkIsoPt15", "zGoldenDau1HcalIso" , "zGoldenDau1Pt>20" );
   Events.Project("h2", "zGoldenDau2HcalIso" , "zGoldenDau2Pt>15");
   HcalIsoPt15->Add(h2);

   HcalIsoPt15->Write();
   delete HcalIsoPt15;
   delete h2;
   output_file->cd("/");



   output_file->Close();
 
 
}