示例#1
0
int processkey_ingame(int key, int flags)
{
	static int discard_count;
	struct player *plr;
	int i = TWOPLAYER_MODE && key & PLAYER_2;
	int safe;
	switch (key & 0x7F) {
	case ESC:
	case '\b':
		game->state = 0;
		return -2;
	case 'q':
		exit(0);
	case STARTBTN:
	case 'p':
		if (flags & NO_PAUSE || !game_running || TWOPLAYER_MODE)
			break;
		i = pausegame();
		textgfx_flags &= ~LOST_FOCUS;
		return i;
	}
	if (flags & DISCARD_MOVES) {
		if (++discard_count > 5)
			kb_flushinp();
		return -1;
	}
	discard_count = 0;
	plr = game->player+i;
	safe = dropsafe(i);
	key &= 0x7F;
	if (!(flags & DISCARD_DROPS)) {
		switch (key) {
		case HARDDROP:
			if (socket_fd > -1 && !i) {
				sock_sendpiece(plr);
				if (harddrop(plr, safe) == -1)
					return -1;
				sock_sendbyte(HARDDROP);
				return 0;
			}
			return harddrop(plr, safe);
		case MVDOWN:
			if (!TWOPLAYER_MODE)
				return softdrop(softdrop_speed, safe);
			if (!movedown(plr, 1))
				return 0;
			if (socket_fd > -1 && !i)
				sock_sendbyte(MVDOWN);
			return 1;
		}
	}
	switch (key) {
	case MVLEFT:
		moveleft(plr);
		break;
	case MVRIGHT:
		moveright(plr);
		break;
	case MVUP:
		rotate(plr, plr->rotationsys & ROT_CLOCKWISE);
		break;
	case A_BTN:
		rotate(plr, 1);
		break;
	case B_BTN:
		//rotate(plr, 0);
		if(!makeSwitch(plr))
			return 99;
		break;
	default:
		return -1;
	}
	if (socket_fd > -1 && !i)
		sock_sendbyte(key);
	upd_screen(1+i);
	return 1;
}
void GroomingTreeProducer::ProduceTree()
{       
	
	TFile OutputFile (outFileName.c_str(), "RECREATE");
	
	Float_t mass_PFjet, mass_Filtered_PFjet, mass_Pruned_PFjet, mass_Pruned_PFjet_subtracted, mass_Trimmed_PFjet, pt_PFjet, mass_GENjet, mass_Filtered_GENjet, mass_Pruned_GENjet, mass_Trimmed_GENjet, pt_GENjet, mass_PFjet_subtracted, mass_soft_drop;
	Int_t nPU;
	
	
	TTree *PF_tree = new TTree("PF", "PF");
	TTree *GEN_tree = new TTree("GEN", "GEN");
	
	PF_tree -> Branch("mass_PFjet",&mass_PFjet,"mass_PFjet/F");
	PF_tree -> Branch("mass_PFjet_subtracted",&mass_PFjet_subtracted,"mass_PFjet_subtracted/F");
	PF_tree -> Branch("pt_PFjet",&pt_PFjet,"pt_PFjet/F");
	PF_tree -> Branch("mass_Pruned_PFjet",&mass_Pruned_PFjet,"mass_Pruned_PFjet/F");
	PF_tree -> Branch("mass_Pruned_PFjet_subtracted",&mass_Pruned_PFjet_subtracted,"mass_Pruned_PFjet_subtracted/F");
	PF_tree -> Branch("mass_Trimmed_PFjet",&mass_Trimmed_PFjet,"mass_Trimmed_PFjet/F");
	PF_tree -> Branch("mass_Filtered_PFjet",&mass_Filtered_PFjet,"mass_Filtered_PFjet/F");
	PF_tree -> Branch("mass_soft_drop",&mass_soft_drop,"mass_soft_drop/F");
	PF_tree -> Branch("nPU",&nPU,"nPU/I");
	
	GEN_tree -> Branch("mass_GENjet",&mass_GENjet,"mass_GENjet/F");
	GEN_tree -> Branch("pt_GENjet",&pt_GENjet,"pt_GENjet/F");
	GEN_tree -> Branch("mass_Pruned_GENjet",&mass_Pruned_GENjet,"mass_Pruned_GENjet/F");
	GEN_tree -> Branch("mass_Trimmed_GENjet",&mass_Trimmed_GENjet,"mass_Trimmed_GENjet/F");
	GEN_tree -> Branch("mass_Filtered_GENjet",&mass_Filtered_GENjet,"mass_Filtered_GENjet/F");
	GEN_tree -> Branch("nPU",&nPU,"nPU/I");

	
	
	for (unsigned int jj = 0; jj < inputFileNames.size(); jj++)
	{
	  
	  TFile* fIn = TFile::Open((prefixSamples + inputFileNames.at(jj)).c_str());
	  TTree* tree = (TTree*) fIn->Get("Events");
	  TClonesArray *PF = new TClonesArray("baconhep::TPFPart");
	  TClonesArray *Gen = new TClonesArray("baconhep::TGenParticle");
	  TEventInfo *ev_Info = new TEventInfo();
	  	  
	  tree -> SetBranchAddress("PFPart", &PF);
	  tree -> SetBranchAddress("GenParticle", &Gen);
	  tree -> SetBranchAddress("Info",&ev_Info);
	  
	  for(int i0 =0; i0 <tree -> GetEntriesFast(); i0++) 
	  {
	    //1, event loop
	
	     tree -> GetEntry(i0);
	     bool leptonic = false;
	    
	    std::vector<fastjet::PseudoJet> PFparticles;
	    std::vector<fastjet::PseudoJet> GENparticles;
	    
	    nPU =  ev_Info -> nPU;
	    	    
	    for( int i1 = 0; i1 < PF -> GetEntriesFast(); i1++)
	    {
	      //2,entries loop,fill the vector particles with PF particles
	      
	      baconhep::TPFPart *PFTmp = (baconhep::TPFPart*)((*PF)[i1]);
	    
	      double Px=PFTmp->pt*cos(PFTmp->phi);
	      double Py= PFTmp->pt*sin(PFTmp->phi);
	      double theta = 2*atan(exp(-PFTmp->eta)); //eta = -ln(tan(theta/2))
	      double Pz = PFTmp->pt/tan(theta);
	      double E = PFTmp->e;
	      
	      fastjet::PseudoJet tmp_psjet(Px, Py, Pz, E);
	      PFparticles.push_back(tmp_psjet);
	    
	    }
	  
	   
	   //loop over genparticles
	    for( int i3 = 0; i3 < Gen -> GetEntriesFast(); i3++)
	    {
	      
	      baconhep::TGenParticle *GenParticleTmp = (baconhep::TGenParticle*)((*Gen)[i3]);
	      double Px=GenParticleTmp->pt*cos(GenParticleTmp->phi);
	      double Py= GenParticleTmp->pt*sin(GenParticleTmp->phi);
	      double theta = 2*atan(exp(-GenParticleTmp->eta)); //eta = -ln(tan(theta/2))
	      double Pz = GenParticleTmp->pt/tan(theta);
	      double Genmass = GenParticleTmp -> mass;
	      double E = sqrt(Px*Px + Py*Py + Pz*Pz + Genmass*Genmass);
	      fastjet::PseudoJet tmp_genpsjet(Px, Py, Pz, E);
	    
	      
	    //  cout << "Number  "<< i3 <<   "|status " << GenParticleTmp -> status << "| pdgId " << GenParticleTmp -> pdgId << "| parent " << GenParticleTmp -> parent << endl;
	      
	      //check if W decays leptonically
	      if (fabs(GenParticleTmp -> pdgId) == 11 || fabs(GenParticleTmp -> pdgId) == 13 || fabs(GenParticleTmp -> pdgId) == 15) 
	      {
	      	  if ( fabs(((baconhep::TGenParticle*)((*Gen)[GenParticleTmp -> parent])) -> pdgId) == 24) leptonic = true;
	      }
	      
	      
	      if ((GenParticleTmp -> status) == 1 && fabs(GenParticleTmp -> pdgId)!=12 && fabs(GenParticleTmp -> pdgId)!=14 && fabs(GenParticleTmp -> pdgId)!=16 ) GENparticles.push_back(tmp_genpsjet);//taking particles only with status == 1 and filtering neutrinos
	  
		  
	    }
	    
	    if (leptonic) continue;//use only leptonically decays of W
	    fastjet::AreaDefinition area_def(active_area_explicit_ghosts,GhostedAreaSpec(SelectorAbsRapMax(4.0)));
	    
	    
	     
	    fastjet::ClusterSequenceArea clust_seq_PF(PFparticles, jet_def, area_def);
	    fastjet::ClusterSequenceArea clust_seq_GEN(GENparticles, jet_def, area_def);
	    
	    std::vector<fastjet::PseudoJet> PF_jets_basic = sorted_by_pt(clust_seq_PF.inclusive_jets(300.0));
	    std::vector<fastjet::PseudoJet> GEN_jets_basic = sorted_by_pt(clust_seq_GEN.inclusive_jets(300.0));
	    
	    fastjet::Selector rho_range =  SelectorAbsRapMax(4.0);
	    
	    JetMedianBackgroundEstimator bge_rho (rho_range, clust_seq_PF);
	    JetMedianBackgroundEstimator bge_rhom(rho_range, clust_seq_PF);
	    BackgroundJetPtMDensity m_density;
	    bge_rhom.set_jet_density_class(&m_density);
	    
	    contrib::SafeAreaSubtractor *area_subtractor = new contrib::SafeAreaSubtractor(&bge_rho, &bge_rhom);

	   
	   double RCut= 0.5;
	   Pruner pruner(jet_def, 0.1,RCut);
	   Filter trimmer(jet_def_filtering ,SelectorPtFractionMin(0.05) );
	   Filter filter(jet_def_filtering , SelectorNHardest(3) );
	   contrib::SoftDrop softdrop(2., 0.1, 1.0);
	   trimmer.set_subtractor(area_subtractor);
	   filter.set_subtractor(area_subtractor);
	   softdrop.set_subtractor(area_subtractor);
	   
	   PseudoJet pruned_jet, pruned_jet_subtracted, trimmed_jet, filtered_jet, subtracted_jet, soft_drop_jet;
	   
	   for (unsigned j =0; j < PF_jets_basic.size();++j)
	   {
	      subtracted_jet = (PseudoJet) (*area_subtractor)(PF_jets_basic.at(j));
	     	     
	      trimmed_jet = (PseudoJet) trimmer.result(PF_jets_basic.at(j));
	      filtered_jet = (PseudoJet) filter.result(PF_jets_basic.at(j));
	      soft_drop_jet= (PseudoJet) softdrop.result(PF_jets_basic.at(j));
	  
	      pruned_jet = pruner(PF_jets_basic.at(j));
	      pruned_jet_subtracted = pruner(subtracted_jet);
	   
	      mass_PFjet = PF_jets_basic.at(j).m();
	      mass_PFjet_subtracted = subtracted_jet.m();
	      pt_PFjet = PF_jets_basic.at(j).pt();
	      mass_Pruned_PFjet = pruned_jet.m();
	      mass_Pruned_PFjet_subtracted = pruned_jet_subtracted.m();
	      mass_Filtered_PFjet = filtered_jet.m();
	      mass_Trimmed_PFjet = trimmed_jet.m();
	      mass_soft_drop = soft_drop_jet.m();
	      
	      PF_tree -> Fill();
	   }

	   for (unsigned j =0; j < GEN_jets_basic.size();++j)
	   {
	   
	    pruned_jet = pruner(GEN_jets_basic.at(j));
	    trimmed_jet = (PseudoJet) trimmer.result(GEN_jets_basic.at(j));
	    filtered_jet = (PseudoJet) filter.result(GEN_jets_basic.at(j));
	        
	    mass_GENjet = GEN_jets_basic.at(j).m();
	    pt_GENjet = GEN_jets_basic.at(j).pt();
	    mass_Pruned_GENjet = pruned_jet.m();
	    mass_Filtered_GENjet = filtered_jet.m();
	    mass_Trimmed_GENjet = trimmed_jet.m();
	    
	    GEN_tree -> Fill();
	    
	  }
	
	  PF_jets_basic.clear();
	  GEN_jets_basic.clear();
	}//end of event loop
    }
    
   OutputFile.cd();
   GEN_tree -> Write();
   PF_tree -> Write();
}