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

NCEnergyBin.cxx

Go to the documentation of this file.
00001 
00002 //$Id: NCEnergyBin.cxx,v 1.41 2009/08/10 17:56:47 bckhouse Exp $
00003 //
00004 //NCEnergyBin.cxx
00005 //
00006 //B. Rebel 3/2005
00008 
00009 #include "NCUtils/Extrapolation/NCEnergyBin.h"
00010 #include "AnalysisNtuples/ANtpRecoInfo.h"
00011 #include "AnalysisNtuples/ANtpTruthInfoBeam.h"
00012 #include "MessageService/MsgService.h"
00013 #include "TMath.h"
00014 
00015 #include <cassert>
00016 
00017 CVSID("$Id: NCEnergyBin.cxx,v 1.41 2009/08/10 17:56:47 bckhouse Exp $");
00018 
00019 //-------------------------------------------------------------------
00020 NCEnergyBin::NCEnergyBin(double binCenter, double binWidth,
00021                          NCType::EEventType nccc) :
00022   fSignal(0.),
00023   fBinCenter(binCenter),
00024   fBinWidth(binWidth),
00025   fBinType(nccc)
00026 {
00027   fNCBin = (nccc == NCType::kNC);
00028 
00029   MSG("NCEnergyBin", Msg::kDebug) << "NCEnergyBin::Constructor" << endl;
00030 }
00031 
00032 //----------------------------------------------------------------------
00033 void NCEnergyBin::AddEventToBin(const ANtpRecoInfo* recoInfo,
00034                                 const ANtpTruthInfoBeam* truthInfo,
00035                                 NCType::EFileType fileType)
00036 {
00037   const double weight = recoInfo->weight;
00038   // (PAR) We set track energy to zero for NC selected events, because
00039   // the total energy returned elsewhere is the track+shower.
00040   double trackEnergy=fNCBin ? 0 : recoInfo->muEnergy;
00041 
00042   if(!truthInfo){
00043     // data is easy...
00044     fSignal += weight;
00045     fDataEnergies.push_back(recoInfo->nuEnergy);
00046     fDataWeights.push_back(weight);
00047 
00048     return;
00049   }
00050 
00051   const bool electron = TMath::Abs(truthInfo->nuFlavor) == 12;
00052 
00053   //see if this is background event - either NC for CC bins or
00054   //nu_mu CC for NC bins
00055   if(fileType == NCType::kBeamFile && !electron &&
00056      ((fNCBin && truthInfo->interactionType == NCType::kCC) ||
00057       (!fNCBin && truthInfo->interactionType == NCType::kNC))){
00058     fMCBeamWeightBG.push_back(weight);
00059     fMCRecoShowerEBG.push_back(recoInfo->showerEnergy);
00060     fMCRecoMuonEBG.push_back(trackEnergy);
00061     fMCFlavorBG.push_back(truthInfo->nuFlavor);
00062     fMCEnergyBG.push_back(truthInfo->nuEnergy);
00063     return;
00064   }
00065 
00066   if(fileType == NCType::kTauFile &&
00067      truthInfo->interactionType == NCType::kCC){
00068     fMCBeamWeightNuTau.push_back(weight);
00069     fMCRecoShowerENuTau.push_back(recoInfo->showerEnergy);
00070     fMCRecoMuonENuTau.push_back(trackEnergy);
00071     fMCFlavorNuTau.push_back(truthInfo->nuFlavor);
00072     fMCEnergyNuTau.push_back(truthInfo->nuEnergy);
00073     return;
00074   }
00075 
00076   if(electron &&
00077      fileType == NCType::kBeamFile){
00078     fMCBeamWeightBeamNuE.push_back(weight);
00079     fMCRecoShowerEBeamNuE.push_back(recoInfo->showerEnergy);
00080     fMCRecoMuonEBeamNuE.push_back(trackEnergy);
00081     fMCFlavorBeamNuE.push_back(truthInfo->nuFlavor);
00082     fMCEnergyBeamNuE.push_back(truthInfo->nuEnergy);
00083     return;
00084   }
00085 
00086   if(electron &&
00087      fileType == NCType::kElectronFile &&
00088      truthInfo->interactionType == NCType::kCC){
00089     fMCBeamWeightOscNuE.push_back(weight);
00090     fMCRecoShowerEOscNuE.push_back(recoInfo->showerEnergy);
00091     fMCRecoMuonEOscNuE.push_back(trackEnergy);
00092     fMCFlavorOscNuE.push_back(truthInfo->nuFlavor);
00093     fMCEnergyOscNuE.push_back(truthInfo->nuEnergy);
00094     return;
00095   }
00096 
00097   fMCBeamWeight.push_back(weight);
00098   fMCRecoShowerE.push_back(recoInfo->showerEnergy);
00099   fMCRecoMuonE.push_back(trackEnergy);
00100   fMCFlavor.push_back(truthInfo->nuFlavor);
00101   fMCEnergy.push_back(truthInfo->nuEnergy);
00102 }
00103 
00104 //----------------------------------------------------------------------
00105 int NCEnergyBin::GetDataVectorSize() const
00106 {
00107   return int(fDataEnergies.size());
00108 }
00109 
00110 //----------------------------------------------------------------------
00111 void NCEnergyBin::GetDataInformation(double &energy, double &weight, int eventNum) const
00112 {
00113   assert(eventNum < int(fDataEnergies.size()));
00114 
00115   energy = fDataEnergies[eventNum];
00116   weight = fDataWeights[eventNum];
00117 }
00118 
00119 //----------------------------------------------------------------------
00120 double NCEnergyBin::GetSignal() const
00121 {
00122   return fSignal;
00123 }
00124 
00125 //----------------------------------------------------------------------
00126 double NCEnergyBin::GetBinCentralValue() const
00127 {
00128   return fBinCenter;
00129 }
00130 
00131 //----------------------------------------------------------------------
00132 double NCEnergyBin::GetBinWidth() const
00133 {
00134   return fBinWidth;
00135 }
00136 
00137 //----------------------------------------------------------------------
00138 int NCEnergyBin::GetBinType() const
00139 {
00140   return fBinType;
00141 }
00142 
00143 //----------------------------------------------------------------------
00144 void NCEnergyBin::SetSignal(double signal)
00145 {
00146   fSignal = signal;
00147 }
00148 
00149 //----------------------------------------------------------------------
00150 int NCEnergyBin::GetMCSignalVectorSize() const
00151 {
00152   return int(fMCBeamWeight.size());
00153 }
00154 
00155 //----------------------------------------------------------------------
00156 void NCEnergyBin::GetMCInformation(double &trueEnergy,
00157                                    double &recoShowerE,
00158                                    double &recoMuonE,
00159                                    double &weight,
00160                                    int    &flavor,
00161                                    int    eventNum) const
00162 {
00163   assert(eventNum < int(fMCEnergy.size()));
00164 
00165   trueEnergy = fMCEnergy[eventNum];
00166   recoShowerE = fMCRecoShowerE[eventNum];
00167   recoMuonE = fMCRecoMuonE[eventNum];
00168   weight = fMCBeamWeight[eventNum];
00169   flavor = fMCFlavor[eventNum];
00170 }
00171 
00172 //----------------------------------------------------------------------
00173 int NCEnergyBin::GetMCBackgroundVectorSize() const
00174 {
00175   return int(fMCBeamWeightBG.size());
00176 }
00177 
00178 //----------------------------------------------------------------------
00179 void NCEnergyBin::GetMCBackgroundInformation(double &trueEnergy,
00180                                              double &recoShowerE,
00181                                              double &recoMuonE,
00182                                              double &weight,
00183                                              int    &flavor,
00184                                              int    eventNum) const
00185 {
00186 
00187   assert(eventNum < int(fMCEnergyBG.size()));
00188 
00189   trueEnergy = fMCEnergyBG[eventNum];
00190   recoShowerE = fMCRecoShowerEBG[eventNum];
00191   recoMuonE = fMCRecoMuonEBG[eventNum];
00192   weight = fMCBeamWeightBG[eventNum];
00193   flavor = fMCFlavorBG[eventNum];
00194 }
00195 
00196 //----------------------------------------------------------------------
00197 int NCEnergyBin::GetMCNuTauVectorSize() const
00198 {
00199   return int(fMCBeamWeightNuTau.size());
00200 }
00201 
00202 //----------------------------------------------------------------------
00203 void NCEnergyBin::GetMCNuTauInformation(double &trueEnergy,
00204                                       double &recoShowerE,
00205                                       double &recoMuonE,
00206                                       double &weight,
00207                                       int    &flavor,
00208                                       int    eventNum) const
00209 {
00210 
00211   assert(eventNum < int(fMCEnergyNuTau.size()));
00212 
00213   trueEnergy = fMCEnergyNuTau[eventNum];
00214   recoShowerE = fMCRecoShowerENuTau[eventNum];
00215   recoMuonE = fMCRecoMuonENuTau[eventNum];
00216   weight = fMCBeamWeightNuTau[eventNum];
00217   flavor = fMCFlavorNuTau[eventNum];
00218 }
00219 
00220 //----------------------------------------------------------------------
00221 int NCEnergyBin::GetMCOscNuEVectorSize() const
00222 {
00223   return int(fMCBeamWeightOscNuE.size());
00224 }
00225 
00226 //----------------------------------------------------------------------
00227 void NCEnergyBin::GetMCOscNuEInformation(double &trueEnergy,
00228                                          double &recoShowerE,
00229                                          double &recoMuonE,
00230                                          double &weight,
00231                                          int    &flavor,
00232                                          int    eventNum) const
00233 {
00234   assert(eventNum < int(fMCEnergyOscNuE.size()));
00235 
00236   trueEnergy = fMCEnergyOscNuE[eventNum];
00237   recoShowerE = fMCRecoShowerEOscNuE[eventNum];
00238   recoMuonE = fMCRecoMuonEOscNuE[eventNum];
00239   weight = fMCBeamWeightOscNuE[eventNum];
00240   flavor = fMCFlavorOscNuE[eventNum];
00241 }
00242 
00243 //----------------------------------------------------------------------
00244 int NCEnergyBin::GetMCBeamNuEVectorSize() const
00245 {
00246   return int(fMCBeamWeightBeamNuE.size());
00247 }
00248 
00249 //----------------------------------------------------------------------
00250 void NCEnergyBin::GetMCBeamNuEInformation(double &trueEnergy,
00251                                           double &recoShowerE,
00252                                           double &recoMuonE,
00253                                           double &weight,
00254                                           int    &flavor,
00255                                           int    eventNum) const
00256 {
00257   assert(eventNum < int(fMCEnergyBeamNuE.size()));
00258 
00259   trueEnergy = fMCEnergyBeamNuE[eventNum];
00260   recoShowerE = fMCRecoShowerEBeamNuE[eventNum];
00261   recoMuonE = fMCRecoMuonEBeamNuE[eventNum];
00262   weight = fMCBeamWeightBeamNuE[eventNum];
00263   flavor = fMCFlavorBeamNuE[eventNum];
00264 }
00265 
00266 //----------------------------------------------------------------------
00267 void NCEnergyBin::Add(NCEnergyBin *bin)
00268 {
00269 
00270   //make sure you are adding the correct bin to this one
00271   if(bin->GetBinType() == fBinType
00272      && bin->GetBinCentralValue() == fBinCenter){
00273 
00274     double energy = 0.;
00275     double weight = 0.;
00276     double recoShowerE = 0.;
00277     double recoMuonE = 0.;
00278     int flavor = 0;
00279 
00280     int size = bin->GetDataVectorSize();
00281     for(int i = 0; i < size; ++i){
00282       bin->GetDataInformation(energy, weight, i);
00283       fDataEnergies.push_back(energy);
00284       fDataWeights.push_back(weight);
00285       fSignal += weight;
00286     }//end data
00287 
00288     size = bin->GetMCSignalVectorSize();
00289     for(int j = 0; j < size; ++j){
00290       bin->GetMCInformation(energy, recoShowerE, recoMuonE, weight, flavor, j);
00291       fMCBeamWeight.push_back(weight);
00292       fMCRecoShowerE.push_back(recoShowerE);
00293       fMCRecoMuonE.push_back(recoMuonE);
00294       fMCFlavor.push_back(flavor);
00295       fMCEnergy.push_back(energy);
00296 
00297     }//end signal
00298 
00299     size = bin->GetMCBackgroundVectorSize();
00300     for(int j = 0; j < size; ++j){
00301       bin->GetMCBackgroundInformation(energy, recoShowerE, recoMuonE, weight, flavor, j);
00302       fMCBeamWeightBG.push_back(weight);
00303       fMCRecoShowerEBG.push_back(recoShowerE);
00304       fMCRecoMuonEBG.push_back(recoMuonE);
00305       fMCFlavorBG.push_back(flavor);
00306       fMCEnergyBG.push_back(energy);
00307 
00308     }//end background
00309 
00310     size = bin->GetMCNuTauVectorSize();
00311     for(int j = 0; j < size; ++j){
00312       bin->GetMCNuTauInformation(energy, recoShowerE, recoMuonE, weight, flavor, j);
00313       fMCBeamWeightNuTau.push_back(weight);
00314       fMCRecoShowerENuTau.push_back(recoShowerE);
00315       fMCRecoMuonENuTau.push_back(recoMuonE);
00316       fMCFlavorNuTau.push_back(flavor);
00317       fMCEnergyNuTau.push_back(energy);
00318     }//end taus
00319 
00320     size = bin->GetMCOscNuEVectorSize();
00321     for(int j = 0; j < size; ++j){
00322       bin->GetMCOscNuEInformation(energy, recoShowerE, recoMuonE, weight, flavor, j);
00323       fMCBeamWeightOscNuE.push_back(weight);
00324       fMCRecoShowerEOscNuE.push_back(recoShowerE);
00325       fMCRecoMuonEOscNuE.push_back(recoMuonE);
00326       fMCFlavorOscNuE.push_back(flavor);
00327       fMCEnergyOscNuE.push_back(energy);
00328     }//end electrons
00329 
00330     size = bin->GetMCBeamNuEVectorSize();
00331     for(int j = 0; j < size; ++j){
00332       bin->GetMCBeamNuEInformation(energy, recoShowerE, recoMuonE, weight, flavor, j);
00333       fMCBeamWeightBeamNuE.push_back(weight);
00334       fMCRecoShowerEBeamNuE.push_back(recoShowerE);
00335       fMCRecoMuonEBeamNuE.push_back(recoMuonE);
00336       fMCFlavorBeamNuE.push_back(flavor);
00337       fMCEnergyBeamNuE.push_back(energy);
00338     }//end electrons
00339 
00340   }
00341   else
00342     MSG("NCEnergyBin", Msg::kWarning) << "trying to add incompatible bins "
00343                                       << " " << fBinType << "/" << bin->GetBinType()
00344                                       << " " << fBinCenter << "/" << bin->GetBinCentralValue()
00345                                       << endl;
00346 }
00347 
00348 
00350 template<class T> void ZeroVector(vector<T>& vec)
00351 {
00352   for(unsigned int n = 0; n < vec.size(); ++n) vec[n] = 0;
00353 }
00354 
00355 
00356 void NCEnergyBin::Reset(bool data, bool mc)
00357 {
00358   // TODO - I'm by no means sure this is the right set of things to reset
00359 
00360   if(data){
00361     fSignal = 0;
00362 
00363     ZeroVector(fDataEnergies);
00364     ZeroVector(fDataWeights);
00365   }
00366 
00367   if(mc){
00368     ZeroVector(fMCEnergy);
00369     ZeroVector(fMCEnergyBG);
00370     ZeroVector(fMCEnergyNuTau);
00371     ZeroVector(fMCEnergyOscNuE);
00372     ZeroVector(fMCEnergyBeamNuE);
00373     ZeroVector(fMCBeamWeight);
00374     ZeroVector(fMCBeamWeightBG);
00375     ZeroVector(fMCBeamWeightNuTau);
00376     ZeroVector(fMCBeamWeightOscNuE);
00377     ZeroVector(fMCBeamWeightBeamNuE);
00378     ZeroVector(fMCRecoShowerE);
00379     ZeroVector(fMCRecoMuonE);
00380     ZeroVector(fMCFlavor);
00381     ZeroVector(fMCRecoShowerEBG);
00382     ZeroVector(fMCRecoMuonEBG);
00383     ZeroVector(fMCFlavorBG);
00384     ZeroVector(fMCRecoShowerENuTau);
00385     ZeroVector(fMCRecoMuonENuTau);
00386     ZeroVector(fMCFlavorNuTau);
00387     ZeroVector(fMCRecoShowerEOscNuE);
00388     ZeroVector(fMCRecoMuonEOscNuE);
00389     ZeroVector(fMCFlavorOscNuE);
00390     ZeroVector(fMCRecoShowerEBeamNuE);
00391     ZeroVector(fMCRecoMuonEBeamNuE);
00392     ZeroVector(fMCFlavorBeamNuE);
00393   }
00394 }

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