CMS 3D CMS Logo

TSLToyGen.cc
Go to the documentation of this file.
1 #include <iostream>
3 #include "TMatrixD.h"
7 #include "TH1.h"
8 #include "TMath.h"
9 #include "TRandom.h"
10 #include "TString.h"
11 
13  const TAbsFitParticle* lepton,
14  const TAbsFitParticle* X,
15  const TAbsFitParticle* neutrino)
16  : _inimeasParticles(0),
17  _iniunmeasParticles(0),
18  _measParticles(0),
19  _unmeasParticles(0),
20  _Y4S(0., 0., 0.)
21 
22 {
23  // Clone input particles
24  _iniBreco = bReco->clone(bReco->GetName() + (TString) "INI");
25  _breco = bReco->clone(bReco->GetName() + (TString) "SMEAR");
26  _iniLepton = lepton->clone(lepton->GetName() + (TString) "INI");
27  _lepton = lepton->clone(lepton->GetName() + (TString) "SMEAR");
28  _iniX = X->clone(X->GetName() + (TString) "INI");
29  _X = X->clone(X->GetName() + (TString) "SMEAR");
30  _iniNeutrino = neutrino->clone(neutrino->GetName() + (TString) "INI");
31  _neutrino = neutrino->clone(neutrino->GetName() + (TString) "SMEAR");
32 
33  _printPartIni = false;
34  _printConsIni = false;
36  _printConsBefore = false;
37  _printConsAfter = false;
38  _printPartAfter = false;
39  _withMassConstraint = false;
40  _withMPDGCons = false;
42 }
43 
45  delete _iniBreco;
46  delete _iniLepton;
47  delete _iniX;
48  delete _iniNeutrino;
49 
50  delete _breco;
51  delete _lepton;
52  delete _X;
53  delete _neutrino;
54 }
55 
56 Bool_t TSLToyGen::doToyExperiments(Int_t nbExperiments) {
57  // define fitter
58  TKinFitter fitter;
59 
60  std::vector<TAbsFitParticle*> ParVec(0);
61  ParVec.push_back(_breco);
62  ParVec.push_back(_lepton);
63  ParVec.push_back(_X);
64  ParVec.push_back(_neutrino);
65 
66  fitter.addMeasParticle(_breco);
67  _inimeasParticles.push_back(_iniBreco);
68  _measParticles.push_back(_breco);
69  fitter.addMeasParticle(_lepton);
70  _inimeasParticles.push_back(_iniLepton);
71  _measParticles.push_back(_lepton);
72  fitter.addMeasParticle(_X);
73  _inimeasParticles.push_back(_iniX);
74  _measParticles.push_back(_X);
77  _iniunmeasParticles.push_back(_neutrino);
78 
79  // Calculate Y4S
80  _Y4S.SetXYZ(0., 0., 0.);
81  for (unsigned int p = 0; p < _inimeasParticles.size(); p++) {
82  _Y4S += _inimeasParticles[p]->getIni4Vec()->Vect();
83  }
84  _Y4S += _iniNeutrino->getIni4Vec()->Vect();
85  //_Y4S.SetXYZ(-0.1212, -0.0033, 5.8784);
86  Double_t EY4S = TMath::Sqrt(_Y4S.Mag2() + 10.58 * 10.58);
87  // std::cout << "_Y4S : " <<_Y4S.x() << " / " << _Y4S.y() << " / " << _Y4S.z() << " / " <<EY4S<< std::endl;
88 
89  TFitConstraintEp pXCons("pX", "pX", &ParVec, TFitConstraintEp::pX, _Y4S.x());
90  TFitConstraintEp pYCons("pY", "pY", &ParVec, TFitConstraintEp::pY, _Y4S.y());
91  TFitConstraintEp pZCons("pZ", "pZ", &ParVec, TFitConstraintEp::pZ, _Y4S.z());
92  TFitConstraintEp ECons("E", "E", &ParVec, TFitConstraintEp::E, EY4S);
93  TFitConstraintM MCons("MassConstraint", "Mass-Constraint", nullptr, nullptr, 0);
94  MCons.addParticle1(_breco);
96  TFitConstraintM MPDGCons("MPDGCons", "MPDGCons", nullptr, nullptr, 5.279);
97  MPDGCons.addParticles1(_lepton, _neutrino, _X);
98  // TFitConstraintE EBCons( "EBXlnuCons", "EBXlnuCons", 0, 0 );
99  // EBCons.addParticle1( _breco );
100  // EBCons.addParticles2( _lepton, _neutrino, _X );
101 
102  fitter.addConstraint(&pXCons);
103  fitter.addConstraint(&pYCons);
104  fitter.addConstraint(&pZCons);
105  fitter.addConstraint(&ECons);
107  fitter.addConstraint(&MCons);
108  if (_withMPDGCons)
109  fitter.addConstraint(&MPDGCons);
110  // fitter.addConstraint(&EBCons);
111 
112  fitter.setMaxNbIter(50);
113  fitter.setMaxDeltaS(5e-5);
114  fitter.setMaxF(1e-4);
115  fitter.setVerbosity(0);
116 
117  if (_printPartIni) {
118  std::cout << std::endl << "----------------------------------" << std::endl;
119  std::cout << "--- PRINTING INITIAL PARTICLES ---" << std::endl;
120  std::cout << "----------------------------------" << std::endl;
121  _iniBreco->print();
122  _iniLepton->print();
123  _iniX->print();
124  _iniNeutrino->print();
125  std::cout << std::endl << std::endl;
126  }
127 
128  if (_printConsIni) {
129  std::cout << std::endl << "-------------------------------------------------" << std::endl;
130  std::cout << "INITIAL CONSTRAINTS " << std::endl;
131  std::cout << "-------------------------------------------------" << std::endl;
132  std::cout << " M: " << MCons.getCurrentValue() << " MPDG: " << MPDGCons.getCurrentValue()
133  << " px: " << pXCons.getCurrentValue() << " py: " << pYCons.getCurrentValue()
134  << " pz: " << pZCons.getCurrentValue() << " E: " << ECons.getCurrentValue() << std::endl
135  << std::endl;
136  }
137 
138  // Check initial constraints
140  if (fitter.getF() > fitter.getMaxF()) {
141  //std::cout << "Initial constraints are not fulfilled." << std::endl;
142  return false;
143  }
144  }
145 
146  // create histograms
147  createHists();
148 
149  // perform pseudo experiments
150  for (int i = 0; i < nbExperiments; i++) {
151  smearParticles();
152 
154  std::cout << std::endl << "-------------------------------------------------------" << std::endl;
155  std::cout << "--- PRINTING SMEARED PARTICLES BEFORE FIT FOR experiment # " << i + 1 << std::endl;
156  std::cout << "-------------------------------------------------------" << std::endl;
157  _breco->print();
158  _lepton->print();
159  _X->print();
160  _neutrino->print();
161  }
162 
163  if (_printConsBefore) {
164  std::cout << std::endl << "-------------------------------------------------" << std::endl;
165  std::cout << "INITIAL (SMEARED) CONSTRAINTS FOR experiment # " << i + 1 << std::endl;
166  std::cout << "-------------------------------------------------" << std::endl;
167  std::cout << " M: " << MCons.getCurrentValue() << " px: " << pXCons.getCurrentValue()
168  << " py: " << pYCons.getCurrentValue() << " pz: " << pZCons.getCurrentValue()
169  << " E: " << ECons.getCurrentValue() << std::endl
170  << std::endl;
171  }
172 
173  fitter.fit();
174 
175  if (_printConsAfter) {
176  std::cout << std::endl << "-------------------------------------------------" << std::endl;
177  std::cout << " CONSTRAINTS AFTER FIT FOR experiment # " << i + 1 << std::endl;
178  std::cout << "-------------------------------------------------" << std::endl;
179  std::cout << " M: " << MCons.getCurrentValue() << " MPDG: " << MPDGCons.getCurrentValue()
180  << " px: " << pXCons.getCurrentValue() << " py: " << pYCons.getCurrentValue()
181  << " pz: " << pZCons.getCurrentValue() << " E: " << ECons.getCurrentValue() << std::endl
182  << std::endl;
183  }
184 
185  if (_printPartAfter) {
186  std::cout << std::endl << "--------------------------------------------------------" << std::endl;
187  std::cout << "--- PRINTING PARTICLES AFTER FIT FOR experiment # " << i + 1 << std::endl;
188  std::cout << "--------------------------------------------------------" << std::endl;
189  _breco->print();
190  _lepton->print();
191  _X->print();
192  _neutrino->print();
193  }
194 
195  _histStatus->Fill(fitter.getStatus());
196  _histNIter->Fill(fitter.getNbIter());
197  if (fitter.getStatus() == 0) {
198  _histPChi2->Fill(TMath::Prob(fitter.getS(), fitter.getNDF()));
199  _histChi2->Fill(fitter.getS());
200  fillPull1();
201  fillPull2();
202  fillPar();
203  fillM();
204  }
205 
206  if (i % 176 == 0) {
207  std::cout << "\r";
208  std::cout << " ------ " << (Double_t)i / nbExperiments * 100. << " % PROCESSED ------";
209  std::cout.flush();
210  }
211  }
212 
213  return true;
214 }
215 
217  // Smear measured particles
218 
219  for (unsigned int p = 0; p < _measParticles.size(); p++) {
220  TAbsFitParticle* particle = _measParticles[p];
221  TAbsFitParticle* iniParticle = _inimeasParticles[p];
222  TMatrixD parIni(*(iniParticle->getParIni()));
223  const TMatrixD* covM = iniParticle->getCovMatrix();
224  for (int m = 0; m < iniParticle->getNPar(); m++) {
225  parIni(m, 0) += gRandom->Gaus(0., TMath::Sqrt((*covM)(m, m)));
226  }
227  TLorentzVector* ini4Vec = iniParticle->calc4Vec(&parIni);
228  particle->setIni4Vec(ini4Vec);
229  delete ini4Vec;
230  TLorentzVector vectrue(*_inimeasParticles[p]->getIni4Vec());
231  TMatrixD* partrue = _measParticles[p]->transform(vectrue);
232  //_measParticles[p]->setParIni(partrue);
233  delete partrue;
234  }
235 
236  // Calculate neutrino
237  TVector3 nuP3 = _Y4S;
238  for (unsigned int p = 0; p < _measParticles.size(); p++) {
239  nuP3 -= _measParticles[p]->getCurr4Vec()->Vect();
240  }
241  TLorentzVector ini4VecNeutrino;
242  ini4VecNeutrino.SetXYZM(nuP3.X(), nuP3.Y(), nuP3.Z(), 0.);
243  _neutrino->setIni4Vec(&ini4VecNeutrino);
244 }
245 
247  Int_t histindex = 0;
248  for (unsigned int p = 0; p < _measParticles.size(); p++) {
249  //const TAbsFitParticle* particle = _measParticles[p];
250  TLorentzVector vectrue(*_inimeasParticles[p]->getIni4Vec());
251  TMatrixD* partrue = _measParticles[p]->transform(vectrue);
252  const TMatrixD* parfit = _measParticles[p]->getParCurr();
253 
254  TMatrixD parpull(*parfit);
255  parpull -= (*partrue);
256  const TMatrixD* covMatrixFit = _measParticles[p]->getCovMatrixFit();
257  for (int i = 0; i < parpull.GetNrows(); i++) {
258  ((TH1D*)_histsDiff1[histindex])->Fill(parpull(i, 0));
259  parpull(i, 0) /= TMath::Sqrt((*covMatrixFit)(i, i));
260  ((TH1D*)_histsPull1[histindex])->Fill(parpull(i, 0));
261  ((TH1D*)_histsError1[histindex])->Fill(TMath::Sqrt((*covMatrixFit)(i, i)));
262  histindex++;
263  }
264  delete partrue;
265  }
266 }
267 
269  Int_t histindex = 0;
270  for (unsigned int p = 0; p < _measParticles.size(); p++) {
271  const TMatrixD* pull = _measParticles[p]->getPull();
272  const TMatrixD* VDeltaY = _measParticles[p]->getCovMatrixDeltaY();
273  TMatrixD pardiff(*(_measParticles[p]->getParCurr()));
274  pardiff -= *(_measParticles[p]->getParIni());
275  for (int i = 0; i < pull->GetNrows(); i++) {
276  ((TH1D*)_histsPull2[histindex])->Fill((*pull)(i, 0));
277  ((TH1D*)_histsError2[histindex])->Fill(TMath::Sqrt((*VDeltaY)(i, i)));
278  ((TH1D*)_histsDiff2[histindex])->Fill(pardiff(i, 0));
279  histindex++;
280  }
281  }
282 }
283 
285  Int_t histindex = 0;
286  for (unsigned int p = 0; p < _measParticles.size(); p++) {
287  const TMatrixD* partrue = _inimeasParticles[p]->getParIni();
288  const TMatrixD* parsmear = _measParticles[p]->getParIni();
289  const TMatrixD* parfit = _measParticles[p]->getParCurr();
290  for (int i = 0; i < partrue->GetNrows(); i++) {
291  ((TH1D*)_histsParTrue[histindex])->Fill((*partrue)(i, 0));
292  ((TH1D*)_histsParSmear[histindex])->Fill((*parsmear)(i, 0));
293  ((TH1D*)_histsParFit[histindex])->Fill((*parfit)(i, 0));
294  histindex++;
295  }
296  }
297 }
298 
300  _histMBrecoTrue->Fill(_iniBreco->getIni4Vec()->M());
301  _histMBrecoSmear->Fill(_breco->getIni4Vec()->M());
302  _histMBrecoFit->Fill(_breco->getCurr4Vec()->M());
303 
304  _histMXTrue->Fill(_iniX->getIni4Vec()->M());
305  _histMXSmear->Fill(_X->getIni4Vec()->M());
306  _histMXFit->Fill(_X->getCurr4Vec()->M());
307 
308  TLorentzVector xlnutrue = *(_iniLepton->getIni4Vec());
309  xlnutrue += *(_iniX->getIni4Vec());
310  xlnutrue += *(_iniNeutrino->getIni4Vec());
311  _histMXlnuTrue->Fill(xlnutrue.M());
312 
313  TLorentzVector xlnusmear = *(_lepton->getIni4Vec());
314  xlnusmear += *(_X->getIni4Vec());
315  xlnusmear += *(_neutrino->getIni4Vec());
316  _histMXlnuSmear->Fill(xlnusmear.M());
317 
318  TLorentzVector xlnufit = *(_lepton->getCurr4Vec());
319  xlnufit += *(_X->getCurr4Vec());
320  xlnufit += *(_neutrino->getCurr4Vec());
321  _histMXlnuFit->Fill(xlnufit.M());
322 }
323 
325  _histStatus = new TH1D("hStatus", "Status of the Fit", 16, -1, 15);
326  _histNIter = new TH1D("hNIter", "Number of iterations", 100, 0, 100);
327  _histPChi2 = new TH1D("hPChi2", "Chi2 probability", 100, 0., 1.);
328  _histChi2 = new TH1D("hChi2", "Chi2 ", 200, 0., 20.);
329  _histMBrecoTrue = new TH1D("histMBrecoTrue", "histMBrecoTrue", 2000, 4., 6.);
330  _histMBrecoSmear = new TH1D("histMBrecoSmear", "histMBrecoSmear", 2000, 4., 6.);
331  _histMBrecoFit = new TH1D("histMBrecoFit", "histMBrecoFit", 2000, 4., 6.);
332  _histMXTrue = new TH1D("histMXTrue", "histMXTrue", 600, 0., 6.);
333  _histMXSmear = new TH1D("histMXSmear", "histMXSmear", 600, 0., 6.);
334  _histMXFit = new TH1D("histMXFit", "histMXFit", 600, 0., 6.);
335  _histMXlnuTrue = new TH1D("histMXlnuTrue", "histMXlnuTrue", 3000, 4., 7.);
336  _histMXlnuSmear = new TH1D("histMXlnuSmear", "histMXlnuSmear", 500, 3., 8.);
337  _histMXlnuFit = new TH1D("histMXlnuFit", "histMXlnuFit", 3000, 4., 7.);
338 
339  _histsParTrue.Clear();
340  _histsParSmear.Clear();
341  _histsParFit.Clear();
342  _histsPull1.Clear();
343  _histsError1.Clear();
344  _histsDiff1.Clear();
345  _histsPull2.Clear();
346  _histsError2.Clear();
347  _histsDiff2.Clear();
348 
349  TObjArray histarrays;
350  histarrays.Add(&_histsParTrue);
351  histarrays.Add(&_histsParSmear);
352  histarrays.Add(&_histsParFit);
353  histarrays.Add(&_histsPull1);
354  histarrays.Add(&_histsError1);
355  histarrays.Add(&_histsDiff1);
356  histarrays.Add(&_histsPull2);
357  histarrays.Add(&_histsError2);
358  histarrays.Add(&_histsDiff2);
359 
360  TString histnames[] = {
361  "hParTrue", "hParSmear", "hParFit", "hPull1", "hError1", "hDiff1", "hPull2", "hError2", "hDiff2"};
362 
363  TArrayD arrmin(histarrays.GetEntries());
364  TArrayD arrmax(histarrays.GetEntries());
365  arrmin[0] = 0.;
366  arrmax[0] = 2.; // Parameters
367  arrmin[1] = 0.;
368  arrmax[1] = 2.;
369  arrmin[2] = 0.;
370  arrmax[2] = 2.;
371 
372  arrmin[3] = -3.;
373  arrmax[3] = 3.; // Pull1
374  arrmin[4] = 0.;
375  arrmax[4] = .2; //Error1
376  arrmin[5] = -.5;
377  arrmax[5] = .5; //Diff1
378  arrmin[6] = -3.;
379  arrmax[6] = 3.; // Pull2
380  arrmin[7] = 0.;
381  arrmax[7] = 0.2; //Error2
382  arrmin[8] = -.5;
383  arrmax[8] = .5; //Diff2
384 
385  for (unsigned int p = 0; p < _measParticles.size(); p++) {
386  const TAbsFitParticle* particle = _measParticles[p];
387  // const TMatrixD* covMatrix = particle->getCovMatrix();
388 
389  for (int i = 0; i < particle->getNPar(); i++) {
390  for (int h = 0; h < histarrays.GetEntries(); h++) {
391  TString name = histnames[h] + (TString)particle->GetName();
392  name += i;
393  if (h < 3) {
394  const TMatrixD* parfit = _measParticles[p]->getParCurr();
395  arrmin[h] = (*parfit)(i, 0) * 0.5;
396  arrmax[h] = (*parfit)(i, 0) * 1.5;
397  }
398  TH1D* newhisto = new TH1D(name, name, 100, arrmin[h], arrmax[h]);
399  ((TObjArray*)histarrays[h])->Add(newhisto);
400 
401  // newhisto->SetCanExtend(TH1::kAllAxes);
402  }
403  }
404  }
405 }
TObjArray _histsDiff1
Definition: TSLToyGen.h:42
TH1D * _histPChi2
Definition: TSLToyGen.h:23
TObjArray _histsPull2
Definition: TSLToyGen.h:43
TH1D * _histNIter
Definition: TSLToyGen.h:22
void fillM()
Definition: TSLToyGen.cc:299
TH1D * _histMXlnuFit
Definition: TSLToyGen.h:34
Int_t getNbIter()
Definition: TKinFitter.h:50
TAbsFitParticle * _iniLepton
Definition: TSLToyGen.h:76
void setMaxF(Double_t maxF)
Definition: TKinFitter.h:54
TObjArray _histsPull1
Definition: TSLToyGen.h:40
Bool_t _withMassConstraint
Definition: TSLToyGen.h:90
Int_t fit()
Definition: TKinFitter.cc:318
void smearParticles()
Definition: TSLToyGen.cc:216
Bool_t _printPartIni
Definition: TSLToyGen.h:84
void fillPar()
Definition: TSLToyGen.cc:284
Double_t getCurrentValue() override
void setMaxDeltaS(Double_t maxDeltaS)
Definition: TKinFitter.h:52
virtual void setIni4Vec(const TLorentzVector *pini)=0
TObjArray _histsError1
Definition: TSLToyGen.h:41
~TSLToyGen() override
Definition: TSLToyGen.cc:44
Bool_t _withMPDGCons
Definition: TSLToyGen.h:91
TSLToyGen(const TAbsFitParticle *bReco, const TAbsFitParticle *lepton, const TAbsFitParticle *X, const TAbsFitParticle *neutrino)
Definition: TSLToyGen.cc:12
#define X(str)
Definition: MuonsGrabber.cc:38
const TLorentzVector * getIni4Vec()
Bool_t _printConsAfter
Definition: TSLToyGen.h:88
TH1D * _histMXTrue
Definition: TSLToyGen.h:29
virtual TLorentzVector * calc4Vec(const TMatrixD *params)=0
TObjArray _histsDiff2
Definition: TSLToyGen.h:45
TObjArray _histsError2
Definition: TSLToyGen.h:44
std::vector< TAbsFitParticle * > _inimeasParticles
Definition: TSLToyGen.h:69
TAbsFitParticle * _iniX
Definition: TSLToyGen.h:77
TAbsFitParticle * _breco
Definition: TSLToyGen.h:79
TObjArray _histsParTrue
Definition: TSLToyGen.h:36
TAbsFitParticle * _X
Definition: TSLToyGen.h:81
std::vector< TAbsFitParticle * > _measParticles
Definition: TSLToyGen.h:71
TVector3 _Y4S
Definition: TSLToyGen.h:73
Double_t getMaxF()
Definition: TKinFitter.h:55
Double_t getS()
Definition: TKinFitter.cc:1066
void fillPull2()
Definition: TSLToyGen.cc:268
TH1D * _histMBrecoTrue
Definition: TSLToyGen.h:26
void addConstraint(TAbsFitConstraint *constraint)
Definition: TKinFitter.cc:292
TAbsFitParticle * _iniNeutrino
Definition: TSLToyGen.h:78
Int_t getStatus()
Definition: TKinFitter.h:51
void addUnmeasParticle(TAbsFitParticle *particle)
Definition: TKinFitter.cc:243
Int_t getNDF()
Definition: TKinFitter.h:45
void addMeasParticle(TAbsFitParticle *particle)
Definition: TKinFitter.cc:194
TH1D * _histChi2
Definition: TSLToyGen.h:24
Bool_t _doCheckConstraintsTruth
Definition: TSLToyGen.h:92
TAbsFitParticle * _neutrino
Definition: TSLToyGen.h:82
void createHists()
Definition: TSLToyGen.cc:324
virtual void print()
void setVerbosity(Int_t verbosity=1)
Definition: TKinFitter.cc:304
Bool_t _printConsBefore
Definition: TSLToyGen.h:87
virtual const TMatrixD * getCovMatrix() const
TAbsFitParticle * _iniBreco
Definition: TSLToyGen.h:75
void addParticles2(TAbsFitParticle *p1, TAbsFitParticle *p2=nullptr, TAbsFitParticle *p3=nullptr, TAbsFitParticle *p4=nullptr, TAbsFitParticle *p5=nullptr, TAbsFitParticle *p6=nullptr, TAbsFitParticle *p7=nullptr, TAbsFitParticle *p8=nullptr, TAbsFitParticle *p9=nullptr, TAbsFitParticle *p10=nullptr)
TH1D * _histMXlnuTrue
Definition: TSLToyGen.h:32
void addParticles1(TAbsFitParticle *p1, TAbsFitParticle *p2=nullptr, TAbsFitParticle *p3=nullptr, TAbsFitParticle *p4=nullptr, TAbsFitParticle *p5=nullptr, TAbsFitParticle *p6=nullptr, TAbsFitParticle *p7=nullptr, TAbsFitParticle *p8=nullptr, TAbsFitParticle *p9=nullptr, TAbsFitParticle *p10=nullptr)
const TMatrixD * getParIni()
const TLorentzVector * getCurr4Vec()
TH1D * _histStatus
Definition: TSLToyGen.h:21
TAbsFitParticle * _lepton
Definition: TSLToyGen.h:80
Bool_t _printConsIni
Definition: TSLToyGen.h:85
void setMaxNbIter(Int_t maxNbIter)
Definition: TKinFitter.h:48
TObjArray _histsParSmear
Definition: TSLToyGen.h:37
TH1D * _histMBrecoFit
Definition: TSLToyGen.h:28
TH1D * _histMXSmear
Definition: TSLToyGen.h:30
void addParticle1(TAbsFitParticle *particle)
void fillPull1()
Definition: TSLToyGen.cc:246
Double_t getF()
Definition: TKinFitter.cc:1054
TH1D * _histMXlnuSmear
Definition: TSLToyGen.h:33
std::vector< TAbsFitParticle * > _iniunmeasParticles
Definition: TSLToyGen.h:70
Bool_t doToyExperiments(Int_t nbExperiments=1000)
Definition: TSLToyGen.cc:56
Bool_t _printPartAfter
Definition: TSLToyGen.h:89
TH1D * _histMBrecoSmear
Definition: TSLToyGen.h:27
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
Bool_t _printSmearedPartBefore
Definition: TSLToyGen.h:86
TObjArray _histsParFit
Definition: TSLToyGen.h:38
TH1D * _histMXFit
Definition: TSLToyGen.h:31
virtual TAbsFitParticle * clone(const TString &newname="") const =0
Int_t getNPar() const