Fork me on GitHub

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • examples/Example4.C

    rfbb617b r35b9204  
    11/*
    22
    3 This macro shows how to compute jet energy scale.
     3This macro shows how to compute jet energy scale. 
    44root -l examples/Example4.C'("delphes_output.root", "plots.root")'
    55
    6 The output ROOT file contains the pT(MC)/pT(Reco) distributions for various pT(Reco) and |eta| bins.
    7 The peak value of such distribution is interpreted as the jet energy correction to be applied for that given pT(Reco), |eta| bin.
     6The output rootfile contains the pT(MC)/pT(Reco) distributions for various pT(Reco) and |eta| bins.
     7The peak value of such distribution is interpreted as the jet energy correction to be applied for that given pT(Reco), |eta| bin. 
    88
    99This can be done by modifying the "ScaleFormula" input parameter to the JetEnergyScale module in the delphes_card_XXX.tcl
     
    1515
    1616  set ScaleFormula { sqrt(3.0 - 0.1*(abs(eta)))^2 / pt + 1.0 ) }
    17 
    18 
     17 
     18 
    1919or a binned function:
    20 
    21 
    22   set ScaleFormula {(abs(eta) > 0.0 && abs(eta) <= 2.5) * (pt > 20.0 && pt <= 50.0)  * (1.10) +
    23                     (abs(eta) > 0.0 && abs(eta) <= 2.5) * (pt > 50.0 && pt <= 100.0) * (1.05) +
    24                     (abs(eta) > 0.0 && abs(eta) <= 2.5) * (pt > 100.0)               * (1.00) +
    25                     (abs(eta) > 2.5 && abs(eta) <= 5.0) * (pt > 20.0 && pt <= 50.0)  * (1.10) +
    26                     (abs(eta) > 2.5 && abs(eta) <= 5.0) * (pt > 50.0 && pt <= 100.0) * (1.05) +
     20 
     21 
     22 set ScaleFormula { (abs(eta) > 0.0 && abs(eta) <= 2.5) * (pt > 20.0 && pt <= 50.0)  * (1.10) + \
     23                    (abs(eta) > 0.0 && abs(eta) <= 2.5) * (pt > 50.0 && pt <= 100.0) * (1.05) + \
     24                    (abs(eta) > 0.0 && abs(eta) <= 2.5) * (pt > 100.0)               * (1.00) + \
     25                    (abs(eta) > 2.5 && abs(eta) <= 5.0) * (pt > 20.0 && pt <= 50.0)  * (1.10) + \
     26                    (abs(eta) > 2.5 && abs(eta) <= 5.0) * (pt > 50.0 && pt <= 100.0) * (1.05) + \
    2727                    (abs(eta) > 2.5 && abs(eta) <= 5.0) * (pt > 100.0)               * (1.00)}
    2828
     
    3131
    3232
    33 
     33 
    3434*/
    3535
     
    3939{
    4040  TH1 *fJetPT;
    41 
     41 
    4242  TH1 *fJetRes_Pt_20_50_Eta_0_25;
    4343  TH1 *fJetRes_Pt_20_50_Eta_25_5;
     
    7272    "jet_pt", "p_{T}^{jet}",
    7373    "p_{T}^{jet}  GeV/c", "number of jets",
    74     100, 0.0, 1000.0);
    75 
     74    100, 0.0, 1000.0);   
     75 
    7676  plots->fJetRes_Pt_20_50_Eta_0_25 = result->AddHist1D(
    7777    "jet_delta_pt_20_50_cen", "p_{T}^{truth,parton}/p_{T}^{jet} , 20 < p_{T} < 50 , 0 < | #eta | < 2.5 ",
     
    144144
    145145  plots->fJetRes_Pt_500_inf_Eta_25_5->SetStats();
    146 
     146 
    147147
    148148}
     
    166166  TLorentzVector JetMom, GenJetMom, BestGenJetMom;
    167167
    168   Float_t Dr;
     168  Float_t Dr; 
    169169  Float_t pt, eta;
    170170  Long64_t entry;
     
    178178    treeReader->ReadEntry(entry);
    179179    //  cout<<"--  New event -- "<<endl;
    180 
     180   
    181181    if(entry%500 == 0) cout << "Event number: "<< entry <<endl;
    182 
     182   
    183183    // Loop over all reconstructed jets in event
    184184    for(i = 0; i < branchJet->GetEntriesFast(); ++i)
    185185    {
    186 
     186     
    187187      jet = (Jet*) branchJet->At(i);
    188188      JetMom = jet-> P4();
    189 
     189     
    190190      plots->fJetPT->Fill(JetMom.Pt());
    191 
     191     
    192192      Dr = 999;
    193 
     193         
    194194     // Loop over all hard partons in event
    195195     for(j = 0; j < branchParticle->GetEntriesFast(); ++j)
    196196     {
    197 
     197               
    198198        part = (GenParticle*) branchParticle->At(j);
    199199
    200200        GenJetMom = part -> P4();
    201 
     201       
    202202        //this is simply to avoid warnings from initial state particle having infite rapidity ...
    203203        if(GenJetMom.Px() == 0 && GenJetMom.Py() == 0) continue;
    204 
     204       
    205205        //take the closest parton candidate
    206206        if( GenJetMom.DeltaR(JetMom) < Dr )
     
    208208           Dr = GenJetMom.DeltaR(JetMom);
    209209           BestGenJetMom = GenJetMom;
    210         }
    211 
     210        }   
     211       
    212212      }
    213213
    214      if(Dr < 0.3)
     214     if(Dr < 0.3) 
    215215     {
    216216       pt  = JetMom.Pt();
    217217       eta = TMath::Abs(JetMom.Eta());
    218 
    219 
     218     
     219       
    220220       if( pt > 20.0 && pt < 50.0 && eta > 0.0 && eta < 2.5 ) plots -> fJetRes_Pt_20_50_Eta_0_25->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    221221       if( pt > 20.0 && pt < 50.0 && eta > 2.5 && eta < 5.0 ) plots -> fJetRes_Pt_20_50_Eta_25_5->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    222 
     222       
    223223       if( pt > 50.0 && pt < 100.0 && eta > 0.0 && eta < 2.5 ) plots -> fJetRes_Pt_50_100_Eta_0_25->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    224224       if( pt > 50.0 && pt < 100.0 && eta > 2.5 && eta < 5.0 ) plots -> fJetRes_Pt_50_100_Eta_25_5->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    225 
     225       
    226226       if( pt > 100.0 && pt < 200.0 && eta > 0.0 && eta < 2.5 ) plots -> fJetRes_Pt_100_200_Eta_0_25->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    227227       if( pt > 100.0 && pt < 200.0 && eta > 2.5 && eta < 5.0 ) plots -> fJetRes_Pt_100_200_Eta_25_5->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    228 
     228       
    229229       if( pt > 200.0 && pt < 500.0 && eta > 0.0 && eta < 2.5 ) plots -> fJetRes_Pt_200_500_Eta_0_25->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    230230       if( pt > 200.0 && pt < 500.0 && eta > 2.5 && eta < 5.0 ) plots -> fJetRes_Pt_200_500_Eta_25_5->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    231 
     231     
    232232       if( pt > 500.0               && eta > 0.0 && eta < 2.5 ) plots -> fJetRes_Pt_500_inf_Eta_0_25->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    233233       if( pt > 500.0               && eta > 2.5 && eta < 5.0 ) plots -> fJetRes_Pt_500_inf_Eta_25_5->Fill(BestGenJetMom.Pt()/JetMom.Pt());
    234 
    235 
     234       
     235   
    236236     }
    237 
    238 
    239     }
     237     
     238   
     239    } 
    240240  }
    241241}
Note: See TracChangeset for help on using the changeset viewer.