#define ClusterWithTrackAna_cxx //#include "ClusterWithTrackAna_Inputs.h" #include "ClusterWithTrackAna.h" #include <TH2.h> #include <TStyle.h> #include <TLatex.h> #include <TCanvas.h> #include <iostream> #include <fstream> #include "../../Tools/Landau.C" void addGraphics(TH1 *h, int iCol = 1, TString XTitle="", TString YTitle="") { h->SetXTitle(XTitle); h->SetYTitle(YTitle); h->SetStats(kFALSE); h->SetLineColor(iCol); h->SetMarkerColor(iCol); h->SetMinimum(0.0); h->SetMaximum(1.2*h->GetMaximum()); h->SetTitleSize(0.1); //h->SetLineColor(kBlack); h->SetMarkerSize(0.7); h->SetMarkerStyle(20); h->GetXaxis()->SetTitleOffset(1.0); h->GetYaxis()->SetTitleOffset(1.2); h->GetXaxis()->SetTitleSize(0.045); h->GetYaxis()->SetTitleSize(0.045); h->GetXaxis()->SetLabelSize(0.04); h->GetYaxis()->SetLabelSize(0.04); h->SetNdivisions(505,"X"); h->SetNdivisions(505,"Y"); h->SetLineWidth(2); } void addGraphics(TH2 *h, int iCol = 1, TString XTitle="", TString YTitle="") { //float bw = h->GetBinWidth(1); h->SetXTitle(XTitle); h->SetYTitle(YTitle); h->SetStats(kFALSE); h->SetLineColor(iCol); h->SetMarkerColor(iCol); h->SetMinimum(0.0); h->SetMaximum(1.2*h->GetMaximum()); h->SetTitleSize(0.1); //h->SetLineColor(kBlack); //h->SetMarkerSize(0.7); //h->SetMarkerStyle(20); h->GetXaxis()->SetTitleOffset(1.0); h->GetYaxis()->SetTitleOffset(1.2); h->GetXaxis()->SetTitleSize(0.045); h->GetYaxis()->SetTitleSize(0.045); h->GetXaxis()->SetLabelSize(0.04); h->GetYaxis()->SetLabelSize(0.04); h->SetNdivisions(505,"X"); h->SetNdivisions(505,"Y"); h->SetLineWidth(2); } void ClusterWithTrackAna::Loop() { // In a ROOT session, you can do: // Root > .L ClusterWithTrackAna.C // Root > ClusterWithTrackAna t // Root > t.GetEntry(12); // Fill t data members with entry number 12 // Root > t.Show(); // Show values of entry 12 // Root > t.Show(16); // Read and show values of entry 16 // Root > t.Loop(); // Loop on all entries // // This is the loop skeleton where: // jentry is the global entry number in the chain // ientry is the entry number in the current Tree // Note that the argument to GetEntry must be: // jentry for TChain::GetEntry // ientry for TTree::GetEntry and TBranch::GetEntry // // To read only selected branches, Insert statements like: // METHOD1: // fChain->SetBranchStatus("*",0); // disable all branches // fChain->SetBranchStatus("branchname",1); // activate branchname // METHOD2: replace line // fChain->GetEntry(jentry); //read all branches //by b_branchname->GetEntry(ientry); //read only this branch if (fChain == 0) return; Int_t nentries = fChain->GetEntriesFast(); TString m_board2 = m_board; m_board2 = m_board2.ReplaceAll("_All",""); m_board2 = m_board2.ReplaceAll("_Full",""); m_board2 = m_board2.ReplaceAll("_v7",""); TString f_out = m_fileOutdir + plotdir + "/AnalysisOutput_" + m_board2 + "_" + m_bias + "_" + m_sector +"_"+m_runNumb+".root"; if(m_angle != "0"){ f_out = m_fileOutdir + plotdir + "/AnalysisOutput_" + m_board2 + "_" + m_bias + "_" + m_sector + "_" + m_angle + ".root"; } cout << "Will write out file: " << f_out << endl; fout = new TFile(f_out,"RECREATE"); TH1F* h0 = new TH1F("h0","#DeltaX between strip hit and track projection (strips)",101,-50.5,50.5); TH1F* h1 = new TH1F("h1","#DeltaX",800,-2.0,2.0); TH2F* h1vsx = new TH2F("h1vsx","#DeltaX vs X",50,-5,5,100,-0.2,0.2); TH1F* h1mpa = new TH1F("h1mpa","#DeltaX",400,-20.0,20.0); TH1F* h1mbpa = new TH1F("h1mbpa","#DeltaX",400,-20.0,20.0); TH1F* h1fpa = new TH1F("h1fpa","#DeltaX",400,-20.0,20.0); TH1F* h1fbpa = new TH1F("h1fbpa","#DeltaX",400,-20.0,20.0); TH1F* h1mpa1 = new TH1F("h1mpa1","#DeltaX",800,-20.0,20.0); TH1F* h1mpa2 = new TH1F("h1mpa2","#DeltaX",800,-20.0,20.0); TH1F* h1mpa3 = new TH1F("h1mpa3","#DeltaX",800,-20.0,20.0); TH1F* h1mpa4 = new TH1F("h1mpa4","#DeltaX",800,-20.0,20.0); TH1F* h1mpa5 = new TH1F("h1mpa5","#DeltaX",800,-20.0,20.0); TH1F* h1mpaL = new TH1F("h1mpaL","Strip# of Missed Hit in Lower PA region",512,0,512); TH1F* h1mpaU = new TH1F("h1mpaU","Strip# of Missed Hit in Upper PA region",512,0,512); TH1F* h1s = new TH1F("h1s","Seed strip of cluster",512,0.0,512.0); TH1F* h1a = new TH1F("h1a","#DeltaX, 1 strip",800,-2.0,2.0); TH1F* h1b = new TH1F("h1b","#DeltaX, 2 strip",800,-2.0,2.0); TH1F* h1z = new TH1F("h1z","#DeltaX, low Charge",800,-2.0,2.0); TH1F* h1w = new TH1F("h1w","#DeltaX",20000,-100.0,100.0); TH1F* h1wY = new TH1F("h1wY","#DeltaX",20000,-100.0,100.0); TH2F* h2 = new TH2F("h2","X_{DUT} vs X_{trk}",100,-8.0,8.0,100,-8,8); TH2F* h3 = new TH2F("h3","Y_{trk} vs X_{trk}, with cluster",640,-8,8.0,640,-8,8); TH2F* h3a = new TH2F("h3a","Y_{trk} vs X_{trk} in fiducial",640,-8,8.0,640,-8,8); TH2F* h3b = new TH2F("h3b","Y_{trk} vs X_{trk}, with missed cluster",640,-8,8.0,640,-8,8); TH2F* h3c = new TH2F("h3c","Y_{trk} vs X_{trk}, with found cluster",640,-8,8.0,640,-8,8); TH1F* h4 = new TH1F("h4","Detector strip # of cluster with track",512,0.0,512); TH1F* h4a = new TH1F("h4a","Electonic Strip # of cluster with track",512,0.0,512); TH1F* h4b = new TH1F("h4b","Strip # of cluster with track",1024,0.0,1024); TH1F* h4c = new TH1F("h4c","Strip # of cluster with track",1024,0.0,1024); TH1F* h5 = new TH1F("h5","#theta_{X}",500,-5.0,5.0); TH1F* h6 = new TH1F("h6","#theta_{Y}",500,-5.0,5.0); TH1F* h5c = new TH1F("h5c","#theta_{X}",500,-5.0,5.0); TH1F* h6c = new TH1F("h6c","#theta_{Y}",500,-5.0,5.0); TH1F* h5a = new TH1F("h5a","X position of track",400,-10.0,10.0); TH1F* h6a = new TH1F("h6a","Y position of track",400,-10.0,10.0); TH1F* h5b = new TH1F("h5b","X position of matched cluster",400,-10.0,10.0); TH1F* h6b = new TH1F("h6b","Y position of matched cluster",400,-10.0,10.0); TProfile *h8 = new TProfile("h8","#DeltaX vs #theta_{trk}",100,-5,5,-1.0,1.0); TProfile *h9 = new TProfile("h9","#DeltaX vs Y_{trk} at DUT",1600,-8,8,-1.0,1.0); TProfile *h9a = new TProfile("h9a","#DeltaX vs X_{trk} at DUT",20,-5,5,-1.0,1.0); TProfile *h10a = new TProfile("h10a","<ADC> vs strip",512,0,512,0.0,1000.0); TProfile *h10b = new TProfile("h10b","<ADC> vs strip",512,0,512,0.0,1000.0); TProfile *h10c = new TProfile("h10c","<ADC> vs strip",512,0,512,0.0,1000.0); TProfile *h10d = new TProfile("h10d","<ADC> vs Y_{trk}",100,-8,8,0.0,1000.0); TProfile *h10e = new TProfile("h10e","<ADC> vs X_{trk}",100,-8,8,0.0,1000.0); TH1F* h11n = new TH1F("h11n","Strip # of matched cluster",512,0.0,512); TH1F* h11d = new TH1F("h11d","Strip # of track",512,0.0,512); h11n->Sumw2(); h11d->Sumw2(); TH1F* h12 = new TH1F("h12","Y position of matched cluster",400,-10.0,10.0); h12->Sumw2(); TH1F* h12c = new TH1F("h12c","X position of matched cluster",400,-10.0,10.0);h12c->Sumw2(); TH1F* h12a = new TH1F("h12a","Y position of track",1600,-10.0,10.0); h12a->Sumw2(); TH1F* h12b = new TH1F("h12b","Y position of track",1600,-10.0,10.0); h12b->Sumw2(); TH1F* h12dn = new TH1F("h12dn","X position of track",200,-10.0,10.0); h12dn->Sumw2(); TH1F* h12en = new TH1F("h12en","X position of track",200,-10.0,10.0);h12en->Sumw2(); TH1F* h12fn = new TH1F("h12fn","X position of track",200,-10.0,10.0);h12fn->Sumw2(); TH1F* h12gn = new TH1F("h12gn","X position of track",200,-10.0,10.0);h12gn->Sumw2(); TH1F* h12dd = new TH1F("h12dd","X position of track",200,-10.0,10.0);h12dd->Sumw2(); TH1F* h12ed = new TH1F("h12ed","X position of track",200,-10.0,10.0);h12ed->Sumw2(); TH1F* h12fd = new TH1F("h12fd","X position of track",200,-10.0,10.0);h12fd->Sumw2(); TH1F* h12gd = new TH1F("h12gd","X position of track",200,-10.0,10.0);h12gd->Sumw2(); TH1F* h12hn = new TH1F("h12hn","X position of track",50,-0.5,0.5);h12hn->Sumw2(); TH1F* h12in = new TH1F("h12in","X position of track",50,-0.5,0.5);h12in->Sumw2(); TH1F* h12jn = new TH1F("h12jn","X position of track",50,-0.5,0.5);h12jn->Sumw2(); TH1F* h12kn = new TH1F("h12kn","X position of track",50,-0.5,0.5);h12kn->Sumw2(); TH1F* h12hd = new TH1F("h12hd","X position of track",50,-0.5,0.5);h12hd->Sumw2(); TH1F* h12id = new TH1F("h12id","X position of track",50,-0.5,0.5);h12id->Sumw2(); TH1F* h12jd = new TH1F("h12jd","X position of track",50,-0.5,0.5);h12jd->Sumw2(); TH1F* h12kd = new TH1F("h12kd","X position of track",50,-0.5,0.5);h12kd->Sumw2(); TProfile *h12m = new TProfile("h12m","<ADC> vs interstrip pos",50,-0.5,0.5,0.0,1000.0); TProfile *h12n = new TProfile("h12n","<ClusterSize> vs interstrip pos",50,-0.5,0.5,0.0,1000.0); TH1F* h12on = new TH1F("h12on","dist of track to cutout",700,-2.0,5.0);h12on->Sumw2(); TH1F* h12od = new TH1F("h12od","dist of track to cutout",700,-2.0,5.0);h12od->Sumw2(); TH1F *h13mpa = new TH1F("h13mpa","#Clusters/Ev",10,-0.5,9.5); TH1F *h13mbpa = new TH1F("h13mbpa","#Clusters/Ev",10,-0.5,9.5); TH1F *h13fpa = new TH1F("h13fpa","#Clusters/Ev",10,-0.5,9.5); TH1F *h13fbpa = new TH1F("h13fbpa","#Clusters/Ev",10,-0.5,9.5); TH1F* h14a = new TH1F("h14a","Nom Strip, no matched cluster",512,0.0,512); TH1F* h14b = new TH1F("h14b","Nom Strip, matched cluster",512,0.0,512); TH1F *h15a = new TH1F("h15a","Chisq of tracks with matched DUT hit",200,0.0,200.0); TH1F *h15b = new TH1F("h15b","TDC time with matched DUT hit",12,0.0,12.0); TH1F *h15c = new TH1F("h15c","Time Between Trigger and Track",5,0.0,5.0); TH1F *h15d = new TH1F("h15d","TDC time of all clusters",12,0.0,12.0); TH1F *h15e = new TH1F("h15e","TDC time of good clusters",12,0.0,12.0); TH1F *h16a = new TH1F("h16a","Chisq of tracks without matched DUT hit",200,0.0,200.0); TH1F *h16b = new TH1F("h16b","TDC time without matched DUT hit",12,0.0,12.0); TH1F *h16c = new TH1F("h16c","Time Between Trigger and Track",5,0.0,5.0); h15c->Sumw2(); h16c->Sumw2(); TH1F* h17 = new TH1F("h17","Q_{L} / (Q_{L}+Q_{R})",50,0.0,1.0); TH2F* h17a = new TH2F("h17a","Q_{L} / (Q_{L}+Q_{R}) vs Interstrip Pos",20,-0.5,0.5,120,-0.1,1.1); TProfile* h17b = new TProfile("h17b","Q_{R} / (Q_{L}+Q_{R}) vs Interstrip Pos",20,-0.5,0.5,-0.1,1.1); TH1F* hcmpa = new TH1F("hcmpa","Cluster charge",100,0.0,1000.0); TH1F* hcmbpa = new TH1F("hcmbpa","Cluster charge",100,0.0,1000.0); TH1F* hcfpa = new TH1F("hcfpa","Cluster charge",100,0.0,1000.0); TH1F* hcfbpa = new TH1F("hcfbpa","Cluster charge",100,0.0,1000.0); TH1F* h18a = new TH1F("h18a","Seed/Total charge",100,0.0,2.0); TH2F* h18b = new TH2F("h18b","#DeltaX vs Interstrip Pos (1 strip Clu)",100,-0.5,0.5,100,-0.2,0.2); TH2F* h18c = new TH2F("h18c","#DeltaX vs Interstrip Pos (2 strip Clu)",100,-0.5,0.5,100,-0.2,0.2); TH2F* h18d = new TH2F("h18d","Seed/Total charge vs Interstrip Pos",100,-0.5,0.5,100,0.0,1.1); TH1F* hcTrkXY[16]; for(int i=0; i<4; i++){ for(int j=0; j<4; j++){ int iblock = 4*i+j; TString hname = Form("hcTrkXY_%d",iblock+1); TString htitle = Form("Cluster charge, block %d",iblock+1); hcTrkXY[iblock]= new TH1F(hname,htitle,100,0.0,1000.0); } } TH1F *hlandau[512]; for(int i=0; i<nChan; i++){ hlandau[i] = new TH1F(Form("hlandau_%d",i),"Cluster charge",100,0.0,1000.0); } TH1F* hcAll = new TH1F("hcAll","Cluster charge",100,0.0,1000.0); TH1F* hcTrk = new TH1F("hcTrk","Cluster charge",100,0.0,1000.0); TH1F* hcTrkCorr = new TH1F("hcTrkCorr","Cluster charge",100,0.0,1000.0); TH1F* hcTrkSeed = new TH1F("hcTrkSeed","Cluster charge",100,0.0,1000.0); TH1F* hcTrkSeed1 = new TH1F("hcTrkSeed1","Cluster charge",100,0.0,1000.0); TH1F* hcTrkSeed2 = new TH1F("hcTrkSeed2","Cluster charge",100,0.0,1000.0); //TH1F* hcTrkY1 = new TH1F("hcTrkY1","Cluster charge",100,0.0,1000.0); //TH1F* hcTrkY2 = new TH1F("hcTrkY2","Cluster charge",100,0.0,1000.0); //TH1F* hcTrkY3 = new TH1F("hcTrkY3","Cluster charge",100,0.0,1000.0); //TH1F* hcTrkY4 = new TH1F("hcTrkY4","Cluster charge",100,0.0,1000.0); TH1F* hcTrkNoTop = new TH1F("hcTrkNoTop","Cluster charge",100,0.0,1000.0); TH1F* hcTrkLowX = new TH1F("hcTrkLowX","Cluster charge",100,0.0,1000.0); TH1F* hcTrkHighX = new TH1F("hcTrkHighX","Cluster charge",100,0.0,1000.0); TH1F* hcTrka = new TH1F("hcTrka","Cluster charge, limited region",100,0.0,1000.0); TH1F* hcTrk1 = new TH1F("hcTrk1","Cluster charge, Size = 1",100,0.0,1000.0); TH1F* hcTrk2 = new TH1F("hcTrk2","Cluster charge, Size = 2",100,0.0,1000.0); TProfile *h2p = new TProfile("h2p","Cluster Charge vs TDC time",12,0,12,100,1000); TH2F* h31a = new TH2F("h31a","Y_{trk} vs X_{trk}, with cluster",64,-8,8.0,64,-8,8); TH2F* h31b = new TH2F("h31b","Y_{trk} vs X_{trk}, with cluster, low ADC",64,-8,8.0,64,-8,8); TH1F* h32a = new TH1F("h32a","Strip # of cluster with track",512,0.0,512); TH1F* h32b = new TH1F("h32b","Strip # of cluster with track & low ADC",512,0.0,512); TH1F* h33a = new TH1F("h33a","Y position of matched cluster",200,-10.0,10.0); TH1F* h33b = new TH1F("h33b","X position of matched cluster",200,-10.0,10.0); TH1F* h34 = new TH1F("h34","Y position of matched cluster & low ADC",200,-10.0,10.0); TH1F *hnoise = new TH1F("hnoise","Noise in connected channels",100,-200,200); TH1F *hnoiseChan = new TH1F("hnoiseChan","Noise in connected channels",200,0,200); TH1F *hnoisePerChannel = new TH1F("hnoisePerChannel","Noise",512,0,512); TH1F* h35 = new TH1F("h35","No. clusters / event",50,0.0,50.0); TH1F *h41[10]; TH1F *h42[10]; TH1F *h43[10]; TH1F *h44[10]; for(int i=0; i<10; i++){ h41[i] = new TH1F(Form("h41_%d",i),Form("ADC_{L}-ADC_{R}, Bin %d, Odd Ch",i),80,-400,400); h42[i] = new TH1F(Form("h42_%d",i),Form("ADC_{L}-ADC_{R}, Bin %d, Odd Ch",i),80,-400,400); h43[i] = new TH1F(Form("h43_%d",i),Form("ADC_{L}-ADC_{R}, Bin %d, Odd Ch",i),160,-400,400); h44[i] = new TH1F(Form("h44_%d",i),Form("ADC_{L}-ADC_{R}, Bin %d, Odd Ch",i),160,-400,400); } for(int i=0; i<nChan; i++){ hnoisePerChannel->Fill(i+0.5,noise[i]); } //------------------------------------------------------------------------------------------------------ //----------------------------- // Prepare DUT (Alignment, etc) //----------------------------- PrepareDUT(); //return; float biasVal = atof(m_bias); cout << "chargeCorrSlopeOdd, chargeCorrSlopeEven = " << chargeCorrSlopeOdd << " " << chargeCorrSlopeEven << " " << m_bias << " " << biasVal << endl; std::ofstream myfile; if(writeEventsWithMissinhHitsToFile){ myfile.open("MissingDUTHits.dat"); } int iChan = nChan; double nomStrip = 0, detStrip = 0; int nPrint = 0; double dxh[10]; int njump = 10000; if(nentries > 100000) njump = 50000; Long64_t nbytes = 0, nb = 0; cout << "Begin loop over " << nentries << " events" << endl; for (Long64_t jentry=0; jentry<nentries;jentry++) { Long64_t ientry = LoadTree(jentry); if (ientry < 0) break; nb = fChain->GetEntry(jentry); nbytes += nb; if(jentry%njump==0) cout << "====> At entry = " << jentry << endl; if(n_tp3_tracks != 1) continue; //========================================== // Example here of acccessing CMS strip data //========================================== if(fCMS){ for(int k=0;k<iChan;k++){ if(fCMS->cmsData[k]!=0) hnoise->Fill(fCMS->cmsData[k]); } } h35->Fill(clusterNumberPerEvent); if(clusterNumberPerEvent>10) continue; // Loop over TPIX tracks in event for(int k=0; k<n_tp3_tracks; k++){ if(dtime > trackTriggerTimeDiffCut) continue; double x_trk = vec_trk_tx->at(k)*z_DUT+vec_trk_x->at(k); double y_trk = vec_trk_ty->at(k)*z_DUT+vec_trk_y->at(k); transformTrackToDUTFrame(k, x_trk, y_trk, nomStrip, detStrip); //if(isInCutoutRegion(x_trk, y_trk)) continue; double distToCutout = DistToCutoutRegion(x_trk, y_trk); bool awayFromCutout = distToCutout > minDistFromHole; int closestStrip = nomStrip; double fracStrip = nomStrip - closestStrip - 0.5; double tx = 1000*vec_trk_tx->at(k); double ty = 1000*vec_trk_ty->at(k); h5->Fill(tx); h6->Fill(ty); // Test cuts here, e.g. to reject regions //if(nomStrip<422 || nomStrip>442) continue; //if(y_trk>2.4) continue; //if(nomStrip<420 || nomStrip>445) continue; bool goodRegion = true; for(int id = 0; id<nDeadRegion; id++){ if(x_trk>=deadRegionLo[id] && x_trk<=deadRegionHi[id]) goodRegion = false; } if(!goodRegion) continue; h5a->Fill(x_trk); h6a->Fill(y_trk); bool goodTrack = false; bool inFiducialX = false; bool inFiducialY = false; if(x_trk>xMin && x_trk<xMax) inFiducialX = true; if(y_trk>yMin && y_trk<yMax) inFiducialY = true; bool inFiducial = inFiducialX && inFiducialY; inFiducial = inFiducial && (x_trk<xLeftHole || x_trk>xRightHole); if(tx>txMin && tx<txMax && ty>tyMin && ty<tyMax) goodTrack = true; bool goodTime = (clustersTDC >= tdcLo && clustersTDC <= tdcHi); if(goodTrack && goodTime && inFiducial) h12od->Fill(distToCutout); if(goodTrack && goodTime && inFiducial && awayFromCutout) { h3a->Fill(x_trk,y_trk); h12a->Fill(y_trk); h12dd->Fill(x_trk); if(y_trk>yInt1[0]&&y_trk<yInt1[1]) h12ed->Fill(x_trk); if(y_trk>yInt2[0]&&y_trk<yInt2[1]) h12fd->Fill(x_trk); if(y_trk>yInt3[0]&&y_trk<yInt3[1]) h12gd->Fill(x_trk); h12hd->Fill(fracStrip); if(y_trk>yInt1[0]&&y_trk<yInt1[1] && x_trk>-3.5&&x_trk<2.5) h12id->Fill(fracStrip); if(y_trk>yInt2[0]&&y_trk<yInt2[1] && x_trk>-3.5&&x_trk<2.5) h12jd->Fill(fracStrip); if(y_trk>yInt3[0]&&y_trk<yInt3[1] && x_trk>-3.5&&x_trk<2.5) h12kd->Fill(fracStrip); } bool foundHit = false; bool foundHitNoFid = false; double x_trk0 = x_trk; for(int j=0; j<min(clusterNumberPerEvent,10); j++){ dxh[j] = -999; if(clustersPosition[j] < 0.1) continue; if(polarity*clustersCharge[j] < 0.2*kClusterChargeMin) continue; double x_dut = getDUTHitPosition(j); x_trk = x_trk0; int iPeak = 1; if(clustersSeedPosition[j]%2==0) iPeak = 0; h1s->Fill(clustersSeedPosition[j]); if(clustersSeedPosition[j]<iLo-5 || clustersSeedPosition[j]>iHi+5) continue; double dx = x_dut - x_trk; dxh[j] = dx; if(inFiducial && goodTime && awayFromCutout) h12->Fill(y_trk); if(goodTrack && inFiducial && fabs(dx)<dxWin && awayFromCutout) { h2p->Fill(clustersTDC+0.1,polarity*clustersCharge[j]); h15d->Fill(clustersTDC); if(goodTime) h15e->Fill(clustersTDC); } if(goodTrack && inFiducial && goodTime && fabs(dx)<dxWin){ h3->Fill(x_trk,y_trk); } if(goodTrack && inFiducial && goodTime && fabs(dx)<dxWin) foundHitNoFid = true; if(goodTrack && inFiducial && goodTime && awayFromCutout) { hcAll->Fill(polarity*clustersCharge[j]); h2->Fill(x_trk, x_dut); h1->Fill(dx); if(clustersSize[j]==1) h1a->Fill(dx); if(clustersSize[j]==2) h1b->Fill(dx); h1w->Fill(dx); if(y_trk>2.5) h1wY->Fill(dx); if(polarity*clustersCharge[j] < 250) h1z->Fill(dx); h11d->Fill(detStrip); if(fabs(dx)<dxWin) { int ichan = clustersSeedPosition[j]; h4c->Fill(clustersSeedPosition[j]); if(ichan>=0 && ichan<=511){ hlandau[ichan]->Fill(polarity*clustersCharge[j]); } hnoiseChan->Fill(noise[ichan]); h18a->Fill(clustersSeedCharge[j]/clustersCharge[j]); foundHit = true; if(clustersSize[j]==1) h18b->Fill(fracStrip,dx); if(clustersSize[j]==2) h18c->Fill(fracStrip,dx); h18d->Fill(fracStrip,clustersSeedCharge[j]/clustersCharge[j]); h12m->Fill(fracStrip,polarity*clustersCharge[j]); h12n->Fill(fracStrip,clustersSize[j]); h1vsx->Fill(x_trk,dx); if(y_trk>yMid&&y_trk<yMax) h10a->Fill(clustersPosition[j],polarity*clustersCharge[j]); if(y_trk>yMin&&y_trk<yMid) h10b->Fill(clustersPosition[j],polarity*clustersCharge[j]); if(y_trk>yHi2&&y_trk<yMax) h10c->Fill(clustersPosition[j],polarity*clustersCharge[j]); h10d->Fill(y_trk,polarity*clustersCharge[j]); h10e->Fill(x_trk,polarity*clustersCharge[j]); double chleft = polarity*clustersCharge1StripLeft[j]; double chright = polarity*clustersCharge1StripRight[j]; double rc = -999; if(detStrip <= clustersSeedPosition[j]) { if(chleft>0) rc = (chleft/(chleft+clustersSeedCharge[j])); }else{ if(chright>0) rc = (clustersSeedCharge[j]/(chright+clustersSeedCharge[j])); } if( rc>=0 ) { h17->Fill(rc); h17a->Fill(fracStrip,rc); h17b->Fill(fracStrip,rc); } h8->Fill(1000*vec_trk_tx->at(k),dx); h9->Fill(y_trk,dx); h9a->Fill(x_trk,dx); h5b->Fill(x_trk); h6b->Fill(y_trk); h5c->Fill(tx); h6c->Fill(ty); h11n->Fill(detStrip); hcTrk->Fill(polarity*clustersCharge[j]); if(clustersSize[j]==1) hcTrkCorr->Fill(polarity*clustersCharge[j]); if(clustersSize[j]==2 && iPeak==1) hcTrkCorr->Fill(polarity*clustersCharge[j]*(1.0-chargeCorrSlopeOdd)); if(clustersSize[j]==2 && iPeak==0) hcTrkCorr->Fill(polarity*clustersCharge[j]*(1.0-chargeCorrSlopeEven)); hcTrkSeed->Fill(polarity*clustersSeedCharge[j]); if(clustersSize[j]==1) hcTrkSeed1->Fill(polarity*clustersSeedCharge[j]); if(clustersSize[j]==2) hcTrkSeed2->Fill(polarity*clustersSeedCharge[j]); if(y_trk - yMax < 5.0) hcTrkNoTop->Fill(polarity*clustersCharge[j]); if(x_trk < (xMin+xMax)/2.) hcTrkLowX->Fill(polarity*clustersCharge[j]); if(x_trk >= (xMin+xMax)/2.) hcTrkHighX->Fill(polarity*clustersCharge[j]); int ix = 4*(x_trk - xMin - 0.001) / (xMax-xMin); int iy = 4*(y_trk - yMin - 0.001) / (yMax-yMin); int ihist = 4*ix + iy; hcTrkXY[ihist]->Fill(polarity*clustersCharge[j]); //if(y_trk>yMin && y_trk<=(yMin+0.25*yRange)) hcTrkY1->Fill(polarity*clustersCharge[j]); //if(y_trk>(yMin+0.25*yRange) && y_trk<(yMin+0.50*yRange)) hcTrkY2->Fill(polarity*clustersCharge[j]); //if(y_trk>(yMin+0.50*yRange) && y_trk<(yMin+0.75*yRange)) hcTrkY3->Fill(polarity*clustersCharge[j]); //if(y_trk>(yMin+0.75*yRange) && y_trk<(yMin+1.00*yRange)) hcTrkY4->Fill(polarity*clustersCharge[j]); //if(y_trk>yMin&&y_trk<yMid+1.0) hcTrkY2->Fill(polarity*clustersCharge[j]); if(clustersSize[j]==1) hcTrk1->Fill(polarity*clustersCharge[j]); if(clustersSize[j]==2) hcTrk2->Fill(polarity*clustersCharge[j]); if(clustersPosition[j]>170 && clustersPosition[j]<190) hcTrka->Fill(polarity*clustersCharge[j]); h31a->Fill(x_trk,y_trk); h32a->Fill(clustersPosition[j]); h33a->Fill(y_trk); h33b->Fill(x_trk); if(polarity*clustersCharge[j] < 250) { h31b->Fill(x_trk,y_trk); h32b->Fill(clustersPosition[j]); h34->Fill(y_trk); } double chr = clustersCharge1StripRight[j]*polarity; double chl = clustersCharge1StripLeft[j]*polarity; double chr2 = clustersCharge2StripRight[j]*polarity; double chl2 = clustersCharge2StripLeft[j]*polarity; double pch = polarity*clustersSeedCharge[j]; int ic = pch/50.; if(ic>=0 && ic<10 && clustersSize[j]<=2 ){ if(iPeak==1) h41[ic]->Fill(chl-chr); if(iPeak==0) h42[ic]->Fill(chl-chr); if(chr2!=0 and chl2!=0){ if(iPeak==1) h43[ic]->Fill(chl2-chr2); if(iPeak==0) h44[ic]->Fill(chl2-chr2); } } } double clstrip = getCorrChannel(clustersPosition[j]); h4->Fill(clstrip); h4b->Fill(clstrip + channelOffset); h4a->Fill(clustersPosition[j]); h0->Fill(detStrip - clstrip); } } if(inFiducial && goodTrack && goodTime && foundHitNoFid) { h12on->Fill(distToCutout); } if(inFiducial && goodTrack && goodTime && awayFromCutout) { h16c->Fill(dtime); if(foundHit) { h3c->Fill(x_trk,y_trk); for(int j=0; j<min(clusterNumberPerEvent,10); j++){ hcfpa->Fill(polarity*clustersCharge[j]); if(polarity*clustersCharge[j]>120) h1fpa->Fill(dxh[j]); } h15c->Fill(dtime); h15b->Fill(clustersTDC+0.1); h15a->Fill(vec_trk_chi2ndf->at(k)); h12b->Fill(y_trk); h12dn->Fill(x_trk); if(y_trk>yInt1[0]&&y_trk<yInt1[1]) h12en->Fill(x_trk); if(y_trk>yInt2[0]&&y_trk<yInt2[1]) h12fn->Fill(x_trk); if(y_trk>yInt3[0]&&y_trk<yInt3[1]) h12gn->Fill(x_trk); h12hn->Fill(fracStrip); if(y_trk>yInt1[0]&&y_trk<yInt1[1] && x_trk>-3.5&&x_trk<2.5) h12in->Fill(fracStrip); if(y_trk>yInt2[0]&&y_trk<yInt2[1] && x_trk>-3.5&&x_trk<2.5) h12jn->Fill(fracStrip); if(y_trk>yInt3[0]&&y_trk<yInt3[1] && x_trk>-3.5&&x_trk<2.5) h12kn->Fill(fracStrip); if(y_trk>yInt1[0] && y_trk < yInt2[1] && x_trk>-3.5&&x_trk<-2.0) { h14b->Fill(detStrip); h13fpa->Fill(clusterNumberPerEvent); }else if(y_trk>yInt3[0] && y_trk < yInt3[1]) { h13fbpa->Fill(clusterNumberPerEvent); for(int j=0; j<min(clusterNumberPerEvent,10); j++){ h1fbpa->Fill(dxh[j]); hcfbpa->Fill(polarity*clustersCharge[j]); } } }else{ h3b->Fill(x_trk,y_trk); h13mpa->Fill(clusterNumberPerEvent); h16a->Fill(vec_trk_chi2ndf->at(k)); h16b->Fill(clustersTDC+0.1); for(int j=0; j<min(clusterNumberPerEvent,10); j++){ hcmpa->Fill(polarity*clustersCharge[j]); if(polarity*clustersCharge[j]>120) h1mpa->Fill(dxh[j]); } nPrint++; if(y_trk>yInt1[0] && y_trk < yInt2[1]) { h14a->Fill(detStrip); if(writeEventsWithMissinhHitsToFile) myfile << jentry << " " << detStrip << " " << x_trk << " " << y_trk << endl; //if(nPrint < 100) cout << "Missed hit, event, #clu, nomStrip = " << jentry << " " // << clusterNumberPerEvent << " " << nomStrip << endl; for(int j=0; j<min(clusterNumberPerEvent,10); j++){ if(x_trk>-3.5&&x_trk<-2.0) h1mpa1->Fill(dxh[j]); if(x_trk>-2.0&&x_trk<-1.0) h1mpa2->Fill(dxh[j]); if(x_trk>-1.0&&x_trk<0.0) h1mpa3->Fill(dxh[j]); if(x_trk>0.0&&x_trk<1.0) h1mpa4->Fill(dxh[j]); if(x_trk>1.5&&x_trk<3.5) h1mpa5->Fill(dxh[j]); if(y_trk<yInt1[1]) h1mpaL->Fill(clustersPosition[j]); if(y_trk>=yInt1[1]) h1mpaU->Fill(clustersPosition[j]); } }else if(y_trk>yInt3[0] && y_trk < yInt3[1]) { h13mbpa->Fill(clusterNumberPerEvent); for(int j=0; j<min(clusterNumberPerEvent,10); j++){ h1mbpa->Fill(dxh[j]); hcmbpa->Fill(polarity*clustersCharge[j]); } } } } } } if(writeEventsWithMissinhHitsToFile) myfile.close(); int i1 = h1->FindBin(-0.3); int i2 = h1->FindBin(0.3); cout << "Number of track - DUT hit matchs: " << h1->Integral(i1,i2) << endl; cout << "Ry = " << Ry << endl; TString r1 = Form("%6.3f < Y < %6.3f mm",yInt1[0], yInt1[1]); TString r2 = Form("%6.3f < Y < %6.3f mm ",yInt2[0], yInt2[1]); TString r3 = Form("%6.3f < Y < %6.3f mm",yInt3[0], yInt3[1]); TF1 *funchole = new TF1("funchole","[0]+[1]*x+[2]*x*x",-8.0,8.0); funchole->SetParameters(holeQuadPar[0],holeQuadPar[1],holeQuadPar[2]); funchole->SetLineColor(4); funchole->SetLineWidth(2); cout << "Hole Parameters: " << holeQuadPar[0] << " " << holeQuadPar[1] << " " << holeQuadPar[2] << endl; gStyle->SetOptStat(1000000001); gStyle->SetOptFit(0011); gStyle->SetStatH(0.05); gStyle->SetStatW(0.2); addGraphics(h3b, 1, "X_{trk} [mm]", "Y_{trk} [mm] "); h3b->GetXaxis()->SetRangeUser(-5,5); h3b->GetYaxis()->SetRangeUser(-5,5); TCanvas *c = new TCanvas("c","Residuals",1500,1000); c->Divide(4,3); c->cd(1)->SetLeftMargin(0.13); addGraphics(h2, 1, "X_{trk} [mm]", "X_{DUT} [mm]"); double dM = yMax; if(xMax>dM) dM = xMax; h2->GetXaxis()->SetRangeUser(-1.0*dM-1,dM+1); h2->GetYaxis()->SetRangeUser(-1.0*dM-1,dM+1); h2->SetMinimum(1); h2->Draw(); c->cd(2)->SetLeftMargin(0.13);; addGraphics(h1, 1, "#DeltaX [mm]", ""); addGraphics(h1z, 2, "#DeltaX [mm]", ""); addGraphics(h1a, 3, "#DeltaX [mm]", ""); addGraphics(h1b, 6, "#DeltaX [mm]", ""); h1->GetXaxis()->SetRangeUser(-0.3,0.3); if(m_board.Contains("A1")) h1->GetXaxis()->SetRangeUser(-1.5,1.5); h1->SetMaximum(1.2*h1->GetMaximum()); h1->Draw(); //h1z->Draw("same"); h1a->Draw("same"); h1b->Draw("same"); TLine *l1 = new TLine(-stripPitch/2.,0,-stripPitch/2.,0.5*h1->GetMaximum()); TLine *l2 = new TLine(stripPitch/2,0,stripPitch/2,0.5*h1->GetMaximum()); TLine *l1a = new TLine(-dxWin,0,-dxWin,0.5*h1->GetMaximum()); TLine *l2a = new TLine(dxWin,0,dxWin,0.5*h1->GetMaximum()); l1->SetLineColor(kRed); l2->SetLineColor(kRed); l1a->SetLineColor(kBlue); l2a->SetLineColor(kBlue); l1a->SetLineWidth(2); l2a->SetLineWidth(2); l1->Draw(); l2->Draw(); //l1a->Draw(); l2a->Draw(); TLegend* legend3 = new TLegend(0.15,0.70,0.40,0.89); legend3->SetFillStyle(0); legend3->SetBorderSize(0); legend3->SetFillStyle(0); legend3->SetTextSize(0.045); legend3->AddEntry(h1,"All","L"); //legend3->AddEntry(h1z,"ADC < 250","L"); legend3->AddEntry(h1a,"1-strip","L"); legend3->AddEntry(h1b,"2-strip","L"); legend3->Draw(); c->cd(3)->SetLeftMargin(0.13);; addGraphics(h8, 1, "#theta_{X}^{trk} [mrad]", "#DeltaX [mm]"); h8->GetXaxis()->SetRangeUser(txMin-0.1,txMax+0.1); h8->GetYaxis()->SetRangeUser(-0.1,0.1); h8->Draw(); c->cd(4)->SetLeftMargin(0.13);; addGraphics(h9, 1, "Y^{trk} [mm]", "#DeltaX [mm]"); h9->GetXaxis()->SetRangeUser(yMin-1,yMax+1); h9->GetYaxis()->SetRangeUser(-0.1,0.1); h9->Draw(); c->cd(5)->SetLeftMargin(0.13);; addGraphics(h9a, 1, "X^{trk} [mm]", "#DeltaX [mm]"); h9a->GetXaxis()->SetRangeUser(-4,4); h9a->GetYaxis()->SetRangeUser(-0.1,0.1); h9a->Draw(); c->cd(6)->SetLeftMargin(0.13);; addGraphics(h3, 1, "X_{trk} [mm]", "Y_{trk} [mm]"); h3->GetXaxis()->SetRangeUser(xMin-1,xMax+1); h3->GetYaxis()->SetRangeUser(yMin-1,yMax+1); h3->Draw(); if(holeQuadPar[0]!=0) funchole->Draw("same"); if(fabs(xLeftHole)<900 && fabs(xRightHole)<900){ TBox *b1 = new TBox(xMin,yMin,xLeftHole,yMax); TBox *b2 = new TBox(xRightHole,yMin,xMax,yMax); b1->SetLineColor(kBlue); b1->SetLineWidth(2);b1->SetFillStyle(0); b1->Draw(); b2->SetLineColor(kBlue); b2->SetLineWidth(2);b2->SetFillStyle(0); b2->Draw(); }else{ TBox *b = new TBox(xMin,yMin,xMax,yMax); b->SetLineColor(kBlue); b->SetLineWidth(2);b->SetFillStyle(0); b->Draw(); } c->cd(7)->SetLeftMargin(0.13);; addGraphics(h5, 1, "#theta_{X}^{trk} [mrad]", ""); h5->GetXaxis()->SetRangeUser(txMin-0.1,txMax+0.1); h5->Draw(); h5c->SetLineColor(2); h5c->Draw("same"); TLine *l1b = new TLine(txMin,0,txMin,h5->GetMaximum()); TLine *l2b = new TLine(txMax,0,txMax,h5->GetMaximum()); l1b->SetLineColor(kBlue); l2b->SetLineColor(kBlue); l1b->SetLineWidth(2); l2b->SetLineWidth(2); l1b->Draw(); l2b->Draw(); c->cd(8)->SetLeftMargin(0.13); addGraphics(h6, 1, "#theta_{Y}^{trk} [mrad]", ""); h6->GetXaxis()->SetRangeUser(tyMin-0.1,tyMax+0.1); h6->Draw(); h6c->SetLineColor(2); h6c->Draw("same"); TLine *l1c = new TLine(tyMin,0,tyMin,h6->GetMaximum()); TLine *l2c = new TLine(tyMax,0,tyMax,h6->GetMaximum()); l1c->SetLineColor(kBlue); l2c->SetLineColor(kBlue); l1c->SetLineWidth(2); l2c->SetLineWidth(2); l1c->Draw(); l2c->Draw(); c->cd(9)->SetLeftMargin(0.13);; addGraphics(h4, 1, "Strip # with cluster", ""); addGraphics(h4a, 2, "Strip # with cluster", ""); h4->GetXaxis()->SetRangeUser(max(iLo-60.0,1.0),min(iHi+60.0,512.0)); h4a->GetXaxis()->SetRangeUser(max(iLo-60.0,1.0),min(iHi+60.0,512.0)); double vmax = h4a->GetMaximum(); //for(int ii=iLo; ii<=iHi;ii++){ // if(h4a->GetBinContent(ii)>vmax) vmax = h4a->GetBinContent(ii); //} h4->SetMaximum(1.25*vmax); TLine *l1d = new TLine(iLo,0,iLo,0.75*h4a->GetMaximum()); TLine *l2d = new TLine(iHi,0,iHi,0.75*h4a->GetMaximum()); l1d->SetLineColor(kBlue); l2d->SetLineColor(kBlue); l1d->SetLineWidth(2); l2d->SetLineWidth(2); h4->Draw(); h4a->Draw("same"); l1d->Draw(); l2d->Draw(); TLegend* legend4 = new TLegend(0.15,0.70,0.94,0.89); legend4->SetFillStyle(0); legend4->SetBorderSize(0); legend4->SetFillStyle(0); legend4->SetTextSize(0.045); legend4->AddEntry(h4,"Sensor strip ch #","L"); legend4->AddEntry(h4a,"Electr. ch #","L"); legend4->Draw(); c->cd(10)->SetLeftMargin(0.13);; addGraphics(hcAll, 1, "Cluster charge [ADC]", ""); addGraphics(hcTrk1, 3, "Cluster charge [ADC]", ""); addGraphics(hcTrk2, 6, "Cluster charge [ADC]", ""); hcAll->SetMaximum(1.25*hcAll->GetMaximum()); hcAll->Draw(); hcTrk->SetLineColor(kBlue); hcTrk->SetLineWidth(2); hcTrk->Draw("same"); hcTrk1->Draw("same"); hcTrk2->Draw("same"); // Fitting S histo printf("Fitting...\n"); // Setting fit range and start values Double_t fr[2]; Double_t sv[4], pllo[4], plhi[4], fp[4], fpe[4]; fr[0]=0.4*hcTrk->GetMean(); fr[1]=3.0*hcTrk->GetMean(); pllo[0]=0.; pllo[1]=100.0; pllo[2]=1.; pllo[3]=0.01; plhi[0]=50.; plhi[1]=350.0; plhi[2]=100000000.; plhi[3]=50.; sv[0]=30.; sv[1]=250.; sv[2]=500.; sv[3]=3.; Double_t chisqr; Int_t ndf; TF1 *fitsnr = langaufit(hcTrk,fr,sv,pllo,plhi,fp,fpe,&chisqr,&ndf); Double_t SPeak, SFWHM; langaupro(fp,SPeak,SFWHM); printf("Fitting done\nPlotting results...\n"); // Global style settings gStyle->SetOptStat(1111); gStyle->SetOptFit(111); gStyle->SetLabelSize(0.03,"x"); gStyle->SetLabelSize(0.03,"y"); fitsnr->SetLineColor(kRed); fitsnr->Draw(); TLegend* legend2 = new TLegend(0.15,0.70,0.94,0.89); legend2->SetFillStyle(0); legend2->SetBorderSize(0); legend2->SetFillStyle(0); legend2->SetTextSize(0.045); legend2->AddEntry(hcAll,"All clusters, trk in Fid","L"); legend2->AddEntry(hcTrk,"Clusters, |#DeltaX|<200 #mum, trk in Fid.","L"); legend2->AddEntry(hcTrk1,"1-strip Clusters","L"); legend2->AddEntry(hcTrk2,"2-strip Clusters","L"); legend2->Draw(); c->cd(11)->SetLeftMargin(0.13);; addGraphics(h10a, 1, "Strip #", "<ADC>"); addGraphics(h10b, 2, "Strip #", "<ADC>"); addGraphics(h10c, 4, "Strip #", "<ADC>"); int ixl = iLo; int ixh = iHi; int yh = hcTrk->GetMean()-50; h10a->GetXaxis()->SetRangeUser(ixl-2,ixh+2); h10a->GetYaxis()->SetRangeUser(yh-200,yh+300); /* h10a->Draw(); h10b->SetLineColor(2);h10b->SetMarkerColor(2); h10b->Draw("same"); h10c->SetLineColor(4);h10c->SetMarkerColor(4); h10c->Draw("same"); TLegend* legend1 = new TLegend(0.25,0.75,0.94,0.89); legend1->SetFillStyle(0); legend1->SetBorderSize(0); legend1->SetFillStyle(0); legend1->SetTextSize(0.045); legend1->AddEntry(h10a,"Top half in Y","LEP"); legend1->AddEntry(h10b,"Bottom half in Y","LEP"); legend1->AddEntry(h10c,"Top 2 mm in Y","LEP"); legend1->Draw(); */ addGraphics(h35, 1, "#DUT clusters", "Entries"); h35->GetYaxis()->SetTitleOffset(1.2); h35->Draw(); c->cd(12)->SetLeftMargin(0.13);; addGraphics(h2p, 1, "TDC time / 2.5 ns", "<ADC>"); h2p->Draw(); TLine *l1e = new TLine(tdcLo,0,tdcLo,h2p->GetMaximum()); TLine *l2e = new TLine(tdcHi,0,tdcHi,h2p->GetMaximum()); l1e->SetLineColor(kBlue); l2e->SetLineColor(kBlue); l1e->SetLineWidth(2); l2e->SetLineWidth(2); l1e->Draw(); l2e->Draw(); c->Print("Plots/plot_"+m_board+"_s"+m_sector+"_vb"+m_bias+".png"); //return; TCanvas *c4 = new TCanvas("c4","Plot 4",800,600); c4->Divide(2,2); c4->cd(1)->SetLeftMargin(0.13); addGraphics(h12en, 1, "X_{trk} [mm]", ""); addGraphics(h12fn, 1, "X_{trk} [mm]", ""); TH1F *hepa1 = (TH1F*)h12en->Clone("hepa1"); TH1F *hepa2 = (TH1F*)h12fn->Clone("hepa2"); TH1F *henpa = (TH1F*)h12gn->Clone("henpa"); hepa1->Divide(h12en,h12ed,1.0,1.0,"B"); hepa2->Divide(h12fn,h12fd,1.0,1.0,"B"); henpa->Divide(h12gn,h12gd,1.0,1.0,"B"); addGraphics(hepa1, 1, "X_{trk} [mm]", "#Good DUT hit / # Track "); addGraphics(hepa2, 1, "X_{trk} [mm]", "#Good DUT hit / # Track "); h3b->GetYaxis()->SetRangeUser(-5,5); h3b->Draw(); c4->cd(2)->SetLeftMargin(0.13); hepa1->GetXaxis()->SetRangeUser(xMin-0.5,xMax+0.5); hepa1->SetMinimum(0.0); hepa1->SetMaximum(1.2); hepa1->SetLineWidth(1); hepa1->SetTitle(r1); hepa1->Draw("hist"); c4->cd(3)->SetLeftMargin(0.13); hepa2->GetXaxis()->SetRangeUser(xMin-0.5,xMax+0.5); hepa2->SetMinimum(0.0); hepa2->SetMaximum(1.2); hepa2->SetLineWidth(1); hepa2->SetTitle(r2); hepa2->Draw("hist"); c4->cd(4)->SetLeftMargin(0.13); addGraphics(henpa, 1, "X_{trk} [mm]", "#Good DUT hit / # Track "); henpa->GetXaxis()->SetRangeUser(xMin-0.5,xMax+0.5); henpa->SetMinimum(0.0); henpa->SetMaximum(1.2); henpa->SetLineWidth(1); henpa->SetTitle(r3); henpa->Draw("hist"); TCanvas *c5 = new TCanvas("c5","Plot 5",800,600); c5->Divide(2,2); c5->cd(1)->SetLeftMargin(0.13); addGraphics(h12hn, 1, "Rel. Strip Pos", ""); addGraphics(h12in, 1, "Rel. Strip Pos", ""); addGraphics(h12jn, 1, "Rel. Strip Pos", ""); addGraphics(h12kn, 1, "Rel. Strip Pos", ""); TH1F *hepas1 = (TH1F*)h12hn->Clone("hepas1"); TH1F *hepas2 = (TH1F*)h12in->Clone("hepas2"); TH1F *hepas3 = (TH1F*)h12jn->Clone("hepas3"); TH1F *hepas4 = (TH1F*)h12kn->Clone("hepas4"); hepas1->Divide(h12hn,h12hd,1.0,1.0,"B"); hepas2->Divide(h12in,h12id,1.0,1.0,"B"); hepas3->Divide(h12jn,h12jd,1.0,1.0,"B"); hepas4->Divide(h12kn,h12kd,1.0,1.0,"B"); addGraphics(hepas1, 1, "Rel. Strip Pos.", "#Good DUT hit / # Track "); addGraphics(hepas2, 1, "Rel. Strip Pos.", "#Good DUT hit / # Track "); addGraphics(hepas3, 1, "Rel. Strip Pos.", "#Good DUT hit / # Track "); addGraphics(hepas4, 1, "Rel. Strip Pos.", "#Good DUT hit / # Track "); hepas1->SetTitle("Full Beam Spot"); hepas1->SetMinimum(0.8); hepas1->SetMaximum(1.2); hepas1->SetLineWidth(1); hepas1->Draw("hist"); c5->cd(2)->SetLeftMargin(0.13); hepas2->SetTitle(r1); hepas2->SetMinimum(0.8); hepas2->SetMaximum(1.2); hepas2->SetLineWidth(1); hepas2->Draw("hist"); c5->cd(3)->SetLeftMargin(0.13); hepas3->SetTitle(r2); hepas3->SetMinimum(0.8); hepas3->SetMaximum(1.2); hepas3->SetLineWidth(1); hepas3->Draw("hist"); c5->cd(4)->SetLeftMargin(0.13); hepas4->SetTitle(r3); hepas4->SetMinimum(0.8); hepas4->SetMaximum(1.2); hepas4->SetLineWidth(1); hepas4->Draw("hist"); c5->Print("Plots/plot5_"+m_board+"_s"+m_sector+"_vb"+m_bias+".png"); //return; TCanvas *c1 = new TCanvas("c1","Plot 1",1600,800); c1->Divide(3,2); c1->cd(1)->SetLeftMargin(0.13); addGraphics(h10d, 2, "Y_{trk} [mm]", "<ADC>"); h10d->GetXaxis()->SetRangeUser(yMin-0.5,yMax+0.5); h10d->Draw(); //c1->cd(2)->SetLeftMargin(0.13); //h3b->Draw(); c1->cd(2)->SetLeftMargin(0.13); addGraphics(h12b, 2, "Y_{trk} [mm]", ""); addGraphics(h12a, 1, "Y_{trk} [mm]", ""); h12a->SetMaximum(1.2*h12a->GetMaximum()); h12a->GetXaxis()->SetRangeUser(yMin-0.5,yMax+0.5); h12a->Draw("hist"); h12b->Draw("hist,same"); TLegend* legend0 = new TLegend(0.15,0.75,0.94,0.89); legend0->SetFillStyle(0); legend0->SetBorderSize(0); legend0->SetFillStyle(0); legend0->SetTextSize(0.045); legend0->AddEntry(h12a,"Track Y pos","LEP"); legend0->AddEntry(h12b,"Track Y pos with good cluster","LEP"); legend0->Draw(); c1->cd(3)->SetLeftMargin(0.13); TH1F *he = (TH1F*)h12b->Clone("he"); he->Divide(h12b,h12a,1.0,1.0,"B"); float bw = 1000*h12b->GetBinWidth(1); TString yt = Form("(#Good DUT hit / # Track) / %3.0f #mum",bw); addGraphics(he, 1, "Y_{trk} [mm]", yt); he->SetTitle("DUT Efficiency vs Y_{trk}"); he->GetXaxis()->SetRangeUser(yMin-0.5,yMax+0.5); he->SetMinimum(0.8); he->SetMaximum(1.1); he->Draw("e"); c1->cd(4)->SetLeftMargin(0.13); addGraphics(h10e, 2, "X_{trk} [mm]", "<ADC>"); h10e->GetXaxis()->SetRangeUser(xMin-0.5,xMax+0.5); h10e->Draw(); c1->cd(5)->SetLeftMargin(0.13); addGraphics(h12dd, 2, "X_{trk} [mm]", ""); addGraphics(h12dn, 1, "X_{trk} [mm]", ""); h12dd->SetMaximum(1.2*h12dd->GetMaximum()); h12dd->GetXaxis()->SetRangeUser(xMin-0.5,xMax+0.5); h12dd->Draw("hist"); h12dn->Draw("hist,same"); c1->cd(6)->SetLeftMargin(0.13); TH1F *he2 = (TH1F*)h12dn->Clone("he"); he2->Divide(h12dn,h12dd,1.0,1.0,"B"); bw = 1000*h12dd->GetBinWidth(1); yt = Form("(#Good DUT hit / # Track) / %3.0f #mum",bw); addGraphics(he2, 1, "X_{trk} [mm]", yt); he2->SetTitle("DUT Efficiency vs X_{trk}"); he2->GetXaxis()->SetRangeUser(xMin-0.5,xMax+0.5); he2->SetMinimum(0.8); he2->SetMaximum(1.1); he2->Draw("e"); c1->Print("Plots/plot1_"+m_board+"_s"+m_sector+"_vb"+m_bias+".png"); TCanvas *c8 = new TCanvas("c8","Plot 8",800,400); c8->Divide(2,1); TH1F *he4 = (TH1F*)h15c->Clone("Eff_trigger-DUT_time"); he4->Divide(h15c,h16c,1.0,1.0,"B"); yt = "#Good DUT hit / # Track"; addGraphics(h16c, 1, "DUT time - Track Time (ns)", "Entries"); addGraphics(he4, 1, "DUT time - Track Time (ns)", "Efficiency"); c8->cd(1)->SetLeftMargin(0.15);; c8->cd(1)->SetRightMargin(0.05);; h16c->Draw(); c8->cd(2)->SetLeftMargin(0.13);; c8->cd(2)->SetRightMargin(0.05);; he4->Draw(); c8->Print("Plots/plot8_"+m_board+"_s"+m_sector+"_vb"+m_bias+".png"); if(holeSector){ TCanvas *c7 = new TCanvas("c7","Plot 7",800,800); c7->SetLeftMargin(0.13); TH1F *he3 = (TH1F*)h12on->Clone("Erf()_fit"); he3->Divide(h12on,h12od,1.0,1.0,"B"); bw = 1000*h12od->GetBinWidth(1); yt = Form("(#Good DUT hit / # Track) / %3.0f #mum",bw); addGraphics(he3, 1, "Dist to cutout [mm]", yt); he3->SetStats(kTRUE); he3->SetTitle("DUT Efficiency vs Dist to Cutout"); he3->GetXaxis()->SetRangeUser(-0.2,2.0); he3->GetYaxis()->SetRangeUser(0.0,1.3); he3->Draw("e"); TLatex *myLatex = new TLatex(); myLatex->SetTextFont(42); myLatex->SetTextColor(1); myLatex->SetTextAlign(12); myLatex->SetNDC(kTRUE); myLatex->SetTextSize(0.047); TString text = "Sector "+m_sector; c7->cd(); myLatex->DrawLatex(0.18,0.8,text); TF1 *f4a = new TF1("f4a","0.5*[0]*(1+TMath::Erf((x-[1])/[2]))",-0.1,2.0); f4a->SetParameters(0.5,0.0,0.04); f4a->SetParNames("Const","Mean","Sigma"); he3->Fit("f4a","R"); TPad *inset = new TPad("inset","y vx x",0.44,0.1,0.89,0.55); inset->SetLeftMargin(0.13); inset->SetRightMargin(0.05); h3->SetTitle(""); inset->Draw(); inset->cd(); h3->Draw(); h3b->SetMarkerSize(0.2);h3b->SetMarkerStyle(20);h3b->SetMarkerColor(kRed); h3b->Draw("same"); if(holeQuadPar[0]!=0) funchole->Draw("same"); c7->Print("Plots/plot7_"+m_board+"_s"+m_sector+"_vb"+m_bias+".png"); } /* TCanvas *c2 = new TCanvas("c2","Plot 2",1600,600); c2->Divide(5,2); addGraphics(h1mpa, 2, "X_{clu}-X_{trk} [mm]", ""); h1mpa->SetTitle("2.8<Y_{trk}<4.1 mm, All X, No Match Clu"); addGraphics(h1mbpa, 4, "X_{clu}-X_{trk} [mm]", ""); h1mbpa->SetTitle("1.0<Y_{trk}<2.3 mm, All X, No Match Clu"); addGraphics(h1fpa, 1, "X_{clu}-X_{trk} [mm]", ""); h1fpa->SetTitle("2.8<Y_{trk}<4.1 mm, All X, Match Clu"); addGraphics(h1fbpa, 1, "X_{clu}-X_{trk} [mm]", ""); h1fbpa->SetTitle("1.0<Y_{trk}<2.3 mm, All X, Match Clu"); addGraphics(h1mpa1, 2, "X_{clu}-X_{trk} [mm]", ""); h1mpa1->SetTitle("2.8<Y_{trk}<4.1 mm, -3.5<X_{trk}<-2.0 mm, No Match Clu"); addGraphics(h1mpa2, 2, "X_{clu}-X_{trk} [mm]", ""); h1mpa2->SetTitle("2.8<Y_{trk}<4.1 mm, -2.0<X_{trk}<-1.0 mm, No Match Clu"); addGraphics(h1mpa3, 2, "X_{clu}-X_{trk} [mm]", ""); h1mpa3->SetTitle("2.8<Y_{trk}<4.1 mm, -1.0<X_{trk}<0.0 mm, No Match Clu"); addGraphics(h1mpa4, 2, "X_{clu}-X_{trk} [mm]", ""); h1mpa4->SetTitle("2.8<Y_{trk}<4.1 mm, 0.0<X_{trk}<1.0 mm, No Match Clu"); addGraphics(h1mpa5, 2, "X_{clu}-X_{trk} [mm]", ""); h1mpa5->SetTitle("2.8<Y_{trk}<4.1 mm, 1.5<X_{trk}<3.5 mm, No Match Clu"); h1mpa->SetLineWidth(1); h1mpa1->SetLineWidth(1); h1mpa2->SetLineWidth(1); h1mpa3->SetLineWidth(1); h1mpa4->SetLineWidth(1); h1mpa5->SetLineWidth(1); h1fpa->SetLineWidth(1); h1fbpa->SetLineWidth(1); h1fpa->GetXaxis()->SetRangeUser(-3,9); h1fbpa->GetXaxis()->SetRangeUser(-3,9); h1mbpa->GetXaxis()->SetRangeUser(-3,9); h1mpa->GetXaxis()->SetRangeUser(-3,9); h1mpa1->GetXaxis()->SetRangeUser(-3,9); h1mpa2->GetXaxis()->SetRangeUser(-3,9); h1mpa3->GetXaxis()->SetRangeUser(-3,9); h1mpa4->GetXaxis()->SetRangeUser(-3,9); h1mpa5->GetXaxis()->SetRangeUser(-3,9); c2->cd(1); h3b->Draw(); double xl[5] = {-3.5, -2.0, -1.0, 0.0, 1.5}; double xh[5] = {-2.0, -1.0, 0.0, 1.0, 3.5}; for(int i=0;i<5;i++){ TBox *b = new TBox(xl[i],yInt1[0],xh[i],yInt2[1]); b->SetLineColor(2); b->SetFillStyle(0);b->SetLineWidth(2); b->Draw(); } TBox *b = new TBox(xl[0],yInt3[0],xh[4],yInt3[1]); b->SetLineColor(4);b->SetFillStyle(0);b->SetLineWidth(2); b->Draw(); c2->cd(2); h1mpa->Draw(); c2->cd(3); h1fpa->GetYaxis()->SetRangeUser(0,30); h1fpa->Draw(); c2->cd(4); h1mbpa->Draw(); c2->cd(5); h1fbpa->GetYaxis()->SetRangeUser(0,30); h1fbpa->Draw(); c2->cd(6); h1mpa1->Draw(); c2->cd(7); h1mpa2->Draw(); c2->cd(8); h1mpa3->Draw(); c2->cd(9); h1mpa4->Draw(); c2->cd(10); h1mpa5->Draw(); c2->Print("Plots/plot2_"+m_board+"_s"+m_sector+"_vb"+m_bias+".png"); */ /* TCanvas *c3 = new TCanvas("c3","Plot 3",800,600); c3->Divide(1,2); c3->cd(1); h1mpaU->GetXaxis()->SetRangeUser(iLo-10,iHi+10); h1mpaU->Draw(); c3->cd(2); h1mpaL->GetXaxis()->SetRangeUser(iLo-10,iHi+10); h1mpaL->Draw(); c3->Print("Plots/plot3_"+m_board+"_s"+m_sector+"_vb"+m_bias+".png"); */ addGraphics(h12m,1,"Interstrip Pos","<ADC>"); addGraphics(h12n,1,"Interstrip Pos","<Cluster Size>"); TCanvas *c6 = new TCanvas("c6","Plot 6",1200,400); c6->Divide(3,1); c6->cd(1); hepas1->SetMaximum(1.2); hepas1->SetMinimum(0.5); hepas1->Draw(); c6->cd(2); h12m->SetMinimum(0); h12m->SetMaximum(1.2*h12m->GetMaximum()); h12m->Draw(); c6->cd(3); h12n->SetMinimum(0.5); h12n->SetMaximum(2.0); h12n->Draw(); c6->Print("Plots/plot6_"+m_board+"_s"+m_sector+"_vb"+m_bias+".png"); fout->Write(); }