Subversion Repositories f9daq

Rev

Rev 330 | Rev 333 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 330 Rev 331
1
#include <TClonesArray.h>
1
#include <TClonesArray.h>
2
#include <TH1F.h>
2
#include <TH1F.h>
3
#include <TStopwatch.h>
3
#include <TStopwatch.h>
4
#include <TDatime.h>
4
#include <TDatime.h>
5
#include <TString.h>
5
#include <TString.h>
6
#include <TFile.h>
6
#include <TFile.h>
7
#include <TTree.h>
7
#include <TTree.h>
8
#include <TBranch.h>
8
#include <TBranch.h>
9
#include <TBufferJSON.h>
9
#include <TBufferJSON.h>
10
#include <TMath.h>
10
#include <TMath.h>
11
#include <vector>
11
#include <vector>
12
#include "BParticle.h"
12
#include "BParticle.h"
13
#include "BEvent.h"
13
#include "BEvent.h"
14
 
14
 
15
class Hdr{
15
class Hdr{
16
public:
16
public:
17
  int id;
17
  int id;
18
  int len;
18
  int len;
19
  int progress;
19
  int progress;
20
};
20
};
21
 
21
 
22
std::vector<int> histogram(int n, ...){
22
std::vector<int> histogram(int n, ...){
23
std::vector<int> result;
23
std::vector<int> result;
24
int val = 0;
24
int val = 0;
25
   va_list ap;
25
   va_list ap;
26
   int i;
26
   int i;
27
 
27
 
28
   va_start(ap, n);
28
   va_start(ap, n);
29
   for(i = 0; i < n; i++) {
29
   for(i = 0; i < n; i++) {
30
      result.push_back(  va_arg(ap, int) );
30
      result.push_back(  va_arg(ap, int) );
31
   }
31
   }
32
   va_end(ap);
32
   va_end(ap);
33
return result;
33
return result;
34
}
34
}
35
 
35
 
36
class Blab2 {
36
class Blab2 {
37
public:
37
public:
38
const char *names[12]={"photon", "electron", "pion", "muon", "kaon", "proton", "J/Psi", "D", "D*", "B", "Phi","Lambda0"};
38
const char *names[12]={"photon", "electron", "pion", "muon", "kaon", "proton", "J/Psi", "D", "D*", "B", "Phi","Lambda0"};
39
 
39
 
40
UInt_t fNeve;
40
UInt_t fNeve;
41
UInt_t fNfirst;
41
UInt_t fNfirst;
42
UInt_t fPrint;
42
UInt_t fPrint;
43
int fData;
43
int fData;
44
TH1F *fH[100];
44
TH1F *fH[100];
45
UInt_t fHtype[100];
45
UInt_t fHtype[100];
46
TClonesArray *fList[100];
46
TClonesArray *fList[100];
47
 
47
 
48
Blab2();
48
Blab2();
49
~Blab2();
49
~Blab2();
50
void Init();
50
void Init();
51
void event();
51
void event();
52
void Process();
52
void Process();
53
void h1d(const char *varname, const char *name, int nbins, double min, double max, int id );
53
void h1d(const char *varname, const char *name, int nbins, double min, double max, int id );
54
int  selector(int pin, int charge, SIMPLEPID particlename,  int hid, int pout );
54
int  selector(int pin, int charge, SIMPLEPID particlename,  int hid, int pout );
55
int  selector(int pin, int charge, SIMPLEPID particlename,  std::vector<int> hid, int pout );
55
int  selector(int pin, int charge, SIMPLEPID particlename,  std::vector<int> hid, int pout );
56
int  combiner(int id0 ,int id1 , int same, SIMPLEPID particlename, double min, double max, int hid, int id );
56
int  combiner(int id0 ,int id1 , int same, SIMPLEPID particlename, double min, double max, int hid, int id );
57
int  combiner(int id0 ,int id1 , int same, SIMPLEPID particlename, double min, double max, std::vector<int>hid, int id );
57
int  combiner(int id0 ,int id1 , int same, SIMPLEPID particlename, double min, double max, std::vector<int>hid, int id );
58
int  combiner3(int id0 ,int id1 , int id2, int same, SIMPLEPID particlename, double min, double max, int hid, int id );
58
int  combiner3(int id0 ,int id1 , int id2, int same, SIMPLEPID particlename, double min, double max, int hid, int id );
59
int  combiner3(int id0 ,int id1 , int id2, int same, SIMPLEPID particlename, double min, double max, std::vector<int>hid, int id );
59
int  combiner3(int id0 ,int id1 , int id2, int same, SIMPLEPID particlename, double min, double max, std::vector<int>hid, int id );
60
int  fix_mass(int id);
60
int  fix_mass(int id);
61
int  Fill(std::vector<int> hid, BParticle *p);
61
int  Fill(std::vector<int> hid, BParticle *p);
62
void plist(int i);
62
void plist(int i);
63
 
63
 
64
 
64
 
65
ClassDef ( Blab2, 1 )
65
ClassDef ( Blab2, 1 )
66
};
66
};
67
 
