#include <NCExtrapolationModule.h>
Public Member Functions | |
| NCExtrapolationModule () | |
| virtual | ~NCExtrapolationModule () |
| const Registry & | DefaultConfig () const |
| void | Config (const Registry &r) |
| void | Run () |
| void | SetMCExposureForBeam (NCBeam::Info beam, double pot) |
| virtual void | AddEventToExtrapolations (bool fakeDataSet) |
| Add event held in fEventInfo to all extrapolations. | |
Static Public Member Functions | |
| void | AddExtrapolation (NCExtrapolationFactory *e) |
Private Types | |
| typedef std::map< NCBeam::Info, TChain * > | ChainMap |
| typedef std::map< NCBeam::Info, double > | POTMap |
Private Member Functions | |
| TH1 * | CreateSpecialPlot (int k, TString type) const |
| void | PrepareForExtrapolation () |
| void | GetListOfShifts (std::vector< bool * > &useParameters, std::vector< std::vector< double > > &adjustedValues) const |
| void | AddShiftedEventToExtrapolations (NCEventInfo eventInfo, bool useMCAsData, NCType::EFileType fileType, NC::RunUtil::ERunType runType, NCBeam::Info beamInfo) |
| void | AddFilesToChain (ChainMap &chainMap, Detector::Detector_t det, NCType::EFileType fileType, NCType::EDataMC dataMC) |
| Add relevant files for some spectrum to chainMap. | |
| void | ExtrapolateNearToFar () |
| Add the FD events to the extrapolations and run the fit for each one. | |
| void | FillDataQualityPlotsSpecial (std::vector< TH1 * > &dq, bool osc) |
| void | DoMockExperiments () |
| void | SystematicsFromRegistry (bool *systematicsToUse, std::vector< double > &systematicsAdjust) |
| void | ApplySystematicShifts (NC::RunUtil::ERunType runType) |
| double | GetMCScaleFactor (Detector::Detector_t det, NCType::EFileType fileType, NCBeam::Info info) |
| Get the factor to scale the MC by to match the data. Will be zero for beams which have no data. | |
| double | GetScaleFactorFromMaps (POTMap &potData, POTMap &potMC, NCBeam::Info info) |
| Helper for GetMCScaleFactor. | |
| void | SetEventWeight (BeamType::BeamType_t beamType, NC::RunUtil::ERunType runType, bool fakeDataSet) |
| bool | FinalEventCheck () |
| any last checks. | |
| void | SetEnergies () |
| Set reco.nuEnergy and reco.showerEnergy to the appropriate NC or CC variant. | |
| void | DrawDataQualityPlots () |
| void | DrawDataQualityPlotsSpecial () |
| void | CreateExtrapolations (TString extrapolations) |
Static Private Member Functions | |
| std::vector< NCExtrapolationFactory * > & | GetExtrapolationFactories () |
| The various extrapolations that have registered themselves. | |
Private Attributes | |
| NC::OscProb::OscPars * | fTrueOscPars |
| std::vector< TH1 * > | fDQNearMCTotalSpecial |
| TString | fDataMCPath |
| path to uDST for data and MC files | |
| TString | fFileName |
| name of output file | |
| bool | fUseMCAsData |
| use the MC as data for testing purposes | |
| NCType::EOscModel | fOscillationModel |
| model to use in the fit | |
| NCType::EExtraction | fExtractionType |
| the extraction to use | |
| bool | fUseMockData |
| are you using mock data for the data? | |
| std::vector< BeamType::BeamType_t > | fBeamIndex |
| index of beams to use | |
| bool | fUsePIDCustomCut |
| Use custom cut. | |
| double | fPIDCustomCut |
| Custom cut value. | |
| bool | fShiftedBeams |
| If set then AddShiftedEventToExtrapolations is called. | |
| bool | fSimpleShiftedBeams |
| Controls whether to generate a simpler set of shifted beams. | |
| int | fSingleShiftedBeam |
| Controls if only a single shifted beam is made. | |
| bool | fMakeDQPlotsSpecial |
| Ask Alex... | |
| NCEventInfo | fEventInfo |
| std::vector< NCExtrapolation * > | fExtrapolations |
| std::vector< NC::FitMaster * > | fFitMasters |
| TString | fExtrapolationsList |
| A space-separated list of extrapolations to use, from job macro. | |
| TString | fLoadExtrapolationsFile |
| Filename to load extrapolation objects from. Empty string -> no loading. | |
| bool | fIncludeDataFromLoadedExtrapolations |
| If fLoadExtrapolationsFile then load data part of spectrum too. | |
| TString | fSaveExtrapolationsFile |
| Filename to save extrapolation objects to. Empty string -> no saving. | |
| bool | fSingleSpectrum |
| use a single spectrum | |
| std::vector< NC::RunUtil::ERunType > | fRunsToUse |
| define which runs to use | |
| POTMap | fDataPOTNear |
| POTMap | fDataPOTFar |
| POTMap | fMCPOTNear |
| POTMap | fMCPOTFar |
| POTMap | fMCPOTFarTau |
| POTMap | fMCPOTFarElectron |
| int | fNumMockExperiments |
| Zero if fake experiments are not to be carried out (default). | |
| int | fMockExperimentsSeed |
| std::vector< NCEventInfo * > | fFDMCSample |
| NCPOTCounter * | fPOTCount |
| std::vector< Registry * > | fMockFits |
| Registry | fConfig |
Definition at line 61 of file NCExtrapolationModule.h.
|
|
Definition at line 85 of file NCExtrapolationModule.h. Referenced by Run(). |
|
|
Definition at line 86 of file NCExtrapolationModule.h. Referenced by GetMCScaleFactor(). |
|
|
Definition at line 46 of file NCExtrapolationModule.cxx. References NCEventInfo::analysis, NCEventInfo::beam, CreateSpecialPlot(), fDQNearMCTotalSpecial, fEventInfo, fPOTCount, NCEventInfo::header, MSG, NCEventInfo::reco, and NCEventInfo::truth. 00046 : 00047 fTrueOscPars(0), 00048 fNumMockExperiments(0), 00049 fPOTCount(0) 00050 { 00051 MSG("JobC", Msg::kDebug) << "NCExtrapolationModule::Constructor" << endl; 00052 00053 // "Special" means studying systematic shifts. 00054 // These are the TOm selection variables. 00055 for(int k = 3; k < 6; ++k){ 00056 fDQNearMCTotalSpecial.push_back(CreateSpecialPlot(k, "NearMCTotalSpecial")); 00057 } 00058 00059 fEventInfo.header = new ANtpHeaderInfo; 00060 fEventInfo.beam = new ANtpBeamInfo; 00061 fEventInfo.reco = new ANtpRecoInfo; 00062 fEventInfo.analysis = new ANtpAnalysisInfo; 00063 fEventInfo.truth = new ANtpTruthInfoBeam; 00064 00065 fPOTCount = new NCPOTCounter; 00066 }
|
|
|
Definition at line 111 of file NCExtrapolationModule.cxx. References NCEventInfo::analysis, NCEventInfo::beam, fEventInfo, fExtrapolations, fFDMCSample, fFitMasters, fMockFits, NCEventInfo::header, MSG, NCEventInfo::reco, NCEventInfo::reco_nom, and NCEventInfo::truth. 00112 {
00113 MSG("JobC", Msg::kDebug) << "NCExtrapolationModule::Destructor" << endl;
00114
00115 for(unsigned int n = 0; n < fExtrapolations.size(); ++n) delete fExtrapolations[n];
00116 for(unsigned int n = 0; n < fFitMasters.size(); ++n) delete fFitMasters[n];
00117
00118 if(fEventInfo.header) delete fEventInfo.header;
00119 if(fEventInfo.beam) delete fEventInfo.beam;
00120 if(fEventInfo.reco) delete fEventInfo.reco;
00121 if(fEventInfo.reco_nom) delete fEventInfo.reco_nom;
00122 if(fEventInfo.truth) delete fEventInfo.truth;
00123 if(fEventInfo.analysis) delete fEventInfo.analysis;
00124
00125 if(fTrueOscPars) delete fTrueOscPars;
00126
00127 if(fPOTCount) delete fPOTCount;
00128
00129 for(unsigned int n = 0; n < fFDMCSample.size(); ++n){
00130 delete fFDMCSample[n]->header;
00131 delete fFDMCSample[n]->beam;
00132 delete fFDMCSample[n]->reco;
00133 delete fFDMCSample[n]->reco_nom;
00134 delete fFDMCSample[n]->truth;
00135 delete fFDMCSample[n]->analysis;
00136 delete fFDMCSample[n];
00137 }
00138
00139 for(unsigned int n = 0; n < fMockFits.size(); ++n) delete fMockFits[n];
00140 }
|
|
|
Add event held in fEventInfo to all extrapolations. This is the callback used by NC::IEventAdder Warning - as a side-effect may modify the details of the event although we do take care to restore the event weight properly
Definition at line 954 of file NCExtrapolationModule.cxx. References AddShiftedEventToExtrapolations(), NCEventInfo::analysis, NCEventInfo::beam, ANtpBeamInfo::beamType, ANtpHeaderInfo::dataType, NCEventInfo::DeepCopy(), ANtpHeaderInfo::detector, fDQNearMCTotalSpecial, fEventInfo, fExtrapolations, fFDMCSample, FillDataQualityPlotsSpecial(), FinalEventCheck(), NCType::FindFileType(), NC::RunUtil::FindRunType(), fNumMockExperiments, fPIDCustomCut, fUsePIDCustomCut, NCEventInfo::header, ANtpTruthInfo::interactionType, ANtpAnalysisInfo::isCC, ANtpAnalysisInfo::isNC, ANtpTruthInfoBeam::nonOscNuFlavor, NCEventInfo::reco, ANtpAnalysisInfo::separationParameter, ANtpAnalysisInfo::separationParameterCut, SetEnergies(), SetEventWeight(), SimFlag::SimFlag_t, NCEventInfo::truth, and ANtpRecoInfo::weight. Referenced by NC::MockDataAdder::AddEventsToExtrapolations(), NC::RealDataAdder::AddEventsToExtrapolations(), NC::SplitFakeDataAdder::AddEventsToExtrapolations(), and NC::FakeDataAdder::AddEventsToExtrapolations(). 00955 {
00956 // This is pretty much immediately after the event comes off disk. Call
00957 // SetEnergies here, as early as possible, so showerEnergy and trackEnergy
00958 // are set to the right NC/CC variants. This is certainly needed for getting
00959 // systematic shifts right, and maybe other reasons.
00960 SetEnergies();
00961
00962 SimFlag::SimFlag_t sim = SimFlag::SimFlag_t(fEventInfo.header->dataType);
00963
00964 //Use PID custom selection cut if so desired
00965 if(fUsePIDCustomCut &&
00966 TMath::Abs(fPIDCustomCut-fEventInfo.analysis->separationParameterCut) > 1e-3){
00967 fEventInfo.analysis->separationParameterCut = fPIDCustomCut;
00968
00969 fEventInfo.analysis->isNC = int(fEventInfo.analysis->separationParameter
00970 < fPIDCustomCut);
00971 fEventInfo.analysis->isCC = int(fEventInfo.analysis->separationParameter
00972 >= fPIDCustomCut);
00973 }
00974
00975 //check for any extra cuts you may want to apply, eg good shower cut
00976 if(!FinalEventCheck()) return;
00977
00978 //check if the event is from a tau file.
00979 const NCType::EFileType fileType = NCType::FindFileType(fEventInfo.header);
00980 const NC::RunUtil::ERunType runType = NC::RunUtil::FindRunType(fEventInfo.header,
00981 fEventInfo.reco);
00982
00983 if(fileType == NCType::kTauFile ||
00984 fileType == NCType::kElectronFile){
00985 //dont add in NC tau or nue appearance
00986 //events as you cant distinguish flavor
00987 //with NC events. NCEnergyBin wouldnt
00988 //accept the event anyway. also reject
00989 //events from these files that start off as
00990 //nue...just say they dont oscillate as
00991 //they dont contribute much anyway
00992 if(fEventInfo.truth->interactionType == NCType::kNC ||
00993 TMath::Abs(fEventInfo.truth->nonOscNuFlavor) == 12) return;
00994 }
00995 else if(fileType == NCType::kUnknownFile) return;
00996
00997 // Single spectrum fitting
00998 if(fSingleSpectrum){
00999 fEventInfo.analysis->isNC = 0;
01000 fEventInfo.analysis->isCC = 1;
01001 }
01002
01003
01004 if(sim == SimFlag::kData || fileType == NCType::kMockFile)
01005 fEventInfo.truth = 0;
01006
01007 // Mock data should have simflag set to data
01008 if (fileType == NCType::kMockFile)
01009 fEventInfo.header->dataType=SimFlag::kData;
01010
01011 //--------------------------------------------------------------------------------
01012 //put in for testing purposes, should be commented out for real fits
01013 //if(TMath::Abs(fEventInfo.truth->nuFlavor) == 12) continue;
01014 // fEventInfo.analysis->isNC = 0;
01015 // fEventInfo.analysis->isCC = 0;
01016 // if(fEventInfo.truth->interactionType < 1) fEventInfo.analysis->isNC = 1;
01017 // else if(fEventInfo.truth->interactionType > 0) fEventInfo.analysis->isCC = 1;
01018 // fEventInfo.reco->nuEnergy = truthInfo->nuEnergy;
01019 //--------------------------------------------------------------------------------
01020
01021 // TODO - correct if statement?
01022 if(sim == SimFlag::kMC && fakeDataSet &&
01023 fEventInfo.header->detector == Detector::kFar &&
01024 fNumMockExperiments > 0){
01025 NCEventInfo* evt = new NCEventInfo;
01026 evt->DeepCopy(&fEventInfo);
01027
01028 fFDMCSample.push_back(evt);
01029 }
01030
01031 const BeamType::BeamType_t beamType =
01032 (BeamType::BeamType_t)(fEventInfo.beam->beamType);
01033 const NCBeam::Info beamInfo(beamType, runType);
01034 const NCBeam::Info infoAll(beamType, NC::RunUtil::kRunAll);
01035
01036
01037 //add event to each extrapolation
01038 for(unsigned int i = 0; i < fExtrapolations.size(); ++i){
01039 if(sim==SimFlag::kMC){
01040 SetEventWeight(beamType, runType, fakeDataSet);
01041
01042 // If we have MC for this beam but not data, SetEventWeight
01043 // will have set the weight to zero, so don't add it at
01044 // all. This ensures that the MC beams that have events added
01045 // to them are the ones that were selected in the RunsToUse
01046 // registry key *and* have data available
01047 if(fEventInfo.reco->weight!=0){
01048
01049 //NCBeam::Info info=NCBeam::Info(beamType, thisRunType);
01050 fExtrapolations[i]->AddEvent(fEventInfo, fakeDataSet,
01051 fileType, beamInfo);
01052 // Also add it to the RunAll beam
01053 fExtrapolations[i]->AddEvent(fEventInfo, fakeDataSet,
01054 fileType, infoAll);
01055
01056 if(fShiftedBeams){
01057 AddShiftedEventToExtrapolations(fEventInfo, fakeDataSet, fileType,
01058 runType, beamInfo);
01059 AddShiftedEventToExtrapolations(fEventInfo, fakeDataSet, fileType,
01060 runType, infoAll);
01061 }
01062
01063 }// end if non-zero weight
01064 }// end if MC
01065 else{
01066 SetEnergies();
01067 // Data/mock data goes in whatever run it really is...
01068 fExtrapolations[i]->AddEvent(fEventInfo, fakeDataSet,
01069 fileType, beamInfo);
01070 // ...and RunAll
01071 fExtrapolations[i]->AddEvent(fEventInfo, fakeDataSet,
01072 fileType, infoAll);
01073 }
01074 }//end loop over extrapolation objects
01075
01076
01077 if(fMakeDQPlotsSpecial){
01078 if(fEventInfo.header->dataType == int(SimFlag::kMC)){
01079 if(fEventInfo.header->detector == int(Detector::kNear)){
01080 FillDataQualityPlotsSpecial(fDQNearMCTotalSpecial, false);
01081 }
01082 }
01083 }
01084 }
|
|
|
Definition at line 340 of file NCExtrapolationModule.cxx. References NCExtrapolationFactory::GetCodeName(), and GetExtrapolationFactories(). 00341 {
00342 std::vector<NCExtrapolationFactory*>& facts = GetExtrapolationFactories();
00343 for(unsigned int n = 0; n < facts.size(); ++n){
00344 // If this happens it means that extrapolations have got registered
00345 // twice somehow. Check your environment, and rebuild stuff, including
00346 // the macro.
00347 assert(e->GetCodeName() != facts[n]->GetCodeName());
00348 }
00349 facts.push_back(e);
00350 }
|
|
||||||||||||||||||||
|
Add relevant files for some spectrum to chainMap.
Definition at line 499 of file NCExtrapolationModule.cxx. References BeamType::AsString(), det, fDataMCPath, files, NCType::FileTypeAsString(), fPOTCount, NCBeam::Info::GetBeamType(), NCPOTCounter::GetListOfFiles(), and MSG. Referenced by Run(). 00503 {
00504 MSG("NCExtrapolationModule", Msg::kInfo) << "fDataMCPath = "
00505 << fDataMCPath << endl;
00506
00507 for(ChainMap::iterator it=chainMap.begin();
00508 it != chainMap.end();
00509 ++it){
00510
00511 const NCBeam::Info info=it->first;
00512 const TString beamType=BeamType::AsString(info.GetBeamType());
00513
00514 vector<TString> files = fPOTCount->GetListOfFiles(info, fileType,
00515 det, dataMC);
00516
00517 for(unsigned int de = 0; de < files.size(); ++de) {
00518 it->second->Add(fDataMCPath+beamType+"/"+files[de]);
00519 MSG("NCExtrapolationModule", Msg::kInfo)
00520 << "Adding "
00521 << fDataMCPath+beamType
00522 << "/"+files[de] << " to "
00523 << NCType::FileTypeAsString(fileType) << " chain" << endl;
00524
00525 }//end loop over files in directory
00526 }//end loop over map
00527 }
|
|
||||||||||||||||||||||||
|
Shift eventInfo according to all the different variations given by GetListOfShifts and each time add it to all the extrapolations. Definition at line 1157 of file NCExtrapolationModule.cxx. References ANtpHeaderInfo::dataType, NCEventInfo::DeepCopy(), det, ANtpHeaderInfo::detector, Detector::Detector_t, fEventInfo, fExtrapolations, FinalEventCheck(), fSingleShiftedBeam, GetListOfShifts(), GetMCScaleFactor(), NCEventInfo::header, NCEventInfo::reco, SetEnergies(), NCEventInfo::SetEventWeight(), NCBeam::Info::SetSystShifts(), and ANtpRecoInfo::weight. Referenced by AddEventToExtrapolations(). 01162 {
01163 // No point adding/shifting data events
01164 if(eventInfo.header->dataType == NCType::kData || useMCAsData) return;
01165
01166 Detector::Detector_t det = Detector::Detector_t(fEventInfo.header->detector);
01167 // On the assumption that the contents of the registry don't change between
01168 // successive calls to us, then save time by only working out what shifts
01169 // to do once.
01170 static vector<bool*> useParameters;
01171 static vector<vector<double> > adjustedValues;
01172 static bool once = true;
01173 if(once){
01174 once = false;
01175 GetListOfShifts(useParameters, adjustedValues);
01176 }
01177
01178
01179 NC::OscProb::OscPars* noosc = new NC::OscProb::NoOscillations;
01180
01181 for(unsigned int i = 0; i < useParameters.size(); ++i){
01182 if(fSingleShiftedBeam >= 0 && int(i) != fSingleShiftedBeam) continue;
01183
01184 static NCEventInfo backup; // Suspect that construction is expensive
01185
01186 backup.DeepCopy(&eventInfo);
01187
01188 fEventInfo = eventInfo;
01189
01190 beamInfo.SetSystShifts(useParameters[i], &adjustedValues[i][0]);
01191
01192 if(FinalEventCheck()){
01193 for(unsigned int j = 0; j < fExtrapolations.size(); ++j){
01194
01195 // This function applies weight and syst shifts too to the
01196 // object (that it happens to ~ own)
01197 fEventInfo.SetEventWeight(useParameters[i], adjustedValues[i],
01198 noosc, 0, runType,
01199 true, false);
01200 fEventInfo.reco->weight *= GetMCScaleFactor(det, fileType, beamInfo);
01201 // SetEventWeight will (indirectly) have altered nuEnergy and
01202 // showerEnergy, so make sure they're set right
01203 SetEnergies();
01204 fExtrapolations[j]->AddEvent(eventInfo, useMCAsData, fileType, beamInfo);
01205 }
01206 }
01207
01208 eventInfo.DeepCopy(&backup);
01209 } // end for i
01210
01211 delete noosc;
01212 }
|
|
|
Apply systematic shifts to fEventInfo appropriate to when it is being used as fake data Definition at line 729 of file NCExtrapolationModule.cxx. References fEventInfo, fTrueOscPars, NCEventInfo::reco, NCEventInfo::SetEventWeight(), SystematicsFromRegistry(), and ANtpRecoInfo::weight. Referenced by SetEventWeight(). 00730 {
00731 static bool systematicsToUse[NCType::kNumSystematicParameters];
00732 static vector<double> systematicsAdjust;
00733
00734 static bool once = true;
00735 if(once){
00736 once = false;
00737 SystematicsFromRegistry(systematicsToUse, systematicsAdjust);
00738 }
00739
00740 // always use the nue values when finding the event weight because
00741 // the size of the nue contrib is passed in by the macro
00742 fEventInfo.SetEventWeight(systematicsToUse, systematicsAdjust,
00743 fTrueOscPars, 0, runType, true, true);
00744
00745 if(TMath::Abs(fEventInfo.reco->weight) < 5.e-2 &&
00746 fEventInfo.reco->weight < 0.)
00747 fEventInfo.reco->weight = 0.;
00748 }
|
|
|
Definition at line 431 of file NCExtrapolationModule.cxx. References NCType::BeamListFromString(), NCPOTCounter::Config(), NCType::EExtraction, NCType::EOscModel, fBeamIndex, fConfig, fDataMCPath, fExtractionType, fExtrapolationsList, fFileName, fIncludeDataFromLoadedExtrapolations, fLoadExtrapolationsFile, fMakeDQPlotsSpecial, fMockExperimentsSeed, fNumMockExperiments, fOscillationModel, fPIDCustomCut, fPOTCount, fRunsToUse, fSaveExtrapolationsFile, fShiftedBeams, fSimpleShiftedBeams, fSingleShiftedBeam, fSingleSpectrum, fTrueOscPars, fUseMCAsData, fUseMockData, fUsePIDCustomCut, Registry::Get(), gSystem(), and NC::Utility::ParseNumberList(). Referenced by run(). 00432 {
00433 fConfig = r;
00434
00435 int tmpb; // a temp bool.
00436 int tmpi; // a temp int.
00437 double tmpd; // a temp double.
00438 const char* tmps; // a temp string
00439
00440 if (r.Get("DataMCPath", tmps)){
00441 //for some reason the TSystemDirectory constructor can't resolve
00442 //environmental variables, so just take care of it here
00443 TString temp = tmps;
00444 // Assume the form $ENVVAR/path
00445 if(temp.Contains("$")){
00446 int pos = temp.Index("/"); // find the first /
00447 temp.Resize(pos); // and truncate at it
00448 temp.Remove(TString::kLeading, '$'); // drop the $ off the front
00449 fDataMCPath = tmps; // Copy the original string
00450 // and then replace the part that we think is the environment variable
00451 fDataMCPath.Replace(0, pos, gSystem->Getenv(temp));
00452 }
00453 else fDataMCPath = temp;
00454 // Add a trailing slash so that concatenating the path later will work
00455 if(!fDataMCPath.EndsWith("/")) fDataMCPath += "/";
00456 }
00457 if(r.Get("FileName", tmps)) fFileName = tmps;
00458
00459 if(r.Get("OscillationModel", tmpi)) fOscillationModel = NCType::EOscModel(tmpi);
00460 if(r.Get("UseMCAsData", tmpb)) fUseMCAsData = tmpb;
00461 if(r.Get("ExtractionType", tmpi)) fExtractionType = NCType::EExtraction(tmpi);
00462 if(r.Get("SingleSpectrum", tmpb)) fSingleSpectrum = tmpb;
00463 if(r.Get("ExtrapolationsList", tmps)) fExtrapolationsList = tmps;
00464 if(r.Get("UseMockData", tmpb)) fUseMockData = tmpb;
00465 if(r.Get("UsePIDCustomCut", tmpb)) fUsePIDCustomCut = tmpb;
00466 if(r.Get("PIDCustomCut", tmpd)) fPIDCustomCut = tmpd;
00467
00468 if(r.Get("MakeShiftedBeams", tmpb)) fShiftedBeams = tmpb;
00469 if(r.Get("ShiftedBeamsSimpleOnly", tmpb)) fSimpleShiftedBeams = tmpb;
00470 if(r.Get("SingleShiftedBeam", tmpi)) fSingleShiftedBeam = tmpi;
00471
00472 if(r.Get("RunsToUse", tmps)){
00473 fRunsToUse.clear();
00474 vector<int> runs = NC::Utility::ParseNumberList(tmps);
00475 for(unsigned int n = 0; n < runs.size(); ++n)
00476 fRunsToUse.push_back(NC::RunUtil::ERunType(runs[n]));
00477 }
00478
00479 if(r.Get("NumMockExperiments", tmpi)) fNumMockExperiments = tmpi;
00480 if(r.Get("MockExperimentsSeed", tmpi)) fMockExperimentsSeed = tmpi;
00481 if(r.Get("LoadExtrapolationsFile", tmps)) fLoadExtrapolationsFile = tmps;
00482 if(r.Get("IncludeDataFromLoadedExtrapolations", tmpb))
00483 fIncludeDataFromLoadedExtrapolations = tmpb;
00484 if(r.Get("SaveExtrapolationsFile", tmps)) fSaveExtrapolationsFile = tmps;
00485
00486 if(r.Get("MakeDQPlotsSpecial", tmpb)) fMakeDQPlotsSpecial = tmpb;
00487
00488 assert(sizeof(NC::OscProb::OscPars*) == sizeof(int));
00489 if(r.Get("OscPars", tmpi)) fTrueOscPars = (NC::OscProb::OscPars*)(tmpi);
00490
00491 if (r.Get("BeamType", tmps))
00492 fBeamIndex = NCType::BeamListFromString(tmps);
00493
00494 fPOTCount->Config(r, fBeamIndex, fRunsToUse);
00495 }
|
|
|
Takes a space separated string of NCExtrapolation code names and adds the relevant objects to fExtrapolations Definition at line 911 of file NCExtrapolationModule.cxx. References NCExtrapolationFactory::Create(), fExtrapolations, fLoadExtrapolationsFile, NCExtrapolationFactory::GetCodeName(), GetExtrapolationFactories(), MSG, NC::Utility::ParseStringList(), and NCExtrapolation::Reset(). Referenced by Run(). 00912 {
00913 MSG("NCExtrapolationModule", Msg::kInfo) << "Registered extrapolations:\n";
00914
00915 const vector<TString> extrapArgNames = NC::Utility::ParseStringList(extraps);
00916
00917 for(unsigned int n = 0; n < GetExtrapolationFactories().size(); ++n){
00918 NCExtrapolationFactory* ex = GetExtrapolationFactories()[n];
00919 const TString codeName = ex->GetCodeName();
00920
00921 MSG("NCExtrapolationModule", Msg::kInfo) << " " << codeName << " - ";
00922
00923 bool inExtraps = false;
00924 for(unsigned int i = 0; i < extrapArgNames.size(); ++i)
00925 if(extrapArgNames[i] == codeName) inExtraps = true;
00926
00927 if(inExtraps){
00928 if(fLoadExtrapolationsFile != ""){
00929 MSG("NCExtrapolationModule", Msg::kInfo) << "Loading from file\n";
00930 TDirectory* curDir = gDirectory;
00931 TFile f(fLoadExtrapolationsFile);
00932 NCExtrapolation* e = (NCExtrapolation*)f.Get("NCExtrapolation"+codeName);
00933 assert(e);
00934 fExtrapolations.push_back(e);
00935 f.Close();
00936 curDir->cd();
00937 // Restoring data spectra from the file is not generally useful.
00938 if(!fIncludeDataFromLoadedExtrapolations)
00939 e->Reset(true, true, false, false);
00940 }
00941 else{
00942 MSG("NCExtrapolationModule", Msg::kInfo) << "Creating\n";
00943 fExtrapolations.push_back(ex->Create());
00944 } // end if fLoadExtrapolationsFile
00945 }
00946 else{
00947 MSG("NCExtrapolationModule", Msg::kInfo) << "Not creating\n";
00948 } // end if inExtraps
00949 } // end for n
00950 }
|
|
||||||||||||
|
Duplicate sufficient logic from NCDataQualityPlot so that fDQNearMCTotalSpecial can be created - breaking circular dependency with DataQuality Definition at line 75 of file NCExtrapolationModule.cxx. References kDQVars. Referenced by NCExtrapolationModule(). 00076 {
00077 assert(k >= 3 && k < 6);
00078
00079 // Definition of a data quality plot: name, title, binning
00080 struct DQDef
00081 {
00082 // Order of elements is important, this is how we are initialised
00083 TString name;
00084 TString title;
00085 int bins;
00086 double start;
00087 double end;
00088 };
00089
00090 const DQDef kDQVars[6] = {
00091 {"?", "?", -1, -1, -1},
00092 {"?", "?", -1, -1, -1},
00093 {"?", "?", -1, -1, -1},
00094 {"eventLength", "Event Length (planes)", 50, 0, 500},
00095 {"numTracks", "Number of Tracks", 10, 0, 10},
00096 {"trackExtension", "Track Extension (planes)", 50, -30, 20}
00097 };
00098
00099 TH1* ret = new TH1D(kDQVars[k].name+type, "", kDQVars[k].bins, kDQVars[k].start, kDQVars[k].end);
00100
00101 ret->GetXaxis()->SetTitle(kDQVars[k].title);
00102 ret->GetYaxis()->SetTitle("Events");
00103
00104 ret->GetXaxis()->CenterTitle();
00105 ret->GetYaxis()->CenterTitle();
00106
00107 return ret;
00108 }
|
|
|
Definition at line 359 of file NCExtrapolationModule.cxx. References Plot::Format(), GetExtrapolationFactories(), Registry::LockValues(), Registry::Merge(), Registry::Set(), and Registry::UnLockValues(). Referenced by run(). 00360 {
00361 static Registry r;
00362
00363 r.UnLockValues();
00364
00365 r.Set("DataMCPath", "dataFiles/*.root");
00366 r.Set("FarDataPath", "dataFiles/*.root");
00367 r.Set("FileName", "extrapolationFile.root");
00368
00369 r.Set("OscillationModel", NCType::kSterileFraction);
00370 r.Set("UseMCAsData", false);
00371 r.Set("SplitMC", false);
00372 r.Set("SplitMCSeed", -1);
00373 r.Set("ExtractionType", NCType::kNCCCExtractionCuts);
00374 r.Set("SingleSpectrum", false);
00375 r.Set("ExtrapolationsList", "");
00376 r.Set("BeamType", "L010z185i");
00377 r.Set("UseMockData", false);
00378 r.Set("MockDataSet", "F21910001");
00379
00380 TString runsToUse;
00381 for(int n = 0; n <= NC::RunUtil::kMaxRun; ++n)
00382 runsToUse += TString::Format("%d ", n);
00383 r.Set("RunsToUse", runsToUse);
00384
00385 r.Set("OscPars", 0);
00386 r.Set("NumMockExperiments", 0);
00387 r.Set("MockExperimentsSeed", 0);
00388 r.Set("LoadExtrapolationsFile", "");
00389 r.Set("IncludeDataFromLoadedExtrapolations", false);
00390 r.Set("SaveExtrapolationsFile", "");
00391
00392 r.Set("MakeDQPlotsSpecial", false);
00393
00394 // Get the default configurations for all the registered extrapolations
00395 vector<NCExtrapolationFactory*> facts = GetExtrapolationFactories();
00396 for(unsigned int n = 0; n < facts.size(); ++n)
00397 r.Merge(facts[n]->DefaultConfig());
00398
00399 //PID sensitivity study
00400 r.Set("UsePIDCustomCut", false);
00401 r.Set("PIDCustomCut", 0.0);
00402
00403 r.Set("MakeShiftedBeams", false);
00404 r.Set("ShiftedBeamsSimpleOnly", false);
00405 r.Set("SingleShiftedBeam", -1);
00406
00407 //set the defaults for the systematic parameters
00408 //set them all off for fitting and changing mc by default
00409 TString adjust = "Adjust";
00410 TString mcAsData = "ChangeMCAsData";
00411 TString fit = "Fit";
00412 for(int i = 0; i < NCType::kNumSystematicParameters; ++i){
00413 r.Set(NCType::kParams[i].name, false);
00414 r.Set(mcAsData + NCType::kParams[i].name, false);
00415 r.Set(adjust + NCType::kParams[i].name, 0); // measured in sigma
00416 r.Set(fit + NCType::kParams[i].name, false);
00417 }
00418
00419 // Add all the configuration that NCExtrapolation knows how to read
00420 r.Merge(NCExtrapolation::DefaultConfig());
00421
00422 r.Merge(NC::FitMaster::DefaultConfig());
00423
00424 r.Merge(NC::EventAdderDefaultConfig());
00425
00426 r.LockValues();
00427 return r;
00428 }
|
|
|
Definition at line 627 of file NCExtrapolationModule.cxx. References NCEventInfo::beam, ANtpBeamInfo::beamType, fEventInfo, fExtrapolations, fFDMCSample, NCExtrapolation::FindChiSqrForPars(), fMockExperimentsSeed, fMockFits, fTrueOscPars, NC::FitMaster::GetBestFitPointAsRegistry(), MSG, NC::FitMaster::Prepare(), NCEventInfo::reco, reg, NC::FitMaster::Run(), s(), Registry::Set(), NC::FitMaster::SetFixedValuesForMarginalization(), and ANtpRecoInfo::weight. Referenced by Run(). 00628 {
00629 if(fMockExperimentsSeed == 0)
00630 MSG("NCExtrapolationModule", Msg::kWarning) << "DoMockExperiments: random seed not set, using default (0)" << endl;
00631
00632
00633 TRandom3 r;
00634
00635 for(int n = 0; n < fNumMockExperiments; ++n){
00636 // Reset everyone's FD data
00637 for(unsigned int i = 0; i < fExtrapolations.size(); ++i)
00638 fExtrapolations[i]->Reset(false, true, false, false);
00639
00640 r.SetSeed(fMockExperimentsSeed);
00641 r.SetSeed(n+r.Integer(UInt_t(-1)));
00642
00643 for(unsigned int n = 0; n < fFDMCSample.size(); ++n){
00644 NCEventInfo* s = fFDMCSample[n];
00645 for(unsigned int i = 0; i < fExtrapolations.size(); ++i){
00646 double tmp_weight = s->reco->weight;
00647 s->reco->weight = r.Poisson(s->reco->weight);
00648 // Is this way faster?
00649 // s->reco->weight = (s->reco->weight > r.Uniform()) ? 1 : 0;
00650
00651 BeamType::BeamType_t beamType = (BeamType::BeamType_t)(fEventInfo.beam->beamType);
00652 NCBeam::Info beamInfo(beamType, NC::RunUtil::kRunI);
00653
00654 if(s->reco->weight){
00655 fExtrapolations[i]->AddEvent(*s, true,
00656 NCType::kBeamFile, // TODO is kBeamFile right?
00657 beamInfo);
00658 }
00659 s->reco->weight = tmp_weight;
00660 }//end loop over extrapolation objects
00661 }
00662
00663 for(unsigned int i = 0; i < fExtrapolations.size(); ++i){
00664 NCExtrapolation* extrap = fExtrapolations[i];
00665 // extrap->CombineRuns(Detector::kFar);
00666 NC::FitMaster fm(extrap);
00667 Registry r = fConfig;
00668 // Counteract the "preciseParams" scaling normally done in the
00669 // initial fit. This is a bit ugly, would be better to disable the
00670 // scaling instead of fighting it.
00671
00672 // Changed my mind, we need to be fair to the real fit
00673
00674 // r.UnLockValues();
00675 // r.Set("PrecScale", 0.01);
00676
00677 fm.Prepare(r);
00678
00679 fm.SetFixedValuesForMarginalization(fTrueOscPars);
00680 fm.Run(0);
00681
00682 const double trueChi = extrap->FindChiSqrForPars(fTrueOscPars,
00683 NC::SystPars());
00684
00685 // Slight problem here in that we don't distinguish which extrapolation
00686 // this result came from, so there's no way to tell in the output file.
00687 // Isn't a problem if you only run one extrapolation, which is the common
00688 // use case.
00689 Registry* reg = fm.GetBestFitPointAsRegistry();
00690 reg->Set("true_chisq", trueChi);
00691 fMockFits.push_back(reg);
00692 }
00693 }
00694 }
|
|
|
Definition at line 143 of file NCExtrapolationModule.cxx. References DrawDataQualityPlotsSpecial(). Referenced by Run(). 00144 {
00145 // get a pointer to the current directory
00146 // this is one of the output files
00147 TDirectory* saveDir = gDirectory;
00148
00149 //loop over the data quality histograms
00150 //make folders for data/mc and subfolders for near/far
00151 TDirectory* dir = saveDir->mkdir("DataQuality", "DataQuality");
00152 dir->cd();
00153
00154 TDirectory* near = dir->mkdir("NearDetector", "NearDetector");
00155
00156 near->cd();
00157
00158 if(fMakeDQPlotsSpecial) DrawDataQualityPlotsSpecial();
00159
00160 saveDir->cd();
00161 }
|
|
|
Definition at line 164 of file NCExtrapolationModule.cxx. References fDQNearMCTotalSpecial. Referenced by DrawDataQualityPlots(). 00165 {
00166 for(int dist = 0; dist < 3; ++dist){
00167
00168 fDQNearMCTotalSpecial[dist]->Write();
00169
00170
00171 TString canvName = fDQNearMCTotalSpecial[dist]->GetName();
00172 // int index = canvName.Index("MC");
00173 canvName += "Canv";
00174 TCanvas *canv = new TCanvas(canvName, canvName, 150, 10, 900, 600);
00175 TLegend *leg = new TLegend(0.75, 0.75, 0.95, 0.95);
00176 leg->SetBorderSize(0);
00177
00178 fDQNearMCTotalSpecial[dist]->Draw("");
00179 leg->AddEntry(fDQNearMCTotalSpecial[dist], "MC Total", "l");
00180 leg->Draw();
00181
00182 gDirectory->Append(canv);
00183
00184 }//end loop over dists
00185 }
|
|
|
Add the FD events to the extrapolations and run the fit for each one.
Definition at line 596 of file NCExtrapolationModule.cxx. References fConfig, fExtrapolations, fFitMasters, fTrueOscPars, MSG, NC::FitMaster::Prepare(), and NC::FitMaster::Run(). Referenced by Run(). 00597 {
00598 /*
00599 const bool loadingExtrapolations = fLoadExtrapolationsFile != "";
00600
00601 // Ugh - should instead break this function down so we can select parts of it
00602 if(fLoadExtrapolationsFile != ""){
00603 for(unsigned int i = 0; i < fExtrapolations.size(); ++i){
00604 NC::FitMaster* fm = new NC::FitMaster(fExtrapolations[i]);
00605 fm->Prepare(fConfig);
00606 fm->Run(fTrueOscPars);
00607 fFitMasters.push_back(fm);
00608 }
00609 return;
00610 }
00611 */
00612
00613 MSG("NCExtrapolationModule", Msg::kInfo) << "ExtrapolateNearToFar" << endl;
00614
00615 //predict the far detector and make sure to combine any running conditions
00616 for(unsigned int i = 0; i < fExtrapolations.size(); ++i){
00617 fExtrapolations[i]->DoneFilling();
00618 NC::FitMaster* fm = new NC::FitMaster(fExtrapolations[i]);
00619 fm->Prepare(fConfig);
00620 fm->Run(fTrueOscPars);
00621 fFitMasters.push_back(fm);
00622 }
00623 }
|
|
||||||||||||
|
Definition at line 531 of file NCExtrapolationModule.cxx. References ANtpHeaderInfo::detector, ANtpRecoInfo::eventLength, fEventInfo, NC::RunUtil::FindRunType(), NCEventInfo::header, ANtpRecoInfo::inFiducialVolume, ANtpRecoInfo::isSimpleCutsClean, kDQEventLength, kDQNumTracks, kDQTrackExtension, ANtpRecoInfo::numberTracks, NCEventInfo::reco, ANtpRecoInfo::showerEnergyNC, ANtpRecoInfo::trackExtension, ANtpRecoInfo::weight, ANtpRecoInfo::weightRunII, and ANtpRecoInfo::weightRunIII. Referenced by AddEventToExtrapolations(). 00532 {
00533
00534 osc=false;
00535
00536 //dont bother with events outside the fiducial volume
00537 if(fEventInfo.reco->inFiducialVolume < 1) return;
00538
00539 double weight;
00540 switch(NC::RunUtil::FindRunType(fEventInfo.header)){
00541 case NC::RunUtil::kRunI:
00542 weight=fEventInfo.reco->weight;
00543 break;
00544 case NC::RunUtil::kRunII:
00545 weight=fEventInfo.reco->weightRunII;
00546 break;
00547 case NC::RunUtil::kRunIII:
00548 weight=fEventInfo.reco->weightRunIII;
00549 break;
00550 default:
00551 assert(0 && "Unknown runtype");
00552 }
00553
00554 double trackExtension = -1.*fEventInfo.reco->trackExtension;
00555 double showerEnergy = fEventInfo.reco->showerEnergyNC;
00556
00557 if(fEventInfo.header->detector == int(Detector::kNear)
00558 && fEventInfo.reco->isSimpleCutsClean< 1 ) return;
00559
00560 dq[kDQEventLength-3]->Fill(fEventInfo.reco->eventLength, weight);
00561 dq[kDQNumTracks-3]->Fill(fEventInfo.reco->numberTracks, weight);
00562
00563 if(fEventInfo.reco->numberTracks > 0
00564 && fEventInfo.reco->trackExtension > -9000.
00565 && showerEnergy > 0.0)
00566 dq[kDQTrackExtension-3]->Fill(trackExtension, weight);
00567
00568
00569 // cout << "Weight: " << weight << endl
00570 // << "eventLength: " << fEventInfo.reco->eventLength
00571 // << " histo: " << dq[0]->GetBinContent(15) << endl
00572 // << "NumTracks: " << fEventInfo.reco->numberTracks
00573 // << " histo: " << dq[1]->GetBinContent(2) << endl
00574 // << "TrackExtension: " << trackExtension << " " << showerEnergy
00575 // << " histo: " << dq[2]->GetBinContent(30) << endl
00576 // << endl;
00577 }
|
|
|
any last checks.
Definition at line 900 of file NCExtrapolationModule.cxx. References fEventInfo, NCEventInfo::FinalEventCheck(), NCEventInfo::header, and ANtpHeaderInfo::isGoodData. Referenced by AddEventToExtrapolations(), and AddShiftedEventToExtrapolations(). 00901 {
00902 //check any final cuts here
00903 if(!fEventInfo.FinalEventCheck()
00904 && !fSingleSpectrum) return false;
00905
00906 return fEventInfo.header->isGoodData;
00907 }
|
|
|
The various extrapolations that have registered themselves.
Definition at line 1217 of file NCExtrapolationModule.cxx. Referenced by AddExtrapolation(), CreateExtrapolations(), and DefaultConfig(). 01218 {
01219 // Looks like we were falling foul of some variant of the
01220 // "static initialization order fiasco". Apply the workaround from
01221 // http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.13
01222 static std::vector<NCExtrapolationFactory*> facts;
01223 return facts;
01224 }
|
|
||||||||||||
|
Return descriptions for all the different combinations of systematically shifted beam required by AddShiftedEventToExtrapolations Definition at line 1089 of file NCExtrapolationModule.cxx. References fConfig, fSimpleShiftedBeams, NC::CoordinateConverter::IsFit(), and NC::CoordinateConverter::Prepare(). Referenced by AddShiftedEventToExtrapolations(). 01091 {
01092 assert(useParameters.empty() && adjustedValues.empty());
01093
01094 // This allows us to find out if a particular variable is in the fit
01095 NC::CoordinateConverter cc;
01096 cc.Prepare(fConfig, true);
01097
01098 // First work out all the combinations of systematics we need. We use
01099 // every combination of nominal and plus/minus one sigma. ie we should
01100 // add each event 3^n-1 times (we don't do the completely nominal case)
01101
01102 // We start with the nominal arrangement - ie no shifts enabled, and all
01103 // set to their default values
01104 useParameters.resize(1);
01105 adjustedValues.resize(1);
01106
01107 useParameters[0] = new bool[NCType::kNumSystematicParameters];
01108 adjustedValues[0].resize(NCType::kNumSystematicParameters);
01109 for(int n = 0; n < NCType::kNumSystematicParameters; ++n){
01110 useParameters[0][n] = false;
01111 adjustedValues[0][n] = NCType::kParams[n].defaultVal;
01112 }
01113
01114 // For every possible systematic
01115 for(unsigned int syst = 0; syst < NCType::kNumSystematicParameters; ++syst){
01116 // We check if we're fitting for it
01117 if(!cc.IsFit(NCType::EFitParam(syst))) continue;
01118
01119 // and if so, duplicate all the configurations we have so far in two
01120 // more modes, for plus/minus one sigma in this new parameter.
01121
01122 // If the option for simple shifted beams is on then we only base our
01123 // shifting on the nominal beam -> 2n shifted beams
01124 const unsigned int N = fSimpleShiftedBeams ? 1 : useParameters.size();
01125
01126 for(unsigned int n = 0; n < N; ++n){
01127 bool* up = new bool[NCType::kNumSystematicParameters];
01128 for(int i = 0; i < NCType::kNumSystematicParameters; ++i)
01129 up[i] = useParameters[n][i];
01130
01131 vector<double> av = adjustedValues[n];
01132 up[syst] = true;
01133 av[syst] -= NCType::kParams[syst].sigma;
01134 useParameters.push_back(up);
01135 adjustedValues.push_back(av);
01136
01137 // Add twice the shift to cancel out the previous shift the other way
01138
01139 av[syst] += 2*NCType::kParams[syst].sigma;
01140 useParameters.push_back(up);
01141 adjustedValues.push_back(av);
01142 }
01143 }
01144
01145 // Remove the nominal case that we started with
01146 delete[] useParameters[0];
01147 useParameters.erase(useParameters.begin());
01148 adjustedValues.erase(adjustedValues.begin());
01149
01150 // Check that we didn't lose track somewhere
01151 assert(useParameters.size() == adjustedValues.size());
01152 }
|
|
||||||||||||||||
|
Get the factor to scale the MC by to match the data. Will be zero for beams which have no data. The rationale for the default value is to allow a check (in AddEventToExtrapolations) to ensure that the MC beams that have events added to them are the ones that were selected in the RunsToUse registry key *and* have data available Definition at line 789 of file NCExtrapolationModule.cxx. References GetScaleFactorFromMaps(), POTMap, and NCBeam::Info::SetSystShifts(). Referenced by AddShiftedEventToExtrapolations(), and SetEventWeight(). 00792 {
00793 // Choose the appropriate pot maps for this event and scale
00794 // down the event to match the data POT.
00795 POTMap* potData=0;
00796 POTMap* potMC=0;
00797 switch(det){
00798 case Detector::kNear:
00799 potData=&fDataPOTNear;
00800 potMC=&fMCPOTNear;
00801 break;
00802 case Detector::kFar:
00803 potData=&fDataPOTFar;
00804 switch(fileType){
00805 case NCType::kTauFile:
00806 potMC=&fMCPOTFarTau;
00807 break;
00808 case NCType::kElectronFile:
00809 potMC=&fMCPOTFarElectron;
00810 break;
00811 default:
00812 potMC=&fMCPOTFar;
00813 }
00814 break;
00815 default:
00816 assert(0 && "Unknown detector. This shouldn't happen");
00817 }
00818
00819 double tmp=GetScaleFactorFromMaps(*potData, *potMC, info);
00820 if(tmp>0) return tmp;
00821
00822 // ...otherwise try to find the same beam with no syst shifts
00823 const vector<NCType::EFitParam> adj;
00824 const vector<double> vals;
00825 info.SetSystShifts(adj, vals);
00826
00827 return GetScaleFactorFromMaps(*potData, *potMC, info);
00828 }
|
|
||||||||||||||||
|
Helper for GetMCScaleFactor. Gets the MC scale factor for beam info from the maps potData and potMC. Tries the nominal (no systematics) beam if not found, and asserts if there is data for this beam but no MC Definition at line 831 of file NCExtrapolationModule.cxx. References MSG. Referenced by GetMCScaleFactor(). 00834 {
00835 // See if we actually found the beam in both...
00836 const bool foundData = potData.find(info) != potData.end();
00837 const bool foundMC = potMC.find(info) != potMC.end();
00838
00839 // If we have data POTs for this beam, we'd better have some MC to go with it.
00840 if(foundData && !foundMC){
00841 MSG("NCExtrapolationModule", Msg::kError)
00842 << "Found data POT but not MC for "
00843 << info << endl;
00844
00845 MSG("NCExtrapolationModule", Msg::kError) << "Data POTs: " << endl;
00846 for(POTMap::iterator it=potData.begin(); it!=potData.end(); ++it)
00847 MSG("NCExtrapolationModule", Msg::kError)
00848 << it->first << ": " << it->second << endl;
00849
00850 MSG("NCExtrapolationModule", Msg::kError) << "MC POTs: " << endl;
00851 for(POTMap::iterator it=potMC.begin(); it!=potMC.end(); ++it)
00852 MSG("NCExtrapolationModule", Msg::kError)
00853 << it->first << ": " << it->second << endl;
00854 exit(1);
00855 }
00856
00857 // If we have no data, return 0;
00858 if(!foundData) return 0;
00859
00860 // Otherwise return the actual scale factor
00861 return potData.find(info)->second/potMC.find(info)->second;
00862 }
|
|
|
Prepare all extrapolation objects by passing the config Registry to them and adding the near detector events from the chains passed Definition at line 581 of file NCExtrapolationModule.cxx. References fConfig, fExtrapolations, and MSG. Referenced by Run(). 00582 {
00583 MSG("NCExtrapolationModule", Msg::kInfo) << "PrepareForExtrapolation" << endl;
00584 //pass the module registry into the extrapolations to prepare them
00585 for(unsigned int i = 0; i < fExtrapolations.size(); ++i)
00586 fExtrapolations[i]->Prepare(fConfig);
00587 }
|
|
|
Definition at line 188 of file NCExtrapolationModule.cxx. References NC::IEventAdder::AddEvents(), AddFilesToChain(), ChainMap, CreateExtrapolations(), DoMockExperiments(), DrawDataQualityPlots(), NC::EventAdderBuilder(), ExtrapolateNearToFar(), fBeamIndex, fConfig, fDataPOTFar, fDataPOTNear, fEventInfo, fExtrapolations, fExtrapolationsList, fFileName, fFitMasters, fMCPOTFar, fMCPOTFarElectron, fMCPOTFarTau, fMCPOTNear, fMockFits, fNumMockExperiments, fPOTCount, fRunsToUse, fSaveExtrapolationsFile, fTrueOscPars, fUseMCAsData, fUseMockData, MSG, PrepareForExtrapolation(), Registry::Print(), runPeriod, NCEventInfo::SetChainBranches(), and NCPOTCounter::SetPOTValues(). Referenced by run(). 00189 {
00190 fConfig.Print(); // Print out the configuration in use.
00191
00192 assert(fTrueOscPars);
00193
00194 //get the pot for the different beams
00195 const NCType::EFileType fileType = fUseMockData ? NCType::kMockFile : NCType::kBeamFile;
00196
00197 //use following map for FD MC
00198 fPOTCount->SetPOTValues(fDataPOTNear, Detector::kNear,
00199 NCType::kBeamFile, NCType::kData);
00200
00201 fPOTCount->SetPOTValues(fMCPOTNear, Detector::kNear,
00202 NCType::kBeamFile, NCType::kMC);
00203
00204 fPOTCount->SetPOTValues(fDataPOTFar, Detector::kFar,
00205 fileType, NCType::kData);
00206
00207 fPOTCount->SetPOTValues(fMCPOTFar, Detector::kFar,
00208 NCType::kBeamFile, NCType::kMC);
00209
00210 fPOTCount->SetPOTValues(fMCPOTFarTau, Detector::kFar,
00211 NCType::kTauFile, NCType::kMC);
00212
00213 fPOTCount->SetPOTValues(fMCPOTFarElectron, Detector::kFar,
00214 NCType::kElectronFile, NCType::kMC);
00215
00216 MSG("NCExtrapolationModule", Msg::kInfo) << "Done setting POT values" << endl;
00217
00218
00219 ChainMap dataND;
00220 ChainMap mcND;
00221 ChainMap dataFD;
00222 ChainMap mcFD;
00223 ChainMap mcTauFD;
00224 ChainMap mcElectronFD;
00225
00226 // The beamtype/runperiod pairs we're using
00227 vector<NCBeam::Info> infos;
00228
00229 for(unsigned int bidx = 0; bidx < fBeamIndex.size(); ++bidx){
00230 const BeamType::BeamType_t bt = fBeamIndex[bidx];
00231 for(unsigned int runPidx=0; runPidx < fRunsToUse.size(); ++runPidx){
00232 const NC::RunUtil::ERunType runPeriod = fRunsToUse[runPidx];
00233 const NCBeam::Info info(bt, runPeriod);
00234
00235 infos.push_back(info);
00236 }
00237 }
00238
00239 for(unsigned int i=0; i<infos.size(); ++i){
00240 NCBeam::Info info=infos[i];
00241 dataND[info] = new TChain("uDST");
00242 mcND[info] = new TChain("uDST");
00243 dataFD[info] = new TChain("uDST");
00244 mcFD[info] = new TChain("uDST");
00245 mcTauFD[info] = new TChain("uDST");
00246 mcElectronFD[info] = new TChain("uDST");
00247 }
00248
00249 AddFilesToChain(dataND, Detector::kNear, NCType::kBeamFile, NCType::kData);
00250 AddFilesToChain(mcND, Detector::kNear, NCType::kBeamFile, NCType::kMC);
00251 AddFilesToChain(dataFD, Detector::kFar, fileType, NCType::kData);
00252 AddFilesToChain(mcFD, Detector::kFar, NCType::kBeamFile, NCType::kMC);
00253 AddFilesToChain(mcTauFD, Detector::kFar, NCType::kTauFile, NCType::kMC);
00254 AddFilesToChain(mcElectronFD, Detector::kFar, NCType::kElectronFile, NCType::kMC);
00255
00256 const TString ext = NCType::kExtractionNames[fExtractionType];
00257
00258 for(unsigned int i=0; i<infos.size(); ++i){
00259 NCBeam::Info info=infos[i];
00260 fEventInfo.SetChainBranches(dataND[info], ext, fUseMCAsData);
00261 fEventInfo.SetChainBranches(dataFD[info], ext, fUseMCAsData);
00262 fEventInfo.SetChainBranches(mcND[info], ext, true);
00263 fEventInfo.SetChainBranches(mcFD[info], ext, true);
00264 fEventInfo.SetChainBranches(mcTauFD[info], ext, true);
00265 fEventInfo.SetChainBranches(mcElectronFD[info], ext, true);
00266 }
00267
00268
00269 CreateExtrapolations(fExtrapolationsList);
00270
00271 PrepareForExtrapolation();
00272
00273 NC::IEventAdder* eventAdder = NC::EventAdderBuilder(fConfig);
00274
00275 for(unsigned int i=0; i<infos.size(); ++i){
00276 NCBeam::Info info=infos[i];
00277 eventAdder->AddEvents(this, &fEventInfo,
00278 dataND[info], mcND[info],
00279 dataFD[info], mcFD[info], mcTauFD[info], mcElectronFD[info]);
00280 }
00281 delete eventAdder;
00282
00283 ExtrapolateNearToFar();
00284
00285 if(fNumMockExperiments > 0) DoMockExperiments();
00286
00287 //make a file and the trees to go into the file
00288
00289 MSG("NCExtrapolationModule", Msg::kInfo) << "fFileName = " << fFileName << endl;
00290
00291 TFile ntpFile(fFileName, "RECREATE");
00292 ntpFile.cd();
00293
00294 for(unsigned int k = 0; k < fExtrapolations.size(); ++k){
00295 TDirectory* saveDir = gDirectory;
00296 TString plotName = "plots"+fExtrapolations[k]->GetShortName();
00297 TDirectory* newDir = gDirectory->mkdir(plotName, plotName);
00298
00299 // In case we failed to make the new directory then this way
00300 // probably gives us the best chance of rescuing the plots
00301 if(newDir) newDir->cd();
00302 fFitMasters[k]->WriteResources();
00303 if(newDir) newDir->cd();
00304 fExtrapolations[k]->WriteResources(fTrueOscPars);
00305
00306 saveDir->cd();
00307 }
00308
00309 if(!fUseMCAsData && !fUseMockData) DrawDataQualityPlots();
00310
00311 ntpFile.cd();
00312 fConfig.SetName("config_registry");
00313 fConfig.Write();
00314
00315 if(!fMockFits.empty()){
00316 ntpFile.cd();
00317 gDirectory->mkdir("mock_expts")->cd();
00318 for(unsigned int n = 0; n < fMockFits.size(); ++n){
00319 Registry* r = fMockFits[n];
00320 r->SetName(TString::Format("expt_%d", n));
00321 r->Write();
00322 }
00323 ntpFile.cd();
00324 }
00325
00326 MSG("NCExtrapolationModule", Msg::kInfo) << "Writing Final File!" << endl;
00327
00328 ntpFile.Write();
00329 ntpFile.Close();
00330
00331 if(fSaveExtrapolationsFile != ""){
00332 TFile saveFile(fSaveExtrapolationsFile, "RECREATE");
00333 for(unsigned int k = 0; k < fExtrapolations.size(); ++k)
00334 fExtrapolations[k]->Write();
00335 saveFile.Close();
00336 }
00337 }
|
|
|
Set reco.nuEnergy and reco.showerEnergy to the appropriate NC or CC variant.
Definition at line 751 of file NCExtrapolationModule.cxx. References NCEventInfo::analysis, fEventInfo, ANtpAnalysisInfo::isCC, ANtpAnalysisInfo::isNC, ANtpRecoInfo::nuEnergy, ANtpRecoInfo::nuEnergyCC, ANtpRecoInfo::nuEnergyNC, NCEventInfo::reco, NCEventInfo::reco_nom, ANtpRecoInfo::showerEnergy, ANtpRecoInfo::showerEnergyCC, and ANtpRecoInfo::showerEnergyNC. Referenced by AddEventToExtrapolations(), AddShiftedEventToExtrapolations(), and SetEventWeight(). 00752 {
00753 if(fEventInfo.analysis->isCC > 0){
00754 // The RHSs here *should* be reco and not reco_nom, because we
00755 // want the shifted value of (nu|shower)EnergyCC if it has been
00756 // shifted
00757 fEventInfo.reco->nuEnergy = fEventInfo.reco->nuEnergyCC;
00758 fEventInfo.reco->showerEnergy = fEventInfo.reco->showerEnergyCC;
00759
00760 // We need to do this because (inter alia) the calculation of the
00761 // ND cleaning syst relies on showerEnergy being set to the right
00762 // one. We're safe from considerations of whether things have been
00763 // systematically shifted because reco_nom is never systematically
00764 // shifted
00765 fEventInfo.reco_nom->nuEnergy = fEventInfo.reco_nom->nuEnergyCC;
00766 fEventInfo.reco_nom->showerEnergy = fEventInfo.reco_nom->showerEnergyCC;
00767 }
00768 else if(fEventInfo.analysis->isNC > 0){
00769 fEventInfo.reco->nuEnergy = fEventInfo.reco->showerEnergyNC;
00770 fEventInfo.reco->showerEnergy = fEventInfo.reco->showerEnergyNC;
00771
00772 // See comment above
00773 fEventInfo.reco_nom->nuEnergy = fEventInfo.reco_nom->nuEnergyNC;
00774 fEventInfo.reco_nom->showerEnergy = fEventInfo.reco_nom->showerEnergyNC;
00775
00776 // (PAR) This used to be set here, but that breaks FindEventWeight
00777 // for NC events if we're using CC energy for those. But
00778 // NCExtrapolation::DrawBestFitSpectra relies on (shower+track)
00779 // giving the NC or CC energy appropriate to the classification,
00780 // so setting track energy to zero is now done in NCEnergyBin::AddEventToBin
00781 //fEventInfo.reco->muEnergy = 0.;
00782 }
00783
00784 // Energies < 0 occur when there's no shower and we get a default value
00785 if(fEventInfo.reco->showerEnergy < 0.) fEventInfo.reco->showerEnergy = 0.;
00786 }
|
|
||||||||||||||||
|
Set the event weight appropriately for its type and run, including scaling MC to match the data POTs. If fakeDataSet is true, also apply systematic shifts and rescaling appropriate to fake data Definition at line 865 of file NCExtrapolationModule.cxx. References ApplySystematicShifts(), ANtpHeaderInfo::dataType, det, ANtpHeaderInfo::detector, Detector::Detector_t, fEventInfo, NCType::FindFileType(), GetMCScaleFactor(), NCEventInfo::GetSKZPWeight(), NCEventInfo::header, NCEventInfo::reco, SetEnergies(), SimFlag::SimFlag_t, and ANtpRecoInfo::weight. Referenced by AddEventToExtrapolations(). 00868 {
00869 Detector::Detector_t det = Detector::Detector_t(fEventInfo.header->detector);
00870 SimFlag::SimFlag_t sim = SimFlag::SimFlag_t(fEventInfo.header->dataType);
00871 NCType::EFileType fileType = NCType::FindFileType(fEventInfo.header);
00872
00873 // Data events don't get scaled or systematically shifted
00874 if(sim==SimFlag::kData){
00875 SetEnergies();
00876 return;
00877 }
00878 else if(sim==SimFlag::kMC){
00879 if(fakeDataSet){
00880 // This includes SKZP via NCEventInfo::GetEventWeight
00881 ApplySystematicShifts(runType);
00882 }
00883 else{
00884 // Just apply the SKZP weight
00885 fEventInfo.reco->weight=fEventInfo.GetSKZPWeight(runType);
00886 }
00887
00888 const NCBeam::Info info=NCBeam::Info(beamType, runType);
00889 fEventInfo.reco->weight *= GetMCScaleFactor(det, fileType, info);
00890 // ApplySystematicShifts will (indirectly) have altered nuEnergy and
00891 // showerEnergy, so make sure they're set right
00892 SetEnergies();
00893 }
00894 else{
00895 assert(0 && "This shouldn't happen");
00896 }
00897 }
|
|
||||||||||||
|
Definition at line 353 of file NCExtrapolationModule.cxx. References fPOTCount, and NCPOTCounter::SetMCExposureForBeam(). Referenced by set_mc_exposure_for_beam(). 00354 {
00355 fPOTCount->SetMCExposureForBeam(beam, pot);
00356 }
|
|
||||||||||||
|
Definition at line 699 of file NCExtrapolationModule.cxx. References fConfig, Registry::Get(), and MAXMSG. Referenced by ApplySystematicShifts(). 00701 {
00702 //get the parameters to be altered
00703 int tmpb; // a temp bool. See comment under DefaultConfig...
00704 double tmpd; // a temp double.
00705
00706 //set the defaults for the systematic parameters from the config
00707 //set the adjustment to be an actual value, the macro should have
00708 //passed in a number of sigma
00709
00710 for(int i = 0; i < NCType::kNumSystematicParameters; ++i){
00711 if(fConfig.Get("ChangeMCAsData" + NCType::kParams[i].name, tmpb))
00712 systematicsToUse[i] = tmpb;
00713
00714 if(fConfig.Get("Adjust" + NCType::kParams[i].name, tmpd))
00715 systematicsAdjust.push_back(NCType::kParams[i].defaultVal +
00716 tmpd*NCType::kParams[i].sigma);
00717
00718 if(systematicsToUse[i]){
00719 MAXMSG("NCExtrapolationModule", Msg::kInfo, NCType::kNumSystematicParameters)
00720 << "Using MC As Data: "
00721 << NCType::kParams[i].name << " adjusted to "
00722 << systematicsAdjust[i] << endl;
00723 }
00724 }
00725 }
|
|
|
index of beams to use
Definition at line 187 of file NCExtrapolationModule.h. |
|
|
Definition at line 246 of file NCExtrapolationModule.h. Referenced by Config(), ExtrapolateNearToFar(), GetListOfShifts(), PrepareForExtrapolation(), Run(), and SystematicsFromRegistry(). |
|
|
path to uDST for data and MC files
Definition at line 180 of file NCExtrapolationModule.h. Referenced by AddFilesToChain(), and Config(). |
|
|
Definition at line 231 of file NCExtrapolationModule.h. Referenced by Run(). |
|
|
Definition at line 230 of file NCExtrapolationModule.h. Referenced by Run(). |
|
|
Definition at line 178 of file NCExtrapolationModule.h. Referenced by AddEventToExtrapolations(), DrawDataQualityPlotsSpecial(), and NCExtrapolationModule(). |
|
|
Definition at line 208 of file NCExtrapolationModule.h. Referenced by AddEventToExtrapolations(), AddShiftedEventToExtrapolations(), ApplySystematicShifts(), DoMockExperiments(), FillDataQualityPlotsSpecial(), FinalEventCheck(), NCExtrapolationModule(), Run(), SetEnergies(), SetEventWeight(), and ~NCExtrapolationModule(). |
|
|
the extraction to use
Definition at line 185 of file NCExtrapolationModule.h. Referenced by Config(). |
|
|
Definition at line 213 of file NCExtrapolationModule.h. Referenced by AddEventToExtrapolations(), AddShiftedEventToExtrapolations(), CreateExtrapolations(), DoMockExperiments(), ExtrapolateNearToFar(), PrepareForExtrapolation(), Run(), and ~NCExtrapolationModule(). |
|
|
A space-separated list of extrapolations to use, from job macro.
Definition at line 216 of file NCExtrapolationModule.h. |
|
|
Definition at line 240 of file NCExtrapolationModule.h. Referenced by AddEventToExtrapolations(), DoMockExperiments(), and ~NCExtrapolationModule(). |
|
|
name of output file
Definition at line 181 of file NCExtrapolationModule.h. |
|
|
Definition at line 214 of file NCExtrapolationModule.h. Referenced by ExtrapolateNearToFar(), Run(), and ~NCExtrapolationModule(). |
|
|
If fLoadExtrapolationsFile then load data part of spectrum too.
Definition at line 221 of file NCExtrapolationModule.h. Referenced by Config(). |
|
|
Filename to load extrapolation objects from. Empty string -> no loading.
Definition at line 219 of file NCExtrapolationModule.h. Referenced by Config(), and CreateExtrapolations(). |
|
|
Ask Alex...
Definition at line 206 of file NCExtrapolationModule.h. Referenced by Config(). |
|
|
Definition at line 233 of file NCExtrapolationModule.h. Referenced by Run(). |
|
|
Definition at line 235 of file NCExtrapolationModule.h. Referenced by Run(). |
|
|
Definition at line 234 of file NCExtrapolationModule.h. Referenced by Run(). |
|
|
Definition at line 232 of file NCExtrapolationModule.h. Referenced by Run(). |
|
|
Definition at line 239 of file NCExtrapolationModule.h. Referenced by Config(), and DoMockExperiments(). |
|
|
Definition at line 244 of file NCExtrapolationModule.h. Referenced by DoMockExperiments(), Run(), and ~NCExtrapolationModule(). |
|
|
Zero if fake experiments are not to be carried out (default).
Definition at line 238 of file NCExtrapolationModule.h. Referenced by AddEventToExtrapolations(), Config(), and Run(). |
|
|
model to use in the fit
Definition at line 184 of file NCExtrapolationModule.h. Referenced by Config(). |
|
|
Custom cut value.
Definition at line 190 of file NCExtrapolationModule.h. Referenced by AddEventToExtrapolations(), and Config(). |
|
|
Definition at line 242 of file NCExtrapolationModule.h. Referenced by AddFilesToChain(), Config(), NCExtrapolationModule(), Run(), and SetMCExposureForBeam(). |
|
|
define which runs to use
Definition at line 227 of file NCExtrapolationModule.h. |
|
|
Filename to save extrapolation objects to. Empty string -> no saving.
Definition at line 223 of file NCExtrapolationModule.h. |
|
|
If set then AddShiftedEventToExtrapolations is called.
Definition at line 193 of file NCExtrapolationModule.h. Referenced by Config(). |
|
|
Controls whether to generate a simpler set of shifted beams.
If not set then Definition at line 198 of file NCExtrapolationModule.h. Referenced by Config(), and GetListOfShifts(). |
|
|
Controls if only a single shifted beam is made. If set to -1 then no effect. If set then only the shifted beam from GetListOfShifts with this index is created. This is useful for generating a large number of beams in parallel as multiple jobs. Definition at line 204 of file NCExtrapolationModule.h. Referenced by AddShiftedEventToExtrapolations(), and Config(). |
|
|
use a single spectrum
Definition at line 225 of file NCExtrapolationModule.h. Referenced by Config(). |
|
|
Definition at line 176 of file NCExtrapolationModule.h. Referenced by ApplySystematicShifts(), Config(), DoMockExperiments(), ExtrapolateNearToFar(), and Run(). |
|
|
use the MC as data for testing purposes
Definition at line 182 of file NCExtrapolationModule.h. |
|
|
are you using mock data for the data?
Definition at line 186 of file NCExtrapolationModule.h. |
|
|
Use custom cut.
Definition at line 189 of file NCExtrapolationModule.h. Referenced by AddEventToExtrapolations(), and Config(). |
1.3.9.1