#include <NuAnalysis.h>
Inheritance diagram for NuAnalysis:

Public Member Functions | |
| NuAnalysis () | |
| ~NuAnalysis () | |
| void | BasicPlots () |
| void | ChargeSignCut () |
| void | ChargeSeparation () |
| void | ChargeSeparationOneSnarl (const NtpStRecord *pntp, const NtpBDLiteRecord *pntpBD, const NtpFitSARecord *pntpSA) |
| virtual const std::vector< Int_t > | ContributingTrueEvents (const NuEvent &event) const |
| void | CrossSections () |
| void | Efficiencies () |
| void | EfficienciesOld () |
| void | EnergySpect () |
| void | EnergySpectMC () |
| void | LIRejectionTest () |
| void | MakeFullDST (const NtpStRecord *pntp, const NtpBDLiteRecord *pntpBD, const NtpFitSARecord *pntpSA) |
| void | NuMuBarAppearance () |
| void | NMBSummaryTreeAna () |
| void | N_1 () |
| void | EndJob () |
| void | DoExtractions (const NtpStRecord &ntp, const NtpSREvent &evt, const NtpFitSARecord *pntpSA, NuPIDInterface &pid, NuEvent &nu) const |
| void | ExtractPIDsAndWeights (const NtpStRecord &ntp, const NtpSREvent &evt, NuPIDInterface &pid, NuEvent &nu) const |
Private Member Functions | |
| void | CopyConfig (const NuConfig &config, NuEvent &nu) |
| void | CopySnarlInfo (const NuEvent &nuSnarl, NuEvent &nu) |
| TSpline3 * | CreateTSpline3 (std::string splName, std::string varNames, std::string fileName) |
| void | DemoInfidSRInterface (const NtpStRecord &ntp, const NtpSREvent &evt, const NuEvent &nu) |
| void | ExtractConfig (NuConfig &config) |
| Bool_t | ExtractConfig (const NtpStRecord *pntp, const NtpBDLiteRecord *pntpBD, NuConfig &config) const |
| void | DetermineBeamType (NuConfig &config) const |
| void | OldDetermineBeamType (NuConfig &config) |
| void | CopyAcrossHistos (TDirectory *dirInput, TDirectory *dirOutput) const |
| void | LoopOverTruthInfo (const NtpStRecord &ntp, NuOutputWriter &output, const NuEvent &nuSnarl, const std::vector< Int_t > vTthInd) const |
| void | SetAnaFlags (NuConfig &config) |
| void | StoreOrFinishTree (NuOutputWriter *pOutput, NuTime *pTime, Bool_t finish) const |
|
|
Definition at line 85 of file NuAnalysis.cxx. References MSG. 00086 {
00087 MSG("NuAnalysis",Msg::kDebug)
00088 <<"Running NuAnalysis Constructor..."<<endl;
00089
00090
00091 MSG("NuAnalysis",Msg::kDebug)
00092 <<"Finished NuAnalysis Constructor"<<endl;
00093 }
|
|
|
Definition at line 97 of file NuAnalysis.cxx. References MSG. 00098 {
00099 MSG("NuAnalysis",Msg::kDebug)
00100 <<"Running NuAnalysis Destructor..."<<endl;
00101
00102
00103 MSG("NuAnalysis",Msg::kDebug)
00104 <<"Finished NuAnalysis Destructor"<<endl;
00105 }
|
|
|
Definition at line 205 of file NuAnalysis.cxx. References NuBase::GetEntries(), NuBase::GetNtpStRecord(), NtpMCTruth::iaction, NuBase::InitialiseLoopVariables(), NtpMCTruth::inu, NtpMCTruth::iresonance, MAXMSG, NtpStRecord::mc, MSG, NuBase::OpenFile(), NtpMCTruth::p4neu, and NuBase::SetLoopVariables(). 00206 {
00207 MSG("NuAnalysis",Msg::kInfo)
00208 <<" ** Running BasicPlots method... **"<<endl;
00209
00210 //open the output file for the histograms
00211 fOutFile=this->OpenFile(100,"NuBasicPlots");
00212
00213 TH1F* hNuInt=new TH1F("hNuInt","hNuInt",10000,-100,1000);
00214 hNuInt->SetTitle("Number of neutrino interactions per spill");
00215 hNuInt->GetXaxis()->SetTitle("# interactions");
00216 hNuInt->GetXaxis()->CenterTitle();
00217 hNuInt->GetYaxis()->SetTitle("");
00218 hNuInt->GetYaxis()->CenterTitle();
00219 hNuInt->SetFillColor(0);
00220 hNuInt->SetLineColor(1);
00221 //hNuInt->SetBit(TH1::kCanRebin);
00222
00223 TH1F* hNuMuBarEn=new TH1F("hNuMuBarEn","hNuMuBarEn",4*352,-32,320);
00224 hNuMuBarEn->GetXaxis()->SetTitle("Energy (GeV)");
00225 hNuMuBarEn->GetXaxis()->CenterTitle();
00226 hNuMuBarEn->GetYaxis()->SetTitle("");
00227 hNuMuBarEn->GetYaxis()->CenterTitle();
00228 hNuMuBarEn->SetFillColor(0);
00229 hNuMuBarEn->SetLineColor(2);
00230 //hNuMuBarEn->SetBit(TH1::kCanRebin);
00231
00232 TH1F* hNuMuEn=new TH1F("hNuMuEn","hNuMuEn",4*352,-32,320);
00233 hNuMuEn->GetXaxis()->SetTitle("Energy (GeV)");
00234 hNuMuEn->GetXaxis()->CenterTitle();
00235 hNuMuEn->GetYaxis()->SetTitle("");
00236 hNuMuEn->GetYaxis()->CenterTitle();
00237 hNuMuEn->SetFillColor(0);
00238 hNuMuEn->SetLineColor(1);
00239 hNuMuEn->SetLineWidth(2);
00240 //hNuMuEn->SetBit(TH1::kCanRebin);
00241
00242 TH1F* hNueBarEn=new TH1F("hNueBarEn","hNueBarEn",4*352,-32,320);
00243 hNueBarEn->GetXaxis()->SetTitle("Energy (GeV)");
00244 hNueBarEn->GetXaxis()->CenterTitle();
00245 hNueBarEn->GetYaxis()->SetTitle("");
00246 hNueBarEn->GetYaxis()->CenterTitle();
00247 hNueBarEn->SetFillColor(0);
00248 hNueBarEn->SetLineColor(2);
00249 hNueBarEn->SetLineWidth(2);
00250 hNueBarEn->SetLineStyle(2);
00251 //hNueBarEn->SetBit(TH1::kCanRebin);
00252
00253 TH1F* hNueEn=new TH1F("hNueEn","hNueEn",4*352,-32,320);
00254 hNueEn->GetXaxis()->SetTitle("Energy (GeV)");
00255 hNueEn->GetXaxis()->CenterTitle();
00256 hNueEn->GetYaxis()->SetTitle("");
00257 hNueEn->GetYaxis()->CenterTitle();
00258 hNueEn->SetFillColor(0);
00259 hNueEn->SetLineColor(1);
00260 hNueEn->SetLineWidth(1);
00261 hNueEn->SetLineStyle(2);
00262 //hNueEn->SetBit(TH1::kCanRebin);
00263
00267
00268 this->InitialiseLoopVariables();
00269
00270 //for(Int_t entry=0;entry<10000;entry++){
00271 for(Int_t entry=0;entry<this->GetEntries();entry++){
00272
00273 this->SetLoopVariables(entry);
00274
00275 //get reference to NtpStRecord from base class
00276 const NtpStRecord& ntp=(*this->GetNtpStRecord());
00277
00278 TClonesArray& mcTca=*ntp.mc;
00279 Int_t numInt=mcTca.GetEntries();
00280 MAXMSG("NuAnalysis",Msg::kInfo,20)
00281 <<"Number of entries in NtpMCTruth="
00282 <<mcTca.GetEntries()<<endl;
00283 //if (mcTca.GetEntries()==0){
00284
00285 hNuInt->Fill(mcTca.GetEntries());
00286
00287 for (Int_t i=0;i<numInt;i++){
00288 const NtpMCTruth& mc=*(dynamic_cast<NtpMCTruth*>(mcTca[i]));
00289
00290 string iaction="NC";
00291 if (mc.iaction==1) iaction="CC";
00292 string iresonance="QE ";
00293 if (mc.iresonance==1002) iresonance="RES";
00294 else if (mc.iresonance==1003) iresonance="DIS";
00295 else if (mc.iresonance==1004) iresonance=
00296 "Coherent pion production";
00297 string inu="??";
00298 if (mc.inu==14) inu="NuMu ";
00299 else if (mc.inu==-14) inu="NuMuBar";
00300 else if (mc.inu==12) inu="NuE ";
00301 else if (mc.inu==-12) inu="NuEBar ";
00302
00303 MAXMSG("NuAnalysis",Msg::kInfo,100)
00304 <<"Interaction #"<<i<<" is "<<inu
00305 <<" "<<iaction
00306 <<" "<<iresonance<<endl;
00307
00308 if (mc.inu==-14) hNuMuBarEn->Fill(mc.p4neu[3]);
00309 else if (mc.inu==14) hNuMuEn->Fill(mc.p4neu[3]);
00310 else if (mc.inu==-12) hNueBarEn->Fill(mc.p4neu[3]);
00311 else if (mc.inu==12) hNueEn->Fill(mc.p4neu[3]);
00312 else {
00313 MAXMSG("NuAnalysis",Msg::kWarning,100)
00314 <<"particle not defined for filling histo="<<mc.inu<<endl;
00315 }
00316 }
00317
00318 //TClonesArray& tcaTk=(*ntpst.trk);
00319 //Int_t numTrks=tcaTk.GetEntries();
00320
00321 //MAXMSG("NuAnalysis",Msg::kInfo,10)
00322 //<<"numTrks="<<numTrks
00323 //<<", ndigit="<<fRec->evthdr.ndigit
00324 //<<", nTrack="<<fRec->evthdr.ntrack<<endl;
00325
00326 //Loop over tracks
00327 //for (Int_t itrk=0;itrk<numTrks;itrk++){
00328 //const NtpSRTrack* ptrk=
00329 //dynamic_cast<NtpSRTrack*>(tcaTk[itrk]);
00330 //const NtpSRTrack& trk=(*ptrk);
00331 //}
00332
00333
00334 }//end of for
00335
00339
00340 MSG("NuAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
00341
00342 MSG("NuAnalysis",Msg::kInfo)
00343 <<" ** Finished BasicPlots method **"<<endl;
00344 }
|
|
|
Definition at line 6274 of file NuAnalysis.cxx. References ChargeSeparationOneSnarl(), NuBase::GetEntries(), NuBase::GetNtpBDLiteRecord(), NuBase::InitialiseLoopVariables(), MSG, NuBase::SetLoopVariables(), and StoreOrFinishTree(). 06275 {
06276 MSG("NuAnalysis",Msg::kInfo)
06277 <<" ** Running ChargeSeparation method... **"<<endl;
06278
06282
06283 cout<<endl
06284 <<"************************************************"<<endl
06285 <<"*** Starting main loop over snarls ***"<<endl
06286 <<"************************************************"<<endl;
06287
06288 this->InitialiseLoopVariables();
06289
06290 for(Int_t entry=0;entry<this->GetEntries();entry++){
06291
06292 this->SetLoopVariables(entry);
06293
06294
06295 this->ChargeSeparationOneSnarl(this->GetNtpStRecord(),
06296 this->GetNtpBDLiteRecord(),0);
06297 }
06298
06299 //finish the job
06300 this->StoreOrFinishTree(NULL,NULL,1);
06301
06302 MSG("NuAnalysis",Msg::kInfo)
06303 <<" ** Finished ChargeSeparation method **"<<endl;
06304 }
|
|
||||||||||||||||
|
code to produce the NuDST ntuple this should be called once per snarl Definition at line 6508 of file NuAnalysis.cxx. References NuEvent::abID, NuConfig::anaVersion, NuCounter::badSpillCounter, NuEvent::charge, NuLibrary::cnt, NuEvent::coilIsOk, CopyConfig(), CopySnarlInfo(), NuCounter::CountTrkStdhepId(), NuLibrary::cuts, DoExtractions(), NuEvent::dpID, NuEvent::entry, NuCounter::entry, NtpStRecord::evt, NuCounter::evtCounter, NtpStRecord::evthdr, NuCounter::evtInFidVolCounter, NuCounter::evtNotIsLI, NuCounter::evtNotlitime, NuCounter::evtWithTrkCounter, NuLibrary::ext, NuExtraction::ExtractBasicInfo(), NuExtraction::ExtractCoilInfo(), ExtractConfig(), NuExtraction::ExtractGeneralInfo(), NuPlots::FillCoilCurrentHistos(), NuPlots::FillContainmentHistos(), NuPlots::FillDPIdSigmaQPFailDpIDCutPlots(), NuPlots::FillDPIdSigmaQPFailProbCutPlots(), NuPlots::FillDPIdSigmaQPFailSigQPCutPlots(), NuPlots::FillDPIdSigmaQPPassDpIDCutPlots(), NuPlots::FillDPIdSigmaQPPassPreSelCutPlots(), NuPlots::FillDPIdSigmaQPPassSigQPCutPlots(), NuPlots::FillDPIdSigmaQPPassUVVtxCutPlots(), NuPlots::FillDPIdSigmaQPPlotsN(), NuPlots::FillEnergyBinHistos(), NuPlots::FillEvtAndSpillTimingPlots(), NuPlots::FillGeneralHistos(), NuPlots::FillKinematicsHistos(), NuPlots::FillLowProbPlots(), NuHistos::FillMatrixMethodHistos(), NuPlots::FillNtupleEarliestLatestTime(), NuOutputWriter::FillNuEventTree(), NuPlots::FillRangeCurvCompHistos(), NuPlots::FillRecoEnYHistosN(), NuPlots::FillShwHistos(), NuPlots::FillSigmaQPPlots(), NuPlots::FillStpfitqpPlots(), NuTime::FillTime(), NuPlots::FillTrackResponseHistos(), NuPlots::FillTrueAbIDHistos(), NuPlots::FillTrueAbIDHistosPQNQ(), NuPlots::FillTrueDpIDHistos(), NuPlots::FillTrueDpIDHistosPQNQ(), NuPlots::FillTruePIDHistos(), NuPlots::FillTrueRoIDHistos(), NuPlots::FillTrueRoIDHistosPQNQ(), NuPlots::FillXYZHistos(), NuReco::GetBestTrack(), VldContext::GetDetector(), NuReco::GetEvtEnergy(), RecRecordImp< T >::GetHeader(), NuOutputWriter::GetNuEventToFill(), RecDataHeader::GetRun(), VldContext::GetSimFlag(), RecPhysicsHeader::GetSnarl(), RecDataHeader::GetSubRun(), NuReco::GetTrackWithIndexX(), RecHeader::GetVldContext(), NuCounter::goodBeamInfoDBCounter, NuEvent::goodBeamSntp, NuCounter::goodCoilCurrentSpillCounter, NuCounter::goodDataQualityCounter, NuCounter::goodDirectionCosineCounter, NuCounter::goodFitProbCounter, NuCounter::goodFitSigQPCounter, NuCounter::goodPIDCounter, NuCounter::goodSpillCounter, NuCounter::goodTimeToNearestSpillCounter, NuCounter::goodTrkPassCounter, NuLibrary::hist, NuLibrary::Instance(), NuCuts::IsGoodBeam(), NuCuts::IsGoodDataQuality(), NuCuts::IsGoodDirCos(), NuCuts::IsGoodFitProb(), NuCuts::IsGoodNumberOfTracks(), NuCuts::IsGoodPID(), NuCuts::IsGoodSigmaQP_QP(), NuBeam::IsGoodSpillAndFillPot(), NuCuts::IsGoodTimeToNearestSpill(), NuCuts::IsGoodTrackFitPass(), NuCuts::IsInFidVolLoose(), NuCuts::IsInFidVolTrk(), NuCuts::IsLI(), NtpSREventSummary::litime, LoopOverTruthInfo(), MAXMSG, NuEvent::nevt, NtpSREvent::ntrack, NuCounter::nuNQCounter, NuCounter::nuPQCounter, NuBase::OpenTxtFile(), plots(), NuEvent::poID, NuEvent::pot, NuEvent::potSinceLastEvt, NuEvent::potSinceLastEvtBad, NuEvent::potSinceLastEvtGood, NuPlots::PrintEventInfo(), NuEvent::prob, NuLibrary::reco, NuEvent::roID, NuEvent::roIDNuMuBar, NuConfig::sBeamType, SetAnaFlags(), NuOutputWriter::SetupFile(), StoreOrFinishTree(), NuEvent::timeSec, NuCounter::totalPot, NuCounter::totalPotBad, NuCounter::trkInFidVolCounter, NuTime::vTimeNuMuBarEvt, and NuTime::vTimeNuMuEvt. Referenced by NuModule::Ana(), and ChargeSeparation(). 06511 {
06512 MAXMSG("NuAnalysis",Msg::kError,100)
06513 <<"ChargeSeparationOneSnarl is deprecated. Use MakeFullDst instead"
06514 <<endl;
06515
06518
06519 //get an instance of the code library
06520 NuLibrary& lib=NuLibrary::Instance();
06521
06522 //increment ntuple entry (snarl) counter
06523 lib.cnt.entry++;//initialised to -1 so first entry=0
06524
06528
06529 //extract the config from the beam information
06530 //occasionally the first snarl fails the beam cuts
06531 //so therefore you can't determine the proper beam config
06532 //this messes up the counting of bad pot but it should be a tiny
06533 //effect
06534 static NuConfig config;
06535 static Bool_t configNotExtracted=true;
06536 if (configNotExtracted) {
06537 configNotExtracted=!this->ExtractConfig(pntp,pntpBD,config);
06538 if (configNotExtracted) return;//skip to next snarl
06539 }
06540
06541 static Bool_t firstTime=true;
06542 static NuOutputWriter output;
06543
06544 static ofstream* pnmbTxt=0;
06545 static ofstream* pnmTxt=0;
06546 static ofstream* pnmbTxtProb=0;
06547 static ofstream* pnmbTxtProb001=0;
06548 static ofstream* pnmbTxtProb003=0;
06549
06550 //classes to organise the code in to related functions
06551 static const NuPlots plots;
06552 static const NuBeam beam;
06553 static NuTime time;//class to record times of spills, etc
06554
06555 //interface for the pids
06556 static NuPIDInterface pid;
06557
06558 if (firstTime) {
06559 firstTime=false;//set the control variable so code not run again
06560
06561 //open the output file for the histograms
06562 string sFilePrefix="NuDST"+config.sBeamType;
06563 //fOutFile=this->OpenFile(config,sFilePrefix.c_str());
06564 output.SetupFile(config,sFilePrefix);
06565
06566 string sTxt="nmb"+config.sBeamType;
06567 pnmbTxt=this->OpenTxtFile(config,sTxt.c_str());
06568 string sTxtNM="nm"+config.sBeamType;
06569 pnmTxt=this->OpenTxtFile(config,sTxtNM.c_str());
06570 string sTxtProb="nmbProb"+config.sBeamType;
06571 pnmbTxtProb=this->OpenTxtFile(config,sTxtProb.c_str());
06572 string sTxtProb001="nmbProb001"+config.sBeamType;
06573 pnmbTxtProb001=this->OpenTxtFile(config,sTxtProb001.c_str());
06574 string sTxtProb003="nmbProb003"+config.sBeamType;
06575 pnmbTxtProb003=this->OpenTxtFile(config,sTxtProb003.c_str());
06576
06577 //define the analysis flags
06578 this->SetAnaFlags(config);
06579 config.anaVersion=NuCuts::kCC0250Std;
06580
06581 //this stores the objects' pointers for access at job end
06582 //NOTE: run this after the output file has been opened
06583 this->StoreOrFinishTree(&output,&time,false);
06584
06585 cout<<endl
06586 <<"************************************************"<<endl
06587 <<"*** Starting main loop over snarls ***"<<endl
06588 <<"************************************************"<<endl;
06589 }
06590
06591 //get references (coding preference)
06592 static ofstream& nmbTxt=*pnmbTxt;
06593 static ofstream& nmTxt=*pnmTxt;
06594 static ofstream& nmbTxtProb=*pnmbTxtProb;
06595 static ofstream& nmbTxtProb001=*pnmbTxtProb001;
06596 static ofstream& nmbTxtProb003=*pnmbTxtProb003;
06597
06598 //don't get a reference to NtpBDLiteRecord because it doesn't exist
06599 //for MC
06600 const NtpStRecord& ntp=*pntp;
06601
06605
06606 const RecCandHeader& rec=ntp.GetHeader();
06607 MAXMSG("NuAnalysis",Msg::kInfo,5)
06608 <<"Found: run="<<rec.GetRun()
06609 <<", subrun="<<rec.GetSubRun()
06610 <<", detector="<<rec.GetVldContext().GetDetector()
06611 <<", simFlag="<<rec.GetVldContext().GetSimFlag()
06612 <<", snarl="<<rec.GetSnarl()
06613 <<endl;
06614
06615 //write out the detector, simflag, etc
06616 plots.FillGeneralHistos(ntp);
06617
06618 //simple event object to hold important quantities for snarl
06619 NuEvent nuSnarl;
06620 this->CopyConfig(config,nuSnarl);
06621
06622 //get the run, snarl, etc info
06623 lib.ext.ExtractGeneralInfo(ntp,nuSnarl);
06624
06625 //get the true energy spectra of events in the fid vol
06626 std::vector<Int_t> vEmpty;
06627 this->LoopOverTruthInfo(ntp,output,nuSnarl,vEmpty);
06628
06629 //extract coil info early in order to get POT counting right
06630 //doesn't matter for the FD because POTs are externally defined
06631 lib.ext.ExtractCoilInfo(nuSnarl);
06632 plots.FillCoilCurrentHistos(nuSnarl);
06633 if (!nuSnarl.coilIsOk) return;
06634 lib.cnt.goodCoilCurrentSpillCounter++;
06635
06636 //get POT and event time info
06637 beam.IsGoodSpillAndFillPot(pntpBD,config,nuSnarl);
06638 time.FillTime(nuSnarl.timeSec,nuSnarl.pot,nuSnarl.goodBeamSntp);
06639 if (!nuSnarl.goodBeamSntp) {
06640 lib.cnt.badSpillCounter++;
06641 lib.cnt.totalPotBad+=nuSnarl.pot;
06642 return;
06643 }
06644 lib.cnt.goodSpillCounter++;
06645 lib.cnt.totalPot+=nuSnarl.pot;
06646
06647 //count the pots since the last evt was written to file
06648 static Float_t potSinceLastEvt=0;
06649 static Float_t potSinceLastEvtGood=0;
06650 static Float_t potSinceLastEvtBad=0;//this is always zero here
06651 potSinceLastEvt+=nuSnarl.pot;
06652 if (nuSnarl.goodBeamSntp &&
06653 nuSnarl.coilIsOk) potSinceLastEvtGood+=nuSnarl.pot;
06654 else potSinceLastEvtBad+=nuSnarl.pot;
06655
06656 //get the tca of evts
06657 TClonesArray& evtTca=(*ntp.evt);
06658 const Int_t numEvts=evtTca.GetEntriesFast();
06659
06661 //loop over the reconstructed events
06663 for (Int_t ievt=0;ievt<numEvts;ievt++){
06664 const NtpSREvent& evt=
06665 *dynamic_cast<NtpSREvent*>(evtTca[ievt]);
06666 lib.cnt.evtCounter++;
06667
06668 MAXMSG("NuAnalysis",Msg::kInfo,5)
06669 <<"Found event, "<<ievt+1<<"/"<<numEvts<<endl;
06670
06671 //loose pre-selection cut: just require 1 or more trks
06672 if (evt.ntrack<1) continue;
06673 lib.cnt.evtWithTrkCounter++;
06674
06675 //get rid of LI events
06676 const NtpSREventSummary& evthdr=ntp.evthdr;
06677 if (evthdr.litime!=-1) continue;
06678 lib.cnt.evtNotlitime++;
06679
06680 //simple event object to hold important quantities
06681 NuEvent& nu=output.GetNuEventToFill();
06682 nu.entry=lib.cnt.entry;//store the entry in the tree number
06683 nu.nevt=numEvts;//store the numEvts in snarl
06684 //copy info, copy the analysis (cuts and reco) version to use
06685 this->CopySnarlInfo(nuSnarl,nu);
06686 this->CopyConfig(config,nu);
06687
06688 //extract the general info and evt, trk and shw info
06689 lib.ext.ExtractBasicInfo(ntp,evt,nu);
06690
06691 //check if trk or evt vertex is in the loose fid vol
06692 if (!lib.cuts.IsInFidVolLoose(nu)) continue;
06693 lib.cnt.evtInFidVolCounter++;
06694
06695 //RECONSTRUCT the neutrino energy
06696 lib.reco.GetEvtEnergy(nu, false);
06697
06698 MAXMSG("NuAnalysis",Msg::kDebug,10)
06699 <<endl<<"After reco:"<<endl
06700 <<plots.PrintEventInfo(cout,nu)<<endl;
06701
06702 //do multiple extractions
06703 this->DoExtractions(ntp,evt,pntpSA,pid,nu);
06704
06705 MAXMSG("NuAnalysis",Msg::kInfo,10)
06706 <<"PID: dp="<<nu.dpID<<", ab="<<nu.abID<<", ro="<<nu.roID
06707 <<", po="<<nu.poID<<", roNMB="<<nu.roIDNuMuBar<<endl;
06708
06709 //figure out the first and last time in the whole ntuple
06710 //this is very useful for making plots of quantities vs time
06711 plots.FillNtupleEarliestLatestTime(nu);
06712
06713 //write out the pots since the last evt
06714 //this variable takes account of spills with zero entries
06715 //and spills with >=2 evts
06716 nu.potSinceLastEvt=potSinceLastEvt;
06717 nu.potSinceLastEvtGood=potSinceLastEvtGood;
06718 nu.potSinceLastEvtBad=potSinceLastEvtBad;
06719 potSinceLastEvt=0;//reset this for the next loop
06720 potSinceLastEvtGood=0;
06721 potSinceLastEvtBad=0;
06722
06724 //fill the tree
06725 output.FillNuEventTree();
06726
06727 //get the best track in the event
06728 Int_t bestTrack=lib.reco.GetBestTrack(nu);
06729 const NtpSRTrack* ptrk=lib.reco.GetTrackWithIndexX
06730 (ntp,evt,bestTrack-1);
06731 const NtpSRTrack& trk=*ptrk;
06732
06733 //ensure good number of tracks in event (note preselection above)
06734 if (!lib.cuts.IsGoodNumberOfTracks(nu)) continue;
06735 lib.cnt.evtWithTrkCounter++;
06736
06737 //check trk is in fiducial volume (note preselection above)
06738 if (!lib.cuts.IsInFidVolTrk(nu)) continue;
06739 lib.cnt.trkInFidVolCounter++;
06740
06741 //cut on LI
06742 if (lib.cuts.IsLI(nu)) continue;
06743 lib.cnt.evtNotIsLI++;
06744
06745 //cut on the data quality
06746 if (!lib.cuts.IsGoodDataQuality(nu)) continue;
06747 lib.cnt.goodDataQualityCounter++;
06748
06749 //cut on the spill time
06750 plots.FillEvtAndSpillTimingPlots(nu);
06751 if (!lib.cuts.IsGoodTimeToNearestSpill(nu)) continue;
06752 lib.cnt.goodTimeToNearestSpillCounter++;
06753
06754 //cut on the beam
06755 if (!lib.cuts.IsGoodBeam(nu)) continue;
06756 lib.cnt.goodBeamInfoDBCounter++;
06757
06758 //require a good trk fit
06759 if (!lib.cuts.IsGoodTrackFitPass(nu)) continue;
06760 lib.cnt.goodTrkPassCounter++;
06761
06762 //require a forward going neutrino about beam direction
06763 if (!lib.cuts.IsGoodDirCos(nu)) continue;
06764 lib.cnt.goodDirectionCosineCounter++;
06765
06766 //fill pid plots AFTER pre-selection
06767 plots.FillTrueDpIDHistos(nu);
06768 plots.FillTrueDpIDHistosPQNQ(nu);
06769 plots.FillDPIdSigmaQPPassPreSelCutPlots(nu);
06770 plots.FillSigmaQPPlots(nu);//sig, chi, prob plots
06771 // PoID Officially depracated
06772 //plots.FillTruePoIDHistos(nu);
06773 //plots.FillTruePoIDHistosPQNQ(nu);
06774 plots.FillTrueAbIDHistos(nu);
06775 plots.FillTrueAbIDHistosPQNQ(nu);
06776 plots.FillTrueRoIDHistos(nu);
06777 plots.FillTrueRoIDHistosPQNQ(nu);
06778 plots.FillDPIdSigmaQPPassUVVtxCutPlots(nu);//fill these anyway
06779
06780 //cut on the PID
06781 if (!lib.cuts.IsGoodPID(nu)) {
06782 plots.FillDPIdSigmaQPFailDpIDCutPlots(nu);
06783 continue;
06784 }
06785 lib.cnt.goodPIDCounter++;
06786 plots.FillDPIdSigmaQPPassDpIDCutPlots(nu);
06787
06788 //cut on the fractional track momentum and sign error
06789 if (!lib.cuts.IsGoodSigmaQP_QP(nu)) {
06790 plots.FillDPIdSigmaQPFailSigQPCutPlots(nu);
06791 continue;
06792 }
06793 lib.cnt.goodFitSigQPCounter++;
06794 plots.FillDPIdSigmaQPPassSigQPCutPlots(nu);
06795
06796 //fill plots
06797 plots.FillStpfitqpPlots(ntp,trk,nu);
06798 plots.FillLowProbPlots(trk,nu);
06799
06800 //cut on the track fit probability
06801 if (!lib.cuts.IsGoodFitProb(nu)) {
06802 plots.FillDPIdSigmaQPFailProbCutPlots(nu);
06803 if (nu.charge==+1) {
06804 plots.PrintEventInfo(nmbTxtProb,nu);
06805 if (nu.prob<=0.001) plots.PrintEventInfo(nmbTxtProb001,nu);
06806 else if (nu.prob>0.001 && nu.prob<0.003) plots.PrintEventInfo
06807 (nmbTxtProb003,nu);
06808 }
06809 continue;
06810 }
06811 lib.cnt.goodFitProbCounter++;
06812
06813 //plots.FillStpfitqpPlots(ntp,trk,nu);
06814
06816 //END OF STD CUTS
06818
06819 if (nu.charge==-1) {
06820 plots.PrintEventInfo(nmTxt,nu);
06821 time.vTimeNuMuEvt.push_back(nu.timeSec);
06822 lib.cnt.nuNQCounter++;
06823 }
06824 else if (nu.charge==+1) {
06825 plots.PrintEventInfo(nmbTxt,nu);
06826 lib.cnt.CountTrkStdhepId(ntp,evt,trk,nu);
06827 time.vTimeNuMuBarEvt.push_back(nu.timeSec);
06828 lib.cnt.nuPQCounter++;
06829 }
06830 // else cout<<"ahhh, bad charge"<<endl;
06831
06832 MAXMSG("NuAnalysis",Msg::kDebug,100)
06833 <<plots.PrintEventInfo(cout,nu)<<endl;
06834
06835 //fill all the plots
06836 plots.FillRecoEnYHistosN(nu);
06837 plots.FillDPIdSigmaQPPlotsN(nu);
06838 plots.FillEnergyBinHistos(nu);
06839 plots.FillShwHistos(ntp,evt,nu);
06840 plots.FillXYZHistos(nu);
06841 plots.FillContainmentHistos(nu);
06842 plots.FillTruePIDHistos(nu);
06843 plots.FillTrackResponseHistos(ntp,trk,nu);
06844 plots.FillRangeCurvCompHistos(nu);
06845 plots.FillKinematicsHistos(nu);
06846
06847 //fill matrix method histos
06848 lib.hist.FillMatrixMethodHistos(nu);
06849 }//end of loop over events
06850 }
|
|
|
Definition at line 4493 of file NuAnalysis.cxx. References NuEvent::anaVersion, NuConfig::beamType, MadDpID::CalcPID(), NuCuts::CalcTotalPot(), NuEvent::charge, MadDpID::ChoosePDFs(), NuEvent::detector, NuEvent::dpID, NuEvent::energy, NuGeneral::EpochTo1995(), NuEvent::evt, NtpStRecord::evt, NtpStRecord::evthdr, ExtractConfig(), NuExtraction::ExtractGeneralInfo(), NuPlots::FillContainmentHistos(), NuPlots::FillGeneralHistos(), NuPlots::FillRangeCurvCompHistos(), NuPlots::FillRelativeAngleHistos(), NuPlots::FillTrackResponseHistos(), NuPlots::FillTruePIDHistos(), NuPlots::FillXYZHistos(), NtpSRTrack::fit, NuReco::GetBestTrack(), VldContext::GetDetector(), NuBase::GetEntries(), NuReco::GetEvtEnergy(), RecRecordImp< T >::GetHeader(), NuBase::GetNtpBDLiteRecord(), NuBase::GetNtpStRecord(), NuBase::GetNumFilesAddedToChain(), RecDataHeader::GetRun(), VldContext::GetSimFlag(), RecDataHeader::GetSubRun(), NuReco::GetTrackWithIndexX(), NuReco::GetTruthInfo(), RecHeader::GetVldContext(), NuEvent::iaction, NuBase::InitialiseLoopVariables(), NuLibrary::Instance(), NuEvent::inu, NuBeam::IsGoodSpillAndFillPot(), NuCuts::IsInFidVol(), LISieve::IsLI(), NtpSREventSummary::litime, MAXMSG, NtpSRTrack::momentum, MSG, NtpSREvent::ntrack, NuBase::OpenFile(), NuBase::OpenTxtFile(), NtpSRFitTrack::pass, plots(), NuEvent::pot, NtpSRMomentum::qp, NuLibrary::reco, NuEvent::releaseType, NuEvent::run, NuConfig::run, NuConfig::sBeamType, NuMadAnalysis::SetEntry(), NuGeneral::SetGraphAxis(), NuBase::SetLoopVariables(), NuEvent::shwEn, NuEvent::simFlag, NuEvent::snarl, NuGeneral::TH1FFill(), NuEvent::trkEn, NtpSRVertex::u, NtpSRVertex::v, NtpSREvent::vtx, NtpSRVertex::x, NuEvent::y, NtpSRVertex::y, and NtpSRVertex::z. 04494 {
04495 MSG("NuAnalysis",Msg::kInfo)
04496 <<" ** Running ChargeSignCut method... **"<<endl;
04497
04498 NuConfig config;
04499 this->ExtractConfig(config);
04500
04501 //open the output file for the histograms
04502 string sFilePrefix="NMBCutQ"+config.sBeamType;
04503 fOutFile=this->OpenFile(config,sFilePrefix.c_str());
04504
04505 TH1F* hNuMuBarRecoEn=new TH1F("hNuMuBarRecoEn","hNuMuBarRecoEn",
04506 4*352,-32,320);
04507 hNuMuBarRecoEn->GetXaxis()->SetTitle("Energy (GeV)");
04508 hNuMuBarRecoEn->GetXaxis()->CenterTitle();
04509 hNuMuBarRecoEn->GetYaxis()->SetTitle("");
04510 hNuMuBarRecoEn->GetYaxis()->CenterTitle();
04511 hNuMuBarRecoEn->SetFillColor(0);
04512 hNuMuBarRecoEn->SetLineColor(2);
04513 //hNuMuBarRecoEn->SetBit(TH1::kCanRebin);
04514
04515 TH1F* hNuMuRecoEn=new TH1F("hNuMuRecoEn","hNuMuRecoEn",4*352,-32,320);
04516 hNuMuRecoEn->GetXaxis()->SetTitle("Energy (GeV)");
04517 hNuMuRecoEn->GetXaxis()->CenterTitle();
04518 hNuMuRecoEn->GetYaxis()->SetTitle("");
04519 hNuMuRecoEn->GetYaxis()->CenterTitle();
04520 hNuMuRecoEn->SetFillColor(0);
04521 hNuMuRecoEn->SetLineColor(1);
04522 hNuMuRecoEn->SetLineWidth(2);
04523 //hNuMuRecoEn->SetBit(TH1::kCanRebin);
04524
04525 TH1F* hNuMuBarRecoY=new TH1F("hNuMuBarRecoY","hNuMuBarRecoY",
04526 4*144,-0.16,1.28);
04527 hNuMuBarRecoY->GetXaxis()->SetTitle("y");
04528 hNuMuBarRecoY->GetXaxis()->CenterTitle();
04529 hNuMuBarRecoY->GetYaxis()->SetTitle("");
04530 hNuMuBarRecoY->GetYaxis()->CenterTitle();
04531 hNuMuBarRecoY->SetFillColor(0);
04532 hNuMuBarRecoY->SetLineColor(2);
04533 //hNuMuBarRecoY->SetBit(TH1::kCanRebin);
04534
04535 TH1F* hNuMuRecoY=new TH1F("hNuMuRecoY","hNuMuRecoY",4*144,-0.16,1.28);
04536 hNuMuRecoY->GetXaxis()->SetTitle("y");
04537 hNuMuRecoY->GetXaxis()->CenterTitle();
04538 hNuMuRecoY->GetYaxis()->SetTitle("");
04539 hNuMuRecoY->GetYaxis()->CenterTitle();
04540 hNuMuRecoY->SetFillColor(0);
04541 hNuMuRecoY->SetLineColor(1);
04542 hNuMuRecoY->SetLineWidth(2);
04543 //hNuMuRecoY->SetBit(TH1::kCanRebin);
04544
04545 TH1F* hDpIDAll=new TH1F("hDpIDAll","hDpIDAll",4*160,-1.6,1.6);
04546 hDpIDAll->GetXaxis()->SetTitle("PID (from MadDpID)");
04547 hDpIDAll->GetXaxis()->CenterTitle();
04548 hDpIDAll->GetYaxis()->SetTitle("");
04549 hDpIDAll->GetYaxis()->CenterTitle();
04550 hDpIDAll->SetFillColor(0);
04551 hDpIDAll->SetLineColor(1);
04552 hDpIDAll->SetLineWidth(2);
04553 //hDpIDAll->SetBit(TH1::kCanRebin);
04554
04555 TH1F* hDpIDPQ=new TH1F("hDpIDPQ","hDpIDPQ",4*160,-1.6,1.6);
04556 hDpIDPQ->GetXaxis()->SetTitle("PID (from MadDpID)");
04557 hDpIDPQ->GetXaxis()->CenterTitle();
04558 hDpIDPQ->GetYaxis()->SetTitle("");
04559 hDpIDPQ->GetYaxis()->CenterTitle();
04560 hDpIDPQ->SetFillColor(0);
04561 hDpIDPQ->SetLineColor(1);
04562 hDpIDPQ->SetLineWidth(2);
04563 //hDpIDPQ->SetBit(TH1::kCanRebin);
04564
04565 TH1F* hDpIDNQ=new TH1F("hDpIDNQ","hDpIDNQ",4*160,-1.6,1.6);
04566 hDpIDNQ->GetXaxis()->SetTitle("PID (from MadDpID)");
04567 hDpIDNQ->GetXaxis()->CenterTitle();
04568 hDpIDNQ->GetYaxis()->SetTitle("");
04569 hDpIDNQ->GetYaxis()->CenterTitle();
04570 hDpIDNQ->SetFillColor(0);
04571 hDpIDNQ->SetLineColor(1);
04572 hDpIDNQ->SetLineWidth(2);
04573 //hDpIDNQ->SetBit(TH1::kCanRebin);
04574
04575 TH1F* hDpIDPQN_1=new TH1F("hDpIDPQN_1","hDpIDPQN_1",4*160,-1.6,1.6);
04576 hDpIDPQN_1->GetXaxis()->SetTitle("PID (from MadDpID)");
04577 hDpIDPQN_1->GetXaxis()->CenterTitle();
04578 hDpIDPQN_1->GetYaxis()->SetTitle("");
04579 hDpIDPQN_1->GetYaxis()->CenterTitle();
04580 hDpIDPQN_1->SetFillColor(0);
04581 hDpIDPQN_1->SetLineColor(1);
04582 hDpIDPQN_1->SetLineWidth(2);
04583 //hDpIDPQN_1->SetBit(TH1::kCanRebin);
04584
04585 TH1F* hDpIDNQN_1=new TH1F("hDpIDNQN_1","hDpIDNQN_1",4*160,-1.6,1.6);
04586 hDpIDNQN_1->GetXaxis()->SetTitle("PID (from MadDpID)");
04587 hDpIDNQN_1->GetXaxis()->CenterTitle();
04588 hDpIDNQN_1->GetYaxis()->SetTitle("");
04589 hDpIDNQN_1->GetYaxis()->CenterTitle();
04590 hDpIDNQN_1->SetFillColor(0);
04591 hDpIDNQN_1->SetLineColor(1);
04592 hDpIDNQN_1->SetLineWidth(2);
04593 //hDpIDNQN_1->SetBit(TH1::kCanRebin);
04594
04595 //vectors
04596 Int_t entries=static_cast<Int_t>(this->GetEntries());
04597 Int_t startTimeSecs=2000000000;//2 billion
04598 Int_t endTimeSecs=1;
04599 vector<Double_t> vPot;
04600 vPot.reserve(entries);
04601 vector<Double_t> vTime;
04602 vTime.reserve(entries);
04603 vector<Double_t> vPotBad;
04604 vPotBad.reserve(entries/10);
04605 vector<Double_t> vTimeBad;
04606 vTimeBad.reserve(entries/10);
04607
04608 vector<Double_t> vTimeNuMuEvt;
04609 vTimeNuMuEvt.reserve(entries/5);
04610 vector<Double_t> vTimeNuMuBarEvt;
04611 vTimeNuMuBarEvt.reserve(entries/5);
04612
04613 //maps to store evt info
04614 map<Int_t,Double_t> deltaTs;
04615 map<Int_t,Int_t> evtsPerSlc;
04616
04617 //counters
04618 Int_t goodSpillCounter=0;
04619 Int_t badSpillCounter=0;
04620 Float_t totalPot=0;
04621 Float_t totalPotBad=0;
04622 Int_t evtCounter=0;
04623 Int_t evtNotlitime=0;
04624 Int_t evtNotIsLI=0;
04625 Int_t evtInFidVolCounter=0;
04626 Int_t evtWithTrkCounter=0;
04627 Int_t goodBestTrkCounter=0;
04628 Int_t goodTrkPassCounter=0;
04629 Int_t goodRecoEnCounter=0;
04630 Int_t goodUVDiffCounter=0;
04631 Int_t trkInFidVolCounter=0;
04632 Int_t goodFitSigQPCounter=0;
04633 Int_t goodFitProbCounter=0;
04634 Int_t goodFitChi2Counter=0;
04635 Int_t goodDeltaTCounter=0;
04636 Int_t goodEvtsPerSlcCounter=0;
04637 Int_t goodPIDCounter=0;
04638 Int_t goodBeyondTrkEndCounter=0;
04639 Int_t goodShwFractCounter=0;
04640 Int_t nuNQCounter=0;
04641 Int_t nuPQCounter=0;
04642
04643 string sTxtFilePrefix="nmbQCut"+config.sBeamType;
04644 ofstream& nmbTxt=*(this->OpenTxtFile(config,
04645 sTxtFilePrefix.c_str()));
04646 nmbTxt<<"# All NuMuBar like events (with standard CC cuts)"<<endl;
04647 nmbTxt<<"#"<<endl;
04648
04649 sTxtFilePrefix="nmbQCut05"+config.sBeamType;
04650 ofstream& nmb05Txt=*(this->OpenTxtFile(config,
04651 sTxtFilePrefix.c_str()));
04652 nmb05Txt<<"# NuMuBar like events below 5 GeV (with standard CC cuts)"
04653 <<endl;
04654 nmb05Txt<<"#"<<endl;
04655
04656 sTxtFilePrefix="nmbQCut02"+config.sBeamType;
04657 ofstream& nmb02Txt=*(this->OpenTxtFile(config,
04658 sTxtFilePrefix.c_str()));
04659 nmb02Txt<<"# NuMuBar like events below 2 GeV (with standard CC cuts)"
04660 <<endl;
04661 nmb02Txt<<"#"<<endl;
04662
04663 //classes to organise the code in to related functions
04664 const NuCuts cuts;
04665 const NuGeneral general;
04666 const NuPlots plots;
04667 const NuReco reco;
04668 const NuExtraction ext;
04669 const NuBeam beam;
04670
04671 //create these on the heap so that they don't destruct
04672 // - on purpose to avoid a segv on destruction... nice coding!
04673 NuMadAnalysis& mad=*new NuMadAnalysis();
04674 MadDpID& dp=*new MadDpID();
04675 //BeamType::BeamType_t beamType=BeamType::kLE;
04676 BeamType::BeamType_t beamType=static_cast
04677 <BeamType::BeamType_t>(config.beamType);
04678
04679 //get an instance of the code library
04680 const NuLibrary& lib=NuLibrary::Instance();
04681
04685
04686 this->InitialiseLoopVariables();
04687
04688 //for(Int_t entry=0;entry<10000;entry++){
04689 for(Int_t entry=0;entry<this->GetEntries();entry++){
04690
04691 this->SetLoopVariables(entry);
04692
04693 //get reference to NtpStRecord from base class
04694 const NtpStRecord& ntp=(*this->GetNtpStRecord());
04695
04696 const RecCandHeader& rec=ntp.GetHeader();
04697 MAXMSG("NuAnalysis",Msg::kInfo,5)
04698 <<"Found: run="<<rec.GetRun()
04699 <<", subrun="<<rec.GetSubRun()
04700 <<", detector="<<rec.GetVldContext().GetDetector()
04701 <<", simFlag="<<rec.GetVldContext().GetSimFlag()
04702 <<endl;
04703
04704 //write out the detector, simflag, etc
04705 plots.FillGeneralHistos(ntp);
04706
04707 //simple event object to hold important quantities for snarl
04708 NuEvent nuSnarl;
04709
04710 //get the run, snarl, etc info
04711 ext.ExtractGeneralInfo(ntp,nuSnarl);
04712
04713 if (!beam.IsGoodSpillAndFillPot
04714 (this->GetNtpBDLiteRecord(),config,nuSnarl)) {
04715 badSpillCounter++;
04716 totalPotBad+=nuSnarl.pot;
04717 continue;
04718 }
04719 goodSpillCounter++;
04720 totalPot+=nuSnarl.pot;
04721
04722 dp.ChoosePDFs(rec.GetVldContext().GetDetector(),beamType);
04723 mad.SetEntry(&ntp);
04724
04725 TClonesArray& evtTca=(*ntp.evt);
04726 const Int_t numEvts=evtTca.GetEntriesFast();
04727
04729 //loop over the reconstructed events
04731 for (Int_t ievt=0;ievt<numEvts;ievt++){
04732 const NtpSREvent& evt=
04733 *dynamic_cast<NtpSREvent*>(evtTca[ievt]);
04734 evtCounter++;
04735
04736 const NtpSREventSummary& evthdr=ntp.evthdr;
04737
04738 if (evthdr.litime!=-1) {
04739 MAXMSG("NuAnalysis",Msg::kInfo,500)
04740 <<"skipping event: litime="<<evthdr.litime<<endl;
04741 continue;
04742 }
04743 evtNotlitime++;
04744
04745 Bool_t isLI=LISieve::IsLI(ntp);
04746 if (isLI){
04747 MAXMSG("NuAnalysis",Msg::kInfo,5)
04748 <<endl<<endl<<endl
04749 <<"Found LI"
04750 <<", run="<<config.run
04751 <<", entry="<<entry
04752 <<", event="<<ievt
04753 <<", litime="<<evthdr.litime
04754 <<endl<<endl<<endl;
04755 }
04756 else {
04757 MAXMSG("NuAnalysis",Msg::kDebug,50)
04758 <<"Not LI"
04759 <<", run="<<config.run
04760 <<", entry="<<entry
04761 <<", event="<<ievt
04762 <<", litime="<<evthdr.litime
04763 <<endl;
04764 }
04765 if (isLI) continue;
04766 evtNotIsLI++;
04767
04768 //simple event object to hold important quantities
04769 NuEvent nu;
04770
04771 //get the run, snarl, etc info
04772 ext.ExtractGeneralInfo(ntp,nu);
04773
04774 Bool_t isInFidVol=cuts.IsInFidVol(evt.vtx.x,evt.vtx.y,
04775 evt.vtx.z,
04776 evt.vtx.u,evt.vtx.v,0,0,
04777 nu.detector,nu.anaVersion,
04778 nu.releaseType,nu.simFlag);
04779
04780 if (!isInFidVol) continue;
04781 evtInFidVolCounter++;
04782
04783 nu.dpID=dp.CalcPID(&mad,ievt,0);
04784 MAXMSG("NuAnalysis",Msg::kDebug,50)
04785 <<"dpID="<<nu.dpID<<endl;
04786 hDpIDAll->Fill(nu.dpID);
04787
04788 //ensure there is a track in the event
04789 if (evt.ntrack<1) continue;
04790 //if (evt.ntrack!=1) continue;//require exactly 1 track
04791 evtWithTrkCounter++;
04792
04793 //get the best track in the event
04794 Int_t bestTrack=lib.reco.GetBestTrack(nu);
04795 const NtpSRTrack* ptrk=lib.reco.GetTrackWithIndexX
04796 (ntp,evt,bestTrack-1);
04797 if (ptrk==0) continue;
04798 const NtpSRTrack& trk=*ptrk;
04799 goodBestTrkCounter++;
04800
04801 //require a trk fit
04802 if (!trk.fit.pass) continue;
04803 goodTrkPassCounter++;
04804
04805
04807 //RECONSTRUCT the neutrino energy
04808 lib.reco.GetEvtEnergy(nu, false);
04809 goodRecoEnCounter++;
04810
04811 //get the truth info (reco quantities are done above)
04812 reco.GetTruthInfo(ntp,evt,nu);
04813
04814 //set the charge
04815 nu.charge=trk.momentum.qp<0 ? -1 : +1;
04816 if (trk.momentum.qp==0) nu.charge=0;
04817
04818 //cut on the fractional track momentum and sign error
04819 //if (!cuts.IsGoodSigmaQP_QP(nu)) continue;
04820 //goodFitSigQPCounter++;
04821
04822 //cut on the track fit probability
04823 //if (!cuts.IsGoodFitProb(nu)) continue;
04824 //goodFitProbCounter++;
04825
04826 //Float_t chi2PerNdof=999999;
04827 //if (!cuts.IsGoodFitChi2PerNdof(nu)){
04828 //MAXMSG("NuAnalysis",Msg::kVerbose,100)
04829 //<<"Cutting out bad chi2PerNdof="<<chi2PerNdof<<endl;
04830 //continue;
04831 //}
04832 //goodFitChi2Counter++;
04833
04834 //cut on the PID
04835 //if (!cuts.IsGoodDpID(nu)) continue;
04836 if (nu.dpID<=-0.1) continue;
04837 goodPIDCounter++;
04838
04839 if (trk.momentum.qp<0) {
04840 hNuMuRecoEn->Fill(nu.energy);
04841 hNuMuRecoY->Fill(nu.y);
04842 hDpIDNQ->Fill(nu.dpID);
04843 nuNQCounter++;
04844 }
04845 else if (trk.momentum.qp>0) {
04846 string siaction="CC";
04847 if (nu.iaction==0) siaction="NC";
04848 //file format: run snarl event
04849 nmbTxt<<"#"<<endl;
04850 nmbTxt<<"# recoEn="<<nu.energy
04851 <<", trkEn="<<nu.trkEn
04852 <<", shwEn="<<nu.shwEn
04853 <<", recoy="<<nu.y
04854 <<", true inu="<<nu.inu
04855 <<" "<<siaction
04856 <<endl;
04857 nmbTxt<<nu.run<<" "<<nu.snarl<<" "<<nu.evt<<endl;
04858 if (nu.energy<5){
04859 nmb05Txt<<"#"<<endl;
04860 nmb05Txt<<"# recoEn="<<nu.energy
04861 <<", trkEn="<<nu.trkEn
04862 <<", shwEn="<<nu.shwEn
04863 <<", recoy="<<nu.y
04864 <<", true inu="<<nu.inu
04865 <<" "<<siaction
04866 <<endl;
04867 nmb05Txt<<nu.run<<" "<<nu.snarl<<" "<<nu.evt<<endl;
04868 }
04869
04870 if (nu.energy<2){
04871 nmb02Txt<<"#"<<endl;
04872 nmb02Txt<<"# recoEn="<<nu.energy
04873 <<", trkEn="<<nu.trkEn
04874 <<", shwEn="<<nu.shwEn
04875 <<", recoy="<<nu.y
04876 <<", true inu="<<nu.inu
04877 <<" "<<siaction
04878 <<endl;
04879 nmb02Txt<<nu.run<<" "<<nu.snarl<<" "<<nu.evt<<endl;
04880 }
04881
04882 hNuMuBarRecoEn->Fill(nu.energy);
04883 hNuMuBarRecoY->Fill(nu.y);
04884 hDpIDPQ->Fill(nu.dpID);
04885 nuPQCounter++;
04886 }
04887 else cout<<"ahhh, zero qp"<<endl;
04888
04889 plots.FillXYZHistos(nu);
04890 plots.FillContainmentHistos(nu);
04891 plots.FillRelativeAngleHistos(nu);
04892 plots.FillTruePIDHistos(nu);
04893 plots.FillTrackResponseHistos(ntp,trk,nu);
04894 plots.FillRangeCurvCompHistos(nu);
04895 }
04896 }//end of for
04897
04901
04902 MSG("NuAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
04903
04904 //store the number of files added to the chain
04905 Int_t nf=this->GetNumFilesAddedToChain();
04906 TH1F* hRun=dynamic_cast<TH1F*>(gROOT->FindObject("hRun"));
04907 Float_t nr=-1;
04908 if (hRun) nr=hRun->GetEntries();
04909 TH1F* hNumFiles=new TH1F("hNumFiles","hNumFiles",15,-5,10);
04910 hNumFiles->Fill(1,nf);//store as weight, access with GetMaximum
04911 MSG("NuAnalysis",Msg::kInfo)
04912 <<"Files added to chain="<<hNumFiles->GetMaximum()
04913 <<", runs found="<<nr<<endl;
04914
04915 MSG("NuAnalysis",Msg::kInfo)
04916 <<"Found start time and end time: "
04917 <<startTimeSecs<<" -> "<<endTimeSecs<<endl;
04918 general.EpochTo1995(endTimeSecs);
04919 general.EpochTo1995(startTimeSecs);
04920
04921 MSG("NuAnalysis",Msg::kInfo)<<"Filling vs. Time plots..."<<endl;
04922 TH1F* hSpillsVsTime=new TH1F("hSpillsVsTime","hSpillsVsTime",
04923 100,startTimeSecs,endTimeSecs);
04924 general.TH1FFill(hSpillsVsTime,vTime);
04925 general.SetGraphAxis(hSpillsVsTime->GetXaxis(),
04926 startTimeSecs,endTimeSecs);
04927 hSpillsVsTime->GetXaxis()->CenterTitle();
04928 hSpillsVsTime->GetYaxis()->SetTitle("Spills");
04929 hSpillsVsTime->GetYaxis()->CenterTitle();
04930
04931 TH1F* hSpillsBadVsTime=new TH1F("hSpillsBadVsTime","hSpillsBadVsTime",
04932 100,startTimeSecs,endTimeSecs);
04933 general.TH1FFill(hSpillsBadVsTime,vTimeBad);
04934 general.SetGraphAxis(hSpillsBadVsTime->GetXaxis(),
04935 startTimeSecs,endTimeSecs);
04936 hSpillsBadVsTime->GetXaxis()->CenterTitle();
04937 hSpillsBadVsTime->GetYaxis()->SetTitle("Spills");
04938 hSpillsBadVsTime->GetYaxis()->CenterTitle();
04939
04940 TH1F* hNuMuVsTime=new TH1F("hNuMuVsTime","hNuMuVsTime",
04941 100,startTimeSecs,endTimeSecs);
04942 general.TH1FFill(hNuMuVsTime,vTimeNuMuEvt);
04943 general.SetGraphAxis(hNuMuVsTime->GetXaxis(),
04944 startTimeSecs,endTimeSecs);
04945 hNuMuVsTime->GetXaxis()->CenterTitle();
04946 hNuMuVsTime->GetYaxis()->SetTitle("#nu_#mu events");
04947 hNuMuVsTime->GetYaxis()->CenterTitle();
04948
04949 TH1F* hNuMuBarVsTime=new TH1F("hNuMuBarVsTime","hNuMuBarVsTime",
04950 100,startTimeSecs,endTimeSecs);
04951 general.TH1FFill(hNuMuBarVsTime,vTimeNuMuBarEvt);
04952 general.SetGraphAxis(hNuMuBarVsTime->GetXaxis(),
04953 startTimeSecs,endTimeSecs);
04954 hNuMuBarVsTime->GetXaxis()->CenterTitle();
04955 hNuMuBarVsTime->GetYaxis()->SetTitle("#bar{#nu_#mu} events");
04956 hNuMuBarVsTime->GetYaxis()->CenterTitle();
04957
04958 TH1F* hPotVsTime=new TH1F("hPotVsTime","hPotVsTime",
04959 100,startTimeSecs,endTimeSecs);
04960 general.TH1FFill(hPotVsTime,vTime,vPot);
04961 general.SetGraphAxis(hPotVsTime->GetXaxis(),
04962 startTimeSecs,endTimeSecs);
04963 hPotVsTime->GetXaxis()->CenterTitle();
04964 hPotVsTime->GetYaxis()->SetTitle("POT");
04965 hPotVsTime->GetYaxis()->CenterTitle();
04966
04967 TH1F* hPotBadVsTime=new TH1F("hPotBadVsTime","hPotBadVsTime",
04968 100,startTimeSecs,endTimeSecs);
04969 general.TH1FFill(hPotBadVsTime,vTimeBad,vPotBad);
04970 general.SetGraphAxis(hPotBadVsTime->GetXaxis(),
04971 startTimeSecs,endTimeSecs);
04972 hPotBadVsTime->GetXaxis()->CenterTitle();
04973 hPotBadVsTime->GetYaxis()->SetTitle("POT");
04974 hPotBadVsTime->GetYaxis()->CenterTitle();
04975
04976 Float_t totalPotHist=0;
04977 Float_t totalPotBadHist=0;
04978 cuts.CalcTotalPot(totalPotHist,totalPotBadHist);
04979 Float_t pcPotRejected=0;
04980 if (totalPotHist) pcPotRejected=100.*totalPotBadHist/totalPotHist;
04981
04982 //msg was giving pots=412886000000000000.000000... still is for MC!
04983 cout<<"Number of spills ="<<this->GetEntries()<<endl
04984 <<"Number of good spills="<<goodSpillCounter<<endl
04985 <<"Number of bad spills ="<<badSpillCounter<<endl
04986 <<"Sum of good+bad spill="<<badSpillCounter+goodSpillCounter<<endl
04987 <<endl
04988 <<"Total POT good ="<<totalPot*1e12<<endl
04989 <<"Total POT bad ="<<totalPotBad*1e12<<endl
04990 <<"Total POT good (hist)="<<totalPotHist*1e12<<endl
04991 <<"Total POT bad (hist)="<<totalPotBadHist*1e12
04992 <<" ("<<pcPotRejected<<"%)"<<endl;
04993
04994 MSG("NuAnalysis",Msg::kInfo)
04995 <<endl<<"*************************************"<<endl
04996 <<"Total Events ="<<evtCounter<<endl
04997 <<"Evt not litime ="<<evtNotlitime<<endl
04998 <<"Evt not IsLI ="<<evtNotIsLI<<endl
04999 <<"Evts in Fid ="<<evtInFidVolCounter<<endl
05000 <<"Evts w/ Trk ="<<evtWithTrkCounter<<endl
05001 <<"Good Best Trk ="<<goodBestTrkCounter<<endl
05002 <<"Track Pass ="<<goodTrkPassCounter<<endl
05003 <<"Good reco energy="<<goodRecoEnCounter<<endl
05004 <<"Good UVDiff ="<<goodUVDiffCounter<<endl
05005 <<"Trk Vtx in Fid ="<<trkInFidVolCounter<<endl
05006 <<"Good Fit SigQP ="<<goodFitSigQPCounter<<endl
05007 <<"Good Fit Prob ="<<goodFitProbCounter<<endl
05008 <<"Good Fit Chi2 ="<<goodFitChi2Counter<<endl
05009 <<"Good Delta T ="<<goodDeltaTCounter<<endl
05010 <<"Good EvtPerSlc ="<<goodEvtsPerSlcCounter<<endl
05011 <<"Good DP ID ="<<goodPIDCounter<<endl
05012 <<"Good beyond tEnd="<<goodBeyondTrkEndCounter<<endl
05013 <<"Good shw fract ="<<goodShwFractCounter<<endl
05014 <<"*************************************"<<endl;
05015
05016 Float_t pcPQ=0;
05017 if (nuPQCounter+nuNQCounter>0) pcPQ=100.*nuPQCounter/
05018 (nuPQCounter+nuNQCounter);
05019 MSG("NuAnalysis",Msg::kInfo)
05020 <<endl
05021 <<"Neutrinos with NQ="<<nuNQCounter<<endl
05022 <<"Neutrinos with PQ="<<nuPQCounter
05023 <<" ("<<pcPQ<<"%)"<<endl
05024 <<"Sum NQ+PQ ="<<nuNQCounter+nuPQCounter<<endl
05025 <<endl;
05026
05027 MSG("NuAnalysis",Msg::kInfo)
05028 <<" ** Finished ChargeSignCut method **"<<endl;
05029 }
|
|
|
Definition at line 6854 of file NuAnalysis.cxx. References NuEvent::mc, NuEvent::mcEvt, NuEvent::mcShw, NuEvent::mcShw1, NuEvent::mcShw2, NuEvent::mcShw3, NuEvent::mcShw4, NuEvent::mcShw5, NuEvent::mcTrk, NuEvent::mcTrk1, NuEvent::mcTrk2, NuEvent::mcTrk3, NuEvent::shwExists1, NuEvent::shwExists2, NuEvent::shwExists3, NuEvent::shwExists4, NuEvent::shwExists5, NuEvent::trkExists1, NuEvent::trkExists2, and NuEvent::trkExists3. Referenced by MakeFullDST(). 06855 {
06856 std::vector<Int_t> vTthInd;
06857 vTthInd.push_back(event.mc);
06858 if (event.mcEvt != event.mc && event.mcEvt > -1)
06859 {vTthInd.push_back(event.mcEvt);}
06860 if (event.mcTrk != event.mc && event.mcTrk > -1)
06861 {vTthInd.push_back(event.mcTrk);}
06862 if (event.mcShw != event.mc && event.mcShw > -1)
06863 {vTthInd.push_back(event.mcShw);}
06864 if (event.mcTrk1 != event.mcTrk && event.trkExists1 && event.mcTrk1 > -1)
06865 {vTthInd.push_back(event.mcTrk1);}
06866 if (event.mcTrk2 != event.mcTrk && event.trkExists2 && event.mcTrk2 > -1)
06867 {vTthInd.push_back(event.mcTrk2);}
06868 if (event.mcTrk3 != event.mcTrk && event.trkExists3 && event.mcTrk3 > -1)
06869 {vTthInd.push_back(event.mcTrk3);}
06870 if (event.mcShw1 != event.mcShw && event.shwExists1 && event.mcShw1 > -1)
06871 {vTthInd.push_back(event.mcShw1);}
06872 if (event.mcShw2 != event.mcShw && event.shwExists2 && event.mcShw2 > -1)
06873 {vTthInd.push_back(event.mcShw2);}
06874 if (event.mcShw3 != event.mcShw && event.shwExists3 && event.mcShw3 > -1)
06875 {vTthInd.push_back(event.mcShw3);}
06876 if (event.mcShw4 != event.mcShw && event.shwExists4 && event.mcShw4 > -1)
06877 {vTthInd.push_back(event.mcShw4);}
06878 if (event.mcShw5 != event.mcShw && event.shwExists5 && event.mcShw5 > -1)
06879 {vTthInd.push_back(event.mcShw5);}
06880 return vTthInd;
06881 }
|
|
||||||||||||
|
Definition at line 5616 of file NuAnalysis.cxx. References NuGeneral::CopyAcrossObjects(). Referenced by NMBSummaryTreeAna(). 05618 {
05619 //vector to store the names of the histograms to copy across
05620 vector<string> vObjectNames;
05621 vObjectNames.push_back("hDetector");
05622 vObjectNames.push_back("hSimFlag");
05623 vObjectNames.push_back("hTrigSrc");
05624 vObjectNames.push_back("hRun");
05625 vObjectNames.push_back("hPottortgt");
05626 vObjectNames.push_back("hPotBadtortgt");
05627 vObjectNames.push_back("hPottrtgtd");
05628 vObjectNames.push_back("hPotBadtrtgtd");
05629 vObjectNames.push_back("hPottor101");
05630 vObjectNames.push_back("hPotBadtor101");
05631 vObjectNames.push_back("hPottr101d");
05632 vObjectNames.push_back("hPotBadtr101d");
05633 vObjectNames.push_back("hSpillsPerFile");
05634
05635 NuGeneral general;
05636 general.CopyAcrossObjects(dirInput,dirOutput,vObjectNames);
05637 }
|
|
||||||||||||
|
||||||||||||
|
Definition at line 6158 of file NuAnalysis.cxx. References NuEvent::coilCurrent, NuEvent::coilIsOk, NuEvent::coilIsReverse, NuEvent::goodBeamSntp, and NuEvent::pot. Referenced by ChargeSeparationOneSnarl(), and MakeFullDST(). 06159 {
06160 //copy across
06161 nu.goodBeamSntp=nuSnarl.goodBeamSntp;
06162 nu.pot=nuSnarl.pot;
06163 nu.coilIsOk=nuSnarl.coilIsOk;
06164 nu.coilIsReverse=nuSnarl.coilIsReverse;
06165 nu.coilCurrent=nuSnarl.coilCurrent;
06166 }
|
|
||||||||||||||||
|
Definition at line 609 of file NuAnalysis.cxx. References NtpSRMomentum::Print(). Referenced by CrossSections(). 00612 {
00613 TNtuple nt(splName.c_str(),splName.c_str(),varNames.c_str());
00614 nt.ReadFile(fileName.c_str(),varNames.c_str());
00615 //nt.ReadFile("xsec.data", "E:xsec");
00616 //nt.Draw("E:xsec","","GOFF");
00617 nt.Print();
00618 //nt.Show(0);
00619 //nt.Show(1);
00620 //nt.Show(2);
00621
00622 //Note: this line has to be here because it defines V1 and V2
00623 nt.Draw("energy:xsec","","GOFF");//graphics off
00624
00625 unsigned int n = (int) nt.GetSelectedRows();
00626 #if ROOT_VERSION_CODE < ROOT_VERSION(5,21,5)
00627 int * idx = new int[n];
00628 #else
00629 unsigned int * idx = new unsigned int[n];
00630 #endif
00631 double * xx = new double[n];
00632 double * yy = new double[n];
00633
00634 TMath::Sort(n,nt.GetV1(),idx,false); // sort in energy
00635
00636 for(unsigned int i=0; i<n; i++) {
00637 int ii = idx[i];
00638 xx[i] = (nt.GetV1())[ii];
00639 yy[i] = (nt.GetV2())[ii];
00640 //MSG("NuAnalysis",Msg::kInfo)
00641 //<<"E="<<xx[i]<<" GeV, xsec="<<yy[i]<<endl;
00642 }
00643
00644 TSpline3 * spl=new TSpline3(("spl"+splName).c_str(),xx,yy,n,"0");
00645
00646 delete [] idx;
00647 delete [] xx;
00648 delete [] yy;
00649
00650 return spl;
00651 }
|
|
|
Definition at line 655 of file NuAnalysis.cxx. References CreateTSpline3(), MAXMSG, MSG, and NuBase::OpenFile(). 00656 {
00657 MSG("NuAnalysis",Msg::kInfo)
00658 <<" ** Running CrossSections method... **"<<endl;
00659
00660 //open the output file for the histograms
00661 fOutFile=this->OpenFile(100,"NuCrossSections");
00662
00663 cout<<"here"<<endl;
00664 TSpline3* splnumupCC=CreateTSpline3
00665 ("numupCC","energy:xsec",
00666 "/home/hartnell/mytest/NuMuBar/numu-p-CC.txt");
00667 cout<<"here"<<endl;
00668 TSpline3* splnumunCC=CreateTSpline3
00669 ("numunCC","energy:xsec",
00670 "/home/hartnell/mytest/NuMuBar/numu-n-CC.txt");
00671 cout<<"here"<<endl;
00672 TSpline3* splnumubarpCC=CreateTSpline3
00673 ("numubarpCC","energy:xsec",
00674 "/home/hartnell/mytest/NuMuBar/numubar-p-CC.txt");
00675 cout<<"here"<<endl;
00676 TSpline3* splnumubarnCC=CreateTSpline3
00677 ("numubarnCC","energy:xsec",
00678 "/home/hartnell/mytest/NuMuBar/numubar-n-CC.txt");
00679 cout<<"hereend"<<endl;
00680
00681 TH1F* hXsecNuMuPCC=new TH1F("hXsecNuMuPCC","hXsecNuMuPCC",
00682 1000,0,100);
00683 hXsecNuMuPCC->SetTitle("NuMu Cross Section on Protons");
00684 hXsecNuMuPCC->GetXaxis()->SetTitle("Energy (GeV)");
00685 hXsecNuMuPCC->GetXaxis()->CenterTitle();
00686 hXsecNuMuPCC->GetYaxis()->SetTitle("#sigma (cm^{2})");
00687 hXsecNuMuPCC->GetYaxis()->CenterTitle();
00688
00689 TH1F* hXsecNuMuNCC=new TH1F("hXsecNuMuNCC","hXsecNuMuNCC",
00690 1000,0,100);
00691 hXsecNuMuNCC->SetTitle("NuMu Cross Section on Neutrons");
00692 hXsecNuMuNCC->GetXaxis()->SetTitle("Energy (GeV)");
00693 hXsecNuMuNCC->GetXaxis()->CenterTitle();
00694 hXsecNuMuNCC->GetYaxis()->SetTitle("#sigma (cm^{2})");
00695 hXsecNuMuNCC->GetYaxis()->CenterTitle();
00696
00697 TH1F* hXsecNuMuBarPCC=new TH1F("hXsecNuMuBarPCC","hXsecNuMuBarPCC",
00698 1000,0,100);
00699 hXsecNuMuBarPCC->SetTitle("NuMuBar Cross Section on Protons");
00700 hXsecNuMuBarPCC->GetXaxis()->SetTitle("Energy (GeV)");
00701 hXsecNuMuBarPCC->GetXaxis()->CenterTitle();
00702 hXsecNuMuBarPCC->GetYaxis()->SetTitle("#sigma (cm{^2})");
00703 hXsecNuMuBarPCC->GetYaxis()->CenterTitle();
00704
00705 TH1F* hXsecNuMuBarNCC=new TH1F("hXsecNuMuBarNCC","hXsecNuMuBarNCC",
00706 1000,0,100);
00707 hXsecNuMuBarNCC->SetTitle("NuMuBar Cross Section on Neutrons");
00708 hXsecNuMuBarNCC->GetXaxis()->SetTitle("Energy (GeV)");
00709 hXsecNuMuBarNCC->GetXaxis()->CenterTitle();
00710 hXsecNuMuBarNCC->GetYaxis()->SetTitle("#sigma (cm^{2})");
00711 hXsecNuMuBarNCC->GetYaxis()->CenterTitle();
00712
00713
00714 TH1F* hXsecNuMuFeCC=new TH1F("hXsecNuMuFeCC","hXsecNuMuFeCC",
00715 1000,0,100);
00716 hXsecNuMuFeCC->SetTitle("NuMu Cross Section on Fe");
00717 hXsecNuMuFeCC->GetXaxis()->SetTitle("Energy (GeV)");
00718 hXsecNuMuFeCC->GetXaxis()->CenterTitle();
00719 hXsecNuMuFeCC->GetYaxis()->SetTitle("#sigma (cm^{2})");
00720 hXsecNuMuFeCC->GetYaxis()->CenterTitle();
00721
00722 TH1F* hXsecNuMuBarFeCC=new TH1F("hXsecNuMuBarFeCC","hXsecNuMuBarFeCC",
00723 1000,0,100);
00724 hXsecNuMuBarFeCC->SetTitle("NuMuBar Cross Section on Fe");
00725 hXsecNuMuBarFeCC->GetXaxis()->SetTitle("Energy (GeV)");
00726 hXsecNuMuBarFeCC->GetXaxis()->CenterTitle();
00727 hXsecNuMuBarFeCC->GetYaxis()->SetTitle("#sigma (cm^{2})");
00728 hXsecNuMuBarFeCC->GetYaxis()->CenterTitle();
00729
00730
00731 for (Float_t i=0.05;i<100;i+=0.1){
00732 MAXMSG("NuAnalysis",Msg::kInfo,20)
00733 <<"E="<<i<<" GeV"<<endl
00734 <<" numu p CC xsec="<<splnumupCC->Eval(i)<<"e-38 cm^2"
00735 <<", numu n CC xsec="<<splnumunCC->Eval(i)<<"e-38 cm^2"<<endl
00736 <<" numubar p CC xsec="<<splnumubarpCC->Eval(i)<<"e-38 cm^2"
00737 <<", numubar n CC xsec="<<splnumubarnCC->Eval(i)<<"e-38 cm^2"
00738 <<endl;
00739
00740 Float_t xsecNuMuPCC=splnumupCC->Eval(i)<0 ? 0:splnumupCC->Eval(i);
00741 Float_t xsecNuMuNCC=splnumunCC->Eval(i)<0 ? 0:splnumunCC->Eval(i);
00742 Float_t xsecNuMuBarPCC=
00743 splnumubarpCC->Eval(i)<0 ? 0:splnumubarpCC->Eval(i);
00744 Float_t xsecNuMuBarNCC=
00745 splnumubarnCC->Eval(i)<0 ? 0:splnumubarnCC->Eval(i);
00746
00747 hXsecNuMuPCC->Fill(i,xsecNuMuPCC);
00748 hXsecNuMuNCC->Fill(i,xsecNuMuNCC);
00749 hXsecNuMuBarPCC->Fill(i,xsecNuMuBarPCC);
00750 hXsecNuMuBarNCC->Fill(i,xsecNuMuBarNCC);
00751
00752 Float_t FeA=55.845;
00753 Float_t FeZ=26;
00754 Float_t FeP=FeZ;
00755 Float_t FeN=FeA-FeZ;
00756
00757 Float_t xsecNuMuBarFeCC=xsecNuMuBarPCC*FeP+xsecNuMuBarNCC*FeN;
00758 Float_t xsecNuMuFeCC=xsecNuMuPCC*FeP+xsecNuMuNCC*FeN;
00759 hXsecNuMuFeCC->Fill(i,xsecNuMuFeCC);
00760 hXsecNuMuBarFeCC->Fill(i,xsecNuMuBarFeCC);
00761
00762
00763 }
00764
00765 MSG("NuAnalysis",Msg::kInfo)
00766 <<" ** Finished CrossSections method **"<<endl;
00767 }
|
|
||||||||||||||||
|
Definition at line 109 of file NuAnalysis.cxx. References choose_infid_set(), NuReco::GetBestShower(), NuReco::GetBestTrack(), VldContext::GetDetector(), RecRecordImp< T >::GetHeader(), NuReco::GetShowerWithIndexX(), VldContext::GetSimFlag(), NuReco::GetTrackWithIndexX(), RecHeader::GetVldContext(), infid(), NuLibrary::Instance(), MAXMSG, MSG, NtpSRVertex::plane, NuLibrary::reco, NtpSRTrack::vtx, NtpSRShower::vtx, NtpSRVertex::x, NtpSRVertex::y, and NtpSRVertex::z. 00112 {
00113 MAXMSG("NuAnalysis",Msg::kInfo,3)
00114 <<"Running DemoInfidSRInterface..."<<endl;
00115
00116 //get the track and the shower
00117 //this first part is specific to the NuMuBar/NtupleUtils package
00118 //and is not part of the code demonstration
00119
00120 //get an instance of the code library
00121 const NuLibrary& lib=NuLibrary::Instance();
00122
00123 //get the best track in the event
00124 Int_t bestTrack=lib.reco.GetBestTrack(nu);
00125 if (bestTrack<1) return;
00126 const NtpSRTrack* ptrk=lib.reco.GetTrackWithIndexX
00127 (ntp,evt,bestTrack-1);
00128 const NtpSRTrack& trk=*ptrk;
00129
00130 //get the best shower in the event
00131 Int_t bestShower=lib.reco.GetBestShower(nu);
00132 if (bestShower<1) return;
00133 const NtpSRShower* pshw=lib.reco.GetShowerWithIndexX
00134 (ntp,evt,bestShower-1);
00135 const NtpSRShower& shw=*pshw;
00136
00140
00141 //first up initialise the cuts to be the cc2008 version
00142 //just need to do this once
00143 static Bool_t infid_initialised=false;
00144 if (!infid_initialised) {
00145 infid_initialised=true;
00146 choose_infid_set("cc2008");
00147
00148 //map out the z positions of the cuts
00149 for (Float_t z=0;z<30;z+=0.005) {
00150
00151 //use values that will be in both detectors fiducial volumes
00152 Float_t x=1.5*Munits::m;
00153 Float_t y=0.6*Munits::m;
00154
00155 //determine if in the fid. vol.
00156 const RecCandHeader& rec=ntp.GetHeader();
00157 Bool_t inFid=infid(rec.GetVldContext().GetDetector(),
00158 rec.GetVldContext().GetSimFlag(),
00159 x,y,z);
00160 MSG("NuAnalysis",Msg::kInfo)
00161 <<"z="<<z<<", inFid = "<<inFid<<endl;
00162 }
00163 }
00164
00165 //determine if evt, trk and shw are in the fiducial volume
00166 //the offset to the trk vtx is subtracted in the function below
00167 Bool_t evtIsInFid=infid(ntp,evt);
00168 Bool_t trkIsInFid=infid(ntp,trk);
00169 Bool_t shwIsInFid=infid(ntp,shw);
00170
00171 MAXMSG("NuAnalysis",Msg::kInfo,100)
00172 <<"Evt/Trk/Shw IsInFid = "
00173 <<evtIsInFid<<"/"<<trkIsInFid<<"/"<<shwIsInFid<<endl
00174 <<"evt(x,y,z) = ("<<evt.vtx.x<<","<<evt.vtx.y<<","<<evt.vtx.z<<")"
00175 <<endl
00176 <<"trk(x,y,z) = ("<<trk.vtx.x<<","<<trk.vtx.y<<","<<trk.vtx.z<<")"
00177 <<endl
00178 <<"shw(x,y,z) = ("<<shw.vtx.x<<","<<shw.vtx.y<<","<<shw.vtx.z<<")"
00179 <<endl;
00180
00181 //check for differences due to trk vtx being in scintillator
00182 //and evt vtx being in the steel (usually)
00183 if (evtIsInFid!=trkIsInFid && evt.vtx.plane==trk.vtx.plane-1) {
00184 MAXMSG("NuAnalysis",Msg::kInfo,200)
00185 <<"*******************************************************"<<endl
00186 <<"*******************************************************"<<endl
00187 <<"*******************************************************"<<endl
00188 <<"Evt/Trk/Shw IsInFid = "
00189 <<evtIsInFid<<"/"<<trkIsInFid<<"/"<<shwIsInFid<<endl
00190 <<"evt(x,y,z) = ("<<evt.vtx.x<<","<<evt.vtx.y<<","<<evt.vtx.z<<")"
00191 <<endl
00192 <<"trk(x,y,z) = ("<<trk.vtx.x<<","<<trk.vtx.y<<","<<trk.vtx.z<<")"
00193 <<endl
00194 <<"shw(x,y,z) = ("<<shw.vtx.x<<","<<shw.vtx.y<<","<<shw.vtx.z<<")"
00195 <<endl
00196 <<"*******************************************************"<<endl
00197 <<"*******************************************************"<<endl
00198 <<"*******************************************************"<<endl
00199 <<endl;
00200 }
00201 }
|
|
|
Only determine the new Conventions BeamType Don't bother trying to determine the BeamMonSpill (beamTypeSntp) for MC - you have it for data but it is converted straight into the Conventions beam type Definition at line 2899 of file NuAnalysis.cxx. References NuConfig::beamType, NuConfig::hornIsReverse, MAXMSG, NuConfig::sHornCurrent, and NuConfig::sTargetPos. Referenced by ExtractConfig(), and OldDetermineBeamType(). 02900 {
02905
02906 /*
02907
02908 //from Conventions/BeamType.h
02909
02910 kL000z200i, // true LE (data has a few POTs before target broke)
02911 kL010z185i, // normal "LE"-like running condition (pLE)
02912 kL050z200i,
02913 kL100z200i, // pseudo-medium (pME)
02914 kL200z200i,
02915 kL250z200i, // pseudo-high (pHE)
02916 kUser,
02917 kL010z000i, // "horns off"
02918 kL010z170i, // pLE low current test run
02919 kL010z200i, // pLE high current test run
02920 kL010z185i_lowintensity,
02921 kL150z200i, // pseudo-mediumhigh (pMHE)
02922
02923 // retain old forms (new value go before this)
02924 kLE = kL000z200i,
02925 k010 = kL010z185i,
02926 k050 = kL050z200i,
02927 k100 = kL100z200i,
02928 k200 = kL200z200i,
02929 k250 = kL250z200i,
02930 kME = k100, // obsolete (ambiguiously used for pME vs. true-ME)
02931 kHE = k250, // obsolete (ambiguiously used for pHE vs. true-HE)
02932 kEndOfList
02933 */
02934
02935 //25/Feb/07 NEW: now using Conventions definitions which has
02936 //horn current built in to the beam type
02937 //don't have a case for "kL010z185i_lowintensity" yet
02938
02939 //these are the BeamMonSpill definitions, which are different
02940 //to the MCReweight definitions
02941 //0=unknown,1=LE,2=ME,3=HE,4=psME,5=psHE mask=0x1c. LE-10 is LE
02942 if (config.sTargetPos=="000") {
02943 MAXMSG("NuAnalysis",Msg::kInfo,5)
02944 <<"Identified case for sTargetPos="<<config.sTargetPos
02945 <<", now searching for horn current case..."<<endl;
02946 if (config.sHornCurrent=="200") {
02947 config.beamType=BeamType::kL000z200i;
02948 }
02949 else {
02950 MAXMSG("NuAnalysis",Msg::kError,5)
02951 <<"Ahhh, no horn current case for hornCurrent="
02952 <<config.sHornCurrent<<" for sTargetPos="<<config.sTargetPos
02953 <<endl;
02954 config.beamType=BeamType::kUnknown;
02955 assert(false);
02956 }
02957 }
02958 else if (config.sTargetPos=="010") {
02959 MAXMSG("NuAnalysis",Msg::kInfo,5)
02960 <<"Identified case for sTargetPos="<<config.sTargetPos
02961 <<", now searching for horn current..."<<endl;
02962 if (config.sHornCurrent=="185") {
02963 if(config.hornIsReverse)
02964 config.beamType=BeamType::kL010z185i_rev;
02965 else
02966 config.beamType=BeamType::kL010z185i;
02967 }
02968 else if (config.sHornCurrent=="200") {
02969 config.beamType=BeamType::kL010z200i;
02970 }
02971 else if (config.sHornCurrent=="170") {
02972 config.beamType=BeamType::kL010z170i;
02973 }
02974 else if (config.sHornCurrent=="000") {
02975 config.beamType=BeamType::kL010z000i;
02976 }
02977 else {
02978 MAXMSG("NuAnalysis",Msg::kError,5)
02979 <<"Ahhh, no horn current case for hornCurrent="
02980 <<config.sHornCurrent<<" for sTargetPos="<<config.sTargetPos
02981 <<endl;
02982 config.beamType=BeamType::kUnknown;
02983 assert(false);
02984 }
02985 }
02986 else if (config.sTargetPos=="50") {
02987 MAXMSG("NuAnalysis",Msg::kInfo,5)
02988 <<"Identified case for sTargetPos="<<config.sTargetPos
02989 <<", now searching for horn current..."<<endl;
02990 if (config.sHornCurrent=="200") {
02991 config.beamType=BeamType::kL050z200i;
02992 }
02993 else {
02994 MAXMSG("NuAnalysis",Msg::kError,5)
02995 <<"Ahhh, no horn current case for hornCurrent="
02996 <<config.sHornCurrent<<" for sTargetPos="<<config.sTargetPos
02997 <<endl;
02998 config.beamType=BeamType::kUnknown;
02999 assert(false);
03000 }
03001 }
03002 else if (config.sTargetPos=="100") {
03003 MAXMSG("NuAnalysis",Msg::kInfo,5)
03004 <<"Identified case for sTargetPos="<<config.sTargetPos
03005 <<", now searching for horn current..."<<endl;
03006 if (config.sHornCurrent=="200") {
03007 config.beamType=BeamType::kL100z200i;
03008 }
03009 else {
03010 MAXMSG("NuAnalysis",Msg::kError,5)
03011 <<"Ahhh, no horn current case for hornCurrent="
03012 <<config.sHornCurrent<<" for sTargetPos="<<config.sTargetPos
03013 <<endl;
03014 config.beamType=BeamType::kUnknown;
03015 assert(false);
03016 }
03017 }
03018 else if (config.sTargetPos=="150") {
03019 MAXMSG("NuAnalysis",Msg::kInfo,5)
03020 <<"Identified case for sTargetPos="<<config.sTargetPos
03021 <<", now searching for horn current..."<<endl;
03022 if (config.sHornCurrent=="200") {
03023 config.beamType=BeamType::kL150z200i;
03024 }
03025 else {
03026 MAXMSG("NuAnalysis",Msg::kError,5)
03027 <<"Ahhh, no horn current case for hornCurrent="
03028 <<config.sHornCurrent<<" for sTargetPos="<<config.sTargetPos
03029 <<endl;
03030 config.beamType=BeamType::kUnknown;
03031 assert(false);
03032 }
03033 }
03034 else if (config.sTargetPos=="200") {
03035 MAXMSG("NuAnalysis",Msg::kInfo,5)
03036 <<"Identified case for sTargetPos="<<config.sTargetPos
03037 <<", now searching for horn current..."<<endl;
03038 if (config.sHornCurrent=="200") {
03039 config.beamType=BeamType::kL200z200i;
03040 }
03041 else {
03042 MAXMSG("NuAnalysis",Msg::kError,5)
03043 <<"Ahhh, no horn current case for hornCurrent="
03044 <<config.sHornCurrent<<" for sTargetPos="<<config.sTargetPos
03045 <<endl;
03046 config.beamType=BeamType::kUnknown;
03047 assert(false);
03048 }
03049 }
03050 else if (config.sTargetPos=="250") {
03051 MAXMSG("NuAnalysis",Msg::kInfo,5)
03052 <<"Identified case for sTargetPos="<<config.sTargetPos
03053 <<", now searching for horn current..."<<endl;
03054 if (config.sHornCurrent=="200") {
03055 config.beamType=BeamType::kL250z200i;
03056 }
03057 else {
03058 MAXMSG("NuAnalysis",Msg::kError,5)
03059 <<"Ahhh, no horn current case for hornCurrent="
03060 <<config.sHornCurrent<<" for sTargetPos="<<config.sTargetPos
03061 <<endl;
03062 config.beamType=BeamType::kUnknown;
03063 assert(false);
03064 }
03065 }
03066 else {
03067 config.beamType=BeamType::kUnknown;
03068 MAXMSG("NuAnalysis",Msg::kError,10)
03069 <<"Ahhhhh, target position="<<config.sTargetPos
03070 <<" case not known..."<<endl;
03071 //assert(false);
03072 }
03073 }
|
|
||||||||||||||||||||||||
|
Definition at line 6448 of file NuAnalysis.cxx. References NuLibrary::ext, NuExtraction::ExtractAuxiliaryInfo(), ExtractPIDsAndWeights(), NuReco::GetTruthInfo(), NuLibrary::Instance(), and NuLibrary::reco. Referenced by ChargeSeparationOneSnarl(), and MakeFullDST(). 06452 {
06453 //get an instance of the code library
06454 const NuLibrary& lib=NuLibrary::Instance();
06455
06456 //extract other necessary information
06457 lib.ext.ExtractAuxiliaryInfo(ntp,evt,pntpSA,nu);
06458 //get the truth info (reco quantities are done above)
06459 lib.reco.GetTruthInfo(ntp,evt,nu);
06460
06461 //get the pids and the event weights
06462 this->ExtractPIDsAndWeights(ntp,evt,pid,nu);
06463
06464
06465 }
|
|
|
Definition at line 3796 of file NuAnalysis.cxx. References NuEvent::anaVersion, NuConfig::beamType, MadDpID::CalcPID(), NuCuts::CalcTotalPot(), NuEvent::charge, MadDpID::ChoosePDFs(), NuEvent::detector, NuEvent::dpID, NuGeneral::EpochTo1995(), NtpStRecord::evt, NuLibrary::ext, ExtractConfig(), NuExtraction::ExtractEvtInfo(), NuExtraction::ExtractGeneralInfo(), NuExtraction::ExtractShwInfo(), NuExtraction::ExtractTrkInfo(), NuPlots::FillGeneralHistos(), NtpSRTrack::fit, NuReco::GetBestTrack(), VldContext::GetDetector(), NuBase::GetEntries(), NuReco::GetEvtEnergy(), RecRecordImp< T >::GetHeader(), NuBase::GetNtpBDLiteRecord(), NuBase::GetNtpStRecord(), NuBase::GetNumFilesAddedToChain(), RecDataHeader::GetRun(), VldContext::GetSimFlag(), RecDataHeader::GetSubRun(), NuReco::GetTrackWithIndexX(), NuReco::GetTruthInfo(), RecHeader::GetVldContext(), NtpMCTruth::iaction, NtpSREvent::index, NtpMCTruth::index, NuBase::InitialiseLoopVariables(), NuLibrary::Instance(), NtpMCTruth::inu, NuCuts::IsGoodFitProb(), NuCuts::IsGoodSigmaQP_QP(), NuBeam::IsGoodSpillAndFillPot(), NuCuts::IsInFidVol(), MAXMSG, NtpStRecord::mc, NtpSRTrack::momentum, MSG, NtpTHEvent::neumc, NuBase::OpenFile(), NtpMCTruth::p4neu, NtpSRFitTrack::pass, plots(), NuEvent::pot, NtpSRMomentum::qp, NuLibrary::reco, NuEvent::releaseType, NuConfig::sBeamType, NuMadAnalysis::SetEntry(), NuGeneral::SetGraphAxis(), NuBase::SetLoopVariables(), NuEvent::simFlag, NuGeneral::TH1FFill(), NtpStRecord::thevt, NtpSRVertex::u, NtpSRVertex::v, NtpSRTrack::vtx, NtpSREvent::vtx, NtpMCTruth::vtxx, NtpMCTruth::vtxy, NtpMCTruth::vtxz, NtpSRVertex::x, UgliGeomHandle::xyz2uvz(), NtpSRVertex::y, and NtpSRVertex::z. 03797 {
03798 MSG("NuAnalysis",Msg::kInfo)
03799 <<" ** Running Efficiencies method... **"<<endl;
03800
03801 NuConfig config;
03802 this->ExtractConfig(config);
03803
03804 //open the output file for the histograms
03805 string sFilePrefix="NMBEff"+config.sBeamType;
03806 fOutFile=this->OpenFile(config,sFilePrefix.c_str());
03807
03808 TH1F* hRecoEnNMBFull=new TH1F("hRecoEnNMBFull","hRecoEnNMBFull",
03809 4*352,-32,320);
03810 hRecoEnNMBFull->GetXaxis()->SetTitle("True Energy (GeV)");
03811 hRecoEnNMBFull->GetXaxis()->CenterTitle();
03812 hRecoEnNMBFull->GetYaxis()->SetTitle("");
03813 hRecoEnNMBFull->GetYaxis()->CenterTitle();
03814 //hRecoEnNMBFull->SetBit(TH1::kCanRebin);
03815
03816 TH1F* hRecoEnNMBReco=new TH1F("hRecoEnNMBReco","hRecoEnNMBReco",
03817 4*352,-32,320);
03818 hRecoEnNMBReco->GetXaxis()->SetTitle("True Energy (GeV)");
03819 hRecoEnNMBReco->GetXaxis()->CenterTitle();
03820 hRecoEnNMBReco->GetYaxis()->SetTitle("");
03821 hRecoEnNMBReco->GetYaxis()->CenterTitle();
03822 //hRecoEnNMBReco->SetBit(TH1::kCanRebin);
03823
03824 TH1F* hRecoEnNMBFid=new TH1F("hRecoEnNMBFid","hRecoEnNMBFid",
03825 4*352,-32,320);
03826 hRecoEnNMBFid->GetXaxis()->SetTitle("True Energy (GeV)");
03827 hRecoEnNMBFid->GetXaxis()->CenterTitle();
03828 hRecoEnNMBFid->GetYaxis()->SetTitle("");
03829 hRecoEnNMBFid->GetYaxis()->CenterTitle();
03830 //hRecoEnNMBFid->SetBit(TH1::kCanRebin);
03831
03832 TH1F* hRecoEnNMBTrack=new TH1F("hRecoEnNMBTrack","hRecoEnNMBTrack",
03833 4*352,-32,320);
03834 hRecoEnNMBTrack->GetXaxis()->SetTitle("True Energy (GeV)");
03835 hRecoEnNMBTrack->GetXaxis()->CenterTitle();
03836 hRecoEnNMBTrack->GetYaxis()->SetTitle("");
03837 hRecoEnNMBTrack->GetYaxis()->CenterTitle();
03838 //hRecoEnNMBTrack->SetBit(TH1::kCanRebin);
03839
03840 TH1F* hRecoEnNMBPass=new TH1F("hRecoEnNMBPass","hRecoEnNMBPass",
03841 4*352,-32,320);
03842 hRecoEnNMBPass->GetXaxis()->SetTitle("True Energy (GeV)");
03843 hRecoEnNMBPass->GetXaxis()->CenterTitle();
03844 hRecoEnNMBPass->GetYaxis()->SetTitle("");
03845 hRecoEnNMBPass->GetYaxis()->CenterTitle();
03846 //hRecoEnNMBPass->SetBit(TH1::kCanRebin);
03847
03848 TH1F* hRecoEnNMBQCut=new TH1F("hRecoEnNMBQCut","hRecoEnNMBQCut",
03849 4*352,-32,320);
03850 hRecoEnNMBQCut->GetXaxis()->SetTitle("True Energy (GeV)");
03851 hRecoEnNMBQCut->GetXaxis()->CenterTitle();
03852 hRecoEnNMBQCut->GetYaxis()->SetTitle("");
03853 hRecoEnNMBQCut->GetYaxis()->CenterTitle();
03854 //hRecoEnNMBQCut->SetBit(TH1::kCanRebin);
03855
03856 TH1F* hRecoEnNMBSigQP=new TH1F("hRecoEnNMBSigQP","hRecoEnNMBSigQP",
03857 4*352,-32,320);
03858 hRecoEnNMBSigQP->GetXaxis()->SetTitle("True Energy (GeV)");
03859 hRecoEnNMBSigQP->GetXaxis()->CenterTitle();
03860 hRecoEnNMBSigQP->GetYaxis()->SetTitle("");
03861 hRecoEnNMBSigQP->GetYaxis()->CenterTitle();
03862 //hRecoEnNMBSigQP->SetBit(TH1::kCanRebin);
03863
03864 TH1F* hRecoEnNMBProb=new TH1F("hRecoEnNMBProb","hRecoEnNMBProb",
03865 4*352,-32,320);
03866 hRecoEnNMBProb->GetXaxis()->SetTitle("True Energy (GeV)");
03867 hRecoEnNMBProb->GetXaxis()->CenterTitle();
03868 hRecoEnNMBProb->GetYaxis()->SetTitle("");
03869 hRecoEnNMBProb->GetYaxis()->CenterTitle();
03870 //hRecoEnNMBProb->SetBit(TH1::kCanRebin);
03871
03872 TH1F* hRecoEnNMBProb05=new TH1F("hRecoEnNMBProb05","hRecoEnNMBProb05",
03873 4*352,-32,320);
03874 hRecoEnNMBProb05->GetXaxis()->SetTitle("True Energy (GeV)");
03875 hRecoEnNMBProb05->GetXaxis()->CenterTitle();
03876 hRecoEnNMBProb05->GetYaxis()->SetTitle("");
03877 hRecoEnNMBProb05->GetYaxis()->CenterTitle();
03878 //hRecoEnNMBProb05->SetBit(TH1::kCanRebin);
03879
03880 TH1F* hRecoEnNMBDpID01=new TH1F("hRecoEnNMBDpID01","hRecoEnNMBDpID01",
03881 4*352,-32,320);
03882 hRecoEnNMBDpID01->GetXaxis()->SetTitle("True Energy (GeV)");
03883 hRecoEnNMBDpID01->GetXaxis()->CenterTitle();
03884 hRecoEnNMBDpID01->GetYaxis()->SetTitle("");
03885 hRecoEnNMBDpID01->GetYaxis()->CenterTitle();
03886 //hRecoEnNMBDpID01->SetBit(TH1::kCanRebin);
03887
03888 TH1F* hRecoEnNMBDpID04=new TH1F("hRecoEnNMBDpID04","hRecoEnNMBDpID04",
03889 4*352,-32,320);
03890 hRecoEnNMBDpID04->GetXaxis()->SetTitle("True Energy (GeV)");
03891 hRecoEnNMBDpID04->GetXaxis()->CenterTitle();
03892 hRecoEnNMBDpID04->GetYaxis()->SetTitle("");
03893 hRecoEnNMBDpID04->GetYaxis()->CenterTitle();
03894 //hRecoEnNMBDpID04->SetBit(TH1::kCanRebin);
03895
03896
03897 //leak in/out histos
03898 TH1F* hRecoEnNMBLeakIn=new TH1F("hRecoEnNMBLeakIn","hRecoEnNMBLeakIn",
03899 4*352,-32,320);
03900 hRecoEnNMBLeakIn->GetXaxis()->SetTitle("True Energy (GeV)");
03901 hRecoEnNMBLeakIn->GetXaxis()->CenterTitle();
03902 hRecoEnNMBLeakIn->GetYaxis()->SetTitle("");
03903 hRecoEnNMBLeakIn->GetYaxis()->CenterTitle();
03904 //hRecoEnNMBLeakIn->SetBit(TH1::kCanRebin);
03905
03906 TH1F* hRecoEnNMBLeakOut=new TH1F("hRecoEnNMBLeakOut",
03907 "hRecoEnNMBLeakOut",
03908 4*352,-32,320);
03909 hRecoEnNMBLeakOut->GetXaxis()->SetTitle("True Energy (GeV)");
03910 hRecoEnNMBLeakOut->GetXaxis()->CenterTitle();
03911 hRecoEnNMBLeakOut->GetYaxis()->SetTitle("");
03912 hRecoEnNMBLeakOut->GetYaxis()->CenterTitle();
03913 //hRecoEnNMBLeakOut->SetBit(TH1::kCanRebin);
03914
03915
03916
03917 TH2F* hYvsXTrueLeakIn=new TH2F("hYvsXTrueLeakIn","hYvsXTrueLeakIn",
03918 100,-5,5,100,-5,5);
03919 hYvsXTrueLeakIn->SetTitle("Y vs X");
03920 hYvsXTrueLeakIn->GetXaxis()->SetTitle("X");
03921 hYvsXTrueLeakIn->GetXaxis()->CenterTitle();
03922 hYvsXTrueLeakIn->GetYaxis()->SetTitle("Y");
03923 hYvsXTrueLeakIn->GetYaxis()->CenterTitle();
03924 //hYvsXTrueLeakIn->SetBit(TH1::kCanRebin);
03925
03926 TH2F* hYvsXRecoLeakIn=new TH2F("hYvsXRecoLeakIn","hYvsXRecoLeakIn",
03927 100,-5,5,100,-5,5);
03928 hYvsXRecoLeakIn->SetTitle("Y vs X");
03929 hYvsXRecoLeakIn->GetXaxis()->SetTitle("X");
03930 hYvsXRecoLeakIn->GetXaxis()->CenterTitle();
03931 hYvsXRecoLeakIn->GetYaxis()->SetTitle("Y");
03932 hYvsXRecoLeakIn->GetYaxis()->CenterTitle();
03933 //hYvsXRecoLeakIn->SetBit(TH1::kCanRebin);
03934
03935 TH2F* hYvsXTrueLeakOut=new TH2F("hYvsXTrueLeakOut","hYvsXTrueLeakOut",
03936 100,-5,5,100,-5,5);
03937 hYvsXTrueLeakOut->SetTitle("Y vs X");
03938 hYvsXTrueLeakOut->GetXaxis()->SetTitle("X");
03939 hYvsXTrueLeakOut->GetXaxis()->CenterTitle();
03940 hYvsXTrueLeakOut->GetYaxis()->SetTitle("Y");
03941 hYvsXTrueLeakOut->GetYaxis()->CenterTitle();
03942 //hYvsXTrueLeakOut->SetBit(TH1::kCanRebin);
03943
03944 TH2F* hYvsXRecoLeakOut=new TH2F("hYvsXRecoLeakOut","hYvsXRecoLeakOut",
03945 100,-5,5,100,-5,5);
03946 hYvsXRecoLeakOut->SetTitle("Y vs X");
03947 hYvsXRecoLeakOut->GetXaxis()->SetTitle("X");
03948 hYvsXRecoLeakOut->GetXaxis()->CenterTitle();
03949 hYvsXRecoLeakOut->GetYaxis()->SetTitle("Y");
03950 hYvsXRecoLeakOut->GetYaxis()->CenterTitle();
03951 //hYvsXRecoLeakOut->SetBit(TH1::kCanRebin);
03952
03953
03954 TH1F* hRecoEnNMBTrkLeakIn=new TH1F("hRecoEnNMBTrkLeakIn",
03955 "hRecoEnNMBTrkLeakIn",
03956 4*352,-32,320);
03957 hRecoEnNMBTrkLeakIn->GetXaxis()->SetTitle("True Energy (GeV)");
03958 hRecoEnNMBTrkLeakIn->GetXaxis()->CenterTitle();
03959 hRecoEnNMBTrkLeakIn->GetYaxis()->SetTitle("");
03960 hRecoEnNMBTrkLeakIn->GetYaxis()->CenterTitle();
03961 //hRecoEnNMBTrkLeakIn->SetBit(TH1::kCanRebin);
03962
03963 TH1F* hRecoEnNMBTrkLeakOut=new TH1F("hRecoEnNMBTrkLeakOut",
03964 "hRecoEnNMBTrkLeakOut",
03965 4*352,-32,320);
03966 hRecoEnNMBTrkLeakOut->GetXaxis()->SetTitle("True Energy (GeV)");
03967 hRecoEnNMBTrkLeakOut->GetXaxis()->CenterTitle();
03968 hRecoEnNMBTrkLeakOut->GetYaxis()->SetTitle("");
03969 hRecoEnNMBTrkLeakOut->GetYaxis()->CenterTitle();
03970 //hRecoEnNMBTrkLeakOut->SetBit(TH1::kCanRebin);
03971
03972
03973
03974 TH2F* hYvsXTrueTrkLeakIn=new TH2F("hYvsXTrueTrkLeakIn",
03975 "hYvsXTrueTrkLeakIn",
03976 100,-5,5,100,-5,5);
03977 hYvsXTrueTrkLeakIn->SetTitle("Y vs X");
03978 hYvsXTrueTrkLeakIn->GetXaxis()->SetTitle("X");
03979 hYvsXTrueTrkLeakIn->GetXaxis()->CenterTitle();
03980 hYvsXTrueTrkLeakIn->GetYaxis()->SetTitle("Y");
03981 hYvsXTrueTrkLeakIn->GetYaxis()->CenterTitle();
03982 //hYvsXTrueTrkLeakIn->SetBit(TH1::kCanRebin);
03983
03984 TH2F* hYvsXRecoTrkLeakIn=new TH2F("hYvsXRecoTrkLeakIn",
03985 "hYvsXRecoTrkLeakIn",
03986 100,-5,5,100,-5,5);
03987 hYvsXRecoTrkLeakIn->SetTitle("Y vs X");
03988 hYvsXRecoTrkLeakIn->GetXaxis()->SetTitle("X");
03989 hYvsXRecoTrkLeakIn->GetXaxis()->CenterTitle();
03990 hYvsXRecoTrkLeakIn->GetYaxis()->SetTitle("Y");
03991 hYvsXRecoTrkLeakIn->GetYaxis()->CenterTitle();
03992 //hYvsXRecoTrkLeakIn->SetBit(TH1::kCanRebin);
03993
03994 TH2F* hYvsXTrueTrkLeakOut=new TH2F("hYvsXTrueTrkLeakOut",
03995 "hYvsXTrueTrkLeakOut",
03996 100,-5,5,100,-5,5);
03997 hYvsXTrueTrkLeakOut->SetTitle("Y vs X");
03998 hYvsXTrueTrkLeakOut->GetXaxis()->SetTitle("X");
03999 hYvsXTrueTrkLeakOut->GetXaxis()->CenterTitle();
04000 hYvsXTrueTrkLeakOut->GetYaxis()->SetTitle("Y");
04001 hYvsXTrueTrkLeakOut->GetYaxis()->CenterTitle();
04002 //hYvsXTrueTrkLeakOut->SetBit(TH1::kCanRebin);
04003
04004 TH2F* hYvsXRecoTrkLeakOut=new TH2F("hYvsXRecoTrkLeakOut",
04005 "hYvsXRecoTrkLeakOut",
04006 100,-5,5,100,-5,5);
04007 hYvsXRecoTrkLeakOut->SetTitle("Y vs X");
04008 hYvsXRecoTrkLeakOut->GetXaxis()->SetTitle("X");
04009 hYvsXRecoTrkLeakOut->GetXaxis()->CenterTitle();
04010 hYvsXRecoTrkLeakOut->GetYaxis()->SetTitle("Y");
04011 hYvsXRecoTrkLeakOut->GetYaxis()->CenterTitle();
04012 //hYvsXRecoTrkLeakOut->SetBit(TH1::kCanRebin);
04013
04014 //vectors
04015 Int_t entries=static_cast<Int_t>(this->GetEntries());
04016 Int_t startTimeSecs=2000000000;//2 billion
04017 Int_t endTimeSecs=1;
04018 vector<Double_t> vPot;
04019 vPot.reserve(entries);
04020 vector<Double_t> vTime;
04021 vTime.reserve(entries);
04022 vector<Double_t> vPotBad;
04023 vPotBad.reserve(entries/10);
04024 vector<Double_t> vTimeBad;
04025 vTimeBad.reserve(entries/10);
04026
04027 vector<Double_t> vTimeNuMuEvt;
04028 vTimeNuMuEvt.reserve(entries/5);
04029 vector<Double_t> vTimeNuMuBarEvt;
04030 vTimeNuMuBarEvt.reserve(entries/5);
04031
04032 //maps to store evt info
04033 map<Int_t,Double_t> deltaTs;
04034 map<Int_t,Int_t> evtsPerSlc;
04035
04036 //counters
04037 Int_t goodSpillCounter=0;
04038 Int_t badSpillCounter=0;
04039 Float_t totalPot=0;
04040 Float_t totalPotBad=0;
04041 Int_t evtCounter=0;
04042 Int_t evtNotlitime=0;
04043 Int_t evtNotIsLI=0;
04044 Int_t evtInFidVolCounter=0;
04045 Int_t evtWithTrkCounter=0;
04046 Int_t goodBestTrkCounter=0;
04047 Int_t goodTrkPassCounter=0;
04048 Int_t goodRecoEnCounter=0;
04049 Int_t goodUVDiffCounter=0;
04050 Int_t trkInFidVolCounter=0;
04051 Int_t goodFitSigQPCounter=0;
04052 Int_t goodFitProbCounter=0;
04053 Int_t goodFitChi2Counter=0;
04054 Int_t goodDeltaTCounter=0;
04055 Int_t goodEvtsPerSlcCounter=0;
04056 Int_t goodPIDCounter=0;
04057 Int_t goodBeyondTrkEndCounter=0;
04058 Int_t goodShwFractCounter=0;
04059 Int_t nuNQCounter=0;
04060 Int_t nuPQCounter=0;
04061
04062 //string sTxtFilePrefix="nmb"+config.sBeamType;
04063 //ofstream& nmbTxt=*(this->OpenTxtFile(config,
04064 // sTxtFilePrefix.c_str()));
04065
04066 //classes to organise the code in to related functions
04067 const NuCuts cuts;
04068 const NuGeneral general;
04069 const NuPlots plots;
04070 const NuReco reco;
04071 const NuExtraction ext;
04072 const NuBeam beam;
04073
04074 //create these on the heap so that they don't destruct
04075 // - on purpose to avoid a segv on destruction... nice coding!
04076 NuMadAnalysis& mad=*new NuMadAnalysis();
04077 MadDpID& dp=*new MadDpID();
04078 //BeamType::BeamType_t beamType=BeamType::kLE;
04079 BeamType::BeamType_t beamType=static_cast
04080 <BeamType::BeamType_t>(config.beamType);
04081
04082 //get an instance of the code library
04083 const NuLibrary& lib=NuLibrary::Instance();
04084
04088
04089 this->InitialiseLoopVariables();
04090
04091 //for(Int_t entry=0;entry<10000;entry++){
04092 for(Int_t entry=0;entry<this->GetEntries();entry++){
04093
04094 this->SetLoopVariables(entry);
04095
04096 //get reference to NtpStRecord from base class
04097 const NtpStRecord& ntp=(*this->GetNtpStRecord());
04098
04099 const RecCandHeader& rec=ntp.GetHeader();
04100 MAXMSG("NuAnalysis",Msg::kInfo,5)
04101 <<"Found: run="<<rec.GetRun()
04102 <<", subrun="<<rec.GetSubRun()
04103 <<", detector="<<rec.GetVldContext().GetDetector()
04104 <<", simFlag="<<rec.GetVldContext().GetSimFlag()
04105 <<endl;
04106
04107 //write out the detector, simflag, etc
04108 plots.FillGeneralHistos(ntp);
04109
04110 //simple event object to hold important quantities for snarl
04111 NuEvent nuSnarl;
04112
04113 //get the run, snarl, etc info
04114 ext.ExtractGeneralInfo(ntp,nuSnarl);
04115
04116 if (!beam.IsGoodSpillAndFillPot
04117 (this->GetNtpBDLiteRecord(),config,nuSnarl)) {
04118 badSpillCounter++;
04119 totalPotBad+=nuSnarl.pot;
04120 continue;
04121 }
04122 goodSpillCounter++;
04123 totalPot+=nuSnarl.pot;
04124
04125 dp.ChoosePDFs(rec.GetVldContext().GetDetector(),beamType);
04126 mad.SetEntry(&ntp);
04127
04128 set<Int_t> setNuMuBarInTrueFidCC;
04129
04130 VldTimeStamp vldts;
04131 //VldTimeStamp vldts(ev.UnixTime,0);
04132 VldContext vc(rec.GetVldContext().GetDetector(),
04133 rec.GetVldContext().GetSimFlag(),vldts);
04134 //get the ugh
04135 UgliGeomHandle ugh(vc);
04136
04137 TClonesArray& mcTca=(*ntp.mc);
04138 Int_t numInt=mcTca.GetEntries();
04139 MAXMSG("NuAnalysis",Msg::kInfo,10)
04140 <<"Number of entries in NtpMCTruth="
04141 <<mcTca.GetEntries()<<endl;
04142
04143 //simple event object to hold important quantities
04144 NuEvent nu;
04145
04146 //get the run, snarl, etc info
04147 ext.ExtractGeneralInfo(ntp,nu);
04148
04149
04151 //loop over true events
04153 for (Int_t i=0;i<numInt;i++){
04154 const NtpMCTruth& mc=*(dynamic_cast<NtpMCTruth*>(mcTca[i]));
04155
04156 TVector3 xyz(mc.vtxx,mc.vtxy,mc.vtxz);
04157 // calculate the positions in UVZ space
04158 TVector3 uvz=ugh.xyz2uvz(xyz);
04159
04160 if (!(mc.iaction==1 && mc.inu==-14)) continue;
04161
04162 Bool_t isInFidVol=cuts.IsInFidVol(mc.vtxx,mc.vtxy,mc.vtxz,
04163 uvz.X(),uvz.Y(),0,0,
04164 nu.detector,nu.anaVersion,
04165 nu.releaseType,nu.simFlag);
04166
04167 if (!isInFidVol) continue;
04168 setNuMuBarInTrueFidCC.insert(mc.index);
04169
04170 hRecoEnNMBFull->Fill(fabs(mc.p4neu[3]));
04171 }
04172
04173 MAXMSG("NuAnalysis",Msg::kInfo,20)
04174 <<"Number of NuMuBar fiducial volume interactions in spill="
04175 <<setNuMuBarInTrueFidCC.size()<<endl;
04176
04177
04178 TClonesArray& thevtTca=(*ntp.thevt);//TruthHelper Event TCA
04179 const Int_t numthevts=thevtTca.GetEntriesFast();
04180 if (numthevts<=0) {
04181 MSG("NuAnalysis",Msg::kWarning)
04182 <<"No THEvents..."<<endl;
04183 continue;
04184 }
04185
04186 set<Int_t> setNuMuBarInRecoFidCC;
04187
04188 TClonesArray& evtTca=(*ntp.evt);
04189 const Int_t numEvts=evtTca.GetEntriesFast();
04190
04192 //loop over the reconstructed events
04194 for (Int_t ievt=0;ievt<numEvts;ievt++){
04195 const NtpSREvent& evt=
04196 *dynamic_cast<NtpSREvent*>(evtTca[ievt]);
04197 evtCounter++;
04198
04199 const NtpTHEvent& thevt=
04200 *dynamic_cast<NtpTHEvent*>(thevtTca[evt.index]);
04201
04202 //now get the mc object (neutrino interaction) that
04203 //corresponds to the evt using the thevt.neumc index
04204 const NtpMCTruth& mc=
04205 *(dynamic_cast<NtpMCTruth*>(mcTca[thevt.neumc]));
04206
04207 //cut out all but numubar cc
04208 if (!(mc.iaction==1 && mc.inu==-14)) continue;
04209
04210 //simple event object to hold important quantities
04211 NuEvent nu;
04212
04213 //get the run, snarl, etc info
04214 ext.ExtractGeneralInfo(ntp,nu);
04215 //get info from the evt
04216 lib.ext.ExtractEvtInfo(evt,nu);
04217 //extract trk info (needed to get best track info)
04218 lib.ext.ExtractTrkInfo(ntp,evt,nu);
04219 //extract shw info
04220 lib.ext.ExtractShwInfo(ntp,evt,nu);
04221
04222 Bool_t isInFidVol=cuts.IsInFidVol(evt.vtx.x,evt.vtx.y,
04223 evt.vtx.z,
04224 evt.vtx.u,evt.vtx.v,0,0,
04225 nu.detector,nu.anaVersion,
04226 nu.releaseType,nu.simFlag);
04227
04228 //make sure that no event is used twice
04229 set<Int_t>::iterator itT=setNuMuBarInRecoFidCC.find(thevt.neumc);
04230 if (itT==setNuMuBarInRecoFidCC.end()) {
04231 MAXMSG("NuAnalysis",Msg::kInfo,20)
04232 <<"Found reco event for mc="<<thevt.neumc<<endl;
04233 setNuMuBarInRecoFidCC.insert(thevt.neumc);
04234 }
04235 else {
04236 MAXMSG("NuAnalysis",Msg::kInfo,20)
04237 <<"Already found reco event for mc="<<thevt.neumc<<endl;
04238 continue;
04239 }
04240
04241 //get the best track in the event
04242 Int_t bestTrack=lib.reco.GetBestTrack(nu);
04243 const NtpSRTrack* ptrk=lib.reco.GetTrackWithIndexX
04244 (ntp,evt,bestTrack-1);
04245 Bool_t trkIsInFidVol=false;
04246 if (ptrk!=0) {
04247 const NtpSRTrack& trk=*ptrk;
04248 trkIsInFidVol=cuts.IsInFidVol(trk.vtx.x,trk.vtx.y,
04249 trk.vtx.z,
04250 trk.vtx.u,trk.vtx.v,0,0,
04251 nu.detector,nu.anaVersion,
04252 nu.releaseType,nu.simFlag);
04253 trkIsInFidVol=true;
04254 }
04255
04256 //these ones are leaking into the fiducial volume
04257 set<Int_t>::iterator itR=setNuMuBarInTrueFidCC.find(thevt.neumc);
04258 if (itR==setNuMuBarInTrueFidCC.end()) {
04259 MAXMSG("NuAnalysis",Msg::kInfo,20)
04260 <<"ievt="<<ievt<<" has no true event in fid"<<endl;
04261 if (isInFidVol){
04262 hRecoEnNMBLeakIn->Fill(fabs(mc.p4neu[3]));
04263 hYvsXRecoLeakIn->Fill(evt.vtx.x,evt.vtx.y);
04264 hYvsXTrueLeakIn->Fill(mc.vtxx,mc.vtxy);
04265 if (trkIsInFidVol){
04266 const NtpSRTrack& trk=*ptrk;
04267 hRecoEnNMBTrkLeakIn->Fill(fabs(mc.p4neu[3]));
04268 hYvsXRecoTrkLeakIn->Fill(trk.vtx.x,trk.vtx.y);
04269 hYvsXTrueTrkLeakIn->Fill(mc.vtxx,mc.vtxy);
04270 }
04271 }
04272 continue;
04273 }
04274
04275 //record events that are reconstructed regardless of fid or not
04276 hRecoEnNMBReco->Fill(fabs(mc.p4neu[3]));
04277
04278 //any event that makes it to here is in the true fid vol
04279
04280 //now check if the events in the true fid vol are in reco fid vol
04281 if (!trkIsInFidVol) {
04282 //these events leaked out of fid vol
04283 if (ptrk){
04284 const NtpSRTrack& trk=*ptrk;
04285 hRecoEnNMBTrkLeakOut->Fill(fabs(mc.p4neu[3]));
04286 hYvsXRecoTrkLeakOut->Fill(trk.vtx.x,trk.vtx.y);
04287 hYvsXTrueTrkLeakOut->Fill(mc.vtxx,mc.vtxy);
04288 }
04289 else{
04290 MAXMSG("NuAnalysis",Msg::kInfo,20)
04291 <<"No track, using evt vtx"<<endl;
04292 hRecoEnNMBTrkLeakOut->Fill(fabs(mc.p4neu[3]));
04293 hYvsXRecoTrkLeakOut->Fill(evt.vtx.x,evt.vtx.y);
04294 hYvsXTrueTrkLeakOut->Fill(mc.vtxx,mc.vtxy);
04295 }
04296 }
04297 if (!isInFidVol) {
04298 //these events leaked out of fid vol
04299 hRecoEnNMBLeakOut->Fill(fabs(mc.p4neu[3]));
04300 hYvsXRecoLeakOut->Fill(evt.vtx.x,evt.vtx.y);
04301 hYvsXTrueLeakOut->Fill(mc.vtxx,mc.vtxy);
04302 continue;
04303 }
04304 evtInFidVolCounter++;
04305 hRecoEnNMBFid->Fill(fabs(mc.p4neu[3]));
04306
04307 //ensure there is a track in the event
04308 if (evt.ntrack<1) continue;
04309 //if (evt.ntrack!=1) continue;//require exactly 1 track
04310 evtWithTrkCounter++;
04311 hRecoEnNMBTrack->Fill(fabs(mc.p4neu[3]));
04312
04313 //get the best track in the event
04314 if (ptrk==0) continue;
04315 const NtpSRTrack& trk=*ptrk;
04316 goodBestTrkCounter++;
04317
04318 //require a trk fit
04319 if (!trk.fit.pass) continue;
04320 goodTrkPassCounter++;
04321 hRecoEnNMBPass->Fill(fabs(mc.p4neu[3]));
04322
04323 //check for wrong sign
04324 if (trk.momentum.qp<=0) continue;
04325 hRecoEnNMBQCut->Fill(fabs(mc.p4neu[3]));
04326
04328 //RECONSTRUCT the neutrino energy
04329 lib.reco.GetEvtEnergy(nu, false);
04330 goodRecoEnCounter++;
04331 //get the truth info (reco quantities are done above)
04332 reco.GetTruthInfo(ntp,evt,nu);
04333 //set the charge
04334 nu.charge=trk.momentum.qp<0 ? -1 : 1;
04335 if (trk.momentum.qp==0) nu.charge=0;
04336
04337 //cut on the fractional track momentum and sign error
04338 if (!cuts.IsGoodSigmaQP_QP(nu)) continue;
04339 goodFitSigQPCounter++;
04340 hRecoEnNMBSigQP->Fill(fabs(mc.p4neu[3]));
04341
04342 //cut on the track fit probability
04343 if (!cuts.IsGoodFitProb(nu)) continue;
04344 goodFitProbCounter++;
04345 hRecoEnNMBProb->Fill(fabs(mc.p4neu[3]));
04346
04347 nu.dpID=dp.CalcPID(&mad,ievt,0);
04348 if (nu.dpID>=-0.1) {
04349 hRecoEnNMBDpID01->Fill(fabs(mc.p4neu[3]));
04350 }
04351
04352 if (nu.dpID>=0.4) {
04353 hRecoEnNMBDpID04->Fill(fabs(mc.p4neu[3]));
04354 }
04355 }
04356 }//end of for
04357
04361
04362 MSG("NuAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
04363
04364 //store the number of files added to the chain
04365 Int_t nf=this->GetNumFilesAddedToChain();
04366 TH1F* hRun=dynamic_cast<TH1F*>(gROOT->FindObject("hRun"));
04367 Float_t nr=-1;
04368 if (hRun) nr=hRun->GetEntries();
04369 TH1F* hNumFiles=new TH1F("hNumFiles","hNumFiles",15,-5,10);
04370 hNumFiles->Fill(1,nf);//store as weight, access with GetMaximum
04371 MSG("NuAnalysis",Msg::kInfo)
04372 <<"Files added to chain="<<hNumFiles->GetMaximum()
04373 <<", runs found="<<nr<<endl;
04374
04375 MSG("NuAnalysis",Msg::kInfo)
04376 <<"Found start time and end time: "
04377 <<startTimeSecs<<" -> "<<endTimeSecs<<endl;
04378 general.EpochTo1995(endTimeSecs);
04379 general.EpochTo1995(startTimeSecs);
04380
04381 MSG("NuAnalysis",Msg::kInfo)<<"Filling vs. Time plots..."<<endl;
04382 TH1F* hSpillsVsTime=new TH1F("hSpillsVsTime","hSpillsVsTime",
04383 100,startTimeSecs,endTimeSecs);
04384 general.TH1FFill(hSpillsVsTime,vTime);
04385 general.SetGraphAxis(hSpillsVsTime->GetXaxis(),
04386 startTimeSecs,endTimeSecs);
04387 hSpillsVsTime->GetXaxis()->CenterTitle();
04388 hSpillsVsTime->GetYaxis()->SetTitle("Spills");
04389 hSpillsVsTime->GetYaxis()->CenterTitle();
04390
04391 TH1F* hSpillsBadVsTime=new TH1F("hSpillsBadVsTime","hSpillsBadVsTime",
04392 100,startTimeSecs,endTimeSecs);
04393 general.TH1FFill(hSpillsBadVsTime,vTimeBad);
04394 general.SetGraphAxis(hSpillsBadVsTime->GetXaxis(),
04395 startTimeSecs,endTimeSecs);
04396 hSpillsBadVsTime->GetXaxis()->CenterTitle();
04397 hSpillsBadVsTime->GetYaxis()->SetTitle("Spills");
04398 hSpillsBadVsTime->GetYaxis()->CenterTitle();
04399
04400 TH1F* hNuMuVsTime=new TH1F("hNuMuVsTime","hNuMuVsTime",
04401 100,startTimeSecs,endTimeSecs);
04402 general.TH1FFill(hNuMuVsTime,vTimeNuMuEvt);
04403 general.SetGraphAxis(hNuMuVsTime->GetXaxis(),
04404 startTimeSecs,endTimeSecs);
04405 hNuMuVsTime->GetXaxis()->CenterTitle();
04406 hNuMuVsTime->GetYaxis()->SetTitle("#nu_#mu events");
04407 hNuMuVsTime->GetYaxis()->CenterTitle();
04408
04409 TH1F* hNuMuBarVsTime=new TH1F("hNuMuBarVsTime","hNuMuBarVsTime",
04410 100,startTimeSecs,endTimeSecs);
04411 general.TH1FFill(hNuMuBarVsTime,vTimeNuMuBarEvt);
04412 general.SetGraphAxis(hNuMuBarVsTime->GetXaxis(),
04413 startTimeSecs,endTimeSecs);
04414 hNuMuBarVsTime->GetXaxis()->CenterTitle();
04415 hNuMuBarVsTime->GetYaxis()->SetTitle("#bar{#nu_#mu} events");
04416 hNuMuBarVsTime->GetYaxis()->CenterTitle();
04417
04418 TH1F* hPotVsTime=new TH1F("hPotVsTime","hPotVsTime",
04419 100,startTimeSecs,endTimeSecs);
04420 general.TH1FFill(hPotVsTime,vTime,vPot);
04421 general.SetGraphAxis(hPotVsTime->GetXaxis(),
04422 startTimeSecs,endTimeSecs);
04423 hPotVsTime->GetXaxis()->CenterTitle();
04424 hPotVsTime->GetYaxis()->SetTitle("POT");
04425 hPotVsTime->GetYaxis()->CenterTitle();
04426
04427 TH1F* hPotBadVsTime=new TH1F("hPotBadVsTime","hPotBadVsTime",
04428 100,startTimeSecs,endTimeSecs);
04429 general.TH1FFill(hPotBadVsTime,vTimeBad,vPotBad);
04430 general.SetGraphAxis(hPotBadVsTime->GetXaxis(),
04431 startTimeSecs,endTimeSecs);
04432 hPotBadVsTime->GetXaxis()->CenterTitle();
04433 hPotBadVsTime->GetYaxis()->SetTitle("POT");
04434 hPotBadVsTime->GetYaxis()->CenterTitle();
04435
04436 Float_t totalPotHist=0;
04437 Float_t totalPotBadHist=0;
04438 cuts.CalcTotalPot(totalPotHist,totalPotBadHist);
04439 Float_t pcPotRejected=0;
04440 if (totalPotHist) pcPotRejected=100.*totalPotBadHist/totalPotHist;
04441
04442 //msg was giving pots=412886000000000000.000000... still is for MC!
04443 cout<<"Number of spills ="<<this->GetEntries()<<endl
04444 <<"Number of good spills="<<goodSpillCounter<<endl
04445 <<"Number of bad spills ="<<badSpillCounter<<endl
04446 <<"Sum of good+bad spill="<<badSpillCounter+goodSpillCounter<<endl
04447 <<endl
04448 <<"Total POT good ="<<totalPot*1e12<<endl
04449 <<"Total POT bad ="<<totalPotBad*1e12<<endl
04450 <<"Total POT good (hist)="<<totalPotHist*1e12<<endl
04451 <<"Total POT bad (hist)="<<totalPotBadHist*1e12
04452 <<" ("<<pcPotRejected<<"%)"<<endl;
04453
04454 MSG("NuAnalysis",Msg::kInfo)
04455 <<endl<<"*************************************"<<endl
04456 <<"Total Events ="<<evtCounter<<endl
04457 <<"Evt not litime ="<<evtNotlitime<<endl
04458 <<"Evt not IsLI ="<<evtNotIsLI<<endl
04459 <<"Evts in Fid ="<<evtInFidVolCounter<<endl
04460 <<"Evts w/ Trk ="<<evtWithTrkCounter<<endl
04461 <<"Good Best Trk ="<<goodBestTrkCounter<<endl
04462 <<"Track Pass ="<<goodTrkPassCounter<<endl
04463 <<"Good reco energy="<<goodRecoEnCounter<<endl
04464 <<"Good UVDiff ="<<goodUVDiffCounter<<endl
04465 <<"Trk Vtx in Fid ="<<trkInFidVolCounter<<endl
04466 <<"Good Fit SigQP ="<<goodFitSigQPCounter<<endl
04467 <<"Good Fit Prob ="<<goodFitProbCounter<<endl
04468 <<"Good Fit Chi2 ="<<goodFitChi2Counter<<endl
04469 <<"Good Delta T ="<<goodDeltaTCounter<<endl
04470 <<"Good EvtPerSlc ="<<goodEvtsPerSlcCounter<<endl
04471 <<"Good DP ID ="<<goodPIDCounter<<endl
04472 <<"Good beyond tEnd="<<goodBeyondTrkEndCounter<<endl
04473 <<"Good shw fract ="<<goodShwFractCounter<<endl
04474 <<"*************************************"<<endl;
04475
04476 Float_t pcPQ=0;
04477 if (nuPQCounter+nuNQCounter>0) pcPQ=100.*nuPQCounter/
04478 (nuPQCounter+nuNQCounter);
04479 MSG("NuAnalysis",Msg::kInfo)
04480 <<endl
04481 <<"Neutrinos with NQ="<<nuNQCounter<<endl
04482 <<"Neutrinos with PQ="<<nuPQCounter
04483 <<" ("<<pcPQ<<"%)"<<endl
04484 <<"Sum NQ+PQ ="<<nuNQCounter+nuPQCounter<<endl
04485 <<endl;
04486
04487 MSG("NuAnalysis",Msg::kInfo)
04488 <<" ** Finished Efficiencies method **"<<endl;
04489 }
|
|
|
Definition at line 348 of file NuAnalysis.cxx. References abs(), NtpMCStdHep::child, NtpStRecord::evt, NtpSRTrack::fit, NuBase::GetEntries(), NuBase::GetNtpStRecord(), NtpSRStripPulseHeight::gev, NtpMCTruth::iaction, NtpMCStdHep::IdHEP, NtpSRTrack::index, NuBase::InitialiseLoopVariables(), NtpMCTruth::inu, NtpMCTruth::iresonance, NtpMCStdHep::IstHEP, NtpMCStdHep::mass, MAXMSG, NtpMCStdHep::mc, NtpStRecord::mc, NtpSRTrack::momentum, MSG, NtpTHTrack::neumc, NtpSREvent::nshower, NtpSREvent::ntrack, NuBase::OpenFile(), NtpMCStdHep::p4, NtpMCTruth::p4mu1, NtpMCTruth::p4neu, NtpMCStdHep::parent, NtpSRFitTrack::pass, NtpSRShower::ph, NtpSRMomentum::qp, NtpSRMomentum::range, NuBase::SetLoopVariables(), NtpSREvent::shw, NtpStRecord::shw, NtpStRecord::stdhep, NtpStRecord::thshw, NtpStRecord::thtrk, NtpSREvent::trk, and NtpStRecord::trk. 00349 {
00350 MSG("NuAnalysis",Msg::kInfo)
00351 <<" ** Running Efficiencies method... **"<<endl;
00352
00353 //open the output file for the histograms
00354 fOutFile=this->OpenFile(100,"NuEfficiencies");
00355
00356 TProfile* pNuMuBarQEffVsEn=new TProfile("pNuMuBarQEffVsEn","pNuMuBarQEffVsEn",50,0,50);
00357 pNuMuBarQEffVsEn->SetTitle("Charge Sign Efficiency vs. True Neutrino Energy");
00358 pNuMuBarQEffVsEn->GetXaxis()->SetTitle("Energy (GeV)");
00359 pNuMuBarQEffVsEn->GetXaxis()->CenterTitle();
00360 pNuMuBarQEffVsEn->GetYaxis()->SetTitle("Efficiency");
00361 pNuMuBarQEffVsEn->GetYaxis()->CenterTitle();
00362 pNuMuBarQEffVsEn->SetLineColor(1);
00363 pNuMuBarQEffVsEn->SetFillColor(0);
00364 //pNuMuBarQEffVsEn->SetBit(TH1::kCanRebin);
00365
00366 TProfile* pNuMuQEffVsEn=new TProfile("pNuMuQEffVsEn","pNuMuQEffVsEn",50,0,50);
00367 pNuMuQEffVsEn->SetTitle("Charge Sign Efficiency vs. True Neutrino Energy");
00368 pNuMuQEffVsEn->GetXaxis()->SetTitle("Energy (GeV)");
00369 pNuMuQEffVsEn->GetXaxis()->CenterTitle();
00370 pNuMuQEffVsEn->GetYaxis()->SetTitle("Efficiency");
00371 pNuMuQEffVsEn->GetYaxis()->CenterTitle();
00372 pNuMuQEffVsEn->SetLineColor(1);
00373 pNuMuQEffVsEn->SetFillColor(0);
00374 //pNuMuQEffVsEn->SetBit(TH1::kCanRebin);
00375
00376 TProfile* pNuMuBarFitPassVsEn=new TProfile("pNuMuBarFitPassVsEn","pNuMuBarFitPassVsEn",50,0,50);
00377 pNuMuBarFitPassVsEn->SetTitle("Fit Pass Fraction vs. True Neutrino Energy");
00378 pNuMuBarFitPassVsEn->GetXaxis()->SetTitle("Energy (GeV)");
00379 pNuMuBarFitPassVsEn->GetXaxis()->CenterTitle();
00380 pNuMuBarFitPassVsEn->GetYaxis()->SetTitle("Pass Fraction");
00381 pNuMuBarFitPassVsEn->GetYaxis()->CenterTitle();
00382 pNuMuBarFitPassVsEn->SetLineColor(1);
00383 pNuMuBarFitPassVsEn->SetFillColor(0);
00384 //pNuMuBarFitPassVsEn->SetBit(TH1::kCanRebin);
00385
00386 TProfile* pNuMuFitPassVsEn=new TProfile("pNuMuFitPassVsEn","pNuMuFitPassVsEn",50,0,50);
00387 pNuMuFitPassVsEn->SetTitle("Fit Pass Fraction vs. True Neutrino Energy");
00388 pNuMuFitPassVsEn->GetXaxis()->SetTitle("Energy (GeV)");
00389 pNuMuFitPassVsEn->GetXaxis()->CenterTitle();
00390 pNuMuFitPassVsEn->GetYaxis()->SetTitle("Pass Fraction");
00391 pNuMuFitPassVsEn->GetYaxis()->CenterTitle();
00392 pNuMuFitPassVsEn->SetLineColor(1);
00393 pNuMuFitPassVsEn->SetFillColor(0);
00394 //pNuMuFitPassVsEn->SetBit(TH1::kCanRebin);
00395
00399
00400 this->InitialiseLoopVariables();
00401
00402 //for(Int_t entry=0;entry<10000;entry++){
00403 for(Int_t entry=0;entry<this->GetEntries();entry++){
00404
00405 this->SetLoopVariables(entry);
00406
00407 //get reference to NtpStRecord from base class
00408 const NtpStRecord& ntp=(*this->GetNtpStRecord());
00409
00410 TClonesArray& mcTca=*ntp.mc;
00411 Int_t numInt=mcTca.GetEntries();
00412 MAXMSG("NuAnalysis",Msg::kInfo,20)
00413 <<"Number of entries in NtpMCTruth="
00414 <<mcTca.GetEntries()<<endl;
00415 //if (mcTca.GetEntries()==0){
00416
00417 TClonesArray& evtTca=(*ntp.evt);
00418 const Int_t numEvts=evtTca.GetEntriesFast();
00419
00420 TClonesArray& trkTca=(*ntp.trk);
00421 const Int_t numTrks=trkTca.GetEntriesFast();
00422
00423 TClonesArray& thtrkTca=(*ntp.thtrk);//TruthHelper Track TCA
00424 const Int_t numthtrks=thtrkTca.GetEntriesFast();
00425
00426 TClonesArray& thshwTca=(*ntp.thshw);//TruthHelper Shw TCA
00427 const Int_t numthshws=thshwTca.GetEntriesFast();
00428
00429 TClonesArray& shwTca=(*ntp.shw);
00430 const Int_t numShws=shwTca.GetEntriesFast();
00431
00432 //TClonesArray& stpTca=(*ntp.stp);
00433 //const Int_t numStps=stpTca.GetEntries();
00434
00435 //TClonesArray& slcTca=(*ntp.slc);
00436 //const Int_t numSlcs=slcTca.GetEntries();
00437
00438 TClonesArray& hepTca=(*ntp.stdhep);
00439 const Int_t numHeps=hepTca.GetEntriesFast();
00440 MAXMSG("NuAnalysis",Msg::kInfo,1000)
00441 <<"Num stdhep entries="<<numHeps<<endl;
00442
00443 Int_t charmEvent=-1;
00444
00445 //loop over stdhep
00446 for (Int_t ihep=0;ihep<numHeps;++ihep) {
00447 const NtpMCStdHep& stdhep=
00448 *dynamic_cast<NtpMCStdHep*>(hepTca[ihep]);
00449
00450 MAXMSG("NuAnalysis",Msg::kInfo,3000)
00451 <<"ihep="<<ihep
00452 <<", mc="<<stdhep.mc
00453 <<", id="<<stdhep.IdHEP
00454 <<", Ist="<<stdhep.IstHEP
00455 <<", parent=["<<stdhep.parent[0]<<","<<stdhep.parent[1]<<"]"
00456 <<", child=["<<stdhep.child[0]<<","<<stdhep.child[1]<<"]"
00457 <<", m="<<stdhep.mass
00458 <<", E="<<stdhep.p4[3]
00459 <<endl;
00460
00461 if (abs(stdhep.IdHEP)==411 || abs(stdhep.IdHEP)==421 ||
00462 abs(stdhep.IdHEP)==431 || abs(stdhep.IdHEP)==4122){
00463 charmEvent=stdhep.mc;
00464 MAXMSG("NuAnalysis",Msg::kInfo,3000)
00465 <<"Found Charm event, mc="<<charmEvent
00466 <<", id="<<stdhep.IdHEP<<endl;
00467 }
00468 }
00469
00470 if (charmEvent!=-1){
00471 MAXMSG("NuAnalysis",Msg::kInfo,3000)
00472 <<"CHARM EVENT, mc="<<charmEvent
00473 <<", entry="<<entry<<endl;
00474 //loop over stdhep
00475 for (Int_t ihep=0;ihep<numHeps;++ihep) {
00476 const NtpMCStdHep& stdhep=
00477 *dynamic_cast<NtpMCStdHep*>(hepTca[ihep]);
00478
00479 if (stdhep.mc!=charmEvent) continue;
00480
00481 MAXMSG("NuAnalysis",Msg::kInfo,3000)
00482 <<"CH: i="<<ihep
00483 <<", mc="<<stdhep.mc
00484 <<", id="<<stdhep.IdHEP
00485 <<", Ist="<<stdhep.IstHEP
00486 <<", par=["<<stdhep.parent[0]<<","<<stdhep.parent[1]<<"]"
00487 <<", chi=["<<stdhep.child[0]<<","<<stdhep.child[1]<<"]"
00488 <<", m="<<stdhep.mass
00489 <<", E="<<stdhep.p4[3]
00490 <<endl;
00491 }
00492 }
00493
00494 //loop over the events
00495 for (Int_t ntpevt=0;ntpevt<numEvts;++ntpevt) {
00496 const NtpSREvent& evt=
00497 *dynamic_cast<NtpSREvent*>(evtTca[ntpevt]);
00498
00499 //ensure there is only 1 track in the event
00500 if (evt.ntrack!=1) continue;
00501
00502 const NtpSRTrack& trk=
00503 *dynamic_cast<NtpSRTrack*>(trkTca[evt.trk[0]]);
00504
00505 //sum up the energy of the showers
00506 Float_t totalShwEn=0;
00507 for (Int_t ishw=0;ishw<evt.nshower;++ishw) {
00508 const NtpSRShower& shw=
00509 *dynamic_cast<NtpSRShower*>(shwTca[evt.shw[ishw]]);
00510 totalShwEn+=shw.ph.gev;
00511 }
00512
00513 MAXMSG("NuAnalysis",Msg::kInfo,100)
00514 <<"Entry "<<entry<<", event "<<ntpevt
00515 <<" has tracks="<<evt.ntrack
00516 <<", evts="<<numEvts
00517 <<", trks="<<numTrks<<", thtrks="<<numthtrks
00518 <<", shws="<<numShws<<", thshws="<<numthshws
00519 <<endl;
00520 //<<", shws="<<numShws<<", slcs="<<numSlcs<<endl;
00521
00522 //there is a 1 to 1 correspondance between tracks and thtrks
00523 //so just use trk.index to index into the thtrkTca
00524 const NtpTHTrack& thtrk=
00525 *dynamic_cast<NtpTHTrack*>(thtrkTca[trk.index]);
00526 MAXMSG("NuAnalysis",Msg::kInfo,100)
00527 <<"numInt="<<numInt<<", thtrk.neumc="<<thtrk.neumc<<endl;
00528
00529 //now get the mc object (neutrino interaction) that
00530 //corresponds to the trk using the thtrk.neumc index
00531 const NtpMCTruth& mc=
00532 *(dynamic_cast<NtpMCTruth*>(mcTca[thtrk.neumc]));
00533
00534 string iaction="NC";
00535 if (mc.iaction==1) iaction="CC";
00536 string iresonance="QE ";
00537 if (mc.iresonance==1002) iresonance="RES";
00538 else if (mc.iresonance==1003) iresonance="DIS";
00539 else if (mc.iresonance==1004) iresonance=
00540 "Coherent pion production";
00541 string inu="??";
00542 if (mc.inu==14) inu="NuMu ";
00543 else if (mc.inu==-14) inu="NuMuBar";
00544 else if (mc.inu==12) inu="NuE ";
00545 else if (mc.inu==-12) inu="NuEBar ";
00546
00547 Float_t trkCurveP=0;
00548 if (trk.momentum.qp!=0) trkCurveP=1./trk.momentum.qp;
00549
00550 MAXMSG("NuAnalysis",Msg::kInfo,100)
00551 <<""<<inu
00552 <<" "<<iaction
00553 <<" "<<iresonance
00554 <<", E="<<mc.p4neu[3]<<", mu="<<mc.p4mu1[3]<<" GeV"
00555 <<", Reco: trk="<<trk.momentum.range
00556 <<" (curv="<<trkCurveP<<")"
00557 <<", shw="<<totalShwEn//<<", evt="<<evt.ph.gev
00558 <<endl;
00559
00560 //cut out the NCs
00561 if (mc.iaction==0) continue;
00562
00563 Int_t chargeMC=0;
00564 if (mc.p4mu1[3]<0) chargeMC=-1;
00565 else if (mc.p4mu1[3]>0) chargeMC=+1;
00566
00567 Int_t charge=0;
00568 if (trk.momentum.qp<0) charge=-1;
00569 else if (trk.momentum.qp>0) charge=+1;
00570
00571 //fill profiles
00572 if (mc.inu==14) {
00573 pNuMuFitPassVsEn->Fill(mc.p4neu[3],trk.fit.pass);
00574 }
00575 else if (mc.inu==-14) {
00576 pNuMuBarFitPassVsEn->Fill(mc.p4neu[3],trk.fit.pass);
00577 }
00578
00579 if (trk.fit.pass){
00580 if (mc.inu==14) {
00581 pNuMuQEffVsEn->Fill(mc.p4neu[3],charge==chargeMC);
00582 }
00583 else if (mc.inu==-14) {
00584 pNuMuBarQEffVsEn->Fill(mc.p4neu[3],charge==chargeMC);
00585 }
00586 }
00587
00588 //TruthHelperNtuple
00589 //NtpTHModule NtpTHEvent NtpTHRecord NtpTHShower NtpTHSlice
00590 //NtpTHStrip NtpTHTrack
00591 //trk.momentum.qp
00592 //trk.momentum.eqp
00593 //trk.momentum.range
00594 }
00595 }//end of for
00596
00600
00601 MSG("NuAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
00602
00603 MSG("NuAnalysis",Msg::kInfo)
00604 <<" ** Finished Efficiencies method **"<<endl;
00605 }
|
|
|
Definition at line 6496 of file NuAnalysis.cxx. References StoreOrFinishTree(), and NuBase::WriteOutHistos(). Referenced by NuModule::EndJob(). 06497 {
06498 this->StoreOrFinishTree(NULL,NULL,1);
06499
06500 //write out any histos if a file was opened
06501 //StoreOrFinishTree deals with the output usually
06502 cout<<"fOutFile="<<fOutFile<<endl;
06503 this->WriteOutHistos();
06504 }
|
|
|
Definition at line 5033 of file NuAnalysis.cxx. References NuEvent::anaVersion, ReleaseType::AsString(), NuConfig::beamType, NtpSRPlane::beg, MadDpID::CalcPID(), NuCuts::CalcTotalPot(), NuEvent::charge, MadDpID::ChoosePDFs(), NuEvent::containmentFlag, NuConfig::detector, NuEvent::detector, NuEvent::dpID, NuEvent::energy, NuGeneral::EpochTo1995(), NuEvent::evt, NtpStRecord::evt, NtpStRecord::evthdr, NuLibrary::ext, ExtractConfig(), NuExtraction::ExtractEvtInfo(), NuExtraction::ExtractGeneralInfo(), NuExtraction::ExtractShwInfo(), NuExtraction::ExtractTrkInfo(), NuPlots::FillContainmentHistos(), NuPlots::FillDPIdSigmaQPPlotsN(), NuPlots::FillGeneralHistos(), NuPlots::FillRecoEnYHistosN(), NuPlots::FillShwHistos(), NuPlots::FillSigmaQPPlots(), NuPlots::FillTrackResponseHistos(), NuPlots::FillTrueDpIDHistos(), NuPlots::FillTrueDpIDHistosPQNQ(), NuPlots::FillTrueFidEnergySpect(), NuPlots::FillTruePIDHistos(), NuPlots::FillXYZHistos(), NtpSRTrack::fit, NuReco::GetBestTrack(), VldContext::GetDetector(), NuBase::GetEntries(), NuReco::GetEvtDeltaTs(), NuReco::GetEvtEnergy(), NuReco::GetEvtsPerSlc(), RecRecordImp< T >::GetHeader(), NuBase::GetNtpBDLiteRecord(), NuBase::GetNtpStRecord(), RecDataHeader::GetRun(), VldTimeStamp::GetSec(), VldContext::GetSimFlag(), RecDataHeader::GetSubRun(), VldContext::GetTimeStamp(), NuReco::GetTrackWithIndexX(), NuReco::GetTruthInfo(), RecHeader::GetVldContext(), NuBase::InitialiseLoopVariables(), NuLibrary::Instance(), NuCuts::IsGoodDpID(), NuCuts::IsGoodFitChi2PerNdof(), NuCuts::IsGoodFitProb(), NuCuts::IsGoodSigmaQP_QP(), NuBeam::IsGoodSpillAndFillPot(), NuCuts::IsGoodUVVtx(), NuCuts::IsInFidVol(), LISieve::IsLI(), NtpSREventSummary::litime, MAXMSG, NtpSRTrack::momentum, MSG, NtpSREvent::ntrack, NuBase::OpenFile(), NuBase::OpenTxtFile(), NtpSRFitTrack::pass, NtpSRTrack::plane, plots(), NuEvent::pot, NtpSRMomentum::qp, NuLibrary::reco, NuEvent::releaseType, NuEvent::run, NuConfig::run, NuConfig::sBeamType, NuMadAnalysis::SetEntry(), NuGeneral::SetGraphAxis(), NuBase::SetLoopVariables(), NuEvent::simFlag, NuEvent::snarl, NuGeneral::TH1FFill(), NuEvent::trkEnMC, NuEvent::trkEnRange, NtpSRVertex::u, NtpSRVertex::v, NtpSRTrack::vtx, NtpSREvent::vtx, NtpSRVertex::x, NuEvent::y, NtpSRVertex::y, and NtpSRVertex::z. 05034 {
05035 MSG("NuAnalysis",Msg::kInfo)
05036 <<" ** Running EnergySpect method... **"<<endl;
05037
05038 NuConfig config;
05039 this->ExtractConfig(config);
05040
05041 //open the output file for the histograms
05042 string sFilePrefix="NMBEnSp"+config.sBeamType;
05043 fOutFile=this->OpenFile(config,sFilePrefix.c_str());
05044
05045 TH1F* hNuMuBarRecoEn=new TH1F("hNuMuBarRecoEn","hNuMuBarRecoEn",
05046 4*352,-32,320);
05047 hNuMuBarRecoEn->GetXaxis()->SetTitle("Energy (GeV)");
05048 hNuMuBarRecoEn->GetXaxis()->CenterTitle();
05049 hNuMuBarRecoEn->GetYaxis()->SetTitle("");
05050 hNuMuBarRecoEn->GetYaxis()->CenterTitle();
05051 hNuMuBarRecoEn->SetFillColor(0);
05052 hNuMuBarRecoEn->SetLineColor(2);
05053 //hNuMuBarRecoEn->SetBit(TH1::kCanRebin);
05054
05055 TH1F* hNuMuRecoEn=new TH1F("hNuMuRecoEn","hNuMuRecoEn",4*352,-32,320);
05056 hNuMuRecoEn->GetXaxis()->SetTitle("Energy (GeV)");
05057 hNuMuRecoEn->GetXaxis()->CenterTitle();
05058 hNuMuRecoEn->GetYaxis()->SetTitle("");
05059 hNuMuRecoEn->GetYaxis()->CenterTitle();
05060 hNuMuRecoEn->SetFillColor(0);
05061 hNuMuRecoEn->SetLineColor(1);
05062 hNuMuRecoEn->SetLineWidth(2);
05063 //hNuMuRecoEn->SetBit(TH1::kCanRebin);
05064
05065 TH1F* hNuMuBarRecoY=new TH1F("hNuMuBarRecoY","hNuMuBarRecoY",
05066 4*144,-0.16,1.28);
05067 hNuMuBarRecoY->GetXaxis()->SetTitle("y");
05068 hNuMuBarRecoY->GetXaxis()->CenterTitle();
05069 hNuMuBarRecoY->GetYaxis()->SetTitle("");
05070 hNuMuBarRecoY->GetYaxis()->CenterTitle();
05071 hNuMuBarRecoY->SetFillColor(0);
05072 hNuMuBarRecoY->SetLineColor(2);
05073 //hNuMuBarRecoY->SetBit(TH1::kCanRebin);
05074
05075 TH1F* hNuMuRecoY=new TH1F("hNuMuRecoY","hNuMuRecoY",4*144,-0.16,1.28);
05076 hNuMuRecoY->GetXaxis()->SetTitle("y");
05077 hNuMuRecoY->GetXaxis()->CenterTitle();
05078 hNuMuRecoY->GetYaxis()->SetTitle("");
05079 hNuMuRecoY->GetYaxis()->CenterTitle();
05080 hNuMuRecoY->SetFillColor(0);
05081 hNuMuRecoY->SetLineColor(1);
05082 hNuMuRecoY->SetLineWidth(2);
05083 //hNuMuRecoY->SetBit(TH1::kCanRebin);
05084
05085 TH1F* hDpIDAll=new TH1F("hDpIDAll","hDpIDAll",4*160,-1.6,1.6);
05086 hDpIDAll->GetXaxis()->SetTitle("PID (from MadDpID)");
05087 hDpIDAll->GetXaxis()->CenterTitle();
05088 hDpIDAll->GetYaxis()->SetTitle("");
05089 hDpIDAll->GetYaxis()->CenterTitle();
05090 hDpIDAll->SetFillColor(0);
05091 hDpIDAll->SetLineColor(1);
05092 hDpIDAll->SetLineWidth(2);
05093 //hDpIDAll->SetBit(TH1::kCanRebin);
05094
05095 TH1F* hDpIDPQ=new TH1F("hDpIDPQ","hDpIDPQ",4*160,-1.6,1.6);
05096 hDpIDPQ->GetXaxis()->SetTitle("PID (from MadDpID)");
05097 hDpIDPQ->GetXaxis()->CenterTitle();
05098 hDpIDPQ->GetYaxis()->SetTitle("");
05099 hDpIDPQ->GetYaxis()->CenterTitle();
05100 hDpIDPQ->SetFillColor(0);
05101 hDpIDPQ->SetLineColor(1);
05102 hDpIDPQ->SetLineWidth(2);
05103 //hDpIDPQ->SetBit(TH1::kCanRebin);
05104
05105 TH1F* hDpIDNQ=new TH1F("hDpIDNQ","hDpIDNQ",4*160,-1.6,1.6);
05106 hDpIDNQ->GetXaxis()->SetTitle("PID (from MadDpID)");
05107 hDpIDNQ->GetXaxis()->CenterTitle();
05108 hDpIDNQ->GetYaxis()->SetTitle("");
05109 hDpIDNQ->GetYaxis()->CenterTitle();
05110 hDpIDNQ->SetFillColor(0);
05111 hDpIDNQ->SetLineColor(1);
05112 hDpIDNQ->SetLineWidth(2);
05113 //hDpIDNQ->SetBit(TH1::kCanRebin);
05114
05115 TH1F* hDpIDPQN_1=new TH1F("hDpIDPQN_1","hDpIDPQN_1",4*160,-1.6,1.6);
05116 hDpIDPQN_1->GetXaxis()->SetTitle("PID (from MadDpID)");
05117 hDpIDPQN_1->GetXaxis()->CenterTitle();
05118 hDpIDPQN_1->GetYaxis()->SetTitle("");
05119 hDpIDPQN_1->GetYaxis()->CenterTitle();
05120 hDpIDPQN_1->SetFillColor(0);
05121 hDpIDPQN_1->SetLineColor(1);
05122 hDpIDPQN_1->SetLineWidth(2);
05123 //hDpIDPQN_1->SetBit(TH1::kCanRebin);
05124
05125 TH1F* hDpIDNQN_1=new TH1F("hDpIDNQN_1","hDpIDNQN_1",4*160,-1.6,1.6);
05126 hDpIDNQN_1->GetXaxis()->SetTitle("PID (from MadDpID)");
05127 hDpIDNQN_1->GetXaxis()->CenterTitle();
05128 hDpIDNQN_1->GetYaxis()->SetTitle("");
05129 hDpIDNQN_1->GetYaxis()->CenterTitle();
05130 hDpIDNQN_1->SetFillColor(0);
05131 hDpIDNQN_1->SetLineColor(1);
05132 hDpIDNQN_1->SetLineWidth(2);
05133 //hDpIDNQN_1->SetBit(TH1::kCanRebin);
05134
05135 //vectors
05136 Int_t entries=static_cast<Int_t>(this->GetEntries());
05137 Int_t startTimeSecs=2000000000;//2 billion
05138 Int_t endTimeSecs=1;
05139 vector<Double_t> vPot;
05140 vPot.reserve(entries);
05141 vector<Double_t> vTime;
05142 vTime.reserve(entries);
05143 vector<Double_t> vPotBad;
05144 vPotBad.reserve(entries/10);
05145 vector<Double_t> vTimeBad;
05146 vTimeBad.reserve(entries/10);
05147
05148 vector<Double_t> vTimeNuMuEvt;
05149 vTimeNuMuEvt.reserve(entries/5);
05150 vector<Double_t> vTimeNuMuBarEvt;
05151 vTimeNuMuBarEvt.reserve(entries/5);
05152
05153 //maps to store evt info
05154 map<Int_t,Double_t> deltaTs;
05155 map<Int_t,Int_t> evtsPerSlc;
05156
05157 //counters
05158 Int_t goodSpillCounter=0;
05159 Int_t badSpillCounter=0;
05160 Float_t totalPot=0;
05161 Float_t totalPotBad=0;
05162 Int_t evtCounter=0;
05163 Int_t evtNotlitime=0;
05164 Int_t evtNotIsLI=0;
05165 Int_t evtInFidVolCounter=0;
05166 Int_t evtWithTrkCounter=0;
05167 Int_t goodBestTrkCounter=0;
05168 Int_t goodTrkPassCounter=0;
05169 Int_t goodRecoEnCounter=0;
05170 Int_t goodUVDiffCounter=0;
05171 Int_t trkInFidVolCounter=0;
05172 Int_t goodFitSigQPCounter=0;
05173 Int_t goodFitProbCounter=0;
05174 Int_t goodFitChi2Counter=0;
05175 Int_t goodDeltaTCounter=0;
05176 Int_t goodEvtsPerSlcCounter=0;
05177 Int_t goodPIDCounter=0;
05178 Int_t goodBeyondTrkEndCounter=0;
05179 Int_t goodShwFractCounter=0;
05180 Int_t nuNQCounter=0;
05181 Int_t nuPQCounter=0;
05182
05183 string sTxtFilePrefix="nmb"+config.sBeamType;
05184 ofstream& nmbTxt=*(this->OpenTxtFile(config,
05185 sTxtFilePrefix.c_str()));
05186
05187 //classes to organise the code in to related functions
05188 const NuCuts cuts;
05189 const NuGeneral general;
05190 const NuPlots plots;
05191 const NuReco reco;
05192 const NuExtraction ext;
05193 const NuBeam beam;
05194
05195 //create these on the heap so that they don't destruct
05196 // - on purpose to avoid a segv on destruction... nice coding!
05197 NuMadAnalysis& mad=*new NuMadAnalysis();
05198 MadDpID& dp=*new MadDpID();
05199 //BeamType::BeamType_t beamType=BeamType::kLE;
05200 BeamType::BeamType_t beamType=static_cast
05201 <BeamType::BeamType_t>(config.beamType);
05202
05203 //define the analysis (cuts and reco) to use
05204 NuCuts::NuAnaVersion_t anaVersion=NuCuts::kJJH1;
05205
05206 //get an instance of the code library
05207 const NuLibrary& lib=NuLibrary::Instance();
05208
05212
05213 cout<<endl
05214 <<"************************************************"<<endl
05215 <<"*** Starting main loop over snarls ***"<<endl
05216 <<"************************************************"<<endl;
05217
05218 this->InitialiseLoopVariables();
05219
05220 //for(Int_t entry=12100;entry<this->GetEntries();entry++){
05221 for(Int_t entry=0;entry<this->GetEntries();entry++){
05222
05223 this->SetLoopVariables(entry);
05224
05225 //get reference to NtpStRecord from base class
05226 const NtpStRecord& ntp=(*this->GetNtpStRecord());
05227
05228 const RecCandHeader& rec=ntp.GetHeader();
05229 MAXMSG("NuAnalysis",Msg::kInfo,5)
05230 <<"Found: run="<<rec.GetRun()
05231 <<", subrun="<<rec.GetSubRun()
05232 <<", detector="<<rec.GetVldContext().GetDetector()
05233 <<", simFlag="<<rec.GetVldContext().GetSimFlag()
05234 <<endl;
05235
05236 //write out the detector, simflag, etc
05237 plots.FillGeneralHistos(ntp);
05238
05239 //simple event object to hold important quantities for snarl
05240 NuEvent nuSnarl;
05241 //set the analysis (cuts and reco) version to use
05242 nuSnarl.anaVersion=anaVersion;
05243 //get the run, snarl, etc info
05244 ext.ExtractGeneralInfo(ntp,nuSnarl);
05245
05246 //get the true energy spectra of events in the fid vol
05247 plots.FillTrueFidEnergySpect(nuSnarl);
05248
05249 Int_t evTime=rec.GetVldContext().GetTimeStamp().GetSec();
05250 //get the min and max times
05251 if (evTime>endTimeSecs) endTimeSecs=evTime;
05252 if (evTime<startTimeSecs && evTime>0) startTimeSecs=evTime;
05253 if (evTime<=0) cout<<"Bad time="<<evTime<<endl;
05254 //convert to 1995 time
05255 general.EpochTo1995(evTime);
05256
05257 if (!beam.IsGoodSpillAndFillPot
05258 (this->GetNtpBDLiteRecord(),config,nuSnarl)) {
05259 badSpillCounter++;
05260 totalPotBad+=nuSnarl.pot;
05261 vPotBad.push_back(nuSnarl.pot*1e12);
05262 vTimeBad.push_back(evTime);
05263 continue;
05264 }
05265 goodSpillCounter++;
05266 totalPot+=nuSnarl.pot;
05267 vPot.push_back(nuSnarl.pot*1e12);
05268 vTime.push_back(evTime);
05269
05270 dp.ChoosePDFs(rec.GetVldContext().GetDetector(),beamType,
05271 ReleaseType::AsString(nuSnarl.releaseType),
05272 ReleaseType::AsString(nuSnarl.releaseType));
05273 mad.SetEntry(&ntp);
05274
05275 TClonesArray& evtTca=(*ntp.evt);
05276 const Int_t numEvts=evtTca.GetEntriesFast();
05277
05279 //loop over the reconstructed events
05281 for (Int_t ievt=0;ievt<numEvts;ievt++){
05282 const NtpSREvent& evt=
05283 *dynamic_cast<NtpSREvent*>(evtTca[ievt]);
05284 evtCounter++;
05285
05286 const NtpSREventSummary& evthdr=ntp.evthdr;
05287
05288 if (evthdr.litime!=-1) {
05289 MAXMSG("NuAnalysis",Msg::kInfo,500)
05290 <<"skipping event: litime="<<evthdr.litime<<endl;
05291 continue;
05292 }
05293 evtNotlitime++;
05294
05295 Bool_t isLI=LISieve::IsLI(ntp);
05296 if (isLI){
05297 MAXMSG("NuAnalysis",Msg::kInfo,50)
05298 <<"Found LI"
05299 <<", run="<<config.run
05300 <<", entry="<<entry
05301 <<", event="<<ievt
05302 <<", litime="<<evthdr.litime
05303 <<endl;
05304 }
05305 else {
05306 MAXMSG("NuAnalysis",Msg::kInfo,50)
05307 <<"Not LI"
05308 <<", run="<<config.run
05309 <<", entry="<<entry
05310 <<", event="<<ievt
05311 <<", litime="<<evthdr.litime
05312 <<endl;
05313 }
05314 if (isLI) continue;
05315 evtNotIsLI++;
05316
05317 //simple event object to hold important quantities
05318 NuEvent nu;
05319
05320 //get the run, snarl, etc info
05321 ext.ExtractGeneralInfo(ntp,nu);
05322 //get info from the evt
05323 lib.ext.ExtractEvtInfo(evt,nu);
05324 //extract trk info (needed to get best track info)
05325 lib.ext.ExtractTrkInfo(ntp,evt,nu);
05326 //extract shw info
05327 lib.ext.ExtractShwInfo(ntp,evt,nu);
05328
05329 Bool_t isInFidVol=cuts.IsInFidVol(evt.vtx.x,evt.vtx.y,
05330 evt.vtx.z,
05331 evt.vtx.u,evt.vtx.v,0,0,
05332 nu.detector,nu.anaVersion,
05333 nu.releaseType,nu.simFlag);
05334
05335 if (!isInFidVol) continue;
05336 evtInFidVolCounter++;
05337
05338 nu.dpID=dp.CalcPID(&mad,ievt,0);
05339 MAXMSG("NuAnalysis",Msg::kDebug,50)
05340 <<"dpID="<<nu.dpID<<endl;
05341 hDpIDAll->Fill(nu.dpID);
05342
05343 //ensure there is a track in the event
05344 //if (evt.ntrack<1) continue;
05345 if (evt.ntrack!=1) continue;//require exactly 1 track
05346 evtWithTrkCounter++;
05347
05348 //get the best track in the event
05349 Int_t bestTrack=lib.reco.GetBestTrack(nu);
05350 const NtpSRTrack* ptrk=lib.reco.GetTrackWithIndexX
05351 (ntp,evt,bestTrack-1);
05352 if (ptrk==0) continue;
05353 const NtpSRTrack& trk=*ptrk;
05354 goodBestTrkCounter++;
05355
05356 //require a trk fit
05357 if (!trk.fit.pass) continue;
05358 goodTrkPassCounter++;
05359
05361 //RECONSTRUCT the neutrino energy
05362 lib.reco.GetEvtEnergy(nu, false);
05363 goodRecoEnCounter++;
05364
05365 //get the truth info (reco quantities are done above)
05366 reco.GetTruthInfo(ntp,evt,nu);
05367
05368 if (!cuts.IsGoodUVVtx(nu)){
05369 continue;
05370 }
05371 goodUVDiffCounter++;
05372
05373 //check if the trk is in the fiducial volume
05374 Bool_t isTrkInFidVol=cuts.IsInFidVol(trk.vtx.x,trk.vtx.y,
05375 trk.vtx.z,
05376 trk.vtx.u,trk.vtx.v,0,0,
05377 nu.detector,nu.anaVersion,
05378 nu.releaseType,nu.simFlag);
05379 if (!isTrkInFidVol) continue;
05380 trkInFidVolCounter++;
05381
05382 plots.FillSigmaQPPlots(nu);
05383 plots.FillTrueDpIDHistos(nu);
05384
05385 //set the charge
05386 nu.charge=trk.momentum.qp<0 ? -1 : 1;
05387 if (trk.momentum.qp==0) nu.charge=0;
05388
05389 //cut on the fractional track momentum and sign error
05390 if (!cuts.IsGoodSigmaQP_QP(nu)) continue;
05391 goodFitSigQPCounter++;
05392
05393 //cut on the track fit probability
05394 if (!cuts.IsGoodFitProb(nu)) continue;
05395 goodFitProbCounter++;
05396
05397 Float_t chi2PerNdof=999999;
05398 if (!cuts.IsGoodFitChi2PerNdof(nu)){
05399 MAXMSG("NuAnalysis",Msg::kVerbose,100)
05400 <<"Cutting out bad chi2PerNdof="<<chi2PerNdof<<endl;
05401 continue;
05402 }
05403 goodFitChi2Counter++;
05404
05405 //get the maps of evts' info
05406 deltaTs.clear();
05407 reco.GetEvtDeltaTs(ntp,deltaTs);
05408 evtsPerSlc.clear();
05409 reco.GetEvtsPerSlc(ntp,evtsPerSlc);
05410 MsgFormat ffmt("%9.9f");
05411 MAXMSG("NuReco",Msg::kDebug,100)
05412 <<"smallestDelta="<<ffmt(deltaTs[ievt])
05413 <<", evtsPerSlc="<<evtsPerSlc[evt.slc]<<endl;
05414
05415 //only do the cut for the ND
05416 if (config.detector==Detector::kNear &&
05417 deltaTs[ievt]<50*Munits::ns) continue;
05418 goodDeltaTCounter++;
05419
05420 //only do the cut for the ND
05421 if (config.detector==Detector::kNear &&
05422 evtsPerSlc[evt.slc]!=1) continue;
05423 goodEvtsPerSlcCounter++;
05424
05425 plots.FillTrueDpIDHistosPQNQ(nu);
05426 if (trk.momentum.qp<0) {
05427 hDpIDNQN_1->Fill(nu.dpID);
05428 }
05429 else if (trk.momentum.qp>0) {
05430 hDpIDPQN_1->Fill(nu.dpID);
05431 }
05432
05433 //cut on the PID
05434 if (!cuts.IsGoodDpID(nu)) continue;
05435 goodPIDCounter++;
05436
05437 Float_t sigCorBeyond=0;
05438 goodBeyondTrkEndCounter++;
05439
05440 Float_t fractFull=0;
05441 //if (!cuts.IsGoodShwFract(ntp,evt,nu,&fractFull)) continue;
05442 goodShwFractCounter++;
05443
05444 Float_t evtTrkVtxDiff=evt.plane.beg-trk.plane.beg;
05445
05446 //reco.PrintTrueEnergy(ntp,evt,nu.energy);
05447
05448 if (trk.momentum.qp<0) {
05449 hNuMuRecoEn->Fill(nu.energy);
05450 hNuMuRecoY->Fill(nu.y);
05451 hDpIDNQ->Fill(nu.dpID);
05452 vTimeNuMuEvt.push_back(evTime);
05453 nuNQCounter++;
05454 }
05455 else if (trk.momentum.qp>0) {
05456 //file format: run snarl event
05457 nmbTxt<<nu.run<<" "<<nu.snarl<<" "<<nu.evt<<endl;
05458 string sStop="PC";
05459 if (nu.containmentFlag==1 ||
05460 nu.containmentFlag==3) sStop="FC";
05461
05462 Float_t dRng=999999;
05463 if (nu.trkEnMC) dRng=(nu.trkEnRange-nu.trkEnMC)/nu.trkEnMC;
05464 nmbTxt<<"# "
05465 <<sStop<<nu.containmentFlag
05466 <<", dRng="<<dRng
05467 <<", beyond="<<sigCorBeyond
05468 <<", frFull="<<fractFull
05469 <<", e-tVtx="<<evtTrkVtxDiff
05470 <<endl;
05471 nmbTxt<<"# "<<endl;//leave a line
05472
05473 hNuMuBarRecoEn->Fill(nu.energy);
05474 hNuMuBarRecoY->Fill(nu.y);
05475 hDpIDPQ->Fill(nu.dpID);
05476 vTimeNuMuBarEvt.push_back(evTime);
05477 nuPQCounter++;
05478 }
05479 else cout<<"ahhh, zero qp"<<endl;
05480
05481 plots.FillRecoEnYHistosN(nu);
05482 plots.FillDPIdSigmaQPPlotsN(nu);
05483
05484 plots.FillShwHistos(ntp,evt,nu);
05485 plots.FillXYZHistos(nu);
05486 plots.FillContainmentHistos(nu);
05487 plots.FillTruePIDHistos(nu);
05488 plots.FillTrackResponseHistos(ntp,trk,nu);
05489 }
05490 }//end of for
05491
05495
05496 MSG("NuAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
05497
05498 MSG("NuAnalysis",Msg::kInfo)
05499 <<"Found start time and end time: "
05500 <<startTimeSecs<<" -> "<<endTimeSecs<<endl;
05501 general.EpochTo1995(endTimeSecs);
05502 general.EpochTo1995(startTimeSecs);
05503
05504 MSG("NuAnalysis",Msg::kInfo)<<"Filling vs. Time plots..."<<endl;
05505 TH1F* hSpillsVsTime=new TH1F("hSpillsVsTime","hSpillsVsTime",
05506 100,startTimeSecs,endTimeSecs);
05507 general.TH1FFill(hSpillsVsTime,vTime);
05508 general.SetGraphAxis(hSpillsVsTime->GetXaxis(),
05509 startTimeSecs,endTimeSecs);
05510 hSpillsVsTime->GetXaxis()->CenterTitle();
05511 hSpillsVsTime->GetYaxis()->SetTitle("Spills");
05512 hSpillsVsTime->GetYaxis()->CenterTitle();
05513
05514 TH1F* hSpillsBadVsTime=new TH1F("hSpillsBadVsTime","hSpillsBadVsTime",
05515 100,startTimeSecs,endTimeSecs);
05516 general.TH1FFill(hSpillsBadVsTime,vTimeBad);
05517 general.SetGraphAxis(hSpillsBadVsTime->GetXaxis(),
05518 startTimeSecs,endTimeSecs);
05519 hSpillsBadVsTime->GetXaxis()->CenterTitle();
05520 hSpillsBadVsTime->GetYaxis()->SetTitle("Spills");
05521 hSpillsBadVsTime->GetYaxis()->CenterTitle();
05522
05523 TH1F* hNuMuVsTime=new TH1F("hNuMuVsTime","hNuMuVsTime",
05524 100,startTimeSecs,endTimeSecs);
05525 general.TH1FFill(hNuMuVsTime,vTimeNuMuEvt);
05526 general.SetGraphAxis(hNuMuVsTime->GetXaxis(),
05527 startTimeSecs,endTimeSecs);
05528 hNuMuVsTime->GetXaxis()->CenterTitle();
05529 hNuMuVsTime->GetYaxis()->SetTitle("#nu_#mu events");
05530 hNuMuVsTime->GetYaxis()->CenterTitle();
05531
05532 TH1F* hNuMuBarVsTime=new TH1F("hNuMuBarVsTime","hNuMuBarVsTime",
05533 100,startTimeSecs,endTimeSecs);
05534 general.TH1FFill(hNuMuBarVsTime,vTimeNuMuBarEvt);
05535 general.SetGraphAxis(hNuMuBarVsTime->GetXaxis(),
05536 startTimeSecs,endTimeSecs);
05537 hNuMuBarVsTime->GetXaxis()->CenterTitle();
05538 hNuMuBarVsTime->GetYaxis()->SetTitle("#bar{#nu_#mu} events");
05539 hNuMuBarVsTime->GetYaxis()->CenterTitle();
05540
05541 TH1F* hPotVsTime=new TH1F("hPotVsTime","hPotVsTime",
05542 100,startTimeSecs,endTimeSecs);
05543 general.TH1FFill(hPotVsTime,vTime,vPot);
05544 general.SetGraphAxis(hPotVsTime->GetXaxis(),
05545 startTimeSecs,endTimeSecs);
05546 hPotVsTime->GetXaxis()->CenterTitle();
05547 hPotVsTime->GetYaxis()->SetTitle("POT");
05548 hPotVsTime->GetYaxis()->CenterTitle();
05549
05550 TH1F* hPotBadVsTime=new TH1F("hPotBadVsTime","hPotBadVsTime",
05551 100,startTimeSecs,endTimeSecs);
05552 general.TH1FFill(hPotBadVsTime,vTimeBad,vPotBad);
05553 general.SetGraphAxis(hPotBadVsTime->GetXaxis(),
05554 startTimeSecs,endTimeSecs);
05555 hPotBadVsTime->GetXaxis()->CenterTitle();
05556 hPotBadVsTime->GetYaxis()->SetTitle("POT");
05557 hPotBadVsTime->GetYaxis()->CenterTitle();
05558
05559 Float_t totalPotHist=0;
05560 Float_t totalPotBadHist=0;
05561 cuts.CalcTotalPot(totalPotHist,totalPotBadHist);
05562 Float_t pcPotRejected=0;
05563 if (totalPotHist) pcPotRejected=100.*totalPotBadHist/totalPotHist;
05564
05565 //msg was giving pots=412886000000000000.000000... still is for MC!
05566 cout<<"Number of spills ="<<this->GetEntries()<<endl
05567 <<"Number of good spills="<<goodSpillCounter<<endl
05568 <<"Number of bad spills ="<<badSpillCounter<<endl
05569 <<"Sum of good+bad spill="<<badSpillCounter+goodSpillCounter<<endl
05570 <<endl
05571 <<"Total POT good ="<<totalPot*1e12<<endl
05572 <<"Total POT bad ="<<totalPotBad*1e12<<endl
05573 <<"Total POT good (hist)="<<totalPotHist*1e12<<endl
05574 <<"Total POT bad (hist)="<<totalPotBadHist*1e12
05575 <<" ("<<pcPotRejected<<"%)"<<endl;
05576
05577 MSG("NuAnalysis",Msg::kInfo)
05578 <<endl<<"*************************************"<<endl
05579 <<"Total Events ="<<evtCounter<<endl
05580 <<"Evt not litime ="<<evtNotlitime<<endl
05581 <<"Evt not IsLI ="<<evtNotIsLI<<endl
05582 <<"Evts in Fid ="<<evtInFidVolCounter<<endl
05583 <<"Evts w/ Trk ="<<evtWithTrkCounter<<endl
05584 <<"Good Best Trk ="<<goodBestTrkCounter<<endl
05585 <<"Track Pass ="<<goodTrkPassCounter<<endl
05586 <<"Good reco energy="<<goodRecoEnCounter<<endl
05587 <<"Good UVDiff ="<<goodUVDiffCounter<<endl
05588 <<"Trk Vtx in Fid ="<<trkInFidVolCounter<<endl
05589 <<"Good Fit SigQP ="<<goodFitSigQPCounter<<endl
05590 <<"Good Fit Prob ="<<goodFitProbCounter<<endl
05591 <<"Good Fit Chi2 ="<<goodFitChi2Counter<<endl
05592 <<"Good Delta T ="<<goodDeltaTCounter<<endl
05593 <<"Good EvtPerSlc ="<<goodEvtsPerSlcCounter<<endl
05594 <<"Good DP ID ="<<goodPIDCounter<<endl
05595 <<"Good beyond tEnd="<<goodBeyondTrkEndCounter<<endl
05596 <<"Good shw fract ="<<goodShwFractCounter<<endl
05597 <<"*************************************"<<endl;
05598
05599 Float_t pcPQ=0;
05600 if (nuPQCounter+nuNQCounter>0) pcPQ=100.*nuPQCounter/
05601 (nuPQCounter+nuNQCounter);
05602 MSG("NuAnalysis",Msg::kInfo)
05603 <<endl
05604 <<"Neutrinos with NQ="<<nuNQCounter<<endl
05605 <<"Neutrinos with PQ="<<nuPQCounter
05606 <<" ("<<pcPQ<<"%)"<<endl
05607 <<"Sum NQ+PQ ="<<nuNQCounter+nuPQCounter<<endl
05608 <<endl;
05609
05610 MSG("NuAnalysis",Msg::kInfo)
05611 <<" ** Finished EnergySpect method **"<<endl;
05612 }
|
|
|
Definition at line 771 of file NuAnalysis.cxx. References NuEvent::anaVersion, NtpSRFitTrack::chi2, NuEvent::detector, NuEvent::energy, NtpSRMomentum::eqp, NtpStRecord::evt, NuLibrary::ext, ExtractConfig(), NuExtraction::ExtractEvtInfo(), NuExtraction::ExtractGeneralInfo(), NuExtraction::ExtractShwInfo(), NuExtraction::ExtractTrkInfo(), NtpSRTrack::fit, Form(), VldContext::GetDetector(), NuBase::GetEntries(), NuReco::GetEvtDeltaTs(), NuReco::GetEvtEnergy(), NuReco::GetEvtMedianTime(), NuReco::GetEvtsPerSlc(), RecRecordImp< T >::GetHeader(), NuBase::GetNtpStRecord(), RecDataHeader::GetRun(), VldContext::GetSimFlag(), RecDataHeader::GetSubRun(), RecHeader::GetVldContext(), NtpMCTruth::iaction, NtpSREvent::index, NtpMCTruth::index, NuBase::InitialiseLoopVariables(), NuLibrary::Instance(), NtpMCTruth::inu, NuCuts::IsInFidVol(), MAXMSG, NtpStRecord::mc, NtpSRTrack::momentum, MSG, NtpSRFitTrack::ndof, NtpTHEvent::neumc, NtpSREvent::nshower, NtpSREvent::ntrack, NtpSRTrackPlane::ntrklike, NuBase::OpenFile(), NtpMCTruth::p4mu1, NtpMCTruth::p4neu, NtpSRFitTrack::pass, NtpSRTrack::plane, NtpSRMomentum::qp, NuLibrary::reco, NuEvent::releaseType, s(), NuBase::SetLoopVariables(), NuEvent::simFlag, NtpSREvent::slc, NtpStRecord::thevt, NtpSREvent::trk, NtpStRecord::trk, NtpMCTruth::vtxx, NtpMCTruth::vtxy, NtpMCTruth::vtxz, UgliGeomHandle::xyz2uvz(), and NtpMCTruth::y. 00772 {
00773 MSG("NuAnalysis",Msg::kInfo)
00774 <<" ** Running EnergySpectMC method... **"<<endl;
00775
00776 //open the output file for the histograms
00777 fOutFile=this->OpenFile(100,"NuEnergySpectMC");
00778
00779 TH1F* hNuInt=new TH1F("hNuInt","hNuInt",10000,-100,1000);
00780 hNuInt->SetTitle("Number of neutrino interactions per spill");
00781 hNuInt->GetXaxis()->SetTitle("# interactions");
00782 hNuInt->GetXaxis()->CenterTitle();
00783 hNuInt->GetYaxis()->SetTitle("");
00784 hNuInt->GetYaxis()->CenterTitle();
00785 hNuInt->SetFillColor(0);
00786 hNuInt->SetLineColor(1);
00787 //hNuInt->SetBit(TH1::kCanRebin);
00788
00789 TH1F* hinuCC=new TH1F("hinuCC","hinuCC",80,-20,20);
00790 hinuCC->SetTitle("MC Number of Neutrino");
00791 hinuCC->GetXaxis()->SetTitle("MC Number");
00792 hinuCC->GetXaxis()->CenterTitle();
00793 hinuCC->GetYaxis()->SetTitle("");
00794 hinuCC->GetYaxis()->CenterTitle();
00795 hinuCC->SetFillColor(0);
00796 hinuCC->SetLineColor(1);
00797 //hinuCC->SetBit(TH1::kCanRebin);
00798
00799 TH1F* hinuNC=new TH1F("hinuNC","hinuNC",80,-20,20);
00800 hinuNC->SetTitle("MC Number of Neutrino");
00801 hinuNC->GetXaxis()->SetTitle("MC Number");
00802 hinuNC->GetXaxis()->CenterTitle();
00803 hinuNC->GetYaxis()->SetTitle("");
00804 hinuNC->GetYaxis()->CenterTitle();
00805 hinuNC->SetFillColor(0);
00806 hinuNC->SetLineColor(3);
00807 hinuNC->SetLineWidth(2);
00808 //hinuNC->SetBit(TH1::kCanRebin);
00809
00810
00811 TH1F* hNuMuBarEnCC=new TH1F("hNuMuBarEnCC","hNuMuBarEnCC",
00812 4*352,-32,320);
00813 hNuMuBarEnCC->GetXaxis()->SetTitle("Energy (GeV)");
00814 hNuMuBarEnCC->GetXaxis()->CenterTitle();
00815 hNuMuBarEnCC->GetYaxis()->SetTitle("");
00816 hNuMuBarEnCC->GetYaxis()->CenterTitle();
00817 hNuMuBarEnCC->SetFillColor(0);
00818 hNuMuBarEnCC->SetLineColor(2);
00819 //hNuMuBarEnCC->SetBit(TH1::kCanRebin);
00820
00821 TH1F* hNuMuBarFidEnCC=new TH1F("hNuMuBarFidEnCC","hNuMuBarFidEnCC",
00822 4*352,-32,320);
00823 hNuMuBarFidEnCC->GetXaxis()->SetTitle("Energy (GeV)");
00824 hNuMuBarFidEnCC->GetXaxis()->CenterTitle();
00825 hNuMuBarFidEnCC->GetYaxis()->SetTitle("");
00826 hNuMuBarFidEnCC->GetYaxis()->CenterTitle();
00827 hNuMuBarFidEnCC->SetFillColor(0);
00828 hNuMuBarFidEnCC->SetLineColor(2);
00829 //hNuMuBarFidEnCC->SetBit(TH1::kCanRebin);
00830
00831 TH1F* hNuMuBarLike=new TH1F("hNuMuBarLike","hNuMuBarLike",
00832 4*352,-32,320);
00833 hNuMuBarLike->GetXaxis()->SetTitle("Energy (GeV)");
00834 hNuMuBarLike->GetXaxis()->CenterTitle();
00835 hNuMuBarLike->GetYaxis()->SetTitle("");
00836 hNuMuBarLike->GetYaxis()->CenterTitle();
00837 hNuMuBarLike->SetFillColor(0);
00838 hNuMuBarLike->SetLineColor(2);
00839 //hNuMuBarLike->SetBit(TH1::kCanRebin);
00840
00841 TH1F* hNuMuEnCC=new TH1F("hNuMuEnCC","hNuMuEnCC",4*352,-32,320);
00842 hNuMuEnCC->GetXaxis()->SetTitle("Energy (GeV)");
00843 hNuMuEnCC->GetXaxis()->CenterTitle();
00844 hNuMuEnCC->GetYaxis()->SetTitle("");
00845 hNuMuEnCC->GetYaxis()->CenterTitle();
00846 hNuMuEnCC->SetFillColor(0);
00847 hNuMuEnCC->SetLineColor(1);
00848 hNuMuEnCC->SetLineWidth(2);
00849 //hNuMuEnCC->SetBit(TH1::kCanRebin);
00850
00851 TH1F* hNuMuFidEnCC=new TH1F("hNuMuFidEnCC","hNuMuFidEnCC",
00852 4*352,-32,320);
00853 hNuMuFidEnCC->GetXaxis()->SetTitle("Energy (GeV)");
00854 hNuMuFidEnCC->GetXaxis()->CenterTitle();
00855 hNuMuFidEnCC->GetYaxis()->SetTitle("");
00856 hNuMuFidEnCC->GetYaxis()->CenterTitle();
00857 hNuMuFidEnCC->SetFillColor(0);
00858 hNuMuFidEnCC->SetLineColor(1);
00859 hNuMuFidEnCC->SetLineWidth(2);
00860 //hNuMuFidEnCC->SetBit(TH1::kCanRebin);
00861
00862 TH1F* hNuMuLike=new TH1F("hNuMuLike","hNuMuLike",4*352,-32,320);
00863 hNuMuLike->GetXaxis()->SetTitle("Energy (GeV)");
00864 hNuMuLike->GetXaxis()->CenterTitle();
00865 hNuMuLike->GetYaxis()->SetTitle("");
00866 hNuMuLike->GetYaxis()->CenterTitle();
00867 hNuMuLike->SetFillColor(0);
00868 hNuMuLike->SetLineColor(1);
00869 hNuMuLike->SetLineWidth(2);
00870 //hNuMuLike->SetBit(TH1::kCanRebin);
00871
00872 TH1F* hNuMuBarEn4000CC=new TH1F("hNuMuBarEn4000CC","hNuMuBarEn4000CC",
00873 4000,-10,200);
00874 hNuMuBarEn4000CC->GetXaxis()->SetTitle("Energy (GeV)");
00875 hNuMuBarEn4000CC->GetXaxis()->CenterTitle();
00876 hNuMuBarEn4000CC->GetYaxis()->SetTitle("");
00877 hNuMuBarEn4000CC->GetYaxis()->CenterTitle();
00878 hNuMuBarEn4000CC->SetFillColor(0);
00879 hNuMuBarEn4000CC->SetLineColor(2);
00880 //hNuMuBarEn4000CC->SetBit(TH1::kCanRebin);
00881
00882 TH1F* hNuMuEn4000CC=new TH1F("hNuMuEn4000CC","hNuMuEn4000CC",
00883 4000,-10,200);
00884 hNuMuEn4000CC->GetXaxis()->SetTitle("Energy (GeV)");
00885 hNuMuEn4000CC->GetXaxis()->CenterTitle();
00886 hNuMuEn4000CC->GetYaxis()->SetTitle("");
00887 hNuMuEn4000CC->GetYaxis()->CenterTitle();
00888 hNuMuEn4000CC->SetFillColor(0);
00889 hNuMuEn4000CC->SetLineColor(1);
00890 hNuMuEn4000CC->SetLineWidth(2);
00891 //hNuMuEn4000CC->SetBit(TH1::kCanRebin);
00892
00893 TH1F* hNueBarEnCC=new TH1F("hNueBarEnCC","hNueBarEnCC",4*352,-32,320);
00894 hNueBarEnCC->GetXaxis()->SetTitle("Energy (GeV)");
00895 hNueBarEnCC->GetXaxis()->CenterTitle();
00896 hNueBarEnCC->GetYaxis()->SetTitle("");
00897 hNueBarEnCC->GetYaxis()->CenterTitle();
00898 hNueBarEnCC->SetFillColor(0);
00899 hNueBarEnCC->SetLineColor(2);
00900 hNueBarEnCC->SetLineWidth(2);
00901 hNueBarEnCC->SetLineStyle(2);
00902 //hNueBarEnCC->SetBit(TH1::kCanRebin);
00903
00904 TH1F* hNueEnCC=new TH1F("hNueEnCC","hNueEnCC",4*352,-32,320);
00905 hNueEnCC->GetXaxis()->SetTitle("Energy (GeV)");
00906 hNueEnCC->GetXaxis()->CenterTitle();
00907 hNueEnCC->GetYaxis()->SetTitle("");
00908 hNueEnCC->GetYaxis()->CenterTitle();
00909 hNueEnCC->SetFillColor(0);
00910 hNueEnCC->SetLineColor(1);
00911 hNueEnCC->SetLineWidth(1);
00912 hNueEnCC->SetLineStyle(2);
00913 //hNueEnCC->SetBit(TH1::kCanRebin);
00914
00915
00916 TH1F* hNuMuBarEnNC=new TH1F("hNuMuBarEnNC","hNuMuBarEnNC",4*352,-32,320);
00917 hNuMuBarEnNC->GetXaxis()->SetTitle("Energy (GeV)");
00918 hNuMuBarEnNC->GetXaxis()->CenterTitle();
00919 hNuMuBarEnNC->GetYaxis()->SetTitle("");
00920 hNuMuBarEnNC->GetYaxis()->CenterTitle();
00921 hNuMuBarEnNC->SetFillColor(0);
00922 hNuMuBarEnNC->SetLineColor(4);
00923 //hNuMuBarEnNC->SetBit(TH1::kCanRebin);
00924
00925 TH1F* hNuMuEnNC=new TH1F("hNuMuEnNC","hNuMuEnNC",4*352,-32,320);
00926 hNuMuEnNC->GetXaxis()->SetTitle("Energy (GeV)");
00927 hNuMuEnNC->GetXaxis()->CenterTitle();
00928 hNuMuEnNC->GetYaxis()->SetTitle("");
00929 hNuMuEnNC->GetYaxis()->CenterTitle();
00930 hNuMuEnNC->SetFillColor(0);
00931 hNuMuEnNC->SetLineColor(1);
00932 hNuMuEnNC->SetLineWidth(3);
00933 //hNuMuEnNC->SetBit(TH1::kCanRebin);
00934
00935 TH1F* hNueBarEnNC=new TH1F("hNueBarEnNC","hNueBarEnNC",4*352,-32,320);
00936 hNueBarEnNC->GetXaxis()->SetTitle("Energy (GeV)");
00937 hNueBarEnNC->GetXaxis()->CenterTitle();
00938 hNueBarEnNC->GetYaxis()->SetTitle("");
00939 hNueBarEnNC->GetYaxis()->CenterTitle();
00940 hNueBarEnNC->SetFillColor(0);
00941 hNueBarEnNC->SetLineColor(4);
00942 hNueBarEnNC->SetLineWidth(2);
00943 hNueBarEnNC->SetLineStyle(2);
00944 //hNueBarEnNC->SetBit(TH1::kCanRebin);
00945
00946 TH1F* hNueEnNC=new TH1F("hNueEnNC","hNueEnNC",4*352,-32,320);
00947 hNueEnNC->GetXaxis()->SetTitle("Energy (GeV)");
00948 hNueEnNC->GetXaxis()->CenterTitle();
00949 hNueEnNC->GetYaxis()->SetTitle("");
00950 hNueEnNC->GetYaxis()->CenterTitle();
00951 hNueEnNC->SetFillColor(0);
00952 hNueEnNC->SetLineColor(3);
00953 hNueEnNC->SetLineWidth(1);
00954 hNueEnNC->SetLineStyle(2);
00955 //hNueEnNC->SetBit(TH1::kCanRebin);
00956
00957
00958 TH1F* hNuMuBarEnDepNC=new TH1F("hNuMuBarEnDepNC","hNuMuBarEnDepNC",4*352,-32,320);
00959 hNuMuBarEnDepNC->GetXaxis()->SetTitle("Energy (GeV)");
00960 hNuMuBarEnDepNC->GetXaxis()->CenterTitle();
00961 hNuMuBarEnDepNC->GetYaxis()->SetTitle("");
00962 hNuMuBarEnDepNC->GetYaxis()->CenterTitle();
00963 hNuMuBarEnDepNC->SetFillColor(0);
00964 hNuMuBarEnDepNC->SetLineColor(4);
00965 //hNuMuBarEnDepNC->SetBit(TH1::kCanRebin);
00966
00967 TH1F* hNuMuEnDepNC=new TH1F("hNuMuEnDepNC","hNuMuEnDepNC",4*352,-32,320);
00968 hNuMuEnDepNC->GetXaxis()->SetTitle("Energy (GeV)");
00969 hNuMuEnDepNC->GetXaxis()->CenterTitle();
00970 hNuMuEnDepNC->GetYaxis()->SetTitle("");
00971 hNuMuEnDepNC->GetYaxis()->CenterTitle();
00972 hNuMuEnDepNC->SetFillColor(0);
00973 hNuMuEnDepNC->SetLineColor(1);
00974 hNuMuEnDepNC->SetLineWidth(3);
00975 //hNuMuEnDepNC->SetBit(TH1::kCanRebin);
00976
00977 TH1F* hNueBarEnDepNC=new TH1F("hNueBarEnDepNC","hNueBarEnDepNC",4*352,-32,320);
00978 hNueBarEnDepNC->GetXaxis()->SetTitle("Energy (GeV)");
00979 hNueBarEnDepNC->GetXaxis()->CenterTitle();
00980 hNueBarEnDepNC->GetYaxis()->SetTitle("");
00981 hNueBarEnDepNC->GetYaxis()->CenterTitle();
00982 hNueBarEnDepNC->SetFillColor(0);
00983 hNueBarEnDepNC->SetLineColor(4);
00984 hNueBarEnDepNC->SetLineWidth(2);
00985 hNueBarEnDepNC->SetLineStyle(2);
00986 //hNueBarEnDepNC->SetBit(TH1::kCanRebin);
00987
00988 TH1F* hNueEnDepNC=new TH1F("hNueEnDepNC","hNueEnDepNC",4*352,-32,320);
00989 hNueEnDepNC->GetXaxis()->SetTitle("Energy (GeV)");
00990 hNueEnDepNC->GetXaxis()->CenterTitle();
00991 hNueEnDepNC->GetYaxis()->SetTitle("");
00992 hNueEnDepNC->GetYaxis()->CenterTitle();
00993 hNueEnDepNC->SetFillColor(0);
00994 hNueEnDepNC->SetLineColor(3);
00995 hNueEnDepNC->SetLineWidth(1);
00996 hNueEnDepNC->SetLineStyle(2);
00997 //hNueEnDepNC->SetBit(TH1::kCanRebin);
00998
00999
01000 TH1F* hNuYCC=new TH1F("hNuYCC","hNuYCC",100,-0.1,1.1);
01001 hNuYCC->GetXaxis()->SetTitle("Neutrino y");
01002 hNuYCC->GetXaxis()->CenterTitle();
01003 hNuYCC->GetYaxis()->SetTitle("");
01004 hNuYCC->GetYaxis()->CenterTitle();
01005 hNuYCC->SetFillColor(0);
01006 hNuYCC->SetLineColor(1);
01007 hNuYCC->SetLineWidth(1);
01008 hNuYCC->SetLineStyle(1);
01009 //hNuYCC->SetBit(TH1::kCanRebin);
01010
01011 TH1F* hNuYNC=new TH1F("hNuYNC","hNuYNC",100,-0.1,1.1);
01012 hNuYNC->GetXaxis()->SetTitle("Neutrino y");
01013 hNuYNC->GetXaxis()->CenterTitle();
01014 hNuYNC->GetYaxis()->SetTitle("");
01015 hNuYNC->GetYaxis()->CenterTitle();
01016 hNuYNC->SetFillColor(0);
01017 hNuYNC->SetLineColor(3);
01018 hNuYNC->SetLineWidth(2);
01019 hNuYNC->SetLineStyle(1);
01020 //hNuYNC->SetBit(TH1::kCanRebin);
01021
01022 TH1F* hNuYFidNuMuBarCC=new TH1F("hNuYFidNuMuBarCC","hNuYFidNuMuBarCC",
01023 100,-0.1,1.1);
01024 hNuYFidNuMuBarCC->GetXaxis()->SetTitle("Neutrino y");
01025 hNuYFidNuMuBarCC->GetXaxis()->CenterTitle();
01026 hNuYFidNuMuBarCC->GetYaxis()->SetTitle("");
01027 hNuYFidNuMuBarCC->GetYaxis()->CenterTitle();
01028 hNuYFidNuMuBarCC->SetFillColor(0);
01029 hNuYFidNuMuBarCC->SetLineColor(1);
01030 hNuYFidNuMuBarCC->SetLineWidth(1);
01031 hNuYFidNuMuBarCC->SetLineStyle(1);
01032 //hNuYFidNuMuBarCC->SetBit(TH1::kCanRebin);
01033
01034 TH1F* hNuYFidNuMuBarNC=new TH1F("hNuYFidNuMuBarNC","hNuYFidNuMuBarNC",
01035 100,-0.1,1.1);
01036 hNuYFidNuMuBarNC->GetXaxis()->SetTitle("Neutrino y");
01037 hNuYFidNuMuBarNC->GetXaxis()->CenterTitle();
01038 hNuYFidNuMuBarNC->GetYaxis()->SetTitle("");
01039 hNuYFidNuMuBarNC->GetYaxis()->CenterTitle();
01040 hNuYFidNuMuBarNC->SetFillColor(0);
01041 hNuYFidNuMuBarNC->SetLineColor(3);
01042 hNuYFidNuMuBarNC->SetLineWidth(2);
01043 hNuYFidNuMuBarNC->SetLineStyle(1);
01044 //hNuYFidNuMuBarNC->SetBit(TH1::kCanRebin);
01045
01046 TH1F* hNuYFidNuMuCC=new TH1F("hNuYFidNuMuCC","hNuYFidNuMuCC",
01047 100,-0.1,1.1);
01048 hNuYFidNuMuCC->GetXaxis()->SetTitle("Neutrino y");
01049 hNuYFidNuMuCC->GetXaxis()->CenterTitle();
01050 hNuYFidNuMuCC->GetYaxis()->SetTitle("");
01051 hNuYFidNuMuCC->GetYaxis()->CenterTitle();
01052 hNuYFidNuMuCC->SetFillColor(0);
01053 hNuYFidNuMuCC->SetLineColor(1);
01054 hNuYFidNuMuCC->SetLineWidth(1);
01055 hNuYFidNuMuCC->SetLineStyle(1);
01056 //hNuYFidNuMuCC->SetBit(TH1::kCanRebin);
01057
01058 TH1F* hNuYFidNuMuNC=new TH1F("hNuYFidNuMuNC","hNuYFidNuMuNC",
01059 100,-0.1,1.1);
01060 hNuYFidNuMuNC->GetXaxis()->SetTitle("Neutrino y");
01061 hNuYFidNuMuNC->GetXaxis()->CenterTitle();
01062 hNuYFidNuMuNC->GetYaxis()->SetTitle("");
01063 hNuYFidNuMuNC->GetYaxis()->CenterTitle();
01064 hNuYFidNuMuNC->SetFillColor(0);
01065 hNuYFidNuMuNC->SetLineColor(3);
01066 hNuYFidNuMuNC->SetLineWidth(2);
01067 hNuYFidNuMuNC->SetLineStyle(1);
01068 //hNuYFidNuMuNC->SetBit(TH1::kCanRebin);
01069
01070
01071 Int_t nbinsForY=60;
01072 vector<TH1F*> vNuYNuMuBarCC(nbinsForY);
01073 vector<TH1F*> vNuYNuMuCC(nbinsForY);
01074 vector<TH1F*> vNuYNuMuBarNC(nbinsForY);
01075 vector<TH1F*> vNuYNuMuNC(nbinsForY);
01076 for (Int_t i=0;i<nbinsForY;i++){
01077 Int_t en=(i+1)*5;
01078 string sEn=Form("%d",en);
01079 string s="hNuYNuMuBarCC"+sEn;
01080 //cout<<"Creating "<<s<<endl;
01081 vNuYNuMuBarCC[i]=new TH1F(s.c_str(),s.c_str(),100,-0.1,1.1);
01082 vNuYNuMuBarCC[i]->GetXaxis()->SetTitle("Neutrino y");
01083 vNuYNuMuBarCC[i]->GetXaxis()->CenterTitle();
01084 vNuYNuMuBarCC[i]->GetYaxis()->SetTitle("");
01085 vNuYNuMuBarCC[i]->GetYaxis()->CenterTitle();
01086 vNuYNuMuBarCC[i]->SetFillColor(0);
01087 vNuYNuMuBarCC[i]->SetLineColor(2);
01088 vNuYNuMuBarCC[i]->SetLineWidth(2);
01089 vNuYNuMuBarCC[i]->SetLineStyle(2);
01090 //vNuYNuMuBarCC[i]->SetBit(TH1::kCanRebin);
01091
01092 s="hNuYNuMuCC"+sEn;
01093 //cout<<"Creating "<<s<<endl;
01094 vNuYNuMuCC[i]=new TH1F(s.c_str(),s.c_str(),100,-0.1,1.1);
01095 vNuYNuMuCC[i]->GetXaxis()->SetTitle("Neutrino y");
01096 vNuYNuMuCC[i]->GetXaxis()->CenterTitle();
01097 vNuYNuMuCC[i]->GetYaxis()->SetTitle("");
01098 vNuYNuMuCC[i]->GetYaxis()->CenterTitle();
01099 vNuYNuMuCC[i]->SetFillColor(0);
01100 vNuYNuMuCC[i]->SetLineColor(1);
01101 vNuYNuMuCC[i]->SetLineWidth(2);
01102 vNuYNuMuCC[i]->SetLineStyle(1);
01103 //vNuYNuMuCC[i]->SetBit(TH1::kCanRebin);
01104
01105 s="hNuYNuMuBarNC"+sEn;
01106 //cout<<"Creating "<<s<<endl;
01107 vNuYNuMuBarNC[i]=new TH1F(s.c_str(),s.c_str(),100,-0.1,1.1);
01108 vNuYNuMuBarNC[i]->GetXaxis()->SetTitle("Neutrino y");
01109 vNuYNuMuBarNC[i]->GetXaxis()->CenterTitle();
01110 vNuYNuMuBarNC[i]->GetYaxis()->SetTitle("");
01111 vNuYNuMuBarNC[i]->GetYaxis()->CenterTitle();
01112 vNuYNuMuBarNC[i]->SetFillColor(0);
01113 vNuYNuMuBarNC[i]->SetLineColor(2);
01114 vNuYNuMuBarNC[i]->SetLineWidth(2);
01115 vNuYNuMuBarNC[i]->SetLineStyle(2);
01116 //vNuYNuMuBarNC[i]->SetBit(TH1::kCanRebin);
01117
01118 s="hNuYNuMuNC"+sEn;
01119 //cout<<"Creating "<<s<<endl;
01120 vNuYNuMuNC[i]=new TH1F(s.c_str(),s.c_str(),100,-0.1,1.1);
01121 vNuYNuMuNC[i]->GetXaxis()->SetTitle("Neutrino y");
01122 vNuYNuMuNC[i]->GetXaxis()->CenterTitle();
01123 vNuYNuMuNC[i]->GetYaxis()->SetTitle("");
01124 vNuYNuMuNC[i]->GetYaxis()->CenterTitle();
01125 vNuYNuMuNC[i]->SetFillColor(0);
01126 vNuYNuMuNC[i]->SetLineColor(1);
01127 vNuYNuMuNC[i]->SetLineWidth(2);
01128 vNuYNuMuNC[i]->SetLineStyle(1);
01129 //vNuYNuMuNC[i]->SetBit(TH1::kCanRebin);
01130 }
01131
01132 TH1F* hZCC=new TH1F("hZCC","hZCC",1000,-10,100);
01133 hZCC->GetXaxis()->SetTitle("Z (m)");
01134 hZCC->GetXaxis()->CenterTitle();
01135 hZCC->GetYaxis()->SetTitle("");
01136 hZCC->GetYaxis()->CenterTitle();
01137 hZCC->SetFillColor(0);
01138 hZCC->SetLineColor(1);
01139 hZCC->SetLineWidth(1);
01140 hZCC->SetLineStyle(1);
01141 //hZCC->SetBit(TH1::kCanRebin);
01142
01143 TH1F* hZNC=new TH1F("hZNC","hZNC",1000,-10,100);
01144 hZNC->GetXaxis()->SetTitle("Z (m)");
01145 hZNC->GetXaxis()->CenterTitle();
01146 hZNC->GetYaxis()->SetTitle("");
01147 hZNC->GetYaxis()->CenterTitle();
01148 hZNC->SetFillColor(0);
01149 hZNC->SetLineColor(3);
01150 hZNC->SetLineWidth(2);
01151 hZNC->SetLineStyle(2);
01152 //hZNC->SetBit(TH1::kCanRebin);
01153
01154 TH2F* hYvsXCC=new TH2F("hYvsXCC","hYvsXCC",
01155 100,-5,5,100,-5,5);
01156 hYvsXCC->SetTitle("Y vs X");
01157 hYvsXCC->GetXaxis()->SetTitle("X");
01158 hYvsXCC->GetXaxis()->CenterTitle();
01159 hYvsXCC->GetYaxis()->SetTitle("Y");
01160 hYvsXCC->GetYaxis()->CenterTitle();
01161 hYvsXCC->SetFillColor(0);
01162 //hYvsXCC->SetBit(TH1::kCanRebin);
01163
01164 TH2F* hYvsXNC=new TH2F("hYvsXNC","hYvsXNC",
01165 100,-5,5,100,-5,5);
01166 hYvsXNC->SetTitle("Y vs X");
01167 hYvsXNC->GetXaxis()->SetTitle("X");
01168 hYvsXNC->GetXaxis()->CenterTitle();
01169 hYvsXNC->GetYaxis()->SetTitle("Y");
01170 hYvsXNC->GetYaxis()->CenterTitle();
01171 hYvsXNC->SetFillColor(0);
01172 //hYvsXNC->SetBit(TH1::kCanRebin);
01173
01174 TH2F* hYvsXFidCC=new TH2F("hYvsXFidCC","hYvsXFidCC",
01175 100,-5,5,100,-5,5);
01176 hYvsXFidCC->SetTitle("Y vs X");
01177 hYvsXFidCC->GetXaxis()->SetTitle("X");
01178 hYvsXFidCC->GetXaxis()->CenterTitle();
01179 hYvsXFidCC->GetYaxis()->SetTitle("Y");
01180 hYvsXFidCC->GetYaxis()->CenterTitle();
01181 hYvsXFidCC->SetFillColor(0);
01182 //hYvsXFidCC->SetBit(TH1::kCanRebin);
01183
01184 TH2F* hYvsXFidNC=new TH2F("hYvsXFidNC","hYvsXFidNC",
01185 100,-5,5,100,-5,5);
01186 hYvsXFidNC->SetTitle("Y vs X");
01187 hYvsXFidNC->GetXaxis()->SetTitle("X");
01188 hYvsXFidNC->GetXaxis()->CenterTitle();
01189 hYvsXFidNC->GetYaxis()->SetTitle("Y");
01190 hYvsXFidNC->GetYaxis()->CenterTitle();
01191 hYvsXFidNC->SetFillColor(0);
01192 //hYvsXFidNC->SetBit(TH1::kCanRebin);
01193
01194 TH2F* hYvsX400CC=new TH2F("hYvsX400CC","hYvsX400CC",
01195 400,-20,20,400,-20,20);
01196 hYvsX400CC->SetTitle("Y vs X");
01197 hYvsX400CC->GetXaxis()->SetTitle("X");
01198 hYvsX400CC->GetXaxis()->CenterTitle();
01199 hYvsX400CC->GetYaxis()->SetTitle("Y");
01200 hYvsX400CC->GetYaxis()->CenterTitle();
01201 hYvsX400CC->SetFillColor(0);
01202 //hYvsX400CC->SetBit(TH1::kCanRebin);
01203
01204 TH2F* hYvsX400NC=new TH2F("hYvsX400NC","hYvsX400NC",
01205 400,-20,20,400,-20,20);
01206 hYvsX400NC->SetTitle("Y vs X");
01207 hYvsX400NC->GetXaxis()->SetTitle("X");
01208 hYvsX400NC->GetXaxis()->CenterTitle();
01209 hYvsX400NC->GetYaxis()->SetTitle("Y");
01210 hYvsX400NC->GetYaxis()->CenterTitle();
01211 hYvsX400NC->SetFillColor(0);
01212 //hYvsX400NC->SetBit(TH1::kCanRebin);
01213
01214
01215 TH2F* hYvsZCC=new TH2F("hYvsZCC","hYvsZCC",
01216 1000,-200,50,400,-20,20);
01217 hYvsZCC->SetTitle("Y vs Z");
01218 hYvsZCC->GetXaxis()->SetTitle("Z");
01219 hYvsZCC->GetXaxis()->CenterTitle();
01220 hYvsZCC->GetYaxis()->SetTitle("Y");
01221 hYvsZCC->GetYaxis()->CenterTitle();
01222 hYvsZCC->SetFillColor(0);
01223 //hYvsZCC->SetBit(TH1::kCanRebin);
01224
01225 TH2F* hYvsZNC=new TH2F("hYvsZNC","hYvsZNC",
01226 1000,-200,50,400,-20,20);
01227 hYvsZNC->SetTitle("Y vs Z");
01228 hYvsZNC->GetXaxis()->SetTitle("Z");
01229 hYvsZNC->GetXaxis()->CenterTitle();
01230 hYvsZNC->GetYaxis()->SetTitle("Y");
01231 hYvsZNC->GetYaxis()->CenterTitle();
01232 hYvsZNC->SetFillColor(0);
01233 //hYvsZNC->SetBit(TH1::kCanRebin);
01234
01235
01236 TH2F* hXvsZCC=new TH2F("hXvsZCC","hXvsZCC",
01237 1000,-200,50,400,-20,20);
01238 hXvsZCC->SetTitle("X vs Z");
01239 hXvsZCC->GetXaxis()->SetTitle("Z");
01240 hXvsZCC->GetXaxis()->CenterTitle();
01241 hXvsZCC->GetYaxis()->SetTitle("X");
01242 hXvsZCC->GetYaxis()->CenterTitle();
01243 hXvsZCC->SetFillColor(0);
01244 //hXvsZCC->SetBit(TH1::kCanRebin);
01245
01246 TH2F* hXvsZNC=new TH2F("hXvsZNC","hXvsZNC",
01247 1000,-200,50,400,-20,20);
01248 hXvsZNC->SetTitle("X vs Z");
01249 hXvsZNC->GetXaxis()->SetTitle("Z");
01250 hXvsZNC->GetXaxis()->CenterTitle();
01251 hXvsZNC->GetYaxis()->SetTitle("X");
01252 hXvsZNC->GetYaxis()->CenterTitle();
01253 hXvsZNC->SetFillColor(0);
01254 //hXvsZNC->SetBit(TH1::kCanRebin);
01255
01256 TH2F* hXvsZZoomCC=new TH2F("hXvsZZoomCC","hXvsZZoomCC",
01257 20000,-2,25,200,-3,4);
01258 hXvsZZoomCC->SetTitle("X vs Z");
01259 hXvsZZoomCC->GetXaxis()->SetTitle("Z");
01260 hXvsZZoomCC->GetXaxis()->CenterTitle();
01261 hXvsZZoomCC->GetYaxis()->SetTitle("X");
01262 hXvsZZoomCC->GetYaxis()->CenterTitle();
01263 hXvsZZoomCC->SetFillColor(0);
01264 //hXvsZZoomCC->SetBit(TH1::kCanRebin);
01265
01266 TH2F* hXvsZZoomNC=new TH2F("hXvsZZoomNC","hXvsZZoomNC",
01267 20000,-2,25,200,-3,4);
01268 hXvsZZoomNC->SetTitle("X vs Z");
01269 hXvsZZoomNC->GetXaxis()->SetTitle("Z");
01270 hXvsZZoomNC->GetXaxis()->CenterTitle();
01271 hXvsZZoomNC->GetYaxis()->SetTitle("X");
01272 hXvsZZoomNC->GetYaxis()->CenterTitle();
01273 hXvsZZoomNC->SetFillColor(0);
01274 //hXvsZZoomNC->SetBit(TH1::kCanRebin);
01275
01276
01277 TH3F* hXYZCC=new TH3F("hXYZCC","hXYZCC",
01278 100,-8,8, 400,-150,25, 200,-8,15);
01279 hXYZCC->SetTitle("XYZ");
01280 hXYZCC->GetXaxis()->SetTitle("X");
01281 hXYZCC->GetXaxis()->CenterTitle();
01282 hXYZCC->GetYaxis()->SetTitle("Y");
01283 hXYZCC->GetYaxis()->CenterTitle();
01284 hXYZCC->SetFillColor(0);
01285 //hXYZCC->SetBit(TH1::kCanRebin);
01286
01287 TH3F* hXYZNC=new TH3F("hXYZNC","hXYZNC",
01288 100,-8,8, 400,-150,25, 200,-8,15);
01289 hXYZNC->SetTitle("XYZ");
01290 hXYZNC->GetXaxis()->SetTitle("X");
01291 hXYZNC->GetXaxis()->CenterTitle();
01292 hXYZNC->GetYaxis()->SetTitle("Y");
01293 hXYZNC->GetYaxis()->CenterTitle();
01294 hXYZNC->SetFillColor(0);
01295 //hXYZNC->SetBit(TH1::kCanRebin);
01296
01297 TH1F* hTrksPerEvt=new TH1F("hTrksPerEvt","hTrksPerEvt",10,-1,9);
01298 hTrksPerEvt->SetTitle("Tracks per Reco'd Event");
01299 hTrksPerEvt->GetXaxis()->SetTitle("# tracks");
01300 hTrksPerEvt->GetXaxis()->CenterTitle();
01301 hTrksPerEvt->GetYaxis()->SetTitle("");
01302 hTrksPerEvt->GetYaxis()->CenterTitle();
01303 hTrksPerEvt->SetFillColor(0);
01304 hTrksPerEvt->SetLineColor(1);
01305 hTrksPerEvt->SetLineWidth(1);
01306 hTrksPerEvt->SetLineStyle(1);
01307 //hTrksPerEvt->SetBit(TH1::kCanRebin);
01308
01309 TH1F* hEvtsPerNu=new TH1F("hEvtsPerNu","hEvtsPerNu",10,-1,9);
01310 hEvtsPerNu->SetTitle("Events reco'd per neutrino interaction");
01311 hEvtsPerNu->GetXaxis()->SetTitle("Events reco'd");
01312 hEvtsPerNu->GetXaxis()->CenterTitle();
01313 hEvtsPerNu->GetYaxis()->SetTitle("");
01314 hEvtsPerNu->GetYaxis()->CenterTitle();
01315 hEvtsPerNu->SetFillColor(0);
01316 hEvtsPerNu->SetLineColor(1);
01317 hEvtsPerNu->SetLineWidth(1);
01318 hEvtsPerNu->SetLineStyle(1);
01319 //hEvtsPerNu->SetBit(TH1::kCanRebin);
01320
01321 TH1F* hEvtsPerNuCC=new TH1F("hEvtsPerNuCC","hEvtsPerNuCC",10,-1,9);
01322 hEvtsPerNuCC->SetTitle("Events reco'd per neutrino interaction");
01323 hEvtsPerNuCC->GetXaxis()->SetTitle("Events reco'd");
01324 hEvtsPerNuCC->GetXaxis()->CenterTitle();
01325 hEvtsPerNuCC->GetYaxis()->SetTitle("");
01326 hEvtsPerNuCC->GetYaxis()->CenterTitle();
01327 hEvtsPerNuCC->SetFillColor(0);
01328 hEvtsPerNuCC->SetLineColor(1);
01329 hEvtsPerNuCC->SetLineWidth(1);
01330 hEvtsPerNuCC->SetLineStyle(1);
01331 //hEvtsPerNuCC->SetBit(TH1::kCanRebin);
01332
01333 TH1F* hEvtsPerNuNC=new TH1F("hEvtsPerNuNC","hEvtsPerNuNC",10,-1,9);
01334 hEvtsPerNuNC->SetTitle("Events reco'd per neutrino interaction");
01335 hEvtsPerNuNC->GetXaxis()->SetTitle("Events reco'd");
01336 hEvtsPerNuNC->GetXaxis()->CenterTitle();
01337 hEvtsPerNuNC->GetYaxis()->SetTitle("");
01338 hEvtsPerNuNC->GetYaxis()->CenterTitle();
01339 hEvtsPerNuNC->SetFillColor(0);
01340 hEvtsPerNuNC->SetLineColor(3);
01341 hEvtsPerNuNC->SetLineWidth(2);
01342 hEvtsPerNuNC->SetLineStyle(1);
01343 //hEvtsPerNuNC->SetBit(TH1::kCanRebin);
01344
01345 TH1F* hEvtsPerSlc=new TH1F("hEvtsPerSlc","hEvtsPerSlc",10,-1,9);
01346 hEvtsPerSlc->SetTitle("Events reco'd per Slice");
01347 hEvtsPerSlc->GetXaxis()->SetTitle("Events reco'd");
01348 hEvtsPerSlc->GetXaxis()->CenterTitle();
01349 hEvtsPerSlc->GetYaxis()->SetTitle("");
01350 hEvtsPerSlc->GetYaxis()->CenterTitle();
01351 hEvtsPerSlc->SetFillColor(0);
01352 hEvtsPerSlc->SetLineColor(1);
01353 hEvtsPerSlc->SetLineWidth(2);
01354 hEvtsPerSlc->SetLineStyle(1);
01355 //hEvtsPerSlc->SetBit(TH1::kCanRebin);
01356
01357 TH1F* hEvtsPerSlcg1=new TH1F("hEvtsPerSlcg1","hEvtsPerSlcg1",10,-1,9);
01358 hEvtsPerSlcg1->SetTitle("Events reco'd per Slice");
01359 hEvtsPerSlcg1->GetXaxis()->SetTitle("Events reco'd");
01360 hEvtsPerSlcg1->GetXaxis()->CenterTitle();
01361 hEvtsPerSlcg1->GetYaxis()->SetTitle("");
01362 hEvtsPerSlcg1->GetYaxis()->CenterTitle();
01363 hEvtsPerSlcg1->SetFillColor(0);
01364 hEvtsPerSlcg1->SetLineColor(2);
01365 hEvtsPerSlcg1->SetLineWidth(2);
01366 hEvtsPerSlcg1->SetLineStyle(1);
01367 //hEvtsPerSlcg1->SetBit(TH1::kCanRebin);
01368
01369 TH1F* hEvtsPerSlcg1T=new TH1F("hEvtsPerSlcg1T","hEvtsPerSlcg1T",10,-1,9);
01370 hEvtsPerSlcg1T->SetTitle("Events reco'd per Slice");
01371 hEvtsPerSlcg1T->GetXaxis()->SetTitle("Events reco'd");
01372 hEvtsPerSlcg1T->GetXaxis()->CenterTitle();
01373 hEvtsPerSlcg1T->GetYaxis()->SetTitle("");
01374 hEvtsPerSlcg1T->GetYaxis()->CenterTitle();
01375 hEvtsPerSlcg1T->SetFillColor(0);
01376 hEvtsPerSlcg1T->SetLineColor(4);
01377 hEvtsPerSlcg1T->SetLineWidth(2);
01378 hEvtsPerSlcg1T->SetLineStyle(1);
01379 //hEvtsPerSlcg1T->SetBit(TH1::kCanRebin);
01380
01381 TH2F* hEvtsVsNuEnCC=new TH2F("hEvtsVsNuEnCC","hEvtsVsNuEnCC",
01382 110,-2,20,8,-1,7);
01383 hEvtsVsNuEnCC->SetTitle("Events Reco'd per Neutrino vs True Neutrino Energy");
01384 hEvtsVsNuEnCC->GetXaxis()->SetTitle("True Neutrino Energy (GeV)");
01385 hEvtsVsNuEnCC->GetXaxis()->CenterTitle();
01386 hEvtsVsNuEnCC->GetYaxis()->SetTitle("Events Reco'd");
01387 hEvtsVsNuEnCC->GetYaxis()->CenterTitle();
01388 hEvtsVsNuEnCC->SetFillColor(0);
01389 //hEvtsVsNuEnCC->SetBit(TH1::kCanRebin);
01390
01391 TH2F* hEvtsVsNuEnNC=new TH2F("hEvtsVsNuEnNC","hEvtsVsNuEnNC",
01392 110,-2,20,8,-1,7);
01393 hEvtsVsNuEnNC->SetTitle("Events Reco'd per Neutrino vs True Neutrino Energy");
01394 hEvtsVsNuEnNC->GetXaxis()->SetTitle("True Neutrino Energy (GeV)");
01395 hEvtsVsNuEnNC->GetXaxis()->CenterTitle();
01396 hEvtsVsNuEnNC->GetYaxis()->SetTitle("Events Reco'd");
01397 hEvtsVsNuEnNC->GetYaxis()->CenterTitle();
01398 hEvtsVsNuEnNC->SetFillColor(0);
01399 //hEvtsVsNuEnNC->SetBit(TH1::kCanRebin);
01400
01401
01402
01403 TProfile* pNuMuBarQEffVsEn=new TProfile("pNuMuBarQEffVsEn","pNuMuBarQEffVsEn",50,0,50);
01404 pNuMuBarQEffVsEn->SetTitle("Charge Sign Efficiency vs. True Neutrino Energy");
01405 pNuMuBarQEffVsEn->GetXaxis()->SetTitle("Energy (GeV)");
01406 pNuMuBarQEffVsEn->GetXaxis()->CenterTitle();
01407 pNuMuBarQEffVsEn->GetYaxis()->SetTitle("Efficiency");
01408 pNuMuBarQEffVsEn->GetYaxis()->CenterTitle();
01409 pNuMuBarQEffVsEn->SetLineColor(2);
01410 pNuMuBarQEffVsEn->SetFillColor(0);
01411 //pNuMuBarQEffVsEn->SetBit(TH1::kCanRebin);
01412
01413 TProfile* pNuMuQEffVsEn=new TProfile("pNuMuQEffVsEn","pNuMuQEffVsEn",50,0,50);
01414 pNuMuQEffVsEn->SetTitle("Charge Sign Efficiency vs. True Neutrino Energy");
01415 pNuMuQEffVsEn->GetXaxis()->SetTitle("Energy (GeV)");
01416 pNuMuQEffVsEn->GetXaxis()->CenterTitle();
01417 pNuMuQEffVsEn->GetYaxis()->SetTitle("Efficiency");
01418 pNuMuQEffVsEn->GetYaxis()->CenterTitle();
01419 pNuMuQEffVsEn->SetLineColor(1);
01420 pNuMuQEffVsEn->SetFillColor(0);
01421 //pNuMuQEffVsEn->SetBit(TH1::kCanRebin);
01422
01423 TProfile* pNuMuBarFitPassVsEn=new TProfile("pNuMuBarFitPassVsEn","pNuMuBarFitPassVsEn",50,0,50);
01424 pNuMuBarFitPassVsEn->SetTitle("Fit Pass Fraction vs. True Neutrino Energy");
01425 pNuMuBarFitPassVsEn->GetXaxis()->SetTitle("Energy (GeV)");
01426 pNuMuBarFitPassVsEn->GetXaxis()->CenterTitle();
01427 pNuMuBarFitPassVsEn->GetYaxis()->SetTitle("Pass Fraction");
01428 pNuMuBarFitPassVsEn->GetYaxis()->CenterTitle();
01429 pNuMuBarFitPassVsEn->SetLineColor(2);
01430 pNuMuBarFitPassVsEn->SetFillColor(0);
01431 //pNuMuBarFitPassVsEn->SetBit(TH1::kCanRebin);
01432
01433 TProfile* pNuMuFitPassVsEn=new TProfile("pNuMuFitPassVsEn","pNuMuFitPassVsEn",50,0,50);
01434 pNuMuFitPassVsEn->SetTitle("Fit Pass Fraction vs. True Neutrino Energy");
01435 pNuMuFitPassVsEn->GetXaxis()->SetTitle("Energy (GeV)");
01436 pNuMuFitPassVsEn->GetXaxis()->CenterTitle();
01437 pNuMuFitPassVsEn->GetYaxis()->SetTitle("Pass Fraction");
01438 pNuMuFitPassVsEn->GetYaxis()->CenterTitle();
01439 pNuMuFitPassVsEn->SetLineColor(1);
01440 pNuMuFitPassVsEn->SetFillColor(0);
01441 //pNuMuFitPassVsEn->SetBit(TH1::kCanRebin);
01442
01443
01444
01445 TH1F* hNuMuBarEnGoodQ=new TH1F("hNuMuBarEnGoodQ","hNuMuBarEnGoodQ",
01446 4*352,-32,320);
01447 hNuMuBarEnGoodQ->GetXaxis()->SetTitle("Energy (GeV)");
01448 hNuMuBarEnGoodQ->GetXaxis()->CenterTitle();
01449 hNuMuBarEnGoodQ->GetYaxis()->SetTitle("");
01450 hNuMuBarEnGoodQ->GetYaxis()->CenterTitle();
01451 hNuMuBarEnGoodQ->SetFillColor(0);
01452 hNuMuBarEnGoodQ->SetLineColor(2);
01453 //hNuMuBarEnGoodQ->SetBit(TH1::kCanRebin);
01454
01455 TH1F* hNuMuEnGoodQ=new TH1F("hNuMuEnGoodQ","hNuMuEnGoodQ",4*352,-32,320);
01456 hNuMuEnGoodQ->GetXaxis()->SetTitle("Energy (GeV)");
01457 hNuMuEnGoodQ->GetXaxis()->CenterTitle();
01458 hNuMuEnGoodQ->GetYaxis()->SetTitle("");
01459 hNuMuEnGoodQ->GetYaxis()->CenterTitle();
01460 hNuMuEnGoodQ->SetFillColor(0);
01461 hNuMuEnGoodQ->SetLineColor(1);
01462 hNuMuEnGoodQ->SetLineWidth(2);
01463 //hNuMuEnGoodQ->SetBit(TH1::kCanRebin);
01464
01465 TH1F* hNuMuBarEnBadQ=new TH1F("hNuMuBarEnBadQ","hNuMuBarEnBadQ",
01466 4*352,-32,320);
01467 hNuMuBarEnBadQ->GetXaxis()->SetTitle("Energy (GeV)");
01468 hNuMuBarEnBadQ->GetXaxis()->CenterTitle();
01469 hNuMuBarEnBadQ->GetYaxis()->SetTitle("");
01470 hNuMuBarEnBadQ->GetYaxis()->CenterTitle();
01471 hNuMuBarEnBadQ->SetFillColor(0);
01472 hNuMuBarEnBadQ->SetLineColor(2);
01473 //hNuMuBarEnBadQ->SetBit(TH1::kCanRebin);
01474
01475 TH1F* hNuMuEnBadQ=new TH1F("hNuMuEnBadQ","hNuMuEnBadQ",4*352,-32,320);
01476 hNuMuEnBadQ->GetXaxis()->SetTitle("Energy (GeV)");
01477 hNuMuEnBadQ->GetXaxis()->CenterTitle();
01478 hNuMuEnBadQ->GetYaxis()->SetTitle("");
01479 hNuMuEnBadQ->GetYaxis()->CenterTitle();
01480 hNuMuEnBadQ->SetFillColor(0);
01481 hNuMuEnBadQ->SetLineColor(1);
01482 hNuMuEnBadQ->SetLineWidth(2);
01483 //hNuMuEnBadQ->SetBit(TH1::kCanRebin);
01484
01485
01486
01487 TH1F* hNuMuBarRecoEnGoodQ=new TH1F("hNuMuBarRecoEnGoodQ","hNuMuBarRecoEnGoodQ",
01488 4*352,-32,320);
01489 hNuMuBarRecoEnGoodQ->GetXaxis()->SetTitle("Energy (GeV)");
01490 hNuMuBarRecoEnGoodQ->GetXaxis()->CenterTitle();
01491 hNuMuBarRecoEnGoodQ->GetYaxis()->SetTitle("");
01492 hNuMuBarRecoEnGoodQ->GetYaxis()->CenterTitle();
01493 hNuMuBarRecoEnGoodQ->SetFillColor(0);
01494 hNuMuBarRecoEnGoodQ->SetLineColor(2);
01495 //hNuMuBarRecoEnGoodQ->SetBit(TH1::kCanRebin);
01496
01497 TH1F* hNuMuRecoEnGoodQ=new TH1F("hNuMuRecoEnGoodQ","hNuMuRecoEnGoodQ",4*352,-32,320);
01498 hNuMuRecoEnGoodQ->GetXaxis()->SetTitle("Energy (GeV)");
01499 hNuMuRecoEnGoodQ->GetXaxis()->CenterTitle();
01500 hNuMuRecoEnGoodQ->GetYaxis()->SetTitle("");
01501 hNuMuRecoEnGoodQ->GetYaxis()->CenterTitle();
01502 hNuMuRecoEnGoodQ->SetFillColor(0);
01503 hNuMuRecoEnGoodQ->SetLineColor(1);
01504 hNuMuRecoEnGoodQ->SetLineWidth(2);
01505 //hNuMuRecoEnGoodQ->SetBit(TH1::kCanRebin);
01506
01507 TH1F* hNuMuBarRecoEnBadQ=new TH1F("hNuMuBarRecoEnBadQ","hNuMuBarRecoEnBadQ",
01508 4*352,-32,320);
01509 hNuMuBarRecoEnBadQ->GetXaxis()->SetTitle("Energy (GeV)");
01510 hNuMuBarRecoEnBadQ->GetXaxis()->CenterTitle();
01511 hNuMuBarRecoEnBadQ->GetYaxis()->SetTitle("");
01512 hNuMuBarRecoEnBadQ->GetYaxis()->CenterTitle();
01513 hNuMuBarRecoEnBadQ->SetFillColor(0);
01514 hNuMuBarRecoEnBadQ->SetLineColor(2);
01515 //hNuMuBarRecoEnBadQ->SetBit(TH1::kCanRebin);
01516
01517 TH1F* hNuMuRecoEnBadQ=new TH1F("hNuMuRecoEnBadQ","hNuMuRecoEnBadQ",4*352,-32,320);
01518 hNuMuRecoEnBadQ->GetXaxis()->SetTitle("Energy (GeV)");
01519 hNuMuRecoEnBadQ->GetXaxis()->CenterTitle();
01520 hNuMuRecoEnBadQ->GetYaxis()->SetTitle("");
01521 hNuMuRecoEnBadQ->GetYaxis()->CenterTitle();
01522 hNuMuRecoEnBadQ->SetFillColor(0);
01523 hNuMuRecoEnBadQ->SetLineColor(1);
01524 hNuMuRecoEnBadQ->SetLineWidth(2);
01525 //hNuMuRecoEnBadQ->SetBit(TH1::kCanRebin);
01526
01527
01528
01529 TH1F* hNuMuBarEnTrk0=new TH1F("hNuMuBarEnTrk0","hNuMuBarEnTrk0",
01530 4*352,-32,320);
01531 hNuMuBarEnTrk0->GetXaxis()->SetTitle("Energy (GeV)");
01532 hNuMuBarEnTrk0->GetXaxis()->CenterTitle();
01533 hNuMuBarEnTrk0->GetYaxis()->SetTitle("");
01534 hNuMuBarEnTrk0->GetYaxis()->CenterTitle();
01535 hNuMuBarEnTrk0->SetFillColor(0);
01536 hNuMuBarEnTrk0->SetLineColor(2);
01537 //hNuMuBarEnTrk0->SetBit(TH1::kCanRebin);
01538
01539 TH1F* hNuMuEnTrk0=new TH1F("hNuMuEnTrk0","hNuMuEnTrk0",4*352,-32,320);
01540 hNuMuEnTrk0->GetXaxis()->SetTitle("Energy (GeV)");
01541 hNuMuEnTrk0->GetXaxis()->CenterTitle();
01542 hNuMuEnTrk0->GetYaxis()->SetTitle("");
01543 hNuMuEnTrk0->GetYaxis()->CenterTitle();
01544 hNuMuEnTrk0->SetFillColor(0);
01545 hNuMuEnTrk0->SetLineColor(1);
01546 hNuMuEnTrk0->SetLineWidth(2);
01547 //hNuMuEnTrk0->SetBit(TH1::kCanRebin);
01548
01549
01550
01551 TH1F* hNuMuBarChi2GoodQ=new TH1F("hNuMuBarChi2GoodQ",
01552 "hNuMuBarChi2GoodQ",
01553 10*176,-16,160);
01554 hNuMuBarChi2GoodQ->GetXaxis()->SetTitle("Chi2/ndof");
01555 hNuMuBarChi2GoodQ->GetXaxis()->CenterTitle();
01556 hNuMuBarChi2GoodQ->GetYaxis()->SetTitle("");
01557 hNuMuBarChi2GoodQ->GetYaxis()->CenterTitle();
01558 hNuMuBarChi2GoodQ->SetFillColor(0);
01559 hNuMuBarChi2GoodQ->SetLineColor(2);
01560 //hNuMuBarChi2GoodQ->SetBit(TH1::kCanRebin);
01561
01562 TH1F* hNuMuChi2GoodQ=new TH1F("hNuMuChi2GoodQ","hNuMuChi2GoodQ",
01563 10*176,-16,160);
01564 hNuMuChi2GoodQ->GetXaxis()->SetTitle("Chi2/ndof");
01565 hNuMuChi2GoodQ->GetXaxis()->CenterTitle();
01566 hNuMuChi2GoodQ->GetYaxis()->SetTitle("");
01567 hNuMuChi2GoodQ->GetYaxis()->CenterTitle();
01568 hNuMuChi2GoodQ->SetFillColor(0);
01569 hNuMuChi2GoodQ->SetLineColor(1);
01570 hNuMuChi2GoodQ->SetLineWidth(2);
01571 //hNuMuChi2GoodQ->SetBit(TH1::kCanRebin);
01572
01573 TH1F* hNuMuBarChi2BadQ=new TH1F("hNuMuBarChi2BadQ",
01574 "hNuMuBarChi2BadQ",
01575 10*176,-16,160);
01576 hNuMuBarChi2BadQ->GetXaxis()->SetTitle("Chi2/ndof");
01577 hNuMuBarChi2BadQ->GetXaxis()->CenterTitle();
01578 hNuMuBarChi2BadQ->GetYaxis()->SetTitle("");
01579 hNuMuBarChi2BadQ->GetYaxis()->CenterTitle();
01580 hNuMuBarChi2BadQ->SetFillColor(0);
01581 hNuMuBarChi2BadQ->SetLineColor(2);
01582 hNuMuBarChi2BadQ->SetLineStyle(2);
01583 //hNuMuBarChi2BadQ->SetBit(TH1::kCanRebin);
01584
01585 TH1F* hNuMuChi2BadQ=new TH1F("hNuMuChi2BadQ","hNuMuChi2BadQ",
01586 10*176,-16,160);
01587 hNuMuChi2BadQ->GetXaxis()->SetTitle("Chi2/ndof");
01588 hNuMuChi2BadQ->GetXaxis()->CenterTitle();
01589 hNuMuChi2BadQ->GetYaxis()->SetTitle("");
01590 hNuMuChi2BadQ->GetYaxis()->CenterTitle();
01591 hNuMuChi2BadQ->SetFillColor(0);
01592 hNuMuChi2BadQ->SetLineColor(1);
01593 hNuMuChi2BadQ->SetLineWidth(2);
01594 hNuMuChi2BadQ->SetLineStyle(2);
01595 //hNuMuChi2BadQ->SetBit(TH1::kCanRebin);
01596
01597
01598
01599 TH1F* hNuMuBarSigqp_qpGoodQ=new TH1F("hNuMuBarSigqp_qpGoodQ",
01600 "hNuMuBarSigqp_qpGoodQ",
01601 5000,-100,100);
01602 hNuMuBarSigqp_qpGoodQ->GetXaxis()->SetTitle("#sigma(Q/P)/(Q/P)");
01603 hNuMuBarSigqp_qpGoodQ->GetXaxis()->CenterTitle();
01604 hNuMuBarSigqp_qpGoodQ->GetYaxis()->SetTitle("");
01605 hNuMuBarSigqp_qpGoodQ->GetYaxis()->CenterTitle();
01606 hNuMuBarSigqp_qpGoodQ->SetFillColor(0);
01607 hNuMuBarSigqp_qpGoodQ->SetLineColor(2);
01608 //hNuMuBarSigqp_qpGoodQ->SetBit(TH1::kCanRebin);
01609
01610 TH1F* hNuMuSigqp_qpGoodQ=new TH1F("hNuMuSigqp_qpGoodQ",
01611 "hNuMuSigqp_qpGoodQ",
01612 5000,-100,100);
01613 hNuMuSigqp_qpGoodQ->GetXaxis()->SetTitle("#sigma(Q/P)/(Q/P)");
01614 hNuMuSigqp_qpGoodQ->GetXaxis()->CenterTitle();
01615 hNuMuSigqp_qpGoodQ->GetYaxis()->SetTitle("");
01616 hNuMuSigqp_qpGoodQ->GetYaxis()->CenterTitle();
01617 hNuMuSigqp_qpGoodQ->SetFillColor(0);
01618 hNuMuSigqp_qpGoodQ->SetLineColor(1);
01619 hNuMuSigqp_qpGoodQ->SetLineWidth(2);
01620 //hNuMuSigqp_qpGoodQ->SetBit(TH1::kCanRebin);
01621
01622 TH1F* hNuMuBarSigqp_qpBadQ=new TH1F("hNuMuBarSigqp_qpBadQ",
01623 "hNuMuBarSigqp_qpBadQ",
01624 5000,-100,100);
01625 hNuMuBarSigqp_qpBadQ->GetXaxis()->SetTitle("#sigma(Q/P)/(Q/P)");
01626 hNuMuBarSigqp_qpBadQ->GetXaxis()->CenterTitle();
01627 hNuMuBarSigqp_qpBadQ->GetYaxis()->SetTitle("");
01628 hNuMuBarSigqp_qpBadQ->GetYaxis()->CenterTitle();
01629 hNuMuBarSigqp_qpBadQ->SetFillColor(0);
01630 hNuMuBarSigqp_qpBadQ->SetLineColor(2);
01631 hNuMuBarSigqp_qpBadQ->SetLineStyle(2);
01632 //hNuMuBarSigqp_qpBadQ->SetBit(TH1::kCanRebin);
01633
01634 TH1F* hNuMuSigqp_qpBadQ=new TH1F("hNuMuSigqp_qpBadQ",
01635 "hNuMuSigqp_qpBadQ",
01636 5000,-100,100);
01637 hNuMuSigqp_qpBadQ->GetXaxis()->SetTitle("#sigma(Q/P)/(Q/P)");
01638 hNuMuSigqp_qpBadQ->GetXaxis()->CenterTitle();
01639 hNuMuSigqp_qpBadQ->GetYaxis()->SetTitle("");
01640 hNuMuSigqp_qpBadQ->GetYaxis()->CenterTitle();
01641 hNuMuSigqp_qpBadQ->SetFillColor(0);
01642 hNuMuSigqp_qpBadQ->SetLineColor(1);
01643 hNuMuSigqp_qpBadQ->SetLineWidth(2);
01644 hNuMuSigqp_qpBadQ->SetLineStyle(2);
01645 //hNuMuSigqp_qpBadQ->SetBit(TH1::kCanRebin);
01646
01647 TH1F* hDeltaTime=new TH1F("hDeltaTime","hDeltaTime",10100,-100,10000);
01648 hDeltaTime->GetXaxis()->SetTitle("{#Delta}T (ns)");
01649 hDeltaTime->GetXaxis()->CenterTitle();
01650 hDeltaTime->GetYaxis()->SetTitle("");
01651 hDeltaTime->GetYaxis()->CenterTitle();
01652 hDeltaTime->SetFillColor(0);
01653 hDeltaTime->SetLineColor(1);
01654 hDeltaTime->SetLineWidth(2);
01655 hDeltaTime->SetLineStyle(2);
01656 //hDeltaTime->SetBit(TH1::kCanRebin);
01657
01658 TH1F* hDeltaT=new TH1F("hDeltaT","hDeltaT",10100,-100,10000);
01659 hDeltaT->GetXaxis()->SetTitle("#DeltaT (ns)");
01660 hDeltaT->GetXaxis()->CenterTitle();
01661 hDeltaT->GetYaxis()->SetTitle("");
01662 hDeltaT->GetYaxis()->CenterTitle();
01663 hDeltaT->SetFillColor(0);
01664 hDeltaT->SetLineColor(1);
01665 hDeltaT->SetLineWidth(2);
01666 hDeltaT->SetLineStyle(1);
01667 //hDeltaT->SetBit(TH1::kCanRebin);
01668
01669 TH1F* hDeltaTg1=new TH1F("hDeltaTg1","hDeltaTg1",10100,-100,10000);
01670 hDeltaTg1->GetXaxis()->SetTitle("#DeltaT (ns)");
01671 hDeltaTg1->GetXaxis()->CenterTitle();
01672 hDeltaTg1->GetYaxis()->SetTitle("");
01673 hDeltaTg1->GetYaxis()->CenterTitle();
01674 hDeltaTg1->SetFillColor(0);
01675 hDeltaTg1->SetLineColor(2);
01676 hDeltaTg1->SetLineWidth(2);
01677 hDeltaTg1->SetLineStyle(1);
01678 //hDeltaTg1->SetBit(TH1::kCanRebin);
01679
01680 Int_t totalSnarlsCounter=0;
01681 Int_t ccInFidCounter=0;
01682 Int_t recoEvtCounter=0;
01683 Int_t nuIntCounter=0;
01684 Int_t oneRecoEvtCounter=0;
01685 Int_t zeroTrackCounter=0;
01686 Int_t zeroTrackNuMuCounter=0;
01687 Int_t zeroTrackNuMuBarCounter=0;
01688 Int_t twoTrackCounter=0;
01689 Int_t twoTrackNuMuCounter=0;
01690 Int_t twoTrackNuMuBarCounter=0;
01691 Int_t threeTrackCounter=0;
01692 Int_t gr3TrackCounter=0;
01693 Int_t oneTrackCounter=0;
01694 Int_t passFitCounter=0;
01695 Int_t badNuMuCounter=0;
01696 Int_t goodNuMuCounter=0;
01697 Int_t badNuMuBarCounter=0;
01698 Int_t goodNuMuBarCounter=0;
01699
01700 const NuCuts cuts;
01701 const NuReco reco;
01702 const NuExtraction ext;
01703
01704 NuConfig config;
01705 this->ExtractConfig(config);
01706 //get an instance of the code library
01707 const NuLibrary& lib=NuLibrary::Instance();
01708
01712
01713 this->InitialiseLoopVariables();
01714
01715 //for(Int_t entry=0;entry<10000;entry++){
01716 for(Int_t entry=0;entry<this->GetEntries();entry++){
01717
01718 this->SetLoopVariables(entry);
01719
01720 set<Int_t> setNuInFid;
01721 set<Int_t> setNuInFidCC;
01722 map<Int_t,Double_t> deltaTs;
01723 map<Int_t,Int_t> evtsPerSlc;
01724
01725 //get reference to NtpStRecord from base class
01726 const NtpStRecord& ntp=(*this->GetNtpStRecord());
01727
01728
01729 const RecCandHeader& rec=ntp.GetHeader();
01730 MAXMSG("NuAnalysis",Msg::kInfo,5)
01731 <<"Found: run="<<rec.GetRun()
01732 <<", subrun="<<rec.GetSubRun()
01733 <<", detector="<<rec.GetVldContext().GetDetector()
01734 <<", simFlag="<<rec.GetVldContext().GetSimFlag()
01735 <<endl;
01736
01737 VldTimeStamp vldts;
01738 //VldTimeStamp vldts(ev.UnixTime,0);
01739 VldContext vc(rec.GetVldContext().GetDetector(),
01740 rec.GetVldContext().GetSimFlag(),vldts);
01741 //get the ugh
01742 UgliGeomHandle ugh(vc);
01743
01744 TClonesArray& mcTca=*ntp.mc;
01745 Int_t numInt=mcTca.GetEntries();
01746 MAXMSG("NuAnalysis",Msg::kInfo,20)
01747 <<"Number of entries in NtpMCTruth="
01748 <<mcTca.GetEntries()<<endl;
01749 //if (mcTca.GetEntries()==0){
01750
01751 hNuInt->Fill(mcTca.GetEntries());
01752
01753 for (Int_t i=0;i<numInt;i++){
01754 const NtpMCTruth& mc=*(dynamic_cast<NtpMCTruth*>(mcTca[i]));
01755
01756 TVector3 xyz(mc.vtxx,mc.vtxy,mc.vtxz);
01757 // calculate the positions in UVZ space
01758 TVector3 uvz=ugh.xyz2uvz(xyz);
01759
01760 //simple event object to hold important quantities
01761 NuEvent nu;
01762
01763 //get the run, snarl, etc info
01764 ext.ExtractGeneralInfo(ntp,nu);
01765
01766 Bool_t isInFidVol=cuts.IsInFidVol(mc.vtxx,mc.vtxy,mc.vtxz,
01767 uvz.X(),uvz.Y(),
01768 0,0,
01769 nu.detector,nu.anaVersion,
01770 nu.releaseType,nu.simFlag);
01771
01772 if (isInFidVol) {
01773 deltaTs.clear();
01774 reco.GetEvtDeltaTs(ntp,deltaTs);
01775 evtsPerSlc.clear();
01776 reco.GetEvtsPerSlc(ntp,evtsPerSlc);
01777 MAXMSG("NuAnalysis",Msg::kInfo,100)
01778 <<"Contained mc="<<mc.index<<endl;
01779 setNuInFid.insert(mc.index);
01780 if (mc.iaction==1 && (mc.inu==-14 || mc.inu==14)) {
01781 setNuInFidCC.insert(mc.index);
01782 }
01783 }
01784
01785 MAXMSG("NuAnalysis",Msg::kDebug,20)
01786 <<"isInFidVol="<<isInFidVol
01787 <<", x="<<mc.vtxx<<", y="<<mc.vtxy<<", z="<<mc.vtxz
01788 <<", u="<<uvz.X()<<", v="<<uvz.Y()<<endl;
01789
01790 if (isInFidVol){
01791 MAXMSG("NuAnalysis",Msg::kInfo,20)
01792 <<"isInFidVol="<<isInFidVol
01793 <<", x="<<mc.vtxx<<", y="<<mc.vtxy<<", z="<<mc.vtxz
01794 <<", u="<<uvz.X()<<", v="<<uvz.Y()<<endl;
01795 }
01796
01797 //calc index for vector of histos
01798 Int_t enIndex=static_cast<Int_t>(mc.p4neu[3]*2.0+1);
01799
01800 if (mc.iaction==1){
01801 hNuYCC->Fill(mc.y);
01802 if (isInFidVol) {
01803 hYvsXFidCC->Fill(mc.vtxx,mc.vtxy);
01804 }
01805 hYvsXCC->Fill(mc.vtxx,mc.vtxy);
01806 hYvsX400CC->Fill(mc.vtxx,mc.vtxy);
01807 hYvsZCC->Fill(mc.vtxz,mc.vtxy);
01808 hXvsZCC->Fill(mc.vtxz,mc.vtxx);
01809 if (mc.vtxy>-2.5 && mc.vtxy<3) hXvsZZoomCC->
01810 Fill(mc.vtxz,mc.vtxx);
01811 hXYZCC->Fill(mc.vtxx,mc.vtxz,mc.vtxy);
01812 hZCC->Fill(mc.vtxz);
01813 hinuCC->Fill(mc.inu);
01814 if (mc.inu==-14){
01815 if (enIndex<nbinsForY) vNuYNuMuBarCC[enIndex]->Fill(mc.y);
01816 hNuMuBarEnCC->Fill(mc.p4neu[3]);
01817 hNuMuBarEn4000CC->Fill(mc.p4neu[3]);
01818 if (isInFidVol) {
01819 hNuYFidNuMuBarCC->Fill(mc.y);
01820 MAXMSG("NuAnalysis",Msg::kInfo,200)
01821 <<"enIndex="<<enIndex<<", E="<<mc.p4neu[3]<<endl;
01822 hNuMuBarFidEnCC->Fill(mc.p4neu[3]);
01823 hNuMuBarLike->Fill(mc.p4neu[3]);
01824 }
01825 }
01826 else if (mc.inu==14) {
01827 if (enIndex<nbinsForY) vNuYNuMuCC[enIndex]->Fill(mc.y);
01828 hNuMuEnCC->Fill(mc.p4neu[3]);
01829 hNuMuEn4000CC->Fill(mc.p4neu[3]);
01830 if (isInFidVol) {
01831 hNuYFidNuMuCC->Fill(mc.y);
01832 hNuMuFidEnCC->Fill(mc.p4neu[3]);
01833 hNuMuLike->Fill(mc.p4neu[3]);
01834 }
01835 }
01836 else if (mc.inu==-12) hNueBarEnCC->Fill(mc.p4neu[3]);
01837 else if (mc.inu==12) hNueEnCC->Fill(mc.p4neu[3]);
01838 else {
01839 MAXMSG("NuAnalysis",Msg::kWarning,100)
01840 <<"particle not defined for filling histo="<<mc.inu<<endl;
01841 }
01842 }
01843 else if (mc.iaction==0){
01844 hNuYNC->Fill(mc.y);
01845 if (isInFidVol) {
01846 hYvsXFidNC->Fill(mc.vtxx,mc.vtxy);
01847 }
01848 hYvsXNC->Fill(mc.vtxx,mc.vtxy);
01849 hYvsX400NC->Fill(mc.vtxx,mc.vtxy);
01850 hYvsZNC->Fill(mc.vtxz,mc.vtxy);
01851 hXvsZNC->Fill(mc.vtxz,mc.vtxx);
01852 //cut out rock events above and below
01853 if (mc.vtxy>-2.5 && mc.vtxy<3) hXvsZZoomNC->
01854 Fill(mc.vtxz,mc.vtxx);
01855 hXYZNC->Fill(mc.vtxx,mc.vtxz,mc.vtxy);
01856 hZNC->Fill(mc.vtxz);
01857 hinuNC->Fill(mc.inu);
01858 if (mc.inu==-14) {
01859 if (enIndex<nbinsForY) vNuYNuMuBarNC[enIndex]->Fill(mc.y);
01860 hNuMuBarEnNC->Fill(mc.p4neu[3]);
01861 hNuMuBarEnDepNC->Fill(mc.y*mc.p4neu[3]);
01862 if (isInFidVol) {
01863 hNuYFidNuMuBarNC->Fill(mc.y);
01864 }
01865 }
01866 else if (mc.inu==14) {
01867 if (enIndex<nbinsForY) vNuYNuMuNC[enIndex]->Fill(mc.y);
01868 hNuMuEnNC->Fill(mc.p4neu[3]);
01869 hNuMuEnDepNC->Fill(mc.y*mc.p4neu[3]);
01870 if (isInFidVol) {
01871 hNuYFidNuMuNC->Fill(mc.y);
01872 }
01873 }
01874 else if (mc.inu==-12) {
01875 hNueBarEnNC->Fill(mc.p4neu[3]);
01876 hNueBarEnDepNC->Fill(mc.y*mc.p4neu[3]);
01877 }
01878 else if (mc.inu==12) {
01879 hNueEnNC->Fill(mc.p4neu[3]);
01880 hNueEnDepNC->Fill(mc.y*mc.p4neu[3]);
01881 }
01882 else {
01883 MAXMSG("NuAnalysis",Msg::kWarning,100)
01884 <<"particle not defined for filling histo="<<mc.inu<<endl;
01885 }
01886 }
01887 else cout<<"Ahhh, bad iaction"<<endl;
01888 }
01889
01890 MAXMSG("NuAnalysis",Msg::kInfo,100)
01891 <<"Number of fiducial volume interactions in spill="
01892 <<setNuInFid.size()<<endl;
01893
01894 TClonesArray& thevtTca=(*ntp.thevt);//TruthHelper Track TCA
01895 const Int_t numthevts=thevtTca.GetEntriesFast();
01896 TClonesArray& evtTca=(*ntp.evt);
01897 //const Int_t numEvts=evtTca.GetEntriesFast();
01898
01899 //set of events with true neutrino interactions in the fid vol
01900 set<Int_t> evtsInFid;
01901 set<Int_t> evtsInFidCC;
01902
01903 set<Int_t>::iterator setNuInFidEnd=setNuInFid.end();
01904 map<Int_t,Int_t> nuEvtCounter;
01905 map<Int_t,Int_t> nuEvtCounterCC;
01906 map<Int_t,multiset<Double_t> > nuIntEvtTimesCC;
01907 for (Int_t ithevt=0;ithevt<numthevts;ithevt++){
01908 const NtpTHEvent& thevt=
01909 *dynamic_cast<NtpTHEvent*>(thevtTca[ithevt]);
01910 const NtpSREvent& evt=
01911 *dynamic_cast<NtpSREvent*>(evtTca[ithevt]);
01912
01913 if (setNuInFid.find(thevt.neumc)!=setNuInFidEnd){
01914 MAXMSG("NuAnalysis",Msg::kInfo,100)
01915 <<"Found mc="<<thevt.neumc<<endl;
01916 //count the number of reco events a particular nu interaction
01917 //is believed to cause
01918 nuEvtCounter[thevt.neumc]++;
01919 //keep a list of the events corresponding to neutrinos in
01920 //the fiducial volume
01921 evtsInFid.insert(ithevt);
01922
01923 const NtpMCTruth& mc=
01924 *(dynamic_cast<NtpMCTruth*>(mcTca[thevt.neumc]));
01925 if (mc.iaction==1 && (mc.inu==-14 || mc.inu==14)) {
01926 nuEvtCounterCC[thevt.neumc]++;
01927 evtsInFidCC.insert(ithevt);
01928
01929 //store the median times of the events
01930 //from each neutrino interaction
01931 Double_t time=reco.GetEvtMedianTime(ntp,evt);
01932 nuIntEvtTimesCC[thevt.neumc].insert(time);
01933 }
01934 }
01935 }
01936
01937 //need to work out the number of times no event is found
01938 typedef set<Int_t>::iterator setNuInFidIt;
01939 for (setNuInFidIt it=setNuInFid.begin();
01940 it!=setNuInFid.end();++it){
01941 //check if event is not in the map (i.e. no evt reco'd)
01942 MAXMSG("NuAnalysis",Msg::kInfo,100)
01943 <<"Looking in evt counter for mc.index="<<*it
01944 <<", evtCo size="<<nuEvtCounter.size()
01945 <<", setNu size="<<setNuInFid.size()
01946 <<endl;
01947 if (nuEvtCounter.find(*it)!=nuEvtCounter.end()){
01948 MAXMSG("NuAnalysis",Msg::kInfo,100)
01949 <<" Found mc.index="<<*it<<endl;
01950 }
01951 else {
01952 MAXMSG("NuAnalysis",Msg::kInfo,30)
01953 <<" NOT found mc.index="<<*it
01954 <<", evtCo size="<<nuEvtCounter.size()
01955 <<", setNu size="<<setNuInFid.size()
01956 <<endl;
01957 //put an entry in the map with a zero
01958 nuEvtCounter[*it]=0;
01959 }
01960 }
01961
01962 //fill histo with number of reco evts per nu interaction
01963 typedef map<Int_t,Int_t>::iterator evCounterIt;
01964 for (evCounterIt it=nuEvtCounter.begin();
01965 it!=nuEvtCounter.end();++it){
01966 //get the mc object
01967 const NtpMCTruth& mc=
01968 *(dynamic_cast<NtpMCTruth*>(mcTca[it->first]));
01969
01970 //cut out the nues
01971 if (!(mc.inu==-14 || mc.inu==14)) continue;
01972
01973 hEvtsPerNu->Fill(it->second);
01974 if (mc.iaction==1){//CC
01975 hEvtsPerNuCC->Fill(it->second);
01976 hEvtsVsNuEnCC->Fill(mc.p4neu[3],it->second);
01977 }
01978 else if (mc.iaction==0){//NC
01979 hEvtsPerNuNC->Fill(it->second);
01980 hEvtsVsNuEnNC->Fill(mc.p4neu[3],it->second);
01981 }
01982 }
01983
01987
01988 //nuEvtCounterCC
01989 totalSnarlsCounter++;
01990 //check that a CC neutrino interaction occured in fid vol
01991 if (setNuInFidCC.size()<1) continue;
01992 ccInFidCounter++;
01993 //require that there is a reco'd fid vol event
01994 if (evtsInFidCC.size()<1) continue;
01995 recoEvtCounter++;
01996
01997 //get the TCAs
01998 TClonesArray& trkTca=(*ntp.trk);
01999 //const Int_t numTrks=trkTca.GetEntriesFast();
02000 //TClonesArray& stpTca=(*ntp.stp);
02001 //const Int_t numStps=stpTca.GetEntriesFast();
02002
02003 typedef set<Int_t>::iterator setEvtsInFidIt;
02004 for (setEvtsInFidIt it=evtsInFidCC.begin();
02005 it!=evtsInFidCC.end();++it) {
02006 const NtpTHEvent& thevt=
02007 *dynamic_cast<NtpTHEvent*>(thevtTca[*it]);
02008 const NtpSREvent& evt=
02009 *dynamic_cast<NtpSREvent*>(evtTca[*it]);
02010 const NtpMCTruth& mc=
02011 *(dynamic_cast<NtpMCTruth*>(mcTca[thevt.neumc]));
02012
02013 //count the total number of neutrino interactions
02014 nuIntCounter++;
02015
02016 //cut out the NCs
02017 if (mc.iaction==0) cout<<"Ahhh NC"<<endl;
02018 //cut out the nues
02019 if (!(mc.inu==-14 || mc.inu==14)) cout<<"Ahhh nue"<<endl;
02020
02021 //find number of reco'd events for neutrino int
02022 //associated with this event
02023 Int_t numEvtsPerNuInt=-1;
02024 map<Int_t,Int_t>::iterator countIt=
02025 nuEvtCounterCC.find(thevt.neumc);
02026 if (countIt!=nuEvtCounterCC.end()){
02027 numEvtsPerNuInt=countIt->second;
02028
02029 // nuIntEvtTimesCC[thevt.neumc].insert(time);
02030 Int_t times=nuIntEvtTimesCC.find(thevt.neumc)->second.size();
02031 if (times>1 || numEvtsPerNuInt>1){
02032 MAXMSG("NuAnalysis",Msg::kInfo,200)
02033 <<"numEvtsPerNuInt="<<numEvtsPerNuInt
02034 <<", times="<<times<<endl;
02035
02036 typedef map<Int_t,multiset<Double_t> >::iterator nuIntIt;
02037 nuIntIt nuInt=nuIntEvtTimesCC.find(thevt.neumc);
02038 typedef multiset<Double_t>::iterator timeIt;
02039 timeIt beg=nuInt->second.begin();
02040 timeIt end=nuInt->second.end();
02041 timeIt lastTimeIt=nuInt->second.end();
02042 for (timeIt it=beg;it!=end;++it){
02043 MsgFormat ffmt("%9.9f");
02044
02045 MAXMSG("NuAnalysis",Msg::kDebug,200)
02046 <<" in multiset time="<<ffmt(*it)
02047 <<", evt.slc="<<evt.slc<<endl;
02048 if (lastTimeIt!=end){
02049 Double_t deltaTime=(*it)-(*lastTimeIt);
02050 MAXMSG("NuAnalysis",Msg::kDebug,200)
02051 <<" deltaTime="<<ffmt(deltaTime)<<endl;
02052 hDeltaTime->Fill(deltaTime/(Munits::ns));
02053 }
02054
02055 //record the current it
02056 lastTimeIt=it;
02057 }
02058 //nuIntEvtTimesCC.find(thevt.neumc)->second.begin();
02059 }
02060 //if (countIt->second!=1) {
02061 //MAXMSG("NuAnalysis",Msg::kInfo,100)
02062 //<<"NOT using mc="<<thevt.neumc
02063 //<<" with reco'd events="<<countIt->second
02064 //<<endl;
02065 //continue;
02066 //}
02067 }
02068 else cout<<"Can't find mc="<<thevt.neumc<<endl;
02069
02070 if (numEvtsPerNuInt>1) {
02071 const NtpSREvent& evt=
02072 *dynamic_cast<NtpSREvent*>(evtTca[*it]);
02073 const NtpMCTruth& mc=
02074 *(dynamic_cast<NtpMCTruth*>(mcTca[thevt.neumc]));
02075 MAXMSG("NuAnalysis",Msg::kDebug,200)
02076 <<"entry="<<entry<<", NuInt: mc="<<thevt.neumc
02077 <<", slc="<<evt.slc
02078 <<", evt="<<*it<<" ("<<numEvtsPerNuInt<<")"
02079 <<", ntrk="<<evt.ntrack
02080 <<", nshw="<<evt.nshower
02081 <<", Nu: E="<<mc.p4neu[3]
02082 <<", y="<<mc.y
02083 <<endl;
02084
02085 //check that a delta T was found for this event
02086 if (deltaTs.find(evt.index)!=deltaTs.end()){
02087 hDeltaTg1->Fill(deltaTs[evt.index]/(Munits::ns));
02088 //only look at evts per slice for > 50 ns dT
02089 if (deltaTs[evt.index]/(Munits::ns)>50){
02090 hEvtsPerSlcg1T->Fill(evtsPerSlc[evt.slc]);
02091 }
02092 }
02093 else cout<<"No delta T for evt="<<evt.index<<endl;
02094 hEvtsPerSlcg1->Fill(evtsPerSlc[evt.slc]);
02095 }
02096 else {
02097 if (deltaTs.find(evt.index)!=deltaTs.end()){
02098 hDeltaT->Fill(deltaTs[evt.index]/(Munits::ns));
02099 }
02100 else cout<<"No delta T for evt="<<evt.index<<endl;
02101 hEvtsPerSlc->Fill(evtsPerSlc[evt.slc]);
02102 }
02103
02104 //only analyse further events with 1 reco'd evt
02105 if (numEvtsPerNuInt!=1) continue;
02106
02107 //get this far with only one reco'd evt per nu
02108 oneRecoEvtCounter++;
02109
02110 //get the current reco'd event
02111 //const NtpSREvent& evt=
02112 //*dynamic_cast<NtpSREvent*>(evtTca[*it]);
02113
02114 //fill number of tracks in the event
02115 hTrksPerEvt->Fill(evt.ntrack);
02116
02118 //deal with the events that don't have a track
02120 if (evt.ntrack==0) {
02121 zeroTrackCounter++;
02122 if (mc.inu==14) {
02123 zeroTrackNuMuCounter++;
02124 hNuMuEnTrk0->Fill(mc.p4neu[3]);
02125 //don't fill this since you would not assume it NuMuBar
02126 //hNuMuBarLike->Fill(mc.p4neu[3]);
02127 }
02128 else if (mc.inu==-14) {
02129 zeroTrackNuMuBarCounter++;
02130 hNuMuBarEnTrk0->Fill(mc.p4neu[3]);
02131 //add NuMuBars with no track to NuMu-like sample
02132 //also assuming here that it is not ID'd as NC
02133 hNuMuLike->Fill(mc.p4neu[3]);
02134 }
02135 }
02136 if (evt.ntrack==1) {
02137 oneTrackCounter++;
02138 }
02139 if (evt.ntrack==2) {
02140 twoTrackCounter++;
02141 if (mc.inu==14) {
02142 twoTrackNuMuCounter++;
02143 }
02144 else if (mc.inu==-14) {
02145 twoTrackNuMuBarCounter++;
02146 }
02147 }
02148 if (evt.ntrack==3) {
02149 threeTrackCounter++;
02150 }
02151 if (evt.ntrack>3) {
02152 gr3TrackCounter++;
02153 }
02154
02155 //work out the best track to use in the case that there is
02156 //more than one
02157 Int_t trkToUse=0;
02158 Float_t trkLength=0;
02159 if (evt.ntrack>1){
02160 for(Int_t itrk=0;itrk<evt.ntrack;itrk++){
02161 const NtpSRTrack& trk=
02162 *dynamic_cast<NtpSRTrack*>(trkTca[evt.trk[itrk]]);
02163
02164 MAXMSG("NuAnalysis",Msg::kDebug,200)
02165 <<"trk="<<itrk<<"/"<<evt.ntrack
02166 <<", pass="<<trk.fit.pass
02167 <<", ntrklike="<<trk.plane.ntrklike
02168 <<endl;
02169
02170 if (!trk.fit.pass) continue;//trkToUse=0 here
02171
02172 //select the longest trk (in track-like planes)
02173 if (trk.plane.ntrklike>trkLength) {
02174 trkLength=trk.plane.ntrklike;
02175 trkToUse=itrk;
02176 }
02177 }
02178 MAXMSG("NuAnalysis",Msg::kDebug,200)
02179 <<"selected trkToUse="<<trkToUse<<endl;
02180 }
02181
02182 //simple event object to hold important quantities
02183 NuEvent nu;
02184
02185 //get the run, snarl, etc info
02186 lib.ext.ExtractGeneralInfo(ntp,nu);
02187 //get info from the evt
02188 lib.ext.ExtractEvtInfo(evt,nu);
02189 //extract trk info (needed to get best track info)
02190 lib.ext.ExtractTrkInfo(ntp,evt,nu);
02191 //extract shw info
02192 lib.ext.ExtractShwInfo(ntp,evt,nu);
02193
02195 //RECONSTRUCT the neutrino energy
02196 lib.reco.GetEvtEnergy(nu, false);
02197
02198 Float_t recoEn=nu.energy;
02199 MAXMSG("NuAnalysis",Msg::kInfo,500)
02200 <<"Reco'd event energy="<<recoEn<<endl;
02201
02202 //ensure there is a track in the event
02203 if (evt.ntrack<1) continue;
02204
02205 //get the track in the event
02206 const NtpSRTrack& trk=
02207 *dynamic_cast<NtpSRTrack*>(trkTca[evt.trk[trkToUse]]);
02208
02209 Int_t chargeMC=0;
02210 if (mc.p4mu1[3]<0) chargeMC=-1;
02211 else if (mc.p4mu1[3]>0) chargeMC=+1;
02212
02213 Int_t charge=0;
02214 if (trk.momentum.qp<0) charge=-1;
02215 else if (trk.momentum.qp>0) charge=+1;
02216
02217 //fill profiles
02218 if (mc.inu==14) {
02219 pNuMuFitPassVsEn->Fill(mc.p4neu[3],trk.fit.pass);
02220 }
02221 else if (mc.inu==-14) {
02222 pNuMuBarFitPassVsEn->Fill(mc.p4neu[3],trk.fit.pass);
02223 }
02224
02225 if (trk.fit.pass){
02226 Float_t chi2PerNdof=-1;
02227 if (trk.fit.ndof) chi2PerNdof=trk.fit.chi2/trk.fit.ndof;
02228 Float_t sigqp_qp=0;
02229 if (trk.momentum.qp) sigqp_qp=trk.momentum.eqp/trk.momentum.qp;
02230
02231 passFitCounter++;
02232 if (mc.inu==14) {
02233 pNuMuQEffVsEn->Fill(mc.p4neu[3],charge==chargeMC);
02234 if (charge!=chargeMC){
02235 badNuMuCounter++;
02236 hNuMuEnBadQ->Fill(mc.p4neu[3]);
02237 hNuMuRecoEnBadQ->Fill(recoEn);
02238 //if Q is wrong then think NuMu is NuMuBar-like
02239 hNuMuBarLike->Fill(mc.p4neu[3]);
02240 hNuMuChi2BadQ->Fill(chi2PerNdof);
02241 hNuMuSigqp_qpBadQ->Fill(sigqp_qp);
02242 }
02243 else{
02244 goodNuMuCounter++;
02245 hNuMuEnGoodQ->Fill(mc.p4neu[3]);
02246 hNuMuRecoEnGoodQ->Fill(recoEn);
02247 hNuMuChi2GoodQ->Fill(chi2PerNdof);
02248 hNuMuSigqp_qpGoodQ->Fill(sigqp_qp);
02249 }
02250 }
02251 else if (mc.inu==-14) {
02252 pNuMuBarQEffVsEn->Fill(mc.p4neu[3],charge==chargeMC);
02253 if (charge!=chargeMC){
02254 badNuMuBarCounter++;
02255 hNuMuBarEnBadQ->Fill(mc.p4neu[3]);
02256 hNuMuBarRecoEnBadQ->Fill(recoEn);
02257 //if Q is wrong then think NuMuBar is NuMu-like
02258 hNuMuLike->Fill(mc.p4neu[3]);
02259 hNuMuBarChi2BadQ->Fill(chi2PerNdof);
02260 hNuMuBarSigqp_qpBadQ->Fill(sigqp_qp);
02261 }
02262 else{
02263 goodNuMuBarCounter++;
02264 hNuMuBarEnGoodQ->Fill(mc.p4neu[3]);
02265 hNuMuBarRecoEnGoodQ->Fill(recoEn);
02266 hNuMuBarChi2GoodQ->Fill(chi2PerNdof);
02267 hNuMuBarSigqp_qpGoodQ->Fill(sigqp_qp);
02268 }
02269 }
02270 }
02271 }
02272 }//end of for
02273
02277
02278 MSG("NuAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
02279
02280 MSG("NuAnalysis",Msg::kInfo)
02281 <<endl<<" *** Summary ***"<<endl
02282 <<"Total snarls ="<<totalSnarlsCounter<<endl
02283 <<"Snarls w/ CC NuInt in Fid="<<ccInFidCounter<<endl
02284 <<"Snarls w/ reco'd fid evt ="<<recoEvtCounter<<endl
02285 <<endl
02286 <<"Total neutrino interactions="<<nuIntCounter<<endl
02287 <<"Only 1 reco'd evt per nu ="<<oneRecoEvtCounter<<endl
02288 <<"Only 1 track ="<<oneTrackCounter<<endl
02289 <<"Pass track fit ="<<passFitCounter<<endl
02290 <<" bad Q NuMu ="<<badNuMuCounter<<endl
02291 <<" good Q NuMu ="<<goodNuMuCounter<<endl
02292 <<" bad Q NuMuBar ="<<badNuMuBarCounter<<endl
02293 <<" good Q NuMuBar ="<<goodNuMuBarCounter<<endl;
02294
02295 MSG("NuAnalysis",Msg::kInfo)
02296 <<endl<<" *** CC NuMu Event Track Breakdown ***"<<endl
02297 <<"zeroTrackCounter ="<<zeroTrackCounter<<endl
02298 <<" NuMu ="<<zeroTrackNuMuCounter<<endl
02299 <<" NuMuBar="<<zeroTrackNuMuBarCounter<<endl
02300 <<"oneTrackCounter ="<<oneTrackCounter<<endl
02301 <<"twoTrackCounter ="<<twoTrackCounter<<endl
02302 <<" NuMu ="<<twoTrackNuMuCounter<<endl
02303 <<" NuMuBar="<<twoTrackNuMuBarCounter<<endl
02304 <<"threeTrackCounter="<<threeTrackCounter<<endl
02305 <<"g3TrackCounter ="<<gr3TrackCounter<<endl;
02306
02307 MSG("NuAnalysis",Msg::kInfo)
02308 <<" ** Finished EnergySpectMC method **"<<endl;
02309 }
|
|
||||||||||||||||
|
Definition at line 3087 of file NuAnalysis.cxx. References BeamType::AsString(), BeamMonSpill::BeamType(), NuConfig::beamType, NuConfig::beamTypeSntp, BeamMonSpill::BpmAtTarget(), NtpBDLiteRecord::bwidx, NtpBDLiteRecord::bwidy, NuConfig::detector, DetermineBeamType(), VldTimeStamp::GetDate(), VldContext::GetDetector(), NuBase::GetFirstFileName(), RecRecordImp< T >::GetHeader(), NuBase::GetInputFileName(), ReleaseType::GetMCInfo(), VldTimeStamp::GetNanoSec(), NuBase::GetNtpStRecord(), ReleaseType::GetRecoInfo(), NtpStRecord::GetRelease(), RecDataHeader::GetRun(), VldTimeStamp::GetSec(), VldContext::GetSimFlag(), RecPhysicsHeader::GetSnarl(), BeamMonSpill::GetStatusBits(), RecDataHeader::GetSubRun(), BeamDataLiteHeader::GetTimeDiffStreamSpill(), VldContext::GetTimeStamp(), RecPhysicsHeader::GetTrigSrc(), RecRecordImp< T >::GetVldContext(), NtpBDLiteRecord::horncur, NuConfig::hornCurrent, NuConfig::hornIsReverse, NuConfig::intensity, ReleaseType::IsBirch(), MAXMSG, NuConfig::mcVersion, MSG, NuConfig::overrideBeamDataConfigExtraction, BMSpillAna::Print(), NuUtilities::PrintRelease(), NuConfig::recoVersion, NuConfig::releaseType, NuConfig::run, NuConfig::runPeriod, NuConfig::sBeamType, BMSpillAna::SelectSpill(), BMSpillAna::SetSpill(), NuConfig::sHornCurrent, NuConfig::simFlag, NuConfig::snarl, NuConfig::sTargetPos, NuConfig::subRun, NuConfig::targetPos, NuConfig::timeNanoSec, NuConfig::timeSec, NuConfig::trigSrc, NtpBDLiteRecord::trtgtd, and BMSpillAna::UseDatabaseCuts(). 03090 {
03091 //get reference to NtpStRecord
03092 const NtpStRecord& ntp=*pntp;
03093
03094 const RecCandHeader& rec=ntp.GetHeader();
03095 MAXMSG("NuAnalysis",Msg::kInfo,5)
03096 <<"ExtractConfig: run="<<rec.GetRun()
03097 <<", subrun="<<rec.GetSubRun()
03098 <<", detector="<<ntp.GetVldContext()->GetDetector()
03099 <<", simFlag="<<ntp.GetVldContext()->GetSimFlag()
03100 <<endl;
03101
03102 //set the variables
03103 config.run=rec.GetRun();
03104 config.subRun=rec.GetSubRun();
03105 config.snarl=rec.GetSnarl();
03106 config.timeSec=ntp.GetVldContext()->GetTimeStamp().GetSec();
03107 config.timeNanoSec=ntp.GetVldContext()->GetTimeStamp().GetNanoSec();
03108 config.detector=ntp.GetVldContext()->GetDetector();
03109 config.simFlag=ntp.GetVldContext()->GetSimFlag();
03110 config.trigSrc=rec.GetTrigSrc();
03111
03112 //get the reco and MC version
03113 /*
03114 MAXMSG("NuAnalysis",Msg::kInfo,50)
03115 <<"Using ntp.GetTitle()="<<ntp.GetTitle()<<endl
03116 <<"Using ntp.mchdr.geninfo.codename="
03117 <<ntp.mchdr.geninfo.codename<<endl;
03118
03119 //get the release type
03120 config.releaseType=ReleaseType::MakeReleaseType
03121 (ntp.GetTitle(),ntp.mchdr.geninfo.codename);
03122 */
03123 config.releaseType=ntp.GetRelease();
03124
03125 // Check for obviously wrong releaseType
03126 if ( ReleaseType::IsBirch(config.releaseType)) {
03127 int oldrel = config.releaseType;
03128 config.releaseType -= ReleaseType::kBirch;
03129 config.releaseType += ReleaseType::kDogwood;
03130
03131 MAXMSG("NuAnalysis",Msg::kInfo, 5) << "Changing the release type from "
03132 << NuUtilities::PrintRelease(oldrel) << " to "
03133 << NuUtilities::PrintRelease(config.releaseType) << endl;
03134 }
03135
03136
03137 //extract the mcVersion from the releaseType
03138 config.mcVersion=ReleaseType::GetMCInfo(config.releaseType);
03139 //extract the recoVersion from the releaseType
03140 config.recoVersion=ReleaseType::GetRecoInfo(config.releaseType);
03141
03142
03143
03144 MAXMSG("NuAnalysis",Msg::kInfo,50)
03145 <<"Extracted:"<<endl
03146 <<" ReleaseType = " <<NuUtilities::PrintRelease(config.releaseType) << endl
03147 <<" mcVersion = " <<NuUtilities::PrintRelease(config.mcVersion) << endl
03148 <<" recoVersion = " <<NuUtilities::PrintRelease(config.recoVersion) << endl;
03149
03150
03152 //check if NtpBDLiteRecord exists in the data case
03154 if (ntp.GetVldContext()->GetSimFlag()==SimFlag::kData &&
03155 (!pntpBD || config.overrideBeamDataConfigExtraction)) {
03156 if (!pntpBD) {
03157 MSG("NuAnalysis",Msg::kInfo)
03158 <<"ExtractConfig: no NtpBDLiteRecord available"
03159 <<", making up settings..."<<endl;
03160 }
03161 else if (config.overrideBeamDataConfigExtraction) {
03162 MSG("NuAnalysis",Msg::kInfo)
03163 <<"ExtractConfig: overriding use of Beam Data"
03164 <<" to extract config, making up settings..."<<endl;
03165 }
03166 config.beamType=BeamType::kL010z185i;
03167 config.hornCurrent=-185;
03168 string btAsString=BeamType::AsString
03169 (static_cast<BeamType::BeamType_t>(config.beamType));
03170 config.sTargetPos=btAsString.substr(1,3);
03171 config.targetPos=-1.*atoi(config.sTargetPos.c_str());
03172 config.sHornCurrent=btAsString.substr(5,7);
03173 //create the std MC naming scheme name
03174 config.sBeamType="L"+config.sTargetPos+config.sHornCurrent;
03175 //the beammonspill beamType is not same as Conventions one
03176 config.beamTypeSntp=1;
03177 }
03179 //check if DATA
03181 else if (ntp.GetVldContext()->GetSimFlag()==SimFlag::kData){
03182 MSG("NuAnalysis",Msg::kInfo)
03183 <<"ExtractConfig: running on DATA..."<<endl;
03184 const NtpBDLiteRecord& ntpBD=*pntpBD;
03185
03186 //static BeamMonSpill spill;
03187 //static BMSpillAna bmsa;
03188 BeamMonSpill spill;
03189 BMSpillAna bmsa;
03190 //bmsa.Print();
03191
03192 //tell it to use the database defined values of the cuts
03193 //doesn't actually load the database until you ask SelectSpill
03194 bmsa.UseDatabaseCuts();
03195
03196 //give it the spill
03197 bmsa.SetSpill(ntpBD,spill);
03198
03199 MAXMSG("NuAnalysis",Msg::kInfo,10)
03200 <<"ExtractConfig: after SetSpill & UseDatabaseCuts:"<<endl;
03201 bmsa.Print();
03202 cout<<endl;
03203
03204 //check if a good spill
03205 if (!bmsa.SelectSpill()) {
03206 Double_t xmean=0;
03207 Double_t ymean=0;
03208 Double_t xrms=0;
03209 Double_t yrms=0;
03210 spill.BpmAtTarget(xmean,ymean,xrms,yrms);
03211 Int_t targetIn=spill.GetStatusBits().target_in;
03212
03213 MSG("NuExtraction",Msg::kWarning)
03214 << "ExtractConfig: BAD SPILL:" << endl
03215 << " > Time diffrence (s): " << ntpBD.GetHeader().GetTimeDiffStreamSpill() << endl
03216 << " > Spill intensity (1e12 pot): " << ntpBD.trtgtd << endl
03217 << " > Horn Current (kA): " << ntpBD.horncur << endl
03218 << " > Target in/out: " << targetIn << endl
03219 << " > fBeamType: " << BeamType::AsString(static_cast<BeamType::BeamType_t>(spill.BeamType())) <<" ("<<spill.BeamType()<<")"<<endl
03220 << " > Horizontal beam position (mm): " << xmean << endl
03221 << " > Vertical beam position (mm): " << ymean << endl
03222 << " > Horizontal beam width a (mm): " << ntpBD.bwidx << endl
03223 << " > Vertical beam width a (mm): " << ntpBD.bwidy << endl;
03224 MSG("NuBeam",Msg::kWarning)
03225 <<endl<<endl
03226 <<"Occasionally the first spill is bad so have to skip to next"
03227 <<" snarl in order to ExtractConfig... return..."
03228 <<endl<<endl<<endl;
03229 return false;
03230 }
03231
03232 //get the beam type directly from the BeamMomSpill
03233 //the time of various data taking is hard coded
03234 //so you can differentiate le000 from le010 and le150 from le100
03235 config.beamType=spill.BeamType();
03236
03237 //get the horn current
03238 config.hornCurrent=ntpBD.horncur;
03239
03240 string btAsString=BeamType::AsString
03241 (static_cast<BeamType::BeamType_t>(config.beamType));
03242 //L000z200i
03243 config.sTargetPos=btAsString.substr(1,3);
03244 config.targetPos=-1.*atoi(config.sTargetPos.c_str());
03245 config.sHornCurrent=btAsString.substr(5,7);
03246
03247 //create the std MC naming scheme name
03248 config.sBeamType="L"+config.sTargetPos+config.sHornCurrent;
03249
03250 //the beammonspill beamType is not the same as the Conventions one
03251 //these are the beammonspill ones:
03252 //0=unknown,1=LE,2=ME,3=HE,4=psME,5=psHE mask=0x1c. LE-10 is LE.
03253 config.beamTypeSntp=spill.GetStatusBits().beam_type;
03254 }
03256 //check if MC
03258 else if (ntp.GetVldContext()->GetSimFlag()==SimFlag::kMC){
03259 MSG("NuAnalysis",Msg::kInfo)
03260 <<"ExtractConfig: running on MC..."<<endl;
03261 //get the filename
03262 TString sFileName="n13021160_0000_L010185.sntp.R1_18_2.root";
03263 //check if the ntp was from mom or directly accessed
03264 if (this->GetNtpStRecord()) {//direct
03265 sFileName=this->GetFirstFileName().c_str();
03266 }
03267 else {//mom
03268 sFileName=this->GetInputFileName().c_str();
03269 }
03270
03271 Int_t lastSlash=sFileName.Last('/');
03272 sFileName.Remove(0,lastSlash+1);
03273 MAXMSG("NuAnalysis",Msg::kInfo,5)
03274 <<"Extracting MC beam info from run filename="<<sFileName<<endl;
03275
03276 // Known filename types
03277 // Cedar-n13010100_0000_L010185_PDtest03.root
03278 // n13021160_0000_L010185.sntp.R1_18_2.root
03279 // n11011020_0000_L010185N_D00.sntp.cedar_phy.root
03280 // n13037038_0027_L250200N_D04_i194.sntp.dogwood1.root
03281 // n13035001_0003_L150200N_D07_r2.sntp.dogwood1.root
03282 // n13047001_0000_L010185R_D04.sntp.dogwood1.0.root
03283 // n13037001_0000_L010185N_D04.reroot.root
03284 // n13037009_0029_L010185N_D04_charm.reroot.root
03285 // n13035001_0000_L010170N_D07_r1.reroot.root
03286 // n13035001_0000_L010185N_D07_r1i999.reroot.root
03287
03288 TRegexp rbeam = "^[LMH][0-9][0-9][0-9][0-9][0-9][0-9][RN]?$";
03289 TRegexp rmc = "^D[0-9]+$";
03290 TRegexp rboth = "^r[1-4]i[0-9]+$";
03291 TRegexp rintensity = "^i[0-9]+$";
03292 TRegexp rrun = "^r[1-4]$";
03293
03294
03295 //check for preDiakon name
03296 sFileName.ReplaceAll("Cedar-","");
03297
03298 TObjArray* part1 = sFileName.Tokenize(".");
03299 TString info = ((TObjString*)part1->At(0))->GetString();
03300 TObjArray* part2 = info.Tokenize("_");
03301
03302 config.sTargetPos = "010";
03303 config.sHornCurrent = "185";
03304 config.runPeriod = 0; // Unspecified Period
03305 config.intensity = 0; // Average intensity
03306 config.hornIsReverse = false;
03307 int dver = 0; // Daikon version
03308
03309 for (int j = 0; j < part2->GetEntries(); j++) {
03310 TString temp = ((TObjString*)part2->At(j))->GetString();
03311
03312 // Look for Beam type ex. L010185N
03313 if (temp.Contains(rbeam)) {
03314 config.sBeamType = temp;
03315 config.sTargetPos = (temp(1,3)+"").Data();
03316 config.sHornCurrent = (temp(4,3)+"").Data();
03317 if (temp.EndsWith("R")) {
03318 config.hornIsReverse = true;
03319 }
03320 MAXMSG("NuAnalysis",Msg::kInfo,1) << "Found beam " << temp << " in name" << endl;
03321
03322 }
03323 // Run Period + Intensity rNiXYZ
03324 else if (temp.Contains(rboth)) {
03325 TString tempR = temp(1,1);
03326 config.runPeriod = tempR.Atoi();
03327 TString tempI = temp(3,3);
03328 config.intensity = tempI.Atoi();
03329 MAXMSG("NuAnalysis",Msg::kInfo,1) << "Found run and intensity " << temp << " in name" << endl;
03330 }
03331 // Look for Run Period ex. rN
03332 else if (temp.Contains(rrun)) {
03333 temp.Remove(0,1);
03334 config.runPeriod = temp.Atoi();
03335 MAXMSG("NuAnalysis",Msg::kInfo,1) << "Found run " << temp << " in name" << endl;
03336 }
03337 // Look for intensity ex. iXYZ
03338 else if (temp.Contains(rintensity)) {
03339 temp.Remove(0,1);
03340 config.intensity = temp.Atoi();
03341 MAXMSG("NuAnalysis",Msg::kInfo,1) << "Found intensity " << temp << " in name" << endl;
03342 }
03343 // Look for Daikon version - not needed
03344 else if (temp.Contains(rmc)) {
03345 temp.Remove(0,1);
03346 dver = temp.Atoi();
03347 MAXMSG("NuAnalysis",Msg::kInfo,1) << "Found Daikon v. " << temp << " in name" << endl;
03348 }
03349 // Look for intensity - not needed
03350 }
03351 delete part2;
03352 delete part1;
03353
03354 config.targetPos=-1.*atoi(config.sTargetPos.c_str());
03355 config.hornCurrent=-1.*atoi(config.sHornCurrent.c_str());
03356
03357 if (config.hornIsReverse) config.hornCurrent *= -1;
03358
03359 if (dver >= 7) {
03360 if (config.runPeriod <= 0) {
03361 MAXMSG("NuAnalysis",Msg::kWarning,5) << "Daikon07 found but no run period!" << endl;
03362 }
03363 if (config.runPeriod == 4 != config.hornIsReverse) {
03364 MAXMSG("NuAnalysis",Msg::kWarning,5) << "Daikon07 Run4 found with forward field" << endl;
03365 }
03366 }
03367
03368 MAXMSG("NuAnalysis",Msg::kInfo,5)
03369 <<"Extracted from the filename: sTargetPos="<<config.sTargetPos
03370 <<", targetPos="<< config.targetPos
03371 <<", sHornCurrent="<<config.sHornCurrent
03372 <<", hornCurrent="<<config.hornCurrent
03373 <<", runPeriod="<<config.runPeriod
03374 <<", mcVersion="<<config.mcVersion
03375 <<", intensity="<<config.intensity
03376 <<", hornIsReverse="<<config.hornIsReverse
03377 << endl;
03378
03379 //get the beam type based on the info config already holds
03380 this->DetermineBeamType(config);
03381 }
03382
03383 // Extract run period for data from VldContext
03384 if (ntp.GetVldContext()->GetSimFlag()==SimFlag::kData){
03385 VldTimeStamp* vtsRunIEnd = new VldTimeStamp(2006,4,1,0,0,0);
03386 VldTimeStamp* vtsRunIIEnd = new VldTimeStamp(2007,8,1,0,0,0);
03387 VldTimeStamp* vtsRunIIIEnd = new VldTimeStamp(2009,8,1,0,0,0);
03388 VldTimeStamp ts = ntp.GetVldContext()->GetTimeStamp();
03389
03390 if(ts.GetDate()<vtsRunIEnd->GetDate()) config.runPeriod = 1;
03391 else if(ts.GetDate()<vtsRunIIEnd->GetDate()) config.runPeriod = 2;
03392 else if(ts.GetDate()<vtsRunIIIEnd->GetDate()) config.runPeriod = 3;
03393 else config.runPeriod = 4;
03394 }
03395
03396 MSG("NuAnalysis",Msg::kInfo)
03397 <<"ExtractConfig: final config is beamType="
03398 <<BeamType::AsString(static_cast<BeamType::BeamType_t>
03399 (config.beamType))
03400 <<" ("<<config.beamType<<")"
03401 <<", btSntp="<<config.beamTypeSntp
03402 <<endl
03403 <<" sHornCurrent="<<config.sHornCurrent
03404 <<" ("<<config.hornCurrent<<")"
03405 <<", sTargetPos="<<config.sTargetPos
03406 <<" ("<<config.targetPos<<")"
03407 <<", sBeamType="<<config.sBeamType
03408 <<", runPeriod="<<config.runPeriod
03409 <<endl;
03410
03411 //the beamTypeSntp is only present for data when it is
03412 //obtained from the ntuples
03413 //so only print for data
03414 //if (ntp.GetVldContext().GetSimFlag()==SimFlag::kData){
03415 //MAXMSG("NuAnalysis",Msg::kInfo,5)
03416 //<<"Converting beamTypeSntp to New Conventions gives "
03417 //<<BeamType::AsString(static_cast<BeamType::BeamType_t>
03418 // (BeamType::
03419 // FromBeamMon(config.beamTypeSntp)))
03420 //<<" ("<<BeamType::FromBeamMon(config.beamTypeSntp)<<")"
03421 //<<endl
03422 //<<" FromZarko="<<BeamType::FromZarko(config.beamType)
03423 //<<endl
03425 //<<endl;
03426 //}
03427 return true;
03428 }
|
|
|
this is here for backwards compatibility Definition at line 3077 of file NuAnalysis.cxx. References NuBase::GetNtpBDLiteRecord(). Referenced by ChargeSeparationOneSnarl(), ChargeSignCut(), Efficiencies(), EnergySpect(), EnergySpectMC(), LIRejectionTest(), MakeFullDST(), N_1(), and NuMuBarAppearance(). 03078 {
03080
03081 this->ExtractConfig(this->GetNtpStRecord(),
03082 this->GetNtpBDLiteRecord(),config);
03083 }
|
|
||||||||||||||||||||
|
|
Definition at line 5794 of file NuAnalysis.cxx. References NuEvent::abID, NuEvent::anaVersion, NuConfig::anaVersion, NuReco::ApplyReweights(), NuCuts::AsString(), NuCounter::badSpillCounter, NuEvent::charge, CopyConfig(), NuEvent::dirCosNu, NuEvent::dpID, NuEvent::entry, NtpStRecord::evt, NuCounter::evtCounter, NtpStRecord::evthdr, NuCounter::evtNotIsLI, NuCounter::evtNotlitime, NuCounter::evtWithTrkCounter, NuLibrary::ext, ExtractConfig(), NuExtraction::ExtractDataQuality(), NuExtraction::ExtractEvtInfo(), NuExtraction::ExtractGeneralInfo(), NuExtraction::ExtractMinMaxEvtTimes(), NuExtraction::ExtractShwInfo(), NuExtraction::ExtractTimeToNearestSpill(), NuExtraction::ExtractTrkInfo(), NuZBeamReweight::ExtractZBeamReweight(), NuReco::FDRCBoundary(), NuPlots::FillContainmentHistos(), NuPlots::FillDPIdSigmaQPFailDpIDCutPlots(), NuPlots::FillDPIdSigmaQPFailProbCutPlots(), NuPlots::FillDPIdSigmaQPFailSigQPCutPlots(), NuPlots::FillDPIdSigmaQPPassDpIDCutPlots(), NuPlots::FillDPIdSigmaQPPassSigQPCutPlots(), NuPlots::FillDPIdSigmaQPPlotsN(), NuPlots::FillEnergyBinHistos(), NuPlots::FillGeneralHistos(), NuPlots::FillKinematicsHistos(), NuPlots::FillRangeCurvCompHistos(), NuPlots::FillRecoEnYHistosN(), NuPlots::FillShwHistos(), NuTime::FillTime(), NuPlots::FillTrueFidEnergySpect(), NuPlots::FillTruePIDHistos(), NuPlots::FillXYZHistos(), NuPIDInterface::GetAbID(), VldContext::GetDetector(), NuPIDInterface::GetDpID(), NuBase::GetEntries(), NuReco::GetEvtEnergy(), RecRecordImp< T >::GetHeader(), NuBase::GetNtpBDLiteRecord(), NuBase::GetNtpStRecord(), RecDataHeader::GetRun(), VldTimeStamp::GetSec(), VldContext::GetSimFlag(), RecPhysicsHeader::GetSnarl(), RecDataHeader::GetSubRun(), VldContext::GetTimeStamp(), NuReco::GetTruthInfo(), RecHeader::GetVldContext(), NuCounter::goodDataQualityCounter, NuCounter::goodDirectionCosineCounter, NuCounter::goodFitProbCounter, NuCounter::goodFitSigQPCounter, NuCounter::goodPIDCounter, NuCounter::goodRecoEnCounter, NuCounter::goodSpillCounter, NuCounter::goodTimeToNearestSpillCounter, NuCounter::goodTrkPassCounter, NuBase::InitialiseLoopVariables(), NuLibrary::Instance(), NuCuts::IsGoodDataQuality(), NuCuts::IsGoodDirCos(), NuCuts::IsGoodFitProb(), NuCuts::IsGoodNumberOfTracks(), NuCuts::IsGoodPID(), NuCuts::IsGoodSigmaQP_QP(), NuBeam::IsGoodSpillAndFillPot(), NuCuts::IsGoodTimeToNearestSpill(), NuCuts::IsGoodTrackFitPass(), NuCuts::IsInFidVolTrk(), LISieve::IsLI(), NtpSREventSummary::litime, MAXMSG, NuEvent::mcVersion, NuConfig::mcVersion, MSG, NuEvent::nshw, NuCounter::nuNQCounter, NuCounter::nuPQCounter, NuBase::OpenFile(), NuBase::OpenTxtFile(), NuEvent::planeEvtBeg, NuEvent::planeEvtEnd, plots(), NuEvent::poID, NuEvent::pot, NuPlots::PrintEventInfo(), NuCounter::PrintNMB(), NuUtilities::PrintRelease(), NuEvent::rawPhEvt, NuConfig::recoVersion, NuEvent::recoVersion, NuConfig::reweightVersion, NuEvent::roID, NuEvent::roIDNuMuBar, NuConfig::run, NuConfig::sBeamType, NuBase::SetLoopVariables(), NuEvent::timeEvtMin, NuEvent::timeToNearestSpill, NuCounter::totalPot, NuCounter::totalPotBad, NuCounter::trkInFidVolCounter, NuEvent::trkvtxdcosz, and NuConfig::useGeneratorReweight. 05795 {
05796 MSG("NuAnalysis",Msg::kInfo)
05797 <<" ** Running LIRejectionTest method... **"<<endl;
05798
05799 NuConfig config;
05800 this->ExtractConfig(config);
05801
05802 //open the output file for the histograms
05803 string sFilePrefix="LIRejectionTest"+config.sBeamType;
05804 fOutFile=this->OpenFile(config,sFilePrefix.c_str());
05805
05806 string sTxt="litag"+config.sBeamType;
05807 ofstream& litagTxt=*(this->OpenTxtFile(config,sTxt.c_str()));
05808 sTxt="liSieve"+config.sBeamType;
05809 ofstream& liSieveTxt=*(this->OpenTxtFile(config,sTxt.c_str()));
05810
05811 //classes to organise the code in to related functions
05812 const NuCuts cuts;
05813 const NuGeneral general;
05814 const NuPlots plots;
05815 const NuReco reco;
05816 const NuExtraction ext;
05817 const NuBeam beam;
05818
05819 //classes to count numbers of events, etc and times of spills, etc
05820 NuCounter cnt;
05821 NuTime time;
05822
05823 //interface for the pids
05824 NuPIDInterface pid;
05825
05826 //create an object to do the beam reweighting
05827 const NuZBeamReweight zBeamReweight;
05828
05829 config.anaVersion=NuCuts::kCC0250Std;
05830 config.useGeneratorReweight=false;
05831 config.reweightVersion=SKZPWeightCalculator::kPiMinus;
05832 Int_t mcVersionOveride=ReleaseType::kDaikon;//selects pdfs for data
05833
05834 MSG("NuAnalysis",Msg::kInfo)
05835 <<"Setting:"<<endl
05836 <<" anaVersion="
05837 <<cuts.AsString(static_cast<NuCuts::NuAnaVersion_t>
05838 (config.anaVersion))
05839 <<" ("<<config.anaVersion<<")"<<endl
05840 <<" useGeneratorReweight="<<config.useGeneratorReweight<<endl
05841 <<" reweightVersion="<<config.reweightVersion<<endl;
05842
05843 //if MC then the mcVersion will be determined from the file
05844 //override the version to use here (only gets set in the data case)
05845 if (config.mcVersion==ReleaseType::kData) {
05846 MSG("NuAnalysis",Msg::kInfo)
05847 <<"Overiding mcVersion:"<<endl
05848 <<" new mcVersion="<< NuUtilities::PrintRelease(mcVersionOveride)
05849 <<", old mcVersion="<< NuUtilities::PrintRelease(config.mcVersion)
05850 <<endl;
05851 config.mcVersion=mcVersionOveride;
05852 }
05853
05854 //get an instance of the code library
05855 const NuLibrary& lib=NuLibrary::Instance();
05856
05860
05861 this->InitialiseLoopVariables();
05862
05863 //for(Int_t entry=0;entry<10000;entry++){
05864 for(Int_t entry=0;entry<this->GetEntries();entry++){
05865
05866 this->SetLoopVariables(entry);
05867
05868 //get reference to NtpStRecord from base class
05869 const NtpStRecord& ntp=(*this->GetNtpStRecord());
05870
05871 const RecCandHeader& rec=ntp.GetHeader();
05872 MAXMSG("NuAnalysis",Msg::kInfo,5)
05873 <<"Found: run="<<rec.GetRun()
05874 <<", subrun="<<rec.GetSubRun()
05875 <<", detector="<<rec.GetVldContext().GetDetector()
05876 <<", simFlag="<<rec.GetVldContext().GetSimFlag()
05877 <<", snarl="<<rec.GetSnarl()
05878 <<endl;
05879
05880 //write out the detector, simflag, etc
05881 plots.FillGeneralHistos(ntp);
05882
05883 //simple event object to hold important quantities for snarl
05884 NuEvent nuSnarl;
05885 nuSnarl.anaVersion=config.anaVersion;
05886 nuSnarl.mcVersion=config.mcVersion;
05887 nuSnarl.recoVersion=config.recoVersion;
05888 ext.ExtractGeneralInfo(ntp,nuSnarl);
05889
05890 //get the true energy spectra of events in the fid vol
05891 plots.FillTrueFidEnergySpect(nuSnarl);
05892
05893 Int_t evTime=rec.GetVldContext().GetTimeStamp().GetSec();
05894 Bool_t goodSpill=beam.IsGoodSpillAndFillPot
05895 (this->GetNtpBDLiteRecord(),config,nuSnarl);
05896 time.FillTime(evTime,nuSnarl.pot,goodSpill);
05897 if (!goodSpill) {
05898 cnt.badSpillCounter++;
05899 cnt.totalPotBad+=nuSnarl.pot;
05900 continue;
05901 }
05902 cnt.goodSpillCounter++;
05903 cnt.totalPot+=nuSnarl.pot;
05904
05905 TClonesArray& evtTca=(*ntp.evt);
05906 const Int_t numEvts=evtTca.GetEntriesFast();
05907
05909 //loop over the reconstructed events
05911 for (Int_t ievt=0;ievt<numEvts;ievt++){
05912 const NtpSREvent& evt=
05913 *dynamic_cast<NtpSREvent*>(evtTca[ievt]);
05914 cnt.evtCounter++;
05915
05916 MAXMSG("NuAnalysis",Msg::kInfo,5)
05917 <<"Found event, "<<ievt+1<<"/"<<numEvts<<endl;
05918
05919 const NtpSREventSummary& evthdr=ntp.evthdr;
05920
05921 if (evthdr.litime!=-1) {
05922 MAXMSG("NuAnalysis",Msg::kInfo,500)
05923 <<"skipping event: litime="<<evthdr.litime<<endl;
05924 continue;
05925 }
05926 cnt.evtNotlitime++;
05927
05928 Bool_t isLI=LISieve::IsLI(ntp);
05929 if (isLI){
05930 MAXMSG("NuAnalysis",Msg::kInfo,5)
05931 <<endl<<endl<<endl
05932 <<"Found LI"
05933 <<", run="<<config.run
05934 <<", entry="<<entry
05935 <<", event="<<ievt
05936 <<", litime="<<evthdr.litime
05937 <<endl<<endl<<endl;
05938 }
05939 else {
05940 MAXMSG("NuAnalysis",Msg::kInfo,50)
05941 <<"Not LI"
05942 <<", run="<<config.run
05943 <<", entry="<<entry
05944 <<", event="<<ievt
05945 <<", litime="<<evthdr.litime
05946 <<endl;
05947 }
05948 //if (isLI) continue;
05949 if (!isLI) cnt.evtNotIsLI++;
05950
05951 //simple event object to hold important quantities
05952 NuEvent nu;
05953 nu.entry=entry;//store the entry in the tree number
05954 this->CopyConfig(config,nu);
05955
05956 //get the run, snarl, etc info
05957 ext.ExtractGeneralInfo(ntp,nu);
05958 //get info from the evt
05959 lib.ext.ExtractEvtInfo(evt,nu);
05960 //extract trk info (needed to get best track info)
05961 lib.ext.ExtractTrkInfo(ntp,evt,nu);
05962 //extract shw info
05963 lib.ext.ExtractShwInfo(ntp,evt,nu);
05964
05965 //CC LI cut
05966 Int_t litag=reco.FDRCBoundary(nu);
05967 if (litag) {
05968 MAXMSG("NuAnalysis",Msg::kInfo,50)
05969 <<endl<<endl
05970 <<"litag="<<litag
05971 <<", run="<<config.run
05972 <<", entry="<<entry
05973 <<", event="<<ievt
05974 <<", litime="<<evthdr.litime
05975 <<endl
05976 <<", nu.nshw="<<nu.nshw
05977 <<", nu.rawPhEvt="<<nu.rawPhEvt
05978 <<", nu.planeEvtBeg="<<nu.planeEvtBeg
05979 <<", nu.planeEvtEnd="<<nu.planeEvtEnd
05980 <<endl<<endl<<endl;
05981 }
05982 if (litag>10) {
05983 MAXMSG("NuAnalysis",Msg::kInfo,50)
05984 <<endl<<endl
05985 <<"litag="<<litag
05986 <<", run="<<config.run
05987 <<", entry="<<entry
05988 <<", event="<<ievt
05989 <<", litime="<<evthdr.litime
05990 <<endl
05991 <<", nu.nshw="<<nu.nshw
05992 <<", nu.rawPhEvt="<<nu.rawPhEvt
05993 <<", nu.planeEvtBeg="<<nu.planeEvtBeg
05994 <<", nu.planeEvtEnd="<<nu.planeEvtEnd
05995 <<endl<<endl<<endl;
05996 }
05997
05998 //only continue if event is not either litag or isLI
05999 if (!(litag || isLI)) continue;
06000
06001 //extract trk/shw info (put this after ExtractEvtInfo to save cpu)
06002 reco.GetEvtEnergy(nu, false);
06003 cnt.goodRecoEnCounter++;
06004
06005 //calculate PIDs
06006 pid.GetDpID(ntp,evt,nu);
06007 pid.GetAbID(ntp,evt,nu);
06008
06009 MAXMSG("NuAnalysis",Msg::kInfo,10)
06010 <<"After reco:"<<endl;
06011 MAXMSG("NuAnalysis",Msg::kInfo,10)
06012 <<endl<<plots.PrintEventInfo(cout,nu)<<endl;
06013
06014 //get the truth info (reco quantities are done above)
06015 reco.GetTruthInfo(ntp,evt,nu);
06016
06017 if (litag) plots.PrintEventInfo(litagTxt,nu);
06018 if (isLI) plots.PrintEventInfo(liSieveTxt,nu);
06019
06020 //hardly any of these
06021 if (isLI) continue;
06022
06023 //ensure good number of tracks in the event
06024 if (!cuts.IsGoodNumberOfTracks(nu)) continue;
06025 cnt.evtWithTrkCounter++;
06026
06027 //do the beam reweighting
06028 zBeamReweight.ExtractZBeamReweight(ntp,evt,nu);
06029 reco.ApplyReweights(nu);
06030
06031 MAXMSG("NuAnalysis",Msg::kInfo,10)
06032 <<"PID: dp="<<nu.dpID<<", ab="<<nu.abID
06033 <<", ro="<<nu.roID<<", po="<<nu.poID
06034 <<", roNMB="<<nu.roIDNuMuBar<<endl;
06035
06036 //check if the trk is in the fiducial volume
06037 if (!cuts.IsInFidVolTrk(nu)) continue;
06038 cnt.trkInFidVolCounter++;
06039
06040 //require a good trk fit
06041 if (!cuts.IsGoodTrackFitPass(nu)) continue;
06042 cnt.goodTrkPassCounter++;
06043
06044 if (!cuts.IsGoodDirCos(nu)) {
06045 MAXMSG("NuAnalysis",Msg::kInfo,50)
06046 <<"Bad DirCos, trkvtxdcosz="<<nu.trkvtxdcosz
06047 <<", dirCosNu="<<nu.dirCosNu<<endl;
06048 continue;
06049 }
06050 cnt.goodDirectionCosineCounter++;
06051
06052 //check data quality
06053 ext.ExtractDataQuality(nu);//lots of db access
06054 if (!cuts.IsGoodDataQuality(nu)) continue;
06055 cnt.goodDataQualityCounter++;
06056
06057 //check timing
06058 ext.ExtractMinMaxEvtTimes(ntp,evt,nu);
06059 ext.ExtractTimeToNearestSpill(nu);//lots of db access
06060 MAXMSG("NuAnalysis",Msg::kInfo,1000)
06061 <<"Time to spill="
06062 <<(nu.timeEvtMin-nu.timeToNearestSpill)/(Munits::microsecond)
06063 <<" us"<<endl;
06064 if (!cuts.IsGoodTimeToNearestSpill(nu)) continue;
06065 cnt.goodTimeToNearestSpillCounter++;
06066
06067 //cut on the PID
06068 if (!cuts.IsGoodPID(nu)) {
06069 plots.FillDPIdSigmaQPFailDpIDCutPlots(nu);
06070 continue;
06071 }
06072 cnt.goodPIDCounter++;
06073 plots.FillDPIdSigmaQPPassDpIDCutPlots(nu);
06074
06075 //cut on the fractional track q/p error
06076 if (!cuts.IsGoodSigmaQP_QP(nu)) {
06077 plots.FillDPIdSigmaQPFailSigQPCutPlots(nu);
06078 continue;
06079 }
06080 cnt.goodFitSigQPCounter++;
06081 plots.FillDPIdSigmaQPPassSigQPCutPlots(nu);
06082
06083 //cut on the track fit probability
06084 if (!cuts.IsGoodFitProb(nu)) {
06085 plots.FillDPIdSigmaQPFailProbCutPlots(nu);
06086 continue;
06087 }
06088 cnt.goodFitProbCounter++;
06089
06090 if (nu.charge==-1) cnt.nuNQCounter++;
06091 else if (nu.charge==+1) cnt.nuPQCounter++;
06092 else cout<<"ahhh, bad charge (lirej)"<<endl;
06093
06094 plots.FillRecoEnYHistosN(nu);
06095 plots.FillDPIdSigmaQPPlotsN(nu);
06096 plots.FillEnergyBinHistos(nu);
06097
06098 plots.FillShwHistos(ntp,evt,nu);
06099 plots.FillXYZHistos(nu);
06100 plots.FillContainmentHistos(nu);
06101 plots.FillTruePIDHistos(nu);
06102 //plots.FillTrackResponseHistos(ntp,trk,nu);
06103 plots.FillRangeCurvCompHistos(nu);
06104 plots.FillKinematicsHistos(nu);
06105
06106 }//end of loop over events
06107 }//end of for
06108
06112
06113 MSG("NuAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
06114
06115 cnt.PrintNMB();
06116
06117 MSG("NuAnalysis",Msg::kInfo)
06118 <<" ** Finished LIRejectionTest method **"<<endl;
06119 }
|
|
||||||||||||||||||||
|
Definition at line 6170 of file NuAnalysis.cxx. References NuEvent::anaVersion, NuReco::ApplyReweights(), NuLibrary::cuts, NuEvent::detector, NuLibrary::ext, NuZBeamReweight::ExtractZBeamReweight(), NuOutputWriter::FillNuMCEventTree(), NuPlots::FillTrueFidEnergySpect(), NuOutputWriter::GetNuMCEventToFill(), NuReco::GetTruthInfo(), NuLibrary::Instance(), NuCuts::IsInFidVol(), NuCuts::IsInFidVolLoose(), MAXMSG, NuEvent::mc, NtpStRecord::mc, NuExtraction::NuMCEventFromNuEvent(), NuEvent::planeTrkVtxMC, plots(), NuLibrary::reco, NuEvent::releaseType, NuEvent::rTrkVtxMC, NuEvent::shwEn, NuEvent::shwEnMC, NuEvent::simFlag, NuEvent::trkEn, NuEvent::trkEnMC, NuEvent::vtxuMC, NuEvent::vtxvMC, NuEvent::vtxxMC, NuEvent::vtxyMC, NtpMCTruth::vtxz, NuEvent::vtxzMC, and NuLibrary::zBeamReweight. Referenced by ChargeSeparationOneSnarl(), and MakeFullDST(). 06174 {
06175 //vTthInd is the list of true events we must write out
06176 //e.g. it contributes to a reconstructed event
06177
06178 TClonesArray& mcTca=(*ntp.mc);
06179 const Int_t nummcs=mcTca.GetEntriesFast();
06180 static NuPlots plots;
06181 if (nummcs<=0) {
06182 MAXMSG("NuAnalysis",Msg::kDebug,1)
06183 <<"LoopOverTruthInfo: no MCTruth so return..."<<endl;
06184 //call this routine so that the plots are created
06185 plots.FillTrueFidEnergySpect(nuSnarl);
06186 return;
06187 }
06188
06189 //get an instance of the code library
06190 const NuLibrary& lib=NuLibrary::Instance();
06191
06192 //loop over all the true neutrino interactions
06193 for (Int_t imc=0;imc<nummcs;++imc){
06194 const NtpMCTruth& mc=
06195 *(dynamic_cast<NtpMCTruth*>(mcTca[imc]));
06196
06197 //Does this true event contribute to a reco event?
06198 Bool_t mustWriteOut = false;
06199 for (std::vector<Int_t>::const_iterator it = vTthInd.begin();
06200 it != vTthInd.end();
06201 ++it){
06202 if (*it == imc){
06203 mustWriteOut = true;
06204 }
06205 }
06206
06207 if (!mustWriteOut){
06208 //remove events that happen outside the ND calorimeter
06209 //this should speed things up
06210 if (nuSnarl.detector==Detector::kNear &&
06211 (mc.vtxz<-0.1*(Munits::m) || mc.vtxz>7.3*(Munits::m))) {
06212 MAXMSG("NuAnalysis",Msg::kInfo,1)
06213 <<"Not looping over true events occuring in front or behind"
06214 <<" the ND calorimeter (-0.1<Z<7.3m)"
06215 <<" (this mc.vtxz="<<mc.vtxz<<")"<<endl;
06216 continue;
06217 }
06218 }
06219
06220 //extract the info from this mc object
06221 //bit inefficient to do this for every true event... but safer
06222 NuEvent nu=nuSnarl;//copy to hold truth info and weights
06223
06224 //need to set this for both GetTruthInfo and reweight
06225 nu.mc=imc;
06226
06227 //now get the truth info (need nu.mc to be set)
06228 lib.reco.GetTruthInfo(ntp,mc,nu);
06229
06230 //set the reconstructed variables to the true ones
06231 //so that the MCReweight is ok about it (might not be necessary)
06232 nu.shwEn=nu.shwEnMC;
06233 nu.trkEn=fabs(nu.trkEnMC);//fabs: charge is stored with the energy
06234
06235 //get the beam weight
06236 lib.zBeamReweight.ExtractZBeamReweight(nu);
06237 lib.reco.ApplyReweights(nu);
06238
06239 if (!mustWriteOut){
06240 //write out events in loose fid vol
06241 if (!lib.cuts.IsInFidVolLoose
06242 (nu.vtxxMC,nu.vtxyMC,nu.vtxzMC,nu.detector)) {
06243 continue;
06244 }
06245 }
06246
06247 //get NuMCEvent to fill
06248 NuMCEvent& numc=output.GetNuMCEventToFill();
06249 lib.ext.NuMCEventFromNuEvent(nu,numc);
06250 //don't set the value of numc.mc here, since it is done above
06251 //in NuMCEventFromNuEvent(nu,numc): changed by JJH 2009/09/17
06252 //numc.mc=imc;//the index in the TClonesArray
06253
06254 //fill the tree
06255 output.FillNuMCEventTree();
06256
06257 //check if true event vtx is in fid vol
06258 //NOTE: event has to have already passed the loose fid vol cut
06259 //this works for analyses up to 2008/02 but newer cuts maybe diff.
06260 Bool_t isInFidVol=lib.cuts.IsInFidVol
06261 (nu.vtxxMC,nu.vtxyMC,nu.vtxzMC,
06262 nu.vtxuMC,nu.vtxvMC,
06263 nu.planeTrkVtxMC,nu.rTrkVtxMC,
06264 nu.detector,nu.anaVersion,nu.releaseType,nu.simFlag);
06265 if (!isInFidVol) continue;
06266
06267 //fill the plots
06268 plots.FillTrueFidEnergySpect(nu);
06269 }
06270 }
|
|
||||||||||||||||
|
code to produce the NuDST ntuple this should be called once per snarl Definition at line 6885 of file NuAnalysis.cxx. References NuEvent::abID, NuCounter::badSpillCounter, NuEvent::charge, NuLibrary::cnt, NuEvent::coilIsOk, ContributingTrueEvents(), CopyConfig(), CopySnarlInfo(), NuLibrary::cuts, DoExtractions(), NuEvent::dpID, NuEvent::entry, NuCounter::entry, NtpStRecord::evt, NuCounter::evtCounter, NtpStRecord::evthdr, NuCounter::evtInFidVolCounter, NuCounter::evtNotlitime, NuLibrary::ext, NuExtraction::ExtractBasicInfo(), NuExtraction::ExtractBeamInfoDB(), NuExtraction::ExtractCoilInfo(), ExtractConfig(), NuExtraction::ExtractDataQuality(), NuExtraction::ExtractGeneralInfo(), NuExtraction::ExtractNCInfo(), NuPlots::FillCoilCurrentHistos(), NuPlots::FillGeneralHistos(), NuPlots::FillNtupleEarliestLatestTime(), NuOutputWriter::FillNuEventTree(), NuTime::FillTime(), VldContext::GetDetector(), NuReco::GetEvtEnergy(), RecRecordImp< T >::GetHeader(), NuOutputWriter::GetNuEventToFill(), VldContext::GetSimFlag(), RecPhysicsHeader::GetSnarl(), RecHeader::GetVldContext(), NuEvent::goodBeam, NuEvent::goodBeamSntp, NuCounter::goodCoilCurrentSpillCounter, NuCounter::goodSpillCounter, NuLibrary::Instance(), NuEvent::isGoodDataQuality, NuBeam::IsGoodSpillAndFillPot(), NuCuts::IsInFidVolLoose(), NtpSREventSummary::litime, LoopOverTruthInfo(), MAXMSG, MSG, NuEvent::nevt, NtpSREvent::ntrack, NuEvent::ntrk, NuCounter::nuNoQCounter, NuCounter::nuNoTrkCounter, NuCounter::nuNQCounter, NuCounter::nuPQCounter, NuConfig::overrideBeamDataConfigExtraction, plots(), NuEvent::poID, NuEvent::pot, NuEvent::potDB, NuEvent::potSinceLastEvt, NuEvent::potSinceLastEvtBad, NuEvent::potSinceLastEvtBadDB, NuEvent::potSinceLastEvtDB, NuEvent::potSinceLastEvtGood, NuEvent::potSinceLastEvtGoodDB, NuPlots::PrintEventInfo(), NuLibrary::reco, NuEvent::roID, NuEvent::roIDNuMuBar, NuConfig::sBeamType, SetAnaFlags(), NuOutputWriter::SetupFile(), StoreOrFinishTree(), NuEvent::timeSec, NuCounter::totalPot, NuCounter::totalPotBad, and NuEvent::useDBForDataQuality. Referenced by NuModule::Ana(). 06888 {
06891
06892 //get an instance of the code library
06893 NuLibrary& lib=NuLibrary::Instance();
06894
06895 //increment ntuple entry (snarl) counter
06896 lib.cnt.entry++;//initialised to -1 so first entry=0
06897
06898
06902
06903 //extract the config from the beam information
06904 //occasionally the first snarl fails the beam cuts
06905 //so therefore you can't determine the proper beam config
06906 //this messes up the counting of bad pot but it should be a tiny
06907 //effect (and bad pot isn't very important)
06908 static NuConfig config;
06909 static Bool_t configNotExtracted=true;
06910 if (configNotExtracted) {
06911 //set the flag to override the use of beam data in configuration
06912 //config.overrideBeamDataConfigExtraction=true;//default is false
06913 if (config.overrideBeamDataConfigExtraction) {
06914 MSG("NuAnalysis",Msg::kWarning)
06915 <<"Overriding use of Beam Data to extract configuration"<<endl
06916 <<"config.overrideBeamDataConfigExtraction="
06917 <<config.overrideBeamDataConfigExtraction<<endl;
06918 }
06919 configNotExtracted=!this->ExtractConfig(pntp,pntpBD,config);
06920 if (configNotExtracted) return;//skip to next snarl
06921 }
06922
06923 static Bool_t firstTime=true;
06924 static NuOutputWriter output;
06925
06926 //classes to organise the code in to related functions
06927 static const NuPlots plots;
06928 static const NuBeam beam;
06929 static NuTime time;//class to record times of spills, etc
06930
06931 //interface for the pids
06932 static NuPIDInterface pid;
06933
06934 if (firstTime) {
06935 firstTime=false;//set the control variable so code not run again
06936
06937 //open the output file for the histograms
06938 string sFilePrefix="NuDSTFull"+config.sBeamType;
06939 //fOutFile=this->OpenFile(config,sFilePrefix.c_str());
06940 output.SetupFile(config,sFilePrefix);
06941
06942 //define the analysis flags to use
06943 this->SetAnaFlags(config);
06944
06945 //this stores the objects' pointers for access at job end
06946 //NOTE: run this after the output file has been opened
06947 this->StoreOrFinishTree(&output,&time,false);
06948
06949 cout<<endl
06950 <<"************************************************"<<endl
06951 <<"*** Starting main loop over snarls ***"<<endl
06952 <<"************************************************"<<endl;
06953 }
06954
06955 //don't get a reference to NtpBDLiteRecord because it doesn't exist
06956 //for MC
06957 const NtpStRecord& ntp=*pntp;
06958
06962
06963 const RecCandHeader& rec=ntp.GetHeader();
06964 MAXMSG("NuAnalysis",Msg::kInfo,1)
06965 <<"Found: detector="<<rec.GetVldContext().GetDetector()
06966 <<", simFlag="<<rec.GetVldContext().GetSimFlag()
06967 <<", snarl="<<rec.GetSnarl()<<endl;
06968
06969 //write out the detector, simflag,
06970 //count runs or subruns, and snarls, etc
06971 plots.FillGeneralHistos(ntp);
06972
06973 //simple event object to hold important quantities for snarl
06974 NuEvent nuSnarl;
06975 this->CopyConfig(config,nuSnarl);
06976
06977 //get the run, snarl, etc info
06978 lib.ext.ExtractGeneralInfo(ntp,nuSnarl);
06979 lib.ext.ExtractBeamInfoDB(nuSnarl);//done again later per event
06980
06981 //extract coil current early in order to get POT counting right
06982 //doesn't matter for the FD because POTs are externally defined
06983 lib.ext.ExtractCoilInfo(nuSnarl);
06984 plots.FillCoilCurrentHistos(nuSnarl);
06985 if (nuSnarl.coilIsOk) lib.cnt.goodCoilCurrentSpillCounter++;
06986
06987 //extract the data quality early as well (to get pot counting right)
06988 //the data quality variable can be cut on at analysis time
06989 //as long as the definition of data quality is exactly
06990 //the same (otherwise pot counting is wrong)
06991 lib.ext.ExtractDataQuality(nuSnarl);//done again later per event
06992
06993 //get POT and event time info
06994 beam.IsGoodSpillAndFillPot(pntpBD,config,nuSnarl);
06995 time.FillTime(nuSnarl.timeSec,nuSnarl.pot,nuSnarl.goodBeamSntp);
06996 if (!(nuSnarl.goodBeamSntp && nuSnarl.coilIsOk &&
06997 (nuSnarl.isGoodDataQuality || !nuSnarl.useDBForDataQuality))) {
06998 lib.cnt.badSpillCounter++;
06999 lib.cnt.totalPotBad+=nuSnarl.pot;
07000 }
07001 else {
07002 lib.cnt.goodSpillCounter++;
07003 lib.cnt.totalPot+=nuSnarl.pot;
07004 }
07005
07006 //count the pots since the last evt was written to file
07007 static Float_t potSinceLastEvt=0;
07008 static Float_t potSinceLastEvtGood=0;
07009 static Float_t potSinceLastEvtBad=0;
07010 static Float_t potSinceLastEvtDB=0;
07011 static Float_t potSinceLastEvtGoodDB=0;
07012 static Float_t potSinceLastEvtBadDB=0;
07013
07014 //count the sntp version of pots
07015 potSinceLastEvt+=nuSnarl.pot;
07016 if (nuSnarl.goodBeamSntp &&
07017 nuSnarl.coilIsOk &&
07018 nuSnarl.isGoodDataQuality) potSinceLastEvtGood+=nuSnarl.pot;
07019 else potSinceLastEvtBad+=nuSnarl.pot;
07020
07021 //count the database version of pots
07022 potSinceLastEvtDB+=nuSnarl.potDB;
07023 if (nuSnarl.goodBeam &&
07024 nuSnarl.coilIsOk &&
07025 nuSnarl.isGoodDataQuality) potSinceLastEvtGoodDB+=nuSnarl.potDB;
07026 else potSinceLastEvtBadDB+=nuSnarl.potDB;
07027
07028 //get the tca of evts
07029 TClonesArray& evtTca=(*ntp.evt);
07030 const Int_t numEvts=evtTca.GetEntriesFast();
07031
07033 //loop over the reconstructed events
07035 std::vector<Int_t> vTrueEventsToStore;
07036 for (Int_t ievt=0;ievt<numEvts;ievt++){
07037 const NtpSREvent& evt= *dynamic_cast<NtpSREvent*>(evtTca[ievt]);
07038 lib.cnt.evtCounter++;
07039
07040 MAXMSG("NuAnalysis",Msg::kInfo,5)
07041 <<"Found event "<<ievt+1<<"/"<<numEvts
07042 <<", ntrk="<<evt.ntrack<<endl;
07043
07044 //simple event object to hold important quantities
07045 NuEvent& nu=output.GetNuEventToFill();
07046
07048 //prepare NuMuBar variables to write
07049 //loose pre-selection cut: just require 1 or more trks
07050 //removed to include NC events
07051 //if (evt.ntrack<1) continue;
07052 //lib.cnt.evtWithTrkCounter++;
07053
07054 //get rid of LI events
07055 const NtpSREventSummary& evthdr=ntp.evthdr;
07056 if (evthdr.litime!=-1) continue;
07057 lib.cnt.evtNotlitime++;
07058
07059 nu.entry=lib.cnt.entry;//store the entry in the tree number
07060 nu.nevt=numEvts;//store the numEvts in snarl
07061 //copy info, copy the analysis (cuts and reco) version to use
07062 this->CopySnarlInfo(nuSnarl,nu);
07063 this->CopyConfig(config,nu);
07064
07065 //extract the general info and evt, trk and shw info
07066 lib.ext.ExtractBasicInfo(ntp,evt,nu);
07067
07068 //check if trk or evt vertex is in the loose fid vol
07069 if (!lib.cuts.IsInFidVolLoose(nu)) continue;
07070 lib.cnt.evtInFidVolCounter++;
07071
07072 //extract NC info
07073 lib.ext.ExtractNCInfo(pntp, ievt, nu);
07074
07075 //RECONSTRUCT the neutrino energy, including kNN
07076 lib.reco.GetEvtEnergy(nu, true);
07077
07078 MAXMSG("NuAnalysis",Msg::kDebug,10)
07079 <<endl<<"After reco:"<<endl
07080 <<plots.PrintEventInfo(cout,nu)<<endl;
07081
07082 //do multiple extractions
07083 this->DoExtractions(ntp,evt,pntpSA,pid,nu);
07084
07085
07086 //Get a list of all the truth events which contribute to reco events
07087 const std::vector<Int_t> vTthInd = this->ContributingTrueEvents(nu);
07088 vTrueEventsToStore.insert(vTrueEventsToStore.end(),
07089 vTthInd.begin(),
07090 vTthInd.end());
07091
07092 MAXMSG("NuAnalysis",Msg::kInfo,10)
07093 <<"PID: dp="<<nu.dpID<<", ab="<<nu.abID<<", ro="<<nu.roID
07094 <<", po="<<nu.poID<<", roNMB="<<nu.roIDNuMuBar<<endl;
07095
07096 //count the positive and negative events
07097 if (nu.charge==-1) lib.cnt.nuNQCounter++;
07098 else if (nu.charge==+1) lib.cnt.nuPQCounter++;
07099 else if (nu.ntrk>0) lib.cnt.nuNoQCounter++;
07100 else if (nu.ntrk==-1) lib.cnt.nuNoTrkCounter++;
07101
07102
07103 //figure out the first and last time in the whole ntuple
07104 //this is very useful for making plots of quantities vs time
07105 plots.FillNtupleEarliestLatestTime(nu);
07106
07107
07108 //write out the pots since the last evt
07109 //this variable takes account of spills with zero entries
07110 //and spills with >=2 evts
07111 nu.potSinceLastEvt=potSinceLastEvt;
07112 nu.potSinceLastEvtGood=potSinceLastEvtGood;
07113 nu.potSinceLastEvtBad=potSinceLastEvtBad;
07114 nu.potSinceLastEvtDB=potSinceLastEvtDB;
07115 nu.potSinceLastEvtGoodDB=potSinceLastEvtGoodDB;
07116 nu.potSinceLastEvtBadDB=potSinceLastEvtBadDB;
07117 potSinceLastEvt=0;//reset this for the next loop
07118 potSinceLastEvtGood=0;
07119 potSinceLastEvtBad=0;
07120 potSinceLastEvtDB=0;
07121 potSinceLastEvtGoodDB=0;
07122 potSinceLastEvtBadDB=0;
07123
07125 //fill the tree
07126 output.FillNuEventTree();
07127 }//end of loop over reconstructed events
07128
07129 //now loop over all the true events
07130 this->LoopOverTruthInfo(ntp,output,nuSnarl,vTrueEventsToStore);
07131 }
|
|
|
Definition at line 2313 of file NuAnalysis.cxx. References NuEvent::anaVersion, NuConfig::beamType, MadDpID::CalcPID(), NuEvent::chi2PerNdof, MadDpID::ChoosePDFs(), NuEvent::detector, NuEvent::dpID, NtpStRecord::evt, NuLibrary::ext, ExtractConfig(), NuExtraction::ExtractEvtInfo(), NuExtraction::ExtractGeneralInfo(), NuExtraction::ExtractShwInfo(), NuExtraction::ExtractTrkInfo(), NuPlots::FillGeneralHistos(), NtpSRTrack::fit, NuReco::GetBestTrack(), VldContext::GetDetector(), NuBase::GetEntries(), NuReco::GetEvtDeltaTs(), NuReco::GetEvtEnergy(), NuReco::GetEvtsPerSlc(), RecRecordImp< T >::GetHeader(), NuBase::GetNtpBDLiteRecord(), NuBase::GetNtpStRecord(), RecDataHeader::GetRun(), VldContext::GetSimFlag(), RecDataHeader::GetSubRun(), NuReco::GetTrackWithIndexX(), RecHeader::GetVldContext(), NuBase::InitialiseLoopVariables(), NuLibrary::Instance(), NuCuts::IsGoodDpID(), NuCuts::IsGoodFitChi2PerNdof(), NuCuts::IsGoodFitProb(), NuCuts::IsGoodSigmaQP_QP(), NuBeam::IsGoodSpillAndFillPot(), NuCuts::IsGoodUVVtx(), NuCuts::IsInFidVol(), MAXMSG, MSG, NtpSREvent::ntrack, NuBase::OpenFile(), NtpSRFitTrack::pass, plots(), NuEvent::pot, NuEvent::prob, NuLibrary::reco, NuEvent::releaseType, NuMadAnalysis::SetEntry(), NuBase::SetLoopVariables(), NuEvent::sigqp_qp, NuEvent::simFlag, NtpSRVertex::u, NtpSRVertex::v, NtpSREvent::vtx, NtpSRVertex::x, NtpSRVertex::y, and NtpSRVertex::z. 02314 {
02315 MSG("NuAnalysis",Msg::kInfo)
02316 <<" ** Running N_1 method... **"<<endl;
02317
02318 //open the output file for the histograms
02319 fOutFile=this->OpenFile(100,"NuMuBarN_1");
02320
02321 TH1F* hDpID=new TH1F("hDpID","hDpID",4*160,-1.6,1.6);
02322 hDpID->GetXaxis()->SetTitle("PID (from MadDpID)");
02323 hDpID->GetXaxis()->CenterTitle();
02324 hDpID->GetYaxis()->SetTitle("");
02325 hDpID->GetYaxis()->CenterTitle();
02326 hDpID->SetFillColor(0);
02327 hDpID->SetLineColor(1);
02328 hDpID->SetLineWidth(3);
02329 //hDpID->SetBit(TH1::kCanRebin);
02330
02331 TH1F* hDpIDN_1=new TH1F("hDpIDN_1","hDpIDN_1",4*160,-1.6,1.6);
02332 hDpIDN_1->GetXaxis()->SetTitle("PID (from MadDpID)");
02333 hDpIDN_1->GetXaxis()->CenterTitle();
02334 hDpIDN_1->GetYaxis()->SetTitle("");
02335 hDpIDN_1->GetYaxis()->CenterTitle();
02336 hDpIDN_1->SetFillColor(0);
02337 hDpIDN_1->SetLineColor(2);//red for N-1 cuts
02338 hDpIDN_1->SetLineWidth(3);
02339 //hDpIDN_1->SetBit(TH1::kCanRebin);
02340
02341 TH1F* hDpIDN=new TH1F("hDpIDN","hDpIDN",4*160,-1.6,1.6);
02342 hDpIDN->GetXaxis()->SetTitle("PID (from MadDpID)");
02343 hDpIDN->GetXaxis()->CenterTitle();
02344 hDpIDN->GetYaxis()->SetTitle("");
02345 hDpIDN->GetYaxis()->CenterTitle();
02346 hDpIDN->SetFillColor(0);
02347 hDpIDN->SetLineColor(4);//blue for N cuts
02348 hDpIDN->SetLineWidth(3);
02349 //hDpIDN->SetBit(TH1::kCanRebin);
02350
02351
02352
02353 TH1F* hSigmaqp_qp=new TH1F("hSigmaqp_qp","hSigmaqp_qp",200*160,-160,160);
02354 hSigmaqp_qp->GetXaxis()->SetTitle("Sigmaqp_qp");
02355 hSigmaqp_qp->GetXaxis()->CenterTitle();
02356 hSigmaqp_qp->GetYaxis()->SetTitle("");
02357 hSigmaqp_qp->GetYaxis()->CenterTitle();
02358 hSigmaqp_qp->SetFillColor(0);
02359 hSigmaqp_qp->SetLineColor(1);
02360 hSigmaqp_qp->SetLineWidth(3);
02361 //hSigmaqp_qp->SetBit(TH1::kCanRebin);
02362
02363 TH1F* hSigmaqp_qpN_1=new TH1F("hSigmaqp_qpN_1","hSigmaqp_qpN_1",200*160,-160,160);
02364 hSigmaqp_qpN_1->GetXaxis()->SetTitle("Sigmaqp_qp");
02365 hSigmaqp_qpN_1->GetXaxis()->CenterTitle();
02366 hSigmaqp_qpN_1->GetYaxis()->SetTitle("");
02367 hSigmaqp_qpN_1->GetYaxis()->CenterTitle();
02368 hSigmaqp_qpN_1->SetFillColor(0);
02369 hSigmaqp_qpN_1->SetLineColor(2);//red for N-1 cuts
02370 hSigmaqp_qpN_1->SetLineWidth(3);
02371 //hSigmaqp_qpN_1->SetBit(TH1::kCanRebin);
02372
02373 TH1F* hSigmaqp_qpN=new TH1F("hSigmaqp_qpN","hSigmaqp_qpN",200*160,-160,160);
02374 hSigmaqp_qpN->GetXaxis()->SetTitle("Sigmaqp_qp");
02375 hSigmaqp_qpN->GetXaxis()->CenterTitle();
02376 hSigmaqp_qpN->GetYaxis()->SetTitle("");
02377 hSigmaqp_qpN->GetYaxis()->CenterTitle();
02378 hSigmaqp_qpN->SetFillColor(0);
02379 hSigmaqp_qpN->SetLineColor(4);//blue for N cuts
02380 hSigmaqp_qpN->SetLineWidth(3);
02381 //hSigmaqp_qpN->SetBit(TH1::kCanRebin);
02382
02383
02384
02385 TH1F* hChi2=new TH1F("hChi2","hChi2",10*176,-16,160);
02386 hChi2->GetXaxis()->SetTitle("Chi2");
02387 hChi2->GetXaxis()->CenterTitle();
02388 hChi2->GetYaxis()->SetTitle("");
02389 hChi2->GetYaxis()->CenterTitle();
02390 hChi2->SetFillColor(0);
02391 hChi2->SetLineColor(1);
02392 hChi2->SetLineWidth(3);
02393 //hChi2->SetBit(TH1::kCanRebin);
02394
02395 TH1F* hChi2N_1=new TH1F("hChi2N_1","hChi2N_1",10*176,-16,160);
02396 hChi2N_1->GetXaxis()->SetTitle("Chi2");
02397 hChi2N_1->GetXaxis()->CenterTitle();
02398 hChi2N_1->GetYaxis()->SetTitle("");
02399 hChi2N_1->GetYaxis()->CenterTitle();
02400 hChi2N_1->SetFillColor(0);
02401 hChi2N_1->SetLineColor(2);//red for N-1 cuts
02402 hChi2N_1->SetLineWidth(3);
02403 //hChi2N_1->SetBit(TH1::kCanRebin);
02404
02405 TH1F* hChi2N=new TH1F("hChi2N","hChi2N",10*176,-16,160);
02406 hChi2N->GetXaxis()->SetTitle("Chi2");
02407 hChi2N->GetXaxis()->CenterTitle();
02408 hChi2N->GetYaxis()->SetTitle("");
02409 hChi2N->GetYaxis()->CenterTitle();
02410 hChi2N->SetFillColor(0);
02411 hChi2N->SetLineColor(4);//blue for N cuts
02412 hChi2N->SetLineWidth(3);
02413 //hChi2N->SetBit(TH1::kCanRebin);
02414
02415
02416
02417 TH1F* hFitProb=new TH1F("hFitProb","hFitProb",10*160,-1.6,1.6);
02418 hFitProb->GetXaxis()->SetTitle("FitProb");
02419 hFitProb->GetXaxis()->CenterTitle();
02420 hFitProb->GetYaxis()->SetTitle("");
02421 hFitProb->GetYaxis()->CenterTitle();
02422 hFitProb->SetFillColor(0);
02423 hFitProb->SetLineColor(1);
02424 hFitProb->SetLineWidth(3);
02425 //hFitProb->SetBit(TH1::kCanRebin);
02426
02427 TH1F* hFitProbN_1=new TH1F("hFitProbN_1","hFitProbN_1",10*160,-1.6,1.6);
02428 hFitProbN_1->GetXaxis()->SetTitle("FitProb");
02429 hFitProbN_1->GetXaxis()->CenterTitle();
02430 hFitProbN_1->GetYaxis()->SetTitle("");
02431 hFitProbN_1->GetYaxis()->CenterTitle();
02432 hFitProbN_1->SetFillColor(0);
02433 hFitProbN_1->SetLineColor(2);//red for N-1 cuts
02434 hFitProbN_1->SetLineWidth(3);
02435 //hFitProbN_1->SetBit(TH1::kCanRebin);
02436
02437 TH1F* hFitProbN=new TH1F("hFitProbN","hFitProbN",10*160,-1.6,1.6);
02438 hFitProbN->GetXaxis()->SetTitle("FitProb");
02439 hFitProbN->GetXaxis()->CenterTitle();
02440 hFitProbN->GetYaxis()->SetTitle("");
02441 hFitProbN->GetYaxis()->CenterTitle();
02442 hFitProbN->SetFillColor(0);
02443 hFitProbN->SetLineColor(4);//blue for N cuts
02444 hFitProbN->SetLineWidth(3);
02445 //hFitProbN->SetBit(TH1::kCanRebin);
02446
02447
02448
02449 TH1F* hDeltaT=new TH1F("hDeltaT","hDeltaT",2010,-10,2000);
02450 hDeltaT->GetXaxis()->SetTitle("Delta T (ns)");
02451 hDeltaT->GetXaxis()->CenterTitle();
02452 hDeltaT->GetYaxis()->SetTitle("");
02453 hDeltaT->GetYaxis()->CenterTitle();
02454 hDeltaT->SetFillColor(0);
02455 hDeltaT->SetLineColor(1);
02456 hDeltaT->SetLineWidth(3);
02457 //hDeltaT->SetBit(TH1::kCanRebin);
02458
02459 TH1F* hDeltaTN_1=new TH1F("hDeltaTN_1","hDeltaTN_1",2010,-10,2000);
02460 hDeltaTN_1->GetXaxis()->SetTitle("Delta T (ns)");
02461 hDeltaTN_1->GetXaxis()->CenterTitle();
02462 hDeltaTN_1->GetYaxis()->SetTitle("");
02463 hDeltaTN_1->GetYaxis()->CenterTitle();
02464 hDeltaTN_1->SetFillColor(0);
02465 hDeltaTN_1->SetLineColor(2);//red for N-1 cuts
02466 hDeltaTN_1->SetLineWidth(3);
02467 //hDeltaTN_1->SetBit(TH1::kCanRebin);
02468
02469 TH1F* hDeltaTN=new TH1F("hDeltaTN","hDeltaTN",2010,-10,2000);
02470 hDeltaTN->GetXaxis()->SetTitle("Delta T (ns)");
02471 hDeltaTN->GetXaxis()->CenterTitle();
02472 hDeltaTN->GetYaxis()->SetTitle("");
02473 hDeltaTN->GetYaxis()->CenterTitle();
02474 hDeltaTN->SetFillColor(0);
02475 hDeltaTN->SetLineColor(4);//blue for N cuts
02476 hDeltaTN->SetLineWidth(3);
02477 //hDeltaTN->SetBit(TH1::kCanRebin);
02478
02479
02480
02481 TH1F* hEvtsPerSlc=new TH1F("hEvtsPerSlc","hEvtsPerSlc",60,-10,50);
02482 hEvtsPerSlc->GetXaxis()->SetTitle("Evts Per Slc");
02483 hEvtsPerSlc->GetXaxis()->CenterTitle();
02484 hEvtsPerSlc->GetYaxis()->SetTitle("");
02485 hEvtsPerSlc->GetYaxis()->CenterTitle();
02486 hEvtsPerSlc->SetFillColor(0);
02487 hEvtsPerSlc->SetLineColor(1);
02488 hEvtsPerSlc->SetLineWidth(3);
02489 //hEvtsPerSlc->SetBit(TH1::kCanRebin);
02490
02491 TH1F* hEvtsPerSlcN_1=new TH1F("hEvtsPerSlcN_1","hEvtsPerSlcN_1",
02492 60,-10,50);
02493 hEvtsPerSlcN_1->GetXaxis()->SetTitle("Evts Per Slc");
02494 hEvtsPerSlcN_1->GetXaxis()->CenterTitle();
02495 hEvtsPerSlcN_1->GetYaxis()->SetTitle("");
02496 hEvtsPerSlcN_1->GetYaxis()->CenterTitle();
02497 hEvtsPerSlcN_1->SetFillColor(0);
02498 hEvtsPerSlcN_1->SetLineColor(2);//red for N-1 cuts
02499 hEvtsPerSlcN_1->SetLineWidth(3);
02500 //hEvtsPerSlcN_1->SetBit(TH1::kCanRebin);
02501
02502 TH1F* hEvtsPerSlcN=new TH1F("hEvtsPerSlcN","hEvtsPerSlcN",60,-10,50);
02503 hEvtsPerSlcN->GetXaxis()->SetTitle("Evts Per Slc");
02504 hEvtsPerSlcN->GetXaxis()->CenterTitle();
02505 hEvtsPerSlcN->GetYaxis()->SetTitle("");
02506 hEvtsPerSlcN->GetYaxis()->CenterTitle();
02507 hEvtsPerSlcN->SetFillColor(0);
02508 hEvtsPerSlcN->SetLineColor(4);//blue for N cuts
02509 hEvtsPerSlcN->SetLineWidth(3);
02510 //hEvtsPerSlcN->SetBit(TH1::kCanRebin);
02511
02512 //classes to organise the code in to related functions
02513 const NuCuts cuts;
02514 //const NuGeneral general;
02515 const NuPlots plots;
02516 const NuReco reco;
02517 const NuExtraction ext;
02518 const NuBeam beam;
02519
02520 NuConfig config;
02521 this->ExtractConfig(config);
02522
02523 //create these on the heap so that they don't destruct
02524 // - on purpose to avoid a segv on destruction... nice coding!
02525 NuMadAnalysis& mad=*new NuMadAnalysis();
02526 MadDpID& dp=*new MadDpID();
02527 //BeamType::BeamType_t beamType=BeamType::kLE;
02528 BeamType::BeamType_t beamType=static_cast
02529 <BeamType::BeamType_t>(config.beamType);
02530
02531 //maps to store evt info
02532 map<Int_t,Double_t> deltaTs;
02533 map<Int_t,Int_t> evtsPerSlc;
02534
02535 Int_t goodSpillCounter=0;
02536 Int_t badSpillCounter=0;
02537 Float_t totalPot=0;
02538 Float_t totalPotBad=0;
02539 Int_t evtCounter=0;
02540 Int_t evtInFidVolCounter=0;
02541 Int_t evtWithTrkCounter=0;
02542 Int_t goodBestTrkCounter=0;
02543 Int_t goodTrkPassCounter=0;
02544 Int_t goodRecoEnCounter=0;
02545 Int_t goodUVDiffCounter=0;
02546 //Int_t goodFitSigQPCounter=0;
02547 //Int_t goodFitProbCounter=0;
02548 //Int_t goodFitChi2Counter=0;
02549 //Int_t goodPIDCounter=0;
02550
02551 //get an instance of the code library
02552 const NuLibrary& lib=NuLibrary::Instance();
02553
02557
02558 this->InitialiseLoopVariables();
02559
02560 //for(Int_t entry=0;entry<10000;entry++){
02561 for(Int_t entry=0;entry<this->GetEntries();entry++){
02562
02563 this->SetLoopVariables(entry);
02564
02565 //get reference to NtpStRecord from base class
02566 const NtpStRecord& ntp=(*this->GetNtpStRecord());
02567
02568 const RecCandHeader& rec=ntp.GetHeader();
02569 MAXMSG("NuAnalysis",Msg::kInfo,5)
02570 <<"Found: run="<<rec.GetRun()
02571 <<", subrun="<<rec.GetSubRun()
02572 <<", detector="<<rec.GetVldContext().GetDetector()
02573 <<", simFlag="<<rec.GetVldContext().GetSimFlag()
02574 <<endl;
02575
02576 //write out the detector, simflag, etc
02577 plots.FillGeneralHistos(ntp);
02578
02579 //simple event object to hold important quantities for snarl
02580 NuEvent nuSnarl;
02581
02582 //get the run, snarl, etc info
02583 ext.ExtractGeneralInfo(ntp,nuSnarl);
02584
02585 if (!beam.IsGoodSpillAndFillPot
02586 (this->GetNtpBDLiteRecord(),config,nuSnarl)) {
02587 badSpillCounter++;
02588 totalPotBad+=nuSnarl.pot;
02589 continue;
02590 }
02591 goodSpillCounter++;
02592 totalPot+=nuSnarl.pot;
02593
02594 dp.ChoosePDFs(rec.GetVldContext().GetDetector(),beamType);
02595 mad.SetEntry(&ntp);
02596
02597 TClonesArray& evtTca=(*ntp.evt);
02598 const Int_t numEvts=evtTca.GetEntriesFast();
02599
02600 //loop over the reconstructed events
02601 for (Int_t ievt=0;ievt<numEvts;ievt++){
02602 const NtpSREvent& evt=
02603 *dynamic_cast<NtpSREvent*>(evtTca[ievt]);
02604 evtCounter++;
02605
02606 //simple event object to hold important quantities
02607 NuEvent nu;
02608
02609 //get the run, snarl, etc info
02610 ext.ExtractGeneralInfo(ntp,nu);
02611 //get info from the evt
02612 lib.ext.ExtractEvtInfo(evt,nu);
02613 //extract trk info (needed to get best track info)
02614 lib.ext.ExtractTrkInfo(ntp,evt,nu);
02615 //extract shw info
02616 lib.ext.ExtractShwInfo(ntp,evt,nu);
02617
02618 Bool_t isInFidVol=cuts.IsInFidVol(evt.vtx.x,evt.vtx.y,
02619 evt.vtx.z,
02620 evt.vtx.u,evt.vtx.v,
02621 0,0,
02622 nu.detector,nu.anaVersion,
02623 nu.releaseType,nu.simFlag);
02624
02625 if (!isInFidVol) continue;
02626 evtInFidVolCounter++;
02627
02628 nu.dpID=dp.CalcPID(&mad,ievt,0);
02629 MAXMSG("NuAnalysis",Msg::kDebug,50)
02630 <<"dpID="<<nu.dpID<<endl;
02631
02632 //ensure there is a track in the event
02633 //if (evt.ntrack<1) continue;
02634 if (evt.ntrack!=1) continue;//require exactly 1 track
02635 evtWithTrkCounter++;
02636
02637 //get the best track in the event
02638 Int_t bestTrack=lib.reco.GetBestTrack(nu);
02639 const NtpSRTrack* ptrk=lib.reco.GetTrackWithIndexX
02640 (ntp,evt,bestTrack-1);
02641 const NtpSRTrack& trk=*ptrk;
02642 goodBestTrkCounter++;
02643
02644 //require a trk fit
02645 if (!trk.fit.pass) continue;
02646 goodTrkPassCounter++;
02647
02648
02650 //RECONSTRUCT the neutrino energy
02651 lib.reco.GetEvtEnergy(nu, false);
02652 goodRecoEnCounter++;
02653
02654 if (!cuts.IsGoodUVVtx(nu)){
02655 continue;
02656 }
02657 goodUVDiffCounter++;
02658
02659
02661
02662 Bool_t goodSigmaQP=cuts.IsGoodSigmaQP_QP(nu);
02663 Bool_t goodFitProb=cuts.IsGoodFitProb(nu);
02664 Bool_t goodChi2=cuts.IsGoodFitChi2PerNdof(nu);
02665 Bool_t goodDpID=cuts.IsGoodDpID(nu);
02666
02667 //get the maps of evts' info
02668 deltaTs.clear();
02669 reco.GetEvtDeltaTs(ntp,deltaTs);
02670 evtsPerSlc.clear();
02671 reco.GetEvtsPerSlc(ntp,evtsPerSlc);
02672 Bool_t goodDeltaT=deltaTs[ievt]>=50*Munits::ns;
02673 Bool_t goodEvtsPerSlc=evtsPerSlc[evt.slc]==1;
02674
02675 //only fill histos for anti-neutrinos
02676 if (nu.sigqp_qp<0) continue;
02677
02678 //fill the ALL histos
02679 hSigmaqp_qp->Fill(nu.sigqp_qp);
02680 hFitProb->Fill(nu.prob);
02681 hChi2->Fill(nu.chi2PerNdof);
02682 hDpID->Fill(nu.dpID);
02683 hDeltaT->Fill(deltaTs[ievt]/Munits::ns);
02684 hEvtsPerSlc->Fill(evtsPerSlc[evt.slc]);
02685
02687 //fill the N-1 cuts plots
02689 if (true &&
02690 goodFitProb &&
02691 goodChi2 &&
02692 goodDpID &&
02693 goodDeltaT &&
02694 goodEvtsPerSlc) {
02695 hSigmaqp_qpN_1->Fill(nu.sigqp_qp);
02696 }
02697
02698 if (goodSigmaQP &&
02699 true &&
02700 goodChi2 &&
02701 goodDpID &&
02702 goodDeltaT &&
02703 goodEvtsPerSlc){
02704 hFitProbN_1->Fill(nu.prob);
02705 }
02706
02707 if (goodSigmaQP &&
02708 goodFitProb &&
02709 true &&
02710 goodDpID &&
02711 goodDeltaT &&
02712 goodEvtsPerSlc){
02713 hChi2N_1->Fill(nu.chi2PerNdof);
02714 }
02715
02716 if (goodSigmaQP &&
02717 goodFitProb &&
02718 goodChi2 &&
02719 true &&
02720 goodDeltaT &&
02721 goodEvtsPerSlc){
02722 hDpIDN_1->Fill(nu.dpID);
02723 }
02724
02725 if (goodSigmaQP &&
02726 goodFitProb &&
02727 goodChi2 &&
02728 goodDpID &&
02729 true &&
02730 goodEvtsPerSlc){
02731 hDeltaTN_1->Fill(deltaTs[ievt]/Munits::ns);
02732 }
02733
02734 if (goodSigmaQP &&
02735 goodFitProb &&
02736 goodChi2 &&
02737 goodDpID &&
02738 goodDeltaT &&
02739 true){
02740 hEvtsPerSlcN_1->Fill(evtsPerSlc[evt.slc]);
02741 }
02742
02744 //fill the N cuts plots
02746 if (goodSigmaQP &&
02747 goodFitProb &&
02748 goodChi2 &&
02749 goodDpID &&
02750 goodDeltaT &&
02751 goodEvtsPerSlc){
02752 hSigmaqp_qpN->Fill(nu.sigqp_qp);
02753 hFitProbN->Fill(nu.prob);
02754 hChi2N->Fill(nu.chi2PerNdof);
02755 hDpIDN->Fill(nu.dpID);
02756 hDeltaTN->Fill(deltaTs[ievt]/Munits::ns);
02757 hEvtsPerSlcN->Fill(evtsPerSlc[evt.slc]);
02758 }
02759 }
02760 }//end of for
02761
02765
02766 MSG("NuAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
02767
02768
02769 MSG("NuAnalysis",Msg::kInfo)
02770 <<" ** Finished N_1 method **"<<endl;
02771 }
|
|
|
Definition at line 5641 of file NuAnalysis.cxx. References NuEvent::anaVersion, CopyAcrossHistos(), NuEvent::energy, NuEvent::energyMC, NuPlots::FillContainmentHistos(), NuPlots::FillDPIdSigmaQPFailDpIDCutPlots(), NuPlots::FillDPIdSigmaQPFailProbCutPlots(), NuPlots::FillDPIdSigmaQPFailSigQPCutPlots(), NuPlots::FillDPIdSigmaQPPassDpIDCutPlots(), NuPlots::FillDPIdSigmaQPPassPreSelCutPlots(), NuPlots::FillDPIdSigmaQPPassSigQPCutPlots(), NuPlots::FillDPIdSigmaQPPlotsN(), NuPlots::FillEnergyBinHistos(), NuPlots::FillKinematicsHistos(), NuPlots::FillRangeCurvCompHistos(), NuPlots::FillRecoEnYHistosN(), NuPlots::FillSigmaQPPlots(), NuPlots::FillTrueAbIDHistos(), NuPlots::FillTrueAbIDHistosPQNQ(), NuPlots::FillTrueDpIDHistos(), NuPlots::FillTrueDpIDHistosPQNQ(), NuPlots::FillTruePIDHistos(), NuPlots::FillXYZHistos(), NuInputEvents::GetEntriesNuEvent(), NuInputEvents::GetNextNuEvent(), NuEvent::iaction, NuEvent::index, NuInputEvents::InitialiseChains(), NuInputEvents::InitialiseNuEventBranch(), NuInputEvents::InputFileName(), NuCuts::IsGoodAbID(), NuCuts::IsGoodFitChi2PerNdof(), NuCuts::IsGoodFitProb(), NuCuts::IsGoodSigmaQP_QP(), MAXMSG, NuBase::OpenFile(), NuInputEvents::OpenInputFile(), NuGeneral::OscWeight(), plots(), NuBase::PrintLoopProgress(), NuInputEvents::ResetNuEventLoopPositionToStart(), and NuEvent::rw. 05642 {
05643 string sFilePrefix="NMBSumAna";
05644 fOutFile=this->OpenFile(100,sFilePrefix.c_str());
05645
05646 TDirectory* dirOutput=gDirectory;
05647 cout<<"After opening output file:"<<endl;
05648 dirOutput->Print();
05649
05650 string sBase="/home/hartnell/mytest/NuMuBar/";
05651 string inputFileName=
05652 "NMBChgSepL010185iN00009059_2.root";//hs, csf, qp
05653
05654 inputFileName=sBase+inputFileName;
05655
05656 NuInputEvents* fpInput=new NuInputEvents();
05657 NuInputEvents& input=*fpInput;
05658 input.InputFileName(inputFileName);
05659 input.InitialiseChains();
05660 input.InitialiseNuEventBranch();
05661 TDirectory* dirInput=input.OpenInputFile();
05662
05663 //copy across histos such hDetector, hSimFlag, and POT ones
05664 this->CopyAcrossHistos(dirInput,dirOutput);
05665
05666 //create a cache of selected events to speed up the fitting
05667 //input.InitialiseNuEventCache();
05668 //this->CreateInputCache();
05669
05670 //tell the input object to use cached events
05671 //input.UseNuEventCache();
05672
05673 input.ResetNuEventLoopPositionToStart();
05674
05675 static NuGeneral general;
05676 static NuPlots plots;
05677 static NuCuts cuts;
05678
05679 for (Int_t i=0;i<input.GetEntriesNuEvent();++i) {
05680
05681 this->PrintLoopProgress(i,input.GetEntriesNuEvent(),1);
05682
05683 NuEvent& nu=const_cast<NuEvent&>(input.GetNextNuEvent(Msg::kDebug));
05684
05685 //these ones go before the pid and other cuts
05686 plots.FillTrueDpIDHistos(nu);
05687 plots.FillTrueDpIDHistosPQNQ(nu);
05688 plots.FillDPIdSigmaQPPassPreSelCutPlots(nu);
05689 plots.FillSigmaQPPlots(nu);//sig, chi, prob plots
05690 // PoID Officially depracated
05691 //plots.FillTruePoIDHistos(nu);
05692 //plots.FillTruePoIDHistosPQNQ(nu);
05693 plots.FillTrueAbIDHistos(nu);
05694 plots.FillTrueAbIDHistosPQNQ(nu);
05695
05696 //override the anaVersion
05697 nu.anaVersion=NuCuts::kJJH1;
05698
05699 //cut on the PID
05700 //if (!cuts.IsGoodDpID(nu)) {
05701 if (!cuts.IsGoodAbID(nu)) {
05702 plots.FillDPIdSigmaQPFailDpIDCutPlots(nu);
05703 continue;
05704 }
05705 plots.FillDPIdSigmaQPPassDpIDCutPlots(nu);
05706
05707 plots.FillEnergyBinHistos(nu);//just PID cut
05708
05709 //cut on the fractional track momentum and sign error
05710 if (!cuts.IsGoodSigmaQP_QP(nu)) {
05711 plots.FillDPIdSigmaQPFailSigQPCutPlots(nu);
05712 continue;
05713 }
05714 plots.FillDPIdSigmaQPPassSigQPCutPlots(nu);
05715
05716 //cut on the chi2
05717 if (!cuts.IsGoodFitChi2PerNdof(nu)) continue;
05718
05719 //was here
05720 //plots.FillEnergyBinHistos(nu);
05721
05722 //cut on the track fit probability
05723 if (!cuts.IsGoodFitProb(nu)) {
05724 plots.FillDPIdSigmaQPFailProbCutPlots(nu);
05725 continue;
05726 }
05727
05728
05729
05730
05731 //extra cuts to test
05732 //if (nu.dpID<+0.1) continue;
05733 //if (nu.dpID<+0.4) continue;
05734 //if (nu.dpID<+0.4 && nu.charge>0) continue;
05735 //if (nu.prob<0.1) continue;
05736 //if (nu.sigqp_qp>0.3) continue;
05737
05738 //Bool_t weightForOsc=true;
05739 Bool_t weightForOsc=false;
05740 if (weightForOsc){
05741 //get the weight for the event
05742 Double_t weight=nu.rw;
05743 //apply the oscillation weight to CC events
05744 if (nu.iaction==1) {
05745 Float_t dm2=2.7e-3;
05746 Double_t oscWeight=general.OscWeight(dm2,1,
05747 nu.energyMC);
05748 weight*=oscWeight;
05749 }
05750 nu.rw=weight;
05751 }
05752
05753 //if (nu.containedTrk && nu.rTrkEnd<0.3) {
05754 //MAXMSG("NuMinuit",Msg::kInfo,200)
05755 //<<"nu.rTrkEnd="<<nu.rTrkEnd<<endl;
05756 //}
05757
05759 //if (nu.rTrkEnd>0.3) continue;
05760
05761 //if (nu.xTrkEnd<-0.2 && nu.planeTrkEnd<=120 && nu.containmentFlag==1) {
05762 //MAXMSG("NuMinuit",Msg::kInfo,200)
05763 //<<"xTrkEnd="<<nu.xTrkEnd
05764 //<<", y="<<nu.yTrkEnd
05765 //<<", r="<<nu.rTrkEnd
05766 //<<", plTrkEnd"<<nu.planeTrkEnd
05767 //<<", con="<<nu.containedTrk
05768 //<<", flag="<<nu.containmentFlag
05769 //<<endl;
05770 //}
05771
05772
05773 //same list as below, but with trk/evt ones commented out
05774 plots.FillRecoEnYHistosN(nu);
05775 plots.FillDPIdSigmaQPPlotsN(nu);
05776
05777 //plots.FillShwHistos(ntp,evt,nu);
05778 plots.FillXYZHistos(nu);
05779 plots.FillContainmentHistos(nu);
05780 plots.FillTruePIDHistos(nu);
05781 //plots.FillTrackResponseHistos(ntp,trk,nu);
05782 plots.FillRangeCurvCompHistos(nu);
05783 plots.FillKinematicsHistos(nu);
05784
05785 MAXMSG("NuMinuit",Msg::kInfo,5)
05786 <<"NMBSummaryTreeAna: NuEvent: index="<<nu.index
05787 <<", energy="<<nu.energy<<", energyMC="<<nu.energyMC<<endl;
05788 }//end of loop over summary tree
05789
05790 }
|
|
|
Definition at line 3432 of file NuAnalysis.cxx. References abs(), NuEvent::anaVersion, NuConfig::beamType, NuCuts::CalcTotalPot(), MadDpID::ChoosePDFs(), NuEvent::detector, NuGeneral::EpochTo1995(), ExtractConfig(), NuExtraction::ExtractGeneralInfo(), NuPlots::FillGeneralHistos(), VldContext::GetDetector(), NuBase::GetEntries(), RecRecordImp< T >::GetHeader(), NuBase::GetNtpBDLiteRecord(), NuBase::GetNtpStRecord(), NuBase::GetNumFilesAddedToChain(), RecDataHeader::GetRun(), VldContext::GetSimFlag(), RecDataHeader::GetSubRun(), RecHeader::GetVldContext(), NtpMCTruth::iaction, NtpMCTruth::index, NuBase::InitialiseLoopVariables(), NtpMCTruth::inu, NuBeam::IsGoodSpillAndFillPot(), NuCuts::IsInFidVol(), MAXMSG, NtpStRecord::mc, MSG, NuBase::OpenFile(), NuGeneral::OscWeight(), NtpMCTruth::p4neu, plots(), NuEvent::pot, NuEvent::releaseType, NuConfig::sBeamType, NuMadAnalysis::SetEntry(), NuGeneral::SetGraphAxis(), NuBase::SetLoopVariables(), NuEvent::simFlag, NuGeneral::TH1FFill(), NtpMCTruth::vtxx, NtpMCTruth::vtxy, NtpMCTruth::vtxz, and UgliGeomHandle::xyz2uvz(). 03433 {
03434 MSG("NuAnalysis",Msg::kInfo)
03435 <<" ** Running NuMuBarAppearance method... **"<<endl;
03436
03437 NuConfig config;
03438 this->ExtractConfig(config);
03439
03440 //open the output file for the histograms
03441 string sFilePrefix="NMBApp"+config.sBeamType;
03442 fOutFile=this->OpenFile(config,sFilePrefix.c_str());
03443
03444 TH1F* hRecoEnNMBFull=new TH1F("hRecoEnNMBFull","hRecoEnNMBFull",
03445 4*352,-32,320);
03446 hRecoEnNMBFull->GetXaxis()->SetTitle("True Energy (GeV)");
03447 hRecoEnNMBFull->GetXaxis()->CenterTitle();
03448 hRecoEnNMBFull->GetYaxis()->SetTitle("");
03449 hRecoEnNMBFull->GetYaxis()->CenterTitle();
03450 //hRecoEnNMBFull->SetBit(TH1::kCanRebin);
03451 hRecoEnNMBFull->Sumw2();
03452
03453 TH1F* hRecoEnNMFull=new TH1F("hRecoEnNMFull","hRecoEnNMFull",
03454 4*352,-32,320);
03455 hRecoEnNMFull->GetXaxis()->SetTitle("True Energy (GeV)");
03456 hRecoEnNMFull->GetXaxis()->CenterTitle();
03457 hRecoEnNMFull->GetYaxis()->SetTitle("");
03458 hRecoEnNMFull->GetYaxis()->CenterTitle();
03459 //hRecoEnNMFull->SetBit(TH1::kCanRebin);
03460 hRecoEnNMFull->Sumw2();
03461
03462 TH1F* hRecoEnNMBOsc=new TH1F("hRecoEnNMBOsc","hRecoEnNMBOsc",
03463 4*352,-32,320);
03464 hRecoEnNMBOsc->GetXaxis()->SetTitle("True Energy (GeV)");
03465 hRecoEnNMBOsc->GetXaxis()->CenterTitle();
03466 hRecoEnNMBOsc->GetYaxis()->SetTitle("");
03467 hRecoEnNMBOsc->GetYaxis()->CenterTitle();
03468 //hRecoEnNMBOsc->SetBit(TH1::kCanRebin);
03469 hRecoEnNMBOsc->Sumw2();
03470
03471 TH1F* hRecoEnNMOsc=new TH1F("hRecoEnNMOsc","hRecoEnNMOsc",
03472 4*352,-32,320);
03473 hRecoEnNMOsc->GetXaxis()->SetTitle("True Energy (GeV)");
03474 hRecoEnNMOsc->GetXaxis()->CenterTitle();
03475 hRecoEnNMOsc->GetYaxis()->SetTitle("");
03476 hRecoEnNMOsc->GetYaxis()->CenterTitle();
03477 //hRecoEnNMOsc->SetBit(TH1::kCanRebin);
03478 hRecoEnNMOsc->Sumw2();
03479
03480 //vectors
03481 Int_t entries=static_cast<Int_t>(this->GetEntries());
03482 Int_t startTimeSecs=2000000000;//2 billion
03483 Int_t endTimeSecs=1;
03484 vector<Double_t> vPot;
03485 vPot.reserve(entries);
03486 vector<Double_t> vTime;
03487 vTime.reserve(entries);
03488 vector<Double_t> vPotBad;
03489 vPotBad.reserve(entries/10);
03490 vector<Double_t> vTimeBad;
03491 vTimeBad.reserve(entries/10);
03492
03493 vector<Double_t> vTimeNuMuEvt;
03494 vTimeNuMuEvt.reserve(entries/5);
03495 vector<Double_t> vTimeNuMuBarEvt;
03496 vTimeNuMuBarEvt.reserve(entries/5);
03497
03498 //maps to store evt info
03499 map<Int_t,Double_t> deltaTs;
03500 map<Int_t,Int_t> evtsPerSlc;
03501
03502 //counters
03503 Int_t goodSpillCounter=0;
03504 Int_t badSpillCounter=0;
03505 Float_t totalPot=0;
03506 Float_t totalPotBad=0;
03507 Int_t evtCounter=0;
03508 Int_t evtNotlitime=0;
03509 Int_t evtNotIsLI=0;
03510 Int_t evtInFidVolCounter=0;
03511 Int_t evtWithTrkCounter=0;
03512 Int_t goodBestTrkCounter=0;
03513 Int_t goodTrkPassCounter=0;
03514 Int_t goodRecoEnCounter=0;
03515 Int_t goodUVDiffCounter=0;
03516 Int_t trkInFidVolCounter=0;
03517 Int_t goodFitSigQPCounter=0;
03518 Int_t goodFitProbCounter=0;
03519 Int_t goodFitChi2Counter=0;
03520 Int_t goodDeltaTCounter=0;
03521 Int_t goodEvtsPerSlcCounter=0;
03522 Int_t goodPIDCounter=0;
03523 Int_t goodBeyondTrkEndCounter=0;
03524 Int_t goodShwFractCounter=0;
03525 Int_t nuNQCounter=0;
03526 Int_t nuPQCounter=0;
03527
03528 //string sTxtFilePrefix="nmb"+config.sBeamType;
03529 //ofstream& nmbTxt=*(this->OpenTxtFile(config,
03530 // sTxtFilePrefix.c_str()));
03531
03532 //classes to organise the code in to related functions
03533 const NuCuts cuts;
03534 const NuGeneral general;
03535 const NuPlots plots;
03536 const NuReco reco;
03537 const NuExtraction ext;
03538 const NuBeam beam;
03539
03540 //create these on the heap so that they don't destruct
03541 // - on purpose to avoid a segv on destruction... nice coding!
03542 NuMadAnalysis& mad=*new NuMadAnalysis();
03543 MadDpID& dp=*new MadDpID();
03544 //BeamType::BeamType_t beamType=BeamType::kLE;
03545 BeamType::BeamType_t beamType=static_cast
03546 <BeamType::BeamType_t>(config.beamType);
03547
03551
03552 this->InitialiseLoopVariables();
03553
03554 //for(Int_t entry=0;entry<10000;entry++){
03555 for(Int_t entry=0;entry<this->GetEntries();entry++){
03556
03557 this->SetLoopVariables(entry);
03558
03559 //get reference to NtpStRecord from base class
03560 const NtpStRecord& ntp=(*this->GetNtpStRecord());
03561
03562 const RecCandHeader& rec=ntp.GetHeader();
03563 MAXMSG("NuAnalysis",Msg::kInfo,5)
03564 <<"Found: run="<<rec.GetRun()
03565 <<", subrun="<<rec.GetSubRun()
03566 <<", detector="<<rec.GetVldContext().GetDetector()
03567 <<", simFlag="<<rec.GetVldContext().GetSimFlag()
03568 <<endl;
03569
03570 //write out the detector, simflag, etc
03571 plots.FillGeneralHistos(ntp);
03572
03573 //simple event object to hold important quantities for snarl
03574 NuEvent nuSnarl;
03575
03576 //get the run, snarl, etc info
03577 ext.ExtractGeneralInfo(ntp,nuSnarl);
03578
03579 if (!beam.IsGoodSpillAndFillPot
03580 (this->GetNtpBDLiteRecord(),config,nuSnarl)) {
03581 badSpillCounter++;
03582 totalPotBad+=nuSnarl.pot;
03583 continue;
03584 }
03585 goodSpillCounter++;
03586 totalPot+=nuSnarl.pot;
03587
03588 dp.ChoosePDFs(rec.GetVldContext().GetDetector(),beamType);
03589 mad.SetEntry(&ntp);
03590
03591 set<Int_t> setNuMuBarInTrueFidCC;
03592
03593 VldTimeStamp vldts;
03594 //VldTimeStamp vldts(ev.UnixTime,0);
03595 VldContext vc(rec.GetVldContext().GetDetector(),
03596 rec.GetVldContext().GetSimFlag(),vldts);
03597 //get the ugh
03598 UgliGeomHandle ugh(vc);
03599
03600 TClonesArray& mcTca=(*ntp.mc);
03601 Int_t numInt=mcTca.GetEntries();
03602 MAXMSG("NuAnalysis",Msg::kInfo,10)
03603 <<"Number of entries in NtpMCTruth="
03604 <<mcTca.GetEntries()<<endl;
03605
03606 //simple event object to hold important quantities
03607 NuEvent nu;
03608
03609 //get the run, snarl, etc info
03610 ext.ExtractGeneralInfo(ntp,nu);
03611
03612
03614 //loop over true events
03616 for (Int_t i=0;i<numInt;i++){
03617 const NtpMCTruth& mc=*(dynamic_cast<NtpMCTruth*>(mcTca[i]));
03618
03619 TVector3 xyz(mc.vtxx,mc.vtxy,mc.vtxz);
03620 // calculate the positions in UVZ space
03621 TVector3 uvz=ugh.xyz2uvz(xyz);
03622
03623 //if (!(mc.iaction==1 && mc.inu==-14)) continue;
03624 //remove all NC and non NuMu(Bar) events
03625 if (mc.iaction!=1) continue;
03626 if (abs(mc.inu)!=14) continue;
03627
03628 Bool_t isInFidVol=cuts.IsInFidVol(mc.vtxx,mc.vtxy,mc.vtxz,
03629 uvz.X(),uvz.Y(),0,0,
03630 nu.detector,nu.anaVersion,
03631 nu.releaseType,nu.simFlag);
03632
03633 if (!isInFidVol) continue;
03634 setNuMuBarInTrueFidCC.insert(mc.index);
03635
03636 Double_t oscWeight=general.OscWeight(3e-3,1,fabs(mc.p4neu[3]));
03637
03638 MAXMSG("NuAnalysis",Msg::kInfo,200)
03639 <<"inu="<<mc.inu<<", iaction="<<mc.iaction
03640 <<", E="<<mc.p4neu[3]<<", oscWeight="<<oscWeight<<endl;
03641
03642 if (mc.inu==-14) {
03643 hRecoEnNMBFull->Fill(fabs(mc.p4neu[3]));
03644 hRecoEnNMBOsc->Fill(fabs(mc.p4neu[3]),oscWeight);
03645 }
03646 else if (mc.inu==14) {
03647 hRecoEnNMFull->Fill(fabs(mc.p4neu[3]));
03648 hRecoEnNMOsc->Fill(fabs(mc.p4neu[3]),oscWeight);
03649 }
03650 else {
03651 cout<<"Ahhh, bad inu"<<endl;
03652 }
03653
03654 }
03655
03656 MAXMSG("NuAnalysis",Msg::kInfo,20)
03657 <<"Number of NuMuBar fiducial volume interactions in spill="
03658 <<setNuMuBarInTrueFidCC.size()<<endl;
03659 }//end of for
03660
03664
03665 MSG("NuAnalysis",Msg::kInfo)<<"Finished main loop"<<endl;
03666
03667 //store the number of files added to the chain
03668 Int_t nf=this->GetNumFilesAddedToChain();
03669 TH1F* hRun=dynamic_cast<TH1F*>(gROOT->FindObject("hRun"));
03670 Float_t nr=-1;
03671 if (hRun) nr=hRun->GetEntries();
03672 TH1F* hNumFiles=new TH1F("hNumFiles","hNumFiles",15,-5,10);
03673 hNumFiles->Fill(1,nf);//store as weight, access with GetMaximum
03674 MSG("NuAnalysis",Msg::kInfo)
03675 <<"Files added to chain="<<hNumFiles->GetMaximum()
03676 <<", runs found="<<nr<<endl;
03677
03678 MSG("NuAnalysis",Msg::kInfo)
03679 <<"Found start time and end time: "
03680 <<startTimeSecs<<" -> "<<endTimeSecs<<endl;
03681 general.EpochTo1995(endTimeSecs);
03682 general.EpochTo1995(startTimeSecs);
03683
03684 MSG("NuAnalysis",Msg::kInfo)<<"Filling vs. Time plots..."<<endl;
03685 TH1F* hSpillsVsTime=new TH1F("hSpillsVsTime","hSpillsVsTime",
03686 100,startTimeSecs,endTimeSecs);
03687 general.TH1FFill(hSpillsVsTime,vTime);
03688 general.SetGraphAxis(hSpillsVsTime->GetXaxis(),
03689 startTimeSecs,endTimeSecs);
03690 hSpillsVsTime->GetXaxis()->CenterTitle();
03691 hSpillsVsTime->GetYaxis()->SetTitle("Spills");
03692 hSpillsVsTime->GetYaxis()->CenterTitle();
03693
03694 TH1F* hSpillsBadVsTime=new TH1F("hSpillsBadVsTime","hSpillsBadVsTime",
03695 100,startTimeSecs,endTimeSecs);
03696 general.TH1FFill(hSpillsBadVsTime,vTimeBad);
03697 general.SetGraphAxis(hSpillsBadVsTime->GetXaxis(),
03698 startTimeSecs,endTimeSecs);
03699 hSpillsBadVsTime->GetXaxis()->CenterTitle();
03700 hSpillsBadVsTime->GetYaxis()->SetTitle("Spills");
03701 hSpillsBadVsTime->GetYaxis()->CenterTitle();
03702
03703 TH1F* hNuMuVsTime=new TH1F("hNuMuVsTime","hNuMuVsTime",
03704 100,startTimeSecs,endTimeSecs);
03705 general.TH1FFill(hNuMuVsTime,vTimeNuMuEvt);
03706 general.SetGraphAxis(hNuMuVsTime->GetXaxis(),
03707 startTimeSecs,endTimeSecs);
03708 hNuMuVsTime->GetXaxis()->CenterTitle();
03709 hNuMuVsTime->GetYaxis()->SetTitle("#nu_#mu events");
03710 hNuMuVsTime->GetYaxis()->CenterTitle();
03711
03712 TH1F* hNuMuBarVsTime=new TH1F("hNuMuBarVsTime","hNuMuBarVsTime",
03713 100,startTimeSecs,endTimeSecs);
03714 general.TH1FFill(hNuMuBarVsTime,vTimeNuMuBarEvt);
03715 general.SetGraphAxis(hNuMuBarVsTime->GetXaxis(),
03716 startTimeSecs,endTimeSecs);
03717 hNuMuBarVsTime->GetXaxis()->CenterTitle();
03718 hNuMuBarVsTime->GetYaxis()->SetTitle("#bar{#nu_#mu} events");
03719 hNuMuBarVsTime->GetYaxis()->CenterTitle();
03720
03721 TH1F* hPotVsTime=new TH1F("hPotVsTime","hPotVsTime",
03722 100,startTimeSecs,endTimeSecs);
03723 general.TH1FFill(hPotVsTime,vTime,vPot);
03724 general.SetGraphAxis(hPotVsTime->GetXaxis(),
03725 startTimeSecs,endTimeSecs);
03726 hPotVsTime->GetXaxis()->CenterTitle();
03727 hPotVsTime->GetYaxis()->SetTitle("POT");
03728 hPotVsTime->GetYaxis()->CenterTitle();
03729
03730 TH1F* hPotBadVsTime=new TH1F("hPotBadVsTime","hPotBadVsTime",
03731 100,startTimeSecs,endTimeSecs);
03732 general.TH1FFill(hPotBadVsTime,vTimeBad,vPotBad);
03733 general.SetGraphAxis(hPotBadVsTime->GetXaxis(),
03734 startTimeSecs,endTimeSecs);
03735 hPotBadVsTime->GetXaxis()->CenterTitle();
03736 hPotBadVsTime->GetYaxis()->SetTitle("POT");
03737 hPotBadVsTime->GetYaxis()->CenterTitle();
03738
03739 Float_t totalPotHist=0;
03740 Float_t totalPotBadHist=0;
03741 cuts.CalcTotalPot(totalPotHist,totalPotBadHist);
03742 Float_t pcPotRejected=0;
03743 if (totalPotHist) pcPotRejected=100.*totalPotBadHist/totalPotHist;
03744
03745 //msg was giving pots=412886000000000000.000000... still is for MC!
03746 cout<<"Number of spills ="<<this->GetEntries()<<endl
03747 <<"Number of good spills="<<goodSpillCounter<<endl
03748 <<"Number of bad spills ="<<badSpillCounter<<endl
03749 <<"Sum of good+bad spill="<<badSpillCounter+goodSpillCounter<<endl
03750 <<endl
03751 <<"Total POT good ="<<totalPot*1e12<<endl
03752 <<"Total POT bad ="<<totalPotBad*1e12<<endl
03753 <<"Total POT good (hist)="<<totalPotHist*1e12<<endl
03754 <<"Total POT bad (hist)="<<totalPotBadHist*1e12
03755 <<" ("<<pcPotRejected<<"%)"<<endl;
03756
03757 MSG("NuAnalysis",Msg::kInfo)
03758 <<endl<<"*************************************"<<endl
03759 <<"Total Events ="<<evtCounter<<endl
03760 <<"Evt not litime ="<<evtNotlitime<<endl
03761 <<"Evt not IsLI ="<<evtNotIsLI<<endl
03762 <<"Evts in Fid ="<<evtInFidVolCounter<<endl
03763 <<"Evts w/ Trk ="<<evtWithTrkCounter<<endl
03764 <<"Good Best Trk ="<<goodBestTrkCounter<<endl
03765 <<"Track Pass ="<<goodTrkPassCounter<<endl
03766 <<"Good reco energy="<<goodRecoEnCounter<<endl
03767 <<"Good UVDiff ="<<goodUVDiffCounter<<endl
03768 <<"Trk Vtx in Fid ="<<trkInFidVolCounter<<endl
03769 <<"Good Fit SigQP ="<<goodFitSigQPCounter<<endl
03770 <<"Good Fit Prob ="<<goodFitProbCounter<<endl
03771 <<"Good Fit Chi2 ="<<goodFitChi2Counter<<endl
03772 <<"Good Delta T ="<<goodDeltaTCounter<<endl
03773 <<"Good EvtPerSlc ="<<goodEvtsPerSlcCounter<<endl
03774 <<"Good DP ID ="<<goodPIDCounter<<endl
03775 <<"Good beyond tEnd="<<goodBeyondTrkEndCounter<<endl
03776 <<"Good shw fract ="<<goodShwFractCounter<<endl
03777 <<"*************************************"<<endl;
03778
03779 Float_t pcPQ=0;
03780 if (nuPQCounter+nuNQCounter>0) pcPQ=100.*nuPQCounter/
03781 (nuPQCounter+nuNQCounter);
03782 MSG("NuAnalysis",Msg::kInfo)
03783 <<endl
03784 <<"Neutrinos with NQ="<<nuNQCounter<<endl
03785 <<"Neutrinos with PQ="<<nuPQCounter
03786 <<" ("<<pcPQ<<"%)"<<endl
03787 <<"Sum NQ+PQ ="<<nuNQCounter+nuPQCounter<<endl
03788 <<endl;
03789
03790 MSG("NuAnalysis",Msg::kInfo)
03791 <<" ** Finished NuMuBarAppearance method **"<<endl;
03792 }
|
|
|
Definition at line 2775 of file NuAnalysis.cxx. References NuConfig::beamTypeSntp, DetermineBeamType(), NuConfig::hornCurrent, MAXMSG, NuConfig::sBeamType, NuConfig::sHornCurrent, NuConfig::sTargetPos, and NuConfig::targetPos. 02776 {
02777 //my old version
02778 //if (config.beamTypeSntp==0) config.beamType=BeamType::kUnknown;
02779 //else if (config.beamTypeSntp==1) config.beamType=BeamType::kLE;
02780 //else if (config.beamTypeSntp==2) config.beamType=BeamType::kME;
02781 //else if (config.beamTypeSntp==3) config.beamType=BeamType::kHE;
02782 //else if (config.beamTypeSntp==4) config.beamType=BeamType::kME;
02783 //else if (config.beamTypeSntp==5) config.beamType=BeamType::kHE;
02784
02785 //this doesn't work because the new beam type is target+hornCur
02786 //my new version
02787 //note that the conventions package does not have true ME/HE
02788 //kME and kHE are ambiguiously used for pME and pHE
02789 //if (config.beamTypeSntp==0) config.beamType=BeamType::kUnknown;
02790 //else if (config.beamTypeSntp==1) config.beamType=
02791 // BeamType::kL010z185i;
02792 //else if (config.beamTypeSntp==2) config.beamType=BeamType::kME;
02793 //else if (config.beamTypeSntp==3) config.beamType=BeamType::kHE;
02794 //else if (config.beamTypeSntp==4) config.beamType=
02795 //BeamType::kL100z200i;
02796 //else if (config.beamTypeSntp==5) config.beamType=
02797 // BeamType::kL250z200i;
02798
02799 //my new version
02800 //note: the beamTypeSntp ONLY refers to the target position
02801 //note: the conventions package does not have true ME/HE
02802 //kME and kHE are ambiguiously used for kpME and kpHE
02803 if (config.beamTypeSntp==0) {
02804 config.targetPos=-1;
02805 config.sTargetPos="UknownTargetPos";
02806 }
02807 else if (config.beamTypeSntp==1) {
02808 config.targetPos=10;
02809 config.sTargetPos="010";
02810 }
02811 else if (config.beamTypeSntp==2) {
02812 config.targetPos=100;
02813 config.sTargetPos="100";
02814 }
02815 else if (config.beamTypeSntp==3) {
02816 config.targetPos=250;
02817 config.sTargetPos="250";
02818 }
02819 else if (config.beamTypeSntp==4) {
02820 config.targetPos=100;
02821 config.sTargetPos="100";
02822 }
02823 else if (config.beamTypeSntp==5) {
02824 config.targetPos=250;
02825 config.sTargetPos="250";
02826 }
02827 else {
02828 MAXMSG("NuAnalysis",Msg::kError,10)
02829 <<"Ahhh, don't recognise beamTypeSntp="
02830 <<config.beamTypeSntp<<endl;
02831 assert(false);
02832 }
02833
02834 //get the horn current
02835 //config.hornCurrent=ntpBD.horncur;
02836
02837 //for LE hornCurrent=- (-176?)
02838 //for run 9235 (LE I believe) the horn current is -182.352
02839 //for ME hornCurrent=-191.13
02840 //for HE hornCurrent=-190.651
02841 //the actual horncurrents are out by ~10 kA compared to MC
02842 //the -2 is for safety
02843 //it's 1/3 of the way between the 15 kA separated runs we took
02844 //this may need to be changed if the horn current in data changes
02845 if (fabs(config.hornCurrent)>200-10-2){
02846 config.sHornCurrent="200";
02847 }
02848 else if (fabs(config.hornCurrent)>185-10-2) {
02849 config.sHornCurrent="185";
02850 }
02851 else if (fabs(config.hornCurrent)>170-10-2) {
02852 config.sHornCurrent="170";
02853 }
02854 else if (fabs(config.hornCurrent)>=0) {
02855 config.sHornCurrent="000";
02856 }
02857 else {
02858 MAXMSG("NuAnalysis",Msg::kError,10)
02859 <<"Ahh, no case for hornCurrent="<<config.hornCurrent<<endl;
02860 }
02861
02862 //create the std MC naming scheme name
02863 config.sBeamType="L"+config.sTargetPos+config.sHornCurrent;
02864
02865 //now make the config string
02866 //the -2 is for safety
02867 //if (config.beamType==BeamType::kHE){
02868 //config.sBeamType="L250200";
02869 //}
02870 //else if (config.beamType==BeamType::kME) {
02871 //config.sBeamType="L100200";
02872 //}
02873 //else if (config.beamType==BeamType::kLE) {
02874 //if (fabs(config.hornCurrent)>200-10-2){
02875 // config.sBeamType="L010200";
02876 //}
02877 //else if (fabs(config.hornCurrent)>185-10-2) {
02878 // config.sBeamType="L010185";
02879 //}
02880 //else if (fabs(config.hornCurrent)>170-10-2) {
02881 // config.sBeamType="L010170";
02882 //}
02883 //else {
02884 // MAXMSG("NuAnalysis",Msg::kError,10)
02885 // <<"Ahh, don't know hornCurrent="<<config.hornCurrent<<endl;
02886 //}
02887 //}
02888
02889 //temporary selection for the FD...
02890 //if (rec.GetVldContext().GetDetector()==Detector::kFar &&
02891 //config.beamType!=BeamType::kLE) continue;
02892
02893 //get the beam type based on the info config already holds
02894 this->DetermineBeamType(config);
02895 }
|
|
|
define the analysis (cuts and reco) to use Definition at line 6366 of file NuAnalysis.cxx. References NuConfig::anaVersion, NuCuts::AsString(), NuLibrary::cuts, ReleaseType::GetMCSubVersion(), NuLibrary::Instance(), ReleaseType::IsDaikon(), MAXMSG, NuConfig::mcVersion, MSG, NuUtilities::PrintRelease(), NuConfig::releaseType, NuConfig::reweightVersion, and NuConfig::useGeneratorReweight. Referenced by ChargeSeparationOneSnarl(), and MakeFullDST(). 06367 {
06369
06370 //get an instance of the code library
06371 const NuLibrary& lib=NuLibrary::Instance();
06372
06373 //set the cuts version
06374 config.anaVersion=NuCuts::kFullDST;
06375
06376 //set the reweighting variables
06377 //config.reweightVersion=SKZPWeightCalculator::kBoston;
06378 //config.reweightVersion=SKZPWeightCalculator::kPiMinus;//Cedar/Daikon
06379 if (config.mcVersion==ReleaseType::kData) {
06380 MAXMSG("NuAnalysis",Msg::kInfo,1) << "Found Data, setting reweightVersion to SKZPWeightCalculator::kUnknown" << endl;
06381 config.reweightVersion=SKZPWeightCalculator::kUnknown;
06382 }
06383 else if (!ReleaseType::IsDaikon(config.releaseType)) {
06384 MAXMSG("NuAnalysis",Msg::kWarning,1) << "Don't know what weights to use for non-daikon MC version "
06385 << NuUtilities::PrintRelease(config.releaseType) << " so I will assume DetXs" << endl;
06386 config.reweightVersion=SKZPWeightCalculator::kDetXs;
06387 }
06388 else {
06389 if (ReleaseType::GetMCSubVersion(config.releaseType) <= 4) {
06390 MAXMSG("NuAnalysis",Msg::kInfo,1) << "Found MC version "
06391 << NuUtilities::PrintRelease(config.releaseType)
06392 << " so I will use SKZPWeightCalculator::kDetXs" << endl;
06393 config.reweightVersion=SKZPWeightCalculator::kDetXs;
06394 }
06395 else {
06396 MAXMSG("NuAnalysis",Msg::kInfo,1) << "Found MC version "
06397 << NuUtilities::PrintRelease(config.releaseType)
06398 << " so I will use SKZPWeightCalculator::kDogwood1_Daikon07_v2" << endl;
06399 config.reweightVersion=SKZPWeightCalculator::kDogwood1_Daikon07_v2;
06400 }
06401 }
06402
06403
06404 config.useGeneratorReweight=false;
06405 //config.sGeneratorConfigName="MODBYRS3";
06406 //config.generatorConfigNo=-1;
06407
06408 //flags to switch parts of the code on and off
06409 //can be used to avoid needing various database tables
06410 //config.useDBForDataQuality=false;//default is true
06411 //config.useDBForSpillTiming=false;//default is true
06412 //config.useDBForBeamInfo=false;//default is true
06413 //config.cutOnDataQuality=false;//default is true
06414 //config.cutOnSpillTiming=false;//default is true
06415 //config.cutOnBeamInfo=false;//default is true
06416 //config.calcMajCurv=false;//default is true
06417 //config.calcRoID=false;//default is true
06418
06419 //set the MC version to determine which pdfs to use for data
06420 Int_t mcVersionOveride=ReleaseType::kDaikon;//selects data pdfs
06421 //Int_t mcVersionOveride=ReleaseType::kCarrot;//selects data pdfs
06422
06423 MSG("NuAnalysis",Msg::kInfo)
06424 <<"Setting:"<<endl
06425 <<" anaVersion="
06426 <<lib.cuts.AsString(static_cast<NuCuts::NuAnaVersion_t>
06427 (config.anaVersion))
06428 <<" ("<<config.anaVersion<<")"<<endl
06429 <<" useGeneratorReweight="<<config.useGeneratorReweight<<endl
06430 <<" reweightVersion="<<config.reweightVersion<<endl;
06431
06432 //if MC then the mcVersion will be determined from the file
06433 //override the version to use here (only gets set in the data case)
06434 if (config.mcVersion==ReleaseType::kData) {
06435 MSG("NuAnalysis",Msg::kInfo)
06436 <<"Overiding mcVersion for PDF selection:"<<endl
06437 <<" new mcVersion="<<NuUtilities::PrintRelease(mcVersionOveride)
06438 <<", old mcVersion="<<NuUtilities::PrintRelease(config.mcVersion)
06439 <<endl;
06440 config.mcVersion=mcVersionOveride;
06441 }
06442
06443
06444 }
|
|
||||||||||||||||
|
Definition at line 6308 of file NuAnalysis.cxx. References NuHistos::CalcPOTsFromHistos(), NuLibrary::cnt, NuTime::FillTimeHistos(), NuOutputWriter::Finish(), NuOutputWriter::GetDirectory(), NuLibrary::hist, NuLibrary::Instance(), MSG, NuCounter::PrintFullDST(), and NuCounter::PrintStdhepCounter(). Referenced by ChargeSeparation(), ChargeSeparationOneSnarl(), EndJob(), and MakeFullDST(). 06311 {
06312 //this stores the pointers the first time the function is called
06313 static NuTime& time=*pTime;
06314 static NuOutputWriter& output=*pOutput;
06315 static Bool_t firstTime=true;
06316
06317 if (firstTime) {
06318 MSG("NuPIDInterface",Msg::kInfo)
06319 <<"StoreOrFinishTree: TDirectory for NuOutputWriter is:"<<endl;
06320 if (pOutput) output.GetDirectory()->pwd();
06321 else cout<<"Ahhh, no NuOutputWriter"<<endl;
06322
06323 MSG("NuPIDInterface",Msg::kInfo)
06324 <<"StoreOrFinishTree: gDirectory is:"<<endl;
06325 gDirectory->pwd();
06326 }
06327
06328 //this section runs methods on objects at the end of job
06329 if (finish){
06330 if (!firstTime) {
06331 //get an instance of the code library
06332 const NuLibrary& lib=NuLibrary::Instance();
06333
06334 MSG("NuPIDInterface",Msg::kInfo)
06335 <<"StoreOrFinishTree: gDirectory is:"<<endl;
06336 gDirectory->pwd();
06337 MSG("NuPIDInterface",Msg::kInfo)
06338 <<"After reseting gDirectory to NuOutputWriter location:"<<endl;
06339 gDirectory=output.GetDirectory();
06340 gDirectory->pwd();
06341
06342 //fill time histos
06343 time.FillTimeHistos();
06344
06345 //print out job info
06346 lib.cnt.PrintFullDST();
06347 lib.cnt.PrintStdhepCounter();
06348
06349 lib.hist.CalcPOTsFromHistos();
06350
06351 //close the file and write everything out
06352 output.Finish();
06353 }
06354 else {
06355 MSG("NuAnalysis",Msg::kWarning)
06356 <<"StoreOrFinishTree was not run in store mode"<<endl;
06357 }
06358 }
06359
06360 //no longer first time
06361 firstTime=false;
06362 }
|
1.3.9.1