]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Updated version of the toy model + coverity fixes
authorpchrist <pchrist@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 27 Dec 2011 22:33:16 +0000 (22:33 +0000)
committerpchrist <pchrist@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 27 Dec 2011 22:33:16 +0000 (22:33 +0000)
PWG2/EBYE/AliAnalysisTaskToyModel.cxx
PWG2/EBYE/AliAnalysisTaskToyModel.h
PWG2/EBYE/AliBalance.cxx
PWG2/EBYE/macros/runBalanceFunctionToyModel.C

index b566b159dfbbb4f90e177a4566e9ed96ef83d018..62e7f4ca22a1e8c149aeefc641be20d706f80a9e 100755 (executable)
@@ -26,46 +26,47 @@ ClassImp(AliAnalysisTaskToyModel)
 //________________________________________________________________________\r
 AliAnalysisTaskToyModel::AliAnalysisTaskToyModel() \r
 : TObject(),\r
-    fUseDebug(kFALSE),\r
-    fBalance(0),\r
-    fRunShuffling(kFALSE), fShuffledBalance(0),\r
-    fList(0), fListBF(0), fListBFS(0),\r
-    fHistEventStats(0),\r
-    fHistNumberOfAcceptedParticles(0),\r
-    fHistReactionPlane(0),\r
-    fHistEtaTotal(0), fHistEta(0),\r
-    fHistRapidityTotal(0), fHistRapidity(0),\r
-    fHistRapidityPions(0), fHistRapidityKaons(0), fHistRapidityProtons(0),\r
-    fHistPhiTotal(0), fHistPhi(0),\r
-    fHistPhiPions(0), fHistPhiKaons(0), fHistPhiProtons(0),\r
-    fHistPtTotal(0), fHistPt(0),\r
-    fHistPtPions(0), fHistPtKaons(0), fHistPtProtons(0),\r
-    fTotalMultiplicityMean(100.), fTotalMultiplicitySigma(0.0),\r
-    fNetChargeMean(0.0), fNetChargeSigma(0.0),\r
-    fPtMin(0.0), fPtMax(100.0),\r
-    fEtaMin(-1.0), fEtaMax(1.0),\r
-    fUseAcceptanceParameterization(kFALSE), fAcceptanceParameterization(0),\r
-    fUseAllCharges(kFALSE), fParticleMass(0.0),\r
-    fPtSpectraAllCharges(0), fTemperatureAllCharges(100.),\r
-    fReactionPlane(0.0),\r
-    fAzimuthalAngleAllCharges(0), fDirectedFlowAllCharges(0.0), \r
-    fEllipticFlowAllCharges(0.0), fTriangularFlowAllCharges(0.0),\r
-    fQuandrangularFlowAllCharges(0.0), fPentangularFlowAllCharges(0.0),\r
-    fPionPercentage(0.8), fPionMass(0.0),\r
-    fPtSpectraPions(0), fTemperaturePions(100.),\r
-    fAzimuthalAnglePions(0), fDirectedFlowPions(0.0), \r
-    fEllipticFlowPions(0.0), fTriangularFlowPions(0.0), \r
-    fQuandrangularFlowPions(0.0), fPentangularFlowPions(0.0),\r
-    fKaonPercentage(0.8), fKaonMass(0.0),\r
-    fPtSpectraKaons(0), fTemperatureKaons(100.),\r
-    fAzimuthalAngleKaons(0), fDirectedFlowKaons(0.0), \r
-    fEllipticFlowKaons(0.0), fTriangularFlowKaons(0.0),\r
-    fQuandrangularFlowKaons(0.0), fPentangularFlowKaons(0.0),\r
-    fProtonPercentage(0.8), fProtonMass(0.0),\r
-    fPtSpectraProtons(0), fTemperatureProtons(100.),\r
-    fAzimuthalAngleProtons(0), fDirectedFlowProtons(0.0), \r
-    fEllipticFlowProtons(0.0), fTriangularFlowProtons(0.0),\r
-    fQuandrangularFlowProtons(0.0), fPentangularFlowProtons(0.0) {\r
+  fUseDebug(kFALSE),\r
+  fBalance(0),\r
+  fRunShuffling(kFALSE), fShuffledBalance(0),\r
+  fList(0), fListBF(0), fListBFS(0),\r
+  fHistEventStats(0),\r
+  fHistNumberOfAcceptedParticles(0),\r
+  fHistReactionPlane(0),\r
+  fHistEtaTotal(0), fHistEta(0),\r
+  fHistRapidity(0),\r
+  fHistRapidityPions(0), fHistRapidityKaons(0), fHistRapidityProtons(0),\r
+  fHistPhi(0),\r
+  fHistPhiPions(0), fHistPhiKaons(0), fHistPhiProtons(0),\r
+  fHistPt(0),\r
+  fHistPtPions(0), fHistPtKaons(0), fHistPtProtons(0),\r
+  fTotalMultiplicityMean(100.), fTotalMultiplicitySigma(0.0),\r
+  fNetChargeMean(0.0), fNetChargeSigma(0.0),\r
+  fPtMin(0.0), fPtMax(100.0),\r
+  fEtaMin(-1.0), fEtaMax(1.0),\r
+  fUseAcceptanceParameterization(kFALSE), fAcceptanceParameterization(0),\r
+  fUseAllCharges(kFALSE), fParticleMass(0.0),\r
+  fPtSpectraAllCharges(0), fTemperatureAllCharges(100.),\r
+  fReactionPlane(0.0),\r
+  fAzimuthalAngleAllCharges(0), fDirectedFlowAllCharges(0.0), \r
+  fEllipticFlowAllCharges(0.0), fTriangularFlowAllCharges(0.0),\r
+  fQuandrangularFlowAllCharges(0.0), fPentangularFlowAllCharges(0.0),\r
+  fPionPercentage(0.8), fPionMass(0.0),\r
+  fPtSpectraPions(0), fTemperaturePions(100.),\r
+  fAzimuthalAnglePions(0), fDirectedFlowPions(0.0), \r
+  fEllipticFlowPions(0.0), fTriangularFlowPions(0.0), \r
+  fQuandrangularFlowPions(0.0), fPentangularFlowPions(0.0),\r
+  fKaonPercentage(0.8), fKaonMass(0.0),\r
+  fPtSpectraKaons(0), fTemperatureKaons(100.),\r
+  fAzimuthalAngleKaons(0), fDirectedFlowKaons(0.0), \r
+  fEllipticFlowKaons(0.0), fTriangularFlowKaons(0.0),\r
+  fQuandrangularFlowKaons(0.0), fPentangularFlowKaons(0.0),\r
+  fProtonPercentage(0.8), fProtonMass(0.0),\r
+  fPtSpectraProtons(0), fTemperatureProtons(100.),\r
+  fAzimuthalAngleProtons(0), fDirectedFlowProtons(0.0), \r
+  fEllipticFlowProtons(0.0), fTriangularFlowProtons(0.0),\r
+  fQuandrangularFlowProtons(0.0), fPentangularFlowProtons(0.0),\r
+  fUseDynamicalCorrelations(kFALSE), fDynamicalCorrelationsPercentage(0.1) {\r
   // Constructor\r
 }\r
 \r
@@ -221,9 +222,6 @@ void AliAnalysisTaskToyModel::CreateOutputObjects() {
   fList->Add(fHistEta);\r
 \r
   //Rapidity\r
-  fHistRapidityTotal = new TH1F("fHistRapidityTotal","Rapidity (full phase space);y;Entries",1000,-15.,15.); \r
-  fList->Add(fHistRapidityTotal);\r
-\r
   fHistRapidity = new TH1F("fHistRapidity","Rapidity (acceptance);y;Entries",1000,-1.5,1.5); \r
   fList->Add(fHistRapidity);\r
   fHistRapidityPions = new TH1F("fHistRapidityPions","Rapidity (acceptance - pions);y;Entries",1000,-1.5,1.5); \r
@@ -234,9 +232,6 @@ void AliAnalysisTaskToyModel::CreateOutputObjects() {
   fList->Add(fHistRapidityProtons);\r
 \r
   //Phi\r
-  fHistPhiTotal = new TH1F("fHistPhiTotal","Phi (full phase space);#phi (rad);Entries",1000,0.,2*TMath::Pi());\r
-  fList->Add(fHistPhiTotal);\r
-\r
   fHistPhi = new TH1F("fHistPhi","Phi (acceptance);#phi (rad);Entries",1000,0.,2*TMath::Pi());\r
   fList->Add(fHistPhi);\r
 \r
@@ -249,9 +244,6 @@ void AliAnalysisTaskToyModel::CreateOutputObjects() {
 \r
 \r
   //Pt\r
-  fHistPtTotal = new TH1F("fHistPtTotal","Pt (full phase space);p_{t} (GeV/c);Entries",1000,0.,10.);\r
-  fList->Add(fHistPtTotal);\r
-\r
   fHistPt = new TH1F("fHistPt","Pt (acceptance);p_{t} (GeV/c);Entries",1000,0.,10.);\r
   fList->Add(fHistPt);\r
 \r
@@ -371,7 +363,13 @@ void AliAnalysisTaskToyModel::Run(Int_t nEvents) {
     //Multiplicities\r
     Int_t nMultiplicity = (Int_t)(gRandom->Gaus(fTotalMultiplicityMean,fTotalMultiplicitySigma));\r
     Int_t nNetCharge = (Int_t)(gRandom->Gaus(fNetChargeMean,fNetChargeSigma));\r
-    Int_t nGeneratedPositive = 0, nGeneratedNegative = 0;\r
+    \r
+    Int_t nGeneratedPositive = (Int_t)((nMultiplicity/2) + nNetCharge);\r
+    Int_t nGeneratedNegative = nMultiplicity - nGeneratedPositive;\r
+    if(fUseDebug) \r
+      Printf("Total multiplicity: %d - Generated positive: %d - Generated negative: %d",nMultiplicity,nGeneratedPositive,nGeneratedNegative);\r
+\r
+    //Int_t nGeneratedPositive = 0, nGeneratedNegative = 0;\r
     Int_t nGeneratedPions = 0, nGeneratedKaons = 0, nGeneratedProtons = 0;\r
     \r
     //Randomization of the reaction plane\r
@@ -386,21 +384,27 @@ void AliAnalysisTaskToyModel::Run(Int_t nEvents) {
     }\r
     \r
     Int_t gNumberOfAcceptedParticles = 0;\r
-    //Generate particles\r
-    for(Int_t iParticleCount = 0; iParticleCount < nMultiplicity; iParticleCount++) {\r
+    Int_t gNumberOfAcceptedPositiveParticles = 0;\r
+    Int_t gNumberOfAcceptedNegativeParticles = 0;\r
\r
+    //Generate positive particles\r
+    for(Int_t iParticleCount = 0; iParticleCount < nGeneratedPositive; iParticleCount++) {\r
       isPion = kFALSE; isKaon = kFALSE; isProton = kFALSE;\r
+      if(fUseDebug) \r
+       Printf("Generating positive: %d(%d)",iParticleCount+1,nGeneratedPositive);\r
 \r
-      //Decide the charge\r
-      Double_t randomNumberCharge = gRandom->Rndm();\r
-      if(randomNumberCharge <= 0.5*(nMultiplicity + nNetCharge)/nMultiplicity) {\r
-       v_charge = 1.0;\r
-       nGeneratedPositive += 1;\r
-      }\r
-      else {\r
-       nGeneratedNegative += 1;\r
-       v_charge = -1.0;\r
-      }\r
+      //Pseudo-rapidity sampled from a Gaussian centered @ 0\r
+      v_eta = gRandom->Gaus(0.0,4.0);\r
+\r
+      //Fill QA histograms (full phase space)\r
+      fHistEtaTotal->Fill(v_eta);\r
+\r
+      v_charge = 1.0;\r
+      //nGeneratedPositive += 1;\r
       \r
+      //Acceptance\r
+      if((v_eta < fEtaMin) || (v_eta > fEtaMax)) continue;\r
+\r
       if(!fUseAllCharges) {\r
        //Decide the specie\r
        Double_t randomNumberSpecies = gRandom->Rndm();\r
@@ -428,9 +432,8 @@ void AliAnalysisTaskToyModel::Run(Int_t nEvents) {
       }\r
       else {\r
        v_pt = fPtSpectraAllCharges->GetRandom();\r
-       v_phi = fAzimuthalAngleAllCharges->GetRandom();\r
+       v_phi = TMath::RadToDeg()*fAzimuthalAngleAllCharges->GetRandom();\r
       }\r
-      v_eta = gRandom->Gaus(0.0,4.0);\r
       \r
       v_p[0] = v_pt*TMath::Cos(v_phi);\r
       v_p[1] = v_pt*TMath::Sin(v_phi);\r
@@ -442,17 +445,136 @@ void AliAnalysisTaskToyModel::Run(Int_t nEvents) {
       \r
       v_y = 0.5*TMath::Log((v_E + v_p[2])/(v_E - v_p[2]));\r
       \r
+      //pt coverage\r
+      if((v_pt < fPtMin) || (v_pt > fPtMax)) continue;\r
+      //Printf("pt: %lf - mins: %lf - max: %lf",v_pt,fPtMin,fPtMax);\r
+\r
+      //acceptance filter\r
+      if(fUseAcceptanceParameterization) {\r
+       Double_t gRandomNumberForAcceptance = gRandom->Rndm();\r
+       if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(v_pt)) \r
+         continue;\r
+      }\r
+\r
+      gNumberOfAcceptedPositiveParticles += 1;\r
+\r
+      //Fill QA histograms (acceptance);\r
+      fHistEta->Fill(v_eta);\r
+      fHistRapidity->Fill(v_y);\r
+      fHistPhi->Fill(v_phi);\r
+      fHistPt->Fill(v_pt);\r
+      if(isPion) {\r
+       fHistRapidityPions->Fill(v_y);\r
+       fHistPhiPions->Fill(v_phi);\r
+       fHistPtPions->Fill(v_pt);\r
+      }\r
+      else if(isKaon) {\r
+       fHistRapidityKaons->Fill(v_y);\r
+       fHistPhiKaons->Fill(v_phi);\r
+       fHistPtKaons->Fill(v_pt);\r
+      }\r
+      else if(isProton) {\r
+       fHistRapidityProtons->Fill(v_y);\r
+       fHistPhiProtons->Fill(v_phi);\r
+       fHistPtProtons->Fill(v_pt);\r
+      }\r
+\r
+      // fill charge vector\r
+      chargeVector[0]->push_back(v_charge);\r
+      chargeVector[1]->push_back(v_y);\r
+      chargeVector[2]->push_back(v_eta);\r
+      chargeVector[3]->push_back(TMath::RadToDeg()*v_phi);\r
+      chargeVector[4]->push_back(v_p[0]);\r
+      chargeVector[5]->push_back(v_p[1]);\r
+      chargeVector[6]->push_back(v_p[2]);\r
+      chargeVector[7]->push_back(v_pt);\r
+      chargeVector[8]->push_back(v_E);\r
+      \r
+      if(fRunShuffling) {\r
+       chargeVectorShuffle[0]->push_back(v_charge);\r
+       chargeVectorShuffle[1]->push_back(v_y);\r
+       chargeVectorShuffle[2]->push_back(v_eta);\r
+       chargeVectorShuffle[3]->push_back(TMath::RadToDeg()*v_phi);\r
+       chargeVectorShuffle[4]->push_back(v_p[0]);\r
+       chargeVectorShuffle[5]->push_back(v_p[1]);\r
+       chargeVectorShuffle[6]->push_back(v_p[2]);\r
+       chargeVectorShuffle[7]->push_back(v_pt);\r
+       chargeVectorShuffle[8]->push_back(v_E);\r
+      }\r
+      gNumberOfAcceptedParticles += 1;\r
+    }//generated positive particle loop\r
\r
+    //Generate negative particles\r
+    for(Int_t iParticleCount = 0; iParticleCount < nGeneratedNegative; iParticleCount++) {\r
+      isPion = kFALSE; isKaon = kFALSE; isProton = kFALSE;\r
+      if(fUseDebug) \r
+       Printf("Generating negative: %d(%d)",iParticleCount+1,nGeneratedNegative);\r
+\r
+      //Pseudo-rapidity sampled from a Gaussian centered @ 0\r
+      v_eta = gRandom->Gaus(0.0,4.0);\r
+\r
       //Fill QA histograms (full phase space)\r
       fHistEtaTotal->Fill(v_eta);\r
-      fHistRapidityTotal->Fill(v_y);\r
-      fHistPhiTotal->Fill(v_phi);\r
-      fHistPtTotal->Fill(v_pt);\r
 \r
+      v_charge = -1.0;\r
+      //nGeneratedNegative += 1;\r
+      \r
       //Acceptance\r
       if((v_eta < fEtaMin) || (v_eta > fEtaMax)) continue;\r
+\r
+      if(!fUseAllCharges) {\r
+       //Decide the specie\r
+       Double_t randomNumberSpecies = gRandom->Rndm();\r
+       if((randomNumberSpecies >= 0.0)&&(randomNumberSpecies < fPionPercentage)) {\r
+         nGeneratedPions += 1;\r
+         v_pt = fPtSpectraPions->GetRandom();\r
+         v_phi = fAzimuthalAnglePions->GetRandom();\r
+         fParticleMass = fPionMass;\r
+         isPion = kTRUE;\r
+       }\r
+       else if((randomNumberSpecies >= fPionPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage)) {\r
+         nGeneratedKaons += 1;\r
+         v_pt = fPtSpectraKaons->GetRandom();\r
+         v_phi = fAzimuthalAngleKaons->GetRandom();\r
+         fParticleMass = fKaonMass;\r
+         isKaon = kTRUE;\r
+       }\r
+       else if((randomNumberSpecies >= fPionPercentage + fKaonPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage + fProtonPercentage)) {\r
+         nGeneratedProtons += 1;\r
+         v_pt = fPtSpectraProtons->GetRandom();\r
+         v_phi = fAzimuthalAngleProtons->GetRandom();\r
+         fParticleMass = fProtonMass;\r
+         isProton = kTRUE;\r
+       }\r
+      }\r
+      else {\r
+       v_pt = fPtSpectraAllCharges->GetRandom();\r
+       v_phi = fAzimuthalAngleAllCharges->GetRandom();\r
+      }\r
+      \r
+      v_p[0] = v_pt*TMath::Cos(v_phi);\r
+      v_p[1] = v_pt*TMath::Sin(v_phi);\r
+      v_p[2] = v_pt*TMath::SinH(v_eta);\r
+      v_E = TMath::Sqrt(TMath::Power(fParticleMass,2) +\r
+                       TMath::Power(v_p[0],2) +\r
+                       TMath::Power(v_p[1],2) +\r
+                       TMath::Power(v_p[2],2));\r
+      \r
+      v_y = 0.5*TMath::Log((v_E + v_p[2])/(v_E - v_p[2]));\r
+      \r
+      //pt coverage\r
       if((v_pt < fPtMin) || (v_pt > fPtMax)) continue;\r
       //Printf("pt: %lf - mins: %lf - max: %lf",v_pt,fPtMin,fPtMax);\r
 \r
+     //acceptance filter\r
+      if(fUseAcceptanceParameterization) {\r
+       Double_t gRandomNumberForAcceptance = gRandom->Rndm();\r
+       if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(v_pt)) \r
+         continue;\r
+      }\r
+\r
+      gNumberOfAcceptedNegativeParticles += 1;\r
+\r
       //Fill QA histograms (acceptance);\r
       fHistEta->Fill(v_eta);\r
       fHistRapidity->Fill(v_y);\r
@@ -478,7 +600,7 @@ void AliAnalysisTaskToyModel::Run(Int_t nEvents) {
       chargeVector[0]->push_back(v_charge);\r
       chargeVector[1]->push_back(v_y);\r
       chargeVector[2]->push_back(v_eta);\r
-      chargeVector[3]->push_back(v_phi);\r
+      chargeVector[3]->push_back(TMath::RadToDeg()*v_phi);\r
       chargeVector[4]->push_back(v_p[0]);\r
       chargeVector[5]->push_back(v_p[1]);\r
       chargeVector[6]->push_back(v_p[2]);\r
@@ -489,7 +611,7 @@ void AliAnalysisTaskToyModel::Run(Int_t nEvents) {
        chargeVectorShuffle[0]->push_back(v_charge);\r
        chargeVectorShuffle[1]->push_back(v_y);\r
        chargeVectorShuffle[2]->push_back(v_eta);\r
-       chargeVectorShuffle[3]->push_back(v_phi);\r
+       chargeVectorShuffle[3]->push_back(TMath::RadToDeg()*v_phi);\r
        chargeVectorShuffle[4]->push_back(v_p[0]);\r
        chargeVectorShuffle[5]->push_back(v_p[1]);\r
        chargeVectorShuffle[6]->push_back(v_p[2]);\r
@@ -497,15 +619,164 @@ void AliAnalysisTaskToyModel::Run(Int_t nEvents) {
        chargeVectorShuffle[8]->push_back(v_E);\r
       }\r
       gNumberOfAcceptedParticles += 1;\r
+    }//generated negative particle loop\r
+   \r
+    //Dynamical correlations\r
+    Double_t v_chargePrime;\r
+    Double_t v_yPrime;\r
+    Double_t v_etaPrime;\r
+    Double_t v_phiPrime;\r
+    Double_t v_pPrime[3];\r
+    Double_t v_ptPrime;\r
+    Double_t v_EPrime;\r
+    Int_t nGeneratedPositiveDynamicalCorrelations = 0;\r
+    Int_t nGeneratedNegativeDynamicalCorrelations = 0;\r
+    //Generate "correlated" particles \r
+    if(fUseDynamicalCorrelations) {\r
+      Int_t gNumberOfDynamicalCorrelations = (Int_t)(0.5*gNumberOfAcceptedParticles*fDynamicalCorrelationsPercentage);\r
+      for(Int_t iDynamicalCorrelations = 0; iDynamicalCorrelations < gNumberOfDynamicalCorrelations; iDynamicalCorrelations++) {\r
+       isPion = kFALSE; isKaon = kFALSE; isProton = kFALSE;\r
+       \r
+       //Pseudo-rapidity sampled from a Gaussian centered @ 0\r
+       v_eta = gRandom->Gaus(0.0,0.1);\r
+       v_charge = 1.0;\r
+       nGeneratedPositiveDynamicalCorrelations += 1;\r
+       \r
+       v_etaPrime = -v_eta;\r
+       v_chargePrime = -1.0;\r
+       nGeneratedNegativeDynamicalCorrelations += 1;\r
+         \r
+       //Acceptance\r
+       if((v_eta < fEtaMin) || (v_eta > fEtaMax)) continue;\r
+       if((v_etaPrime < fEtaMin) || (v_etaPrime > fEtaMax)) continue;\r
       \r
-    }//generated particle loop\r
-    \r
+       if(!fUseAllCharges) {\r
+         //Decide the specie\r
+         Double_t randomNumberSpecies = gRandom->Rndm();\r
+         if((randomNumberSpecies >= 0.0)&&(randomNumberSpecies < fPionPercentage)) {\r
+           nGeneratedPions += 1;\r
+           v_pt = fPtSpectraPions->GetRandom();\r
+           v_phi = fAzimuthalAnglePions->GetRandom();\r
+           fParticleMass = fPionMass;\r
+           isPion = kTRUE;\r
+         }\r
+         else if((randomNumberSpecies >= fPionPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage)) {\r
+           nGeneratedKaons += 1;\r
+           v_pt = fPtSpectraKaons->GetRandom();\r
+           v_phi = fAzimuthalAngleKaons->GetRandom();\r
+           fParticleMass = fKaonMass;\r
+           isKaon = kTRUE;\r
+         }\r
+         else if((randomNumberSpecies >= fPionPercentage + fKaonPercentage)&&(randomNumberSpecies < fPionPercentage + fKaonPercentage + fProtonPercentage)) {\r
+           nGeneratedProtons += 1;\r
+           v_pt = fPtSpectraProtons->GetRandom();\r
+           v_ptPrime = v_pt;\r
+           v_phi = fAzimuthalAngleProtons->GetRandom();\r
+           fParticleMass = fProtonMass;\r
+           isProton = kTRUE;\r
+         }\r
+       }\r
+       else {\r
+         v_pt = fPtSpectraAllCharges->GetRandom();\r
+         v_phi = fAzimuthalAngleAllCharges->GetRandom();\r
+       }\r
+       v_ptPrime = v_pt;\r
+       v_phiPrime = v_phi;\r
+\r
+       v_p[0] = v_pt*TMath::Cos(v_phi);\r
+       v_p[1] = v_pt*TMath::Sin(v_phi);\r
+       v_p[2] = v_pt*TMath::SinH(v_eta);\r
+       v_E = TMath::Sqrt(TMath::Power(fParticleMass,2) +\r
+                         TMath::Power(v_p[0],2) +\r
+                         TMath::Power(v_p[1],2) +\r
+                         TMath::Power(v_p[2],2));\r
+       \r
+       v_y = 0.5*TMath::Log((v_E + v_p[2])/(v_E - v_p[2]));\r
+\r
+       v_pPrime[0] = v_ptPrime*TMath::Cos(v_phiPrime);\r
+       v_pPrime[1] = v_ptPrime*TMath::Sin(v_phiPrime);\r
+       v_pPrime[2] = v_ptPrime*TMath::SinH(v_etaPrime);\r
+       v_EPrime = TMath::Sqrt(TMath::Power(fParticleMass,2) +\r
+                         TMath::Power(v_pPrime[0],2) +\r
+                         TMath::Power(v_pPrime[1],2) +\r
+                         TMath::Power(v_pPrime[2],2));\r
+       \r
+       v_yPrime = 0.5*TMath::Log((v_EPrime + v_pPrime[2])/(v_EPrime - v_pPrime[2]));\r
+      \r
+       //pt coverage\r
+       if((v_pt < fPtMin) || (v_pt > fPtMax)) continue;\r
+       if((v_ptPrime < fPtMin) || (v_ptPrime > fPtMax)) continue;\r
+\r
+       //acceptance filter\r
+       if(fUseAcceptanceParameterization) {\r
+         Double_t gRandomNumberForAcceptance = gRandom->Rndm();\r
+         if(gRandomNumberForAcceptance > fAcceptanceParameterization->Eval(v_pt)) \r
+           continue;\r
+         \r
+         Double_t gRandomNumberForAcceptancePrime = gRandom->Rndm();\r
+         if(gRandomNumberForAcceptancePrime > fAcceptanceParameterization->Eval(v_ptPrime)) \r
+           continue;\r
+       }\r
+      \r
+       // fill charge vector (positive)\r
+       chargeVector[0]->push_back(v_charge);\r
+       chargeVector[1]->push_back(v_y);\r
+       chargeVector[2]->push_back(v_eta);\r
+       chargeVector[3]->push_back(TMath::RadToDeg()*v_phi);\r
+       chargeVector[4]->push_back(v_p[0]);\r
+       chargeVector[5]->push_back(v_p[1]);\r
+       chargeVector[6]->push_back(v_p[2]);\r
+       chargeVector[7]->push_back(v_pt);\r
+       chargeVector[8]->push_back(v_E);\r
+       \r
+       if(fRunShuffling) {\r
+         chargeVectorShuffle[0]->push_back(v_charge);\r
+         chargeVectorShuffle[1]->push_back(v_y);\r
+         chargeVectorShuffle[2]->push_back(v_eta);\r
+         chargeVectorShuffle[3]->push_back(TMath::RadToDeg()*v_phi);\r
+         chargeVectorShuffle[4]->push_back(v_p[0]);\r
+         chargeVectorShuffle[5]->push_back(v_p[1]);\r
+         chargeVectorShuffle[6]->push_back(v_p[2]);\r
+         chargeVectorShuffle[7]->push_back(v_pt);\r
+         chargeVectorShuffle[8]->push_back(v_E);\r
+       }\r
+\r
+       // fill charge vector (negative)\r
+       chargeVector[0]->push_back(v_chargePrime);\r
+       chargeVector[1]->push_back(v_yPrime);\r
+       chargeVector[2]->push_back(v_etaPrime);\r
+       chargeVector[3]->push_back(TMath::RadToDeg()*v_phiPrime);\r
+       chargeVector[4]->push_back(v_pPrime[0]);\r
+       chargeVector[5]->push_back(v_pPrime[1]);\r
+       chargeVector[6]->push_back(v_pPrime[2]);\r
+       chargeVector[7]->push_back(v_ptPrime);\r
+       chargeVector[8]->push_back(v_EPrime);\r
+       \r
+       if(fRunShuffling) {\r
+         chargeVectorShuffle[0]->push_back(v_chargePrime);\r
+         chargeVectorShuffle[1]->push_back(v_yPrime);\r
+         chargeVectorShuffle[2]->push_back(v_etaPrime);\r
+         chargeVectorShuffle[3]->push_back(TMath::RadToDeg()*v_phiPrime);\r
+         chargeVectorShuffle[4]->push_back(v_pPrime[0]);\r
+         chargeVectorShuffle[5]->push_back(v_pPrime[1]);\r
+         chargeVectorShuffle[6]->push_back(v_pPrime[2]);\r
+         chargeVectorShuffle[7]->push_back(v_ptPrime);\r
+         chargeVectorShuffle[8]->push_back(v_EPrime);\r
+       }\r
+\r
+       gNumberOfAcceptedParticles += 2;\r
+      }//loop over the dynamical correlations\r
+    }// usage of dynamical correlations\r
+\r
     if(fUseDebug) {\r
       Printf("=======================================================");\r
       Printf("Total: %d - Total positive: %d - Total negative: %d",nMultiplicity,nGeneratedPositive,nGeneratedNegative);\r
+      Printf("Accepted positive: %d - Accepted negative: %d",gNumberOfAcceptedPositiveParticles,gNumberOfAcceptedNegativeParticles);\r
+      Printf("Correlations: %d - Correlations positive: %d - Correlations negative: %d",nGeneratedPositiveDynamicalCorrelations+nGeneratedNegativeDynamicalCorrelations,nGeneratedPositiveDynamicalCorrelations,nGeneratedNegativeDynamicalCorrelations);\r
+      Printf("Number of accepted particles: %d",gNumberOfAcceptedParticles);\r
       if(!fUseAllCharges)\r
        Printf("Pions: %lf - Kaons: %lf - Protons: %lf",1.*nGeneratedPions/nMultiplicity,1.*nGeneratedKaons/nMultiplicity,1.*nGeneratedProtons/nMultiplicity);\r
-      Printf("Calculating the balance function for %d particles",chargeVector[0]->size());\r
+      //Printf("Calculating the balance function for %d particles",chargeVector[0]->size());\r
     }\r
 \r
     fHistEventStats->Fill(4);\r
index 0348de249561643f272145aaa4187d4f4a8264ce..bb66a67379c03307d5ecdf57bf8085a6c9b08512 100755 (executable)
@@ -49,6 +49,7 @@ class AliAnalysisTaskToyModel : public TObject {
 \r
   //Acceptance filter\r
   void SetAcceptanceParameterization(TF1 *parameterization) {\r
+    fUseAcceptanceParameterization = kTRUE;\r
     fAcceptanceParameterization = parameterization;}\r
 \r
   //All charges\r
@@ -118,6 +119,12 @@ class AliAnalysisTaskToyModel : public TObject {
     fQuandrangularFlowProtons = v4;}\r
   void SetPentangularFlowForProtons(Double_t v5) {\r
     fPentangularFlowProtons = v5;}\r
+\r
+  //Dynamical correlations\r
+  void SetCorrelationPercentage(Double_t percentage) {\r
+    fUseDynamicalCorrelations = kTRUE; \r
+    fDynamicalCorrelationsPercentage = percentage;\r
+  }\r
   //============Toy model: List of setters============//\r
 \r
  private:\r
@@ -135,17 +142,14 @@ class AliAnalysisTaskToyModel : public TObject {
   TH1F *fHistReactionPlane; //reaction plane angle\r
   TH1F *fHistEtaTotal; //pseudo-rapidity (full phase space)\r
   TH1F *fHistEta; //pseudo-rapidity (acceptance)\r
-  TH1F *fHistRapidityTotal; //rapidity (full phase space)\r
   TH1F *fHistRapidity; //rapidity (acceptance)\r
   TH1F *fHistRapidityPions; //rapidity (acceptance)\r
   TH1F *fHistRapidityKaons; //rapidity (acceptance)\r
   TH1F *fHistRapidityProtons; //rapidity (acceptance)\r
-  TH1F *fHistPhiTotal; //phi (full phase space)\r
   TH1F *fHistPhi; //phi (acceptance)\r
   TH1F *fHistPhiPions; //phi (acceptance)\r
   TH1F *fHistPhiKaons; //phi (acceptance)\r
   TH1F *fHistPhiProtons; //phi (acceptance)\r
-  TH1F *fHistPtTotal; //pt (full phase space)\r
   TH1F *fHistPt; //pt (acceptance)\r
   TH1F *fHistPtPions; //pt (acceptance)\r
   TH1F *fHistPtKaons; //pt (acceptance)\r
@@ -209,6 +213,9 @@ class AliAnalysisTaskToyModel : public TObject {
   Double_t fQuandrangularFlowProtons; //quadrangular flow value\r
   Double_t fPentangularFlowProtons; //pentangular flow value\r
 \r
+  Bool_t fUseDynamicalCorrelations; //Usage of dynamical correlations\r
+  Double_t fDynamicalCorrelationsPercentage; //Percentage of correlations\r
+\r
   AliAnalysisTaskToyModel(const AliAnalysisTaskToyModel&); // not implemented\r
   AliAnalysisTaskToyModel& operator=(const AliAnalysisTaskToyModel&); // not implemented\r
   \r
index e6bed35d01a359d81be620e424b0332dc930d17a..73e4db10535e6be3e60f6006c6653b780d2b999a 100644 (file)
@@ -254,7 +254,6 @@ void AliBalance::CalculateBalance(Float_t fCentrality,vector<Double_t> **chargeV
   //Printf("(AliBalance) Number of tracks: %d",gNtrack);
 
   for(i = 0; i < gNtrack;i++){
-
       Short_t charge          = chargeVector[0]->at(i);
       Double_t rapidity       = chargeVector[1]->at(i);
       Double_t pseudorapidity = chargeVector[2]->at(i);
index f9e5c5c82aabb68819e8d1c9ba88e3bf998489d8..39a13cb8a7ec9b4aba38c00876d34ef45f895fc1 100755 (executable)
@@ -1,10 +1,10 @@
 //=========Total multiplicity=========//\r
-Double_t nTotalMultiplicityMean = 100.;\r
+Double_t nTotalMultiplicityMean = 1000.;\r
 Double_t nTotalMultiplicitySigma = 10.;\r
 \r
 //=========Net charge=========//\r
-Double_t nNetChargeMean = 0.0;\r
-Double_t nNetChargeSigma = 5.0;\r
+Double_t nNetChargeMean = 50.0;\r
+Double_t nNetChargeSigma = 3.0;\r
 \r
 //==============Particles and spectra==============//\r
 Double_t gAllChargesTemperature = 0.11; //in GeV\r
@@ -28,16 +28,26 @@ Double_t gPentangularFlow = 0.0;
 Double_t gEtaMin = -1.0;\r
 Double_t gEtaMax = 1.0;\r
 Double_t gPtMin = 0.1;\r
-Double_t gPtMax = 2.0;\r
+Double_t gPtMax = 100.0;\r
 //=========Acceptance definition=========//\r
 \r
+//=========Acceptance filter=========//\r
+Bool_t kUseAcceptanceFilter = kFALSE;\r
+const char *gAcceptanceFilterFile = "efficiencyALICE.root";\r
+//=========Acceptance filter=========//\r
+\r
+//=========Dynamical Correlations=========//\r
+Bool_t kUseDynamicalCorrelations = kFALSE;\r
+Double_t gDynamicalCorrelationsPercentage = 0.1;\r
+//=========Dynamical Correlations=========//\r
+\r
 Bool_t kUseDebug = kFALSE;\r
 \r
 // Run macro used for the toy model analysis\r
 // Author: Panos.Christakoglou@nikhef.nl\r
 \r
 //______________________________________________________________________________\r
-void runBalanceFunctionToyModel(Int_t nEvents = 10000,\r
+void runBalanceFunctionToyModel(Int_t nEvents = 10,\r
                                Bool_t kUseAllCharges = kTRUE) {\r
   TStopwatch timer;\r
   timer.Start();\r
@@ -106,6 +116,26 @@ void runBalanceFunctionToyModel(Int_t nEvents = 10000,
     toyModelAnalysis->SetPentangularFlowForProtons(gPentangularFlow);\r
   }\r
 \r
+  //Dynamical correlations\r
+  if(kUseDynamicalCorrelations) \r
+    toyModelAnalysis->SetCorrelationPercentage(gDynamicalCorrelationsPercentage);\r
+\r
+  //Acceptance filter\r
+  if(kUseAcceptanceFilter) {\r
+    TFile *gParamFile = TFile::Open(gAcceptanceFilterFile);\r
+    if((!gParamFile) || (!gParamFile->IsOpen())) {\r
+      Printf("File %s not found!!!",acceptanceFilename);\r
+      return;\r
+    }\r
+\r
+    TString gParamName;\r
+    for(Int_t iCentrality = 0; iCentrality < numberOfCentralityBins; iCentrality++) {\r
+      gParamName = "gParamCentrality0";//centrality 0-5%\r
+      TF1 *gParameterization = dynamic_cast<TF1 *>(gParamFile->Get(gParamName.Data()));\r
+    }\r
+    toyModelAnalysis->SetAcceptanceParameterization(gParameterization);\r
+  }\r
+\r
   toyModelAnalysis->Init();\r
   toyModelAnalysis->CreateOutputObjects();\r
   toyModelAnalysis->Run(nEvents);\r