void UEAnalysisOnRootple::MPIAnalysisRECO(Float_t weight,string tkpt) { vector<TVector3*> JetRECO; JetRECO.clear(); for(int j=0;j<NumberTracksJet;j++){ if(fabs(EtaCJ[j])<etaRegion){ TVector3* jetvector = new TVector3; //jetvector->SetPtEtaPhi(CalibrationPt(TrasverseMomentumTJ[j],tkpt)*TrasverseMomentumTJ[j], EtaTJ[j], PhiTJ[j]); jetvector->SetPtEtaPhi(TrasverseMomentumTJ[j], EtaTJ[j], PhiTJ[j]); JetRECO.push_back(jetvector); } } vector<AssociatedObject> assoJetRECO; assoJetRECO.clear(); while(JetRECO.size()>1){ int oldSize = JetRECO.size(); vector<TVector3*>::iterator itH = JetRECO.begin(); if((*itH)->Pt()>=ptThreshold){ for(vector<TVector3*>::iterator it=JetRECO.begin();it!=JetRECO.end();it++){ float azimuthDistanceJet = fabs( (*itH)->Phi() - (*it)->Phi() ); if((*it)->Pt()/(*itH)->Pt()>=0.3){ if( (piG - rangePhi) < azimuthDistanceJet && azimuthDistanceJet < (piG + rangePhi)) { AssociatedObject tmpPair((*itH),(*it)); assoJetRECO.push_back(tmpPair); JetRECO.erase(it); int newSize = oldSize -1; oldSize = newSize; JetRECO.resize(newSize); break; } } } } JetRECO.erase(itH); int newSize = oldSize -1; JetRECO.resize(newSize); } if(assoJetRECO.size()){ fNumbMPIRECO->Fill(assoJetRECO.size()); vector<AssociatedObject>::iterator at= assoJetRECO.begin(); const TVector3* leadingJet((*at).first); const TVector3* secondJet((*at).second); pPtRatio_vs_PtJleadRECO->Fill(leadingJet->Pt(),(secondJet->Pt()/leadingJet->Pt())); pPtRatio_vs_EtaJleadRECO->Fill(fabs(leadingJet->Eta()),(secondJet->Pt()/leadingJet->Pt())); pPtRatio_vs_PhiJleadRECO->Fill(leadingJet->Phi(),(secondJet->Pt()/leadingJet->Pt())); fdEtaLeadingPairRECO->Fill(leadingJet->Eta()-secondJet->Eta()); float dPhiJet = fabs(leadingJet->Phi()-secondJet->Phi()); if(dPhiJet> piG) dPhiJet = 2*piG -dPhiJet; dPhiJet = (180*dPhiJet)/piG; fdPhiLeadingPairRECO->Fill(dPhiJet); fptRatioLeadingPairRECO->Fill(secondJet->Pt()/leadingJet->Pt()); } }
void computerPlay(Plateau& plat,Pion& pion) { PNoeud pn; pn.plat=plat; pn.computer=pion; pn.max=true; vector<PNoeud> l; pn.generateAll(l); vector< pair<float,vector<PNoeud>::iterator> > results; for(vector<PNoeud>::iterator it=l.begin();it!=l.end();it++) { float val=minmax::minimax(*it,DIFFICULTY); pair<float,vector<PNoeud>::iterator> tmpPair(val,it); if(results.empty()) { results.push_back(tmpPair); continue; } if(val==results[0].first) results.push_back(tmpPair); else if(val>results[0].first) { results.clear(); results.push_back(tmpPair); } } boost::minstd_rand ran(clock()); size_t choice=ran()%results.size(); plat = results[choice].second->plat; }
void UEAnalysisMPI::mpiAnalysisRECO(float weight,float etaRegion,float ptThreshold,TClonesArray * TracksJet) { std::vector<TLorentzVector*> JetRECO; JetRECO.clear(); for(int j=0;j<TracksJet->GetSize();++j){ TLorentzVector *v = (TLorentzVector*)TracksJet->At(j); if(fabs(v->Eta())<etaRegion){ JetRECO.push_back(v); } } std::vector<AssociatedObject> assoJetRECO; assoJetRECO.clear(); while(JetRECO.size()>1){ int oldSize = JetRECO.size(); std::vector<TLorentzVector*>::iterator itH = JetRECO.begin(); if((*itH)->Pt()>=ptThreshold){ for(std::vector<TLorentzVector*>::iterator it=JetRECO.begin();it!=JetRECO.end();it++){ float azimuthDistanceJet = fabs( (*itH)->Phi() - (*it)->Phi() ); if((*it)->Pt()/(*itH)->Pt()>=0.3){ if( (piG - rangePhi) < azimuthDistanceJet && azimuthDistanceJet < (piG + rangePhi)) { AssociatedObject tmpPair((*itH),(*it)); assoJetRECO.push_back(tmpPair); JetRECO.erase(it); int newSize = oldSize -1; oldSize = newSize; JetRECO.resize(newSize); break; } } } } JetRECO.erase(itH); int newSize = oldSize -1; JetRECO.resize(newSize); } if(assoJetRECO.size()){ fNumbMPIRECO->Fill(assoJetRECO.size()); std::vector<AssociatedObject>::iterator at= assoJetRECO.begin(); const TLorentzVector* leadingJet((*at).first); const TLorentzVector* secondJet((*at).second); pPtRatio_vs_PtJleadRECO->Fill(leadingJet->Pt(),(secondJet->Pt()/leadingJet->Pt())); pPtRatio_vs_EtaJleadRECO->Fill(fabs(leadingJet->Eta()),(secondJet->Pt()/leadingJet->Pt())); pPtRatio_vs_PhiJleadRECO->Fill(leadingJet->Phi(),(secondJet->Pt()/leadingJet->Pt())); fdEtaLeadingPairRECO->Fill(leadingJet->Eta()-secondJet->Eta()); float dPhiJet = fabs(leadingJet->Phi()-secondJet->Phi()); if(dPhiJet> piG) dPhiJet = 2*piG -dPhiJet; dPhiJet = (180*dPhiJet)/piG; fdPhiLeadingPairRECO->Fill(dPhiJet); fptRatioLeadingPairRECO->Fill(secondJet->Pt()/leadingJet->Pt()); } }
///this findPair becomes really slow. Either sort the list to speedup the query, or ///use a different solution. It is mainly used for Removing overlapping pairs. Removal could be delayed. ///we could keep a linked list in each proxy, and store pair in one of the proxies (with lowest memory address) ///Also we can use a 2D bitmap, which can be useful for a future GPU implementation btBroadphasePair* btSortedOverlappingPairCache::findPair(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) { if (!needsBroadphaseCollision(proxy0,proxy1)) return 0; btBroadphasePair tmpPair(*proxy0,*proxy1); int findIndex = m_overlappingPairArray.findLinearSearch(tmpPair); if (findIndex < m_overlappingPairArray.size()) { //btAssert(it != m_overlappingPairSet.end()); btBroadphasePair* pair = &m_overlappingPairArray[findIndex]; return pair; } return 0; }
void UEAnalysisGAM::gammaAnalysisMC(Float_t weight,Float_t etaRegion,Float_t ptThreshold, TClonesArray& MCGamma, TClonesArray& ChargedJet) { vector<TLorentzVector*> JetMC; vector<TLorentzVector*> GamMC; GamMC.clear(); JetMC.clear(); for(int j=0;j<MCGamma.GetSize();++j){ TLorentzVector *g = (TLorentzVector*)MCGamma.At(j); if(fabs(g->Eta())<etaRegion){ GamMC.push_back(g); if(GamMC.size()==1) JetMC.push_back(g); } } if(JetMC.size() != 0){ for(int j=0;j<ChargedJet.GetSize();++j){ TLorentzVector *w = (TLorentzVector*)ChargedJet.At(j); if(fabs(w->Eta())<etaRegion){ JetMC.push_back(w); } } if(JetMC.size()>=2){ float dPhiJet1 = fabs(JetMC[0]->Phi()-JetMC[1]->Phi()); if(dPhiJet1> piG) dPhiJet1 = 2*piG -dPhiJet1; dPhiJet1 = (180*dPhiJet1)/piG; fdPhiGamma1JetMC->Fill(dPhiJet1); } if(JetMC.size()>=3){ float dPhiJet2 = fabs(JetMC[0]->Phi()-JetMC[2]->Phi()); if(dPhiJet2> piG) dPhiJet2 = 2*piG -dPhiJet2; dPhiJet2 = (180*dPhiJet2)/piG; fdPhiGamma2JetMC->Fill(dPhiJet2); } if(JetMC.size()>=4){ float dPhiJet3 = fabs(JetMC[0]->Phi()-JetMC[3]->Phi()); if(dPhiJet3> piG) dPhiJet3 = 2*piG -dPhiJet3; dPhiJet3 = (180*dPhiJet3)/piG; fdPhiGamma3JetMC->Fill(dPhiJet3); } vector<AssociatedObject> assoJetMC; assoJetMC.clear(); while(JetMC.size()>1){ int oldSize = JetMC.size(); vector<TLorentzVector*>::iterator itH = JetMC.begin(); if((*itH)->Pt()>=ptThreshold){ for(vector<TLorentzVector*>::iterator it=JetMC.begin();it!=JetMC.end();it++){ float azimuthDistanceJet = fabs( (*itH)->Phi() - (*it)->Phi() ); if((*it)->Pt()/(*itH)->Pt()>=0.3){ if( (piG - rangePhi) < azimuthDistanceJet && azimuthDistanceJet < (piG + rangePhi)){ AssociatedObject tmpPair((*itH),(*it)); assoJetMC.push_back(tmpPair); JetMC.erase(it); int newSize = oldSize -1; oldSize = newSize; JetMC.resize(newSize); break; } } } } JetMC.erase(itH); int newSize = oldSize -1; JetMC.resize(newSize); } if(assoJetMC.size()){ fNumbMPIMC->Fill(assoJetMC.size()); vector<AssociatedObject>::iterator at= assoJetMC.begin(); const TLorentzVector* leadingJet((*at).first); const TLorentzVector* secondJet((*at).second); pPtRatio_vs_PtJleadMC->Fill(leadingJet->Pt(),(secondJet->Pt()/leadingJet->Pt())); pPtRatio_vs_EtaJleadMC->Fill(fabs(leadingJet->Eta()),(secondJet->Pt()/leadingJet->Pt())); pPtRatio_vs_PhiJleadMC->Fill(leadingJet->Phi(),(secondJet->Pt()/leadingJet->Pt())); fdEtaLeadingPairMC->Fill(leadingJet->Eta()-secondJet->Eta()); float dPhiJet = fabs(leadingJet->Phi()-secondJet->Phi()); if(dPhiJet> piG) dPhiJet = 2*piG -dPhiJet; dPhiJet = (180*dPhiJet)/piG; fdPhiLeadingPairMC->Fill(dPhiJet); fptRatioLeadingPairMC->Fill(secondJet->Pt()/leadingJet->Pt()); } fPhiLeadingGammaMC->Fill(GamMC[0]->Phi()); fPtLeadingGammaMC->Fill(GamMC[0]->Pt()); fEtaLeadingGammaMC->Fill(GamMC[0]->Eta()); } }