00001 #include "DataFormats/HeavyIonEvent/interface/CentralityProvider.h" 00002 00003 CentralityProvider::CentralityProvider(const edm::EventSetup& iSetup) : 00004 prevRun_(0), 00005 varType_(Missing) 00006 { 00007 const edm::ParameterSet &thepset = edm::getProcessParameterSet(); 00008 if(thepset.exists("HeavyIonGlobalParameters")){ 00009 edm::ParameterSet hiPset = thepset.getParameter<edm::ParameterSet>("HeavyIonGlobalParameters"); 00010 tag_ = hiPset.getParameter<edm::InputTag>("centralitySrc"); 00011 centralityVariable_ = hiPset.getParameter<std::string>("centralityVariable"); 00012 if(centralityVariable_.compare("HFtowers") == 0) varType_ = HFtowers; 00013 if(centralityVariable_.compare("HFhits") == 0) varType_ = HFhits; 00014 if(centralityVariable_.compare("PixelHits") == 0) varType_ = PixelHits; 00015 if(centralityVariable_.compare("PixelTracks") == 0) varType_ = PixelTracks; 00016 if(centralityVariable_.compare("Tracks") == 0) varType_ = Tracks; 00017 if(centralityVariable_.compare("EB") == 0) varType_ = EB; 00018 if(centralityVariable_.compare("EE") == 0) varType_ = EE; 00019 if(varType_ == Missing){ 00020 std::string errorMessage="Requested Centrality variable does not exist : "+centralityVariable_+"\n" + 00021 "Supported variables are: \n" + "HFtowers HFhits PixelHits PixelTracks Tracks EB EE" + "\n"; 00022 throw cms::Exception("Configuration",errorMessage); 00023 } 00024 if(hiPset.exists("nonDefaultGlauberModel")){ 00025 centralityMC_ = hiPset.getParameter<std::string>("nonDefaultGlauberModel"); 00026 } 00027 centralityLabel_ = centralityVariable_+centralityMC_; 00028 SetName(centralityLabel_.data()); 00029 }else{ 00030 } 00031 newRun(iSetup); 00032 } 00033 00034 void CentralityProvider::newEvent(const edm::Event& ev,const edm::EventSetup& iSetup){ 00035 ev.getByLabel(tag_,chandle_); 00036 if(ev.id().run() == prevRun_) return; 00037 prevRun_ = ev.id().run(); 00038 newRun(iSetup); 00039 } 00040 00041 void CentralityProvider::newRun(const edm::EventSetup& iSetup){ 00042 edm::ESHandle<CentralityTable> inputDB_; 00043 iSetup.get<HeavyIonRcd>().get(centralityLabel_,inputDB_); 00044 int nbinsMax = inputDB_->m_table.size(); 00045 table_.clear(); 00046 table_.reserve(nbinsMax); 00047 for(int j=0; j<nbinsMax; j++){ 00048 const CentralityTable::CBin* thisBin; 00049 thisBin = &(inputDB_->m_table[j]); 00050 CBin newBin; 00051 newBin.bin_edge = thisBin->bin_edge; 00052 newBin.n_part_mean = thisBin->n_part.mean; 00053 newBin.n_part_var = thisBin->n_part.var; 00054 newBin.n_coll_mean = thisBin->n_coll.mean; 00055 newBin.n_coll_var = thisBin->n_coll.var; 00056 newBin.n_hard_mean = thisBin->n_hard.mean; 00057 newBin.n_hard_var = thisBin->n_hard.var; 00058 newBin.b_mean = thisBin->b.mean; 00059 newBin.b_var = thisBin->b.var; 00060 00061 newBin.eccRP_mean = thisBin->eccRP.mean; 00062 newBin.eccRP_var = thisBin->eccRP.var; 00063 newBin.ecc2_mean = thisBin->ecc2.mean; 00064 newBin.ecc2_var = thisBin->ecc2.var; 00065 newBin.ecc3_mean = thisBin->ecc3.mean; 00066 newBin.ecc3_var = thisBin->ecc3.var; 00067 newBin.s_mean = thisBin->S.mean; 00068 newBin.s_var = thisBin->S.var; 00069 00070 table_.push_back(newBin); 00071 } 00072 } 00073 00074 void CentralityProvider::print(){ 00075 std::cout<<"Number of bins : "<<table_.size()<<std::endl; 00076 for(unsigned int j = 0; j < table_.size(); ++j){ 00077 std::cout<<"Bin : "<<j<<std::endl; 00078 std::cout<<"Bin Low Edge : "<<table_[j].bin_edge <<std::endl; 00079 std::cout<<"Npart Mean : "<<table_[j].n_part_mean <<std::endl; 00080 std::cout<<"Npart RMS : "<<table_[j].n_part_var <<std::endl; 00081 std::cout<<"Ncoll Mean : "<<table_[j].n_coll_mean <<std::endl; 00082 std::cout<<"Ncoll RMS : "<<table_[j].n_coll_var <<std::endl; 00083 std::cout<<"Nhard Mean : "<<table_[j].n_hard_mean <<std::endl; 00084 std::cout<<"Nhard RMS : "<<table_[j].n_hard_var <<std::endl; 00085 std::cout<<"b Mean : "<<table_[j].b_mean <<std::endl; 00086 std::cout<<"b RMS : "<<table_[j].b_var <<std::endl; 00087 } 00088 } 00089 00090 double CentralityProvider::centralityValue() const { 00091 double var = -99; 00092 if(varType_ == HFhits) var = chandle_->EtHFhitSum(); 00093 if(varType_ == HFtowers) var = chandle_->EtHFtowerSum(); 00094 if(varType_ == PixelHits) var = chandle_->multiplicityPixel(); 00095 if(varType_ == PixelTracks) var = chandle_->NpixelTracks(); 00096 if(varType_ == Tracks) var = chandle_->Ntracks(); 00097 if(varType_ == EB) var = chandle_->EtEBSum(); 00098 if(varType_ == EE) var = chandle_->EtEESum(); 00099 00100 return var; 00101 } 00102 00103 00104 00105 00106