00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00026
00027 #include <stdio.h>
00028 #include <iostream>
00029 #include "siscone/momentum.h"
00030 #include "siscone/siscone.h"
00031 #include "siscone/area.h"
00032 #include "options.h"
00033
00034 using namespace std;
00035 using namespace siscone;
00036
00037 int main(int argc, char *argv[]){
00038 vector<Cmomentum> particles;
00039 Carea siscone_with_area;
00040 int i,N;
00041 double px,py,pz,E;
00042 Coptions opts;
00043 char fline[512];
00044
00045 if (opts.parse_options(argc, argv))
00046 exit(1);
00047
00048
00049 if (opts.help_flag){
00050 opts.print_help();
00051 exit(0);
00052 }
00053
00054
00055 if (opts.version_flag){
00056 opts.print_version();
00057 exit(0);
00058 }
00059
00060
00061 FILE *flux;
00062 FILE *fpart;
00063
00064
00065 if (opts.verbose_flag) cout << "reading particles" << endl;
00066 flux = fopen(opts.ev_name, "r");
00067 if (flux==NULL){
00068 cerr << "cannot read event" << endl;
00069 return 1;
00070 }
00071
00072 N=0;
00073 fpart = fopen("particles.dat", "w+");
00074 while ((opts.N_stop!=0) && (fgets(fline, 512, flux)!=NULL)){
00075 if (fline[0]!='#'){
00076 if (sscanf(fline, "%le%le%le%le", &px, &py, &pz, &E)==4){
00077 particles.push_back(Cmomentum(px, py, pz, E));
00078 fprintf(fpart, "%le\t%le\n", particles[N].eta, particles[N].phi);
00079 N++;
00080 opts.N_stop--;
00081 } else {
00082 cout << "error in reading event file Giving up." << endl;
00083 fclose(flux);
00084 fclose(fpart);
00085 exit(2);
00086 }
00087 }
00088 }
00089 fclose(flux);
00090 fclose(fpart);
00091 if (opts.verbose_flag)
00092 cout << " working with " << N << " particles" << endl;
00093
00094
00095 if (opts.verbose_flag) cout << "computing jet contents" << endl;
00096 i=siscone_with_area.compute_areas(particles, opts.R, opts.f, opts.npass, opts.SM_var);
00097 if (opts.verbose_flag){
00098 unsigned int pass;
00099 for (pass=0;pass<siscone_with_area.protocones_list.size();pass++)
00100 cout << " pass " << pass << " found " << siscone_with_area.protocones_list[pass].size()
00101 << " stable cones" << endl;
00102 cout << " Final result: " << i << " jets found" << endl;
00103 }
00104
00105
00106 if (opts.verbose_flag)
00107 cout << "saving result" << endl;
00108 flux = fopen("jets_with_area.dat", "w+");
00109 vector<Cjet_area>::iterator ja;
00110 for (ja=siscone_with_area.jet_areas.begin();ja!=siscone_with_area.jet_areas.end();ja++){
00111 fprintf(flux, "%le\t%le\t%le\t%le\t%le\n",
00112 ja->v.perp(), ja->v.eta, ja->v.phi,
00113 ja->active_area, ja->passive_area);
00114 }
00115
00116 fclose(flux);
00117
00118 if (opts.verbose_flag)
00119 cout << "bye..." << endl;
00120
00121 return 0;
00122 }