67
 
68
ClassImp(Blab2)
68
ClassImp(Blab2)
69
 
69
 
70
Blab2::Blab2():fNfirst(0), fNeve(0), fData(0), fPrint(0) {
70
Blab2::Blab2():fNfirst(0), fNeve(0), fData(0), fPrint(0) {
71
 
71
 
72
 Process();
72
 Process();
73
};
73
};
74
 
74
 
75
 
75
 
76
void Blab2::h1d(const char *varname, const char *name, int nbins, double min, double max, int id ){
76
void Blab2::h1d(const char *varname, const char *name, int nbins, double min, double max, int id ){
77
   TString svar(varname);
77
   TString svar(varname);
78
   TString axis[]={"mass (GeV/c2)",
78
   TString axis[]={"mass (GeV/c2)",
79
                "momentum (GeV/c)",
79
                "momentum (GeV/c)",
80
                "energy (GeV)","charge",
80
                "energy (GeV)","charge",
81
                "identity",
81
                "identity",
82
                "momentum (GeV/c)",
82
                "momentum (GeV/c)",
83
                "momentum (GeV/c)",
83
                "momentum (GeV/c)",
84
                "momentum (GeV/c)",
84
                "momentum (GeV/c)",
85
                "momentum (GeV/c)",
85
                "momentum (GeV/c)",
86
                "angle (deg.)",
86
                "angle (deg.)",
87
                "cos(theta)"};
87
                "cos(theta)"};
88
   fHtype[id] = 0;
88
   fHtype[id] = 0;
89
   if (svar.Contains("GetMass"    )) fHtype[id]=0;
89
   if (svar.Contains("GetMass"    )) fHtype[id]=0;
90
   if (svar.Contains("GetMomentum")) fHtype[id]=1;
90
   if (svar.Contains("GetMomentum")) fHtype[id]=1;
91
   if (svar.Contains("GetEnergy"  )) fHtype[id]=2;
91
   if (svar.Contains("GetEnergy"  )) fHtype[id]=2;
92
   if (svar.Contains("GetCharge"  )) fHtype[id]=3;
92
   if (svar.Contains("GetCharge"  )) fHtype[id]=3;
93
   if (svar.Contains("GetPid"     )) fHtype[id]=4;
93
   if (svar.Contains("GetPid"     )) fHtype[id]=4;
94
   if (svar.Contains("GetXMomentum")) fHtype[id]=5;
94
   if (svar.Contains("GetXMomentum")) fHtype[id]=5;
95
   if (svar.Contains("GetYMomentum")) fHtype[id]=6;
95
   if (svar.Contains("GetYMomentum")) fHtype[id]=6;
96
   if (svar.Contains("GetZMomentum")) fHtype[id]=7;
96
   if (svar.Contains("GetZMomentum")) fHtype[id]=7;
97
   if (svar.Contains("GetTransverseMomentum")) fHtype[id]=8;
97
   if (svar.Contains("GetTransverseMomentum")) fHtype[id]=8;
98
   if (svar.Contains("GetTheta"))             fHtype[id]=9;
98
   if (svar.Contains("GetTheta"))             fHtype[id]=9;
99
   if (svar.Contains("GetCosTheta"))          fHtype[id]=10;
99
   if (svar.Contains("GetCosTheta"))          fHtype[id]=10;
100
 
100
 
101
   //fH[id]= new TH1F(TString::Format("h%d",id), TString::Format("%s;%s;N",name,axis[fHtype[id]].Data()), nbins, min, max);
101
   //fH[id]= new TH1F(TString::Format("h%d",id), TString::Format("%s;%s;N",name,axis[fHtype[id]].Data()), nbins, min, max);
102
   if (fHtype[id]==4) {
102
   if (fHtype[id]==4) {
103
     fH[id]= new TH1F(TString::Format("h%d",id), TString::Format("%s;%s;N",name,axis[fHtype[id]].Data()), 11, 0, 11);
103
     fH[id]= new TH1F(TString::Format("h%d",id), TString::Format("%s;%s;N",name,axis[fHtype[id]].Data()), 11, 0, 11);
104
     for (int i=0;i<11;i++) fH[id]->GetXaxis()->SetBinLabel(i+1,names[i]);
104
     for (int i=0;i<11;i++) fH[id]->GetXaxis()->SetBinLabel(i+1,names[i]);
105
   } else {
105
   } else {
106
     fH[id]= new TH1F(TString::Format("h%d",id), TString::Format("%s;%s;N",name,axis[fHtype[id]].Data()), nbins, min, max);  
106
     fH[id]= new TH1F(TString::Format("h%d",id), TString::Format("%s;%s;N",name,axis[fHtype[id]].Data()), nbins, min, max);  
107
   }
107
   }
108
   
108
   
109
 
109
 
110
}
110
}
111
 
