/** This method initializes histograms. */ INT MPulseLengths_init() { // This histogram has the pulse lengths on the X-axis and the number of pulses on the Y-axis // One histogram is created for each detector std::map<std::string, std::string> bank_to_detector_map = gSetup->fBankToDetectorMap; for(std::map<std::string, std::string>::iterator mapIter = bank_to_detector_map.begin(); mapIter != bank_to_detector_map.end(); mapIter++) { std::string bankname = mapIter->first; std::string detname = gSetup->GetDetectorName(bankname); std::string histname = "h" + detname + "_Lengths"; std::string histtitle = "Plot of the pulse lengths for the " + detname + " detector"; TH1I* hDetLengths = new TH1I(histname.c_str(), histtitle.c_str(), 100,0,100); hDetLengths->GetXaxis()->SetTitle("Pulse Lengths [N Samples]"); hDetLengths->GetYaxis()->SetTitle("Arbitrary Unit"); hDetLengths->SetBit(TH1::kCanRebin); length_histograms_map[bankname] = hDetLengths; } std::string histname = "hAvgPulseLengthsPerChannel"; std::string histtitle = "Plot of the average pulse lengths per event for the each channel"; average_length_histogram = new TH2I(histname.c_str(), histtitle.c_str(), 1,0,1, 5000,0,5000); average_length_histogram->GetXaxis()->SetTitle("Bank Name"); average_length_histogram->GetYaxis()->SetTitle("MIDAS Event Number"); average_length_histogram->SetBit(TH1::kCanRebin); return SUCCESS; }
int RFMacro_BeamBunchPeriod(void) { gDirectory->cd("/"); //return to file base directory //Goto Beam Path TDirectory *locDirectory = (TDirectory*)gDirectory->FindObjectAny("RF"); if(!locDirectory) return 0; locDirectory->cd(); //Get RF Bunch Period Histograms gDirectory->cd("RF_BeamBunchPeriod"); TH1I* locHist_RFBeamBunchPeriod = (TH1I*)gDirectory->Get("RFBeamBunchPeriod"); //Get/Make Canvas TCanvas *locCanvas = NULL; if(TVirtualPad::Pad() == NULL) locCanvas = new TCanvas("RF_BeamBunchPeriod", "RF_BeamBunchPeriod", 1200, 800); //for testing else locCanvas = gPad->GetCanvas(); //Draw gPad->SetTicks(); gPad->SetGrid(); if(locHist_RFBeamBunchPeriod != NULL) { TH1I* locHist = locHist_RFBeamBunchPeriod; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } return 1; }
int RFMacro_TDCConversion(void) { gDirectory->cd("/"); //return to file base directory //Goto Beam Path TDirectory *locDirectory = (TDirectory*)gDirectory->FindObjectAny("RF"); if(!locDirectory) return 0; locDirectory->cd(); //Get RF DeltaT Histograms gDirectory->cd("DeltaT_RF_FirstTime"); TH1I* locHist_FDCRF_FirstTimeDeltaT = (TH1I*)gDirectory->Get("FDCRF_FirstTimeDeltaT"); TH1I* locHist_TOFRF_FirstTimeDeltaT = (TH1I*)gDirectory->Get("TOFRF_FirstTimeDeltaT"); TH1I* locHist_TAGHRF_FirstTimeDeltaT = (TH1I*)gDirectory->Get("TAGHRF_FirstTimeDeltaT"); TH1I* locHist_PSCRF_FirstTimeDeltaT = (TH1I*)gDirectory->Get("PSCRF_FirstTimeDeltaT"); //Get/Make Canvas TCanvas *locCanvas = NULL; if(TVirtualPad::Pad() == NULL) locCanvas = new TCanvas("RF_TDCConversion", "RF_TDCConversion", 1200, 800); //for testing else locCanvas = gPad->GetCanvas(); locCanvas->Divide(2, 2); //Draw locCanvas->cd(1); gPad->SetTicks(); gPad->SetGrid(); if(locHist_TOFRF_FirstTimeDeltaT != NULL) { TH1I* locHist = locHist_TOFRF_FirstTimeDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } locCanvas->cd(2); gPad->SetTicks(); gPad->SetGrid(); if(locHist_TAGHRF_FirstTimeDeltaT != NULL) { TH1I* locHist = locHist_TAGHRF_FirstTimeDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } locCanvas->cd(3); gPad->SetTicks(); gPad->SetGrid(); if(locHist_PSCRF_FirstTimeDeltaT != NULL) { TH1I* locHist = locHist_PSCRF_FirstTimeDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } locCanvas->cd(4); gPad->SetTicks(); gPad->SetGrid(); if(locHist_FDCRF_FirstTimeDeltaT != NULL) { TH1I* locHist = locHist_FDCRF_FirstTimeDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } return 1; }
int main() { float const conS =.3/2.35; ofstream fout("cal/backN.cal"); ofstream fwhm("cal/fwhmback.dat"); TFile f("sort.root"); TCanvas* canvas[14]; int Ntele = 14; int Nstrip = 32; ostringstream outstring; TH2I frame("frame","",10,4.5,9.5,10,0,130); frame.SetStats(kFALSE); double xx[14*32]; double yy[14*32]; TF1 *func = new TF1("fit",ThPeaks,3,9,4); double para[5]; ifstream file("cal/back.cal"); float intercept, slope; int i1,i2; string name; TH1F con("con","",500,0,10); for (int itele=0;itele<Ntele;itele++) { outstring.str(""); outstring << "B"<<itele; name = outstring.str(); canvas[itele] = new TCanvas(name.c_str()); canvas[itele]->Divide(6,6); for (int istrip =0;istrip<Nstrip;istrip++) { canvas[itele]->cd(istrip+1); file >> i1 >> i2 >> slope >> intercept; outstring.str(""); outstring << "back/cal/EBC"<<itele<<"_"<<istrip; string name = outstring.str(); cout << name << endl; TH1I * hist = (TH1I*) f.Get(name.c_str()); frame.Draw(); hist->SetStats(kFALSE); hist->GetXaxis()->SetRangeUser(4.5,9.5); con.GetXaxis()->SetRangeUser(4.5,9.5); for (int i=1;i<=500;i++) for (int j=1;j<500;j++) { float deltax = hist->GetBinCenter(i)-con.GetBinCenter(j); if (fabs(deltax) > 10.*conS)continue; float fact = gauss(deltax,0.,conS); float y = fact*hist->GetBinContent(i)*hist->GetBinWidth(i); con.SetBinContent(j,y+con.GetBinContent(j)); } for (int i=1;i<=500;i++) { hist->SetBinContent(i,con.GetBinContent(i)); con.SetBinContent(i,0.); } hist->Draw("same"); func->SetParameter(0,0); func->SetParameter(1,1.); func->FixParameter(2,conS); //func->SetParameter(2,0.1); func->SetParameter(3,8.); func->SetLineColor(2); //func->Draw("same"); hist->Fit(func); func->GetParameters(para); cout << "chisq=" << func->GetChisquare() << endl; if (fabs(para[1]-1.) < .2) { slope *= para[1]; intercept = intercept*para[1] + para[0]; } fout << itele << " " << istrip << " " << slope << " " << intercept << endl; fwhm << itele << " " << istrip << " " << para[2]*2.35 << endl; int ii = itele*32+istrip; xx[ii] = (float)ii; yy[ii] = para[2]*2.35; cout << para[0] << " " << para[1] << " " << para[2] << endl; } } TFile g("ThBack.root","RECREATE"); for (int itele=0;itele<Ntele;itele++) canvas[itele]->Write(); TCanvas fwhmCan("fwhm"); TH2I frame2("frame2","",10,0,448,10,0,0.12); frame2.SetStats(kFALSE); frame2.GetYaxis()->SetTitle("FWHM [MeV]"); frame2.GetXaxis()->SetTitle("back strip"); frame2.Draw(); TGraph graph(32*14,xx,yy); graph.Draw("*"); graph.Write(); fwhmCan.Write(); g.Write(); }
int RFMacro_SelfResolution(void) { gStyle->SetOptStat(1111); gDirectory->cd("/"); //return to file base directory //Goto Beam Path TDirectory *locDirectory = (TDirectory*)gDirectory->FindObjectAny("RF"); if(!locDirectory) return 0; locDirectory->cd(); //Get RF DeltaT Histograms gDirectory->cd("DeltaT_RF_Itself"); TH1I* locHist_FDCRF_SelfDeltaT = (TH1I*)gDirectory->Get("FDCRF_SelfDeltaT"); TH1I* locHist_TOFRF_SelfDeltaT = (TH1I*)gDirectory->Get("TOFRF_SelfDeltaT"); TH1I* locHist_TAGHRF_SelfDeltaT = (TH1I*)gDirectory->Get("TAGHRF_SelfDeltaT"); TH1I* locHist_PSCRF_SelfDeltaT = (TH1I*)gDirectory->Get("PSCRF_SelfDeltaT"); //Time resolutions double locTimeResolutionSq_TOF = locHist_TOFRF_SelfDeltaT->GetStdDev() / sqrt(2.0); locTimeResolutionSq_TOF *= locTimeResolutionSq_TOF; double locTimeResolutionSq_FDC = locHist_FDCRF_SelfDeltaT->GetStdDev() / sqrt(2.0); locTimeResolutionSq_FDC *= locTimeResolutionSq_FDC; double locTimeResolutionSq_PSC = locHist_PSCRF_SelfDeltaT->GetStdDev() / sqrt(2.0); locTimeResolutionSq_PSC *= locTimeResolutionSq_PSC; double locTimeResolutionSq_TAGH = locHist_TAGHRF_SelfDeltaT->GetStdDev() / sqrt(2.0); locTimeResolutionSq_TAGH *= locTimeResolutionSq_TAGH; //Print Coarse offsets to screen: cout << "Time-resolution-squared for TOF/TAGH/PSC/FDC are: " << locTimeResolutionSq_TOF << ", " << locTimeResolutionSq_TAGH << ", " << locTimeResolutionSq_PSC << ", " << locTimeResolutionSq_FDC << endl; //Print Coarse offsets to file: ofstream locOutputFileStream; locOutputFileStream.open("rf_time_resolution_sq.txt"); locOutputFileStream << std::setprecision(6) << locTimeResolutionSq_TOF << " " << locTimeResolutionSq_TAGH << " " << locTimeResolutionSq_PSC << " " << locTimeResolutionSq_FDC << endl; locOutputFileStream.close(); //Get/Make Canvas TCanvas *locCanvas = NULL; if(TVirtualPad::Pad() == NULL) locCanvas = new TCanvas("RF_SelfResolution", "RF_SelfResolution", 1200, 800); //for testing else locCanvas = gPad->GetCanvas(); locCanvas->Divide(2, 2); //Draw locCanvas->cd(1); gPad->SetTicks(); gPad->SetGrid(); if(locHist_TOFRF_SelfDeltaT != NULL) { TH1I* locHist = locHist_TOFRF_SelfDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } locCanvas->cd(2); gPad->SetTicks(); gPad->SetGrid(); if(locHist_TAGHRF_SelfDeltaT != NULL) { TH1I* locHist = locHist_TAGHRF_SelfDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } locCanvas->cd(3); gPad->SetTicks(); gPad->SetGrid(); if(locHist_PSCRF_SelfDeltaT != NULL) { TH1I* locHist = locHist_PSCRF_SelfDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } locCanvas->cd(4); gPad->SetTicks(); gPad->SetGrid(); if(locHist_FDCRF_SelfDeltaT != NULL) { TH1I* locHist = locHist_FDCRF_SelfDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } }
void processWaveforms(TTree* treeToSort, vector<Plots>& targetPlots, TFile* outFile, string mode) { TH1D* fittedTimeHisto = new TH1D("raw fitted times", "raw fitted times", TOF_BINS,TOF_LOWER_BOUND,TOF_RANGE); TH2D* deltaTVsPulseHeight = new TH2D("delta T vs. pulse height","delta T vs. pulse height", 200, -10, 10, 1580, 0, 15800); TH2D* deltaTVsPulseIntegral0 = new TH2D("delta T vs. pulse integral, target 0","delta T vs. pulse integral, target 0",100, -10, 10, pow(2,15), 0, pow(2,15)); TH2D* deltaTVsPulseIntegral1 = new TH2D("delta T vs. pulse integral, target 1","delta T vs. pulse integral, target 1",100, -10, 10, pow(2,15), 0, pow(2,15)); TH2D* deltaTVsPulseIntegral2 = new TH2D("delta T vs. pulse integral, target 2","delta T vs. pulse integral, target 2",100, -10, 10, pow(2,15), 0, pow(2,15)); TH2D* deltaTVsPulseIntegral3 = new TH2D("delta T vs. pulse integral, target 3","delta T vs. pulse integral, target 3",100, -10, 10, pow(2,15), 0, pow(2,15)); TH2D* deltaTVsPulseIntegral4 = new TH2D("delta T vs. pulse integral, target 4","delta T vs. pulse integral, target 4",100, -10, 10, pow(2,15), 0, pow(2,15)); TH2D* deltaTVsPulseIntegral5 = new TH2D("delta T vs. pulse integral, target 5","delta T vs. pulse integral, target 5",100, -10, 10, pow(2,15), 0, pow(2,15)); TH1D* triggerAmplitudeHisto = new TH1D("triggerAmplitudeHisto","triggerAmplitudeHisto",pow(2,14),0,pow(2,14)); TH1D* relativeTriggerTimeHisto = new TH1D("relativeTriggerTimeHisto","relative trigger time, from start of fitted wavelet",200,-5,5); TH2D* relativeTriggerTimeVsAmplitude = new TH2D("relativeTriggerTimeVSAmplitude","relative trigger time vs amplitude", 200, -5, 5, pow(2,14), 0, pow(2,14)); TH1D* gammaToGammaTimeH = new TH1D("gammaToGammaTimeH","time between consecutive gammas", 1000, -5, 5); if(mode=="DPP") { setBranchesHistos(treeToSort); int totalEntries = treeToSort->GetEntries(); cout << "Total waveforms = " << totalEntries << endl; vector<double> triggerList; waveformWrap = new TMultiGraph("DPP waveforms", "DPP waveforms"); vector<TGraph*> waveletGraphs; vector<TGraph*> triggerGraphs; int gammaGate[2] = {80,90}; double prevGammaTime = 0; for(int j=1; j<totalEntries; j++) { if(j%1000==0) { cout << "Processing triggers on waveform " << j << "\r"; fflush(stdout); } /*if(j>500) { break; }*/ triggerList.clear(); triggerValues.clear(); // pull individual waveform event treeToSort->GetEntry(j); // calculate the baseline for this waveform BASELINE = calculateBaseline(*procEvent.waveform); // Loop through all points in the waveform and fit peaks for(int k=DPP_PEAKFIT_START; (size_t)k<procEvent.waveform->size(); k++) { // Check to see if this point creates a new trigger if(isTrigger(k, *procEvent.waveform)) { // trigger found - plot/fit/extract time double timeDiff = procEvent.completeTime-procEvent.macroTime; double microTime = fmod(timeDiff,MICRO_LENGTH); if(microTime > gammaGate[0] && microTime < gammaGate[1]) { processTrigger(j, k, triggerList, *procEvent.waveform); double fullTime = procEvent.completeTime-procEvent.macroTime+data.trigger1Time+DPP_PEAKFIT_OFFSET; gammaToGammaTimeH->Fill(fmod(fullTime,MICRO_LENGTH)-prevGammaTime); prevGammaTime=fmod(fullTime,MICRO_LENGTH); fillTriggerHistos(fullTime, targetPlots); fittedTimeHisto->Fill(data.trigger1Time); } //processTrigger(j, k, triggerList, *procEvent.waveform); break; } } //produceTriggerOverlay(j, triggerList, *procEvent.waveform); TH2D* deltaTVsPulseIntegralHisto; switch(procEvent.targetPos-1) { case 0: deltaTVsPulseIntegralHisto = deltaTVsPulseIntegral0; break; case 1: deltaTVsPulseIntegralHisto = deltaTVsPulseIntegral1; break; case 2: deltaTVsPulseIntegralHisto = deltaTVsPulseIntegral2; break; case 3: deltaTVsPulseIntegralHisto = deltaTVsPulseIntegral3; break; case 4: deltaTVsPulseIntegralHisto = deltaTVsPulseIntegral4; break; case 5: deltaTVsPulseIntegralHisto = deltaTVsPulseIntegral5; break; } triggerAmplitudeHisto->Fill(data.peak1Amplitude); relativeTriggerTimeHisto->Fill(data.trigger1Time+DPP_PEAKFIT_OFFSET); relativeTriggerTimeVsAmplitude->Fill(data.trigger1Time+DPP_PEAKFIT_OFFSET,data.peak1Amplitude); deltaTVsPulseIntegralHisto->Fill(data.trigger1Time+DPP_PEAKFIT_OFFSET, procEvent.lgQ); deltaTVsPulseHeight->Fill(data.trigger1Time+DPP_PEAKFIT_OFFSET, data.peak1Amplitude); // Create a new graph for each wavelet //waveletGraphs.push_back(new TGraph()); // Fill each micropulse graph with waveform samples /*for (int l=0; l<procEvent.waveform->size(); l++) { waveletGraphs.back()->SetPoint(l,l*SAMPLE_PERIOD,procEvent.waveform->at(l)); }*/ // Create a new graph for each wavelet //triggerGraphs.push_back(new TGraph()); // Fill each micropulse graph with waveform samples //triggerGraphs.back()->SetPoint(0,triggerList[0],triggerValues[0]); fill(procEvent.waveform->begin(),procEvent.waveform->end(),BASELINE); } TGraph* exponentialFit = new TGraph(); exponentialFit->SetPoint(0,-0.78,140); exponentialFit->SetPoint(1,0.16,206); exponentialFit->SetPoint(2,1.79,305); exponentialFit->SetPoint(3,2.82,417); exponentialFit->SetPoint(4,3.59,566); exponentialFit->SetPoint(5,4.4,929); exponentialFit->SetPoint(6,5.2,1482); exponentialFit->SetPoint(7,5.7,2149); exponentialFit->SetPoint(8,6.9,5319); exponentialFit->SetPoint(9,7.3,7808); exponentialFit->SetPoint(10,7.7,11395); exponentialFit->SetPoint(11,8.0,16200); exponentialFit->Write(); // Add each wavelet graph to the MultiGraph for (int m=0; m<waveletGraphs.size(); m++) { //cout << "adding graph " << m << " to multigraph" << endl; waveletGraphs[m]->Draw(); waveformWrap->Add(waveletGraphs[m],"l"); } // Add each trigger graph to the MultiGraph for (int m=0; m<triggerGraphs.size(); m++) { //cout << "adding graph " << m << " to multigraph" << endl; triggerGraphs[m]->SetMarkerSize(2); triggerGraphs[m]->SetMarkerColor(2); triggerGraphs[m]->Draw(); waveformWrap->Add(triggerGraphs[m],"*"); } waveformWrap->Write(); for(Plots p : targetPlots) { p.getTOFHisto()->Write(); p.getEnergyHisto()->Write(); } fittedTimeHisto->Write(); deltaTVsPulseIntegral0->Write(); deltaTVsPulseIntegral1->Write(); deltaTVsPulseIntegral2->Write(); deltaTVsPulseIntegral3->Write(); deltaTVsPulseIntegral4->Write(); deltaTVsPulseIntegral5->Write(); deltaTVsPulseHeight->Write(); relativeTriggerTimeHisto->Write(); triggerAmplitudeHisto->Write(); relativeTriggerTimeVsAmplitude->Write(); gammaToGammaTimeH->Write(); } else if(mode=="waveform") { setBranchesHistosW(treeToSort); triggerWalk = new TH2I("triggerWalk","trigger time vs. waveform chunk #",200,0,200,1000,0,1000); TH1I* monitorHisto = new TH1I("targetPosH", "targetPos", 7, 0, 7); monitorHisto->GetXaxis()->SetTitle("target position of each waveform"); long triggersWithGamma = 0; vector<int> fullWaveform(MACRO_LENGTH/2, BASELINE); vector<double> triggerList; int prevTargetPos = 0; double firstTimetagInSeries = 0; int totalEntries = treeToSort->GetEntries(); cout << "Total waveforms = " << totalEntries << endl; /*TCanvas *mycan = (TCanvas*)gROOT->FindObject("mycan"); if(!mycan) { mycan = new TCanvas("mycan","mycan"); }*/ // EVENT LOOP for sorting through channel-specific waveforms for(int j=1; j<totalEntries; j++) { cout << "Processing triggers on waveform " << j << "\r"; fflush(stdout); if(j>30) { break; } triggerList.clear(); triggerValues.clear(); prevTargetPos = procEvent.targetPos; // pull individual waveform event treeToSort->GetEntry(j); if(procEvent.evtNo==1) { // new macropulse; process the previous macropulse's waveform // calculate the baseline for this waveform BASELINE = calculateBaseline(fullWaveform); // Loop through all points in the waveform and fit peaks for(int k=PEAKFIT_WINDOW; (size_t)k<fullWaveform.size(); k++) { // Check to see if this point creates a new trigger if(isTrigger(k, fullWaveform)) { // trigger found - plot/fit/extract time processTrigger(j, k, triggerList, fullWaveform); // shift waveform index past the end of this fitting window // so that we don't refit the same data k += PEAKFIT_WINDOW; } /*if(triggerList.size()>10) { for(int m=0; m<triggerList.size(); m++) { cout << "triggerList[" << m << "] = " << triggerList[m] << endl; } break; }*/ } // Use the gamma peaks to find the time offset for this waveform, and // adjust the microTime with this offset double gammaOffset = calculateGammaOffset(triggerList); /*for(int m=0; (size_t)m<triggerList.size(); m++) { fillTriggerHistos(triggerList[m]-gammaOffset, targetPlots); }*/ if(gammaOffset!=0) { for(int m=0; (size_t)m<triggerList.size(); m++) { //fillTriggerHistos(triggerList[m]-gammaOffset+WAVEFORM_OFFSET, targetPlots); } triggersWithGamma++; } /*if(j<30) { produceTriggerOverlay(j, triggerList, fullWaveform); }*/ /*temp.str(""); temp << "waveformWrap" << j; waveformWrap = new TMultiGraph(temp.str().c_str(), temp.str().c_str()); vector<TGraph*> microGraphs; // Create a new graph for each micropulse period to be plotted for (int m = 0; m<floor(2*procEvent.waveform->size()/MICRO_LENGTH); m++) { microGraphs.push_back(new TGraph()); } // Fill each micropulse graph with waveform samples for (int l = 0; l<procEvent.waveform->size(); l++) { microGraphs[(int)floor(l/(double)MICRO_LENGTH)]->SetPoint(microGraphs[(int)floor(l/(double)MICRO_LENGTH)]->GetN(),fmod(2*l+WAVEFORM_OFFSET,MICRO_LENGTH),procEvent.waveform->at(l)); //cout << "Adding value " << procEvent.waveform->at(l) << " to position " << fmod(l,MICRO_LENGTH) << " in microGraph " << floor(l/(double)MICRO_LENGTH) << endl; } // Add each graph to the MultiGraph for (int m = 0; m<microGraphs.size(); m++) { //cout << "adding graph " << m << " to multigraph" << endl; microGraphs[m]->Draw(); waveformWrap->Add(microGraphs[m],"l"); } waveformWrap->Write(); */ //gPad->Modified(); //mycan->Update(); // Fill trigger histogram /*for (int l = 0; l<triggerList.size(); l++) { cout << "trigger " << l << " = " << triggerList[l] << ", " << triggerValues[l] << endl; }*/ //triggerH->Write(); //cout << "Finished processing waveform " << j << endl << endl; /*if(j==10) { break; }*/ monitorHisto->Fill(prevTargetPos); fill(fullWaveform.begin(),fullWaveform.end(),BASELINE); firstTimetagInSeries = procEvent.completeTime; } if (procEvent.targetPos == 0) { continue; } double timeOffset = procEvent.completeTime-firstTimetagInSeries; if(timeOffset<MACRO_LENGTH-2*procEvent.waveform->size()) { for(int k=0; k<procEvent.waveform->size(); k++) { fullWaveform[timeOffset/SAMPLE_PERIOD+k] = procEvent.waveform->at(k); } } } cout << "Triggers with gamma in wavelet: " << triggersWithGamma << endl; monitorHisto->Write(); for(Plots p : targetPlots) { p.getTOFHisto()->Write(); p.getEnergyHisto()->Write(); } cout << "Number of good fits: " << numberGoodFits << endl; cout << "onePeak = " << numberOnePeakFits << endl; cout << "onePeakExpBack = " << numberOnePeakExpBackFits << endl; cout << "twoPeaks = " << numberTwoPeakFits << endl << endl; cout << "Number of bad fits: " << numberBadFits << endl; } else { cerr << "Error: digitizer mode was " << mode << "; only possible options are 'DPP' or 'waveform'. Exiting..." << endl; exit(1); } }
int main(void) { gStyle->SetOptStat(1111); TDirectory *locTopDirectory = gDirectory; //Goto Beam Path TDirectory *locDirectory = (TDirectory*)gDirectory->FindObjectAny("RF"); if(!locDirectory) return 0; locDirectory->cd(); //Get RF DeltaT Histograms gDirectory->cd("DeltaT_RF_TAGH"); TH1I* locHist_FDCRF_TaggerDeltaT = (TH1I*)gDirectory->Get("FDCRF_TaggerDeltaT"); TH1I* locHist_TOFRF_TaggerDeltaT = (TH1I*)gDirectory->Get("TOFRF_TaggerDeltaT"); TH1I* locHist_TAGHRF_TaggerDeltaT = (TH1I*)gDirectory->Get("TAGHRF_TaggerDeltaT"); TH1I* locHist_PSCRF_TaggerDeltaT = (TH1I*)gDirectory->Get("PSCRF_TaggerDeltaT"); //Get/Make Canvas TCanvas *locCanvas = NULL; if(TVirtualPad::Pad() == NULL) locCanvas = new TCanvas("RF_TaggerDeltaT", "RF_TaggerDeltaT", 1200, 800); //for testing else locCanvas = gPad->GetCanvas(); locCanvas->Divide(2, 2); //Draw locCanvas->cd(1); gPad->SetTicks(); gPad->SetGrid(); if(locHist_TOFRF_TaggerDeltaT != NULL) { TH1I* locHist = locHist_TOFRF_TaggerDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } locCanvas->cd(2); gPad->SetTicks(); gPad->SetGrid(); if(locHist_TAGHRF_TaggerDeltaT != NULL) { TH1I* locHist = locHist_TAGHRF_TaggerDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } locCanvas->cd(3); gPad->SetTicks(); gPad->SetGrid(); if(locHist_PSCRF_TaggerDeltaT != NULL) { TH1I* locHist = locHist_PSCRF_TaggerDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } locCanvas->cd(4); gPad->SetTicks(); gPad->SetGrid(); if(locHist_FDCRF_TaggerDeltaT != NULL) { TH1I* locHist = locHist_FDCRF_TaggerDeltaT; locHist->GetXaxis()->SetTitleSize(0.05); locHist->GetYaxis()->SetTitleSize(0.05); locHist->GetXaxis()->SetLabelSize(0.05); locHist->GetYaxis()->SetLabelSize(0.05); locHist->Draw(); } }
void CsIProj() { TFile *file = new TFile("../root/NZ_55_New.root"); TFile *gates = new TFile("../gates/zlines.root"); TFile *gates2 = new TFile("../gates/zlines_new.root"); ofstream ofile("CsI_55A_New.dat"); TCanvas *mycan = (TCanvas*)gROOT->FindObjectAny("mycan"); if(!mycan) { mycan = new TCanvas("mycan","mycan"); mycan->Divide(1,2); } ostringstream outstring; string name; int p1= 30, p2=50; //+- fit limits up to 2 peaks. May be different. int const num_par = 5; //number of peaks times 2(pol1)+3(gaus). for(int ic =0;ic<56;ic++) { outstring.str(""); outstring << "dEE/dEE_" << ic; name = outstring.str(); mycan->cd(1); TH2I *hist = (TH2I*)file->Get(name.c_str()); hist->Draw("col"); hist->GetXaxis()->SetRangeUser(200.,1800.); hist->GetYaxis()->SetRangeUser(5.,50.); if(ic <16 || ic > 31) TCutG *mycut = (TCutG*)gates->Get(Form("Zline_%i_2_4",ic)); else TCutG *mycut = (TCutG*)gates2->Get(Form("Zline_%i_2_4",ic)); mycut->Draw(); file->cd(); outstring.str(""); outstring << "CsI/CsIGate/ECsI_" << ic << "_Gate"; name = outstring.str(); gPad->SetLogz(); mycan->cd(2); TH1I * proj = (TH1I*)file->Get(name.c_str()); proj->Draw(); proj->Rebin(4); proj->GetXaxis()->SetRangeUser(700.,1800.); mycan->Modified(); mycan->Update(); TMarker * mark; mark=(TMarker*)mycan->WaitPrimitive("TMarker"); //Get the Background limits int bkg_lo = mark->GetX(); delete mark; mark=(TMarker*)mycan->WaitPrimitive("TMarker"); int bkg_hi = mark->GetX(); delete mark; mark=(TMarker*)mycan->WaitPrimitive("TMarker"); // Get the 1st peak initial guess int peak1 = mark->GetX(); delete mark; double par[num_par] = {0.}; double out[num_par] = {0.}; int peak1_lo = peak1 - p1, peak1_hi = peak1 + p1; // Peak center and limits TF1 *l1 = new TF1("l1", "pol1", bkg_lo, bkg_hi); TF1 *g1 = new TF1("g1", "gaus", peak1_lo,peak1_hi); TF1 *total = new TF1("total", "pol1(0)+gaus(2)", bkg_lo,bkg_hi); proj->Fit(l1,"R"); proj->Fit(g1,"R+"); l1->GetParameters(&par[0]); g1->GetParameters(&par[2]); total->SetParameters(par); proj->Fit(total,"R"); total->GetParameters(out); ofile << ic << " " << out[3] << endl; outstring.str(""); outstring << "55A_" << ic; name = outstring.str(); total->SetName(name.c_str()); total->Draw("same"); mycan->Modified(); mycan->Update(); bool IsGood = 0; cout << "Good fit?" << endl; cin >> IsGood; if(IsGood) { ofile << ic << " " << out[3] << endl; } else ofile << ic << " " << -1 << endl; } return; }