Skip to content
Snippets Groups Projects
plot_hms_scalers.C 11.8 KiB
Newer Older
  • Learn to ignore specific revisions
  • // UserScript.C
    //
    // Helper macro to build additional histograms
    
    void UserScript()
    {
      //
      const UInt_t NTRIGS  = 6;
      const TString trig_names[NTRIGS]={"h1X","h1Y","h1Xh1y","h2X","h2Y","hTrig"};
      TH1F* hScalTrig[NTRIGS];
      Double_t trig_scal[NTRIGS];
      Double_t trig_ave[NTRIGS]={0,0,0,0,0,0};
        TH1F* hAveTrig;
        hAveTrig=new TH1F("AveTrig","Ave Trig Rates ",NTRIGS,0,NTRIGS);
      //
      const UInt_t NBCMS  = 3;
      const TString bcm_names[NBCMS] = {"BCM1", "BCM2","Unser"};
        TH1F* hScalBCM[NBCMS];
        TH1F* hCurBCM[NBCMS];
        TH1F* hAveCurBCM;
        hAveCurBCM=new TH1F("AveCurBCM","Ave Current ",NBCMS,0,NBCMS);
        TH1F* hAveRateBCM;
        hAveRateBCM=new TH1F("AveRateBCM","Ave BCM Rate ",NBCMS,0,NBCMS);
       Double_t bcm_scal[NBCMS];
       Double_t bcm_cur[NBCMS];
       Double_t bcm_ave_cur[NBCMS]={0.,0.,0.};
       Double_t bcm_ave_rate[NBCMS]={0.,0.,0.};
       Double_t bcm_offset[NBCMS]={250000,250000,393000};
       Double_t bcm_slope[NBCMS]={4500*1.15,4500,4000};
      //
      const UInt_t NPLANES  = 4;
      const TString plane_names[NPLANES] = {"1x", "1y", "2x", "2y"};
      const UInt_t  nbars[NPLANES] = {16, 10, 16, 10};
      const UInt_t  nbars_low[NPLANES] = {1, 1, 1, 1};
      TH1F* hScalHodNegEv[NPLANES][16];
      TH1F* hScalHodPosEv[NPLANES][16];
      TH1F* hScalHodNeg[NPLANES];
      TH1F* hScalHodPos[NPLANES];
      Double_t hod_scalneg[NPLANES][16];
      Double_t hod_scalpos[NPLANES][16];
      Double_t hod_scalneg_rate[NPLANES][16];
      Double_t hod_scalpos_rate[NPLANES][16];
      Double_t good_bcm=0;
      Double_t good_bcm_limit=265000.;
      //
     TTree *T=(TTree*)gDirectory->Get("TSHS");
      Int_t totev=T->GetEntries();
      // totev=400;
      //
      TString i2dbarname;TString h2dttitle;TString h2dtname;TString list_name;
      for(UInt_t ip = 0; ip < NTRIGS; ip++) {
         h2dttitle= trig_names[ip]+"; Event Number  ; Rate ";
         h2dtname="uhScalTrig"+trig_names[ip];
        hScalTrig[ip]= new TH1F(h2dtname,h2dttitle,totev,0,totev);
        list_name ="HS"+trig_names[ip]+"r";
        T->SetBranchAddress(list_name,&trig_scal[ip]);
      }
      //
      for(UInt_t ip = 0; ip < NBCMS; ip++) {
         h2dttitle= bcm_names[ip]+"; Event Number  ;  Rate ";
         h2dtname="uhScal"+bcm_names[ip];
        hScalBCM[ip]= new TH1F(h2dtname,h2dttitle,totev,0,totev);
         h2dttitle= bcm_names[ip]+"; Event Number  ; Current  ";
         h2dtname="uhCur"+bcm_names[ip];
        hCurBCM[ip]= new TH1F(h2dtname,h2dttitle,totev,0,totev);
        list_name ="HS"+bcm_names[ip]+"r";
        T->SetBranchAddress(list_name,&bcm_scal[ip]);
      }
      //
      for(UInt_t ip = 0; ip < NPLANES; ip++) {
    	      h2dttitle= "Beam On,Neg"+plane_names[ip]+"; Scintillator Bar  ; Ave Rate ";
    	      h2dtname="uhScalHodNeg"+plane_names[ip];
                  hScalHodNeg[ip]= new TH1F(h2dtname,h2dttitle,nbars[ip],0.5,nbars[ip]+.5);
    	      h2dttitle= "Beam on,Pos"+plane_names[ip]+"; Scintillator Bar  ; Ave Rate   ";
    	      h2dtname="uhScalHodPos"+plane_names[ip];
                  hScalHodPos[ip]= new TH1F(h2dtname,h2dttitle,nbars[ip],0.5,nbars[ip]+.5);
     	    for(UInt_t ibar = nbars_low[ip]-1; ibar < nbars[ip]; ibar++) {
    	      i2dbarname = Form("%02d",ibar+1);
    	      h2dttitle= "Neg Hod"+plane_names[ip]+i2dbarname+"; Event Number  ; Rate ";
    	      h2dtname="uhScalEvHodNeg"+plane_names[ip]+"Pad"+i2dbarname;
                 hScalHodNegEv[ip][ibar]= new TH1F(h2dtname,h2dttitle,totev,0,totev);
    	      h2dttitle= "Pos Hod"+plane_names[ip]+i2dbarname+"; Event Number  ; Rate  ";
    	      h2dtname="uhScalEvHodPos"+plane_names[ip]+"Pad"+i2dbarname;
                  hScalHodPosEv[ip][ibar]= new TH1F(h2dtname,h2dttitle,totev,0,totev);
                  hod_scalneg_rate[ip][ibar]=0;
                  hod_scalpos_rate[ip][ibar]=0;
    	    }
      }
      //
      //
      for(UInt_t ip = 0; ip < NPLANES; ip++) {
    	    for(UInt_t ibar = nbars_low[ip]-1; ibar < nbars[ip]; ibar++) {
    	      i2dbarname = Form("%d",ibar+1);
    	       list_name ="HShhod"+plane_names[ip]+i2dbarname+"Mr";
    	       T->SetBranchAddress(list_name,&hod_scalneg[ip][ibar]);
    	       list_name ="HShhod"+plane_names[ip]+i2dbarname+"Pr";
    	       T->SetBranchAddress(list_name,&hod_scalpos[ip][ibar]);
    	    }
      }
      // Loop over the events, filling the histograms
      //  cout << " looping over data " << endl;
      for(UInt_t iev = 0; iev < totev; iev++) {
        //    cout << " iev = " << iev << endl;
        //       cout << " get entry = " << iev << endl;
        T->GetEntry(iev);
        //
        for(UInt_t ip = 0; ip < NTRIGS; ip++) {
             hScalTrig[ip]->SetBinContent(iev,trig_scal[ip]);
            if (bcm_scal[0] > good_bcm_limit) trig_ave[ip]+=trig_scal[ip];
         }
        //
        for(UInt_t ip = 0; ip < NBCMS; ip++) {
             hScalBCM[ip]->SetBinContent(iev,bcm_scal[ip]);
             bcm_cur[ip]=(bcm_scal[ip]-bcm_offset[ip])/bcm_slope[ip];
             hCurBCM[ip]->SetBinContent(iev,bcm_cur[ip]);         
             if (bcm_scal[0] > good_bcm_limit) bcm_ave_cur[ip]+=bcm_cur[ip];
             if (bcm_scal[0] > good_bcm_limit) bcm_ave_rate[ip]+=bcm_scal[ip];
         }
           if (bcm_scal[0] > good_bcm_limit) good_bcm++;
    //
      for(UInt_t ip = 0; ip < NPLANES; ip++) {
    	    for(UInt_t ibar = nbars_low[ip]-1; ibar < nbars[ip]; ibar++) {
    	      hScalHodNegEv[ip][ibar]->SetBinContent(iev,hod_scalneg[ip][ibar]);
    	      hScalHodPosEv[ip][ibar]->SetBinContent(iev,hod_scalpos[ip][ibar]);
                 if (bcm_scal[0] > good_bcm_limit) {
                      hod_scalneg_rate[ip][ibar]+=hod_scalneg[ip][ibar];
                     hod_scalpos_rate[ip][ibar]+=hod_scalpos[ip][ibar];
      	      }
    	      // cout << ip+1 << " " << ibar+1 << " " << hod_scalneg[ip][ibar]<< " " << hod_scalpos[ip][ibar] << endl;
    	    }
      }    
         //     cout  << " finish event = " << iev << endl; 
    }
      cout << " Done " << endl;
    // calculate average when beam-on
    if (good_bcm >0) {
      cout << " tot ev = " << totev << " Good BCm events = " << good_bcm << endl;
      for(UInt_t ip = 0; ip < NBCMS; ip++) {
        hAveCurBCM->SetBinContent(ip,bcm_ave_cur[ip]/good_bcm);
        hAveRateBCM->SetBinContent(ip,bcm_ave_rate[ip]/good_bcm);
      }
      for(UInt_t ip = 0; ip < NTRIGS; ip++) {
        hAveTrig->SetBinContent(ip,trig_ave[ip]/good_bcm);
      }
      for(UInt_t ip = 0; ip < NPLANES; ip++) {
    	    for(UInt_t ibar = nbars_low[ip]-1; ibar < nbars[ip]; ibar++) {
    	      hScalHodNeg[ip]->SetBinContent(ibar+1,hod_scalneg_rate[ip][ibar]/good_bcm);
    	      hScalHodPos[ip]->SetBinContent(ibar+1,hod_scalpos_rate[ip][ibar]/good_bcm);
                }
      }
    }
    	      //
      return;
    }
    
    
    
    void plot_hms_scalers(TString histname,TString histname2) {
      const UInt_t NTRIGS  = 6;
      const TString trig_names[NTRIGS]={"h1X","h1Y","h1Xh1y","h2X","h2Y","hTrig"};
      const UInt_t NPLANES  = 4;
      const TString plane_names[NPLANES] = {"1x", "1y", "2x", "2y"};
      const TString bar_names[16] = {"Pad01", "Pad02", "Pad03", "Pad04","Pad05", "Pad06", "Pad07", "Pad08","Pad09","Pad10","Pad11", "Pad12", "Pad13", "Pad14","Pad15", "Pad16"};
      const UInt_t  nbars[NPLANES] = {16, 10, 16, 10};
      const UInt_t  nbars_low[NPLANES] = {1, 1, 1, 1};
      TH1F* h;
      TH1F* hh;
      TH1F* htrig;
      TH1F* hhtrig;
      TText* htext;
      TText* hhtext;
      Double_t aveh=0,avehh=0;
      h = (TH1F*) gDirectory->Get(histname);
      hh = (TH1F*) gDirectory->Get(histname2);
      if(!h) {
        UserScript();
        h = (TH1F*) gDirectory->Get(histname);
        if(!h) {
          cout << "User histogram " << histname << " not found" << endl;
          exit(1);
        }
        if (histname2!="none") {
        hh = (TH1F*) gDirectory->Get(histname2);
        if(!hh) {
          cout << "User histogram " << histname2 << " not found" << endl;
          exit(1);
        } 
        }
      }
      if (histname.Contains("Trig")) {
             htrig = (TH1F*) gDirectory->Get("AveTrig");
      }
      if (histname2.Contains("Trig")) {
             hhtrig = (TH1F*) gDirectory->Get("AveTrig");
      }
      for (Int_t ip=0;ip<NTRIGS;ip++) {
        if (histname.Contains(trig_names[ip])) aveh=htrig->GetBinContent(ip);
        if (histname2.Contains(trig_names[ip])) avehh=hhtrig->GetBinContent(ip);
      }
      // cout << histname.Contains("adcpeak") << endl;
      Double_t maxf=0,max1=0,max2=0;
        h->SetStats(0);
        h->GetXaxis()->SetTitleOffset(.6);
        h->GetXaxis()->SetTitleSize(0.08);
        h->GetYaxis()->SetTitleOffset(.6);
        h->GetYaxis()->SetTitleSize(0.08);
        h->SetMinimum(0);
        max1=h->GetBinContent(h->GetMaximumBin());
        if (histname.Contains("uhScalHod")) {
             TH1F* h1hod;
             TH1F* h2hod;
             TString h1title;
             TString h2title;
             UInt_t ipl_f1=0;
             UInt_t ipl_f2=0;
             for(UInt_t ipl = 0; ipl < NPLANES; ipl++) {
    	   if (histname.Contains(plane_names[ipl]))ipl_f1 = ipl;
    	   if (histname2.Contains(plane_names[ipl])) ipl_f2=ipl;
    	 }
    	     if (histname.Contains("Neg")) h1title="uhScalHodNeg"+plane_names[ipl_f1];
    	     if (histname.Contains("Pos")) h1title="uhScalHodPos"+plane_names[ipl_f1];
    	     if (histname2.Contains("Neg")) h2title="uhScalHodNeg"+plane_names[ipl_f2];
    	     if (histname2.Contains("Pos")) h2title="uhScalHodPos"+plane_names[ipl_f2];
    	     h1hod = (TH1F*) gDirectory->Get(h1title);
    	     h2hod = (TH1F*) gDirectory->Get(h2title);
     	     for(UInt_t ibar = nbars_low[ipl_f1]-1; ibar < nbars[ipl_f1]; ibar++) {
     	     if (h1hod) aveh+=h1hod->GetBinContent(ibar+1);
    	     }
     	     for(UInt_t ibar = nbars_low[ipl_f2]-1; ibar < nbars[ipl_f2]; ibar++) {
    	     if (h2hod) avehh+=h2hod->GetBinContent(ibar+1);
    	     }
        }
        if (histname.Contains("EvHod")) {
             TH1F* h1hod;
             TH1F* h2hod;
             TString h1title;
             TString h2title;
             TString i2barname;
             for(UInt_t ipl = 0; ipl < NPLANES; ipl++) {
     	    for(UInt_t ibar = nbars_low[ipl]-1; ibar < nbars[ipl]; ibar++) {
                if (histname.Contains(plane_names[ipl]) && histname.Contains(bar_names[ibar])) {
    	     if (histname.Contains("Neg")) h1title="uhScalHodNeg"+plane_names[ipl];
    	     if (histname.Contains("Pos")) h1title="uhScalHodPos"+plane_names[ipl];
    	     h1hod = (TH1F*) gDirectory->Get(h1title);
     	     if (h1hod) aveh=h1hod->GetBinContent(ibar+1);
                }
                if (histname2.Contains(plane_names[ipl]) && histname2.Contains(bar_names[ibar])) {
    	     if (histname2.Contains("Neg")) h2title="uhScalHodNeg"+plane_names[ipl];
    	     if (histname2.Contains("Pos")) h2title="uhScalHodPos"+plane_names[ipl];
    	     h2hod = (TH1F*) gDirectory->Get(h2title);
     	     if (h2hod) avehh=h2hod->GetBinContent(ibar+1);
                }
    	    }
             }
        }
        if (histname.Contains("BCM") || histname.Contains("Unser")) {
             TH1F* hbcm;
             if (histname.Contains("Cur") ) hbcm = (TH1F*) gDirectory->Get("AveCurBCM");
             if (histname.Contains("Scal") ) hbcm = (TH1F*) gDirectory->Get("AveRateBCM");
             if (histname.Contains("BCM1")) aveh=hbcm->GetBinContent(0);
             if (histname.Contains("BCM2")) aveh=hbcm->GetBinContent(1);
             if (histname.Contains("Unser")) aveh=hbcm->GetBinContent(2);
             if (histname2!="none") {
             if (histname2.Contains("BCM1")) avehh=hbcm->GetBinContent(0);
             if (histname2.Contains("BCM2")) avehh=hbcm->GetBinContent(1);
             if (histname2.Contains("Unser")) avehh=hbcm->GetBinContent(2);
    	 }
        }
        if (hh)  max2=hh->GetBinContent(hh->GetMaximumBin());
        maxf=max1*1.2;
        if (hh && max2>max1) maxf=max2*1.2;
        if (h && !histname.Contains("uhScalHod"))  htext = new TText(2,maxf*.95,Form("%s Ave = %7.2f",h->GetTitle(),aveh));
        if (hh && !histname.Contains("uhScalHod")) hhtext = new TText(2,maxf*.90,Form("%s Ave = %7.2f",hh->GetTitle(),avehh));
        if (h && histname.Contains("uhScalHod"))  htext = new TText(2,maxf*.95,Form("%s Integral = %7.2f",h->GetTitle(),aveh));
        if (hh && histname.Contains("uhScalHod")) hhtext = new TText(2,maxf*.90,Form("%s Integral = %7.2f",hh->GetTitle(),avehh));
        h->SetMaximum(maxf);
        h->Draw("p");
        h->SetMarkerStyle(7);
        h->SetMarkerColor(1);
        htext->Draw();
        if (hh) {
        hh->Draw("p same");
        hh->SetMarkerColor(2);
        hh->SetMarkerStyle(7);
        hhtext->Draw();
        hhtext->SetTextColor(2);
        }
    }