111
 
112
 
112
 
113
 
113
 
114
int Blab2::Fill(std::vector<int> id, BParticle *p){
114
int Blab2::Fill(std::vector<int> id, BParticle *p){
115
  for (int i=0; i< id.size(); i++){
115
  for (int i=0; i< id.size(); i++){
116
 int hid = id[i];
116
 int hid = id[i];
117
  if (hid>=0 && fH[hid]) {
117
  if (hid>=0 && fH[hid]) {
118
      double val;
118
      double val;
119
      switch (fHtype[hid]){
119
      switch (fHtype[hid]){
120
      case 0 : val  = p->GetMass(); break;
120
      case 0 : val  = p->GetMass(); break;
121
      case 1 : val  = p->GetMomentum(); break;
121
      case 1 : val  = p->GetMomentum(); break;
122
      case 2 : val  = p->e(); break;
122
      case 2 : val  = p->e(); break;
123
      case 3 : val  = p->charge(); break;
123
      case 3 : val  = p->charge(); break;
124
      case 4 : val  = p->pid(); break;
124
      case 4 : val  = p->pid(); break;
125
      case 5 : val  = p->px(); break;
125
      case 5 : val  = p->px(); break;
126
      case 6 : val  = p->py(); break;
126
      case 6 : val  = p->py(); break;
127
      case 7 : val  = p->pz(); break;
127
      case 7 : val  = p->pz(); break;
128
      case 8 : val  = p->GetTransverseMomentum(); break;
128
      case 8 : val  = p->GetTransverseMomentum(); break;
129
      case 9 : val  = (p->GetMomentum()!=0) ? p->pz()/p->GetMomentum() : 0; val = 180.0*TMath::ACos(val)/TMath::Pi(); break;
129
      case 9 : val  = (p->GetMomentum()!=0) ? p->pz()/p->GetMomentum() : 0; val = 180.0*TMath::ACos(val)/TMath::Pi(); break;
130
      case 10: val  = (p->GetMomentum()!=0) ? p->pz()/p->GetMomentum() : 0; break;
130
      case 10: val  = (p->GetMomentum()!=0) ? p->pz()/p->GetMomentum() : 0; break;
131
      default: val  = 0 ; break;
131
      default: val  = 0 ; break;
132
   }
132
   }
133
   fH[hid]->Fill(val);
133
   fH[hid]->Fill(val);
134
}  
134
}  
135
   
135
   
136
   }
136
   }
137
 
137
 
138
return 0;
138
return 0;
139
}
139
}
140
int Blab2::combiner(int _p0, int _p1,int same, SIMPLEPID pid, double min, double max, int hid, int _p2 ){
140
int Blab2::combiner(int _p0, int _p1,int same, SIMPLEPID pid, double min, double max, int hid, int _p2 ){
141
std::vector<int> a;
141
std::vector<int> a;
142
return combiner(_p0,_p1,same,pid,min,max,a,_p2);
142
return combiner(_p0,_p1,same,pid,min,max,a,_p2);
143
}
143
}
144
 
