fCurrentEvent(-1),
fBField(0),
fKeepingOnlyPYTHIABkg(kFALSE),
- fHistoMCLcK0Sp(0x0)
+ fHistoMCLcK0SpGen(0x0),
+ fHistoMCLcK0SpGenAcc(0x0),
+ fHistoMCLcK0SpGenLimAcc(0x0),
+ fTriggerMask(0)
{
//
// Default ctor
fCurrentEvent(-1),
fBField(0),
fKeepingOnlyPYTHIABkg(kFALSE),
- fHistoMCLcK0Sp(0x0)
-
+ fHistoMCLcK0SpGen(0x0),
+ fHistoMCLcK0SpGenAcc(0x0),
+ fHistoMCLcK0SpGenLimAcc(0x0),
+ fTriggerMask(0)
{
//
// Constructor. Initialization of Inputs and Outputs
// a query. It always runs on the client, it can be used to present
// the results graphically or save the results to file.
- //AliInfo("Terminate","");
+ AliInfo("Terminate");
AliAnalysisTaskSE::Terminate();
fOutput = dynamic_cast<TList*> (GetOutputData(1));
}
- AliDebug(2, Form("At MC level, %f Lc --> K0S + p were found", fHistoMCLcK0Sp->GetEntries()));
-
+ //AliDebug(2, Form("At MC level, %f Lc --> K0S + p were found", fHistoMCLcK0SpGen->GetEntries()));
+ //AliDebug(2, Form("At MC level, %f Lc --> K0S + p were found in the acceptance", fHistoMCLcK0SpGenAcc->GetEntries()));
+ //AliDebug(2, Form("At Reco level, %lld Lc --> K0S + p were found", fVariablesTreeSgn->GetEntries()));
+ if(fHistoMCLcK0SpGen) {
+ AliInfo(Form("At MC level, %f Lc --> K0S + p were found", fHistoMCLcK0SpGen->GetEntries()));
+ } else {
+ AliInfo("fHistoMCLcK0SpGen not available");
+ }
+ if(fHistoMCLcK0SpGenAcc) {
+ AliInfo(Form("At MC level, %f Lc --> K0S + p were found in the acceptance", fHistoMCLcK0SpGenAcc->GetEntries()));
+ } else {
+ AliInfo("fHistoMCLcK0SpGenAcc not available");
+ }
+ if(fVariablesTreeSgn) {
+ AliInfo(Form("At Reco level, %lld Lc --> K0S + p were found", fVariablesTreeSgn->GetEntries()));
+ } else {
+ AliInfo("fVariablesTreeSgn not available");
+ }
+
fOutputKF = dynamic_cast<TList*> (GetOutputData(6));
if (!fOutputKF) {
AliError("fOutputKF not available");
const Float_t ptbins[15] = {0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 12., 17., 25., 35.};
- fHistoMCLcK0Sp = new TH1F("fHistoMCLcK0Sp", "fHistoMCLcK0Sp", 14, ptbins);
+ fHistoMCLcK0SpGen = new TH1F("fHistoMCLcK0SpGen", "fHistoMCLcK0SpGen", 14, ptbins);
+ fHistoMCLcK0SpGenAcc = new TH1F("fHistoMCLcK0SpGenAcc", "fHistoMCLcK0SpGenAcc", 14, ptbins);
+ fHistoMCLcK0SpGenLimAcc = new TH1F("fHistoMCLcK0SpGenLimAcc", "fHistoMCLcK0SpGenLimAcc", 14, ptbins);
fOutput->Add(fHistoEvents);
fOutput->Add(fHistoLc);
fOutput->Add(fHistoCodesBkg);
fOutput->Add(fHistoLcpKpiBeforeCuts);
fOutput->Add(fHistoBackground);
- fOutput->Add(fHistoMCLcK0Sp);
+ fOutput->Add(fHistoMCLcK0SpGen);
+ fOutput->Add(fHistoMCLcK0SpGenAcc);
+ fOutput->Add(fHistoMCLcK0SpGenLimAcc);
PostData(1, fOutput);
PostData(4, fVariablesTreeSgn);
if ( !fUseMCInfo && fIspA) {
fAnalCuts->SetTriggerClass("");
- fAnalCuts->SetTriggerMask(AliVEvent::kINT7);
+ fAnalCuts->SetTriggerMask(fTriggerMask);
}
-
+
+ Int_t runnumber = aodEvent->GetRunNumber();
+ if (aodEvent->GetTriggerMask() == 0 && (runnumber >= 195344 && runnumber <= 195677)){
+ AliDebug(3,"Event rejected because of null trigger mask");
+ return;
+ }
+
fCounter->StoreEvent(aodEvent,fAnalCuts,fUseMCInfo);
-
+
// mc analysis
TClonesArray *mcArray = 0;
AliAODMCHeader *mcHeader=0;
if (fUseMCInfo) {
- // MC array need for maching
+ // MC array need for matching
mcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
if (!mcArray) {
AliError("Could not find Monte-Carlo in AOD");
AliError("AliAnalysisTaskSELc2V0bachelorTMVA::UserExec: MC header branch not found!\n");
return;
}
+
+ Double_t zMCVertex = mcHeader->GetVtxZ();
+ if (TMath::Abs(zMCVertex) > fAnalCuts->GetMaxVtxZ()){
+ AliDebug(3,Form("z coordinate of MC vertex = %f, it was required to be within [-%f, +%f], skipping event", zMCVertex, fAnalCuts->GetMaxVtxZ(), fAnalCuts->GetMaxVtxZ()));
+ AliInfo(Form("z coordinate of MC vertex = %f, it was required to be within [-%f, +%f], skipping event", zMCVertex, fAnalCuts->GetMaxVtxZ(), fAnalCuts->GetMaxVtxZ()));
+ return;
+ }
+
//Printf("Filling MC histo");
FillMCHisto(mcArray);
}
-
+
// AOD primary vertex
fVtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
if (!fVtx1) return;
AliAODMCParticle* mcPart = dynamic_cast<AliAODMCParticle*>(mcArray->At(iPart));
if (!mcPart){
AliError("Failed casting particle from MC array!, Skipping particle");
- AliInfo("Failed casting particle from MC array!, Skipping particle");
continue;
}
Int_t pdg = mcPart->GetPdgCode();
AliDebug(2, Form("MC particle %d is not a Lc: its pdg code is %d", iPart, pdg));
continue;
}
- AliInfo(Form("Step 0 ok: MC particle %d is a Lc: its pdg code is %d", iPart, pdg));
+ AliDebug(2, Form("Step 0 ok: MC particle %d is a Lc: its pdg code is %d", iPart, pdg));
Int_t labeldaugh0 = mcPart->GetDaughter(0);
Int_t labeldaugh1 = mcPart->GetDaughter(1);
if (labeldaugh0 <= 0 || labeldaugh1 <= 0){
continue;
}
else if (labeldaugh1 - labeldaugh0 == 1){
- AliInfo(Form("Step 1 ok: The MC particle has correct daughters!!"));
+ AliDebug(2, Form("Step 1 ok: The MC particle has correct daughters!!"));
AliAODMCParticle* daugh0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(labeldaugh0));
AliAODMCParticle* daugh1 = dynamic_cast<AliAODMCParticle*>(mcArray->At(labeldaugh1));
+ if(!daugh0 || !daugh1){
+ AliDebug(2,"Particle daughters not properly retrieved!");
+ return;
+ }
Int_t pdgCodeDaugh0 = TMath::Abs(daugh0->GetPdgCode());
Int_t pdgCodeDaugh1 = TMath::Abs(daugh1->GetPdgCode());
AliAODMCParticle* bachelorMC = daugh0;
continue;
}
else { // So far: Lc --> K0 + p, K0 with 1 daughter
- AliInfo("Step 2 ok: The K0 does decay in 1 body only! ");
+ AliDebug(2, "Step 2 ok: The K0 does decay in 1 body only! ");
Int_t labelK0daugh = v0MC->GetDaughter(0);
AliAODMCParticle* partK0S = dynamic_cast<AliAODMCParticle*>(mcArray->At(labelK0daugh));
if(!partK0S){
AliError("Error while casting particle! returning a NULL array");
- AliInfo("Error while casting particle! returning a NULL array");
continue;
}
else { // So far: Lc --> K0 + p, K0 with 1 daughter that we can access
continue;
}
else { // So far: Lc --> K0 + p, K0 --> K0S, K0S in 2 bodies
- AliInfo("Step 3 ok: The K0 daughter is a K0S and does decay in 2 bodies");
+ AliDebug(2, "Step 3 ok: The K0 daughter is a K0S and does decay in 2 bodies");
Int_t labelK0Sdaugh0 = partK0S->GetDaughter(0);
Int_t labelK0Sdaugh1 = partK0S->GetDaughter(1);
AliAODMCParticle* daughK0S0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(labelK0Sdaugh0));
continue;
}
else { // So far: Lc --> K0 + p, K0 --> K0S, K0S in 2 bodies that we can access
- AliInfo("Step 4 ok: Could access K0S daughters, continuing...");
+ AliDebug(2, "Step 4 ok: Could access K0S daughters, continuing...");
Int_t pdgK0Sdaugh0 = daughK0S0->GetPdgCode();
Int_t pdgK0Sdaugh1 = daughK0S1->GetPdgCode();
if (TMath::Abs(pdgK0Sdaugh0) != 211 || TMath::Abs(pdgK0Sdaugh1) != 211){
AliDebug(2, "The K0S does not decay in pi+pi-, continuing");
- AliInfo("The K0S does not decay in pi+pi-, continuing");
+ //AliInfo("The K0S does not decay in pi+pi-, continuing");
}
else { // Full chain: Lc --> K0 + p, K0 --> K0S, K0S --> pi+pi-
if (fAnalCuts->IsInFiducialAcceptance(mcPart->Pt(), mcPart->Y())) {
AliDebug(2, Form("----> Filling histo with pt = %f", mcPart->Pt()));
- fHistoMCLcK0Sp->Fill(mcPart->Pt());
+ if(TMath::Abs(mcPart->Y()) < 0.5) fHistoMCLcK0SpGenLimAcc->Fill(mcPart->Pt());
+ //AliInfo(Form("\nparticle = %d, Filling MC Gen histo\n", iPart));
+ fHistoMCLcK0SpGen->Fill(mcPart->Pt());
+ if(!(TMath::Abs(bachelorMC->Eta()) > 0.9 || bachelorMC->Pt() < 0.1 ||
+ TMath::Abs(daughK0S0->Eta()) > 0.9 || daughK0S0->Pt() < 0.1 ||
+ TMath::Abs(daughK0S1->Eta()) > 0.9 || daughK0S1->Pt() < 0.1)) {
+ fHistoMCLcK0SpGenAcc->Fill(mcPart->Pt());
+ }
}
else {
AliDebug(2, "not in fiducial acceptance! Skipping");
}
}
- FillLc2pK0Sspectrum(lcK0spr, isLc, nSelectedAnal, cutsAnal, mcArray);
+ FillLc2pK0Sspectrum(lcK0spr, isLc, nSelectedAnal, cutsAnal, mcArray, iLctopK0s);
}
Int_t isLc,
Int_t &nSelectedAnal,
AliRDHFCutsLctoV0 *cutsAnal,
- TClonesArray *mcArray){
+ TClonesArray *mcArray, Int_t iLctopK0s){
//
// Fill histos for Lc -> K0S+proton
//
Int_t isInV0window = (((cutsAnal->IsSelectedSingleCut(part, AliRDHFCuts::kCandidate, 2)) & (AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr)); // cut on V0 invMass
if (isInV0window == 0) {
- AliDebug(2, "No: The candidate has NOT passed the mass cuts!");
- if (isLc) Printf("SIGNAL candidate rejected");
+ AliDebug(2, "No: The candidate has NOT passed the V0 window cuts!");
+ if (isLc) Printf("SIGNAL candidate rejected: V0 window cuts");
return;
}
else AliDebug(2, "Yes: The candidate has passed the mass cuts!");
if (!isInCascadeWindow) {
AliDebug(2, "No: The candidate has NOT passed the cascade window cuts!");
- if (isLc) Printf("SIGNAL candidate rejected");
+ if (isLc) Printf("SIGNAL candidate rejected: cascade window cuts");
return;
}
else AliDebug(2, "Yes: The candidate has passed the cascade window cuts!");
Bool_t isCandidateSelectedCuts = (((cutsAnal->IsSelected(part, AliRDHFCuts::kCandidate)) & (AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr)); // kinematic/topological cuts
+ AliDebug(2, Form("recoAnalysisCuts = %d", cutsAnal->IsSelected(part, AliRDHFCuts::kCandidate) & (AliRDHFCutsLctoV0::kLcToK0Spr)));
if (!isCandidateSelectedCuts){
AliDebug(2, "No: Analysis cuts kCandidate level NOT passed");
if (isLc) Printf("SIGNAL candidate rejected");
if (fUseMCInfo) {
if (isLc){
- AliDebug(2, "Filling Sgn");
+ AliDebug(2, Form("Reco particle %d --> Filling Sgn", iLctopK0s));
fVariablesTreeSgn->Fill();
fHistoCodesSgn->Fill(bachCode, k0SCode);
}