// $Id$ // //---------------------------------------------------------------------- // This file is part of FastJet contrib. // // It is free software; you can redistribute it and/or modify it under // the terms of the GNU General Public License as published by the // Free Software Foundation; either version 2 of the License, or (at // your option) any later version. // // It is distributed in the hope that it will be useful, but WITHOUT // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public // License for more details. // // You should have received a copy of the GNU General Public License // along with this code. If not, see . //---------------------------------------------------------------------- #include #include #include #include #include "fastjet/PseudoJet.hh" using namespace fastjet; using namespace std; // \class JetWidth // computes the jet width used as one shape in the example class JetWidth : public fastjet::FunctionOfPseudoJet{ public: // action of the function double result(const fastjet::PseudoJet &jet) const{ if (!jet.has_constituents()){ return -0.1; } double width = 1e-6; double ptSum = 0; if (jet.constituents().size() < 2) return width; std::vector constituents = jet.constituents(); for (unsigned int iconst=0; iconst &hard_event, vector &full_event, vector *hard_event_charged=0, vector *pileup_event_charged=0){ string line; int nsub = 0; // counter to keep track of which sub-event we're reading bool format_ptRapPhi=false; while (getline(cin, line)) { istringstream linestream(line); // take substrings to avoid problems when there are extra "pollution" // characters (e.g. line-feed). if (line.substr(0,9) == "#PTRAPPHI") format_ptRapPhi=true; if (line.substr(0,4) == "#END") {break;} if (line.substr(0,9) == "#SUBSTART") { // if more sub events follow, make copy of first one (the hard one) here if (nsub == 1) hard_event = full_event; nsub += 1; } if (line.substr(0,1) == "#") {continue;} PseudoJet particle(0,0,1,1); double charge,pid; if (format_ptRapPhi){ double pt,y,phi; linestream >> pt >> y >> phi >> pid >> charge; particle.reset_PtYPhiM(pt,y,phi); } else{ double px,py,pz,E; linestream >> px >> py >> pz >> E >> pid >> charge; particle.reset(px,py,pz,E); } // push event onto back of full_event vector if ( nsub <= 1 ) { if (hard_event_charged && fabs(charge)>0.99) hard_event_charged->push_back(particle); } else { if (pileup_event_charged && fabs(charge)>0.99) pileup_event_charged->push_back(particle); } full_event.push_back(particle); } // if we have read in only one event, copy it across here... if (nsub == 1) hard_event = full_event; // if there was nothing in the event if (nsub == 0) { cerr << "Error: read empty event\n"; exit(-1); } cout << "# " << nsub-1 << " pileup events on top of the hard event" << endl; }