SISCone  2.0.6
times.cpp
1 // File: times.cpp //
3 // Description: example program that computes execution times //
4 // This file is part of the SISCone project. //
5 // For more details, see http://projects.hepforge.org/siscone //
6 // //
7 // Copyright (c) 2006 Gavin Salam and Gregory Soyez //
8 // //
9 // This program is free software; you can redistribute it and/or modify //
10 // it under the terms of the GNU General Public License as published by //
11 // the Free Software Foundation; either version 2 of the License, or //
12 // (at your option) any later version. //
13 // //
14 // This program is distributed in the hope that it will be useful, //
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of //
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
17 // GNU General Public License for more details. //
18 // //
19 // You should have received a copy of the GNU General Public License //
20 // along with this program; if not, write to the Free Software //
21 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA //
22 // //
23 // $Revision:: 320 $//
24 // $Date:: 2011-11-15 09:54:50 +0100 (Tue, 15 Nov 2011) $//
26 
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <time.h>
30 #include <sys/time.h>
31 #include <iostream>
32 #include <math.h>
33 
34 #include "siscone/momentum.h"
35 #include "siscone/siscone.h"
36 
37 #define Nruns 32
38 #define R 0.7
39 #define f 0.5
40 
41 using namespace std;
42 using namespace siscone;
43 
44 timeval time_start, time_end;
45 
46 // compute time spent between time_start and time_end
47 int time_spent(){
48  timeval time_diff;
49 
50  // compute different with initial time
51  time_diff.tv_sec = time_end.tv_sec-time_start.tv_sec;
52  if (time_end.tv_usec > time_start.tv_usec){
53  time_diff.tv_usec = time_end.tv_usec-time_start.tv_usec;
54  } else {
55  time_diff.tv_sec--;
56  time_diff.tv_usec = (1000000+time_end.tv_usec)-time_start.tv_usec;
57  }
58 
59  return 1000000*time_diff.tv_sec+time_diff.tv_usec;
60 }
61 
62 
63 
64 int main(){
65  vector<Cmomentum> particles;
67  double eta,phi;
68 
69  // number of events and particles
70  int i, N;
71  int n_ev, part_inc;
72 
73  // time statistics variables
74  int time_siscone;
75 
76  // save files
77  FILE *flux;
78 
79  // initialise random number generator
80  cout << "initialise random number generator" << endl;
81  timeval timestamp;
82 
83  gettimeofday(&timestamp, NULL);
84  srand(timestamp.tv_usec);
85 
86  flux = fopen("times.dat", "w+");
87 
88  N = 1;
89  part_inc = 1;
90  do{
91  fprintf(stdout, "\r%5d particles\n", N);
92  time_siscone=0;
93 
94  for (n_ev=0;n_ev<Nruns;n_ev++){
95  // build particle list
96  particles.clear();
97  for (i=0;i<N;i++){
98  eta = -3.0+6.0*rand()/(RAND_MAX+1.0);
99  phi = 2.0*M_PI*rand()/(RAND_MAX+1.0);
100  particles.push_back(Cmomentum(cos(phi), sin(phi), tanh(eta), 1.0));
101  }
102 
103  // run siscone
104  gettimeofday(&time_start, NULL);
105  siscone.compute_jets(particles, R, f);
106  gettimeofday(&time_end, NULL);
107  time_siscone+=time_spent();
108  }
109 
110  fprintf(flux, "%d\t%e\n", N, time_siscone/(1.0*Nruns));
111 
112  N+=part_inc;
113  if (N==(part_inc<<3))
114  part_inc <<= 1;
115  // } while (N<=1024);
116  } while (N<=1024);
117 
118  fclose(flux);
119  fprintf(stdout, "\n");
120 
121  cout << "bye..." << endl;
122 
123  return 0;
124 }
base class for dynamic coordinates management
Definition: momentum.h:49
int compute_jets(std::vector< Cmomentum > &_particles, double _radius, double _f, int _n_pass_max=0, double _ptmin=0.0, Esplit_merge_scale _split_merge_scale=SM_pttilde)
compute the jets from a given particle set.
Definition: siscone.cpp:86
Definition: area.cpp:33
final class: gather everything to compute the jet contents.
Definition: siscone.h:48
The SISCone project has been developed by Gavin Salam and Gregory Soyez
Documentation generated on Fri Feb 5 2016 10:03:55 for SISCone by  Doxygen 1.8.9.1