1 |
fgolf |
1.1 |
//-------------------------------------------------------------------------------
|
2 |
|
|
// Use this utility to reweight MC to match the nvtx distribution in data.
|
3 |
|
|
// This requires a root file with a histogram named "hratio" whose bin contents
|
4 |
|
|
// specify the weight for each nvtx bin. This weight is determined by plotting
|
5 |
|
|
// the nvtx distribution for a data sample and a MC sample and taking the ratio.
|
6 |
|
|
//
|
7 |
|
|
// A sample file can be found at:
|
8 |
|
|
// /tas/benhoob/vtxreweight/vtxreweight_Spring11MC_153pb_Zselection.root
|
9 |
|
|
//
|
10 |
|
|
// This root file was made with this macro:
|
11 |
|
|
// /tas/benhoob/vtxreweight/make_vtxreweight_Spring11MC_153pb_Zselection.cc
|
12 |
|
|
//
|
13 |
|
|
// and was produced after applying a Z selection.
|
14 |
|
|
//
|
15 |
|
|
// You can make your own root file by modifying this macro
|
16 |
|
|
//
|
17 |
|
|
//
|
18 |
|
|
// usage:
|
19 |
|
|
//
|
20 |
|
|
// //include header
|
21 |
|
|
// #include "../Tools/vtxreweight.cc"
|
22 |
|
|
//
|
23 |
|
|
// //initialize
|
24 |
|
|
// bool verbose = true;
|
25 |
|
|
// char* vtxfile = "/tas/benhoob/vtxreweight/vtxreweight_Spring11MC_153pb_Zselection.root";
|
26 |
|
|
// set_vtxreweight_rootfile( vtxfile , verbose );
|
27 |
|
|
//
|
28 |
|
|
// //in the event loop
|
29 |
|
|
// float myvtxweight = vtxweight();
|
30 |
|
|
//
|
31 |
|
|
//
|
32 |
|
|
// PLEASE NOTE: ALWAYS CHECK THAT THE WEIGHTING HAS BEEN DONE PROPERLY
|
33 |
|
|
// BY COMPARING THE DATA NVTX DIST WITH THE WEIGHTED MC NVTX DISTRIBUTION,
|
34 |
|
|
// WHERE NVTX IS THE NUMBER OF DA VERTICES PASSING isGoodDAVertex()
|
35 |
|
|
//------------------------------------------------------------------------------
|
36 |
|
|
|
37 |
|
|
// $Id: vtxreweight.cc,v 1.4 2011/05/20 14:24:22 warren Exp $
|
38 |
|
|
|
39 |
|
|
// CINT is allowed to see this, but nothing else:
|
40 |
|
|
#include "vtxreweight.h"
|
41 |
|
|
|
42 |
|
|
#ifndef __CINT__
|
43 |
|
|
|
44 |
|
|
#include <assert.h>
|
45 |
|
|
#include <stdio.h>
|
46 |
|
|
#include <stdlib.h>
|
47 |
|
|
#include <string.h>
|
48 |
|
|
#include <unistd.h>
|
49 |
|
|
#include <sys/types.h>
|
50 |
|
|
#include <sys/wait.h>
|
51 |
|
|
#include <sys/stat.h>
|
52 |
|
|
#include <set>
|
53 |
|
|
#include <string>
|
54 |
|
|
|
55 |
|
|
#include "../CORE/CMS2.h"
|
56 |
|
|
#include "../CORE/eventSelections.h"
|
57 |
|
|
|
58 |
|
|
bool loaded_vtxreweight_hist = false;
|
59 |
|
|
|
60 |
|
|
float vtxweight( bool isData , int nvtx ){
|
61 |
|
|
|
62 |
|
|
if( isData ) return 1;
|
63 |
|
|
|
64 |
|
|
if( !loaded_vtxreweight_hist ){
|
65 |
|
|
cout << "vtxreweight.cc: You need to do" << endl;
|
66 |
|
|
cout << "set_vtxreweight_rootfile( filename )" << endl;
|
67 |
|
|
cout << "before calling vtxweight()" << endl;
|
68 |
|
|
cout << "a sample vtxreweight file can be found at" << endl;
|
69 |
|
|
cout << "/tas/benhoob/vtxreweight/vtxreweight_Spring11MC_23pbPR.root" << endl;
|
70 |
|
|
cout << "now, quitting" << endl;
|
71 |
|
|
exit(2);
|
72 |
|
|
}
|
73 |
|
|
|
74 |
|
|
if( nvtx == 0 ){
|
75 |
|
|
cout << "vtxreweight.cc: warning 0 good vertices found, returning 0 weight" << endl;
|
76 |
|
|
return 0;
|
77 |
|
|
}
|
78 |
|
|
|
79 |
|
|
if( nvtx > vtxreweight_hist->GetNbinsX() ) nvtx = vtxreweight_hist->GetNbinsX();
|
80 |
|
|
|
81 |
|
|
//cout << "nvtx " << nvtx << " weight " << vtxreweight_hist->GetBinContent(nvtx) << endl;
|
82 |
|
|
return vtxreweight_hist->GetBinContent(nvtx);
|
83 |
|
|
|
84 |
|
|
}
|
85 |
|
|
|
86 |
|
|
void set_vtxreweight_rootfile ( const char* filename , bool verbose ){
|
87 |
|
|
TFile* file = TFile::Open(filename);
|
88 |
|
|
|
89 |
|
|
if( file == 0 ){
|
90 |
|
|
cout << "vtxreweight.cc: error, couldn't open file : " << filename << endl;
|
91 |
|
|
cout << "Quitting!" << endl;
|
92 |
|
|
exit(0);
|
93 |
|
|
}
|
94 |
|
|
|
95 |
|
|
vtxreweight_hist = (TH1F*) file->Get("hratio");
|
96 |
|
|
|
97 |
|
|
if( vtxreweight_hist == 0 ){
|
98 |
|
|
cout << "vtxreweight.cc: error, couldn't retrieve hist hratio from file " << filename << endl;
|
99 |
|
|
cout << "Quitting" << endl;
|
100 |
|
|
exit(1);
|
101 |
|
|
}
|
102 |
|
|
|
103 |
|
|
if( verbose ){
|
104 |
|
|
cout << "Opened vtx reweighting file " << filename << endl;
|
105 |
|
|
|
106 |
|
|
cout << "|" << setw(10) << "nvtx" << setw(4)
|
107 |
|
|
<< "|" << setw(10) << "weight" << setw(4) << "|" << endl;
|
108 |
|
|
|
109 |
|
|
for(unsigned int ibin = 1 ; ibin <= (unsigned int)vtxreweight_hist->GetNbinsX() ; ++ibin ){
|
110 |
|
|
|
111 |
|
|
cout << "|" << setw(10) << ibin << setw(4)
|
112 |
|
|
<< "|" << setw(10) << vtxreweight_hist->GetBinContent(ibin) << setw(4) << "|" << endl;
|
113 |
|
|
|
114 |
|
|
}
|
115 |
|
|
}
|
116 |
|
|
loaded_vtxreweight_hist = true;
|
117 |
|
|
|
118 |
|
|
}
|
119 |
|
|
|
120 |
|
|
#endif // __CUNT__
|
121 |
|
|
|