コード例 #1
0
TTree* GetTTree(const std::string TFILE, const std::string TTREE) {
  // Open the TFiles
  TFile* mc_tfile = new TFile(TFILE.c_str(), "READ");
  if (!mc_tfile || mc_tfile->IsZombie()) {
    const std::string ERR = "Could not open the file " + TFILE;
    throw std::runtime_error(ERR);
  }

  // Load the tree
  TTree* tree = new TTree();
  mc_tfile->GetObject(TTREE.c_str(), tree);
  if (!tree || tree->IsZombie()) {
    const std::string ERR = "Could not open the TTree " + TTREE;
    throw std::runtime_error(ERR);
  }

  return tree;
}
コード例 #2
0
void doPostProcessing(TString infname, TString outfile, Int_t events, 
		      Float_t xsec, Float_t kfactor,
		      Float_t filt_eff, bool SortBasketsByEntry = false) {
  
  cout << "Processing File " << infname << endl;
  
  TFile *f = TFile::Open(infname.Data(), "READ");
  if (! f || f->IsZombie()) {
    cout << "File does not exist!" << endl;
    return;
  }
  
  TTree* t = (TTree*)f->Get("Events");
  if (! t || t->IsZombie()) {
    cout << "Tree does not exist!" << endl;
    return;
  }
        
  //-------------------------------------------------------------
  // Removes all non *_CMS2.* branches
  //-------------------------------------------------------------`
  t->SetBranchStatus("*", 0);
  t->SetBranchStatus("*_CMS2.*", 1);

  // Removes the branches (if they exist) that we want to replace
  //evt_xsec_excl
  TString bName = t->GetAlias("evt_xsec_excl");
  //cout << "evt_xsec_excl " << bName << endl;
  if(bName != "") {
    bName.ReplaceAll(".obj", "*");
    t->SetBranchStatus(bName.Data(), 0); 
  }

  //evt_xsec_incl
  bName = t->GetAlias("evt_xsec_incl");
  //cout << "evt_xsec_incl " << bName << endl;
  if(bName != "") {
    bName.ReplaceAll(".obj", "*");
    t->SetBranchStatus(bName.Data(), 0);   
  }
  
  //evt_kfactor
  bName = t->GetAlias("evt_kfactor");
  //cout << "evt_kfactor " << bName << endl;
  if(bName != "") {
    bName.ReplaceAll(".obj", "*");
    t->SetBranchStatus(bName.Data(), 0); 
  }

  //evt_nEvts
  bName = t->GetAlias("evt_nEvts");
  //cout << "evt_nEvts " << bName << endl;
  if(bName != "") {
    bName.ReplaceAll(".obj", "*");
    t->SetBranchStatus(bName.Data(), 0); 
  }

  //evt_filt_eff
  bName = t->GetAlias("evt_filt_eff");
  //cout << "evt_filt_eff " << bName << endl;
  if(bName != "") {
    bName.ReplaceAll(".obj", "*");
    t->SetBranchStatus(bName.Data(), 0); 
  }

  //evt_scale1fb
  bName = t->GetAlias("evt_scale1fb");
  //cout << "evt_scale1fb " << bName << endl;
  if(bName != "") {
    bName.ReplaceAll(".obj", "*");
    t->SetBranchStatus(bName.Data(), 0); 
  }

  TFile *out = TFile::Open(outfile.Data(), "RECREATE");
  TTree *clone;
  if(SortBasketsByEntry)
    clone = t->CloneTree(-1, "fastSortBasketsByEntry");
  else 
    clone = t->CloneTree(-1, "fast");
   

  //-------------------------------------------------------------

  //Calculate scaling factor and put variables into tree 
  Float_t scale1fb = xsec*kfactor*1000*filt_eff/(Float_t)events;
  cout << "scale1fb: " << scale1fb << endl; 

  TBranch* b1 = clone->Branch("evtscale1fb", &scale1fb, "evt_scale1fb/F");
  TBranch* b2 = clone->Branch("evtxsecexcl", &xsec, "evt_xsec_excl/F");
  TBranch* b3 = clone->Branch("evtxsecincl", &xsec, "evt_xsec_incl/F");
  TBranch* b4 = clone->Branch("evtkfactor", &kfactor, "evt_kfactor/F");
  TBranch* b5 = clone->Branch("evtnEvts", &events, "evt_nEvts/I");
  TBranch* b6 = clone->Branch("evtfilteff", &filt_eff, "evt_filt_eff/F");
   
  clone->SetAlias("evt_scale1fb",  "evtscale1fb");
  clone->SetAlias("evt_xsec_excl", "evtxsecexcl");
  clone->SetAlias("evt_xsec_incl",  "evtxsecincl");
  clone->SetAlias("evt_kfactor",   "evtkfactor");
  clone->SetAlias("evt_nEvts",     "evtnEvts");
  clone->SetAlias("evt_filt_eff",     "evtfilteff");

  Int_t nentries = t->GetEntries();
  for(Int_t i = 0; i < nentries; i++) {
    b1->Fill();
    b2->Fill();
    b3->Fill();
    b4->Fill();
    b5->Fill();
    b6->Fill();
  }
  //-------------------------------------------------------------

  clone->Write(); 
  out->Close();
  f->Close();
  return;
  
}
コード例 #3
0
ファイル: addAgedVarsTPfinal.C プロジェクト: olivito/phase2
int addAgedVarsTPfinal(TString infname, TString outfile){
  
  cout << "Processing File " << infname << endl;

  TFile *f = TFile::Open(infname.Data(), "READ");
  if (! f || f->IsZombie()) {
    cout << "File does not exist!" << endl;
    return 1;
  }
  
  TTree* t = (TTree*)f->Get("t");
  if (! t || t->IsZombie()) {
    cout << "Tree does not exist!" << endl;
    return 2;
  }
        
  // old branches
  Float_t lep1pt;
  Float_t lep1eta;
  Float_t lep1phi;
  Float_t lep2pt;
  Float_t lep2eta;
  Float_t lep2phi;
  Int_t nleps;
  Float_t pujetmet;
  Float_t pujetmetphi;
  Float_t pujetmt;
  Int_t nb;
  Int_t nbgen;
  Int_t ncgen;
  Float_t bjet1pt;
  Float_t bjet1eta;
  Float_t bjet2pt;
  Float_t bjet2eta;

  TBranch* b_lep1pt;
  TBranch* b_lep1eta;
  TBranch* b_lep1phi;
  TBranch* b_lep2pt;
  TBranch* b_lep2eta;
  TBranch* b_lep2phi;
  TBranch* b_nleps;
  TBranch* b_pujetmet;
  TBranch* b_pujetmetphi;
  TBranch* b_pujetmt;
  TBranch* b_nb;
  TBranch* b_nbgen;
  TBranch* b_ncgen;
  TBranch* b_bjet1pt;
  TBranch* b_bjet1eta;
  TBranch* b_bjet2pt;
  TBranch* b_bjet2eta;

  // new branches
  Float_t agedweight = 1.;
  Int_t agednleps = -999;
  Float_t agedlep1pt = -999.;
  Float_t agedlep1eta = -999.;
  Float_t agedlep1phi = -999.;
  Float_t smearmet = -999.;
  Float_t smearmetphi = -999.;
  Float_t smearmt = -999.;

  // random generator
  TRandom3 rand;
  const float sigma = 20.; // smear by 20 GeV

  //-------------------------------------------------------------
  // Removes all non *_CMS2.* branches
  //-------------------------------------------------------------`
  t->SetBranchStatus("*", 1);

  TFile *out = TFile::Open(outfile.Data(), "RECREATE");
  TTree *clone;
  clone = t->CloneTree(-1, "fast");

  cout << "Cloning to File " << outfile << endl;

  //-------------------------------------------------------------

  // existing branches
  clone->SetBranchAddress("lep1pt"     ,  &lep1pt     , &b_lep1pt  );
  clone->SetBranchAddress("lep1eta"    ,  &lep1eta    , &b_lep1eta  );
  clone->SetBranchAddress("lep1phi"    ,  &lep1phi    , &b_lep1phi  );
  clone->SetBranchAddress("lep2pt"     ,  &lep2pt     , &b_lep2pt  );
  clone->SetBranchAddress("lep2eta"    ,  &lep2eta    , &b_lep2eta  );
  clone->SetBranchAddress("lep2phi"    ,  &lep2phi    , &b_lep2phi  );
  clone->SetBranchAddress("nleps"      ,  &nleps      , &b_nleps  );
  clone->SetBranchAddress("pujetmet"   ,  &pujetmet   , &b_pujetmet  );
  clone->SetBranchAddress("pujetmetphi",  &pujetmetphi, &b_pujetmetphi  );
  clone->SetBranchAddress("pujetmt"    ,  &pujetmt    , &b_pujetmt  );
  clone->SetBranchAddress("nb"         ,  &nb         , &b_nb  );
  clone->SetBranchAddress("nbgen"      ,  &nbgen      , &b_nbgen  );
  clone->SetBranchAddress("ncgen"      ,  &ncgen      , &b_ncgen  );
  clone->SetBranchAddress("bjet1pt"    ,  &bjet1pt    , &b_bjet1pt  );
  clone->SetBranchAddress("bjet1eta"   ,  &bjet1eta   , &b_bjet1eta  );
  clone->SetBranchAddress("bjet2pt"    ,  &bjet2pt    , &b_bjet2pt  );
  clone->SetBranchAddress("bjet2eta"   ,  &bjet2eta   , &b_bjet2eta  );

  // new branches
  TBranch* b_agedweight = clone->Branch("agedweight", &agedweight, "agedweight/F");
  TBranch* b_agednleps = clone->Branch("agednleps", &agednleps, "agednleps/I");
  TBranch* b_agedlep1pt = clone->Branch("agedlep1pt", &agedlep1pt, "agedlep1pt/F");
  TBranch* b_agedlep1eta = clone->Branch("agedlep1eta", &agedlep1eta, "agedlep1eta/F");
  TBranch* b_agedlep1phi = clone->Branch("agedlep1phi", &agedlep1phi, "agedlep1phi/F");
  TBranch* b_smearmet = clone->Branch("smearmet", &smearmet, "smearmet/F");
  TBranch* b_smearmetphi = clone->Branch("smearmetphi", &smearmetphi, "smearmetphi/F");
  TBranch* b_smearmt = clone->Branch("smearmt", &smearmt, "smearmt/F");
   
  Long64_t nentries = t->GetEntries();
  //Long64_t nentries = 100;
  for(Long64_t i = 0; i < nentries; i++) {
    clone->GetEntry(i);

    agedweight = 1.;
    // set weight for reduced btagging eff
    if (nb == 2) {
      // both jets are from heavy flavor - use both SFs
      if ((nbgen+ncgen) == 2) {
	agedweight *= getBtagSF(bjet1pt,bjet1eta);
	agedweight *= getBtagSF(bjet2pt,bjet2eta);
      }
      // only one HF jet - randomly guess which is fake
      else if ((nbgen+ncgen) == 1) {
	if (rand.Rndm() > 0.5) agedweight *= getBtagSF(bjet1pt,bjet1eta);
	else agedweight *= getBtagSF(bjet2pt,bjet2eta);
      }
    } 
    // cout << "nb: " << nb << ", nbgen: " << nbgen << ", ncgen: " << ncgen 
    // 	 << ", bjet1 pt: " << bjet1pt << ", eta: " << bjet1eta
    // 	 << ", bjet2 pt: " << bjet2pt << ", eta: " << bjet2eta
    // 	 << ", agedweight: " << agedweight << endl;

    // reduce lepton efficiency by 0.84
    if (nleps > 0) {
      int keeplep1 = 1;
      int keeplep2 = 1;
      // roll the dice for each lepton
      if (rand.Rndm() > 0.84) keeplep1 = 0;
      if (nleps == 1 || rand.Rndm() > 0.84) keeplep2 = 0;
      agednleps = keeplep1+keeplep2;

      // cout << "nleps: " << nleps << ", keeplep1: " << keeplep1
      // 	   << ", keeplep2: " << keeplep2 << ", agednleps: " << agednleps << endl;

      if (keeplep1 == 1) {
	agedlep1pt = lep1pt;
	agedlep1eta = lep1eta;
	agedlep1phi = lep1phi;
      } else if (keeplep2 == 1) {
	agedlep1pt = lep2pt;
	agedlep1eta = lep2eta;
	agedlep1phi = lep2phi;
      } else {
	agedlep1pt = -999;
	agedlep1eta = -999;
	agedlep1phi = -999;
      }
    }

    // smear met and propagate to MT
    float metx = pujetmet * cos(pujetmetphi);
    float mety = pujetmet * sin(pujetmetphi);
    float smearmetx = metx + rand.Gaus(0,sigma);
    float smearmety = mety + rand.Gaus(0,sigma);
    TVector2 smearmetvec(smearmetx,smearmety);
    smearmet = smearmetvec.Mod();
    smearmetphi = smearmetvec.Phi();
    if (agedlep1pt > 0.) {
      smearmt = sqrt( 2 * smearmet * agedlep1pt * ( 1 - cos( smearmetphi - agedlep1phi) ) );
    } else {
      smearmt = -99.;
    }

    // cout << "pujetmet: " << pujetmet << ", pujetmetphi: " << pujetmetphi
    // 	 << ", smearmet: " << smearmet << ", smearmetphi: " << smearmetphi 
    // 	 << ", pujetmt: " << pujetmt << ", smearmt: " << smearmt << endl;

    // fill new branches
    b_agedweight->Fill();
    b_agednleps->Fill();
    b_agedlep1pt->Fill(); 
    b_agedlep1eta->Fill();
    b_agedlep1phi->Fill();
    b_smearmet->Fill();
    b_smearmetphi->Fill();
    b_smearmt->Fill();
  }
  //-------------------------------------------------------------

  clone->Write(); 
  out->Close();
  f->Close();

  cout << "Processed Events: " << nentries << endl;

  return 0;
  
}