144
 
145
int Blab2::combiner3(int _p0, int _p1, int _p2, int same, SIMPLEPID pid, double min, double max, int hid, int _p3 ){
145
int Blab2::combiner3(int _p0, int _p1, int _p2, int same, SIMPLEPID pid, double min, double max, int hid, int _p3 ){
146
std::vector<int> a;
146
std::vector<int> a;
147
return combiner3(_p0,_p1,_p2, same,pid,min,max,a,_p3);
147
return combiner3(_p0,_p1,_p2, same,pid,min,max,a,_p3);
148
}
148
}
149
 
149
 
150
int Blab2::combiner(int _p0, int _p1,int same, SIMPLEPID pid, double min, double max, std::vector<int> hid, int _p2 ){
150
int Blab2::combiner(int _p0, int _p1,int same, SIMPLEPID pid, double min, double max, std::vector<int> hid, int _p2 ){
151
   // Loop over all the particles in both lists.
151
   // Loop over all the particles in both lists.
152
 if (_p0 < 0 ) _p0 =0;
152
 if (_p0 < 0 ) _p0 =0;
153
 if (_p1 < 0 ) _p1 =0;
153
 if (_p1 < 0 ) _p1 =0;
154
 
154
 
155
 
155
 
156
 fList[_p2]->Clear();
156
 fList[_p2]->Clear();
157
 int nprt=0;
157
 int nprt=0;
158
 
158
 
159
 for(TIter next1(fList[_p0]);BParticle * p1 =(BParticle *) next1();) {
159
 for(TIter next1(fList[_p0]);BParticle * p1 =(BParticle *) next1();) {
160
    // the second loop
160
    // the second loop
161
   // in the case the second parti 
161
   // in the case the second parti 
162
   for(TIter next2 = (_p0!=_p1 && same==0) ?  TIter(fList[_p1]): TIter(next1) ; BParticle * p2 =(BParticle *) next2();) {  
162
   for(TIter next2 = (_p0!=_p1 && same==0) ?  TIter(fList[_p1]): TIter(next1) ; BParticle * p2 =(BParticle *) next2();) {  
163
      if (p1==p2) continue;     // do not use the same particle in the combinations
163
      if (p1==p2) continue;     // do not use the same particle in the combinations
164
      BParticle  p = *p1 + *p2; // Combine two particles into a new particle   
164
      BParticle  p = *p1 + *p2; // Combine two particles into a new particle   
165
      if (p.InMassRange(min, max)){
165
      if (p.InMassRange(min, max)){
166
            Fill(hid, &p);
166
            Fill(hid, &p);
167
            p.SetPid(pid); // set PID to particlename to fix the particle mass
167
            p.SetPid(pid); // set PID to particlename to fix the particle mass
168
            p.SetEnergyFromPid();
168
            p.SetEnergyFromPid();
169
            TClonesArray& list = *fList[_p2];          
169
            TClonesArray& list = *fList[_p2];          
170
            new (list[nprt++]) BParticle ( p ); // create a new entry in kslist list of particles
170
            new (list[nprt++]) BParticle ( p ); // create a new entry in kslist list of particles
171
           
171
           
172
      }
172
      }
173
       
173
       
174
   }
174
   }
175
               
175
               
176
 }
176
 }
177
 return _p2;
177
 return _p2;
178
}
178
}
179
 
