• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

/Users/jmonk/Physics/ForIA/src/AnalysisTools/ReWeightMultiplicity.cxx

Go to the documentation of this file.
00001 #include "ForIA/AnalysisTools/ReWeightMultiplicity.hh"
00002 #include "ForIA/IDataLoader.hh"
00003 #include "ForIA/Event.hh"
00004 #include "ForIA/Units.hh"
00005 
00006 #include "TH1F.h"
00007 
00008 #include <boost/numeric/conversion/cast.hpp>
00009 
00010 namespace ForIA{
00011   
00012   ReWeightMultiplicity::ReWeightMultiplicity(){
00013     
00014   }
00015   
00016   void ReWeightMultiplicity::initialise(){
00017     
00018     MultiplicityFunction tmp;
00019     
00020     initialise(&tmp);
00021     return;
00022   }
00023   
00024   void ReWeightMultiplicity::initialise(const MultiplicityFunction *fn){
00025         
00026     DataLoaderPtr dl = IDataLoader::create();
00027 
00028     dl->open("Root/2PC/TruthMultiplicity.root");
00029     
00030     TH1F *multiplicity = dl->retrieve<TH1F>("multiplicity");
00031     
00032     size_t nBins = multiplicity->GetNbinsX();
00033     
00034     double dLowEdge = multiplicity->GetXaxis()->GetBinLowEdge(1) + 0.1;
00035     
00036     m_startMultiplicity = boost::numeric_cast<size_t>(dLowEdge);
00037     
00038     double dHighEdge = multiplicity->GetXaxis()->GetBinUpEdge(nBins) + 0.1;
00039     
00040     m_endMultiplicity = boost::numeric_cast<size_t>(dHighEdge);
00041     
00042     double maxWeight = 0.;
00043     
00044     double dMult = multiplicity->GetXaxis()->GetBinLowEdge(1) + 0.1;
00045     
00046     size_t mult = boost::numeric_cast<size_t>(dMult);
00047     
00048     for(size_t bin = 1; bin <= nBins; ++bin, ++mult){
00049             
00050       double weight = fn->fn(mult) / multiplicity->GetBinContent(bin);
00051       m_weights.push_back(weight );
00052       if(weight > maxWeight) maxWeight = weight;
00053     }
00054     
00055     double invMaxWeight = 1. / maxWeight;
00056     
00057     for(vector<double>::iterator dist = m_weights.begin();
00058         dist != m_weights.end(); ++dist){
00059       (*dist) *= invMaxWeight;
00060     }
00061         
00062     m_truthSelection.setCharged(TruthSelection::CHARGED);
00063     m_truthSelection.setPTMin(100. * MeV);
00064     m_truthSelection.setEtaMax(2.5);
00065     m_truthSelection.setIsPrimary(true);
00066     
00067     return;
00068   }
00069   
00070   double ReWeightMultiplicity::weight(size_t nTracks){
00071     if(nTracks >= m_endMultiplicity) return 0.;
00072     if(nTracks < m_startMultiplicity) return 0.;
00073     
00074     size_t lookup = nTracks - m_startMultiplicity;
00075     return m_weights[lookup];
00076   }
00077   
00078   double ReWeightMultiplicity::weight(const Event &evt){
00079     
00080     VertexVector vertices = evt.truthVertices();
00081     if(vertices.size() == 0) return 0.;
00082     
00083     m_truthSelection.setEvent(evt);
00084     size_t nTracks = m_truthSelection.fourVectors().size();
00085     
00086     return weight(nTracks);
00087   }
00088   
00089 }
00090 

Generated on Mon Jul 30 2012 16:56:35 for ForIA by  doxygen 1.7.2