-
Notifications
You must be signed in to change notification settings - Fork 1.3k
/
Copy pathProofEventProc.h
211 lines (187 loc) · 7.44 KB
/
ProofEventProc.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
/// \file
/// \ingroup tutorial_ProofEventProc
///
/// Selector to process trees containing Event structures
///
/// \macro_code
///
/// \author Gerardo Ganis (gerardo.ganis@cern.ch)
#ifndef ProofEventProc_h
#define ProofEventProc_h
#include <TROOT.h>
#include <TChain.h>
#include <TFile.h>
#include <TSelector.h>
#include "Event.h"
#include "ProcFileElements.h"
class TH1F;
class TH2F;
class ProofEventProc : public TSelector {
public :
TTree *fChain; //!pointer to the analyzed TTree or TChain
// Declaration of leave types
Event *event;
Char_t fType[20];
Char_t *fEventName;
Int_t fNtrack;
Int_t fNseg;
Int_t fNvertex;
UInt_t fFlag;
Double32_t fTemperature;
Int_t fMeasures[10];
Double32_t fMatrix[4][4];
Double32_t fClosestDistance[21]; //[fNvertex]
EventHeader fEvtHdr;
TClonesArray *fTracks;
TRefArray *fHighPt;
TRefArray *fMuons;
TRef fLastTrack;
TRef fWebHistogram;
TH1F *fH;
TBits fTriggerBits;
Bool_t fIsValid;
void InitEvent() { event = 0 ; fEventName = 0; fTracks = 0;
fHighPt = 0; fMuons = 0; fH = 0; fIsValid = kFALSE; }
// Read controller
Bool_t fFullRead;
// Abortion test
Int_t fTestAbort; // -1 none, 0 init, 1 file
// Event ranges
Long64_t fEntMin; // Min entry num of the current element
Long64_t fEntMax; // Max entry num of the current element
TList *fProcElems; // List of ProcFileElements processed so far
ProcFileElements *fProcElem; // Element currently processed
void CheckRanges();
//Output hist
TH1F* fPtHist;
TH1F* fPzHist;
TH2F* fPxPyHist;
// List of branches
TBranch *b_event_fType; //!
TBranch *b_fEventName; //!
TBranch *b_event_fNtrack; //!
TBranch *b_event_fNseg; //!
TBranch *b_event_fNvertex; //!
TBranch *b_event_fFlag; //!
TBranch *b_event_fTemperature; //!
TBranch *b_event_fMeasures; //!
TBranch *b_event_fMatrix; //!
TBranch *b_fClosestDistance; //!
TBranch *b_event_fEvtHdr; //!
TBranch *b_fTracks; //!
TBranch *b_fHighPt; //!
TBranch *b_fMuons; //!
TBranch *b_event_fLastTrack; //!
TBranch *b_event_fWebHistogram; //!
TBranch *b_fH; //!
TBranch *b_event_fTriggerBits; //!
TBranch *b_event_fIsValid; //!
ProofEventProc(TTree *) { InitEvent(); fFullRead = kTRUE; fTestAbort = -1;
fPtHist = 0; fPzHist = 0; fPxPyHist = 0;
fEntMin = -1; fEntMax = -1; fProcElems = 0; fProcElem = 0;}
ProofEventProc() { InitEvent(); fFullRead = kTRUE; fTestAbort = -1;
fPtHist = 0; fPzHist = 0; fPxPyHist = 0;
fEntMin = -1; fEntMax = -1; fProcElems = 0; fProcElem = 0;}
virtual ~ProofEventProc() {if (fProcElems) { fProcElems->SetOwner(kFALSE);
delete fProcElems;} }
virtual Int_t Version() const {return 2;}
virtual void Begin(TTree *);
virtual void SlaveBegin(TTree *tree);
virtual void Init(TTree *tree);
virtual Bool_t Notify();
virtual Bool_t Process(Long64_t entry);
virtual void SetOption(const char *option) { fOption = option; }
virtual void SetObject(TObject *obj) { fObject = obj; }
virtual void SetInputList(TList *input) {fInput = input;}
virtual TList *GetOutputList() const { return fOutput; }
virtual void SlaveTerminate();
virtual void Terminate();
ClassDef(ProofEventProc,0);
};
#endif
#ifdef ProofEventProc_cxx
void ProofEventProc::Init(TTree *tree)
{
// The Init() function is called when the selector needs to initialize
// a new tree or chain. Typically here the branch addresses of the tree
// will be set. It is normaly not necessary to make changes to the
// generated code, but the routine can be extended by the user if needed.
// Init() will be called many times when running with PROOF.
// Set branch addresses
fEventName=0;
fTracks=0;
fHighPt=0;
fMuons=0;
fH=0;
if (tree == 0) return;
fChain = tree;
fChain->SetMakeClass(1);
fChain->SetBranchAddress("fType[20]",fType);
fChain->SetBranchAddress("fEventName",fEventName);
fChain->SetBranchAddress("fNtrack",&fNtrack);
fChain->SetBranchAddress("fNseg",&fNseg);
fChain->SetBranchAddress("fNvertex",&fNvertex);
fChain->SetBranchAddress("fFlag",&fFlag);
fChain->SetBranchAddress("fTemperature",&fTemperature);
fChain->SetBranchAddress("fMeasures[10]",fMeasures);
fChain->SetBranchAddress("fMatrix[4][4]",fMatrix);
fChain->SetBranchAddress("fClosestDistance",fClosestDistance);
fChain->SetBranchAddress("fEvtHdr",&fEvtHdr);
fChain->SetBranchAddress("fTracks",&fTracks);
fChain->SetBranchAddress("fHighPt",&fHighPt);
fChain->SetBranchAddress("fMuons",&fMuons);
fChain->SetBranchAddress("fLastTrack",&fLastTrack);
fChain->SetBranchAddress("fWebHistogram",&fWebHistogram);
fChain->SetBranchAddress("fH",&fH);
fChain->SetBranchAddress("fTriggerBits",&fTriggerBits);
fChain->SetBranchAddress("fIsValid",&fIsValid);
}
Bool_t ProofEventProc::Notify()
{
// The Notify() function is called when a new file is opened. This
// can be either for a new TTree in a TChain or when when a new TTree
// is started when using PROOF. Typically here the branch pointers
// will be retrieved. It is normaly not necessary to make changes
// to the generated code, but the routine can be extended by the
// user if needed.
TString fn;
if (fChain) {
fn = fChain->GetCurrentFile()->GetName();
Info("Notify", "processing file: %s", fn.Data());
}
// Save information about previous element, if any
if (fProcElem) fProcElem->Add(fEntMin, fEntMax);
// Reset counters
fEntMin = -1;
fEntMax = -1;
// Point to current element
if (fProcElems) fProcElem = (ProcFileElements *) fProcElems->FindObject(fn);
if (!fProcElem) {
Info("Notify", "assigned new file: create ProcFileElements entry");
fProcElem = new ProcFileElements(fn.Data());
if (!fProcElems) fProcElems = new TList;
if (fProcElems) fProcElems->Add(fProcElem);
}
// Get branch pointers
b_event_fType = fChain->GetBranch("fType[20]");
b_fEventName = fChain->GetBranch("fEventName");
b_event_fNtrack = fChain->GetBranch("fNtrack");
b_event_fNseg = fChain->GetBranch("fNseg");
b_event_fNvertex = fChain->GetBranch("fNvertex");
b_event_fFlag = fChain->GetBranch("fFlag");
b_event_fTemperature = fChain->GetBranch("fTemperature");
b_event_fMeasures = fChain->GetBranch("fMeasures[10]");
b_event_fMatrix = fChain->GetBranch("fMatrix[4][4]");
b_fClosestDistance = fChain->GetBranch("fClosestDistance");
b_event_fEvtHdr = fChain->GetBranch("fEvtHdr");
b_fTracks = fChain->GetBranch("fTracks");
b_fHighPt = fChain->GetBranch("fHighPt");
b_fMuons = fChain->GetBranch("fMuons");
b_event_fLastTrack = fChain->GetBranch("fLastTrack");
b_event_fWebHistogram = fChain->GetBranch("fWebHistogram");
b_fH = fChain->GetBranch("fH");
b_event_fTriggerBits = fChain->GetBranch("fTriggerBits");
b_event_fIsValid = fChain->GetBranch("fIsValid");
return kTRUE;
}
#endif // #ifdef ProofEventProc_cxx