179
 
180
 
180
 
181
int Blab2::combiner3(int _p0, int _p1,int _p2, int same, SIMPLEPID pid, double min, double max, std::vector<int> hid, int _p3 ){
181
int Blab2::combiner3(int _p0, int _p1,int _p2, int same, SIMPLEPID pid, double min, double max, std::vector<int> hid, int _p3 ){
182
   // Loop over all the particles in both lists.
182
   // Loop over all the particles in both lists.
183
 if (_p0 < 0 ) _p0 =0;
183
 if (_p0 < 0 ) _p0 =0;
184
 if (_p1 < 0 ) _p1 =0;
184
 if (_p1 < 0 ) _p1 =0;
185
 if (_p2 < 0 ) _p2 =0;
185
 if (_p2 < 0 ) _p2 =0;
186
 
186
 
187
 
187
 
188
 fList[_p2]->Clear();
188
 fList[_p3]->Clear();
189
 int nprt=0;
189
 int nprt=0;
190
 
190
 
191
 for(TIter next1(fList[_p0]);BParticle * p1 =(BParticle *) next1();) {
191
 for(TIter next1(fList[_p0]);BParticle * p1 =(BParticle *) next1();) {
192
    // the second loop
192
    // the second loop
193
   // in the case the second parti 
193
   // in the case the second parti 
194
   for(TIter next2 = (_p0!=_p1 && same==0) ?  TIter(fList[_p1]): TIter(next1) ; BParticle * p2 =(BParticle *) next2();) {  
194
   for(TIter next2 = (_p0!=_p1 && same==0) ?  TIter(fList[_p1]): TIter(next1) ; BParticle * p2 =(BParticle *) next2();) {  
195
      if (p1==p2) continue;     // do not use the same particle in the combinations
195
      if (p1==p2) continue;     // do not use the same particle in the combinations
196
      for(TIter next3 = (_p1!=_p2 && same==0) ?  TIter(fList[_p2]): TIter(next2) ; BParticle * p3 =(BParticle *) next3();) {  
196
      for(TIter next3 = (_p1!=_p2 && same==0) ?  TIter(fList[_p2]): TIter(next2) ; BParticle * p3 =(BParticle *) next3();) {  
197
        if (p2==p3) continue;     // do not use the same particle in the combinations
197
        if (p2==p3) continue;     // do not use the same particle in the combinations
198
        BParticle  p = *p1 + *p2 + *p3; // Combine two particles into a new particle   
198
        BParticle  p = *p1 + *p2 + *p3; // Combine two particles into a new particle   
199
        if (p.InMassRange(min, max)){
199
        if (p.InMassRange(min, max)){
200
            Fill(hid, &p);
200
            Fill(hid, &p);
201
            p.SetPid(pid); // set PID to particlename to fix the particle mass
201
            p.SetPid(pid); // set PID to particlename to fix the particle mass
202
            p.SetEnergyFromPid();
202
            p.SetEnergyFromPid();
203
            TClonesArray& list = *fList[_p3];          
203
            TClonesArray& list = *fList[_p3];          
204
            new (list[nprt++]) BParticle ( p ); // create a new entry in kslist list of particles       
204
            new (list[nprt++]) BParticle ( p ); // create a new entry in kslist list of particles       
205
        }
205
        }
206
      }
206
      }
207
       
207
       
208
   }
208
   }
209
               
209
               
210
 }
210
 }
211
 return _p3;
211
 return _p3;
212
}
212
}
213
 
