00001 #include "NueMatrixHelper.h"
00002 #include "TCut.h"
00003 #include "TGraph.h"
00004 #include "TRandom.h"
00005 #include <vector>
00006 #include <fstream>
00007 #include <iostream>
00008 #include "StandardNtuple/NtpStRecord.h"
00009 #include "MCNtuple/NtpMCTruth.h"
00010 #include "MCNtuple/NtpMCStdHep.h"
00011 #include "MCReweight/NuParent.h"
00012 #include "MCReweight/Zfluk.h"
00013 #include "MCReweight/Zbeam.h"
00014 #include "Registry/Registry.h"
00015 #include "MCReweight/MCEventInfo.h"
00016 #include "MCReweight/MCReweight.h"
00017 #include "MCReweight/NeugenWeightCalculator.h"
00018
00019
00020
00021 using namespace std;
00022
00023 NueMatrixHelper::NueMatrixHelper(Int_t nbins,Double_t lowx,Double_t uppx) :
00024 NueExtrapHelper(nbins,lowx,uppx)
00025 {
00026 }
00027
00028 NueMatrixHelper::NueMatrixHelper(Int_t nbins,Double_t *bins) :
00029 NueExtrapHelper(nbins,bins)
00030 {
00031 }
00032
00033 void NueMatrixHelper::AddNueSystematic(NueSystematic *nueSys)
00034 {
00035 fMatrixHists[nueSys];
00036 Int_t max_bg_index = 0;
00037 while(strcmp(Background::
00038 AsString(Background::EBackground(max_bg_index)),
00039 "?Unknown?")!=0) {
00040 gDirectory->cd("/");
00041 string mh_name = string(Background::
00042 AsString(Background::EBackground(max_bg_index)));
00043 mh_name += "_" + string(nueSys->GetName());
00044 MatrixHists *mh = new MatrixHists(mh_name.c_str());
00045 mh->fDirectory->cd();
00046
00047
00048 mh->fRecoVsTrueEnergy_ND =
00049 new TH2D("RecoVsTrueEnergy_ND",
00050 "Reco Vs True Energy (NearDet)",
00051 fNXBins,fXBins,fNXBins,fXBins);
00052 mh->fRecoVsTrueEnergy_ND->Sumw2();
00053
00054 mh->fRecoVsTrueEnergy_FD =
00055 new TH2D("RecoVsTrueEnergy_FD",
00056 "Reco Vs True Energy (FarDet)",
00057 fNXBins,fXBins,fNXBins,fXBins);
00058 mh->fRecoVsTrueEnergy_FD->Sumw2();
00059
00060 mh->fEfficiency_ND =
00061 new TH1D("Efficiency_ND",
00062 "NuMu CC Selection Efficiency with True Energy (NearDet)",
00063 fNXBins,fXBins);
00064 mh->fEfficiency_ND->Sumw2();
00065
00066 mh->fEfficiency_FD =
00067 new TH1D("Efficiency_FD",
00068 "NuMu CC Selection Efficiency with True Energy (FarDet)",
00069 fNXBins,fXBins);
00070 mh->fEfficiency_FD->Sumw2();
00071
00072 mh->fPurity_ND =
00073 new TH1D("Purity_ND",
00074 "NuMu CC Selection Purity with True Energy (NearDet)",
00075 fNXBins,fXBins);
00076 mh->fPurity_ND->Sumw2();
00077
00078 mh->fPurity_FD =
00079 new TH1D("Purity_FD",
00080 "NuMu CC Selection Purity with True Energy (FarDet)",
00081 fNXBins,fXBins);
00082 mh->fPurity_FD->Sumw2();
00083
00084 mh->fFDVsNDMatrix =
00085 new TH2D("FDVsNDMatrix",
00086 "Number of FD Vs ND Events with True Energy",
00087 fNXBins,fXBins,fNXBins,fXBins);
00088 mh->fFDVsNDMatrix->Sumw2();
00089
00090 mh->fFDVsNDMatrixRW =
00091 new TH2D("FDVsNDMatrixRW",
00092 "Number of FD Vs ND Events with True Energy (with Near Reweight)",
00093 fNXBins,fXBins,fNXBins,fXBins);
00094 mh->fFDVsNDMatrixRW->Sumw2();
00095
00096 mh->fFDVsNDMatrixXSec =
00097 new TH2D("FDVsNDMatrixXSec",
00098 "Number of FD Vs ND Events with True Energy (with XSec)",
00099 fNXBins,fXBins,fNXBins,fXBins);
00100 mh->fFDVsNDMatrixXSec->Sumw2();
00101
00102 mh->fFDVsNDMatrixXSecRW =
00103 new TH2D("FDVsNDMatrixXSecRW",
00104 "Number of FD Vs ND Events with True Energy (with XSec + Near Reweight)",
00105 fNXBins,fXBins,fNXBins,fXBins);
00106 mh->fFDVsNDMatrixXSecRW->Sumw2();
00107
00108 mh->fXSec_CC =
00109 new TH1D("XSec_CC","NuMu CC XSection with True Energy",
00110 fNXBins,fXBins);
00111 mh->fXSec_CC->Sumw2();
00112
00113 mh->fFracErrOnPred =
00114 new TH1D("FracErrOnPred",
00115 "Fractional Error on Energy Spectrum with Reco Energy",
00116 fNXBins,fXBins);
00117 mh->fFracErrOnPred->Sumw2();
00118
00119
00120 mh->fRecoEnergyAllEvents_ND =
00121 new TH1D("RecoEnergyAllEvents_ND",
00122 "Selected Events with Reco Energy (NearDet)",
00123 fNXBins,fXBins);
00124 mh->fRecoEnergyAllEvents_ND->Sumw2();
00125
00126 mh->fRecoEnergyCCOnlyEvents_ND =
00127 new TH1D("RecoEnergyCCOnlyEvents_ND",
00128 "NuMu CC Selected Events with Reco Energy (NearDet)",
00129 fNXBins,fXBins);
00130 mh->fRecoEnergyCCOnlyEvents_ND->Sumw2();
00131
00132 mh->fTrueEnergyCCOnlyEvents_ND =
00133 new TH1D("TrueEnergyCCOnlyEvents_ND",
00134 "NuMu CC Selected Events with True Energy (NearDet)",
00135 fNXBins,fXBins);
00136 mh->fTrueEnergyCCOnlyEvents_ND->Sumw2();
00137
00138 mh->fTrueEnergyTrueCCFidEvents_ND =
00139 new TH1D("TrueEnergyTrueCCFidEvents_ND",
00140 "True Fid NuMu CC Events with True Energy (NearDet)",
00141 fNXBins,fXBins);
00142 mh->fTrueEnergyTrueCCFidEvents_ND->Sumw2();
00143
00144 mh->fTrueEnergyNuFlux_ND =
00145 new TH1D("TrueEnergyNuFlux_ND",
00146 "Neutrino Flux with True Energy (NearDet)",
00147 fNXBins,fXBins);
00148 mh->fTrueEnergyNuFlux_ND->Sumw2();
00149
00150 mh->fTrueEnergyNuFluxRW_ND =
00151 new TH1D("TrueEnergyNuFluxRW_ND",
00152 "Neutrino Flux with True Energy (NearDet with Reweighting)",
00153 fNXBins,fXBins);
00154 mh->fTrueEnergyNuFluxRW_ND->Sumw2();
00155
00156 mh->fTrueEnergyNuFlux_FD =
00157 new TH1D("TrueEnergyNuFlux_FD",
00158 "Neutrino Flux with True Energy (FarDet)",
00159 fNXBins,fXBins);
00160 mh->fTrueEnergyNuFlux_FD->Sumw2();
00161
00162 mh->fTrueEnergyNuFluxRW_FD =
00163 new TH1D("TrueEnergyNuFluxRW_FD",
00164 "Neutrino Flux with True Energy (FarDet with Reweighting)",
00165 fNXBins,fXBins);
00166 mh->fTrueEnergyNuFluxRW_FD->Sumw2();
00167
00168 mh->fTrueEnergyCCFlux_ND =
00169 new TH1D("TrueEnergyCCFlux_ND",
00170 "NuMu CC Flux with True Energy (NearDet)",
00171 fNXBins,fXBins);
00172 mh->fTrueEnergyCCFlux_ND->Sumw2();
00173
00174 mh->fTrueEnergyCCFluxRW_ND =
00175 new TH1D("TrueEnergyCCFluxRW_ND",
00176 "NuMu CC Flux with True Energy with (NearDet with Reweighting)",
00177 fNXBins,fXBins);
00178 mh->fTrueEnergyCCFluxRW_ND->Sumw2();
00179
00180 mh->fTrueEnergyCCFlux_FD =
00181 new TH1D("TrueEnergyCCFlux_FD",
00182 "NuMu CC Flux with True Energy (FarDet)",
00183 fNXBins,fXBins);
00184 mh->fTrueEnergyCCFlux_FD->Sumw2();
00185
00186 mh->fTrueEnergyCCFluxRW_FD =
00187 new TH1D("TrueEnergyCCFluxRW_FD",
00188 "NuMu CC Flux with True Energy (FarDet with Reweighing)",
00189 fNXBins,fXBins);
00190 mh->fTrueEnergyCCFluxRW_FD->Sumw2();
00191
00192 mh->fTrueEnergyTrueCCFidEvents_FD =
00193 new TH1D("TrueEnergyTrueCCFidEvents_FD",
00194 "True Fid NuMu CC Events with True Energy (FarDet)",
00195 fNXBins,fXBins);
00196 mh->fTrueEnergyTrueCCFidEvents_FD->Sumw2();
00197
00198 mh->fTrueEnergyCCOnlyEvents_FD =
00199 new TH1D("TrueEnergyCCOnlyEvents_FD",
00200 "NuMu CC Selected Events with True Energy (FarDet)",
00201 fNXBins,fXBins);
00202 mh->fTrueEnergyCCOnlyEvents_FD->Sumw2();
00203
00204 mh->fRecoEnergyCCOnlyEvents_FD =
00205 new TH1D("RecoEnergyCCOnlyEvents_FD",
00206 "NuMu CC Selected Events with Reco Energy (FarDet)",
00207 fNXBins,fXBins);
00208 mh->fRecoEnergyCCOnlyEvents_FD->Sumw2();
00209
00210 mh->fRecoEnergyAllEvents_FD =
00211 new TH1D("RecoEnergyAllEvents_FD",
00212 "Selected Events with Reco Energy (FarDet)",
00213 fNXBins,fXBins);
00214 mh->fRecoEnergyAllEvents_FD->Sumw2();
00215 (fMatrixHists[nueSys])[Background::EBackground(max_bg_index)] = mh;
00216 max_bg_index++;
00217 }
00218 gDirectory->cd("/");
00219 }
00220
00221 NueMatrixHelper::~NueMatrixHelper()
00222 {
00223 }
00224
00225 void NueMatrixHelper::MakeANANUEPlots(Selection::Selection_t sel)
00226 {
00227 if(!fFarChain || !fNearChain) return;
00228 fCurSel = sel;
00229
00230 std::map<NueSystematic*,
00231 std::map<Background::Background_t,MatrixHists*> >::iterator mapBeg =
00232 fMatrixHists.begin();
00233 std::map<NueSystematic*,
00234 std::map<Background::Background_t,MatrixHists*> >::iterator mapEnd =
00235 fMatrixHists.end();
00236 if(mapBeg==mapEnd) return;
00237
00238
00239 Int_t ndEntries = fNearChain->GetEntries();
00240 for(int i=0;i<ndEntries;i++){
00241 if(i%100000==0) cout << "Processing event " << i << " / " << ndEntries << endl;
00242 mapBeg = fMatrixHists.begin();
00243 while(mapBeg!=mapEnd) {
00244 fNearChain->GetEvent(i);
00245 Double_t totWeight = 1;
00246 if((mapBeg->first)) totWeight = (mapBeg->first)->UpdateRecord(fRecord,sel);
00247 if(this->PassCuts(sel)) {
00248 Double_t recoEnergy = this->GetNueEnergy(sel);
00249
00250 std::map<Background::Background_t,MatrixHists*>::iterator mhBeg = mapBeg->second.begin();
00251 std::map<Background::Background_t,MatrixHists*>::iterator mhEnd = mapBeg->second.end();
00252 while(mhBeg!=mhEnd){
00253 mhBeg->second->fRecoEnergyAllEvents_ND->Fill(recoEnergy,totWeight);
00254 mhBeg++;
00255 }
00256 Background::Background_t bg =
00257 Background::TranslateFromMC(fRecord->mctrue.interactionType,
00258 fRecord->mctrue.nuFlavor,
00259 fRecord->mctrue.nonOscNuFlavor,
00260 fRecord->fluxinfo.tptype);
00261 (mapBeg->second)[bg]->fRecoEnergyCCOnlyEvents_ND->Fill(recoEnergy,totWeight);
00262 (mapBeg->second)[bg]->fTrueEnergyCCOnlyEvents_ND->Fill(fRecord->mctrue.nuEnergy,totWeight);
00263 (mapBeg->second)[bg]->fPurity_ND->Fill(recoEnergy,totWeight);
00264 (mapBeg->second)[bg]->fEfficiency_ND->Fill(fRecord->mctrue.nuEnergy,totWeight);
00265 (mapBeg->second)[bg]->fRecoVsTrueEnergy_ND->Fill(fRecord->mctrue.nuEnergy,
00266 recoEnergy,totWeight);
00267 Background::Background_t bg2 =
00268 Background::TranslateFromMC(fRecord->mctrue.interactionType,
00269 fRecord->mctrue.nuFlavor,
00270 fRecord->mctrue.nonOscNuFlavor);
00271 if(bg2!=bg) {
00272 (mapBeg->second)[bg2]->fRecoEnergyCCOnlyEvents_ND->Fill(recoEnergy,totWeight);
00273 (mapBeg->second)[bg2]->fTrueEnergyCCOnlyEvents_ND->Fill(fRecord->mctrue.nuEnergy,totWeight);
00274 (mapBeg->second)[bg2]->fPurity_ND->Fill(recoEnergy,totWeight);
00275 (mapBeg->second)[bg2]->fEfficiency_ND->Fill(fRecord->mctrue.nuEnergy,totWeight);
00276 (mapBeg->second)[bg2]->fRecoVsTrueEnergy_ND->Fill(fRecord->mctrue.nuEnergy,
00277 recoEnergy,totWeight);
00278 }
00279 }
00280 }
00281 }
00282
00283
00284 Int_t fdEntries = fFarChain->GetEntries();
00285 for(int i=0;i<fdEntries;i++){
00286 if(i%100000==0) cout << "Processing event " << i << " / " << ndEntries << endl;
00287 mapBeg = fMatrixHists.begin();
00288 while(mapBeg!=mapEnd) {
00289 fFarChain->GetEvent(i);
00290 Double_t totWeight = 1;
00291 if((mapBeg->first)) totWeight = (mapBeg->first)->UpdateRecord(fRecord,sel);
00292 if(this->PassCuts(sel)) {
00293 Double_t recoEnergy = this->GetNueEnergy(sel);
00294
00295 std::map<Background::Background_t,MatrixHists*>::iterator mhBeg = mapBeg->second.begin();
00296 std::map<Background::Background_t,MatrixHists*>::iterator mhEnd = mapBeg->second.end();
00297 while(mhBeg!=mhEnd){
00298 mhBeg->second->fRecoEnergyAllEvents_FD->Fill(recoEnergy,totWeight);
00299 mhBeg++;
00300 }
00301 Background::Background_t bg =
00302 Background::TranslateFromMC(fRecord->mctrue.interactionType,
00303 fRecord->mctrue.nuFlavor,
00304 fRecord->mctrue.nonOscNuFlavor,
00305 fRecord->fluxinfo.tptype);
00306 (mapBeg->second)[bg]->fRecoEnergyCCOnlyEvents_FD->Fill(recoEnergy,totWeight);
00307 (mapBeg->second)[bg]->fTrueEnergyCCOnlyEvents_FD->Fill(fRecord->mctrue.nuEnergy,totWeight);
00308 (mapBeg->second)[bg]->fPurity_FD->Fill(recoEnergy,totWeight);
00309 (mapBeg->second)[bg]->fEfficiency_FD->Fill(fRecord->mctrue.nuEnergy,totWeight);
00310 (mapBeg->second)[bg]->fRecoVsTrueEnergy_FD->Fill(fRecord->mctrue.nuEnergy,
00311 recoEnergy,totWeight);
00312 Background::Background_t bg2 =
00313 Background::TranslateFromMC(fRecord->mctrue.interactionType,
00314 fRecord->mctrue.nuFlavor,
00315 fRecord->mctrue.nonOscNuFlavor);
00316 if(bg2!=bg) {
00317 (mapBeg->second)[bg2]->fRecoEnergyCCOnlyEvents_FD->Fill(recoEnergy,totWeight);
00318 (mapBeg->second)[bg2]->fTrueEnergyCCOnlyEvents_FD->Fill(fRecord->mctrue.nuEnergy,totWeight);
00319 (mapBeg->second)[bg2]->fPurity_FD->Fill(recoEnergy,totWeight);
00320 (mapBeg->second)[bg2]->fEfficiency_FD->Fill(fRecord->mctrue.nuEnergy,totWeight);
00321 (mapBeg->second)[bg2]->fRecoVsTrueEnergy_FD->Fill(fRecord->mctrue.nuEnergy,
00322 recoEnergy,totWeight);
00323 }
00324 }
00325 }
00326 }
00327
00328 mapBeg = fMatrixHists.begin();
00329 while(mapBeg!=mapEnd) {
00330 std::map<Background::Background_t,MatrixHists*>::iterator mhBeg = mapBeg->second.begin();
00331 std::map<Background::Background_t,MatrixHists*>::iterator mhEnd = mapBeg->second.end();
00332 while(mhBeg!=mhEnd) {
00333 for(int i=1;i<=fNXBins;i++){
00334 for(int j=1;j<=fNXBins+1;j++){
00335 if(mhBeg->second->fRecoEnergyCCOnlyEvents_ND->GetBinContent(j)>0 &&
00336 mhBeg->second->fRecoVsTrueEnergy_ND->GetBinContent(i,j)>0) {
00337 Float_t error = ( mhBeg->second->fRecoVsTrueEnergy_ND->GetBinError(i,j) /
00338 mhBeg->second->fRecoVsTrueEnergy_ND->GetBinContent(i,j) );
00339 mhBeg->second->fRecoVsTrueEnergy_ND->
00340 SetBinContent(i,j,mhBeg->second->fRecoVsTrueEnergy_ND->GetBinContent(i,j)/
00341 mhBeg->second->fRecoEnergyCCOnlyEvents_ND->GetBinContent(j));
00342 mhBeg->second->fRecoVsTrueEnergy_ND->
00343 SetBinError(i,j,error*mhBeg->second->fRecoVsTrueEnergy_ND->GetBinContent(i,j));
00344 }
00345 else {
00346 mhBeg->second->fRecoVsTrueEnergy_ND->SetBinContent(i,j,0);
00347 mhBeg->second->fRecoVsTrueEnergy_ND->SetBinError(i,j,0);
00348 }
00349 if(mhBeg->second->fRecoEnergyCCOnlyEvents_FD->GetBinContent(j)>0 &&
00350 mhBeg->second->fRecoVsTrueEnergy_FD->GetBinContent(i,j)>0) {
00351 Float_t error = ( mhBeg->second->fRecoVsTrueEnergy_FD->GetBinError(i,j) /
00352 mhBeg->second->fRecoVsTrueEnergy_FD->GetBinContent(i,j) );
00353 mhBeg->second->fRecoVsTrueEnergy_FD->
00354 SetBinContent(i,j,mhBeg->second->fRecoVsTrueEnergy_FD->GetBinContent(i,j)/
00355 mhBeg->second->fRecoEnergyCCOnlyEvents_FD->GetBinContent(j));
00356 mhBeg->second->fRecoVsTrueEnergy_FD->
00357 SetBinError(i,j,error*mhBeg->second->fRecoVsTrueEnergy_FD->GetBinContent(i,j));
00358 }
00359 else {
00360 mhBeg->second->fRecoVsTrueEnergy_FD->SetBinContent(i,j,0);
00361 mhBeg->second->fRecoVsTrueEnergy_FD->SetBinError(i,j,0);
00362 }
00363 }
00364 }
00365 }
00366 }
00367 }
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467
00468
00469
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511
00512
00513
00514
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546
00547
00548
00549
00550
00551
00552
00553
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735
00736
00737
00738
00739
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786
00787
00788
00789
00790
00791
00792
00793
00794
00795
00796
00797
00798
00799
00800
00801
00802
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852
00853
00854
00855
00856
00857
00858
00859
00860
00861
00862
00863
00864
00865
00866
00867
00868
00869
00870
00871
00872
00873
00874
00875
00876
00877
00878
00879
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899
00900
00901
00902
00903
00904
00905
00906
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923 void NueMatrixHelper::WriteFile(std::string tag)
00924 {
00925 std::map<NueSystematic*,
00926 std::map<Background::Background_t,MatrixHists*> >::iterator mapBeg =
00927 fMatrixHists.begin();
00928 std::map<NueSystematic*,
00929 std::map<Background::Background_t,MatrixHists*> >::iterator mapEnd =
00930 fMatrixHists.end();
00931 if(mapBeg==mapEnd) return;
00932
00933 std::string filename = "MatrixHelper_" + tag + ".root";
00934 TFile *file = new TFile(filename.c_str(),"RECREATE");
00935 file->cd();
00936
00937 char selection[256];
00938 sprintf(selection,"%s",Selection::AsString(fCurSel));
00939 TTree *tree = new TTree("matrixtree","matrixtree");
00940 tree->Branch("Selection",selection,"Selection/C");
00941 tree->Branch("nearPOT",&fNearPOT,"nearPOT/D");
00942 tree->Branch("farPOT",&fFarPOT,"farPOT/D");
00943
00944 while(mapBeg!=mapEnd){
00945 std::map<Background::Background_t,MatrixHists*>::iterator Matbeg = (mapBeg->second).begin();
00946 std::map<Background::Background_t,MatrixHists*>::iterator Matend = (mapBeg->second).end();
00947 while(Matbeg!=Matend) {
00948 Matbeg->second->fDirectory->Write();
00949 Matbeg++;
00950 }
00951 if((mapBeg->first)) (mapBeg->first)->MakeBranches(tree);
00952 tree->Fill();
00953 mapBeg++;
00954 }
00955 tree->Write();
00956 delete file;
00957 }