ClassImp(AliAnalysisMultPbTrackHistoManager)
-const char * AliAnalysisMultPbTrackHistoManager::kStatStepNames[] = { "All Events", "After physics Selection", "After centrality selection", "With Vertex" };
+const char * AliAnalysisMultPbTrackHistoManager::kStatStepNames[] = { "All Events", "After centrality selection", "After physics Selection", "With Vertex" };
const char * AliAnalysisMultPbTrackHistoManager::kHistoPtEtaVzNames[] = { "hGenPtEtaVz", "hRecPtEtaVz", "hRecPtEtaVzPrim",
"hRecPtEtaVzSecWeak", "hRecPtEtaVzSecMaterial", "hRecPtEtaVzFake"};
const char * AliAnalysisMultPbTrackHistoManager::kHistoDCANames[] = { "hGenDCA", "hRecDCA", "hRecDCAPrim", "hRecDCASecWeak","hRecDCASecMaterial", "hRecDCAFake"};
if (!h->InheritsFrom("TH1")) {
AliFatal (Form("%s does not inherits from TH1, cannot scale",h->GetName()));
}
+ if (h->InheritsFrom("TH1I")) {
+ AliInfo (Form("Not scaling integer histo %s",h->GetName()));
+ continue;
+ }
AliInfo(Form("Scaling %s, nev %2.2f", h->GetName(), nev));
h->Scale(1./nev,option);
public:
typedef enum {kHistoGen, kHistoRec, kHistoRecPrim, kHistoRecSecWeak, kHistoRecSecMat, kHistoRecFake, kNHistos} Histo_t;
- typedef enum {kStatAll, kStatPhysSel, kStatCentr, kStatVtx, kNStatBins} Stat_t;
+ typedef enum {kStatAll, kStatCentr, kStatPhysSel, kStatVtx, kNStatBins} Stat_t;
typedef enum {kPartPiPlus, kPartKPlus, kPartP, kPartLPlus, kPartPiMinus, kPartKMinus, kPartPBar, kPartLMinus, kPartOther, kNPart} Part_t;
AliAnalysisTaskMultPbTracks::AliAnalysisTaskMultPbTracks()
: AliAnalysisTaskSE("TaskMultPbTracks"),
- fESD(0),fHistoManager(0),fCentrSelector(0),fTrackCuts(0),fTrackCutsNoDCA(0),fIsMC(0)
+ fESD(0),fHistoManager(0),fCentrSelector(0),fTrackCuts(0),fTrackCutsNoDCA(0),fIsMC(0),fIsTPCOnly(0)
{
// constructor
}
AliAnalysisTaskMultPbTracks::AliAnalysisTaskMultPbTracks(const char * name)
: AliAnalysisTaskSE(name),
- fESD(0),fHistoManager(0),fCentrSelector(0),fTrackCuts(0),fTrackCutsNoDCA(0),fIsMC(0)
+ fESD(0),fHistoManager(0),fCentrSelector(0),fTrackCuts(0),fTrackCutsNoDCA(0),fIsMC(0),fIsTPCOnly(0)
{
//
// Standard constructur which should be used
}
AliAnalysisTaskMultPbTracks::AliAnalysisTaskMultPbTracks(const AliAnalysisTaskMultPbTracks& obj) :
- AliAnalysisTaskSE(obj) ,fESD (0), fHistoManager(0), fCentrSelector(0), fTrackCuts(0),fTrackCutsNoDCA(0),fIsMC(0)
+ AliAnalysisTaskSE(obj) ,fESD (0), fHistoManager(0), fCentrSelector(0), fTrackCuts(0),fTrackCutsNoDCA(0),fIsMC(0),fIsTPCOnly(0)
{
//copy ctor
fESD = obj.fESD ;
fTrackCuts = obj.fTrackCuts;
fTrackCutsNoDCA = obj.fTrackCutsNoDCA;
fCentrSelector = obj.fCentrSelector;
+ fIsMC = obj.fIsMC;
+ fIsTPCOnly = obj.fIsTPCOnly;
}
const AliESDVertex* vtxESD = fESD->GetPrimaryVertex();
if(!vtxESD) return;
// FIXME: leave the cuts here or find a better place?)
- // Quality cut on vertexer Z, as suggested by Francesco Prino
+
+ // FIXME: implement these latest cuts,
+// const AliESDVertex* vtxESD = esd->GetPrimaryVertexSPD();
+// if (vtxESD->GetNContributors()<1) return;
+// if (vtxESD->GetDispersion()>0.04) return;
+// if (vtxESD->GetZRes()>0.25) return;
+// const AliMultiplicity* multESD = esd->GetMultiplicity();
+// const AliESDVertex* vtxESDTPC = esd->GetPrimaryVertexTPC();
+// if(vtxESDTPC->GetNContributors()<1) return;
+// if(vtxESDTPC->GetNContributors()<(-10.+0.25*multESD->GetNumberOfITSClusters(0)))
+ // Quality cut on vertexer Z, as suggested by Francesco Prino
if(vtxESD->IsFromVertexerZ()) {
if (vtxESD->GetNContributors() <= 0) return;
if (vtxESD->GetDispersion() >= 0.04) return;
Int_t acceptedTracks = 0;
for (Int_t itrack = 0; itrack<ntracks; itrack++) {
- AliESDtrack * esdTrack = fESD->GetTrack(itrack);
-
+ AliESDtrack * esdTrack = fIsTPCOnly ? fTrackCuts->GetTPCOnlyTrack(fESD,itrack) : fESD->GetTrack(itrack);// FIXMEL TrackCuts or TrackCutsNoDCA for the TPC?
+ if (!esdTrack) continue;
+
// Fill DCA distibutions, without the DCA cut, Fill the other stuff, with all cuts!
Bool_t accepted = fTrackCuts->AcceptTrack(esdTrack);
Bool_t acceptedNoDCA = fTrackCutsNoDCA->AcceptTrack(esdTrack);
~AliAnalysisTaskMultPbTracks();
void SetTrackCuts(AliESDtrackCuts * cuts) { fTrackCuts = cuts;}
void SetCentralitySelector(AliAnalysisMultPbCentralitySelector * centr) { fCentrSelector=centr;}
+ void SetTPCOnly(Bool_t flag=kTRUE) {fIsTPCOnly=flag;}
// void SetCentralityBin(Int_t bin = 0) { fCentrBin = bin; }
// void SetCentralityEstimator(const char * centr) { fCentralityEstimator = centr; }
AliESDtrackCuts * fTrackCutsNoDCA; // copy of the previous one, but with no DCA cuts
UInt_t fOfflineTrigger ; // offline trigger mask
Bool_t fIsMC; // true if processing montecarlo
+ Bool_t fIsTPCOnly; // if you only want to use TPC tracks
AliAnalysisTaskMultPbTracks& operator=(const AliAnalysisTaskMultPbTracks& task);
void SetStyle();
void CheckSecondaries(Double_t & fracWeak, Double_t &fracMaterial);
void CheckSanity();
+void CheckCorrections();
void ShowAcceptanceInVzSlices() ;
TH1D * GetRatioIntegratedFractions (TH1 * hNum, TH1 * hDenum) ;
TH1D * GetCumulativeHisto (TH1 * h) ;
#define CORRECT_2D
void correct(TString dataFolder = "./output/LHC10g2d_130844_V0M_bin_10/", TString correctionFolder = "./output/LHC10g2a_130844_V0M_bin_10/",
- Float_t zminl=-10, Float_t zmaxl=10, Float_t etaMinl = -0.5, Float_t etaMaxl=0.5, Float_t npart=381.3) {
+ Float_t zminl=-10, Float_t zmaxl=10, Float_t etaMinl = -0.5, Float_t etaMaxl=0.5, Float_t npart=381.3, Float_t scaleWeakByHand = -1) {
// Set vertex
zmin = zminl;
CheckSanity();
Double_t fractionWeak = 1, fractionMaterial=1;
- CheckSecondaries(fractionWeak, fractionMaterial);
+ // CheckSecondaries(fractionWeak, fractionMaterial);
cout << "Rescaling secondaries correction, weak: " << fractionWeak << ", material: " << fractionMaterial <<endl;
-
-
+ if(scaleWeakByHand >= 0) {
+ fractionWeak = scaleWeakByHand;
+ cout << "Scaling Strangeness by hand (factor " << fractionWeak <<")" << endl;
+
+ }
// Some shorthands
- // FIXME: Gen should be projected including overflow in z?
+
#if defined CORRECT_1D
TH1D * hDataPt = (TH1D*) hManData->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRec, etaMin,etaMax,zmin,zmax)->Clone("hDataPt");
- TH1D * hMCPtGen = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoGen, etaMin,etaMax,zmin,zmax); //FIXME: che si fa qui?
+ TH1D * hMCPtGen = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoGen, etaMin,etaMax,zmin,zmax);
//zTH1D * hMCPtGen = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoGen, etaMin,etaMax,zmin,zmax);
TH1D * hMCPtRec = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRec, etaMin,etaMax,zmin,zmax);
TH1D * hMCPtPri = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim, etaMin,etaMax,zmin,zmax);
// PRIM_DATA = ALL_DATA - SEC_MC/ALL_MC*ALL_DATA - FAK_MC/ALL_MC*ALL_DATA
// TRUE_DATA = PRIM_DATA * GEN_MC/PRIM_MC
-
TH1D * hEffPt = (TH1D*) hMCPtPri->Clone("hEffPt");
hEffPt->Divide(hMCPtPri,hMCPtGen,1,1,"B");
hCorrected->Fit(f,"", "same");
hCorrected->Fit(f,"IME", "same",0,2);
cout << "dN/deta (function) = " << f->Integral(0,100) << " +- " << f->IntegralError(0,100) << endl;
- cout << "dN/deta (data>0.15) = " << hCorrected->Integral(3,-1,"width") << endl;//
+ cout << "dN/deta (data>0.15) = " << hCorrected->Integral(4,-1,"width") << endl;//
cout << "dN/deta (func+data) = " << f->Integral(0,0.1) + hCorrected->Integral(3,-1,"width") << endl;//
cout << "dN/deta (func 0.15+data) = " << f->Integral(0,0.15) + hCorrected->Integral(4,-1,"width") << endl;//
cout << "Generated dN/deta (correction) = " << hMCPtGen->Integral("width") << endl;
cout << "Generated dN/deta (correction, <0.13) = " << hMCPtGen->Integral(1,2,"width") << endl;
cout << "-------" << endl;
+ cout << "Rescaling secondaries correction, weak: " << fractionWeak << ", material: " << fractionMaterial <<endl;
Double_t errorData = 0;
- Float_t dNdeta = (f->Integral(0,0.1) + hCorrected->IntegralAndError(3,-1,errorData, "width")) / (etaMax-etaMin);
+ Float_t dNdeta = (f->Integral(0,0.1) + hCorrected->IntegralAndError(1,-1,errorData, "width")) / (etaMax-etaMin);
Float_t dNdetaE = TMath::Sqrt(f->IntegralError(0,0.1)*f->IntegralError(0,0.1) + errorData*errorData) / (etaMax-etaMin);
cout << "dN/deta " << dNdeta << " +- " << dNdetaE << endl;
cout << "(dN/deta)/Npart " << dNdeta/npart << " +- " << dNdetaE/npart << endl;
- // FIXME: comment this out
TH1D * hDataGen = hManData->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoGen, etaMin,etaMax,zmin,zmax);
cout << "Generated dN/deta (data) = " << hDataGen->Integral("width") << endl;
hDataGen->Draw("same");
// compares various distributions in data and in MC
TCanvas * c1 = new TCanvas("cVz", "Vertex Z distribution");
c1->cd();
- TH1D * hData = hManData->GetHistoVzEvent(AliAnalysisMultPbTrackHistoManager::kHistoRec );
- TH1D * hCorr = hManCorr->GetHistoVzEvent(AliAnalysisMultPbTrackHistoManager::kHistoRec );
+ TH1 * hData = hManData->GetHistoVzEvent(AliAnalysisMultPbTrackHistoManager::kHistoRec );
+ TH1 * hCorr = hManCorr->GetHistoVzEvent(AliAnalysisMultPbTrackHistoManager::kHistoRec );
hData->SetLineColor (kBlack);
hData->SetMarkerColor(kBlack);
hData->SetMarkerStyle(kFullCircle);
hCorr->Draw("same");
l->Draw();
+ TCanvas * c4 = new TCanvas("cStatistics", "cStats");
+ c4->cd();
+ hData = hManData->GetHistoStats();
+ hCorr = hManCorr->GetHistoStats();
+ hData->SetLineColor (kBlack);
+ hData->SetMarkerColor(kBlack);
+ // hData->SetMarkerStyle(kFullCircle);
+ hCorr->SetLineColor (kRed);
+ hCorr->SetMarkerColor(kRed);
+ // hCorr->SetMarkerStyle(kOpenSquare);
+ l = new TLegend(0.575503, 0.70979, 0.86745, 0.917832);
+ l->AddEntry(hData, "Data");
+ l->AddEntry(hCorr, "MC");
+ hData->Draw("");
+ hCorr->Draw("same");
+ l->Draw();
+
+
+}
+
+void CheckCorrections() {
+
+ TH1D * hDataPt = (TH1D*) hManData->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRec, etaMin,etaMax,zmin,zmax)->Clone("hDataPt");
+ TH1D * hMCPtGen = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoGen, etaMin,etaMax,zmin,zmax);
+ TH1D * hMCPtRec = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRec, etaMin,etaMax,zmin,zmax);
+ TH1D * hMCPtPri = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRecPrim, etaMin,etaMax,zmin,zmax);
+ TH1D * hMCPtSeM = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRecSecMat, etaMin,etaMax,zmin,zmax);
+ TH1D * hMCPtSeW = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRecSecWeak, etaMin,etaMax,zmin,zmax);
+ TH1D * hMCPtFak = hManCorr->GetHistoPt(AliAnalysisMultPbTrackHistoManager::kHistoRecFake, etaMin,etaMax,zmin,zmax);
+
+ hMCPtSeM->Divide(hMCPtRec);
+ hMCPtSeW->Divide(hMCPtRec);
+ hMCPtPri->Divide(hMCPtGen);
+ TCanvas * c1 = new TCanvas("cSecondaries", "Secondaries");
+ hMCPtSeM->Draw();
+ hMCPtSeW->Draw("same");
+
+ TCanvas * c2 = new TCanvas("cEfficiency", "Efficiency");
+ hMCPtPri->Draw();
+
}
void LoadLibs( Bool_t debug) {
hManCorr = (AliAnalysisMultPbTrackHistoManager*) fCorr->Get("histoManager");
AliESDtrackCuts * cutsData = (AliESDtrackCuts*) fData->Get("AliESDtrackCuts");
AliESDtrackCuts * cutsCorr = (AliESDtrackCuts*) fCorr->Get("AliESDtrackCuts");
- if (cutsData != cutsCorr) {
- cout << "ERROR: MC and data do not have the same cuts" << endl;
- // FIXME: exit here
- }
+
+ // FIXME: implement operator= and Print in AliESDtrackCuts
+ // if (cutsData != cutsCorr) {
+ // cout << "ERROR: MC and data do not have the same cuts" << endl;
+ // // }
cutsData->Print();
hEvStatData = (TH2D*) fStatData->Get("fHistStatistics");
hEvStatCorr = (TH2D*) fStatCorr->Get("fHistStatistics");
TH1D * GetCumulativeHisto (TH1 * h) {
// Returns a cumulative histogram
- // FIXME: put this method in a tools class
+ // TODO: put this method in a tools class
TH1D * hInt = (TH1D*) h->Clone(TString(h->GetName())+"_Int");
hInt->Reset();
Float_t integral = h->Integral(-1,-1); // Consider under/over flow!
TH1D * GetRatioIntegratedFractions (TH1 * hNum, TH1 * hDenum) {
// Returns the the ratio of integrated histograms
- // FIXME: put this method in a tools class
+ // TODO: put this method in a tools class
TH1D * hRatio = (TH1D*) hNum->Clone(TString(hNum->GetName())+hDenum->GetName()+"_RatioIntegrated");
hRatio->Reset();
Int_t nbin = hNum->GetNbinsX();
c->Print(name+ "."+element->GetString());
}
}
+
// physics selection
gROOT->ProcessLine(".L $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
physicsSelectionTask = AddTaskPhysicsSelection(isMC,0);//FIXME
- // FIXME!!
- // if(!isMC) {
- // AliPhysicsSelection * physSel = physicsSelectionTask->GetPhysicsSelection();
- // // physSel->AddCollisionTriggerClass("+CTRUE-B-NOPF-ALL");
- // physSel->AddCollisionTriggerClass("+CMBAC-B-NOPF-ALL");
- // physSel->AddCollisionTriggerClass("+CMBS1C-B-NOPF-ALL");
- // physSel->AddCollisionTriggerClass("+CMBS1A-B-NOPF-ALL");
- // physSel->AddBGTriggerClass("+CMBAC-C-NOPF-ALL");
- // physSel->AddBGTriggerClass("+CMBS1C-C-NOPF-ALL");
- // physSel->AddBGTriggerClass("+CMBS1A-C-NOPF-ALL");
- // physSel->AddBGTriggerClass("+CMBAC-A-NOPF-ALL");
- // physSel->AddBGTriggerClass("+CMBS1C-A-NOPF-ALL");
- // physSel->AddBGTriggerClass("+CMBS1A-A-NOPF-ALL");
- // physSel->AddBGTriggerClass("+CMBAC-E-NOPF-ALL");
- // physSel->AddBGTriggerClass("+CMBS1C-E-NOPF-ALL");
- // physSel->AddBGTriggerClass("+CMBS1A-E-NOPF-ALL");
- // // physSel->AddBGTriggerClass ("+C0SM1-E-NOPF-ALL");
- // }
// Centrality
AliCentralitySelectionTask *taskCentr = new AliCentralitySelectionTask("CentralitySelection");
taskCentr->SetPercentileFile (file1);
taskCentr->SetPercentileFile2(file2);
- //FIXME
+ //FIXME: include back centrality estimator
// mgr->AddTask(taskCentr);
// mgr->ConnectInput (taskCentr,0, mgr->GetCommonInputContainer());
centrSelector->SetCentrTaskFiles(file1,file2); // for bookkeping only
centrSelector->SetCentralityBin(centrBin);
centrSelector->SetCentralityEstimator(centrEstimator);
- // FIXME!!!
- //centrSelector->SetIsMC(isMC,1500,2300);
- cout << "SETTING" << endl;
if(useOtherCentralityCut == 1){
- cout << "SETTING MULT" << endl;
+ cout << "Setting centrality by MULT" << endl;
centrSelector->SetUseMultRange();
centrSelector->SetMultRange(trackMin,trackMax);
}
if(useOtherCentralityCut == 2){
- cout << "SETTING V0" << endl;
+ cout << "Setting centrality by V0" << endl;
centrSelector->SetUseV0Range();
centrSelector->SetMultRange(trackMin,trackMax);
}
if(useOtherCentralityCut == 3){
- cout << "SETTING SPD OUTER" << endl;
+ cout << "Setting centrality by SPD outer" << endl;
centrSelector->SetUseSPDOuterRange();
centrSelector->SetMultRange(trackMin,trackMax);
}
// cuts->SetPtRange(0.15,0.2);// FIXME pt cut
// const char * pathsuffix = "_pt_015_020_nofakes";
+ if (optionStr.Contains("DCA")) {
+ delete cuts;
+ cuts = AliESDtrackCuts::GetStandardITSPureSATrackCuts2009();
+ cout << ">>>> USING DCA cut" << endl;
+ cuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE);
+ pathsuffix="DCAcut";
+ }
+
if (optionStr.Contains("ITSsa")) {
delete cuts;
cuts = AliESDtrackCuts::GetStandardITSPureSATrackCuts2009();
// load my task
gROOT->ProcessLine(".L $ALICE_ROOT/PWG0/multPbPb/AddTaskMultPbPbTracks.C");
- AliAnalysisTaskMultPbTracks * task = AddTaskMultPbPbTracks("multPbPbtracks.root", cuts, centrSelector); // kTRUE enables DCA cut
+ AliAnalysisTaskMultPbTracks * task = AddTaskMultPbPbTracks("multPbPbtracks.root", cuts, centrSelector);
task->SetIsMC(useMCKinematics);
task->SetOfflineTrigger(AliVEvent::kMB);
+ if(optionStr.Contains("TPC")) task->SetTPCOnly();
// if (isMC) {
// task->SetOfflineTrigger(AliVEvent::kMB);
// } else {
etaMin=-0.5
etaMax=0.5
npart=381.188
+weakFactor=-1
give_help() {
-o <option> Misc option [default=$option]
Available options:
- SAVE: Move results to a different output folder*
+ - DCA: Use DCA cut with global tracks
- ITSsa: Use ITSsa tracks
- TPC: Use TPC only tracks
- NOMCKINE: Skip MC kinematics (runs way faster)
-z <zmin,zmax> Change vertex Z range [default = $vzMin,$vzMax]
-a <etamin,etamax> Change eta range [default = $etaMin,$etaMax]
-p <npart> Number of participants, used only for dNdeta/npart [default=$npart]
+ -k <weakFrac> Scale ration secondaries from strangeness/all rec by this factor [default=$weakFactor]
ENDOFGUIDE
}
;;
k)
ntrackletsTrigger=$OPTARG
+ weakFactor=$OPTARG
;;
s)
runTriggerStudy=yes
if [ "$correct" = "yes" ]
then
- root $ropt correct.C+\(\"$dataDir\",\"$mcDir\",$vzMin,$vzMax,$etaMin,$etaMax,$npart\);
+ root $ropt correct.C+\(\"$dataDir\",\"$mcDir\",$vzMin,$vzMax,$etaMin,$etaMax,$npart,$weakFactor\);
fi