void printJet(Jet *jet) { GenParticle *particle; Muon *muon; Track *track; Tower *tower; TObject *object; TLorentzVector momentum; momentum.SetPxPyPzE(0.0, 0.0, 0.0, 0.0); //TRefArray constituentarray(jet->Constituents); TRefArray particlearray(jet->Particles); cout<<"Looping over jet constituents. Jet pt: "<<jet->PT<<", eta: "<<jet->Eta<<", phi: "<<jet->Phi<<endl; // Loop over all jet's constituents for(Int_t j = 0; j < jet->Constituents.GetEntriesFast(); ++j) { object = jet->Constituents.At(j); // Check if the constituent is accessible if(object == 0) continue; if(object->IsA() == GenParticle::Class()) { particle = (GenParticle*) object; cout << " GenPart pt: " << particle->PT << ", eta: " << particle->Eta << ", phi: " << particle->Phi << endl; momentum += particle->P4(); } else if(object->IsA() == Track::Class()) { track = (Track*) object; cout << " Track pt: " << track->PT << ", eta: " << track->Eta << ", phi: " << track->Phi << endl; momentum += track->P4(); } else if(object->IsA() == Tower::Class()) { tower = (Tower*) object; cout << " Tower pt: " << tower->ET << ", eta: " << tower->Eta << ", phi: " << tower->Phi << endl; momentum += tower->P4(); } else if(object->IsA() == Muon::Class()) { muon = (Muon*) object; cout << " Muon pt: " << muon->PT << ", eta: " << muon->Eta << ", phi: " << muon->Phi << endl; momentum += muon->P4(); } } cout << " constituent sum pt: " << momentum.Pt() <<" eta "<< momentum.Eta() <<" phi " << momentum.Phi() << std::endl; for (Int_t j =0; j<jet->Particles.GetEntries(); j++){ GenParticle *p_tmp = (GenParticle*) particlearray.At(j); printGenParticle(p_tmp); } }
void AnalyseEvents(ExRootTreeReader *treeReader, TestPlots *plots) { TClonesArray *branchParticle = treeReader->UseBranch("Particle"); TClonesArray *branchElectron = treeReader->UseBranch("Electron"); TClonesArray *branchPhoton = treeReader->UseBranch("Photon"); TClonesArray *branchMuon = treeReader->UseBranch("Muon"); TClonesArray *branchTrack = treeReader->UseBranch("Track"); TClonesArray *branchTower = treeReader->UseBranch("Tower"); TClonesArray *branchEFlowTrack = treeReader->UseBranch("EFlowTrack"); TClonesArray *branchEFlowPhoton = treeReader->UseBranch("EFlowPhoton"); TClonesArray *branchEFlowNeutralHadron = treeReader->UseBranch("EFlowNeutralHadron"); TClonesArray *branchJet = treeReader->UseBranch("Jet"); Long64_t allEntries = treeReader->GetEntries(); cout << "** Chain contains " << allEntries << " events" << endl; GenParticle *particle; Electron *electron; Photon *photon; Muon *muon; Track *track; Tower *tower; Jet *jet; TObject *object; TLorentzVector momentum; Float_t Eem, Ehad; Bool_t skip; Long64_t entry; Int_t i, j, pdgCode; // Loop over all events for(entry = 0; entry < allEntries; ++entry) { // Load selected branches with data from specified event treeReader->ReadEntry(entry); // Loop over all electrons in event for(i = 0; i < branchElectron->GetEntriesFast(); ++i) { electron = (Electron*) branchElectron->At(i); particle = (GenParticle*) electron->Particle.GetObject(); plots->fElectronDeltaPT->Fill((particle->PT - electron->PT)/particle->PT); plots->fElectronDeltaEta->Fill((particle->Eta - electron->Eta)/particle->Eta); } // Loop over all photons in event for(i = 0; i < branchPhoton->GetEntriesFast(); ++i) { photon = (Photon*) branchPhoton->At(i); // skip photons with references to multiple particles if(photon->Particles.GetEntriesFast() != 1) continue; particle = (GenParticle*) photon->Particles.At(0); plots->fPhotonDeltaPT->Fill((particle->PT - photon->PT)/particle->PT); plots->fPhotonDeltaEta->Fill((particle->Eta - photon->Eta)/particle->Eta); plots->fPhotonDeltaE->Fill((particle->E - photon->E)/particle->E); } // Loop over all muons in event for(i = 0; i < branchMuon->GetEntriesFast(); ++i) { muon = (Muon*) branchMuon->At(i); particle = (GenParticle*) muon->Particle.GetObject(); plots->fMuonDeltaPT->Fill((particle->PT - muon->PT)/particle->PT); plots->fMuonDeltaEta->Fill((particle->Eta - muon->Eta)/particle->Eta); } // Loop over all tracks in event for(i = 0; i < branchTrack->GetEntriesFast(); ++i) { track = (Track*) branchTrack->At(i); particle = (GenParticle*) track->Particle.GetObject(); plots->fTrackDeltaPT->Fill((particle->PT - track->PT)/particle->PT); plots->fTrackDeltaEta->Fill((particle->Eta - track->Eta)/particle->Eta); } // cout << "-- New event -- " << endl; // Loop over all jets in event for(i = 0; i < branchJet->GetEntriesFast(); ++i) { jet = (Jet*) branchJet->At(i); momentum.SetPxPyPzE(0.0, 0.0, 0.0, 0.0); // cout<<"Looping over jet constituents. Jet pt: "<<jet->PT<<", eta: "<<jet->Eta<<", phi: "<<jet->Phi<<endl; // Loop over all jet's constituents for(j = 0; j < jet->Constituents.GetEntriesFast(); ++j) { object = jet->Constituents.At(j); // Check if the constituent is accessible if(object == 0) continue; if(object->IsA() == GenParticle::Class()) { particle = (GenParticle*) object; // cout << " GenPart pt: " << particle->PT << ", eta: " << particle->Eta << ", phi: " << particle->Phi << endl; momentum += particle->P4(); } else if(object->IsA() == Track::Class()) { track = (Track*) object; // cout << " Track pt: " << track->PT << ", eta: " << track->Eta << ", phi: " << track->Phi << endl; momentum += track->P4(); } else if(object->IsA() == Tower::Class()) { tower = (Tower*) object; // cout << " Tower pt: " << tower->ET << ", eta: " << tower->Eta << ", phi: " << tower->Phi << endl; momentum += tower->P4(); } } plots->fJetDeltaPT->Fill((jet->PT - momentum.Pt())/jet->PT); } } }
void LHCOWriter::AnalyseMuons() { Muon *element; Track *track; Tower *tower; Jet *jet; Int_t muonCounter, tauCounter, jetCounter, minIndex; Float_t sumPT, sumET, ratET, jetDR, minDR; muonCounter = 0; fItMuon->Reset(); while((element = static_cast<Muon*>(fItMuon->Next()))) { Reset(); sumPT = 0.0; fItTrack->Reset(); while((track = static_cast<Track*>(fItTrack->Next()))) { if(element->P4().DeltaR(track->P4()) < 0.5) sumPT += track->PT; } sumET = 0.0; fItTower->Reset(); while((tower = static_cast<Tower*>(fItTower->Next()))) { if(element->P4().DeltaR(tower->P4()) < 0.5) sumET += tower->ET; } tauCounter = 0; jetCounter = 0; minIndex = -1; minDR = 1.0E9; fItJet->Reset(); while((jet = static_cast<Jet*>(fItJet->Next()))) { if(jet->TauTag != 0) { ++tauCounter; continue; } jetDR = element->P4().DeltaR(jet->P4()); if(jetDR < minDR) { minIndex = jetCounter; minDR = jetDR; } ++jetCounter; } fIntParam[1] = 2; fDblParam[0] = element->Eta; fDblParam[1] = element->Phi; fDblParam[2] = element->PT; fDblParam[3] = 0.11; fDblParam[4] = element->Charge; if(minIndex >= 0) { fDblParam[5] = fIntParam[0] + fBranchMuon->GetEntriesFast() - muonCounter + tauCounter + minIndex; } ratET = sumET/element->PT; fDblParam[6] = Float_t(TMath::Nint(sumPT)) + (ratET < 1.0 ? ratET : 0.99); Write(); ++muonCounter; } }