Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • le.koch/cbmroot
  • patrick.pfistner_AT_kit.edu/cbmroot
  • lena.rossel_AT_stud.uni-frankfurt.de/cbmroot
  • i.deppner/cbmroot
  • fweig/cbmroot
  • karpushkin_AT_inr.ru/cbmroot
  • v.akishina/cbmroot
  • rishat.sultanov_AT_cern.ch/cbmroot
  • l_fabe01_AT_uni-muenster.de/cbmroot
  • pwg-c2f/cbmroot
  • j.decuveland/cbmroot
  • a.toia/cbmroot
  • i.vassiliev/cbmroot
  • n.herrmann/cbmroot
  • o.lubynets/cbmroot
  • se.gorbunov/cbmroot
  • cornelius.riesen_AT_physik.uni-giessen.de/cbmroot
  • zhangqn17_AT_mails.tsinghua.edu.cn/cbmroot
  • bartosz.sobol/cbmroot
  • ajit.kumar/cbmroot
  • computing/cbmroot
  • a.agarwal_AT_vecc.gov.in/cbmroot
  • osingh/cbmroot
  • wielanek_AT_if.pw.edu.pl/cbmroot
  • malgorzata.karabowicz.stud_AT_pw.edu.pl/cbmroot
  • m.shiroya/cbmroot
  • s.roy/cbmroot
  • p.-a.loizeau/cbmroot
  • a.weber/cbmroot
  • ma.beyer/cbmroot
  • d.klein/cbmroot
  • d.smith/cbmroot
  • mvdsoft/cbmroot
  • d.spicker/cbmroot
  • y.h.leung/cbmroot
  • m.deveaux/cbmroot
  • mkunold/cbmroot
  • h.darwish/cbmroot
  • f_fido01_AT_uni-muenster.de/cbmroot
  • g.kozlov/cbmroot
  • d.emschermann/cbmroot
  • evgeny.lavrik/cbmroot
  • v.friese/cbmroot
  • f.uhlig/cbmroot
  • ebechtel_AT_ikf.uni-frankfurt.de/cbmroot
  • a.senger/cbmroot
  • praisig/cbmroot
  • s.lebedev/cbmroot
  • redelbach_AT_compeng.uni-frankfurt.de/cbmroot
  • p.subramani/cbmroot
  • a_meye37_AT_uni-muenster.de/cbmroot
  • om/cbmroot
  • o.golosov/cbmroot
  • l.chlad/cbmroot
  • a.bercuci/cbmroot
  • d.ramirez/cbmroot
  • v.singhal/cbmroot
  • h.schiller/cbmroot
  • apuntke/cbmroot
  • f.zorn/cbmroot
  • rubio_AT_physi.uni-heidelberg.de/cbmroot
  • p.chudoba/cbmroot
  • apuntke/mcbmroot
  • r.karabowicz/cbmroot
