AliPhysics  vAN-20150827 (3e81cbb)
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Macros
AliAnalysisTaskChargedParticlesRef.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-2015, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
6  * *
7  * Permission to use, copy, modify and distribute this software and its *
8  * documentation strictly for non-commercial purposes is hereby granted *
9  * without fee, provided that the above copyright notice appears in all *
10  * copies and that both the copyright notice and this permission notice *
11  * appear in the supporting documentation. The authors make no claims *
12  * about the suitability of this software for any purpose. It is *
13  * provided "as is" without express or implied warranty. *
14  **************************************************************************/
15 #include <vector>
16 #include <map>
17 
18 #include <TArrayD.h>
19 #include <TMath.h>
20 #include <THashList.h>
21 #include <TString.h>
22 
23 #include "AliAnalysisUtils.h"
24 #include "AliAODTrack.h"
25 #include "AliESDtrackCuts.h"
26 #include "AliESDEvent.h"
27 #include "AliESDtrack.h"
28 #include "AliInputEventHandler.h"
29 #include "AliVVertex.h"
30 
32 #include "AliEMCalHistoContainer.h"
34 
38 
39 namespace EMCalTriggerPtAnalysis {
40 
44 AliAnalysisTaskChargedParticlesRef::AliAnalysisTaskChargedParticlesRef() :
45  AliAnalysisTaskSE(),
46  fTrackCuts(NULL),
47  fAnalysisUtil(NULL),
48  fHistos(NULL),
49  fTriggerStringFromPatches(kFALSE),
50  fYshift(0.465),
51  fEtaSign(1)
52 {
53 }
54 
60  AliAnalysisTaskSE(name),
61  fTrackCuts(NULL),
62  fAnalysisUtil(NULL),
63  fHistos(NULL),
64  fTriggerStringFromPatches(kFALSE),
65  fYshift(0.465),
66  fEtaSign(1)
67 {
68  DefineOutput(1, TList::Class());
69 }
70 
75  if(fTrackCuts) delete fTrackCuts;
76  if(fAnalysisUtil) delete fAnalysisUtil;
77  if(fHistos) delete fHistos;
78 }
79 
84  fAnalysisUtil = new AliAnalysisUtils;
85 
86  fTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(true, 1);
87  fTrackCuts->SetName("Standard Track cuts");
88  fTrackCuts->SetMinNCrossedRowsTPC(120);
89  fTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
90 
91  TArrayD oldbinning, newbinning;
92  CreateOldPtBinning(oldbinning);
93  CreateNewPtBinning(newbinning);
94 
95  fHistos = new AliEMCalHistoContainer("Ref");
96  // Exclusive means classes without higher trigger classes:
97  // EG2excl means EG2 && !EG1
98  // EJ2excl means EJ2 && !EJ1
99  // MBExcl means MinBias && !EMCAL trigger
100  TString triggers[8] = {"MB", "EJ1", "EJ2", "EG1", "EG2", "EG2excl", "EJ2excl", "MBexcl"};
101  Double_t ptcuts[5] = {1., 2., 5., 10., 20.};
102  for(TString *trg = triggers; trg < triggers+8; trg++){
103  fHistos->CreateTH1(Form("hEventCount%s", trg->Data()), Form("Event Counter for trigger class %s", trg->Data()), 1, 0.5, 1.5);
104  fHistos->CreateTH1(Form("hVertexBefore%s", trg->Data()), Form("Vertex distribution before z-cut for trigger class %s", trg->Data()), 500, -50, 50);
105  fHistos->CreateTH1(Form("hVertexAfter%s", trg->Data()), Form("Vertex distribution after z-cut for trigger class %s", trg->Data()), 100, -10, 10);
106  fHistos->CreateTH1(Form("hPtEtaAllOldBinning%s", trg->Data()), Form("Charged particle pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
107  fHistos->CreateTH1(Form("hPtEtaCentOldBinning%s", trg->Data()), Form("Charged particle pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
108  fHistos->CreateTH1(Form("hPtEtaAllNewBinning%s", trg->Data()), Form("Charged particle pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
109  fHistos->CreateTH1(Form("hPtEtaCentNewBinning%s", trg->Data()), Form("Charged particle pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
110  fHistos->CreateTH1(Form("hPtEMCALEtaAllOldBinning%s", trg->Data()), Form("Charged particle in EMCAL pt distribution all eta old binning trigger %s", trg->Data()), oldbinning);
111  fHistos->CreateTH1(Form("hPtEMCALEtaCentOldBinning%s", trg->Data()), Form("Charged particle in EMCAL pt distribution central eta old binning trigger %s", trg->Data()), oldbinning);
112  fHistos->CreateTH1(Form("hPtEMCALEtaAllNewBinning%s", trg->Data()), Form("Charged particle in EMCAL pt distribution all eta new binning trigger %s", trg->Data()), newbinning);
113  fHistos->CreateTH1(Form("hPtEMCALEtaCentNewBinning%s", trg->Data()), Form("Charged particle in EMCAL pt distribution central eta new binning trigger %s", trg->Data()), newbinning);
114  for(int ipt = 0; ipt < 5; ipt++){
116  Form("hEtaLabDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
117  Form("Eta (lab) distribution without etacut for tracks with Pt above 1 GeV/c trigger %s", trg->Data()),
118  100,
119  -1.,
120  1.
121  );
123  Form("hEtaLabDistCutPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
124  Form("Eta (lab) distribution with etacut for tracks with Pt above 1 GeV/c trigger %s", trg->Data()),
125  100,
126  -1.,
127  1.
128  );
130  Form("hEtaCentDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
131  Form("Eta (cent) distribution without etacut for tracks with Pt above 1 GeV/c trigger %s",
132  trg->Data()),
133  160,
134  -1.3,
135  1.3
136  );
138  Form("hEtaCentDistCutPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
139  Form("Eta (cent) distribution with etacut for tracks with Pt above 1 GeV/c trigger %s", trg->Data()),
140  160,
141  -1.3,
142  1.3
143  );
145  Form("hEtaLabDistAllEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
146  Form("Eta (lab) distribution without etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
147  100,
148  -1.,
149  1.
150  );
152  Form("hEtaLabDistCutEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
153  Form("Eta (lab) distribution with etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
154  100,
155  -1.,
156  1.
157  );
159  Form("hEtaCentDistAllEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
160  Form("Eta (cent) distribution without etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
161  160,
162  -1.3,
163  1.3
164  );
166  Form("hEtaCentDistCutEMCALPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
167  Form("Eta (cent) distribution with etacut for tracks in EMCAL with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
168  160,
169  -1.3,
170  1.3
171  );
173  Form("hPhiDistAllPt%d%s", static_cast<Int_t>(ptcuts[ipt]), trg->Data()),
174  Form("#phi distribution of particles with Pt above %.1f GeV/c trigger %s", ptcuts[ipt], trg->Data()),
175  300,
176  0.,
177  2*TMath::Pi()
178  );
179  }
180  }
181  PostData(1, fHistos->GetListOfHistograms());
182 }
183 
193  // Select event
194  TString triggerstring = "";
196  triggerstring = GetFiredTriggerClassesFromPatches(dynamic_cast<TClonesArray *>(fInputEvent->FindListObject("EmcalTriggers")));
197  } else {
198  triggerstring = fInputEvent->GetFiredTriggerClasses();
199  }
200  Bool_t isMinBias = fInputHandler->IsEventSelected() & AliVEvent::kINT7,
201  isEJ1 = triggerstring.Contains("EJ1"),
202  isEJ2 = triggerstring.Contains("EJ2"),
203  isEG1 = triggerstring.Contains("EG1"),
204  isEG2 = triggerstring.Contains("EG2");
205  if(!(isMinBias || isEG1 || isEG2 || isEJ1 || isEJ2)) return;
206  const AliVVertex *vtx = fInputEvent->GetPrimaryVertex();
207  //if(!fInputEvent->IsPileupFromSPD(3, 0.8, 3., 2., 5.)) return; // reject pileup event
208  if(vtx->GetNContributors() < 1) return;
209  // Fill reference distribution for the primary vertex before any z-cut
210  if(isMinBias) fHistos->FillTH1("hVertexBeforeMB", vtx->GetZ());
211  if(isEJ1) fHistos->FillTH1("hVertexBeforeEJ1", vtx->GetZ());
212  if(isEJ2) fHistos->FillTH1("hVertexBeforeEJ2", vtx->GetZ());
213  if(isEG1) fHistos->FillTH1("hVertexBeforeEG1", vtx->GetZ());
214  if(isEG2) fHistos->FillTH1("hVertexBeforeEG2", vtx->GetZ());
215  if(!fAnalysisUtil->IsVertexSelected2013pA(fInputEvent)) return; // Apply new vertex cut
216  if(fAnalysisUtil->IsPileUpEvent(fInputEvent)) return; // Apply new vertex cut
217  // Apply vertex z cut
218  if(vtx->GetZ() < -10. || vtx->GetZ() > 10.) return;
219 
220  // Fill Event counter and reference vertex distributions for the different trigger classes
221  if(isMinBias){
222  fHistos->FillTH1("hEventCountMB", 1);
223  fHistos->FillTH1("hVertexAfterMB", vtx->GetZ());
224  // Check for exclusive classes
225  if(!(isEG1 || isEG2 || isEJ1 || isEJ2)){
226  fHistos->FillTH1("hEventCountMBexcl", 1);
227  fHistos->FillTH1("hVertexAfterMBexcl", vtx->GetZ());
228  }
229  }
230  if(isEJ1){
231  fHistos->FillTH1("hEventCountEJ1", 1);
232  fHistos->FillTH1("hVertexAfterEJ1", vtx->GetZ());
233  }
234  if(isEJ2){
235  fHistos->FillTH1("hEventCountEJ2", 1);
236  fHistos->FillTH1("hVertexAfterEJ2", vtx->GetZ());
237  // Check for exclusive classes
238  if(!isEJ1){
239  fHistos->FillTH1("hEventCountEJ2excl", 1);
240  fHistos->FillTH1("hVertexAfterEJ2excl", vtx->GetZ());
241  }
242  }
243  if(isEG1){
244  fHistos->FillTH1("hEventCountEG1", 1);
245  fHistos->FillTH1("hVertexAfterEG1", vtx->GetZ());
246  }
247  if(isEG2){
248  fHistos->FillTH1("hEventCountEG2", 1);
249  fHistos->FillTH1("hVertexAfterEG2", vtx->GetZ());
250  // Check for exclusive classes
251  if(!isEG1){
252  fHistos->FillTH1("hEventCountEG2excl", 1);
253  fHistos->FillTH1("hVertexAfterEG2excl", vtx->GetZ());
254  }
255  }
256 
257  // Loop over tracks, fill select particles
258  // Histograms
259  // - Full eta_{lab} (-0.8, 0.8), new binning
260  // - Full eta_{lab} (-0.8, 0.8), old binning
261  // - Eta distribution for tracks above 1, 2, 5, 10 GeV/c without eta cut
262  // - Central eta_{cms} (-0.3, -0.2), new binning,
263  // - Central eta_{cms} (-0.8, -0.2), old binning,
264  // - Eta distribution for tracks above 1, 2, 5, 10 GeV/c
265  // - Eta distribution for tracks above 1, 2, 5, 10 GeV/c with eta cut
266  AliVTrack *checktrack(NULL);
267  int ptmin[5] = {1,2,5,10,20}; // for eta distributions
268  Bool_t isEMCAL(kFALSE);
269  for(int itrk = 0; itrk < fInputEvent->GetNumberOfTracks(); ++itrk){
270  checktrack = dynamic_cast<AliVTrack *>(fInputEvent->GetTrack(itrk));
271  if(!checktrack) continue;
272  if(TMath::Abs(checktrack->Eta()) > 0.8) continue;
273  if(TMath::Abs(checktrack->Pt()) < 0.1) continue;
274  isEMCAL = (checktrack->Phi() > 1.5 && checktrack->Phi() < 3.1) ? kTRUE : kFALSE;
275 
276  // Calculate eta in cms frame according
277  // EPJC74 (2014) 3054:
278  // eta_cms = - eta_lab - |yshift|
279  Double_t etacent = -1. * checktrack->Eta() - TMath::Abs(fYshift);
280  etacent *= fEtaSign;
281 
282  // Distinguish track selection for ESD and AOD tracks
283  AliESDtrack *esdtrack(NULL);
284  AliAODTrack *aodtrack(NULL);
285  if((esdtrack = dynamic_cast<AliESDtrack *>(checktrack))){
286  if(!TrackSelectionESD(esdtrack)) continue;
287  } else if((aodtrack = dynamic_cast<AliAODTrack *>(checktrack))){
288  if(!TrackSelectionAOD(aodtrack)) continue;
289  } else {
290  continue;
291  }
292 
293  // fill histograms allEta
294  if(isMinBias){
295  FillTrackHistos("MB", checktrack->Pt(), checktrack->Eta() * fEtaSign, etacent, checktrack->Phi(), TMath::Abs(etacent) < 0.3, isEMCAL);
296  // check for exclusive classes
297  if(!(isEG1 || isEG2 || isEJ1 || isEJ2)){
298  FillTrackHistos("MBexcl", checktrack->Pt(), checktrack->Eta() * fEtaSign, etacent, checktrack->Phi(), TMath::Abs(etacent) < 0.3, isEMCAL);
299  }
300  }
301  if(isEJ1){
302  FillTrackHistos("EJ1", checktrack->Pt(), checktrack->Eta() * fEtaSign, etacent, checktrack->Phi(), TMath::Abs(etacent) < 0.3, isEMCAL);
303  }
304  if(isEJ2){
305  FillTrackHistos("EJ2", checktrack->Pt(), checktrack->Eta() * fEtaSign, etacent, checktrack->Phi(), TMath::Abs(etacent) < 0.3, isEMCAL);
306  // check for exclusive classes
307  if(!isEJ1){
308  FillTrackHistos("EJ2excl", checktrack->Pt(), checktrack->Eta() * fEtaSign, etacent, checktrack->Phi(), TMath::Abs(etacent) < 0.3, isEMCAL);
309  }
310  }
311  if(isEG1){
312  FillTrackHistos("EG1", checktrack->Pt(), checktrack->Eta() * fEtaSign, etacent, checktrack->Phi(), TMath::Abs(etacent) < 0.3, isEMCAL);
313  }
314  if(isEG2){
315  FillTrackHistos("EG2", checktrack->Pt(), checktrack->Eta() * fEtaSign, etacent, checktrack->Phi(), TMath::Abs(etacent) < 0.3, isEMCAL);
316  // check for exclusive classes
317  if(!isEG1){
318  FillTrackHistos("EG2excl", checktrack->Pt(), checktrack->Eta() * fEtaSign, etacent, checktrack->Phi(), TMath::Abs(etacent) < 0.3, isEMCAL);
319  }
320  }
321  }
322  PostData(1, fHistos->GetListOfHistograms());
323 }
324 
336  const char *eventclass,
337  Double_t pt,
338  Double_t etalab,
339  Double_t etacent,
340  Double_t phi,
341  Bool_t etacut,
342  Bool_t inEmcal
343  )
344 {
345  fHistos->FillTH1(Form("hPtEtaAllNewBinning%s", eventclass), TMath::Abs(pt));
346  fHistos->FillTH1(Form("hPtEtaAllOldBinning%s", eventclass), TMath::Abs(pt));
347  if(inEmcal){
348  fHistos->FillTH1(Form("hPtEMCALEtaAllNewBinning%s", eventclass), TMath::Abs(pt));
349  fHistos->FillTH1(Form("hPtEMCALEtaAllOldBinning%s", eventclass), TMath::Abs(pt));
350  }
351 
352  int ptmin[5] = {1,2,5,10,20}; // for eta distributions
353  for(int icut = 0; icut < 5; icut++){
354  if(TMath::Abs(pt) > static_cast<double>(ptmin[icut])){
355  fHistos->FillTH1(Form("hPhiDistAllPt%d%s", ptmin[icut], eventclass), phi);
356  fHistos->FillTH1(Form("hEtaLabDistAllPt%d%s", ptmin[icut], eventclass), etalab);
357  fHistos->FillTH1(Form("hEtaCentDistAllPt%d%s", ptmin[icut], eventclass), etacent);
358  if(inEmcal){
359  fHistos->FillTH1(Form("hEtaLabDistAllEMCALPt%d%s", ptmin[icut], eventclass), etalab);
360  fHistos->FillTH1(Form("hEtaCentDistAllEMCALPt%d%s", ptmin[icut], eventclass), etacent);
361  }
362  }
363  }
364 
365  if(etacut){
366  fHistos->FillTH1(Form("hPtEtaCentNewBinning%s", eventclass), TMath::Abs(pt));
367  fHistos->FillTH1(Form("hPtEtaCentOldBinning%s", eventclass), TMath::Abs(pt));
368  if(inEmcal){
369  fHistos->FillTH1(Form("hPtEMCALEtaCentNewBinning%s", eventclass), TMath::Abs(pt));
370  fHistos->FillTH1(Form("hPtEMCALEtaCentOldBinning%s", eventclass), TMath::Abs(pt));
371  }
372  for(int icut = 0; icut < 5; icut++){
373  if(TMath::Abs(pt) > static_cast<double>(ptmin[icut])){
374  fHistos->FillTH1(Form("hEtaLabDistCutPt%d%s", ptmin[icut], eventclass), etalab);
375  fHistos->FillTH1(Form("hEtaCentDistCutPt%d%s", ptmin[icut], eventclass), etacent);
376  if(inEmcal){
377  fHistos->FillTH1(Form("hEtaLabDistCutEMCALPt%d%s", ptmin[icut], eventclass), etalab);
378  fHistos->FillTH1(Form("hEtaCentDistCutEMCALPt%d%s", ptmin[icut], eventclass), etacent);
379  }
380  }
381  }
382  }
383 }
384 
385 
391  std::vector<double> mybinning;
392  std::map<double,double> definitions;
393  definitions.insert(std::pair<double,double>(2.5, 0.1));
394  definitions.insert(std::pair<double,double>(7., 0.25));
395  definitions.insert(std::pair<double,double>(15., 0.5));
396  definitions.insert(std::pair<double,double>(25., 1.));
397  definitions.insert(std::pair<double,double>(40., 2.5));
398  definitions.insert(std::pair<double,double>(50., 5.));
399  definitions.insert(std::pair<double,double>(100., 10.));
400  double currentval = 0;
401  for(std::map<double,double>::iterator id = definitions.begin(); id != definitions.end(); ++id){
402  double limit = id->first, binwidth = id->second;
403  while(currentval < limit){
404  currentval += binwidth;
405  mybinning.push_back(currentval);
406  }
407  }
408  binning.Set(mybinning.size());
409  int ib = 0;
410  for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
411  binning[ib++] = *it;
412 }
413 
419  std::vector<double> mybinning;
420  std::map<double,double> definitions;
421  definitions.insert(std::pair<double, double>(1, 0.05));
422  definitions.insert(std::pair<double, double>(2, 0.1));
423  definitions.insert(std::pair<double, double>(4, 0.2));
424  definitions.insert(std::pair<double, double>(7, 0.5));
425  definitions.insert(std::pair<double, double>(16, 1));
426  definitions.insert(std::pair<double, double>(36, 2));
427  definitions.insert(std::pair<double, double>(40, 4));
428  definitions.insert(std::pair<double, double>(50, 5));
429  definitions.insert(std::pair<double, double>(100, 10));
430  definitions.insert(std::pair<double, double>(200, 20));
431  double currentval = 0.;
432  mybinning.push_back(currentval);
433  for(std::map<double,double>::iterator id = definitions.begin(); id != definitions.end(); ++id){
434  double limit = id->first, binwidth = id->second;
435  while(currentval < limit){
436  currentval += binwidth;
437  mybinning.push_back(currentval);
438  }
439  }
440  binning.Set(mybinning.size());
441  int ib = 0;
442  for(std::vector<double>::iterator it = mybinning.begin(); it != mybinning.end(); ++it)
443  binning[ib++] = *it;
444 }
445 
452  return fTrackCuts->AcceptTrack(track);
453 }
454 
461  if(!track->TestFilterBit(AliAODTrack::kTrkGlobal)) return false;
462  if(track->GetTPCNCrossedRows() < 120) return false;
463  return true;
464 }
465 
471 TString AliAnalysisTaskChargedParticlesRef::GetFiredTriggerClassesFromPatches(const TClonesArray* triggerpatches) const {
472  TString triggerstring = "";
473  Int_t nEJ1 = 0, nEJ2 = 0, nEG1 = 0, nEG2 = 0;
474  double minADC_EJ1 = 260.,
475  minADC_EJ2 = 127.,
476  minADC_EG1 = 140.,
477  minADC_EG2 = 89.;
478  for(TIter patchIter = TIter(triggerpatches).Begin(); patchIter != TIter::End(); ++patchIter){
479  AliEmcalTriggerPatchInfo *patch = dynamic_cast<AliEmcalTriggerPatchInfo *>(*patchIter);
480  if(!patch->IsOfflineSimple()) continue;
481  if(patch->IsJetHighSimple() && patch->GetADCOfflineAmp() > minADC_EJ1) nEJ1++;
482  if(patch->IsJetLowSimple() && patch->GetADCOfflineAmp() > minADC_EJ2) nEJ2++;
483  if(patch->IsGammaHighSimple() && patch->GetADCOfflineAmp() > minADC_EG1) nEG1++;
484  if(patch->IsGammaLowSimple() && patch->GetADCOfflineAmp() > minADC_EG2) nEG2++;
485  }
486  if(nEJ1) triggerstring += "EJ1";
487  if(nEJ2){
488  if(triggerstring.Length()) triggerstring += ",";
489  triggerstring += "EJ2";
490  }
491  if(nEG1){
492  if(triggerstring.Length()) triggerstring += ",";
493  triggerstring += "EG1";
494  }
495  if(nEG2){
496  if(triggerstring.Length()) triggerstring += ",";
497  triggerstring += "EG2";
498  }
499  return triggerstring;
500 }
501 
502 } /* namespace EMCalTriggerPtAnalysis */
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Double_t fEtaSign
Sign of the eta distribution (swaps when beam directions swap): p-Pb: +1, Pb-p: -1.
void CreateTH1(const char *name, const char *title, int nbins, double xmin, double xmax, Option_t *opt="")
Container class for histograms for the high- charged particle analysis.
TString GetFiredTriggerClassesFromPatches(const TClonesArray *triggerpatches) const
Main data structure storing all relevant information of EMCAL/DCAL trigger patches.
Bool_t fTriggerStringFromPatches
Do rebuild the trigger string from trigger patches.
void FillTrackHistos(const char *eventclass, Double_t pt, Double_t eta, Double_t etacent, Double_t phi, Bool_t etacut, Bool_t inEmcal)
Declarartion of class AliEMCalHistoContainer.
const Double_t ptmin
Class to make array of trigger patch objects in AOD/ESD events.
void FillTH1(const char *hname, double x, double weight=1.)