Subversion Repositories f9daq

Compare Revisions

Ignore whitespace Rev 266 → Rev 267

/belle2/masterclass/src/Blab2.cc
23,6 → 23,7
public:
UInt_t fNeve;
UInt_t fNfirst;
UInt_t fPrint;
int fData;
TH1F *fH[100];
UInt_t fHtype[100];
35,7 → 36,7
void Process();
void h1d(const char *varname, const char *name, int nbins, double min, double max, int id );
int selector(int pin, int charge, SIMPLEPID particlename, int hid, int pout );
int combiner(int id0 ,int id1 , SIMPLEPID particlename, double min, double max, int hid, int id );
int combiner(int id0 ,int id1 , int same, SIMPLEPID particlename, double min, double max, int hid, int id );
int fix_mass(int id);
int Fill(int hid, BParticle *p);
void plist(int i);
46,7 → 47,7
 
ClassImp(Blab2)
 
Blab2::Blab2():fNfirst(0), fNeve(0), fData(0){
Blab2::Blab2():fNfirst(0), fNeve(0), fData(0), fPrint(0) {
 
Process();
};
78,7 → 79,7
return 0;
}
 
int Blab2::combiner(int _p0, int _p1,SIMPLEPID pid, double min, double max, int hid, int _p2 ){
int Blab2::combiner(int _p0, int _p1,int same, SIMPLEPID pid, double min, double max, int hid, int _p2 ){
// Loop over all the particles in both lists.
if (_p0 < 0 ) _p0 =0;
if (_p1 < 0 ) _p1 =0;
89,13 → 90,12
for(TIter next1(fList[_p0]);BParticle * p1 =(BParticle *) next1();) {
// the second loop
for(TIter next2 = (_p0!=_p1) ? TIter(fList[_p1]): TIter(next1) ; BParticle * p2 =(BParticle *) next2();) {
if (p1==p2) continue;
// in the case the second parti
for(TIter next2 = (_p0!=_p1 && same==0) ? TIter(fList[_p1]): TIter(next1) ; BParticle * p2 =(BParticle *) next2();) {
if (p1==p2) continue; // do not use the same particle in the combinations
BParticle p = *p1 + *p2; // Combine two particles into a new particle
if (p.InMassRange(min, max)){
//SIMPLEPID pid = PION; // should be set to particlename
p.SetPid(pid);
p.SetPid(pid); // set PID to particlename to fix the particle mass
TClonesArray& list = *fList[_p2];
new (list[nprt++]) BParticle ( p ); // create a new entry in kslist list of particles
Fill(hid, &p);
152,6 → 152,7
 
void Blab2::Process(){
 
char sList[0xFFFF];
for (int i=0;i<100;i++) fH[i]=NULL;
for (int i=0;i<100;i++) fHtype[i]=0;
for (int i=0;i<100;i++) fList[i]=NULL;
165,14 → 166,14
TBranch * branch = t-> GetBranch( "BEvent"); // Obtain a branch for "BEvent" in the tree
branch-> SetAddress(&mevent); // Register created "BEvent" object to the branch
TH1F *fHnprt= new TH1F("h100", "Number of particles in the event;N particles;N events", 50, -0.5, 49.5);
TH1F *fHid= new TH1F("h101", "Particle type;ID;N particles", 6, -0, 6);
 
const char *names[6]={"PHOTON", "ELECTRON", "PION", "MUON", "KAON", "PROTON"};
TH1F *fHid= new TH1F("h101", "Particle types;ID;N particles", 6, -0, 6);
const char *names[12]={"PHOTON", "ELECTRON", "PION", "MUON", "KAON", "PROTON", "JPSI", "D", "DSTAR", "B","KS", "ALL" };
for (int i=1;i<=6;i++) fHid->GetXaxis()->SetBinLabel(i,names[i-1]);
 
send_message(0, TString::Format("Number of Entries in the file %lld\n", t->GetEntries() ),0);
send_message(0, TString::Format("<br>Number of Events in the file %lld<br>\n", t->GetEntries() ),0);
TStopwatch timer;
timer.Start();
int nev = 0;
int i =TMath::Min(fNfirst, (UInt_t) t-> GetEntries());
int cNeve=TMath::Min(fNfirst+fNeve, (UInt_t) t-> GetEntries());
while (i<cNeve){
181,15 → 182,23
event();
if (i%10000==0) send_message(2, TString::Format("Event %d\n",i), (100*i)/cNeve);
int progress = (100*i)/cNeve;
if (i%10000==0) send_message(2, TString::Format("Event %d\n",i), progress);
 
int nprt=0;
if (nev>100) fPrint = 0; // disable particle prints for huge numer of events
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);
for(TIter next(fList[0]); BParticle * p =(BParticle *) next();) {
nprt++;
fHid->Fill(p->pid());
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()] );
}
fHnprt->Fill(nprt);
 
if (fPrint) {
sprintf(sList,"%s</table>",sList);
send_message(0, TString(sList),progress);
nev++;
}
mevent-> Clear(); // Clear the memory.
for (int k=0;k<100;k++) if (fList[k]!=0) fList[k]->Clear();
i++;