213
 
214
 
214
 
215
int Blab2::selector(int pin, int charge, SIMPLEPID type ,  int  hid, int pout ){
215
int Blab2::selector(int pin, int charge, SIMPLEPID type ,  int  hid, int pout ){
216
std::vector<int> a;
216
std::vector<int> a;
217
return selector(pin,charge,type,a,pout);
217
return selector(pin,charge,type,a,pout);
218
}
218
}
219
int Blab2::selector(int pin, int charge, SIMPLEPID type ,  std::vector<int> hid, int pout ){
219
int Blab2::selector(int pin, int charge, SIMPLEPID type ,  std::vector<int> hid, int pout ){
220
 if (pin < 0 ) pin =0;
220
 if (pin < 0 ) pin =0;
221
 
221
 
222
  fList[pout]->Clear();
222
  fList[pout]->Clear();
223
  int nprt=0;
223
  int nprt=0;
224
 
224
 
225
  for(TIter next(fList[pin]); BParticle * p =(BParticle *) next();) {
225
  for(TIter next(fList[pin]); BParticle * p =(BParticle *) next();) {
226
        if (p->charge()== charge || charge > 1){
226
        if (p->charge()== charge || charge > 1){
227
          if ( p->pid()== type || type == ALL ) {
227
          if ( p->pid()== type || type == ALL ) {
228
            TClonesArray& list = *fList[pout];
228
            TClonesArray& list = *fList[pout];
229
            new (list[nprt++]) BParticle ( *p );
229
            new (list[nprt++]) BParticle ( *p );
230
            Fill(hid, p);
230
            Fill(hid, p);
231
          }
231
          }
232
        }
232
        }
233
  }      
233
  }      
234
   return pout;
234
   return pout;
235
}
235
}
236
 
236
 
237
 
237
 
238
int Blab2::fix_mass(int pin){
238
int Blab2::fix_mass(int pin){
239
   if (pin < 0 ) pin =0;
239
   if (pin < 0 ) pin =0;
240
   for(TIter next(fList[pin]); BParticle * p =(BParticle *) next();)  p->SetEnergyFromPid();
240
   for(TIter next(fList[pin]); BParticle * p =(BParticle *) next();)  p->SetEnergyFromPid();
241
   return pin;
241
   return pin;
242
}
242
}
243
 
243
 
244
void Blab2::plist(int i){
244
void Blab2::plist(int i){
245
  fList[i]= new TClonesArray( "BParticle", 500 );
245
  fList[i]= new TClonesArray( "BParticle", 500 );
246
}
246
}
247
Blab2::~Blab2(){};
247
Blab2::~Blab2(){};
248
 
248
 
249
 
249
 
250
void send_message(int id, TString msg, int progress){
250
void send_message(int id, TString msg, int progress){
251
static Hdr hdr;
251
static Hdr hdr;
252
 
252
 
253
   hdr.id = id;
253
   hdr.id = id;
254
   hdr.len= msg.Length();
254
   hdr.len= msg.Length();
255
   hdr.progress= progress;
255
   hdr.progress= progress;
256
   fwrite(&hdr,3*sizeof(int),1,stdout);
256
   fwrite(&hdr,3*sizeof(int),1,stdout);
257
   fwrite(msg.Data(),hdr.len,1,stdout);
257
   fwrite(msg.Data(),hdr.len,1,stdout);
258
   fflush(stdout);
258
   fflush(stdout);
259
 
259
 
260
}
260
}
261
 
261
 
262
 
262
 
