From 44a0fef0429211c1630f688fa20c80b77213dfbe Mon Sep 17 00:00:00 2001 From: mivanov Date: Thu, 23 Jan 2014 15:15:11 +0100 Subject: [PATCH] Preparation for the FEC parameter tuning studies --- TPC/fastSimul/AliTPCclusterFast.cxx | 111 +-------------------- TPC/fastSimul/README.txt | 31 +++++- TPC/fastSimul/simul.C | 144 ++++------------------------ TPC/fastSimul/simul.sh | 109 ++++++++++++++++----- 4 files changed, 134 insertions(+), 261 deletions(-) diff --git a/TPC/fastSimul/AliTPCclusterFast.cxx b/TPC/fastSimul/AliTPCclusterFast.cxx index 27fcdc5526b..41c38b97d86 100644 --- a/TPC/fastSimul/AliTPCclusterFast.cxx +++ b/TPC/fastSimul/AliTPCclusterFast.cxx @@ -21,7 +21,6 @@ #include "TVectorD.h" #include "TMatrixD.h" #include "TH1.h" -#include "THnSparse.h" #include "TClonesArray.h" #include "TTreeStream.h" @@ -80,8 +79,6 @@ public: AliTPCtrackFast(); void Add(AliTPCtrackFast &track2); void MakeTrack(); - void UpdatedEdxHisto(); - void MakeHisto(); static void Simul(const char* simul, Int_t ntracks); Double_t CookdEdxNtot(Double_t f0,Float_t f1); Double_t CookdEdxQtot(Double_t f0,Float_t f1); @@ -99,15 +96,6 @@ public: TClonesArray *fCl; // array of clusters // Bool_t fInit; // initialization flag - THnSparse *fHistoNtot; // histograms of trunc mean Ntot - THnSparse *fHistoQtot; // histograms of trunc mean Qtot - THnSparse *fHistoQNtot; // histograms of trunc mean Qtot/Ntot - // - THnSparse *fHistoDtot; // histograms of trunc mean digit tot - THnSparse *fHistoDmax; // histograms of trunc mean digit max - THnSparse *fHistoDtotRaw; // histograms of trunc mean digit tot - THnSparse *fHistoDmaxRaw; // histograms of trunc mean digit max - // // ClassDef(AliTPCtrackFast,2) // container for @@ -133,14 +121,7 @@ AliTPCtrackFast::AliTPCtrackFast(): fAngleZ(0), fN(0), fCl(0), - fInit(kFALSE), - fHistoNtot(0), - fHistoQtot(0), - fHistoQNtot(0), - fHistoDtot(0), - fHistoDmax(0), - fHistoDtotRaw(0), - fHistoDmaxRaw(0) + fInit(kFALSE) { // // @@ -150,96 +131,9 @@ AliTPCtrackFast::AliTPCtrackFast(): void AliTPCtrackFast::Add(AliTPCtrackFast &track2){ if (!track2.fInit) return; - fHistoNtot->Add(track2.fHistoNtot); // histograms of trunc mean Ntot - fHistoQtot->Add(track2.fHistoQtot); // histograms of trunc mean Qtot - fHistoQNtot->Add(track2.fHistoQNtot); // histograms of trunc mean Qtot/Ntot - // - fHistoDtot->Add(track2.fHistoDtot); // histograms of trunc mean digit tot - fHistoDmax->Add(track2.fHistoDmax); // histograms of trunc mean digit max - fHistoDtotRaw->Add(track2.fHistoDtotRaw); // histograms of trunc mean digit tot - fHistoDmaxRaw->Add(track2.fHistoDmaxRaw); // histograms of trunc mean digit max } -void AliTPCtrackFast::MakeHisto(){ - // - // make default histo - // - // dEdx histogram THnSparse - // 0 - value - // 1 - fMNprim - number of generated primaries - // 2 - fNpoints - // 3 - fFraction - // 4 - fDiff - // 5 - fAngleY - // 6 - fAngleZ - - Double_t xmin[7], xmax[7]; - Int_t nbins[7]; - if (fInit) return; - // - nbins[1] = 10; xmin[1]=10; xmax[1]=30; // fMNprim - nbins[2] = 8; xmin[2]=80; xmax[2]=160; // fNPoints - nbins[3] = 6; xmin[3]=0.45; xmax[3]=1.05; // trunc mean fraction - - nbins[4] = 5; xmin[4]=0.0; xmax[4]=0.4; // fDiff - nbins[5] = 10; xmin[5]=0; xmax[5]=2; // fAngleY - nbins[6] = 10; xmin[6]=0; xmax[6]=2; // fAngleZ - // - nbins[0] =100; xmin[0]=2; xmax[0]=8; - fHistoNtot = new THnSparseF("dNdxall/dNdxprim","dNdxall/dNdxprim", 4, nbins, xmin,xmax); - nbins[0] =100; xmin[0]=2; xmax[0]=8; - fHistoQtot = new THnSparseF("dQdx/dNdxprim","dQdxall/dNdxprim", 4, nbins, xmin,xmax); - nbins[0] =100; xmin[0]=0.5; xmax[0]=1.5; - fHistoQNtot = new THnSparseF("dQdx/dNdxprim","dQdxprim/dNdxprim", 4, nbins, xmin,xmax); - // - nbins[0] =100; xmin[0]=0.05; xmax[0]=8; - fHistoDtot = new THnSparseF("dQtotdx/dNdxprim","dQtotdx/dNdx", 7, nbins, xmin,xmax); - fHistoDmax = new THnSparseF("dQmaxdx/dNdxprim","dQmaxdx/dNdx", 7, nbins, xmin,xmax); - fHistoDtotRaw = new THnSparseF("raw dQtotdx/dNdxprim","raw dQtotdx/dNdx", 7, nbins, xmin,xmax); - fHistoDmaxRaw = new THnSparseF("raw dQmaxdx/dNdxprim","raw dQmaxdx/dNdx", 7, nbins, xmin,xmax); - fInit=kTRUE; -} -void AliTPCtrackFast::UpdatedEdxHisto(){ - // - //fill default histo - // - if (!fInit) MakeHisto(); - Double_t x[7]; - x[1] = fMNprim; - x[2] = fN; - // - x[4] = fDiff; - x[5] = TMath::Abs(fAngleY); - x[6] = TMath::Abs(fAngleZ); - - for (Int_t i=0;i<7;i++){ - Float_t frac = 0.5+Float_t(i)*0.1; - x[3] = frac; - Double_t cNtot = CookdEdxNtot(0.01,frac); - Double_t cQtot = CookdEdxQtot(0.01,frac); - // MC -using hits - x[0] = cNtot/fMNprim; - fHistoNtot->Fill(x); - x[0] = cQtot/fMNprim; - fHistoQtot->Fill(x); - x[0] = cQtot/cNtot; - fHistoQNtot->Fill(x); - // MC - using digits - Double_t dQtot = CookdEdxDtot(0.01,frac,1,2.5,1,kTRUE); - Double_t dQmax = CookdEdxDmax(0.01,frac,1,2.5,1,kTRUE); - Double_t dQrawtot = CookdEdxDtot(0.01,frac,1,2.5,1,kFALSE); - Double_t dQrawmax = CookdEdxDmax(0.01,frac,1,2.5,1,kFALSE); - x[0] = dQtot/fMNprim; - fHistoDtot->Fill(x); - x[0] = dQmax/fMNprim; - fHistoDmax->Fill(x); - x[0] = dQrawtot/fMNprim; - fHistoDtotRaw->Fill(x); - x[0] = dQrawmax/fMNprim; - fHistoDmaxRaw->Fill(x); - } -} void AliTPCtrackFast::MakeTrack(){ // @@ -259,7 +153,6 @@ void AliTPCtrackFast::MakeTrack(){ cluster->GenerElectrons(); cluster->Digitize(); } - UpdatedEdxHisto(); } Double_t AliTPCtrackFast::CookdEdxNtot(Double_t f0,Float_t f1){ @@ -344,7 +237,7 @@ void AliTPCtrackFast::Simul(const char* fname, Int_t ntracks){ // // AliTPCtrackFast fast; - TTreeSRedirector cstream(fname); + TTreeSRedirector cstream(fname,"recreate"); for (Int_t itr=0; itrRndm()); diff --git a/TPC/fastSimul/README.txt b/TPC/fastSimul/README.txt index 75b52bdca57..4f3fc004e3c 100644 --- a/TPC/fastSimul/README.txt +++ b/TPC/fastSimul/README.txt @@ -1,9 +1,34 @@ +############################################################################################# Macros to do fast simulation of processes important for tuning of reconstruction. +Currently fast simulation of ionization digitization and cluster finder - AliTPCclusterFast +############################################################################################# -Currently fast simulation of ionization digitization and cluster -finder - AliTPCclusterFast -And the edge effect in rphi testEdgeFit.C +How to use it? +a) which macro to use (I know it was somewhere in AliRoot but with the GIT page I dont find it anymore), +b) what is the basic functionality of the functions +c) what do I need to run it (aliroot version?) +d) how would I run it and extract space point resolution and dEdx resolution + (best step by step for dummies)? + +a) Which macro to use (I know it was somewhere in AliRoot + + Example case - submit 40 jobs with 100 tracks. + + source $ALICE_ROOT/TPCdev/TPC/fastSimul/simul.sh + makeEnvLocal #this is just example please setup your environmnet script to set env variables + makeSubmitRUN 40 100 + +c) what do I need to run it (aliroot version?) + Recent AliRoot + + +b) What is the basic functionality of the functions? + Provides cluster and track functionitility - possible to modify parameters of the reconstruction/ resp. harware setup See example usage simul.C:DrawdEdxResolExample() + + + + diff --git a/TPC/fastSimul/simul.C b/TPC/fastSimul/simul.C index c7d42001a46..3b5f76bc4d9 100644 --- a/TPC/fastSimul/simul.C +++ b/TPC/fastSimul/simul.C @@ -1,24 +1,11 @@ /* -gROOT->LoadMacro("$ALICE_ROOT/TPC/fastSimul/AliTPCclusterFast.cxx+"); -.L $ALICE_ROOT/TPC/fastSimul/simul.C -//Merge() + Macro to generate random tracks and clusters. + Fast MC - Geant equivalent used -TFile f("mergetrack.root"); -track = (AliTPCtrackFast*)f.Get("track"); -// -// Draw debug stream -// -gSystem->AddIncludePath("-I$ALICE_ROOT/TPC/macros"); -gROOT->LoadMacro("$ALICE_ROOT/TPC/macros/AliXRDPROOFtoolkit.cxx+"); -AliXRDPROOFtoolkit tool; -TChain * chain = tool.MakeChain("track.txt","simulTrack",0,200000); -chain->Lookup(); - gProof->Exec("gSystem->Load(\"$ALICE_ROOT/TPC/fastSimul/AliTPCclusterFast_cxx.so\")",kFALSE); */ -class THnSparse; void simul(Int_t npoints){ // @@ -26,7 +13,8 @@ void simul(Int_t npoints){ // printf("Hallo world\n"); gRandom->SetSeed(0); - gROOT->LoadMacro("$ALICE_ROOT/TPC/fastSimul/AliTPCclusterFast.cxx+"); + gROOT->LoadMacro("$mcPath/AliTPCclusterFast.cxx+"); + AliTPCclusterFast::fPRF = new TF1("fprf","gausn",-5,5); AliTPCclusterFast::fTRF = new TF1("ftrf","gausn",-5,5); AliTPCclusterFast::fPRF->SetParameters(1,0,0.5); @@ -65,119 +53,25 @@ void Merge(){ -void DrawDedxMC(THnSparse * hstat){ - // + +void DrawdEdxResolExample(){ // + // Example analysis to make an space point resolution study // - TH1 * hisMean[7]; - TH1 * hisSigma[7]; - TObjArray arr; - for (Int_t ifrac=0; ifrac<6; ifrac++){ - Float_t frac = 0.5+0.1*Float_t(ifrac); - hstat->GetAxis(3)->SetRange(ifrac+1,ifrac+1); - hstat->GetAxis(2)->SetRangeUser(120,160); - TH2F * his = (TH2F*)hstat->Projection(0,1); - his->FitSlicesY(0,0,-1,0,"QNR",&arr); - delete his; - hisMean[ifrac] = (TH1*) arr.At(1)->Clone(); - hisSigma[ifrac] = (TH1*) arr.At(2)->Clone(); - arr.SetOwner(kTRUE); arr.Delete(); - // - hisSigma[ifrac]->Divide(hisMean[ifrac]); - hisMean[ifrac]->SetMaximum(6); - hisMean[ifrac]->SetMinimum(0); - hisSigma[ifrac]->SetMaximum(0.07); - hisSigma[ifrac]->SetMinimum(0.03); - // - hisMean[ifrac]->SetDirectory(0); - hisSigma[ifrac]->SetDirectory(0); - hisMean[ifrac]->SetXTitle("N_{prim}"); - hisSigma[ifrac]->SetXTitle("N_{prim}"); - hisMean[ifrac]->SetYTitle("Q/N_{prim}"); - hisSigma[ifrac]->SetYTitle("#sigma_{Q/N_{prim}}/(Q/N_{prim})"); - hisMean[ifrac]->SetMarkerColor(kmicolors[ifrac+1]); - hisMean[ifrac]->SetMarkerStyle(kmimarkers[ifrac+1]); - hisSigma[ifrac]->SetMarkerColor(kmicolors[ifrac+1]); - hisSigma[ifrac]->SetMarkerStyle(kmimarkers[ifrac+1]); - } - TCanvas * c = new TCanvas(hstat->GetName(),hstat->GetName(),600,800); - TLegend *legend = new TLegend(0.55,0.70,0.95,0.95, hstat->GetName()); - c->Divide(1,2); - for (Int_t ifrac=0; ifrac<6; ifrac++){ - c->cd(1); - if (ifrac==0) hisMean[ifrac]->Draw(); - legend->AddEntry(hisMean[ifrac],Form("%f",0.5+0.1*ifrac)); - hisMean[ifrac]->Draw("same"); - c->cd(2); - if (ifrac==0) hisSigma[ifrac]->Draw(); - hisSigma[ifrac]->Draw("same"); - } - c->Draw(); - legend->Draw(); - TString fname=hstat->GetName(); - fname.ReplaceAll("/","_"); - c->SaveAs(Form("pic/%s.eps",fname.Data())); - c->SaveAs(Form("pic/%s.gif",fname.Data())); - c->SaveAs(Form("pic/%s.root",fname.Data())); -} - - - + TChain * chain = AliXRDPROOFtoolkit::MakeChain("trackerSimul.list", "simulTrack",0,100); + chain->SetCacheSize(10000000000); -void DrawDedxN(THnSparse * hstat){ // + // 1.) Qmax/Qtot as function of the input ionization density // + chain->Draw("tr.CookdEdxDmax(0,0.6,1,0,1,0)/tr.CookdEdxDtot(0,0.6,1,0,1,0):tr.fMNprim>>hisQtotMax(10,10,50)","","prof",10000); // - TH1 * hisMean[7]; - TH1 * hisSigma[7]; - TObjArray arr; - for (Int_t ifrac=0; ifrac<6; ifrac++){ - Float_t frac = 0.5+0.1*Float_t(ifrac); - hstat->GetAxis(3)->SetRange(ifrac+1,ifrac+1); - hstat->GetAxis(2)->SetRangeUser(80,160); - hstat->GetAxis(1)->SetRangeUser(15,18); - TH2F * his = (TH2F*)hstat->Projection(0,2); - his->FitSlicesY(0,0,-1,0,"QNR",&arr); - delete his; - hisMean[ifrac] = (TH1*) arr.At(1)->Clone(); - hisSigma[ifrac] = (TH1*) arr.At(2)->Clone(); - arr.SetOwner(kTRUE); arr.Delete(); - // - hisSigma[ifrac]->Divide(hisMean[ifrac]); - hisMean[ifrac]->SetMaximum(6); - hisMean[ifrac]->SetMinimum(0); - hisSigma[ifrac]->SetMaximum(0.07); - hisSigma[ifrac]->SetMinimum(0.03); - // - hisMean[ifrac]->SetDirectory(0); - hisSigma[ifrac]->SetDirectory(0); - hisMean[ifrac]->SetXTitle("N_{cl}"); - hisSigma[ifrac]->SetXTitle("N_{cl}"); - hisMean[ifrac]->SetYTitle("Q/N_{prim}"); - hisSigma[ifrac]->SetYTitle("#sigma_{Q/N_{prim}}/(Q/N_{prim})"); - hisMean[ifrac]->SetMarkerColor(kmicolors[ifrac+1]); - hisMean[ifrac]->SetMarkerStyle(kmimarkers[ifrac+1]); - hisSigma[ifrac]->SetMarkerColor(kmicolors[ifrac+1]); - hisSigma[ifrac]->SetMarkerStyle(kmimarkers[ifrac+1]); - } - TCanvas * c = new TCanvas(hstat->GetName(),hstat->GetName(),600,800); - TLegend *legend = new TLegend(0.55,0.70,0.95,0.95, hstat->GetName()); - c->Divide(1,2); - for (Int_t ifrac=0; ifrac<6; ifrac++){ - c->cd(1); - if (ifrac==0) hisMean[ifrac]->Draw(); - legend->AddEntry(hisMean[ifrac],Form("%f",0.5+0.1*ifrac)); - hisMean[ifrac]->Draw("same"); - c->cd(2); - if (ifrac==0) hisSigma[ifrac]->Draw(); - hisSigma[ifrac]->Draw("same"); - } - c->Draw(); - legend->Draw(); - TString fname=hstat->GetName(); - fname+="NCl"; - fname.ReplaceAll("/","_"); - c->SaveAs(Form("pic/%s.eps",fname.Data())); - c->SaveAs(Form("pic/%s.gif",fname.Data())); - c->SaveAs(Form("pic/%s.root",fname.Data())); + // 2.) Non linearity due to the tucncation Qtot_{60%}/Qtot 100% + // + chain->Draw("tr.CookdEdxDtot(0,0.6,1,0,1,0)/tr.CookdEdxDtot(0,0.99,1,0,1,0):tr.fMNprim>>hisQtot60100(10,10,50)","","prof",10000); + // + // + // + + } diff --git a/TPC/fastSimul/simul.sh b/TPC/fastSimul/simul.sh index bab94432601..9d555b811cf 100755 --- a/TPC/fastSimul/simul.sh +++ b/TPC/fastSimul/simul.sh @@ -1,32 +1,93 @@ #!/bin/sh -# 1 argument - the path to the environment setup -# 2 argument - the job ID -# 3 argument - number of events in the file -# 4 argument - output path - -# Example -# myvar=0 -# $ALICE_ROOT/TPC/fastSimul/simul.sh /u/miranov/.balice64HEAD0108 $myvar 1000 `pwd` -# while [ $myvar -ne 100 ] ; do bsub do something ; myvar=$(( $myvar + 1 )) ; echo $myvar ; done + + +main() +{ + # + # run in proper action depending on the selection + # + if [[ $# -lt 1 ]]; then + if [[ ! "$0" =~ "bash" ]]; then + echo " Please select action" + fi + return + fi + runMode=$1 + umask 0002 + shift + case $runMode in + "runJob") runJob "$@";; + "makeEnvLocal") makeEnvLocal "$@";; + "makeSubmitRun") makeSubmitRun "$@";; + *) + eval "${runMode} $@" + ;; + esac + return; +} + + + +exampleCase(){ # -# 1 SETUP given ROOT and ALIROOT +# Example case to subit Toy MC jobs +# + source $ALICE_ROOT/TPCdev/TPC/fastSimul/simul.sh + makeEnvLocal + makeSubmitRUN 40 100 + ls `pwd`/MC*/trackerSimul.root > trackerSimul.list + +} + + + +runJob() +{ +#runFastMCJob + echo $ROOTSYS + which root.exe + which aliroot + echo PWD `pwd` + ntracks=$1 + echo Submitting ntracks = $ntracks + echo command aliroot -q -b "$mcPath/simul.C\($ntracks\)" + command aliroot -q -b "$mcPath/simul.C($ntracks)" + return; +} + + +makeEnvLocal(){ # -echo $1 -source $1 -echo $ROOTSYS -which root.exe -which aliroot # -# make directory +# Example usage local +# jobs to be submitted form the lxb1001 or lxb1002 +#(here we have 80 nodes and user disk) +# + echo makeEnvLocal + export baliceTPC=$HOME/.baliceTPC + export mcPath=$ALICE_ROOT/TPC/fastSimul + export batchCommand="qsub -cwd -V " +} + +makeSubmitRUN(){ # +# submits jobs +# + wdir=`pwd`; + njobs=$1 + ntracks=$2 + for (( job=1; job <= $njobs; job++ )); do + echo $job; + mkdir $wdir/MC$job + cd $wdir/MC$job + echo $batchCommand -o toyMC.log $mcPath/simul.sh runJob $ntracks + $batchCommand -o toyMC.log $mcPath/simul.sh runJob $ntracks + cd $wdir + done +} + + -cd $4 -mkdir $2 -cd $2 -cp ~/rootlogon.C . -echo Job ID $2 -echo -echo PWD `pwd` +main "$@" -command aliroot -q -b "$ALICE_ROOT/TPC/fastSimul/simul.C($3)" \ No newline at end of file -- 2.43.0