Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

MCNNMergeModule.cxx

Go to the documentation of this file.
00001 
00002 //
00003 // Module to put MCNN info into tree (from MCNN file format)
00004 //
00005 // template from boehm@physics.harvard.edu
00006 // filled in by rbpatter@caltech.edu
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" // For JOBMODULE macro
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     // initialize Pedro's NueAnaReader object
00060     _anareader = new NueAnaReader();
00061     _anareader->SetMaxNumBestMatches(kNumBestMatches);
00062 
00063     // initialize MCNNFiller object ...
00064     // ... these should become config options
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   // okay?
00086   if (!kOkay) {
00087     std::cout << "MCNNMergeModule has a fatal error." << std::endl;
00088     return JobCResult::kFailed;
00089   }
00090 
00091   //get all NueRecords from mom 
00092   //may have more than one per go since mom reads in a snarl's worth of data
00093   //so, this is a little more complicated than just asking for a NueRecord
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     // do it...
00110     if (kInputMCNNFile != "") {
00111 
00112       // Set the NueRecord object in _anareader object
00113       _anareader->SetNueRecord(nr);
00114       _nnreader->GetEntry(mcnn_entry++);
00115 
00116       // check that things are lined up
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         // MCNN needs a calibrated energy in the NueRecord...
00133         NueConvention::NueEnergyCorrection(_anareader->nuerecord);
00134         // Fill the MCNN info!
00135         _filler->FillMCNN(_anareader,_nnreader);
00136       }
00137           
00138 
00139     }
00140     
00141   }
00142 
00143   return JobCResult::kPassed; // kNoDecision, kFailed, etc.
00144 }
00145 
00146 
00148 void MCNNMergeModule::EndJob()
00149 {
00150   // Deleting these caused seg fault.  Whatever.  Just let the job end, and there'll be no problem.
00151   //delete _nnreader;
00152   //delete _anareader;
00153 }
00154 
00155 const Registry& MCNNMergeModule::DefaultConfig() const
00156 {
00157 //======================================================================
00158 // Supply the default configuration for the module
00159 //======================================================================
00160    MSG("MCNNMergeModule",Msg::kDebug)<<"In MCNNMergeModule::DefaultConfig"<<endl;
00161 
00162   static Registry r;
00163  
00164   // Set values in configuration
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 // Configure the module given the Registry r
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 

Generated on Mon Feb 15 11:06:58 2010 for loon by  doxygen 1.3.9.1