void ExpManager::DrawMap(TString NameTitle, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax) { TMultiGraph *mg = new TMultiGraph(); //Draw a cross TGraphErrors *frame = new TGraphErrors(); //= new TGraph2DErrors(np, x_array, y_array, bz_array, ex, ey, ez); frame->SetPoint(0,+0,+100); frame->SetPoint(1,+0,-100); frame->SetPoint(2,0,0); frame->SetPoint(3,-100,0); frame->SetPoint(4,+100,0); frame->SetPoint(5,+0,+0); frame->SetPoint(6,+0,-100); frame->SetMarkerColor(kWhite); frame->SetDrawOption("ap"); //Draw the map TGraphErrors *fGraph = new TGraphErrors(); //= new TGraph2DErrors(np, x_array, y_array, bz_array, ex, ey, ez); fGraph->SetMarkerSize(1.2); fGraph->SetMarkerStyle(20); fGraph->SetMarkerColor(kBlue); fGraph->SetLineColor(kBlue); fGraph->SetLineWidth(1); //fGraph->SetDrawOption("ap"); int graph_counter = 0 ; for (unsigned i=0; i< fExpY.size(); i++) { if( (fExpX.at(i) >= xmin && fExpX.at(i) <= xmax) && (fExpY.at(i) >= ymin && fExpY.at(i) <= ymax) && (fExpZ.at(i) >= zmin && fExpZ.at(i) <= zmax) ) { fGraph->SetPoint(graph_counter,fExpX.at(i),fExpY.at(i)); fGraph->SetPointError(graph_counter,fExpXErr.at(i),fExpYErr.at(i)); graph_counter++; } } //fGraph->Write(); mg->SetTitle(NameTitle+Form(" Map : %.2f < X < %.2f mm %.2f < Y < %.2f mm %.2f < Z < %.2f mm;X (mm);Y (mm)",xmin,xmax,ymin,ymax,zmin,zmax)); mg->SetName(NameTitle+Form("_Map__X_%.2f_%.2fmm__Y_%.2f_%.2fmm__Z_%.2f_%.2fmm",xmin,xmax,ymin,ymax,zmin,zmax)); mg->Add(frame); mg->Add(fGraph); mg->Write(); }
vector<float> getSlopeRatio(char slice, const float MAX1, const float MAX2, const float STEP, float xmin, float xmax, float ymin, float ymax){ // TString fitFilename; // // fitFilename.Form("goodFits/Fit_%c_%g_%g_%g_%g.root", slice, xmin, xmax, ymin, ymax); // TFile *goodFits = new TFile(fitFilename.Data(), "RECREATE"); // // fitFilename.Form("badFits/Fit_%c_%g_%g_%g_%g.root", slice, xmin, xmax, ymin, ymax); // TFile *badFits = new TFile(fitFilename.Data(), "RECREATE"); // // fitFilename.Form("allFits/Fit_%c_%g_%g_%g_%g.root", slice, xmin, xmax, ymin, ymax); // TFile *allFits = new TFile(fitFilename.Data(), "RECREATE"); float meanAmp1[5] = {0}, meanAmp2[5] = {0}, eX1[5] = {0}, eX2[5] = {0}, eY1[5] = {0}, eY2[5] = {0}; float energy[5] = {20, 50, 100, 150, 200}; //Different beam energies int runs[5] = {5651, 5654, 5655, 5659, 5661}; //Runs used at different gains vector<float> point(2); //Vector to be returned point.at(0) = 0; point.at(1) = 0; TFile *file = new TFile("myfile.root", "RECREATE"); TH1F *hist1 = new TH1F("hist1", "hist1", 10000, -3000, 3000); //Histograms for APDs 1 and 2 TH1F *hist2 = new TH1F("hist2", "hist2", 10000, -3000, 3000); TFile *f; TTree *h4; TF1 *g1, *g2, *f1, *f2; TString filename, plot1, plot2, cut, histname, newName; newName.Form("Resolution%c/%g_%g_%g/%c_%g_%g_%g_%g.root", slice, MAX1, MAX2, STEP, slice, xmin, xmax, ymin, ymax); TFile *newFile = new TFile(newName.Data(), "RECREATE"); //File that stores the two histograms for each slice for(int i = 0; i < 5; i++){ filename.Form("./ntuples_v1/analysis_%d.root", runs[i]); f = TFile::Open(filename.Data()); h4 = (TTree*) f->Get("h4"); file->cd(); //Need this so the histograms have a place to "live" float xOffset = 2.5; //Difference between X[0] and X[1]. Determined by Draw("X[0]:X[1]"). There is no Y offset //Plot the fit_ampl of all the runs plot1.Form("fit_ampl[XTAL_C0_APD1] >> hist1"); plot2.Form("fit_ampl[XTAL_C0_APD2] >> hist2"); //tag //Cut to look only within the specified slice cut.Form("(X[0] > %f) && (X[1] > %f) && (X[0] < %f) && (X[1] < %f) && (Y[0] > %f) && (Y[1] > %f) && (Y[0] < %f) && (Y[1] < %f)", xmin, xmin + xOffset, xmax, xmax + xOffset, ymin, ymin, ymax, ymax); h4->Draw(plot1.Data(), cut.Data()); h4->Draw(plot2.Data(), cut.Data()); allFits->cd(); hist1->Write("hist1"); hist2->Write("hist2"); float cutoff = hist1->GetMean() - 3*hist1->GetRMS(); //Designate a cutoff value for fit_ampl based on the previous plot cut.Form("(X[0] > %f) && (X[1] > %f) && (X[0] < %f) && (X[1] < %f) && (Y[0] > %f) && (Y[1] > %f) && (Y[0] < %f) && (Y[1] < %f) && (fit_ampl[XTAL_C0_APD1] > %f)", xmin, xmin + xOffset, xmax, xmax + xOffset, ymin, ymin, ymax, ymax, cutoff); long int entries1 = h4->Draw(plot1.Data(), cut.Data()); //Replot with fit_ampl restriction //Fit the plot with a Gaussian g1 = new TF1("g1", "gaus", hist1->GetMean() - 2*hist1->GetRMS(), hist1->GetMean() + 2*hist1->GetRMS()); g1->SetParameters(1, hist1->GetMean(), hist1->GetRMS()); g1->SetParLimits(1, hist1->GetMean() - hist1->GetRMS()/2, hist1->GetMean() + hist1->GetRMS()/2); g1->SetParLimits(2, hist1->GetRMS()/10, hist1->GetRMS()/2); hist1->Fit(g1, "RQME"); //Fit the plot with a crystalball based on the Gaussian f1 = new TF1("f1","crystalball", hist1->GetMean() - 2*hist1->GetRMS(), hist1->GetMean() + 2*hist1->GetRMS()); f1->SetParameters(1, g1->GetParameter(1), g1->GetParameter(2)/3, 1, .5); f1->SetParLimits(1, g1->GetParameter(1) - g1->GetParameter(2), g1->GetParameter(1) + g1->GetParameter(2)); f1->SetParLimits(4, 0.1, 4); f1->SetParLimits(3, 0.1, 10); f1->SetParLimits(2, (g1->GetParameter(2))/10, g1->GetParameter(2)/2); hist1->Fit(f1, "RQME"); //Attempt to refit if the first failed for some reason, such as a bad Gaussian fit if((f1->GetChisquare()/entries1 - 0.2132) > 1*0.03559){ //Using values from chi2 distribution on 6 6 2 run f1->SetParameter(1, hist1->GetMean()); f1->SetParameter(2, hist1->GetRMS()/3); f1->SetParLimits(1, hist1->GetMean() - hist1->GetRMS()/2, hist1->GetMean() + hist1->GetRMS()/2); f1->SetParLimits(2, hist1->GetRMS()/10, hist1->GetRMS()/2); hist1->Fit(f1, "RQME"); if((f1->GetChisquare()/entries1 - 0.2132) > 1*0.03559){ badFits->cd(); histname.Form("APD1_%d_%g_%g_%g_%g", i, xmin, xmax, ymin, ymax); //tag hist1->Write(histname.Data()); } else{ goodFits->cd(); histname.Form("APD1_%d_%g_%g_%g_%g", i, xmin, xmax, ymin, ymax); //tag hist1->Write(histname.Data()); } } allFits->cd(); histname.Form("APD1_%d_%g_%g_%g_%g", i, xmin, xmax, ymin, ymax); //tag hist1->Write(histname.Data()); chi2->Fill(f1->GetChisquare()/entries1); //Save histogram newFile->cd(); histname.Form("APD1_%d", i); //tag hist1->Write(histname.Data()); file->cd(); //Repeat of everything with APD2 cutoff = hist2->GetMean() - 3*hist2->GetRMS(); cut.Form("(X[0] > %f) && (X[1] > %f) && (X[0] < %f) && (X[1] < %f) && (Y[0] > %f) && (Y[1] > %f) && (Y[0] < %f) && (Y[1] < %f) && (fit_ampl[XTAL_C0_APD2] > %f)", xmin, xmin + xOffset, xmax, xmax + xOffset, ymin, ymin, ymax, ymax, cutoff); long int entries2 = h4->Draw(plot2.Data(), cut.Data()); g2 = new TF1("g2", "gaus", hist2->GetMean() - 2*hist2->GetRMS(), hist2->GetMean() + 2*hist2->GetRMS()); g2->SetParameters(1, hist2->GetMean(), hist2->GetRMS()); g2->SetParLimits(1, hist2->GetMean() - hist2->GetRMS()/2, hist2->GetMean() + hist2->GetRMS()/2); g2->SetParLimits(2, hist2->GetRMS()/10, hist2->GetRMS()/2); hist2->Fit(g2, "RQME"); f2 = new TF1("f2","crystalball", hist2->GetMean() - 2*hist2->GetRMS(), hist2->GetMean() + 2*hist2->GetRMS()); f2->SetParameters(1, g2->GetParameter(1), g2->GetParameter(2)/3, 1, .5); f2->SetParLimits(1, g2->GetParameter(1) - g2->GetParameter(2), g2->GetParameter(1) + g2->GetParameter(2)); f2->SetParLimits(4, 0.1, 4); f2->SetParLimits(3, 0.1, 10); f2->SetParLimits(2, (g2->GetParameter(2))/10, g2->GetParameter(2)/2); hist2->Fit(f2, "RQME"); if((f2->GetChisquare()/entries2 - 0.2132) > 1*0.03559){ //Using values from chi2 distribution on 6 6 2 run f2->SetParameter(1, hist2->GetMean()); f2->SetParameter(2, hist2->GetRMS()/3); f2->SetParLimits(1, hist2->GetMean() - hist2->GetRMS()/2, hist2->GetMean() + hist2->GetRMS()/2); f2->SetParLimits(2, hist2->GetRMS()/10, hist2->GetRMS()/2); hist2->Fit(f2, "RQME"); if((f2->GetChisquare()/entries2 - 0.2132) > 1*0.03559){ badFits->cd(); histname.Form("APD2_%d_%g_%g_%g_%g", i, xmin, xmax, ymin, ymax); //tag hist2->Write(histname.Data()); } else{ goodFits->cd(); histname.Form("APD2_%d_%g_%g_%g_%g", i, xmin, xmax, ymin, ymax); //tag hist2->Write(histname.Data()); } } allFits->cd(); histname.Form("APD2_%d_%g_%g_%g_%g", i, xmin, xmax, ymin, ymax); //tag hist1->Write(histname.Data()); chi2->Fill(f2->GetChisquare()/entries2); newFile->cd(); histname.Form("APD2_%d", i); //tag hist2->Write(histname.Data()); //Use the fit parameters as values to fill the arrays meanAmp1[i] = f1->GetParameter(1); eY1[i] = f1->GetParError(1); hist1->Reset(); meanAmp2[i] = f2->GetParameter(1); eY2[i] = f2->GetParError(1); hist2->Reset(); } //Make graphs from arrays TGraphErrors *gr1 = new TGraphErrors(5, energy, meanAmp1, eX1, eY1); TGraphErrors *gr2 = new TGraphErrors(5, energy, meanAmp2, eX2, eY2); //Making the graphs nice gr1->GetXaxis()->SetTitle("Beam Energy"); gr1->GetYaxis()->SetTitle("Mean Fit Amplitude"); gr1->SetMarkerStyle(21); gr2->SetMarkerStyle(20); gr2->SetMarkerColor(kBlue); gr2->SetLineColor(kBlue); //Linear fit of both graphs TFitResultPtr r1 = gr1->Fit("pol1", "S MEQ"); TFitResultPtr r2 = gr2->Fit("pol1", "S MEQ"); //Getting the slope and error of each fit float slope1 = r1->Value(1); float slope2 = r2->Value(1); float err1 = r1->ParError(1); float err2 = r2->ParError(1); float chi1 = r1->Chi2(); float chi2 = r2->Chi2(); //cout << chi1 << " " << chi2 << endl; //Plotting both graphs together TMultiGraph *mg = new TMultiGraph("mg", "Energy Resolution Calibration"); mg->Add(gr1); mg->Add(gr2); mg->Draw("apl"); mg->GetXaxis()->SetTitle("Beam Energy (GeV)"); mg->GetYaxis()->SetTitle("Mean Fit Amplitude"); TLegend* leg = new TLegend(0.1,0.7,0.5,0.9); leg->AddEntry(gr1,"APD1","lp"); leg->AddEntry(gr2,"APD2","lp"); leg->Draw(); mg->Write(); // point.at(0)= slope2+slope1; // point.at(1) = sqrt((err1*err1) + (err2*err2)); //Filling the vector with the relevant values point.at(0)= slope2/slope1; point.at(1) = point.at(0)*sqrt((err1*err1)/(slope1*slope1) + (err2*err2)/(slope2*slope2)); //Error propagation return point; }
int main(int argc, char *argv[]) { setenv("TZ","UTC",1); tzset(); gROOT->SetStyle("Plain"); printf("[email protected] (build %s %s)\n", __DATE__, __TIME__); char *RunFileName="$HOME/analyisis/default_00.root"; char *OutputFileName="$HOME/analysis/RunFlag_out.root"; bool debug = false; int c; opterr = 0; while ((c = getopt (argc, argv, "hf:i:")) != -1) //: after var ->Waits for input switch (c) { case 'f': OutputFileName = optarg ; break; case 'i': RunFileName = optarg ; break; case '?': if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\nTry '-h'\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\nTry '-h'\n", optopt); return 1; case 'h': cout << endl; cout << " Overview: optimal window size\n"; cout << "===============================\n\n"; cout << " -h HELP -- you already tried :-)\n"; cout << " -f output file name (default: " << OutputFileName << ")\n"; cout << " -i input file name in STAR format (default: " << RunFileName << ")\n"; cout << "\n\n\nmailto: [email protected]\n"; exit(1); break; default: abort (); } TChain *Tevent = new TChain("Tevent"); CreateTChain(Tevent, RunFileName); TChain *Theader = new TChain("Theader"); Theader->Add(RunFileName); TChain *Tchannel_profile = new TChain("Tchannel_profile"); Tchannel_profile->Add(RunFileName); struct event event; struct header header; struct channel_profiles channel_profiles; TFile *output = new TFile (OutputFileName,"Recreate","RunFlagOut"); CreateTevent(Tevent, &event); CreateTheader(Theader, &header); CreateTchannel_profiles(Tchannel_profile, &channel_profiles); Tevent->GetEntry(0); Theader->GetEntry(0); //no of channels per event in this run int NoChannels = Tchannel_profile->GetEntries(); if(debug) cout << "NoChannels = " << NoChannels << endl; /////////////////////////////// int START = 0; unsigned int event_id_start = 1553544; for(int w=0; w<Tevent->GetEntries(); w++){ Tevent->GetEntry(w); START = w; if(event.event_id == event_id_start) break; if(event.event_id > event_id_start) break; } Tevent->GetEntry(0); if(debug) cout << START << " START" << endl; int STOP = START+NoChannels*1; //Tevent->GetEntries(); /////////////////////////////// if(STOP> Tevent->GetEntries()){ cerr << "entry doesn't exist" << endl; STOP = Tevent->GetEntries(); cerr << "changed end number." << endl; // exit(1); } if(debug) cout << "STOP " << STOP << endl; /***************************************/ int stepsize = int(1*1024); int startbin = 8*1024; /***************************************/ int tmp_start=0; int tmp_stop=0; //calculate how many window sizes to prozess Tevent->GetEntry(0); int kwindow_size = event.window_size / stepsize; //ZeroPadding int NoZeros = 7; int New_window_size = (NoZeros+1)*event.window_size; float *TraceZP[(STOP-START)*(kwindow_size+1)]; for(int i=0; i<(STOP-START)*(kwindow_size+1); i++) TraceZP[i] = new float [New_window_size]; float TimeFFTZP[New_window_size]; for(int i=0; i<New_window_size; i++) TimeFFTZP[i]=(float)i/(NoZeros+1); //spectra float spectrum[(STOP-START)*(kwindow_size+1)][event.window_size/2]; float freq[event.window_size/2]; for(unsigned int i=0; i<event.window_size/2; i++) freq[i]=40.0+40.0/(event.window_size/2)*2+(40.0/(event.window_size/2.0))*(i); float phase[event.window_size/2], rawfft[2*event.window_size]; //graph data float d_ws[kwindow_size+1]; float d_mean[NoChannels][kwindow_size+1]; float d_rms[NoChannels][kwindow_size+1]; float d_RMS_with[NoChannels][kwindow_size+1]; float d_RMS_without[NoChannels][kwindow_size+1]; float tmp1_mean, tmp2_mean, tmp1_rms, tmp2_rms; unsigned int min_channel_id=999; //stopwatch TStopwatch timer[NoChannels][kwindow_size+1]; float real_time[NoChannels][kwindow_size+1]; float cpu_time[NoChannels][kwindow_size+1]; //define output TGraphs and canvases TGraph **gWin = new TGraph *[(STOP-START)*(kwindow_size+1)]; TCanvas **canWin = new TCanvas *[(STOP-START)*(kwindow_size+1)]; TGraph **gSpec = new TGraph *[(STOP-START)*(kwindow_size+1)]; TCanvas **canSpec = new TCanvas *[(STOP-START)*(kwindow_size+1)]; TGraph **gd_mean = new TGraph *[NoChannels]; TGraph **gd_rms = new TGraph *[NoChannels]; TGraph **gd_RMS_with = new TGraph *[NoChannels]; TGraph **gd_RMS_without = new TGraph *[NoChannels]; TGraph **gtime_cpu = new TGraph *[NoChannels]; TGraph **gtime_real = new TGraph *[NoChannels]; float tmpTrace[event.window_size]; float tmpTraceSpec[event.window_size]; char name[1024]; char title[1024]; int ChId = 0; int window_size = 0; float tmpTraceStat[New_window_size]; for(int i=0; i<Tchannel_profile->GetEntries(); i++){ Tchannel_profile->GetEntry(i); if(channel_profiles.ch_id < min_channel_id) min_channel_id = channel_profiles.ch_id; } cout << "min channel id = " << min_channel_id << endl; for(int i=0; i<(kwindow_size+1); i++){ printf("\nwithout RFISuppression\t\t\t\t\twith RFISuppression\n"); printf("Channel\t\twindow_size\tmean\trms\t\tChannel\t\twindow_size\tmean\trms\n"); if(i==1) window_size = event.window_size+stepsize; if(i!=0){ window_size -= stepsize; New_window_size = (NoZeros+1)*window_size; for(int c=0; c<New_window_size; c++) TimeFFTZP[c]=(float)c/(NoZeros+1); for(int c=0; c<window_size/2; c++) freq[c]=40.0+40.0/(window_size/2)*2+(40.0/(window_size/2.0))*(c); } else window_size = event.window_size; d_ws[i] = window_size; if(debug){ cout << "kwindow_size = " << kwindow_size << " - i = " << i << endl; cout << "window_size = " << window_size << endl; cout << "New_window_size = " << New_window_size << endl; } for(int a=START;a<STOP; a++){ Tevent->GetEntry(a); ChId=0; Tchannel_profile->GetEntry(ChId); while( event.channel_profile_id != channel_profiles.ch_id ){ ChId++; if(Tchannel_profile->GetEntry(ChId)==0){ cerr << "error - Tchannel_profile->GetEntry()" << endl; exit(0); } } if(i!=0)sprintf(title,"D%i_%s_%s, %s, run=%i, event_id=%i, ws=%i",header.DAQ_id, channel_profiles.antenna_pos, channel_profiles.polarisation, event.timestamp, header.run_id, event.event_id, window_size); else sprintf(title,"D%i_%s_%s, %s, run=%i, event_id=%i, ws=%i without RFI suppression",header.DAQ_id, channel_profiles.antenna_pos, channel_profiles.polarisation, event.timestamp, header.run_id, event.event_id, window_size); if(debug) cout << title << " - " << a-START+(i)*NoChannels << " " << a << " " << i << endl; //define readout range tmp_start = startbin-window_size/2; if( (tmp_start)<0 ) tmp_start = 0; tmp_stop = tmp_start + window_size; if((unsigned int) tmp_stop > event.window_size) tmp_stop = event.window_size; for(int j=tmp_start; j<tmp_stop; j++) tmpTrace[j-tmp_start] = (event.trace[j] & 0x0fff); if(debug) cout << "tmp: start:stop = " << tmp_start << ":" << tmp_stop << " - ws=" << tmp_stop-tmp_start << endl; for(int v=0; v<2; v++){ if(v==1)RFISuppressionMedian(window_size, tmpTrace, tmpTrace); ZeroPaddingFFT(window_size, tmpTrace, NoZeros, TraceZP[a-START+(i)*NoChannels]); for(int w=0; w<window_size; w++) tmpTraceStat[w] = Abs(TraceZP[a-START+(i)*NoChannels][w]); if(v==0){ tmp1_mean = Mean(window_size,tmpTraceStat); tmp1_rms = RMS(window_size,tmpTraceStat);} if(v==1){ tmp2_mean = Mean(window_size,tmpTraceStat); tmp2_rms = RMS(window_size,tmpTraceStat);} printf("%s:%s\t%d\t\t%.2f\t%.2f",channel_profiles.antenna_pos, channel_profiles.polarisation, window_size, Mean(window_size,tmpTraceStat), RMS(window_size,tmpTraceStat)); if(v==0) cout << "\t\t"; } cout << endl; d_mean[event.channel_profile_id-min_channel_id][i] = (tmp1_mean-tmp2_mean)/tmp1_mean; d_rms[event.channel_profile_id-min_channel_id][i] = (tmp1_rms-tmp2_rms)/tmp1_rms; d_RMS_with[event.channel_profile_id-min_channel_id][i] = tmp2_rms; d_RMS_without[event.channel_profile_id-min_channel_id][i] = tmp1_rms; //be sure to have the original data for(int j=tmp_start; j<tmp_stop; j++) tmpTrace[j-tmp_start] = (event.trace[j] & 0x0fff); timer[event.channel_profile_id-min_channel_id][i].Start(); if(i!=0)RFISuppressionMedian(window_size, tmpTrace, tmpTrace); for(int j=0; j<window_size; j++) tmpTraceSpec[j] = tmpTrace[j]; TraceFFT(window_size , tmpTraceSpec , spectrum[a-START+(i)*NoChannels] , phase, rawfft); ZeroPaddingFFT(window_size, tmpTrace, NoZeros, TraceZP[a-START+(i)*NoChannels]); timer[event.channel_profile_id-min_channel_id][i].Stop(); sprintf(name,"can%03i_ws%i",a-START+(i)*NoChannels,window_size); gWin[a-START+(i)*NoChannels] = new TGraph(New_window_size, TimeFFTZP, TraceZP[a-START+(i)*NoChannels]); gWin[a-START+(i)*NoChannels]->SetTitle(title); gWin[a-START+(i)*NoChannels]->GetXaxis()->SetTitle(" time #upoint 12.5 / ns"); gWin[a-START+(i)*NoChannels]->GetYaxis()->SetTitle(" ADC value "); canWin[a-START+(i)*NoChannels] = new TCanvas(); canWin[a-START+(i)*NoChannels]->SetTitle(name); canWin[a-START+(i)*NoChannels]->SetName(name); sprintf(name,"spec%03i_ws%i",a-START+(i)*NoChannels,window_size); gSpec[a-START+(i)*NoChannels] = new TGraph(window_size/2, freq, spectrum[a-START+(i)*NoChannels]); gSpec[a-START+(i)*NoChannels]->SetTitle(title); gSpec[a-START+(i)*NoChannels]->GetXaxis()->SetTitle(" frequency / MHz "); gSpec[a-START+(i)*NoChannels]->GetYaxis()->SetTitle(" Amp "); canSpec[a-START+(i)*NoChannels] = new TCanvas(); canSpec[a-START+(i)*NoChannels]->SetTitle(name); canSpec[a-START+(i)*NoChannels]->SetName(name); } //end over START STOP }//end for over kwindwo_size if(debug) cout << "end of loop over kwindow_size" << endl; TMultiGraph *mg = new TMultiGraph(); mg->SetTitle("optimal window size"); mg->SetName("mg"); TLegend leg = TLegend(0.87,0.7,0.99,0.99); TMultiGraph *mg3 = new TMultiGraph(); mg3->SetTitle("optimal window size"); mg3->SetName("mg3"); TLegend leg3 = TLegend(0.655779, 0.807692, 0.981156, 0.972028); for(int i=0; i<NoChannels; i++){ sprintf(name,"gd_mean%02i",i+min_channel_id); gd_mean[i] = new TGraph(kwindow_size+1, d_ws, d_mean[i]); gd_mean[i]->SetTitle(name); gd_mean[i]->SetName(name); gd_mean[i]->SetLineColor(i+1); gd_mean[i]->SetLineWidth(2); sprintf(title,"mean: channel %02i",i+min_channel_id); mg->Add(gd_mean[i]); leg.AddEntry(gd_mean[i],title,"L"); gd_mean[i]->Write(); sprintf(name,"gd_rms%02i",i+min_channel_id); gd_rms[i] = new TGraph(kwindow_size+1, d_ws, d_rms[i]); gd_rms[i]->SetTitle(name); gd_rms[i]->SetName(name); gd_rms[i]->SetLineColor(i+1); gd_rms[i]->SetLineStyle(2); gd_rms[i]->SetLineWidth(4); sprintf(title,"rms: channel %02i",i+min_channel_id); mg->Add(gd_rms[i]); leg.AddEntry(gd_rms[i],title,"L"); gd_rms[i]->Write(); sprintf(name,"gd_rms_wiht%02i",i+min_channel_id); gd_RMS_with[i] = new TGraph(kwindow_size+1, d_ws, d_RMS_with[i]); gd_RMS_with[i]->SetTitle(name); gd_RMS_with[i]->SetName(name); gd_RMS_with[i]->SetLineColor(i+1); gd_RMS_with[i]->SetLineStyle(2); gd_RMS_with[i]->SetLineWidth(4); sprintf(title,"RMS with RFISupp: channel %02i",i+min_channel_id); mg3->Add(gd_RMS_with[i]); // leg3.AddEntry(gd_RMS_with[i],title,"L"); gd_RMS_with[i]->Write(); sprintf(name,"gd_rms_wiht%02i",i+min_channel_id); gd_RMS_without[i] = new TGraph(kwindow_size+1, d_ws, d_RMS_without[i]); gd_RMS_without[i]->SetTitle(name); gd_RMS_without[i]->SetName(name); gd_RMS_without[i]->SetLineColor(i+1); gd_RMS_without[i]->SetLineWidth(2); sprintf(title,"RMS without RFISupp: channel %02i",i+min_channel_id); mg3->Add(gd_RMS_without[i]); // leg3.AddEntry(gd_RMS_without[i],title,"L"); gd_RMS_without[i]->Write(); if(i==0){ sprintf(title,"without RFI suppression"); leg3.AddEntry(gd_RMS_without[0],title,"L"); sprintf(title,"with RFI suppression"); leg3.AddEntry(gd_RMS_with[0],title,"L"); } } mg->Write(); mg3->Write(); TCanvas *gdcan = new TCanvas(); gdcan->SetName("canmg"); gdcan->SetTitle("canmg"); gdcan->cd(); mg->Draw("AL"); leg.Draw("SAME"); gdcan->Write(); TCanvas *gdcan3 = new TCanvas(); gdcan3->SetName("canmg3"); gdcan3->SetTitle("canmg3"); gdcan3->cd(); mg3->Draw("AL"); mg3->GetXaxis()->SetTitle("window size"); mg3->GetYaxis()->SetTitle("RMS / ADC unit"); leg3.Draw("SAME"); gdcan3->Write(); //stopwatch for(int j=0; j<NoChannels; j++)for(int i=0; i<kwindow_size+1; i++) { real_time[j][i] = timer[j][i].RealTime(); cpu_time[j][i] = timer[j][i].CpuTime(); // cout << "WS = " << i << " - no channel = " << j << endl; // cout << "Real = " << timer[j[i].RealTime(); // cout << "CPU = " << timer[j][i].CpuTime() << endl; } TMultiGraph *mg2 = new TMultiGraph(); mg2->SetTitle("processing time"); mg2->SetName("mg2"); TLegend leg2 = TLegend(0.655779, 0.807692, 0.981156, 0.972028); for(int i=0; i<NoChannels; i++){ cpu_time[i][0] = cpu_time[i][1]; sprintf(name,"gtime_cpu%02i",i+min_channel_id); gtime_cpu[i] = new TGraph(kwindow_size+1, d_ws, cpu_time[i]); gtime_cpu[i]->SetTitle(name); gtime_cpu[i]->SetName(name); gtime_cpu[i]->SetLineColor(i+1); gtime_cpu[i]->SetLineWidth(4); gtime_cpu[i]->SetLineStyle(2); sprintf(title,"cpu time: channel %02i",i+min_channel_id); mg2->Add(gtime_cpu[i]); // leg2.AddEntry(gtime_cpu[i],title,"L"); gd_mean[i]->Write(); real_time[i][0] = real_time[i][1]; sprintf(name,"gtime_real%02i",i+min_channel_id); gtime_real[i] = new TGraph(kwindow_size+1, d_ws, real_time[i]); gtime_real[i]->SetTitle(name); gtime_real[i]->SetName(name); gtime_real[i]->SetLineColor(i+1); gtime_real[i]->SetLineWidth(2); sprintf(title,"real time: channel %02i",i+min_channel_id); mg2->Add(gtime_real[i]); // leg2.AddEntry(gtime_real[i],title,"L"); gd_rms[i]->Write(); if(i==0){ leg2.AddEntry(gtime_cpu[0],"cpu time","L"); leg2.AddEntry(gtime_real[0],"real time","L"); } } mg2->Write(); TCanvas *gtimecan = new TCanvas(); gtimecan->SetName("canmg2"); gtimecan->SetTitle("canmg2"); gtimecan->cd(); mg2->Draw("AL"); mg2->GetYaxis()->SetTitle("t / s"); mg2->GetYaxis()->CenterTitle(); mg2->GetXaxis()->SetTitle("window size"); leg2.Draw("SAME"); gtimecan->Write(); char AntPos[NoChannels][50]; char AntPol[NoChannels][50]; char position[5]; char pol[50]; for(int i=0; i<NoChannels; i++){ if(Tchannel_profile->GetEntry(i)==0){ cerr << "Tchannel_profile->GetEntry() error!" << endl; exit(0); } strcpy(AntPos[i],channel_profiles.antenna_pos); strcpy(AntPol[i],channel_profiles.polarisation); strcat(AntPol[i],","); //cout << AntPos[i] << " " << AntPol[i] << endl; } //fill and write the output file output->cd(); int division=(int)NoChannels/2; if((int)NoChannels%2 != 0 ) division++; for(int j=0; j<kwindow_size+1; j++){ canWin[j*NoChannels]->cd(); canWin[j*NoChannels]->Divide(2,division); canSpec[j*NoChannels]->cd(); canSpec[j*NoChannels]->Divide(2,division); for(int i=0; i<NoChannels; i++){ sscanf(gWin[i+j*NoChannels]->GetTitle(),"%*c%*i_%c%c%c_%s CH0",&position[0], &position[1], &position[2], pol); for(int a=0; a<NoChannels; a++){ if(!strcmp(position,AntPos[a]) && !strcmp(pol,AntPol[a])){ //cout << a << " " << AntPos[a] << " " << AntPol[a] << " " << position << " " << pol << endl; canWin[j*NoChannels]->cd(a+1); gWin[i+j*NoChannels]->Draw("AL"); //define user range // gWin[i+j*NoChannels]->GetXaxis()->SetLimits(gWin[i+j*NoChannels]->GetN()/2-stepsize/2,gWin[i+j*NoChannels]->GetN()/2+stepsize/2); canSpec[j*NoChannels]->cd(a+1); gPad->SetLogy(); gSpec[i+j*NoChannels]->Draw("AL"); } } } canWin[j*NoChannels]->Write(); canSpec[j*NoChannels]->Write(); } output->Close(); //do not forget to clean up delete output; delete Tevent; delete Theader; delete Tchannel_profile; }