예제 #1
0
void R_scin_eff(){

  TString gDir = "/w/halla-2/e08014/Rootfiles/";
  Int_t  run_number;    TString filename;

  ofstream myfile; myfile.open("R_Scin_Eff.txt");
  ifstream runfile("../../runsample.txt"); const int NUMR = 1000;
 
  TString GeneralCut = "abs(R.tr.x)<0.75 && abs(R.tr.y)<0.55 && abs(R.tr.th)<0.15 && abs(R.tr.ph)<0.045";
  TString TriggerCut1 = "((DBB.evtypebits>>1)&1)";
  TString TriggerCut2 = "((DBB.evtypebits>>2)&1)";
  TString TriggerCut6 = "((DBB.evtypebits>>6)&1)";
  
  TFile *geocut = new TFile(Form("R_Geo_Cut_%d.root",run_number), "UPDATE");
  
  TCutG* phi_y_cut = (TCutG*) gROOT->FindObject("phi_y_cut"); //looking for old cut definition
  TCutG* theta_dp_cut = (TCutG*) gROOT->FindObject("theta_dp_cut"); //looking for old cut definition
  
  if(!phi_y_cut || !theta_dp_cut){
    
    TCanvas *c1= new TCanvas("c1","c1",1000,600);
    c1->Divide(2,1); 
    TPad *bpad = gPad;

    //    runfile >> run_number;
    TString file1 = gDir + Form("e08014_less_%d.root",3590);
    TChain *T1 = new TChain("T");
    T1->Add(file1);

    cerr <<"========= Create Acceptance CutG ..."<<endl;
    c1->cd(1);
    T1->Draw("R.tr.tg_ph:R.tr.tg_y>>gc1(300,-0.05,0.05,300,-0.05,0.05)",GeneralCut,"colz");
    gc1->SetXTitle("R.tr.tg_y"); gc1->SetYTitle("R.tr.tg_ph");  c1->Update();
    phi_y_cut = (TCutG*) (bpad->WaitPrimitive("CUTG", "CutG"));c1->Update();
    phi_y_cut->SetName("phi_y_cut"); phi_y_cut->SetVarX("R.tr.tg_y"); phi_y_cut->SetVarY("R.tr.tg_ph");
    cerr <<"Phi vs Y Done!"<<endl;

    c1->cd(2);
    T1->Draw("R.tr.tg_th:R.tr.tg_dp>>gc2(300,-0.05,0.05,300,-0.15,0.15)",GeneralCut,"colz");
    gc2->SetXTitle("R.tr.tg_dp"); gc2->SetYTitle("R.tr.tg_th");  c1->Update()
    theta_dp_cut = (TCutG*) (bpad->WaitPrimitive("CUTG", "CutG"));c1->Update();
    theta_dp_cut->SetName("theta_dp_cut"); theta_dp_cut->SetVarX("R.tr.tg_dp"); theta_dp_cut->SetVarY("R.tr.tg_th");
    cerr <<"Theta vs Dp Done!"<<endl;

    geocut->cd();
    phi_y_cut->Write("", TObject::kOverwrite); // Overwrite old cut
    theta_dp_cut->Write("", TObject::kOverwrite); // Overwrite old cut

    T1->Delete();
  }
  
  TCutG* electron_cut = (TCutG*) gROOT->FindObject("electron_cut"); //looking for old cut definition
   
  if(!electron_cut ){
    
    //    runfile >> run_number;
    TString file2 = gDir + Form("e08014_less_%d.root",3590);
    TChain *T2 = new TChain("T");
    T2->Add(file2);

    TCanvas *c2= new TCanvas("c2","c2",800,800);
    //  c2->Divide(2,1); 
    TPad *cpad = gPad;

    cerr <<"========= Create Electron and Pion CutG On Calorimeter ..."<<endl;
    c2->cd(1);
    T2->Draw("R.sh.asum_c:R.ps.asum_c>>gc3(300,-100.,6000.0,300,-100.0,6000.0)",GeneralCut,"colz");c2->Update();
    electron_cut = (TCutG*) (cpad->WaitPrimitive("CUTG", "CutG"));c2->Update();
    electron_cut->SetName("electron_cut"); electron_cut->SetVarX("R.ps.asum_c"); electron_cut->SetVarY("R.sh.asum_c");
    cerr <<"Electron Done!"<<endl;

     geocut->cd();
     electron_cut->Write("", TObject::kOverwrite); // Overwrite old cut

     T2->Delete();
  }
 
   TString cut_t1 = TriggerCut1+"&&" + GeneralCut + "&&phi_y_cut && theta_dp_cut "+ "&&electron_cut";
   TString cut_t2 = TriggerCut2+"&&" + GeneralCut + "&&phi_y_cut && theta_dp_cut "+ "&&electron_cut";  
   TString cut_t6 = TriggerCut6+"&&" + GeneralCut + "&&phi_y_cut && theta_dp_cut "+ "&&electron_cut";
  
  // TString cut_t1 = TriggerCut1+"&&" + GeneralCut +  "&&electron_cut";
  // TString cut_t2 = TriggerCut2+"&&" + GeneralCut +  "&&electron_cut";
  // TString cut_t6 = TriggerCut6+"&&" + GeneralCut +  "&&electron_cut";
  
//   TString cut_t1 = TriggerCut1+"&&" + GeneralCut;
//   TString cut_t2 = TriggerCut2+"&&" + GeneralCut;
//   TString cut_t6 = TriggerCut6+"&&" + GeneralCut;

  float rnum[NUMR]; 
  float T1eff[NUMR], T6eff[NUMR];

  int jj;  float evt,evt0,evt1,evt2,evt6;
  int ps1=1,ps2=1, ps3=1,ps4=1,ps6=1,ps7=1;

  while(!(runfile.eof())){
    runfile >> run_number; rnum[jj] = run_number;
    filename = gDir + Form("e08014_less_%d.root",run_number);
    //   TChain *T = new TChain("T");
    //   T->Add(filename);
    TFile  *ff1 = new TFile(filename);
    TTree * T = (TTree *) ff1->GetObjectChecked("T", "TTree");
    
    TArrayI prescales = Run_Data->GetParameters()->GetPrescales();
    
    cout << "Run: " << rnum[jj] << endl;
    //for( int i = 0; i<prescales->GetSize(); ++i )   
    for( int i = 0; i<8; ++i ) 
      cout << "prescale[" << i+1 << "] = " << prescales[i] << ",   ";
    cout<<endl; 
    
    ps1 = prescales[0]; ps2 = prescales[1]; ps3 = prescales[2];
    ps4 = prescales[3]; ps6 = prescales[5]; ps7 = prescales[6];

    evt1 = T->GetEntries(cut_t1);
    evt2 = T->GetEntries(cut_t2);
    evt6 = T->GetEntries(cut_t6);
    
    evt = ps2*evt2 + ps1*evt1;
    evt0 = ps2*evt2 + ps6*evt6;

    T1eff[jj] = 100.0*evt1/evt;
    T6eff[jj] = 100.0*evt6/evt0;
    
    cerr << "--- Scin trigger Eff for run "<< rnum[jj] <<" is "
	 << T1eff[jj] <<"% for T1, and "
	 << T6eff[jj] <<"% for T6."<<endl;

    myfile << setiosflags(ios::left) << setw(5) << setiosflags(ios::fixed) << setprecision(1) << run_number << "   ";
    myfile << setiosflags(ios::left) << setw(7) << setiosflags(ios::fixed) << setprecision(4) << T1eff[jj] << " ";
    myfile << setiosflags(ios::left) << setw(7) << setiosflags(ios::fixed) << setprecision(4) << T6eff[jj] << endl;;

    jj++; ff1->Close();
  }
  
 
  const int TTT1 = jj;
  gStyle->SetOptStat(0);
  TCanvas *cc = new TCanvas("cc","Trigger 1",1200,800);
  // cc->Divide(1,2);cc->cd(1);
  TH2F *hh = new TH2F("hh","",TTT1,3500,4300,TTT1,-10.0,110.0);
  hh->GetXaxis()->SetTitle("Run Number");
  hh->GetXaxis()->CenterTitle();
  hh->GetYaxis()->SetTitle("HRS-R Scintillator Efficiency (%)");
  hh->GetYaxis()->CenterTitle();
  hh->Draw();
  
  TGraph *t1 = new TGraph(TTT1,rnum,T1eff);
  t1->SetMarkerStyle(20);
  t1->SetMarkerColor(2);
  t1->Draw("P");
  
  TGraph *t6 = new TGraph(TTT1,rnum,T6eff);
  t6->SetMarkerStyle(21);
  t6->SetMarkerColor(4);
  t6->Draw("P");
  
  TLegend *l1 = new TLegend(0.4,0.4,0.6,0.6);
  l1->AddEntry(t1,"T1/(T1+T2)","p");
  l1->AddEntry(t6,"T6/(T6+T2)","p");
  l1->Draw();
}