263
void Blab2::Process(){
263
void Blab2::Process(){
264
 
264
 
265
char sList[0xFFFF];
265
char sList[0xFFFF];
266
for (int i=0;i<100;i++) fH[i]=NULL;
266
for (int i=0;i<100;i++) fH[i]=NULL;
267
for (int i=0;i<100;i++) fHtype[i]=0;
267
for (int i=0;i<100;i++) fHtype[i]=0;
268
for (int i=0;i<100;i++) fList[i]=NULL;
268
for (int i=0;i<100;i++) fList[i]=NULL;
269
 
269
 
270
Init();
270
Init();
271
 
271
 
272
TFile * f = new TFile(TString::Format("../../data/hadron-%d.root",fData)); // Open a data file
272
TFile * f = new TFile(TString::Format("../../data/hadron-%d.root",fData)); // Open a data file
273
if(f->IsZombie()) {  send_message(0,TString::Format("File %d not found\n",fData), 0 );  return; }  
273
if(f->IsZombie()) {  send_message(0,TString::Format("File %d not found\n",fData), 0 );  return; }  
274
TTree * t =(TTree *) f-> Get( "T"); // Obtain a pointer to a tree of "event" data in the file
274
TTree * t =(TTree *) f-> Get( "T"); // Obtain a pointer to a tree of "event" data in the file
275
BEvent * mevent = new BEvent(); // Create a  "BEvent" object where data from the file will be loaded
275
BEvent * mevent = new BEvent(); // Create a  "BEvent" object where data from the file will be loaded
276
TBranch * branch = t-> GetBranch( "BEvent"); // Obtain a branch for "BEvent" in the tree
276
TBranch * branch = t-> GetBranch( "BEvent"); // Obtain a branch for "BEvent" in the tree
277
branch-> SetAddress(&mevent); // Register created "BEvent" object to the branch
277
branch-> SetAddress(&mevent); // Register created "BEvent" object to the branch
278
TH1F *fHnprt= new TH1F("h100", "Number of particles in the event;N particles;N events", 50, -0.5, 49.5);
278
TH1F *fHnprt= new TH1F("h100", "Number of particles in the event;N particles;N events", 50, -0.5, 49.5);
279
 
279
 
280
 
280
 
281
 
281
 
282
send_message(0, TString::Format("<br>Number of Events in the file %lld<br>\n", t->GetEntries() ),0);
282
send_message(0, TString::Format("<br>Number of Events in the file %lld<br>\n", t->GetEntries() ),0);
283
TStopwatch timer;
283
TStopwatch timer;
284
timer.Start();
284
timer.Start();
285
int nev  = 0;
285
int nev  = 0;
286
int i    =TMath::Min(fNfirst, (UInt_t) t-> GetEntries());
286
int i    =TMath::Min(fNfirst, (UInt_t) t-> GetEntries());
287
int cNeve=TMath::Min(fNfirst+fNeve, (UInt_t) t-> GetEntries());
287
int cNeve=TMath::Min(fNfirst+fNeve, (UInt_t) t-> GetEntries());
288
int fPart = fPrint;
288
int fPart = fPrint;
289
int totaltracks = 0;
289
int totaltracks = 0;
290
while (i<cNeve){
290
while (i<cNeve){
291
 t-> GetEntry(i); // Read the content of the event from the file
291
 t-> GetEntry(i); // Read the content of the event from the file
292
 fList[0]= mevent->GetParticleList();
292
 fList[0]= mevent->GetParticleList();
293
 
293
 
294
 event();
294
 event();
295
 
295
 
296
 int progress = (100*i)/cNeve;
296
 int progress = (100*i)/cNeve;
297
 if (i%10000==0) send_message(2, TString::Format("Event %d\n",i), progress);
297
 if (i%10000==0) send_message(2, TString::Format("Event %d\n",i), progress);
298
 
298
 
299
 int nprt=0;
299
 int nprt=0;
300
 if (nev>100) fPrint = 0; // disable particle prints for huge numer of events
300
 if (nev>100) fPrint = 0; // disable particle prints for huge numer of events
301
 if (fPrint) sprintf(sList,"Primary particle list for Event %d<br/><table class='plist' ><tr><th>N<th>px(GeV/c)<th>py(GeV/c)<th>pz(GeV/c)<th>p(GeV/c)<th>Energy(GeV)<th>Charge<th>ID<th></tr>", i);
301
 if (fPrint) sprintf(sList,"Primary particle list for Event %d<br/><table class='plist' ><tr><th>N<th>px(GeV/c)<th>py(GeV/c)<th>pz(GeV/c)<th>p(GeV/c)<th>Energy(GeV)<th>Charge<th>ID<th></tr>", i);
302
 for(TIter next(fList[0]); BParticle * p =(BParticle *) next();) {
302
 for(TIter next(fList[0]); BParticle * p =(BParticle *) next();) {
303
   nprt++;
303
   nprt++;
304
   if (fPrint) sprintf(sList,"%s<tr><td>%d<td>%g<td>%g<td>%g<td>%g<td>%g<td>%1.0f<td>%s</tr>",sList,nprt, p->px(),p->py(),p->pz(),p->GetMomentum(),p->e(), p->charge(),names[p->pid()] );
304
   if (fPrint) sprintf(sList,"%s<tr><td>%d<td>%g<td>%g<td>%g<td>%g<td>%g<td>%1.0f<td>%s</tr>",sList,nprt, p->px(),p->py(),p->pz(),p->GetMomentum(),p->e(), p->charge(),names[p->pid()] );
305
 }
305
 }
306
 if (fPart) fHnprt->Fill(nprt);
306
 if (fPart) fHnprt->Fill(nprt);
307
 totaltracks += nprt;
307
 totaltracks += nprt;
308
 if (fPrint) {
308
 if (fPrint) {
309
   sprintf(sList,"%s</table>",sList);
309
   sprintf(sList,"%s</table>",sList);
310
   send_message(0, TString(sList),progress);
310
   send_message(0, TString(sList),progress);
311
   nev++;
311
   nev++;
312
 }
312
 }
313
 mevent-> Clear();  // Clear the memory.
313
 mevent-> Clear();  // Clear the memory.
314
 for (int k=0;k<100;k++) if (fList[k]!=0) fList[k]->Clear();
314
 for (int k=0;k<100;k++) if (fList[k]!=0) fList[k]->Clear();
315
 i++;
315
 i++;
316
}
316
}
317
double avgtracks=(i)?float(totaltracks)/i:0;
317
double avgtracks=(i)?float(totaltracks)/i:0;
318
send_message(0, TString::Format("Number of events processed: %d<br/>\nNumber of particles: %d<br/>\nAverage number of particles per event %f<br/>\n", i, totaltracks, avgtracks ),100);
318
send_message(0, TString::Format("Number of events processed: %d<br/>\nNumber of particles: %d<br/>\nAverage number of particles per event %f<br/>\n", i, totaltracks, avgtracks ),100);
319
 
319
 
320
if (fPart) send_message(1,TBufferJSON::ConvertToJSON(fHnprt),100 );
320
if (fPart) send_message(1,TBufferJSON::ConvertToJSON(fHnprt),100 );
321
 
321
 
322
 
322
 
323
for (int i=0;i<100;i++) if (fH[i]!=0) send_message(1,TBufferJSON::ConvertToJSON(fH[i]),100 );
323
for (int i=0;i<100;i++) if (fH[i]!=0) send_message(1,TBufferJSON::ConvertToJSON(fH[i]),100 );
324
 
324
 
325
TDatime d;
325
TDatime d;
326
timer.Stop();
326
timer.Stop();
327
send_message(3, TString::Format("'%s', %d, %f, %f", d.AsSQLString(),i, timer.RealTime(), timer.CpuTime() ),100);
327
send_message(3, TString::Format("'%s', %d, %f, %f", d.AsSQLString(),i, timer.RealTime(), timer.CpuTime() ),100);
328
 
328
 
329
}
329
}
330
 
330
 
331
 
331
 
332
 
332