64 results
Show changes
Commits on Source (2)
......@@ -130,9 +130,9 @@ InitStatus CbmMuchDigitizerQa::Init() {
InitChargeHistos();
InitLengthHistos();
InitPadHistos();
FillTotalPadsHistos();
InitChannelPadInfo();
InitFits();
FillTotalPadsHistos();
gDirectory = oldDirectory;
return kSUCCESS;
......@@ -187,33 +187,45 @@ void CbmMuchDigitizerQa::InitChannelPadInfo() {
void CbmMuchDigitizerQa::InitCanvases() {
fCanvCharge =
new CbmQaCanvas("cMcPointCharge", "MC point charge", 2 * 800, 2 * 400);
fCanvCharge->Divide2D(3);
fCanvStationCharge = new CbmQaCanvas(
"cMcPointChargeVsStation", "MC point charge per station", 2 * 800, 2 * 400);
fCanvStationCharge->Divide2D(fNstations);
fCanvChargeVsEnergy = new CbmQaCanvas("cMcPointChargeVsEnergy",
"MC point charge vs particle Energy",
2 * 800,
2 * 400);
fCanvChargeVsEnergy->Divide2D(4);
fCanvChargeVsLength = new CbmQaCanvas("cMcPointChargeVsLength",
"MC point charge vs track length",
2 * 800,
2 * 400);
fCanvChargeVsLength->Divide2D(4);
fCanvTrackLength =
new CbmQaCanvas("cTrackLength", "track length", 2 * 800, 2 * 400);
fCanvTrackLength->Divide2D(4);
fCanvNpadsVsArea =
new CbmQaCanvas("cNpadsVsArea", "N pads Vs Area", 2 * 800, 2 * 400);
/***** charge canvases ****/
if (fMCTracks && fPoints) {
fCanvCharge =
new CbmQaCanvas("cMcPointCharge", "MC point charge", 2 * 800, 2 * 400);
fCanvCharge->Divide2D(3);
fCanvStationCharge = new CbmQaCanvas("cMcPointChargeVsStation",
"MC point charge per station",
2 * 800,
2 * 400);
fCanvStationCharge->Divide2D(fNstations);
fCanvChargeVsEnergy = new CbmQaCanvas("cMcPointChargeVsEnergy",
"MC point charge vs particle Energy",
2 * 800,
2 * 400);
fCanvChargeVsEnergy->Divide2D(4);
fCanvChargeVsLength = new CbmQaCanvas("cMcPointChargeVsLength",
"MC point charge vs track length",
2 * 800,
2 * 400);
fCanvChargeVsLength->Divide2D(4);
fOutFolder.Add(fCanvCharge);
fOutFolder.Add(fCanvStationCharge);
fOutFolder.Add(fCanvChargeVsEnergy);
fOutFolder.Add(fCanvChargeVsLength);
}
/***** length canvas ****/
if (fMCTracks && fPoints) {
fCanvTrackLength =
new CbmQaCanvas("cTrackLength", "track length", 2 * 800, 2 * 400);
fCanvTrackLength->Divide2D(4);
fOutFolder.Add(fCanvTrackLength);
}
/***** pad canvases ****/
fCanvUsPadsFiredXY = new CbmQaCanvas(
"cPadsFiredXY", "Number of pads fired vs XY", 2 * 800, 2 * 400);
fCanvUsPadsFiredXY->Divide2D(fNstations);
......@@ -226,19 +238,31 @@ void CbmMuchDigitizerQa::InitCanvases() {
new CbmQaCanvas("cPadsTotalR", "Total pads vs radius", 2 * 800, 2 * 400);
fCanvPadsTotalR->Divide2D(fNstations);
fOutFolder.Add(fCanvCharge);
fOutFolder.Add(fCanvStationCharge);
fOutFolder.Add(fCanvChargeVsEnergy);
fOutFolder.Add(fCanvChargeVsLength);
fOutFolder.Add(fCanvTrackLength);
fOutFolder.Add(fCanvNpadsVsArea);
fOutFolder.Add(fCanvUsPadsFiredXY);
fOutFolder.Add(fCanvPadOccupancyR);
fOutFolder.Add(fCanvPadsTotalR);
/***** pad canvas (MC) ****/
if (fMCTracks && fPoints) {
fCanvNpadsVsArea =
new CbmQaCanvas("cNpadsVsArea", "N pads Vs Area", 2 * 800, 2 * 400);
fOutFolder.Add(fCanvNpadsVsArea);
}
}
void CbmMuchDigitizerQa::InitChargeHistos() {
if (!fMCTracks || !fPoints) { return; }
fvMcPointCharge.resize(fNstations);
for (Int_t i = 0; i < fNstations; i++) {
fvMcPointCharge[i] = new TH1F(
Form("hMcPointCharge%i", i + 1),
Form("MC point charge : Station %i; Charge [10^4 e]; Count", i + 1),
BINNING_CHARGE);
histFolder->Add(fvMcPointCharge[i]);
}
fhMcPointCharge =
new TH1F("hCharge", "Charge distribution from tracks", BINNING_CHARGE);
fhMcPointCharge->GetXaxis()->SetTitle("Charge [10^{4} electrons]");
......@@ -322,6 +346,8 @@ void CbmMuchDigitizerQa::InitChargeHistos() {
void CbmMuchDigitizerQa::InitLengthHistos() {
if (!fMCTracks || !fPoints) { return; }
fhTrackLength = new TH1F("hTrackLength", "Track length", BINNING_LENGTH);
fhTrackLengthPi =
......@@ -347,8 +373,7 @@ void CbmMuchDigitizerQa::InitLengthHistos() {
}
void CbmMuchDigitizerQa::InitPadHistos() {
fvMcPointCharge.resize(fNstations);
// non-MC
fvPadsTotalR.resize(fNstations);
fvUsPadsFiredR.resize(fNstations);
fvUsPadsFiredXY.resize(fNstations);
......@@ -360,11 +385,6 @@ void CbmMuchDigitizerQa::InitPadHistos() {
Double_t rMax = station->GetRmax();
Double_t rMin = station->GetRmin();
fvMcPointCharge[i] = new TH1F(
Form("hMcPointCharge%i", i + 1),
Form("MC point charge : Station %i; Charge [10^4 e]; Count", i + 1),
BINNING_CHARGE);
fvPadsTotalR[i] =
new TH1F(Form("hPadsTotal%i", i + 1),
Form("Number of pads vs radius: Station %i;Radius [cm]", i + 1),
......@@ -404,21 +424,24 @@ void CbmMuchDigitizerQa::InitPadHistos() {
0.6 * rMin,
1.2 * rMax);
histFolder->Add(fvMcPointCharge[i]);
histFolder->Add(fvPadsTotalR[i]);
histFolder->Add(fvUsPadsFiredXY[i]);
histFolder->Add(fvPadsFiredR[i]);
histFolder->Add(fvPadOccupancyR[i]);
}
fhNpadsVsS = new TH2F("hNpadsVsS",
"Number of fired pads vs pad area:area:n pads",
10,
-5,
0,
10,
0.5,
10.5);
histFolder->Add(fhNpadsVsS);
// MC below
if (fMCTracks && fPoints) {
fhNpadsVsS = new TH2F("hNpadsVsS",
"Number of fired pads vs pad area:area:n pads",
10,
-5,
0,
10,
0.5,
10.5);
histFolder->Add(fhNpadsVsS);
}
}
void CbmMuchDigitizerQa::FillTotalPadsHistos() {
......@@ -501,7 +524,9 @@ void CbmMuchDigitizerQa::Exec(Option_t*) {
OccupancyQa();
DigitizerQa();
DrawCanvases();
FillChargePerPoint();
FillDigitizerPerformancePlots();
if (fVerbose > 1) {
PrintFrontLayerPoints();
PrintFrontLayerDigis();
......@@ -587,9 +612,6 @@ void CbmMuchDigitizerQa::DigitizerQa() {
new ((*fPointInfos)[i])
CbmMuchPointInfo(pdgCode, motherPdg, kine, length, stId);
}
FillChargePerPoint();
FillDigitizerPerformancePlots();
}
// -------------------------------------------------------------------------
......@@ -690,8 +712,14 @@ void CbmMuchDigitizerQa::FillDigitizerPerformancePlots() {
// -------------------------------------------------------------------------
void CbmMuchDigitizerQa::DrawCanvases() {
void CbmMuchDigitizerQa::DrawChargeCanvases() {
if (!fMCTracks || !fPoints) { return; }
for (Int_t i = 0; i < fNstations; i++) {
fCanvStationCharge->cd(i + 1);
fvMcPointCharge[i]->DrawCopy("", "");
}
fCanvCharge->cd(1);
fhMcPointCharge->DrawCopy("", "");
fCanvCharge->cd(2);
......@@ -699,20 +727,6 @@ void CbmMuchDigitizerQa::DrawCanvases() {
fCanvCharge->cd(3);
fhMcPointChargePr_1GeV_3mm->DrawCopy("", "");
for (Int_t i = 0; i < 4; i++) {
fCanvTrackLength->cd(i + 1);
gPad->SetLogy();
gStyle->SetOptStat(1110);
}
fCanvTrackLength->cd(1);
fhTrackLength->DrawCopy("", "");
fCanvTrackLength->cd(2);
fhTrackLengthPi->DrawCopy("", "");
fCanvTrackLength->cd(3);
fhTrackLengthPr->DrawCopy("", "");
fCanvTrackLength->cd(4);
fhTrackLengthEl->DrawCopy("", "");
for (Int_t i = 0; i < 4; i++) {
fCanvChargeVsEnergy->cd(i + 1);
gPad->Range(0, 0, 200, 200);
......@@ -749,7 +763,10 @@ void CbmMuchDigitizerQa::DrawCanvases() {
fhMcPointChargeVsTrackLengthPr->DrawCopy("colz", "");
fCanvChargeVsLength->cd(4);
fhMcPointChargeVsTrackLengthEl->DrawCopy("colz", "");
}
void CbmMuchDigitizerQa::DrawPadCanvases() {
//non-MC
for (Int_t i = 0; i < fNstations; i++) {
*fvPadsFiredR[i] = *fvUsPadsFiredR[i];
//fvPadsFiredR[i]->Sumw2();
......@@ -757,8 +774,6 @@ void CbmMuchDigitizerQa::DrawCanvases() {
fvPadOccupancyR[i]->Divide(fvPadsFiredR[i], fvPadsTotalR[i]);
fvPadOccupancyR[i]->Scale(100.);
fCanvStationCharge->cd(i + 1);
fvMcPointCharge[i]->DrawCopy("", "");
fCanvPadOccupancyR->cd(i + 1);
fvPadOccupancyR[i]->DrawCopy("", "");
fCanvPadsTotalR->cd(i + 1);
......@@ -766,18 +781,36 @@ void CbmMuchDigitizerQa::DrawCanvases() {
fCanvUsPadsFiredXY->cd(i + 1);
fvUsPadsFiredXY[i]->DrawCopy("colz", "");
}
fCanvNpadsVsArea->cd();
fhNpadsVsS->DrawCopy("colz", "");
//MC below
if (fMCTracks && fPoints) {
fCanvNpadsVsArea->cd();
fhNpadsVsS->DrawCopy("colz", "");
}
}
void CbmMuchDigitizerQa::DrawLengthCanvases() {
void CbmMuchDigitizerQa::PrintFrontLayerPoints() {
if (!fMCTracks || !fPoints) { return; }
if (!fMCTracks || !fPoints) {
LOG(debug) << " CbmMuchDigitizerQa::PrintFrontLayerPoints(): Found no MC "
"data. Skipping.";
return;
for (Int_t i = 0; i < 4; i++) {
fCanvTrackLength->cd(i + 1);
gPad->SetLogy();
gStyle->SetOptStat(1110);
}
fCanvTrackLength->cd(1);
fhTrackLength->DrawCopy("", "");
fCanvTrackLength->cd(2);
fhTrackLengthPi->DrawCopy("", "");
fCanvTrackLength->cd(3);
fhTrackLengthPr->DrawCopy("", "");
fCanvTrackLength->cd(4);
fhTrackLengthEl->DrawCopy("", "");
}
void CbmMuchDigitizerQa::PrintFrontLayerPoints() {
if (!fMCTracks || !fPoints) { return; }
for (int i = 0; i < fPoints->GetEntriesFast(); i++) {
CbmMuchPoint* point = (CbmMuchPoint*) fPoints->At(i);
Int_t stId = CbmMuchAddress::GetStationIndex(point->GetDetectorID());
......@@ -820,6 +853,10 @@ void CbmMuchDigitizerQa::FinishTask() {
printf("FinishTask\n");
cout << "\n\n SG: Finish task!" << endl;
DrawChargeCanvases();
DrawPadCanvases();
DrawLengthCanvases();
TDirectory* oldDirectory = gDirectory;
bool oldBatchMode = gROOT->IsBatch();
......@@ -873,17 +910,6 @@ void CbmMuchDigitizerQa::OutputNvsS() {
fOutFolder.Add(c);
}
// -------------------------------------------------------------------------
Double_t CbmMuchDigitizerQa::LandauMPV(Double_t* lg_x, Double_t* par) {
Double_t gaz_gain_mean = 1.7e+4;
Double_t scale = 1.e+6;
gaz_gain_mean /= scale;
Double_t mass = par[0]; // mass in MeV
Double_t x = TMath::Power(10, lg_x[0]);
return gaz_gain_mean * MPV_n_e(x, mass);
}
// -------------------------------------------------------------------------
Int_t CbmMuchDigitizerQa::GetNChannels(Int_t iStation) {
Int_t nChannels = 0;
......@@ -952,6 +978,16 @@ TVector2 CbmMuchDigitizerQa::GetMaxPadSize(Int_t iStation) {
}
// -------------------------------------------------------------------------
// -------------------------------------------------------------------------
Double_t CbmMuchDigitizerQa::LandauMPV(Double_t* lg_x, Double_t* par) {
Double_t gaz_gain_mean = 1.7e+4;
Double_t scale = 1.e+6;
gaz_gain_mean /= scale;
Double_t mass = par[0]; // mass in MeV
Double_t x = TMath::Power(10, lg_x[0]);
return gaz_gain_mean * MPV_n_e(x, mass);
}
// -------------------------------------------------------------------------
Double_t CbmMuchDigitizerQa::MPV_n_e(Double_t Tkin, Double_t mass) {
Double_t logT;
......@@ -973,16 +1009,6 @@ Double_t CbmMuchDigitizerQa::MPV_n_e(Double_t Tkin, Double_t mass) {
return fPol6.EvalPar(&logT, mpv_p);
}
}
void CbmMuchDigitizerQa::DivideCanvas2D(TCanvas* c, int nPads) {
// divide canvas into nPads in 2D
if (!c || nPads < 1) { return; }
int rows = (int) sqrt(nPads);
int cols = nPads / rows;
if (cols * rows < nPads) { cols++; }
c->Divide(cols, rows);
}
// -------------------------------------------------------------------------
ClassImp(CbmMuchDigitizerQa)
......@@ -40,7 +40,6 @@ public:
virtual void Exec(Option_t* option);
virtual void FinishTask();
virtual void SetParContainers();
static void DivideCanvas2D(TCanvas* c, int nPads);
protected:
/* DigitizerQa - analysis of digitizer performance - charge distributions
......@@ -65,24 +64,26 @@ private:
CbmMuchDigitizerQa& operator=(const CbmMuchDigitizerQa&);
TFolder* histFolder;
void InitCanvases();
void InitChargeHistos();
void InitLengthHistos();
void InitPadHistos();
void InitLengthHistos();
void InitChannelPadInfo();
void InitFits();
void InitCanvases();
void DeInit();
void FillTotalPadsHistos();
void DrawCanvases();
void OutputNvsS();
void FillChargePerPoint();
void FillDigitizerPerformancePlots();
void PrintFrontLayerPoints();
void PrintFrontLayerDigis();
void DrawChargeCanvases();
void DrawPadCanvases();
void DrawLengthCanvases();
void OutputNvsS();
// geometry
CbmMuchGeoScheme* fGeoScheme = nullptr;
Int_t fNstations = 0;
......