- MakeAmpPlots(stat, pathName);
- MakeDeltaPlots(pathName);
- FitResolutionNew(pathName);
- FitRMSNew(pathName);
- MakeChargeVsDriftLengthPlots(pathName);
-// MakeResPlotsQ(1, 1);
- MakeResPlotsQTree(stat, pathName);
-}
-
-
-void AliTPCcalibTracks::MakeAmpPlots(Int_t stat, char* pathName){
- //
- // creates several plots:
- // fArrayAmp.ps, fArrayAmpRow.ps and DeltaYZ.ps
- // fArrayAmp.ps: one histogram per sector, the histogram shows the charge per cluster
- // fArrayAmpRow.ps: one histogram per sector, mean max. amplitude vs. pad row with landau fit
- // DeltaYZ.ps: DeltaY and DeltaZ histogram with gaus fit
- // Empty histograms (sectors without data) are not written to file
- // the ps-files are written to the directory 'pathName', that is created if it does not exist
- // 'stat': only histograms with more than 'stat' entries are written to file.
- //
-
- SetStyle();
- gSystem->MakeDirectory(pathName);
- gSystem->ChangeDirectory(pathName);
-
- TCanvas* c1 = new TCanvas(); // valgrind 3 ??? 634 bytes in 28 blocks are still reachable
- TPostScript *ps;
- // histograms with accumulated amplitude for all IROCs and OROCs
- TH1F *allAmpHisIROC = ((TH1F*)(fArrayAmp->At(0))->Clone());
- allAmpHisIROC->SetName("Amp all IROCs");
- allAmpHisIROC->SetTitle("Amp all IROCs");
- TH1F *allAmpHisOROC = ((TH1F*)(fArrayAmp->At(36))->Clone());
- allAmpHisOROC->SetName("Amp all OROCs");
- allAmpHisOROC->SetTitle("Amp all OROCs");
-
- ps = new TPostScript("fArrayAmp.ps", 112);
- if (GetDebugLevel() > -1) cout << "creating fArrayAmp.ps..." << endl;
- for (Int_t i = 0; i < fArrayAmp->GetEntriesFast(); i++){
- if ( ((TH1F*)fArrayAmp->At(i))->GetEntries() < stat ) continue;
- ps->NewPage();
- ((TH1F*)fArrayAmp->At(i))->Draw();
- c1->Update(); // valgrind 3
- if (i > 0 && i < 36) {
- allAmpHisIROC->Add(((TH1F*)fArrayAmp->At(i)));
- allAmpHisOROC->Add(((TH1F*)fArrayAmp->At(i+36)));
- }
- }
- ps->NewPage();
- allAmpHisIROC->Draw();
- c1->Update(); // valgrind
- ps->NewPage();
- allAmpHisOROC->Draw();
- c1->Update();
- ps->Close();
- delete ps;
-
- TH1F *his = 0;
- Double_t min = 0;
- Double_t max = 0;
- ps = new TPostScript("fArrayAmpRow.ps", 112);
- if (GetDebugLevel() > -1) cout << "creating fArrayAmpRow.ps..." << endl;
- for (Int_t i = 0; i < fArrayAmpRow->GetEntriesFast(); i++){
- his = (TH1F*)fArrayAmpRow->At(i);
- if (his->GetEntries() < stat) continue;
- ps->NewPage();
- min = TMath::Max( his->GetBinCenter(his->GetMaximumBin() )-100., 0.);
- max = his->GetBinCenter(5*his->GetMaximumBin()) + 100;
- his->SetAxisRange(min, max);
- his->Fit("pol3", "q", "", min, max);
- // his->Draw("error"); // don't use this line when you don't want to have empty pages in the ps-file
- c1->Update();
- }
- ps->Close();
- delete ps;
- delete c1;
- gSystem->ChangeDirectory("..");
-}
-
-
-void AliTPCcalibTracks::MakeDeltaPlots(char* pathName){
- //
- // creates several plots:
- // DeltaYZ.ps: DeltaY and DeltaZ histogram with gaus fit
- // the ps-files are written to the directory 'pathName', that is created if it does not exist
- //
-
- SetStyle();
- gSystem->MakeDirectory(pathName);
- gSystem->ChangeDirectory(pathName);
-
- TCanvas* c1 = new TCanvas(); // valgrind 3 ??? 634 bytes in 28 blocks are still reachable
- TPostScript *ps;
- Double_t min = 0;
- Double_t max = 0;
-
- ps = new TPostScript("DeltaYZ.ps", 112);
- if (GetDebugLevel() > -1) cout << "creating DeltaYZ.ps..." << endl;
- min = fDeltaY->GetBinCenter(fDeltaY->GetMaximumBin())-20;
- max = fDeltaY->GetBinCenter(fDeltaY->GetMaximumBin())+20;
- fDeltaY->SetAxisRange(min, max);
- ps->NewPage();
- fDeltaY->Fit("gaus","q","",min, max); // valgrind 3 7 block possibly lost 2,400 bytes in 1 blocks are still reachable
- c1->Update();
- ps->NewPage();
- max = fDeltaZ->GetBinCenter(fDeltaZ->GetMaximumBin())+20;
- min = fDeltaZ->GetBinCenter(fDeltaZ->GetMaximumBin())-20;
- fDeltaZ->SetAxisRange(min, max);
- fDeltaZ->Fit("gaus","q","",min, max);
- c1->Update();
- ps->Close();
- delete ps;
- delete c1;
- gSystem->ChangeDirectory("..");
-}
-
-
-void AliTPCcalibTracks::MakeChargeVsDriftLengthPlotsOld(char* pathName){
- //
- // creates charge vs. driftlength plots, one TProfile for each ROC
- // is not correct like this, should be one TProfile for each sector and padsize
- //
-
- SetStyle();
- gSystem->MakeDirectory(pathName);
- gSystem->ChangeDirectory(pathName);
-
- TCanvas* c1 = new TCanvas(); // valgrind 3 ??? 634 bytes in 28 blocks are still reachable
- TPostScript *ps;
- ps = new TPostScript("chargeVsDriftlengthOld.ps", 112);
- if (GetDebugLevel() > -1) cout << "creating chargeVsDriftlength.ps..." << endl;
- TProfile *chargeVsDriftlengthAllIROCs = ((TProfile*)fArrayChargeVsDriftlength->At(0)->Clone());
- TProfile *chargeVsDriftlengthAllOROCs = ((TProfile*)fArrayChargeVsDriftlength->At(36)->Clone());
- chargeVsDriftlengthAllIROCs->SetName("allAmpHisIROC");
- chargeVsDriftlengthAllIROCs->SetTitle("charge vs. driftlength, all IROCs");
- chargeVsDriftlengthAllOROCs->SetName("allAmpHisOROC");
- chargeVsDriftlengthAllOROCs->SetTitle("charge vs. driftlength, all OROCs");
-
- for (Int_t i = 0; i < fArrayChargeVsDriftlength->GetEntriesFast(); i++) {
- ((TProfile*)fArrayChargeVsDriftlength->At(i))->Draw();
- c1->Update();
- if (i > 0 && i < 36) {
- chargeVsDriftlengthAllIROCs->Add(((TProfile*)fArrayChargeVsDriftlength->At(i)));
- chargeVsDriftlengthAllOROCs->Add(((TProfile*)fArrayChargeVsDriftlength->At(i+36)));
- }
- ps->NewPage();
- }
- chargeVsDriftlengthAllIROCs->Draw();
- c1->Update(); // valgrind
- ps->NewPage();
- chargeVsDriftlengthAllOROCs->Draw();
- c1->Update();
- ps->Close();
- delete ps;
- delete c1;
- gSystem->ChangeDirectory("..");
-}
-
-
-void AliTPCcalibTracks::MakeChargeVsDriftLengthPlots(char* pathName){
- //
- // creates charge vs. driftlength plots, one TProfile for each ROC
- // under development....
- //
-
- SetStyle();
- gSystem->MakeDirectory(pathName);
- gSystem->ChangeDirectory(pathName);
-
- TCanvas* c1 = new TCanvas("c1", "c1", 700,(Int_t)(TMath::Sqrt(2)*700)); // valgrind 3 ??? 634 bytes in 28 blocks are still reachable
-// TCanvas c1("c1", "c1", 500,(sqrt(2)*500))
- c1->Divide(0,3);
- TPostScript *ps;
- ps = new TPostScript("chargeVsDriftlength.ps", 111);
- if (GetDebugLevel() > -1) cout << "creating chargeVsDriftlengthNew.ps..." << endl;
-
- TProfile *chargeVsDriftlengthAllShortPads = ((TProfile*)fcalPadRegionChargeVsDriftlength->GetObject(0,0)->Clone());
- TProfile *chargeVsDriftlengthAllMediumPads = ((TProfile*)fcalPadRegionChargeVsDriftlength->GetObject(0,1)->Clone());
- TProfile *chargeVsDriftlengthAllLongPads = ((TProfile*)fcalPadRegionChargeVsDriftlength->GetObject(0,2)->Clone());
- chargeVsDriftlengthAllShortPads->SetName("allAmpHisShortPads");
- chargeVsDriftlengthAllShortPads->SetTitle("charge vs. driftlength, all sectors, short pads");
- chargeVsDriftlengthAllMediumPads->SetName("allAmpHisMediumPads");
- chargeVsDriftlengthAllMediumPads->SetTitle("charge vs. driftlength, all sectors, medium pads");
- chargeVsDriftlengthAllLongPads->SetName("allAmpHisLongPads");
- chargeVsDriftlengthAllLongPads->SetTitle("charge vs. driftlength, all sectors, long pads");
-
- for (Int_t i = 0; i < 36; i++) {
- c1->cd(1)->SetGridx();
- c1->cd(1)->SetGridy();
- ((TProfile*)fcalPadRegionChargeVsDriftlength->GetObject(i,0))->Draw();
- c1->cd(2)->SetGridx();
- c1->cd(2)->SetGridy();
- ((TProfile*)fcalPadRegionChargeVsDriftlength->GetObject(i,1))->Draw();
- c1->cd(3)->SetGridx();
- c1->cd(3)->SetGridy();
- ((TProfile*)fcalPadRegionChargeVsDriftlength->GetObject(i,2))->Draw();
- c1->Update();
- chargeVsDriftlengthAllShortPads->Add( (TProfile*)fcalPadRegionChargeVsDriftlength->GetObject(0,0));
- chargeVsDriftlengthAllMediumPads->Add((TProfile*)fcalPadRegionChargeVsDriftlength->GetObject(0,1));
- chargeVsDriftlengthAllLongPads->Add( (TProfile*)fcalPadRegionChargeVsDriftlength->GetObject(0,2));
- ps->NewPage();
- }
- c1->cd(1)->SetGridx();
- c1->cd(1)->SetGridy();
- chargeVsDriftlengthAllShortPads->Draw();
- c1->cd(2)->SetGridx();
- c1->cd(2)->SetGridy();
- chargeVsDriftlengthAllMediumPads->Draw();
- c1->cd(3)->SetGridx();
- c1->cd(3)->SetGridy();
- chargeVsDriftlengthAllLongPads->Draw();
- c1->Update(); // valgrind
-// ps->NewPage();
- ps->Close();
- delete ps;
- delete c1;
- gSystem->ChangeDirectory("..");
-}
-
-
-
-void AliTPCcalibTracks::FitResolutionNew(char* pathName){
- //
- // calculates different resulution fits in Y and Z direction
- // the histograms are written to 'ResolutionYZ.ps'
- // writes calculated resolution to 'resol.txt'
- // all files are stored in the directory pathName
- //
-
- SetStyle();
- gSystem->MakeDirectory(pathName);
- gSystem->ChangeDirectory(pathName);
-
- TCanvas c;
- c.Divide(2,1);
- if (GetDebugLevel() > -1) cout << "creating ResolutionYZ.ps..." << endl;
- TPostScript *ps = new TPostScript("ResolutionYZ.ps", 112);
- TF2 *fres = new TF2("fres","TMath::Sqrt([0]*[0]+[1]*[1]*x+[2]*[2]*y*y)",0,250,0,1);
- fres->SetParameter(0,0.02);
- fres->SetParameter(1,0.0054);
- fres->SetParameter(2,0.13);
-
- TH1::AddDirectory(kTRUE); // TH3F::FitSlicesZ() writes histograms into the current directory
-
- // create histogramw for Y-resolution
- TH3F * hisResY0 = (TH3F*)fResolY->At(0);
- hisResY0->FitSlicesZ();
- TH2D * hisResY02 = (TH2D*)gDirectory->Get("Resol Y0_2");
- TH3F * hisResY1 = (TH3F*)fResolY->At(1);
- hisResY1->FitSlicesZ();
- TH2D * hisResY12 = (TH2D*)gDirectory->Get("Resol Y1_2");
- TH3F * hisResY2 = (TH3F*)fResolY->At(2);
- hisResY2->FitSlicesZ();
- TH2D * hisResY22 = (TH2D*)gDirectory->Get("Resol Y2_2");
- //
- ps->NewPage();
- c.cd(1);
- hisResY02->Fit(fres, "q"); // valgrind 132,072 bytes in 6 blocks are indirectly lost
- hisResY02->Draw("surf1");
- c.cd(2);
- MakeDiff(hisResY02,fres)->Draw("surf1");
- c.Update();
- // c.SaveAs("ResolutionYPad0.eps");
- ps->NewPage();
- c.cd(1);
- hisResY12->Fit(fres, "q");
- hisResY12->Draw("surf1");
- c.cd(2);
- MakeDiff(hisResY12,fres)->Draw("surf1");
- c.Update();
- // c.SaveAs("ResolutionYPad1.eps");
- ps->NewPage();
- c.cd(1);
- hisResY22->Fit(fres, "q");
- hisResY22->Draw("surf1");
- c.cd(2);
- MakeDiff(hisResY22,fres)->Draw("surf1");
- c.Update();
-// c.SaveAs("ResolutionYPad2.eps");
-
- // create histogramw for Z-resolution
- TH3F * hisResZ0 = (TH3F*)fResolZ->At(0);
- hisResZ0->FitSlicesZ();
- TH2D * hisResZ02 = (TH2D*)gDirectory->Get("Resol Z0_2");
- TH3F * hisResZ1 = (TH3F*)fResolZ->At(1);
- hisResZ1->FitSlicesZ();
- TH2D * hisResZ12 = (TH2D*)gDirectory->Get("Resol Z1_2");
- TH3F * hisResZ2 = (TH3F*)fResolZ->At(2);
- hisResZ2->FitSlicesZ();
- TH2D * hisResZ22 = (TH2D*)gDirectory->Get("Resol Z2_2");
-
- ps->NewPage();
- c.cd(1);
- hisResZ02->Fit(fres, "q");
- hisResZ02->Draw("surf1");
- c.cd(2);
- MakeDiff(hisResZ02,fres)->Draw("surf1");
- c.Update();
-// c.SaveAs("ResolutionZPad0.eps");
- ps->NewPage();
- c.cd(1);
- hisResZ12->Fit(fres, "q");
- hisResZ12->Draw("surf1");
- c.cd(2);
- MakeDiff(hisResZ12,fres)->Draw("surf1");
- c.Update();
-// c.SaveAs("ResolutionZPad1.eps");
- ps->NewPage();
- c.cd(1);
- hisResZ22->Fit(fres, "q");
- hisResZ22->Draw("surf1");
- c.cd(2);
- MakeDiff(hisResZ22,fres)->Draw("surf1");
- c.Update();
-// c.SaveAs("ResolutionZPad2.eps");
- ps->Close();
- delete ps;
-
- // write calculated resoltuions to 'resol.txt'
- ofstream fresol("resol.txt");
- fresol<<"Pad 0.75 cm"<<"\n";
- hisResY02->Fit(fres, "q"); // valgrind
- fresol<<"Y\t"<<fres->GetParameter(0)<<"\t"<<fres->GetParameter(1)<<"\t"<<fres->GetParameter(2)<<"\n";
- hisResZ02->Fit(fres, "q");
- fresol<<"Z\t"<<fres->GetParameter(0)<<"\t"<<fres->GetParameter(1)<<"\t"<<fres->GetParameter(2)<<"\n";
- //
- fresol<<"Pad 1.00 cm"<<1<<"\n";
- hisResY12->Fit(fres, "q"); // valgrind
- fresol<<"Y\t"<<fres->GetParameter(0)<<"\t"<<fres->GetParameter(1)<<"\t"<<fres->GetParameter(2)<<"\n";
- hisResZ12->Fit(fres, "q");
- fresol<<"Z\t"<<fres->GetParameter(0)<<"\t"<<fres->GetParameter(1)<<"\t"<<fres->GetParameter(2)<<"\n";
- //
- fresol<<"Pad 1.50 cm"<<0<<"\n";
- hisResY22->Fit(fres, "q");
- fresol<<"Y\t"<<fres->GetParameter(0)<<"\t"<<fres->GetParameter(1)<<"\t"<<fres->GetParameter(2)<<"\n";
- hisResZ22->Fit(fres, "q");
- fresol<<"Z\t"<<fres->GetParameter(0)<<"\t"<<fres->GetParameter(1)<<"\t"<<fres->GetParameter(2)<<"\n";
-
- TH1::AddDirectory(kFALSE);
- gSystem->ChangeDirectory("..");
- delete fres;