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

ValVtxModule.cxx

Go to the documentation of this file.
00001 
00002 // $Id: ValVtxModule.cxx,v 1.4 2008/07/11 19:19:48 boehm Exp $
00003 //
00004 // FILL_IN: [Document your code!!]
00005 //
00006 // vahle@hep.ucl.ac.uk
00008 #include <dirent.h>
00009 #include "TChain.h"
00010 #include "TFile.h"
00011 #include "MessageService/MsgService.h"
00012 #include "MinosObjectMap/MomNavigator.h"
00013 #include "JobControl/JobCModuleRegistry.h" // For JOBMODULE macro
00014 #include "VertexFinder/Module/VtxRecord.h"
00015 #include "VertexFinder/Module/ValVtxModule.h"
00016 #include "HistMan/HistMan.h"
00017 #include "AnalysisNtuples/ANtpDefaultValue.h"
00018                                                                                 
00019 
00020 
00021 CVSID("$Id: ValVtxModule.cxx,v 1.4 2008/07/11 19:19:48 boehm Exp $");
00022 
00023 JOBMODULE(ValVtxModule, "ValVtxModule", "");
00024 //......................................................................
00025 
00026 ValVtxModule::ValVtxModule():
00027    counter(0),
00028    passcounter(0),
00029    passcutcounter(0),
00030    failcounter(0),
00031    writecounter(0)
00032 {}
00033 
00034 //......................................................................
00035 
00036 ValVtxModule::~ValVtxModule()
00037 {
00038 }
00039 
00040 //......................................................................
00041 
00042 JobCResult ValVtxModule::Reco(MomNavigator* mom)
00043 {
00044 //======================================================================
00045 // Reads in sue-style ntuples from mom, calculates a bunch of useful
00046 // nue quantites
00047 //======================================================================
00048    MSG("ValVtxModule",Msg::kDebug)<<"In ValVtxModule::Reco"<<endl;
00049 
00050    if(counter%1000==0){      
00051       MSG("ValVtxModule",Msg::kInfo)<<"On entry "<<counter<<endl;
00052    }
00053    counter++;
00054 
00055    TObject *obj=0;
00056 
00057    TIter objiter = mom->FragmentIter();
00058    while((obj=objiter.Next())){
00059       VtxRecord *vr = static_cast<VtxRecord *>(obj);
00060       if(vr){
00061          MSG("ValVtxModule",Msg::kDebug)<<"Found a VtxRecord in MOM"<<endl;
00062       }
00063       else{
00064          MSG("ValVtxModule",Msg::kError)<<"Didn't find a VtxRecord in MOM"<<endl;
00065          continue;
00066       }
00067 
00068       FillPlots(vr);
00069   }
00070 
00071   return JobCResult::kPassed; // kNoDecision, kFailed, etc.       
00072 }
00073 
00074 //......................................................................
00075 
00076 void ValVtxModule::BeginJob()
00077 {
00078   MSG("ValVtxModule",Msg::kDebug)<<"In ValVtxModule::BeginJob"<<endl;
00079                            
00080   names.clear();
00081   names.push_back("vfZError");   
00082   names.push_back("vfUError");
00083   names.push_back("vfVError");
00084   names.push_back("vfError");
00085   names.push_back("BestZError");
00086   names.push_back("BestUError");
00087   names.push_back("BestVError");
00088   names.push_back("BestError");
00089   names.push_back("relZError");
00090   names.push_back("relUError");
00091   names.push_back("relVError");
00092   names.push_back("relError");
00093                                                             
00094   classes.clear();
00095   classes.push_back("_far_nue");
00096   classes.push_back("_far_numu");
00097   classes.push_back("_far_bnue");
00098   classes.push_back("_far_nutau");
00099   classes.push_back("_far_nc");
00100   classes.push_back("_near_bnue");
00101   classes.push_back("_near_numu");
00102   classes.push_back("_near_nc");
00103   classes.push_back("_near_rock");
00104   classes.push_back("_far_rock");
00105   classes.push_back("_near_cosmic");
00106   classes.push_back("_far_cosmic");
00107   classes.push_back("_unknown");
00108                                                                                 
00109   Int_t nbins = 1000;
00110   Float_t beg = -25.0;
00111   Float_t end = 25.0;                                              
00112   
00113   Int_t nbins2 = 250;
00114   Float_t beg2 = -5.0;
00115   Float_t end2 = 5.0;
00116 
00117 
00118                                 
00119   for(UInt_t i = 0; i < names.size(); i++){
00120      for(UInt_t l = 0; l < classes.size(); l++){
00121            string dirstring = "vtxstats";
00122            HistMan hm2(dirstring.c_str());
00123            TString param = names[i]+classes[l];
00124 //           hm2.Book<TH1F>(param,param,nbins,beg,end);
00125            if(i%4 == 0 || i%4 == 3) hm2.Book<TH1F>(param,param,nbins,beg,end);
00126            else hm2.Book<TH1F>(param,param,nbins,beg2,end2);
00127     }
00128   }
00129 
00130   MSG("ValVtxModule",Msg::kDebug)<<"Created "<<names.size()*classes.size()
00131            <<" histogram entries in BeginJob"<<endl;                
00132 }
00133 
00134 void ValVtxModule::EndJob()
00135 {
00136 
00137    MSG("ValVtxModule",Msg::kInfo)<<"Counter "<<counter
00138                               <<" passcutcounter "<<passcutcounter
00139                               <<" passcounter "<<passcounter
00140                               <<endl;
00141 
00142    TFile* file = new TFile("Results.root", "update");
00143    file->cd();
00144    HistMan hm2("vtxstats");
00145    hm2.WriteOut(*file);
00146 
00147   delete file;
00148 
00149   MSG("ValVtxModule",Msg::kDebug)<<"File output complete"<<endl;
00150                                                                                        
00151 }
00152 
00153 void ValVtxModule::FillPlots(VtxRecord *vr)
00154 {
00155      TString id = MakeIdString(vr);
00156 
00157      vector<Float_t> vals;
00158      vals.push_back(vr->vtxfind.vfErrZ);
00159      vals.push_back(vr->vtxfind.vfErrU);
00160      vals.push_back(vr->vtxfind.vfErrV);
00161      vals.push_back(vr->vtxfind.vfError);
00162      vals.push_back(vr->vtxfind.vfBestErrZ);
00163      vals.push_back(vr->vtxfind.vfBestErrU);
00164      vals.push_back(vr->vtxfind.vfBestErrV);
00165      vals.push_back(vr->vtxfind.vfBestError);
00166      vals.push_back(vr->vtxfind.vfRelErrZ);
00167      vals.push_back(vr->vtxfind.vfRelErrU);
00168      vals.push_back(vr->vtxfind.vfRelErrV);
00169      vals.push_back(vr->vtxfind.vfRelError);
00170 
00171      HistMan hm2("vtxstats");
00172 
00173      for(unsigned int i = 0; i < vals.size(); i++) {
00174         if(!ANtpDefVal::IsDefault(vals[i])){
00175              TString hname = names[i]+id;
00176              TH1F* hist = hm2.Get<TH1F>(hname);
00177              hist->Fill(vals[i], 1.0);
00178         }
00179      }
00180      MSG("ValVtxModule",Msg::kDebug)<<"Done filling Histograms"<<endl;
00181 }
00182 
00183 TString ValVtxModule::MakeIdString(VtxRecord *vr)
00184 {
00185   Detector::Detector_t d = vr->GetHeader().GetVldContext().GetDetector();
00186                                                                                 
00187   TString det, dm;
00188   TString type;
00189                                                                                 
00190   if(d==Detector::kFar){
00191     det = "_far";
00192   }
00193   else if(d==Detector::kNear){
00194     det = "_near";
00195   }
00196   else{
00197     return "_unknown";
00198   }
00199                                                                                 
00200   if(vr->mctrue.fNueClass == 0){type = "nc";}
00201   else if(vr->mctrue.fNueClass == 1){type = "numu";}
00202   else if(vr->mctrue.fNueClass == 2){type = "nue";}
00203   else if(vr->mctrue.fNueClass == 3){type = "nutau";}
00204   else if(vr->mctrue.fNueClass == 4){type = "bnue";}
00205   else { return "_unknown";}
00206 
00207   if(vr->mctrue.nuVtxZ < 0 && vr->mctrue.fNueClass == 1)  
00208        type = "rock";
00209 
00210   TString id = det+"_" + type;
00211 
00212   return id;
00213 }

Generated on Mon Feb 15 11:07:50 2010 for loon by  doxygen 1.3.9.1