24 void plot( TString fname =
"data.root", TString var0=
"var0", TString var1=
"var1" )
26 TFile* dataFile = TFile::Open( fname );
29 cout <<
"ERROR: cannot open file: " << fname << endl;
33 TTree *treeS = (TTree*)dataFile->Get(
"TreeS");
34 TTree *treeB = (TTree*)dataFile->Get(
"TreeB");
36 TCanvas* c =
new TCanvas(
"c",
"", 0, 0, 550, 550 );
38 TStyle *TMVAStyle = gROOT->GetStyle(
"Plain");
39 TMVAStyle->SetOptStat(0);
40 TMVAStyle->SetPadTopMargin(0.02);
41 TMVAStyle->SetPadBottomMargin(0.16);
42 TMVAStyle->SetPadRightMargin(0.03);
43 TMVAStyle->SetPadLeftMargin(0.15);
44 TMVAStyle->SetPadGridX(0);
45 TMVAStyle->SetPadGridY(0);
47 TMVAStyle->SetOptTitle(0);
48 TMVAStyle->SetTitleW(.4);
49 TMVAStyle->SetTitleH(.10);
50 TMVAStyle->SetTitleX(.5);
51 TMVAStyle->SetTitleY(.9);
52 TMVAStyle->SetMarkerStyle(20);
53 TMVAStyle->SetMarkerSize(1.6);
57 Float_t xmin = TMath::Min( treeS->GetMinimum( var0 ), treeB->GetMinimum( var0 ) );
58 Float_t xmax = TMath::Max( treeS->GetMaximum( var0 ), treeB->GetMaximum( var0 ) );
59 Float_t ymin = TMath::Min( treeS->GetMinimum( var1 ), treeB->GetMinimum( var1 ) );
60 Float_t ymax = TMath::Max( treeS->GetMaximum( var1 ), treeB->GetMaximum( var1 ) );
63 TH2F* frameS =
new TH2F(
"DataS",
"DataS", nbin, xmin, xmax, nbin, ymin, ymax );
64 TH2F* frameB =
new TH2F(
"DataB",
"DataB", nbin, xmin, xmax, nbin, ymin, ymax );
67 treeS->Draw( Form(
"%s:%s>>DataS",var1.Data(),var0.Data()),
"",
"0" );
68 treeB->Draw( Form(
"%s:%s>>DataB",var1.Data(),var0.Data()
72 frameS->SetMarkerSize( 0.1 );
73 frameS->SetMarkerColor( 4 );
75 frameB->SetMarkerSize( 0.1 );
76 frameB->SetMarkerColor( 2 );
79 frameS->SetTitle( var1+
" versus "+var0+
" for signal and background" );
80 frameS->GetXaxis()->SetTitle( var0 );
81 frameS->GetYaxis()->SetTitle( var1 );
83 frameS->SetLabelSize( 0.04,
"X" );
84 frameS->SetLabelSize( 0.04,
"Y" );
85 frameS->SetTitleSize( 0.05,
"X" );
86 frameS->SetTitleSize( 0.05,
"Y" );
90 frameB->Draw(
"same" );
93 TLegend *legend =
new TLegend( 1 - c->GetRightMargin() - 0.32, 1 - c->GetTopMargin() - 0.12,
94 1 - c->GetRightMargin(), 1 - c->GetTopMargin() );
95 legend->SetFillStyle( 1 );
96 legend->AddEntry(frameS,
"Signal",
"p");
97 legend->AddEntry(frameB,
"Background",
"p");
99 legend->SetBorderSize(1);
100 legend->SetMargin( 0.3 );
104 TMatrixD* produceSqrtMat(
const TMatrixD& covMat )
107 Int_t size = covMat.GetNrows();;
108 TMatrixD* sqrtMat =
new TMatrixD( size, size );
110 for (Int_t i=0; i< size; i++) {
113 for (Int_t j=0;j< i; j++) sum += (*sqrtMat)(i,j) * (*sqrtMat)(i,j);
115 (*sqrtMat)(i,i) = TMath::Sqrt(TMath::Abs(covMat(i,i) - sum));
117 for (Int_t k=i+1 ;k<size; k++) {
120 for (Int_t l=0; l<i; l++) sum += (*sqrtMat)(k,l) * (*sqrtMat)(i,l);
122 (*sqrtMat)(k,i) = (covMat(k,i) - sum) / (*sqrtMat)(i,i);
129 void getGaussRnd( TArrayD& v,
const TMatrixD& sqrtMat, TRandom& R )
134 const Int_t size = sqrtMat.GetNrows();
135 if (size != v.GetSize())
136 cout <<
"<getGaussRnd> too short input vector: " << size <<
" " << v.GetSize() << endl;
138 Double_t* tmpVec =
new Double_t[size];
140 for (Int_t i=0; i<size; i++) {
145 tmpVec[i] = TMath::Sin(x) * TMath::Sqrt(-2.0*TMath::Log(y));
148 for (Int_t i=0; i<size; i++) {
150 for (Int_t j=0; j<=i; j++) v[i] += sqrtMat(i,j) * tmpVec[j];
157 void create_lin_Nvar_withFriend(Int_t N = 2000)
159 const Int_t nvar = 4;
160 const Int_t nvar2 = 1;
164 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
167 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
168 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
169 for (Int_t ivar=0; ivar<nvar-nvar2; ivar++) {
170 cout <<
"Creating branch var" << ivar+1 <<
" in signal tree" << endl;
171 treeS->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
172 treeB->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
174 TTree* treeSF =
new TTree(
"TreeSF",
"TreeS", 1 );
175 TTree* treeBF =
new TTree(
"TreeBF",
"TreeB", 1 );
176 for (Int_t ivar=nvar-nvar2; ivar<nvar; ivar++) {
177 treeSF->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
178 treeBF->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
183 Float_t xS[nvar] = { 0.2, 0.3, 0.5, 0.9 };
184 Float_t xB[nvar] = { -0.2, -0.3, -0.5, -0.6 };
185 Float_t dx[nvar] = { 1.0, 1.0, 1.0, 1.0 };
186 TArrayD* v =
new TArrayD( nvar );
196 TMatrixD* covMatS =
new TMatrixD( nvar, nvar );
197 TMatrixD* covMatB =
new TMatrixD( nvar, nvar );
198 for (Int_t ivar=0; ivar<nvar; ivar++) {
199 (*covMatS)(ivar,ivar) = dx[ivar]*dx[ivar];
200 (*covMatB)(ivar,ivar) = dx[ivar]*dx[ivar];
201 for (Int_t jvar=ivar+1; jvar<nvar; jvar++) {
202 (*covMatS)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
203 (*covMatS)(jvar,ivar) = (*covMatS)(ivar,jvar);
205 (*covMatB)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
206 (*covMatB)(jvar,ivar) = (*covMatB)(ivar,jvar);
210 cout <<
"signal covariance matrix: " << endl;
212 cout <<
"background covariance matrix: " << endl;
216 TMatrixD* sqrtMatS = produceSqrtMat( *covMatS );
217 TMatrixD* sqrtMatB = produceSqrtMat( *covMatB );
220 for (Int_t itype=0; itype<2; itype++) {
224 if (itype == 0) { x = xS; m = sqrtMatS; cout <<
"- produce signal" << endl; }
225 else { x = xB; m = sqrtMatB; cout <<
"- produce background" << endl; }
228 TTree* tree = (itype==0) ? treeS : treeB;
229 TTree* treeF = (itype==0) ? treeSF : treeBF;
230 for (Int_t i=0; i<N; i++) {
232 if (i%1000 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
233 getGaussRnd( *v, *m, R );
235 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar] = (*v)[ivar] + x[ivar];
255 cout <<
"created data file: " << dataFile->GetName() << endl;
262 TTree* makeTree_lin_Nvar( TString treeName, TString treeTitle, Float_t* x, Float_t* dx,
const Int_t nvar, Int_t N )
267 TTree* tree =
new TTree(treeName, treeTitle, 1);
269 for (Int_t ivar=0; ivar<nvar; ivar++) {
270 tree->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
274 TArrayD* v =
new TArrayD( nvar );
284 TMatrixD* covMat =
new TMatrixD( nvar, nvar );
285 for (Int_t ivar=0; ivar<nvar; ivar++) {
286 (*covMat)(ivar,ivar) = dx[ivar]*dx[ivar];
287 for (Int_t jvar=ivar+1; jvar<nvar; jvar++) {
288 (*covMat)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
289 (*covMat)(jvar,ivar) = (*covMat)(ivar,jvar);
296 TMatrixD* sqrtMat = produceSqrtMat( *covMat );
299 for (Int_t i=0; i<N; i++) {
301 if (i%1000 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
302 getGaussRnd( *v, *sqrtMat, R );
304 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar] = (*v)[ivar] + x[ivar];
314 cout <<
"created tree: " << tree->GetName() << endl;
320 TTree* makeTree_circ(TString treeName, TString treeTitle, Int_t nvar = 2, Int_t N = 6000, Float_t radius = 1.0, Bool_t distort =
false)
326 TTree* tree =
new TTree( treeName, treeTitle, 1 );
327 for (Int_t ivar=0; ivar<nvar; ivar++) {
328 tree->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
333 Float_t phimin = -70, phimax = 130;
336 Float_t fnmin = -(radius+4.0*rsig);
337 Float_t fnmax = +(radius+4.0*rsig);
338 Float_t dfn = fnmax-fnmin;
341 for (Int_t i=0; i<N; i++) {
342 Double_t r1=R.Rndm(),r2=R.Rndm(), r3;
345 if (distort) phi = r3*(phimax - phimin) + phimin;
346 else phi = R.Rndm()*(phimax - phimin) + phimin;
347 phi += R.Gaus()*phisig;
352 xvar[0] = r*cos(TMath::DegToRad()*phi);
353 xvar[1] = r*sin(TMath::DegToRad()*phi);
355 for( Int_t j = 2; j<nvar; ++j )
356 xvar[j] = dfn*R.Rndm()+fnmin;
361 for (Int_t i=0; i<Nn; i++) {
363 xvar[0] = dfn*R.Rndm()+fnmin;
364 xvar[1] = dfn*R.Rndm()+fnmin;
366 for( Int_t j = 2; j<nvar; ++j )
367 xvar[j] = dfn*R.Rndm()+fnmin;
375 cout <<
"created tree: " << tree->GetName() << endl;
382 void create_lin_Nvar_2(Int_t N = 50000)
387 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
390 Float_t xS[nvar] = { 0.2, 0.3, 0.5, 0.9 };
391 Float_t xB[nvar] = { -0.2, -0.3, -0.5, -0.6 };
392 Float_t dx[nvar] = { 1.0, 1.0, 1.0, 1.0 };
395 TTree* treeS = makeTree_lin_Nvar(
"TreeS",
"Signal tree", xS, dx, nvar, N );
396 TTree* treeB = makeTree_lin_Nvar(
"TreeB",
"Background tree", xB, dx, nvar, N );
405 cout <<
"created data file: " << dataFile->GetName() << endl;
412 void create_lin_Nvar(Int_t N = 50000)
414 const Int_t nvar = 4;
418 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
421 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
422 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
423 for (Int_t ivar=0; ivar<nvar; ivar++) {
424 treeS->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
425 treeB->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
429 Float_t xS[nvar] = { 0.2, 0.3, 0.5, 0.9 };
430 Float_t xB[nvar] = { -0.2, -0.3, -0.5, -0.6 };
431 Float_t dx[nvar] = { 1.0, 1.0, 1.0, 1.0 };
432 TArrayD* v =
new TArrayD( nvar );
442 TMatrixD* covMatS =
new TMatrixD( nvar, nvar );
443 TMatrixD* covMatB =
new TMatrixD( nvar, nvar );
444 for (Int_t ivar=0; ivar<nvar; ivar++) {
445 (*covMatS)(ivar,ivar) = dx[ivar]*dx[ivar];
446 (*covMatB)(ivar,ivar) = dx[ivar]*dx[ivar];
447 for (Int_t jvar=ivar+1; jvar<nvar; jvar++) {
448 (*covMatS)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
449 (*covMatS)(jvar,ivar) = (*covMatS)(ivar,jvar);
451 (*covMatB)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
452 (*covMatB)(jvar,ivar) = (*covMatB)(ivar,jvar);
455 cout <<
"signal covariance matrix: " << endl;
457 cout <<
"background covariance matrix: " << endl;
461 TMatrixD* sqrtMatS = produceSqrtMat( *covMatS );
462 TMatrixD* sqrtMatB = produceSqrtMat( *covMatB );
465 for (Int_t itype=0; itype<2; itype++) {
469 if (itype == 0) { x = xS; m = sqrtMatS; cout <<
"- produce signal" << endl; }
470 else { x = xB; m = sqrtMatB; cout <<
"- produce background" << endl; }
473 TTree* tree = (itype==0) ? treeS : treeB;
474 for (Int_t i=0; i<N; i++) {
476 if (i%1000 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
477 getGaussRnd( *v, *m, R );
479 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar] = (*v)[ivar] + x[ivar];
493 cout <<
"created data file: " << dataFile->GetName() << endl;
498 void create_lin_Nvar_categories(Int_t N = 10000, Int_t type = 2)
500 const Int_t nvar = 4;
505 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
508 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
509 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
510 for (Int_t ivar=0; ivar<nvar; ivar++) {
511 treeS->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
512 treeB->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
516 treeS->Branch(
"eta", &eta,
"eta/F" );
517 treeB->Branch(
"eta", &eta,
"eta/F" );
520 Float_t xS[nvar] = { 0.2, 0.3, 0.5, 0.9 };
521 Float_t xB[nvar] = { -0.2, -0.3, -0.5, -0.6 };
522 Float_t dx[nvar] = { 1.0, 1.0, 1.0, 1.0 };
523 TArrayD* v =
new TArrayD( nvar );
541 TMatrixD* covMatS =
new TMatrixD( nvar, nvar );
542 TMatrixD* covMatB =
new TMatrixD( nvar, nvar );
543 for (Int_t ivar=0; ivar<nvar; ivar++) {
544 (*covMatS)(ivar,ivar) = dx[ivar]*dx[ivar];
545 (*covMatB)(ivar,ivar) = dx[ivar]*dx[ivar];
546 for (Int_t jvar=ivar+1; jvar<nvar; jvar++) {
547 (*covMatS)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
548 (*covMatS)(jvar,ivar) = (*covMatS)(ivar,jvar);
550 (*covMatB)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
551 (*covMatB)(jvar,ivar) = (*covMatB)(ivar,jvar);
554 cout <<
"signal covariance matrix: " << endl;
556 cout <<
"background covariance matrix: " << endl;
560 TMatrixD* sqrtMatS = produceSqrtMat( *covMatS );
561 TMatrixD* sqrtMatB = produceSqrtMat( *covMatB );
564 for (Int_t itype=0; itype<2; itype++) {
568 if (itype == 0) { x = xS; m = sqrtMatS; cout <<
"- produce signal" << endl; }
569 else { x = xB; m = sqrtMatB; cout <<
"- produce background" << endl; }
572 TTree* tree = (itype==0) ? treeS : treeB;
573 for (Int_t i=0; i<N; i++) {
575 if (i%1000 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
576 getGaussRnd( *v, *m, R );
578 eta = 2.5*2*(R.Rndm() - 0.5);
580 if (type == 1) offset = TMath::Abs(eta) > 1.3 ? 0.8 : -0.8;
581 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar] = (*v)[ivar] + x[ivar] + offset;
582 if (type != 1 && TMath::Abs(eta) > 1.3) xvar[nvar-1] = -5;
596 cout <<
"created data file: " << dataFile->GetName() << endl;
601 void create_lin_Nvar_weighted(Int_t N = 10000,
int WeightedSignal=0,
int WeightedBkg=1, Float_t BackgroundContamination=0, Int_t seed=100)
603 const Int_t nvar = 4;
608 cout << endl << endl << endl;
609 cout <<
"please use .L createData.C++ if you want to run this MC geneation" <<endl;
610 cout <<
"otherwise you will wait for ages!!! " << endl;
611 cout << endl << endl << endl;
616 if (BackgroundContamination) fileName = Form(
"linCorGauss%d_weighted+background.root",seed);
617 else fileName = Form(
"linCorGauss%d_weighted.root",seed);
619 TFile* dataFile = TFile::Open( fileName.Data(),
"RECREATE" );
622 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
623 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
624 for (Int_t ivar=0; ivar<nvar; ivar++) {
625 treeS->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
626 treeB->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
628 if (WeightedSignal||BackgroundContamination>0||1) treeS->Branch(
"weight", &weight,
"weight/F" );
629 if (WeightedBkg) treeB->Branch(
"weight", &weight,
"weight/F" );
632 Float_t xS[nvar] = { 0.2, 0.3, 0.4, 0.8 };
633 Float_t xB[nvar] = { -0.2, -0.3, -0.4, -0.5 };
634 Float_t dx[nvar] = { 1.0, 1.0, 1.0, 1.0 };
635 TArrayD* v =
new TArrayD( nvar );
645 TMatrixD* covMatS =
new TMatrixD( nvar, nvar );
646 TMatrixD* covMatB =
new TMatrixD( nvar, nvar );
647 for (Int_t ivar=0; ivar<nvar; ivar++) {
648 (*covMatS)(ivar,ivar) = dx[ivar]*dx[ivar];
649 (*covMatB)(ivar,ivar) = dx[ivar]*dx[ivar];
650 for (Int_t jvar=ivar+1; jvar<nvar; jvar++) {
651 (*covMatS)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
652 (*covMatS)(jvar,ivar) = (*covMatS)(ivar,jvar);
654 (*covMatB)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
655 (*covMatB)(jvar,ivar) = (*covMatB)(ivar,jvar);
658 cout <<
"signal covariance matrix: " << endl;
660 cout <<
"background covariance matrix: " << endl;
664 TMatrixD* sqrtMatS = produceSqrtMat( *covMatS );
665 TMatrixD* sqrtMatB = produceSqrtMat( *covMatB );
668 for (Int_t itype=0; itype<2; itype++) {
672 if (itype == 0) { x = xS; m = sqrtMatS; cout <<
"- produce signal" << endl; }
673 else { x = xB; m = sqrtMatB; cout <<
"- produce background" << endl; }
676 TTree* tree = (itype==0) ? treeS : treeB;
679 getGaussRnd( *v, *m, R );
681 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar] = (*v)[ivar] + x[ivar];
686 weight = 0.8 / (TMath::Gaus( ((*v)[nvar-1]), 0, 1.09) );
687 Double_t tmp=R.Uniform()/0.00034;
688 if (itype==0 && !WeightedSignal) {
692 }
else if (itype==1 && !WeightedBkg) {
701 if (i%10 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
709 if (BackgroundContamination > 0){
712 TMatrixD* m = sqrtMatB;
714 for (Int_t i=0; i<N*BackgroundContamination*2; i++) {
715 if (i%1000 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
716 getGaussRnd( *v, *m, R );
717 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar] = (*v)[ivar] + x[ivar];
738 for (Int_t i=0;i<4;i++){
740 sprintf(buffer,
"h%d",i);
741 h[i]=
new TH1F(buffer,
"",100,-5,5);
742 sprintf(buffer,
"hw%d",i);
743 hw[i] =
new TH1F(buffer,
"",100,-5,5);
744 hw[i]->SetLineColor(3);
747 for (
int ie=0;ie<treeS->GetEntries();ie++){
749 for (Int_t i=0;i<4;i++){
751 hw[i]->Fill(xvar[i],weight);
755 TCanvas *c =
new TCanvas(
"c",
"",800,800);
758 for (Int_t i=0;i<4;i++){
766 cout <<
"created data file: " << dataFile->GetName() << endl;
772 void create_lin_Nvar_Arr(Int_t N = 1000)
774 const Int_t nvar = 4;
775 std::vector<float>* xvar[nvar];
778 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
781 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
782 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
783 for (Int_t ivar=0; ivar<nvar; ivar++) {
784 xvar[ivar] =
new std::vector<float>();
785 treeS->Branch( TString(Form(
"var%i", ivar+1 )).Data(),
"vector<float>", &xvar[ivar], 64000, 1 );
786 treeB->Branch( TString(Form(
"var%i", ivar+1 )).Data(),
"vector<float>", &xvar[ivar], 64000, 1 );
790 Float_t xS[nvar] = { 0.2, 0.3, 0.5, 0.9 };
791 Float_t xB[nvar] = { -0.2, -0.3, -0.5, -0.6 };
792 Float_t dx[nvar] = { 1.0, 1.0, 1.0, 1.0 };
793 TArrayD* v =
new TArrayD( nvar );
803 TMatrixD* covMatS =
new TMatrixD( nvar, nvar );
804 TMatrixD* covMatB =
new TMatrixD( nvar, nvar );
805 for (Int_t ivar=0; ivar<nvar; ivar++) {
806 (*covMatS)(ivar,ivar) = dx[ivar]*dx[ivar];
807 (*covMatB)(ivar,ivar) = dx[ivar]*dx[ivar];
808 for (Int_t jvar=ivar+1; jvar<nvar; jvar++) {
809 (*covMatS)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
810 (*covMatS)(jvar,ivar) = (*covMatS)(ivar,jvar);
812 (*covMatB)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
813 (*covMatB)(jvar,ivar) = (*covMatB)(ivar,jvar);
816 cout <<
"signal covariance matrix: " << endl;
818 cout <<
"background covariance matrix: " << endl;
822 TMatrixD* sqrtMatS = produceSqrtMat( *covMatS );
823 TMatrixD* sqrtMatB = produceSqrtMat( *covMatB );
826 for (Int_t itype=0; itype<2; itype++) {
830 if (itype == 0) { x = xS; m = sqrtMatS; cout <<
"- produce signal" << endl; }
831 else { x = xB; m = sqrtMatB; cout <<
"- produce background" << endl; }
834 TTree* tree = (itype==0) ? treeS : treeB;
835 for (Int_t i=0; i<N; i++) {
837 if (i%100 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
839 Int_t aSize = (Int_t)(gRandom->Rndm()*10);
840 for (Int_t ivar=0; ivar<nvar; ivar++) {
842 xvar[ivar]->reserve(aSize);
844 for(Int_t iA = 0; iA<aSize; iA++) {
846 getGaussRnd( *v, *m, R );
847 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar]->push_back((*v)[ivar] + x[ivar]);
862 cout <<
"created data file: " << dataFile->GetName() << endl;
870 void create_lin_Nvar_double()
873 const Int_t nvar = 4;
875 Double_t xvarD[nvar];
879 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
882 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
883 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
884 for (Int_t ivar=0; ivar<nvar; ivar++) {
886 treeS->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvarD[ivar], TString(Form(
"var%i/D", ivar+1 )).Data() );
887 treeB->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvarD[ivar], TString(Form(
"var%i/D", ivar+1 )).Data() );
890 treeS->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvarF[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
891 treeB->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvarF[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
896 Double_t xS[nvar] = { 0.2, 0.3, 0.5, 0.6 };
897 Double_t xB[nvar] = { -0.2, -0.3, -0.5, -0.6 };
898 Double_t dx[nvar] = { 1.0, 1.0, 1.0, 1.0 };
899 TArrayD* v =
new TArrayD( nvar );
909 TMatrixD* covMatS =
new TMatrixD( nvar, nvar );
910 TMatrixD* covMatB =
new TMatrixD( nvar, nvar );
911 for (Int_t ivar=0; ivar<nvar; ivar++) {
912 (*covMatS)(ivar,ivar) = dx[ivar]*dx[ivar];
913 (*covMatB)(ivar,ivar) = dx[ivar]*dx[ivar];
914 for (Int_t jvar=ivar+1; jvar<nvar; jvar++) {
915 (*covMatS)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
916 (*covMatS)(jvar,ivar) = (*covMatS)(ivar,jvar);
918 (*covMatB)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
919 (*covMatB)(jvar,ivar) = (*covMatB)(ivar,jvar);
922 cout <<
"signal covariance matrix: " << endl;
924 cout <<
"background covariance matrix: " << endl;
928 TMatrixD* sqrtMatS = produceSqrtMat( *covMatS );
929 TMatrixD* sqrtMatB = produceSqrtMat( *covMatB );
932 for (Int_t itype=0; itype<2; itype++) {
936 if (itype == 0) { x = xS; m = sqrtMatS; cout <<
"- produce signal" << endl; }
937 else { x = xB; m = sqrtMatB; cout <<
"- produce background" << endl; }
940 TTree* tree = (itype==0) ? treeS : treeB;
941 for (Int_t i=0; i<N; i++) {
943 if (i%1000 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
944 getGaussRnd( *v, *m, R );
946 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar] = (*v)[ivar] + x[ivar];
947 for (Int_t ivar=0; ivar<nvar; ivar++) {
948 if (ivar<2) xvarD[ivar] = xvar[ivar];
949 else xvarF[ivar] = xvar[ivar];
964 cout <<
"created data file: " << dataFile->GetName() << endl;
970 void create_lin_Nvar_discrete()
973 const Int_t nvar = 4;
978 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
981 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
982 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
983 for (Int_t ivar=0; ivar<nvar-2; ivar++) {
984 treeS->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
985 treeB->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
987 for (Int_t ivar=0; ivar<2; ivar++) {
988 treeS->Branch( TString(Form(
"var%i", ivar+nvar-2+1 )).Data(), &xvarI[ivar], TString(Form(
"var%i/I", ivar+nvar-2+1 )).Data() );
989 treeB->Branch( TString(Form(
"var%i", ivar+nvar-2+1 )).Data(), &xvarI[ivar], TString(Form(
"var%i/I", ivar+nvar-2+1 )).Data() );
993 Float_t xS[nvar] = { 0.2, 0.3, 1, 2 };
994 Float_t xB[nvar] = { -0.2, -0.3, 0, 0 };
995 Float_t dx[nvar] = { 1.0, 1.0, 1, 2 };
996 TArrayD* v =
new TArrayD( nvar );
1005 for (
int i=0; i<20; i++) rho[i] = 0;
1008 TMatrixD* covMatS =
new TMatrixD( nvar, nvar );
1009 TMatrixD* covMatB =
new TMatrixD( nvar, nvar );
1010 for (Int_t ivar=0; ivar<nvar; ivar++) {
1011 (*covMatS)(ivar,ivar) = dx[ivar]*dx[ivar];
1012 (*covMatB)(ivar,ivar) = dx[ivar]*dx[ivar];
1013 for (Int_t jvar=ivar+1; jvar<nvar; jvar++) {
1014 (*covMatS)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
1015 (*covMatS)(jvar,ivar) = (*covMatS)(ivar,jvar);
1017 (*covMatB)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
1018 (*covMatB)(jvar,ivar) = (*covMatB)(ivar,jvar);
1021 cout <<
"signal covariance matrix: " << endl;
1023 cout <<
"background covariance matrix: " << endl;
1027 TMatrixD* sqrtMatS = produceSqrtMat( *covMatS );
1028 TMatrixD* sqrtMatB = produceSqrtMat( *covMatB );
1031 for (Int_t itype=0; itype<2; itype++) {
1035 if (itype == 0) { x = xS; m = sqrtMatS; cout <<
"- produce signal" << endl; }
1036 else { x = xB; m = sqrtMatB; cout <<
"- produce background" << endl; }
1039 TTree* tree = (itype==0) ? treeS : treeB;
1040 for (Int_t i=0; i<N; i++) {
1042 if (i%1000 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
1043 getGaussRnd( *v, *m, R );
1045 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar] = (*v)[ivar] + x[ivar];
1047 xvarI[0] = TMath::Nint(xvar[nvar-2]);
1048 xvarI[1] = TMath::Nint(xvar[nvar-1]);
1062 cout <<
"created data file: " << dataFile->GetName() << endl;
1068 void create_ManyVars()
1071 const Int_t nvar = 20;
1075 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
1078 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1079 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1080 for (Int_t ivar=0; ivar<nvar; ivar++) {
1081 treeS->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1082 treeB->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1088 for (Int_t ivar=0; ivar<nvar; ivar++) {
1089 xS[ivar] = 0 + ivar*0.05;
1090 xB[ivar] = 0 - ivar*0.05;
1118 for (Int_t itype=0; itype<2; itype++) {
1120 Float_t* x = (itype == 0) ? xS : xB;
1123 TTree* tree = (itype == 0) ? treeS : treeB;
1124 for (Int_t i=0; i<N; i++) {
1126 if (i%1000 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
1127 for (Int_t ivar=0; ivar<nvar; ivar++) {
1128 if (ivar == 1500 && itype!=10) xvar[ivar] = 1;
1129 else xvar[ivar] = x[ivar] + R.Gaus()*dx[ivar];
1145 cout <<
"created data file: " << dataFile->GetName() << endl;
1149 void create_lin_NvarObsolete()
1152 const Int_t nvar = 20;
1156 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
1159 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1160 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1161 for (Int_t ivar=0; ivar<nvar; ivar++) {
1162 treeS->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1163 treeB->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1167 Float_t xS[nvar] = { 0.5, 0.5, 0.0, 0.0, 0.0, 0.0 };
1168 Float_t xB[nvar] = { -0.5, -0.5, -0.0, -0.0, -0.0, -0.0 };
1169 Float_t dx[nvar] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
1170 TArrayD* v =
new TArrayD( nvar );
1172 for (Int_t i=0; i<50; i++) rho[i] = 0;
1181 TMatrixD* covMatS =
new TMatrixD( nvar, nvar );
1182 TMatrixD* covMatB =
new TMatrixD( nvar, nvar );
1183 for (Int_t ivar=0; ivar<nvar; ivar++) {
1184 (*covMatS)(ivar,ivar) = dx[ivar]*dx[ivar];
1185 (*covMatB)(ivar,ivar) = dx[ivar]*dx[ivar];
1186 for (Int_t jvar=ivar+1; jvar<nvar; jvar++) {
1187 (*covMatS)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
1188 (*covMatS)(jvar,ivar) = (*covMatS)(ivar,jvar);
1190 (*covMatB)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
1191 (*covMatB)(jvar,ivar) = (*covMatB)(ivar,jvar);
1194 cout <<
"signal covariance matrix: " << endl;
1196 cout <<
"background covariance matrix: " << endl;
1200 TMatrixD* sqrtMatS = produceSqrtMat( *covMatS );
1201 TMatrixD* sqrtMatB = produceSqrtMat( *covMatB );
1204 for (Int_t itype=0; itype<2; itype++) {
1208 if (itype == 0) { x = xS; m = sqrtMatS; cout <<
"- produce signal" << endl; }
1209 else { x = xB; m = sqrtMatB; cout <<
"- produce background" << endl; }
1212 TTree* tree = (itype==0) ? treeS : treeB;
1213 for (Int_t i=0; i<N; i++) {
1215 if (i%1000 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
1216 getGaussRnd( *v, *m, R );
1218 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar] = (*v)[ivar] + x[ivar];
1232 cout <<
"created data file: " << dataFile->GetName() << endl;
1238 void create_lin(Int_t N = 2000)
1240 const Int_t nvar = 2;
1241 Double_t xvar[nvar];
1245 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
1248 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1249 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1250 for (Int_t ivar=0; ivar<nvar; ivar++) {
1251 treeS->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/D", ivar )).Data() );
1252 treeB->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/D", ivar )).Data() );
1254 treeS->Branch(
"weight", &weight,
"weight/F" );
1255 treeB->Branch(
"weight", &weight,
"weight/F" );
1258 Float_t xS[nvar] = { 0.0, 0.0 };
1259 Float_t xB[nvar] = { -0.0, -0.0 };
1260 Float_t dx[nvar] = { 1.0, 1.0 };
1261 TArrayD* v =
new TArrayD( 2 );
1262 Float_t rhoS = 0.21;
1266 TMatrixD* covMatS =
new TMatrixD( nvar, nvar );
1267 TMatrixD* covMatB =
new TMatrixD( nvar, nvar );
1268 for (Int_t ivar=0; ivar<nvar; ivar++) {
1269 (*covMatS)(ivar,ivar) = dx[ivar]*dx[ivar];
1270 (*covMatB)(ivar,ivar) = dx[ivar]*dx[ivar];
1271 for (Int_t jvar=ivar+1; jvar<nvar; jvar++) {
1272 (*covMatS)(ivar,jvar) = rhoS*dx[ivar]*dx[jvar];
1273 (*covMatS)(jvar,ivar) = (*covMatS)(ivar,jvar);
1275 (*covMatB)(ivar,jvar) = rhoB*dx[ivar]*dx[jvar];
1276 (*covMatB)(jvar,ivar) = (*covMatB)(ivar,jvar);
1279 cout <<
"signal covariance matrix: " << endl;
1281 cout <<
"background covariance matrix: " << endl;
1285 TMatrixD* sqrtMatS = produceSqrtMat( *covMatS );
1286 TMatrixD* sqrtMatB = produceSqrtMat( *covMatB );
1289 for (Int_t itype=0; itype<2; itype++) {
1293 if (itype == 0) { x = xS; m = sqrtMatS; cout <<
"- produce signal" << endl; }
1294 else { x = xB; m = sqrtMatB; cout <<
"- produce background" << endl; }
1297 TTree* tree = (itype==0) ? treeS : treeB;
1298 for (Int_t i=0; i<N; i++) {
1300 if (i%1000 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
1301 getGaussRnd( *v, *m, R );
1302 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar] = (*v)[ivar] + x[ivar];
1305 if (itype == 0) weight = 1.0;
1320 cout <<
"created data file: " << dataFile->GetName() << endl;
1327 void create_fullcirc(Int_t nmax = 20000, Bool_t distort=
false)
1329 TFile* dataFile = TFile::Open(
"circledata.root",
"RECREATE" );
1331 int nsig = 0, nbgd=0;
1335 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1336 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1337 for (Int_t ivar=0; ivar<nvar; ivar++) {
1338 treeS->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar)).Data() );
1339 treeB->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar)).Data() );
1341 treeS->Branch(
"weight", &weight,
"weight/F");
1342 treeB->Branch(
"weight", &weight,
"weight/F");
1346 for (Int_t ivar=0; ivar<nvar; ivar++) { xvar[ivar]=2.*R.Rndm()-1.;}
1347 Float_t xout = xvar[0]*xvar[0]+xvar[1]*xvar[1];
1348 if (nsig<10) cout <<
"xout = " << xout<<endl;
1349 if (xout < 0.3 || (xout >0.3 && xout<0.5 && R.Rndm() > xout)) {
1350 if (distort && xvar[0] < 0 && R.Rndm()>0.1)
continue;
1355 if (distort && xvar[0] > 0 && R.Rndm()>0.1)
continue;
1359 }
while ( nsig < nmax || nbgd < nmax);
1367 void create_circ(Int_t N = 6000, Bool_t distort =
false)
1370 const Int_t nvar = 2;
1374 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
1377 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1378 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1379 for (Int_t ivar=0; ivar<nvar; ivar++) {
1380 treeS->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1381 treeB->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1393 Float_t phimin = -70, phimax = 130;
1398 Float_t fnmin = -(rS+4.0*rsig);
1399 Float_t fnmax = +(rS+4.0*rsig);
1400 Float_t dfn = fnmax-fnmin;
1402 for (Int_t itype=0; itype<2; itype++) {
1405 TTree* tree = (itype==0) ? treeS : treeB;
1406 for (Int_t i=0; i<N; i++) {
1407 Double_t r1=R.Rndm(),r2=R.Rndm(), r3;
1408 if (itype==0) r3= r1>r2? r1 :r2;
1411 if (distort) phi = r3*(phimax - phimin) + phimin;
1412 else phi = R.Rndm()*(phimax - phimin) + phimin;
1413 phi += R.Gaus()*phisig;
1415 Float_t r = (itype==0) ? rS : rB;
1418 xvar[0] = r*cos(TMath::DegToRad()*phi);
1419 xvar[1] = r*sin(TMath::DegToRad()*phi);
1424 for (Int_t i=0; i<Nn; i++) {
1426 xvar[0] = dfn*R.Rndm()+fnmin;
1427 xvar[1] = dfn*R.Rndm()+fnmin;
1441 cout <<
"created data file: " << dataFile->GetName() << endl;
1447 void create_schachbrett(Int_t nEvents = 20000) {
1449 const Int_t nvar = 2;
1453 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
1456 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1457 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1458 for (Int_t ivar=0; ivar<nvar; ivar++) {
1459 treeS->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1460 treeB->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1463 Int_t nSeed = 12345;
1464 TRandom *m_rand =
new TRandom(nSeed);
1468 Int_t xtype=1, ytype=1;
1472 while (iev < nEvents){
1474 for (Int_t i=-m_nDim; i <= m_nDim; i++){
1476 for (Int_t j=-m_nDim; j <= m_nDim; j++){
1479 xvar[0]=m_rand->Gaus(meanY,sigma);
1480 xvar[1]=m_rand->Gaus(meanX,sigma);
1481 Int_t type = xtype*ytype;
1482 TTree* tree = (type==1) ? treeS : treeB;
1500 cout <<
"created data file: " << dataFile->GetName() << endl;
1507 void create_schachbrett_5D(Int_t nEvents = 200000) {
1508 const Int_t nvar = 5;
1512 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
1515 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1516 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1517 for (Int_t ivar=0; ivar<nvar; ivar++) {
1518 treeS->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1519 treeB->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1522 Int_t nSeed = 12345;
1523 TRandom *m_rand =
new TRandom(nSeed);
1531 while (iev < nEvents){
1533 for (idx[0]=-m_nDim; idx[0] <= m_nDim; idx[0]++){
1535 for (idx[1]=-m_nDim; idx[1] <= m_nDim; idx[1]++){
1537 for (idx[2]=-m_nDim; idx[2] <= m_nDim; idx[2]++){
1539 for (idx[3]=-m_nDim; idx[3] <= m_nDim; idx[3]++){
1541 for (idx[4]=-m_nDim; idx[4] <= m_nDim; idx[4]++){
1542 Int_t type = itype[0];
1543 for (Int_t i=0;i<nvar;i++){
1544 xvar[i]=m_rand->Gaus(Double_t(idx[i]),sigma);
1545 if (i>0) type *= itype[i];
1547 TTree* tree = (type==1) ? treeS : treeB;
1570 cout <<
"created data file: " << dataFile->GetName() << endl;
1577 void create_schachbrett_4D(Int_t nEvents = 200000) {
1579 const Int_t nvar = 4;
1583 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
1586 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1587 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1588 for (Int_t ivar=0; ivar<nvar; ivar++) {
1589 treeS->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1590 treeB->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1593 Int_t nSeed = 12345;
1594 TRandom *m_rand =
new TRandom(nSeed);
1602 while (iev < nEvents){
1604 for (idx[0]=-m_nDim; idx[0] <= m_nDim; idx[0]++){
1606 for (idx[1]=-m_nDim; idx[1] <= m_nDim; idx[1]++){
1608 for (idx[2]=-m_nDim; idx[2] <= m_nDim; idx[2]++){
1610 for (idx[3]=-m_nDim; idx[3] <= m_nDim; idx[3]++){
1611 Int_t type = itype[0];
1612 for (Int_t i=0;i<nvar;i++){
1613 xvar[i]=m_rand->Gaus(Double_t(idx[i]),sigma);
1614 if (i>0) type *= itype[i];
1616 TTree* tree = (type==1) ? treeS : treeB;
1637 cout <<
"created data file: " << dataFile->GetName() << endl;
1644 void create_schachbrett_3D(Int_t nEvents = 20000) {
1646 const Int_t nvar = 3;
1650 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
1653 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1654 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1655 for (Int_t ivar=0; ivar<nvar; ivar++) {
1656 treeS->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1657 treeB->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1660 Int_t nSeed = 12345;
1661 TRandom *m_rand =
new TRandom(nSeed);
1669 while (iev < nEvents){
1671 for (idx[0]=-m_nDim; idx[0] <= m_nDim; idx[0]++){
1673 for (idx[1]=-m_nDim; idx[1] <= m_nDim; idx[1]++){
1675 for (idx[2]=-m_nDim; idx[2] <= m_nDim; idx[2]++){
1676 Int_t type = itype[0];
1677 for (Int_t i=0;i<nvar;i++){
1678 xvar[i]=m_rand->Gaus(Double_t(idx[i]),sigma);
1679 if (i>0) type *= itype[i];
1681 TTree* tree = (type==1) ? treeS : treeB;
1700 cout <<
"created data file: " << dataFile->GetName() << endl;
1707 void create_schachbrett_2D(Int_t nEvents = 100000, Int_t nbumps=2) {
1709 const Int_t nvar = 2;
1713 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
1716 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1717 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1718 for (Int_t ivar=0; ivar<nvar; ivar++) {
1719 treeS->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1720 treeB->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1724 TRandom *m_rand =
new TRandom(nSeed);
1725 Double_t sigma=0.35;
1728 Int_t m_nDim = nbumps;
1732 while (iev < nEvents){
1734 for (idx[0]=-m_nDim; idx[0] <= m_nDim; idx[0]++){
1736 for (idx[1]=-m_nDim; idx[1] <= m_nDim; idx[1]++){
1737 Int_t type = itype[0];
1738 for (Int_t i=0;i<nvar;i++){
1739 xvar[i]=m_rand->Gaus(Double_t(idx[i]),sigma);
1740 if (i>0) type *= itype[i];
1742 TTree* tree = (type==1) ? treeS : treeB;
1759 cout <<
"created data file: " << dataFile->GetName() << endl;
1767 void create_3Bumps(Int_t nEvents = 5000) {
1773 const Int_t nvar = 2;
1777 TString filename =
"data_3Bumps.root";
1778 TFile* dataFile = TFile::Open( filename,
"RECREATE" );
1781 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1782 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1783 for (Int_t ivar=0; ivar<nvar; ivar++) {
1784 treeS->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1785 treeB->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar )).Data() );
1788 Int_t nSeed = 12345;
1789 TRandom *m_rand =
new TRandom(nSeed);
1793 Double_t Centers[nvar][6] = {{-1,0,0,0,1,1},{0,0,0,0,0,0}};
1796 while (iev < nEvents){
1797 for (
int idx=0; idx<6; idx++){
1798 if (idx==1 || idx==2 || idx==3) type = 0;
1800 for (Int_t ivar=0;ivar<nvar;ivar++){
1801 xvar[ivar]=m_rand->Gaus(Centers[ivar][idx],sigma);
1803 TTree* tree = (type==1) ? treeS : treeB;
1817 cout <<
"created data file: " << dataFile->GetName() << endl;
1823 void createOnionData(Int_t nmax = 50000){
1825 TFile* dataFile = TFile::Open(
"oniondata.root",
"RECREATE" );
1827 int nsig = 0, nbgd=0;
1830 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1831 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1832 for (Int_t ivar=0; ivar<nvar; ivar++) {
1833 treeS->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
1834 treeB->Branch( TString(Form(
"var%i", ivar+1 )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar+1 )).Data() );
1839 for (Int_t ivar=0; ivar<nvar; ivar++) { xvar[ivar]=R.Rndm();}
1840 Float_t xout = sin(2.*acos(-1.)*(xvar[0]*xvar[1]*xvar[2]*xvar[3]+xvar[0]*xvar[1]));
1841 if (nsig<100) cout <<
"xout = " << xout<<endl;
1842 Int_t i = (Int_t) ((1.+xout)*4.99);
1843 if (i%2 == 0 && nsig < nmax) {
1847 if (i%2 != 0 && nbgd < nmax){
1851 }
while ( nsig < nmax || nbgd < nmax);
1857 void create_multiclassdata(Int_t nmax = 20000)
1859 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
1867 Float_t xmean[3][4] = {
1868 { 0. , 0.3, 0.5, 0.9 },
1869 { -0.2 , -0.3, 0.5, 0.4 },
1870 { 0.2 , 0.1, -0.1, 0.7 }} ;
1874 TTree* treeR =
new TTree(
"TreeR",
"TreeR", 1 );
1875 for (Int_t ivar=0; ivar<nvar; ivar++) {
1876 treeR->Branch( TString(Form(
"var%i", ivar )).Data(), &xvar[ivar], TString(Form(
"var%i/F", ivar)).Data() );
1878 for (Int_t icls=0; icls<ncls; icls++) {
1879 treeR->Branch(TString(Form(
"cls%i", icls )).Data(), &xcls[icls], TString(Form(
"cls%i/F", icls)).Data() );
1882 treeR->Branch(
"cls", &thecls,
"cls/F");
1883 treeR->Branch(
"weight", &weight,
"weight/F");
1887 for (Int_t icls=0; icls<ncls; icls++) xcls[icls]=0.;
1888 cls = R.Integer(ncls);
1891 for (Int_t ivar=0; ivar<nvar; ivar++) {
1892 xvar[ivar]=R.Gaus(xmean[cls][ivar],1.);
1895 if (ndat<30) cout <<
"cls=" << cls <<
" xvar = " << xvar[0]<<
" " <<xvar[1]<<
" " << xvar[2]<<
" " <<xvar[3]<<endl;
1899 }
while ( ndat < nmax );
1912 void create_array_with_different_lengths(Int_t N = 100)
1914 const Int_t nvar = 4;
1915 Int_t nvarCurrent = 4;
1919 TFile* dataFile = TFile::Open(
"data.root",
"RECREATE" );
1922 TTree* treeS =
new TTree(
"TreeS",
"TreeS", 1 );
1923 TTree* treeB =
new TTree(
"TreeB",
"TreeB", 1 );
1924 treeS->Branch(
"arrSize", &nvarCurrent,
"arrSize/I" );
1925 treeS->Branch(
"arr", xvar,
"arr[arrSize]/F" );
1926 treeB->Branch(
"arrSize", &nvarCurrent,
"arrSize/I" );
1927 treeB->Branch(
"arr", xvar,
"arr[arrSize]/F" );
1930 Float_t xS[nvar] = { 0.2, 0.3, 0.5, 0.9 };
1931 Float_t xB[nvar] = { -0.2, -0.3, -0.5, -0.6 };
1932 Float_t dx[nvar] = { 1.0, 1.0, 1.0, 1.0 };
1933 TArrayD* v =
new TArrayD( nvar );
1943 TMatrixD* covMatS =
new TMatrixD( nvar, nvar );
1944 TMatrixD* covMatB =
new TMatrixD( nvar, nvar );
1945 for (Int_t ivar=0; ivar<nvar; ivar++) {
1946 (*covMatS)(ivar,ivar) = dx[ivar]*dx[ivar];
1947 (*covMatB)(ivar,ivar) = dx[ivar]*dx[ivar];
1948 for (Int_t jvar=ivar+1; jvar<nvar; jvar++) {
1949 (*covMatS)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
1950 (*covMatS)(jvar,ivar) = (*covMatS)(ivar,jvar);
1952 (*covMatB)(ivar,jvar) = rho[(ivar+1)*(jvar+1)]*dx[ivar]*dx[jvar];
1953 (*covMatB)(jvar,ivar) = (*covMatB)(ivar,jvar);
1956 cout <<
"signal covariance matrix: " << endl;
1958 cout <<
"background covariance matrix: " << endl;
1962 TMatrixD* sqrtMatS = produceSqrtMat( *covMatS );
1963 TMatrixD* sqrtMatB = produceSqrtMat( *covMatB );
1966 for (Int_t itype=0; itype<2; itype++) {
1970 if (itype == 0) { x = xS; m = sqrtMatS; cout <<
"- produce signal" << endl; }
1971 else { x = xB; m = sqrtMatB; cout <<
"- produce background" << endl; }
1974 TTree* tree = (itype==0) ? treeS : treeB;
1975 for (Int_t i=0; i<N; i++) {
1977 if (i%1000 == 0) cout <<
"... event: " << i <<
" (" << N <<
")" << endl;
1978 getGaussRnd( *v, *m, R );
1980 for (Int_t ivar=0; ivar<nvar; ivar++) xvar[ivar] = (*v)[ivar] + x[ivar];
1983 nvarCurrent = (i%4)+1;
1997 cout <<
"created data file: " << dataFile->GetName() << endl;
2003 void create_MultipleBackground(Int_t N = 50000)
2008 TFile* dataFile = TFile::Open(
"tmva_example_multiple_background.root",
"RECREATE" );
2011 Float_t xS[nvar] = { 0.2, 0.3, 0.5, 0.9 };
2012 Float_t xB0[nvar] = { -0.2, -0.3, -0.5, -0.6 };
2013 Float_t xB1[nvar] = { -0.2, 0.3, 0.5, -0.6 };
2014 Float_t dx0[nvar] = { 1.0, 1.0, 1.0, 1.0 };
2015 Float_t dx1[nvar] = { -1.0, -1.0, -1.0, -1.0 };
2018 TTree* treeS = makeTree_lin_Nvar(
"TreeS",
"Signal tree", xS, dx0, nvar, N );
2019 TTree* treeB0 = makeTree_lin_Nvar(
"TreeB0",
"Background 0", xB0, dx0, nvar, N );
2020 TTree* treeB1 = makeTree_lin_Nvar(
"TreeB1",
"Background 1", xB1, dx1, nvar, N );
2021 TTree* treeB2 = makeTree_circ(
"TreeB2",
"Background 2", nvar, N, 1.5,
true);
2034 cout <<
"created data file: " << dataFile->GetName() << endl;