StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
makeToySpin.C
1 #include <time.h>
2 
3 TH1F* makeToySpin(int nEvents=10000,
4  float AL=-.25, float P1=0.35, float P2=0.25,
5  float AN=0., float dQ1=0.0,float dQ2=0.0,
6  float ALL=-0.4)
7 {
8 
9  float n[4]; // blue=1, yellow=2
10  n[0]=1 +AL*P1 +AL*P2 +AN*dQ1 -AN*dQ2 +ALL*P1*P2; // STAR pol B+ Y +
11  n[1]=1 +AL*P1 -AL*P2 +AN*dQ1 +AN*dQ2 -ALL*P1*P2; // STAR pol B+ Y -
12  n[2]=1 -AL*P1 +AL*P2 -AN*dQ1 -AN*dQ2 -ALL*P1*P2; // STAR pol B- Y +
13  n[3]=1 -AL*P1 -AL*P2 -AN*dQ1 +AN*dQ2 +ALL*P1*P2; // STAR pol B- Y -
14 
15  //assuming the luminosities of all four configurations are the same, the likelihood of a given W event being from configuration i is:
16  float prob[4], total_prob, cumulative_prob[4];
17  for (int i=0;i<4;i++)
18  {
19  prob[i]=n[i]/(n[0]+n[1]+n[2]+n[3]);
20  total_prob+=prob[i];
21  printf("i=%d prob=%f\n",i, prob[i]);
22  cumulative_prob[i]=total_prob;
23  }
24  //sanity check:
25  for (int i=0,;i<4;i++)
26  assert(prob[i]>0);
27 
28  time_t t;
29  time(&t);
30  TRandom3 *rand=new TRandom3(t);
31 
32 char tit[1000];
33  sprintf(tit,"toy spin4 : AL=%.2f P1=%.2f P2=%.2f AN=%.2f dQ1=%.2f dQ2=%.2f ALL=%.2f;spin4 state;counts",AL,P1,P2,AN,dQ1,dQ2,ALL);
34 
35 TH1F* toySpin=new TH1F("toySpin4",tit,16,-0.5,15.5);
36 
37  for (int i=0;i<nEvents;i++)
38  {
39  float rnd=rand->Rndm();
40  if (rnd<cumulative_prob[0]) toySpin->Fill(10); // STAR pol B+ Y +
41  else if (rnd<cumulative_prob[1]) toySpin->Fill(9); // STAR pol B+ Y -
42  else if (rnd<cumulative_prob[2]) toySpin->Fill(6); // STAR pol B- Y +
43  else if (rnd<cumulative_prob[3]) toySpin->Fill(5); // STAR pol B- Y -
44  }
45 
46  toySpin->Draw();
47 
48  TFile *output=new TFile ("toySpin.hist.root","RECREATE");
49  toySpin->Write();
50  output->Close();
51  return toySpin;
52 }