Hello, I wrote this code to calculate the emittance of particles
Double_t emittance=0.;
Double_t x=0;
Double_t x2=0;
Double_t xp=0;
Double_t xp2=0;
Double_t xxp=0;
Double_t sigmax2=0;
Double_t sigmaxp2=0;
Double_t sigmaxsigmaxp=0;
int jentry;
int nentries = ts->GetEntries();
double xv[10];
double xpv[10];
ts->SetBranchAddress("PositionDirection.x", &xv[0]);
ts->SetBranchAddress("SecondaryParticleAng.x", &xpv[0]);
//ts->SetBranchAddress("PositionDirection.y", &xv[0]);
//ts->SetBranchAddress("SecondaryParticleAng.y", &xpv[0]);
for(jentry=0; jentry<nentries;jentry++) {
ts->GetEntry(jentry);
x+=xv[0];
x2+=xv[0]*xv[0];
xp+=xpv[0];
xp2+=xpv[0]*xpv[0];
xxp+=xv[0]*xpv[0];
}
x*=1./nentries;
x2*=1./nentries;
xp*=1./nentries;
xp2*=1./nentries;
xxp*=1./nentries;
sigmax2=x2-x*x;
sigmaxp2=xp2-xp*xp;
sigmaxsigmaxp=xxp-x*xp;
emittance=sigmax2*sigmaxp2-sigmaxsigmaxp;
emittance=TMath::Sqrt(emittance);
emittance*=1000000;
std::cout << "N = " << nentries << "\t x = " << x << "\t x2 = " << x2 << " \t xp = " << xp << " \t xp2= " << xp2 << " \t xxp= " << xxp << std::endl;
std::cout << "sigmax2 = " << sigmax2 << "\t sigmaxp2 = " << sigmaxp2 << "\t sigmaxsigmaxp = " << sigmaxsigmaxp << " \t emittance = " << emittance << std::endl;
results << "N = " << nentries << "\t x = " << x << "\t x2 = " << x2 << " \t xp = " << xp << " \t xp2= " << xp2 << " \t xxp= " << xxp << endl;
results << "sigmax2 = " << sigmax2 << "\t sigmaxp2 = " << sigmaxp2 << "\t sigmaxsigmaxp = " << sigmaxsigmaxp << " \t emittance = " << emittance << endl;
Now, instead of to get all the entries of the TTree and each entries just one time using
int nentries = ts->GetEntries();
I must get random entries and I can also get the same entry more than one time and to calculate the emittance by using these values.
I mean:
-
In my TTree ts I’ve 10^6 entries, but I want to get rando, for example, 10^4 entries allowing the possibility to get the same entry more time. Moreover, notice that I don’t want to get the first 10^4 entries…but I want to get them randomly, i.e. for exampl I get the entry number 900000 and I don’t get the entry number1000.
-
I use this code to calculate the emittance using the random 10^4 entries.
-
I repeat this operation n times…for example, I can decide to get 100 times the 10^4 random entries.
So, I would ask you how I can get a fixed number of entries randomly.
Thank you
Please read tips for efficient and successful posting and posting code
ROOT Version: Not Provided
Platform: Not Provided
Compiler: Not Provided