Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:16:31

0001 #include "TRandom3.h"
0002 
0003 
0004 void injectAsymmetry()
0005 {
0006   //============================= Get spin pattern manually - use '111x111_P4' ================================//
0007   int bpat[120] = {0};
0008   int ypat[120] = {0};
0009   std::string preset_pattern_blue = "-+-++-+-+-+--+-++-+--+-+-+-++-+-+-+--+-++-+--+-+-+-++-+-+-+--+-++-+--+-+-+-++-+-+-+--+-++-+--+-+-+-++-+-+-+--+-*********";
0010   std::string preset_pattern_yellow = "--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--++--+*********";
0011   
0012   for (int i = 0; i < 120; i++)
0013   {
0014     if (preset_pattern_blue.at(i) == '+') {bpat[i] = 1;}
0015     else if (preset_pattern_blue.at(i) == '-'){bpat[i] = -1;}
0016     else if (preset_pattern_blue.at(i) == '*'){bpat[i] = 10;}
0017 
0018     if (preset_pattern_yellow.at(i) == '+'){ypat[i] = 1;}
0019     else if (preset_pattern_yellow.at(i) == '-'){ypat[i] = -1;}
0020     else if (preset_pattern_yellow.at(i) == '*'){ypat[i] = 10;}
0021 
0022   }
0023 
0024 
0025   int bunchnumber;
0026   int showerCutN, showerCutS;
0027   float n_x, n_y, s_x, s_y;
0028   float zdcN1_adc, zdcN2_adc, zdcS1_adc, zdcS2_adc;
0029   float veto_NF, veto_NB, veto_SF, veto_SB;
0030 
0031   TTree *smdHits = new TTree();
0032   smdHits  = new TTree("smdHits","smdHits");
0033   smdHits -> SetDirectory(0);
0034   smdHits -> Branch("bunchnumber",  &bunchnumber, "bunchnumber/I");
0035   smdHits -> Branch("showerCutN",  &showerCutN, "showerCutN/I");
0036   smdHits -> Branch("showerCutS",  &showerCutS, "showerCutS/I");
0037   smdHits -> Branch("n_x", &n_x, "n_x/F");
0038   smdHits -> Branch("n_y", &n_y, "n_y/F");
0039   smdHits -> Branch("s_x", &s_x, "s_x/F");
0040   smdHits -> Branch("s_y", &s_y, "s_y/F");
0041   smdHits -> Branch("zdcN1_adc", &zdcN1_adc, "zdcN1_adc/F");
0042   smdHits -> Branch("zdcN2_adc", &zdcN2_adc, "zdcN2_adc/F");
0043   smdHits -> Branch("zdcS1_adc", &zdcS1_adc, "zdcS1_adc/F");
0044   smdHits -> Branch("zdcS2_adc", &zdcS2_adc, "zdcS2_adc/F");
0045   smdHits -> Branch("veto_NF", &veto_NF, "veto_NF/F");
0046   smdHits -> Branch("veto_NB", &veto_NB, "veto_NB/F");
0047   smdHits -> Branch("veto_SF", &veto_SF, "veto_SF/F");
0048   smdHits -> Branch("veto_SB", &veto_SB, "veto_SB/F");
0049 
0050 
0051   TRandom3 Rand; 
0052   for (int i = 0; i < 1000000; i++)
0053   {
0054 
0055     if (i % 100000 == 0){std::cout << "entry " << i << std::endl;}
0056     bunchnumber = Rand.Uniform(0,111);
0057     //n_y = Rand.Gaus(0, 1.5);
0058     //s_y = Rand.Gaus(0, 1.5);
0059 
0060     n_y = Rand.Gaus(0.8, 1.5);
0061     s_y = Rand.Gaus(0, 1.5);
0062     
0063     if (bpat[bunchnumber] == 1)
0064     {
0065       n_x = Rand.Gaus(-0.01, 1.5);
0066     }
0067     else if (bpat[bunchnumber] == -1)
0068     {
0069       n_x = Rand.Gaus(0.01, 1.5);
0070     }
0071 
0072     if (ypat[bunchnumber] == 1)
0073     {
0074       s_x = Rand.Gaus(-0.01, 1.5);
0075     }
0076     else if (ypat[bunchnumber] == -1)
0077     {
0078       s_x = Rand.Gaus(0.01, 1.5);
0079     }
0080 
0081     zdcN1_adc = Rand.Uniform(0,1000); //keep all events above zdc cuts
0082     zdcN2_adc = Rand.Uniform(0,1000);
0083     zdcS1_adc = Rand.Uniform(0,1000);
0084     zdcS2_adc = Rand.Uniform(0,1000);
0085     veto_NF = Rand.Uniform(0,1); //keep all events within veto cut
0086     veto_NB = Rand.Uniform(0,1);
0087     veto_SF = Rand.Uniform(0,1);
0088     veto_SB = Rand.Uniform(0,1);
0089 
0090     showerCutN = Rand.Uniform(0,1) > 0.5 ? 1 : 1; //keep all shower cuts 
0091     showerCutS = Rand.Uniform(0,1) > 0.5 ? 1 : 1; 
0092    
0093     smdHits->Fill();
0094 
0095   }
0096 
0097   TFile *outfile = new TFile("FakeAsymmetry.root","RECREATE");
0098   
0099   smdHits->Write();
0100   outfile->Write();
0101   outfile->Close();
0102 
0103 }