00001
00002
00003
00004
00005
00006
00008 #include "TFile.h"
00009 #include "Conventions/Detector.h"
00010 #include "NueAna/NueRecord.h"
00011 #include "MessageService/MsgService.h"
00012 #include "MinosObjectMap/MomNavigator.h"
00013 #include "MessageService/MsgService.h"
00014 #include "JobControl/JobCModuleRegistry.h"
00015 #include <fstream>
00016 #include "AnalysisNtuples/ANtpDefaultValue.h"
00017 #include "TClass.h"
00018 #include <string>
00019 #include "MCNNMergeModule.h"
00020 #include "NueAna/NueAnalysisCuts.h"
00021 #include "NueAna/NueAnaTools/NueConvention.h"
00022
00023 const int CALend=110;
00024 const int SM1end=230;
00025 const int SM2end=484;
00026
00027 JOBMODULE(MCNNMergeModule, "MCNNMergeModule",
00028 "Import MCNN info into AnaNue tree");
00029 CVSID("$Id: MCNNMergeModule.cxx,v 1.4 2009/05/24 22:19:53 rbpatter Exp $");
00030
00031
00032 MCNNMergeModule::MCNNMergeModule():
00033 kInputMCNNFile(""), kOkay(1), mcnn_entry(0)
00034 {}
00035
00036
00037
00038 MCNNMergeModule::~MCNNMergeModule()
00039 {}
00040
00041
00042 void MCNNMergeModule::BeginJob()
00043 {
00044
00045 kOkay = kTRUE;
00046 mcnn_entry = 0;
00047
00048 if (kInputMCNNFile != "") {
00049
00050 std::cout << "MCNNMergeModule: Opening MCNN file for merging" << std::endl;
00051 std::cout << "--> FILE = " << kInputMCNNFile.c_str() << std::endl;
00052 _nnreader = new NNReader("nn",true);
00053 Int_t count = _nnreader->Add(kInputMCNNFile.c_str());
00054 if (!count||!_nnreader->GetEntries()) {
00055 std::cout << "--> No valid MCNN info found in file (or file not found)!" << std::endl;
00056 kOkay = kFALSE;
00057 }
00058
00059
00060 _anareader = new NueAnaReader();
00061 _anareader->SetMaxNumBestMatches(kNumBestMatches);
00062
00063
00064
00065 _filler = new MCNNFiller();
00066 _filler->SetBestMatchesToFill(kNumBestMatches);
00067 _filler->SetMCNNpidFile(kPDFFile.c_str());
00068 _filler->Setycut(kYCut);
00069
00070 std::cout << "MCNNMergeModule -- starting up with this configuration:" << std::endl;
00071 std::cout << " NumBestMatches = " << kNumBestMatches << std::endl;
00072 std::cout << " YCut = " << kYCut << std::endl;
00073 std::cout << " PDFFile = " << kPDFFile.c_str() << std::endl;
00074
00075 }
00076 else {
00077 std::cout << "MCNNMergeModule: No MCNN file specified, so no merging will be done." << std::endl;
00078 }
00079
00080 }
00081
00082
00083 JobCResult MCNNMergeModule::Reco(MomNavigator* mom)
00084 {
00085
00086 if (!kOkay) {
00087 std::cout << "MCNNMergeModule has a fatal error." << std::endl;
00088 return JobCResult::kFailed;
00089 }
00090
00091
00092
00093
00094 TObject *obj=0;
00095
00096 vector<NueRecord *> records;
00097
00098 TIter objiter = mom->FragmentIter();
00099 while((obj=objiter.Next())){
00100 NueRecord *nr = dynamic_cast<NueRecord *>(obj);
00101 if(nr){
00102 MSG("MCNNMergeModule",Msg::kDebug)<<"Found a NueRecord in MOM"<<endl;
00103 }
00104 else{
00105 MSG("MCNNMergeModule",Msg::kDebug)<<"Didn't find a NueRecord in MOM"<<endl;
00106 continue;
00107 }
00108
00109
00110 if (kInputMCNNFile != "") {
00111
00112
00113 _anareader->SetNueRecord(nr);
00114 _nnreader->GetEntry(mcnn_entry++);
00115
00116
00117 MSG("MCNNMergeModule",Msg::kDebug) << "--------------" << std::endl;
00118 MSG("MCNNMergeModule",Msg::kDebug) << _anareader->nuerecord->GetHeader().GetRun() << " " << _nnreader->run << std::endl;
00119 MSG("MCNNMergeModule",Msg::kDebug) << _anareader->nuerecord->GetHeader().GetSnarl() << " " << _nnreader->snarl << std::endl;
00120 MSG("MCNNMergeModule",Msg::kDebug) << _anareader->nuerecord->GetHeader().GetEventNo() << " " << _nnreader->evt << std::endl;
00121
00122 if ((_anareader->nuerecord->GetHeader().GetRun() != _nnreader->run )||
00123 (_anareader->nuerecord->GetHeader().GetSnarl() != _nnreader->snarl)||
00124 (_anareader->nuerecord->GetHeader().GetEventNo() != _nnreader->evt )) {
00125 MSG("MCNNMergeModule",Msg::kError) << "MCNNMergeModule: ERROR -- trees not in sync!" << std::endl;
00126 MSG("MCNNMergeModule",Msg::kError) << _anareader->nuerecord->GetHeader().GetRun() << " " << _nnreader->run << std::endl;
00127 MSG("MCNNMergeModule",Msg::kError) << _anareader->nuerecord->GetHeader().GetSnarl() << " " << _nnreader->snarl << std::endl;
00128 MSG("MCNNMergeModule",Msg::kError) << _anareader->nuerecord->GetHeader().GetEventNo() << " " << _nnreader->evt << std::endl;
00129 return JobCResult::kFailed;
00130 }
00131 else {
00132
00133 NueConvention::NueEnergyCorrection(_anareader->nuerecord);
00134
00135 _filler->FillMCNN(_anareader,_nnreader);
00136 }
00137
00138
00139 }
00140
00141 }
00142
00143 return JobCResult::kPassed;
00144 }
00145
00146
00148 void MCNNMergeModule::EndJob()
00149 {
00150
00151
00152
00153 }
00154
00155 const Registry& MCNNMergeModule::DefaultConfig() const
00156 {
00157
00158
00159
00160 MSG("MCNNMergeModule",Msg::kDebug)<<"In MCNNMergeModule::DefaultConfig"<<endl;
00161
00162 static Registry r;
00163
00164
00165 r.UnLockValues();
00166 r.Set("InputMCNNFile", "");
00167 r.Set("NumBestMatches", 50);
00168 r.Set("YCut", 0.9);
00169 r.Set("PDFFile", "${SRT_PRIVATE_CONTEXT}/MCNNAnalysis/macros/files/MCNNpdf_2D_0.5GeVbins_MCNNv2_3.0pe_3.0pelib.root");
00170 r.LockValues();
00171
00172 return r;
00173 }
00174
00175 void MCNNMergeModule::Config(const Registry& r)
00176 {
00177
00178
00179
00180 MSG("MCNNMergeModule",Msg::kDebug)<<"In MCNNMergeModule::Config"<<endl;
00181
00182 const char* tmps;
00183 Int_t tmpi;
00184 Double_t tmpd;
00185 if (r.Get("InputMCNNFile", tmps)) kInputMCNNFile = tmps;
00186 if (r.Get("PDFFile", tmps)) kPDFFile = tmps;
00187 if (r.Get("NumBestMatches", tmpi)) kNumBestMatches = tmpi;
00188 if (r.Get("YCut", tmpd)) kYCut = tmpd;
00189
00190 }
00191
00192
00193