]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/FLOW/AliFlowCommon/AliFlowEventSimple.cxx
modifications for subevents
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowCommon / AliFlowEventSimple.cxx
index fb34022985d1a401d60f697c9a5209ab9aef9320..1d712d1a63bfbaf344a7cdd68593f0a190533d97 100644 (file)
@@ -43,10 +43,10 @@ ClassImp(AliFlowEventSimple)
 AliFlowEventSimple::AliFlowEventSimple():
   fTrackCollection(NULL),
   fNumberOfTracks(0),
-  fEventNSelTracksIntFlow(0),
+  fEventNSelTracksRP(0),
   fMCReactionPlaneAngle(0.),
   fNumberOfTracksWrap(NULL),
-  fEventNSelTracksIntFlowWrap(NULL),
+  fEventNSelTracksRPWrap(NULL),
   fMCReactionPlaneAngleWrap(NULL)
 {
   cout << "AliFlowEventSimple: Default constructor to be used only by root for io" << endl;
@@ -57,10 +57,10 @@ AliFlowEventSimple::AliFlowEventSimple():
 AliFlowEventSimple::AliFlowEventSimple(Int_t aLenght):
   fTrackCollection(NULL),
   fNumberOfTracks(0),
-  fEventNSelTracksIntFlow(0),
+  fEventNSelTracksRP(0),
   fMCReactionPlaneAngle(0.),
   fNumberOfTracksWrap(NULL),
-  fEventNSelTracksIntFlowWrap(NULL),
+  fEventNSelTracksRPWrap(NULL),
   fMCReactionPlaneAngleWrap(NULL)
 {
   //constructor 
@@ -73,10 +73,10 @@ AliFlowEventSimple::AliFlowEventSimple(const AliFlowEventSimple& anEvent):
   TObject(),
   fTrackCollection(anEvent.fTrackCollection),
   fNumberOfTracks(anEvent.fNumberOfTracks),
-  fEventNSelTracksIntFlow(anEvent.fEventNSelTracksIntFlow),
+  fEventNSelTracksRP(anEvent.fEventNSelTracksRP),
   fMCReactionPlaneAngle(anEvent.fMCReactionPlaneAngle),
   fNumberOfTracksWrap(anEvent.fNumberOfTracksWrap),
-  fEventNSelTracksIntFlowWrap(anEvent.fEventNSelTracksIntFlowWrap),
+  fEventNSelTracksRPWrap(anEvent.fEventNSelTracksRPWrap),
   fMCReactionPlaneAngleWrap(anEvent.fMCReactionPlaneAngleWrap)
 {
   //copy constructor 
@@ -88,10 +88,10 @@ AliFlowEventSimple& AliFlowEventSimple::operator=(const AliFlowEventSimple& anEv
 {
   *fTrackCollection = *anEvent.fTrackCollection ;
   fNumberOfTracks = anEvent.fNumberOfTracks;
-  fEventNSelTracksIntFlow = anEvent.fEventNSelTracksIntFlow;
+  fEventNSelTracksRP = anEvent.fEventNSelTracksRP;
   fMCReactionPlaneAngle = anEvent.fMCReactionPlaneAngle;
   fNumberOfTracksWrap = anEvent.fNumberOfTracksWrap; 
-  fEventNSelTracksIntFlowWrap = anEvent.fEventNSelTracksIntFlowWrap;
+  fEventNSelTracksRPWrap = anEvent.fEventNSelTracksRPWrap;
   fMCReactionPlaneAngleWrap=anEvent.fMCReactionPlaneAngleWrap;
 
   return *this;
@@ -104,7 +104,7 @@ AliFlowEventSimple::~AliFlowEventSimple()
   //destructor
   if (fTrackCollection) fTrackCollection->Delete(); delete fTrackCollection;
   if (fNumberOfTracksWrap) delete fNumberOfTracksWrap;
-  if (fEventNSelTracksIntFlowWrap) delete fEventNSelTracksIntFlowWrap;
+  if (fEventNSelTracksRPWrap) delete fEventNSelTracksRPWrap;
   if (fMCReactionPlaneAngleWrap) delete fMCReactionPlaneAngleWrap;
 }
 
@@ -147,15 +147,7 @@ AliFlowVector AliFlowEventSimple::GetQ(Int_t n, TList *weightsList, Bool_t usePh
   TH1F *phiWeights = NULL;
   TH1D *ptWeights  = NULL;
   TH1D *etaWeights = NULL;
-
-  Double_t dSumOfWeightsToPower2 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 2)
-  Double_t dSumOfWeightsToPower3 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 3)
-  Double_t dSumOfWeightsToPower4 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 4)
-  Double_t dSumOfWeightsToPower5 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 5)
-  Double_t dSumOfWeightsToPower6 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 6)
-  Double_t dSumOfWeightsToPower7 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 7)
-  Double_t dSumOfWeightsToPower8 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 8) 
-
+  
   if(weightsList)
   {
    if(usePhiWeights)
@@ -189,7 +181,7 @@ AliFlowVector AliFlowEventSimple::GetQ(Int_t n, TList *weightsList, Bool_t usePh
    pTrack = (AliFlowTrackSimple*)TrackCollection()->At(i); 
    if(pTrack)
    {
-    if(pTrack->UseForIntegratedFlow()) 
+    if(pTrack->InRPSelection()) 
     {
      dPhi = pTrack->Phi();
      dPt  = pTrack->Pt();
@@ -217,46 +209,27 @@ AliFlowVector AliFlowEventSimple::GetQ(Int_t n, TList *weightsList, Bool_t usePh
     
      // weighted multiplicity:
      iUsedTracks+=wPhi*wPt*wEta;
-    
-     // weights raised to various powers are summed up:
-     dSumOfWeightsToPower2+=pow(wPhi*wPt*wEta, 2); 
-     dSumOfWeightsToPower3+=pow(wPhi*wPt*wEta, 3); 
-     dSumOfWeightsToPower4+=pow(wPhi*wPt*wEta, 4); 
-     dSumOfWeightsToPower5+=pow(wPhi*wPt*wEta, 5); 
-     dSumOfWeightsToPower6+=pow(wPhi*wPt*wEta, 6); 
-     dSumOfWeightsToPower7+=pow(wPhi*wPt*wEta, 7); 
-     dSumOfWeightsToPower8+=pow(wPhi*wPt*wEta, 8); 
-     
-    } // end of if (pTrack->UseForIntegratedFlow())
+         
+    } // end of if (pTrack->InRPSelection())
    } // end of if (pTrack)
    else {cerr << "no particle!!!"<<endl;}
   } // loop over particles
     
   vQ.Set(dQX,dQY);
   vQ.SetMult(iUsedTracks);
-  vQ.SetSumOfWeightsToPower2(dSumOfWeightsToPower2);
-  vQ.SetSumOfWeightsToPower3(dSumOfWeightsToPower3);
-  vQ.SetSumOfWeightsToPower4(dSumOfWeightsToPower4);
-  vQ.SetSumOfWeightsToPower5(dSumOfWeightsToPower5);
-  vQ.SetSumOfWeightsToPower6(dSumOfWeightsToPower6);
-  vQ.SetSumOfWeightsToPower7(dSumOfWeightsToPower7);
-  vQ.SetSumOfWeightsToPower8(dSumOfWeightsToPower8);
-
+  
   return vQ;
   
 }
 
 //-----------------------------------------------------------------------   
-AliFlowVector AliFlowEventSimple::GetQsub(Double_t etaMin, Double_t etaMax, Int_t n, TList *weightsList, Bool_t usePhiWeights, Bool_t usePtWeights, Bool_t useEtaWeights) 
+void AliFlowEventSimple::GetQsub(AliFlowVector* Qarray, Int_t n, TList *weightsList, Bool_t usePhiWeights, Bool_t usePtWeights, Bool_t useEtaWeights) 
 {
-  //for eta subevents
   
   // calculate Q-vector in harmonic n without weights (default harmonic n=2)  
   Double_t dQX = 0.;
   Double_t dQY = 0.;
-  AliFlowVector vQ;
-  vQ.Set(0.,0.);
-  
+    
   Int_t iOrder = n;
   Double_t iUsedTracks = 0;
   Double_t dPhi = 0.;
@@ -278,15 +251,7 @@ AliFlowVector AliFlowEventSimple::GetQsub(Double_t etaMin, Double_t etaMax, Int_
   TH1F *phiWeights = NULL;
   TH1D *ptWeights  = NULL;
   TH1D *etaWeights = NULL;
-
-  Double_t dSumOfWeightsToPower2 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 2)
-  Double_t dSumOfWeightsToPower3 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 3)
-  Double_t dSumOfWeightsToPower4 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 4)
-  Double_t dSumOfWeightsToPower5 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 5)
-  Double_t dSumOfWeightsToPower6 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 6)
-  Double_t dSumOfWeightsToPower7 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 7)
-  Double_t dSumOfWeightsToPower8 = 0.; // sum_{i=1}^{n} pow((wPhi*wPt*wEta)_i, 8) 
-
+  
   if(weightsList)
     {
       if(usePhiWeights)
@@ -314,66 +279,59 @@ AliFlowVector AliFlowEventSimple::GetQsub(Double_t etaMin, Double_t etaMax, Int_
    }          
   } // end of if(weightsList)
   
-  // loop over tracks    
-  for(Int_t i=0;i<fNumberOfTracks;i++)                               
-  {
-   pTrack = (AliFlowTrackSimple*)TrackCollection()->At(i); 
-   if(pTrack)
-   {
-    if(pTrack->UseForIntegratedFlow())
+  //loop over the two subevents
+  for (Int_t s=0;s<2;s++)  
     {
-     dPhi = pTrack->Phi();
-     dPt  = pTrack->Pt();
-     dEta = pTrack->Eta();
-     if (dEta>etaMin && dEta<etaMax) {
-       // determine Phi weight: (to be improved, I should here only access it + the treatment of gaps in the if statement)
-       if(phiWeights && nBinsPhi)
-        {
-          wPhi = phiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*nBinsPhi/TMath::TwoPi())));
-        }
-       // determine v'(pt) weight:    
-       if(ptWeights && dBinWidthPt)
-        {
-          wPt=ptWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-dPtMin)/dBinWidthPt))); 
-        }            
-       // determine v'(eta) weight:    
-       if(etaWeights && dBinWidthEta)
-        {
-          wEta=etaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-dEtaMin)/dBinWidthEta))); 
-        } 
-
-       // building up the weighted Q-vector:       
-       dQX += wPhi*wPt*wEta*TMath::Cos(iOrder*dPhi);
-       dQY += wPhi*wPt*wEta*TMath::Sin(iOrder*dPhi); 
-    
-       // weighted multiplicity:
-       iUsedTracks+=wPhi*wPt*wEta;
-    
-       // weights raised to various powers are summed up:
-       dSumOfWeightsToPower2+=pow(wPhi*wPt*wEta, 2); 
-       dSumOfWeightsToPower3+=pow(wPhi*wPt*wEta, 3); 
-       dSumOfWeightsToPower4+=pow(wPhi*wPt*wEta, 4); 
-       dSumOfWeightsToPower5+=pow(wPhi*wPt*wEta, 5); 
-       dSumOfWeightsToPower6+=pow(wPhi*wPt*wEta, 6); 
-       dSumOfWeightsToPower7+=pow(wPhi*wPt*wEta, 7); 
-       dSumOfWeightsToPower8+=pow(wPhi*wPt*wEta, 8); 
-     } // end of if dEta in eta range
-    } // end of if (pTrack->UseForIntegratedFlow())
-   } // end of if (pTrack)
-   else {cerr << "no particle!!!"<<endl;}
-  } // loop over particles
-    
-  vQ.Set(dQX,dQY);
-  vQ.SetMult(iUsedTracks);
-  vQ.SetSumOfWeightsToPower2(dSumOfWeightsToPower2);
-  vQ.SetSumOfWeightsToPower3(dSumOfWeightsToPower3);
-  vQ.SetSumOfWeightsToPower4(dSumOfWeightsToPower4);
-  vQ.SetSumOfWeightsToPower5(dSumOfWeightsToPower5);
-  vQ.SetSumOfWeightsToPower6(dSumOfWeightsToPower6);
-  vQ.SetSumOfWeightsToPower7(dSumOfWeightsToPower7);
-  vQ.SetSumOfWeightsToPower8(dSumOfWeightsToPower8);
-
-  return vQ;
+      // loop over tracks    
+      for(Int_t i=0;i<fNumberOfTracks;i++)                               
+       {
+         pTrack = (AliFlowTrackSimple*)TrackCollection()->At(i); 
+         if(pTrack)
+           {
+             if(pTrack->InRPSelection())
+               {
+                 if (pTrack->InSubevent(s)) {
+                   dPhi = pTrack->Phi();
+                   dPt  = pTrack->Pt();
+                   dEta = pTrack->Eta();
+                 
+                   // determine Phi weight: (to be improved, I should here only access it + the treatment of gaps in the if statement)
+                   if(phiWeights && nBinsPhi)
+                     {
+                       wPhi = phiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*nBinsPhi/TMath::TwoPi())));
+                     }
+                   // determine v'(pt) weight:    
+                   if(ptWeights && dBinWidthPt)
+                     {
+                       wPt=ptWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-dPtMin)/dBinWidthPt))); 
+                     }            
+                   // determine v'(eta) weight:    
+                   if(etaWeights && dBinWidthEta)
+                     {
+                       wEta=etaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-dEtaMin)/dBinWidthEta))); 
+                     } 
+                   
+                   // building up the weighted Q-vector:       
+                   dQX += wPhi*wPt*wEta*TMath::Cos(iOrder*dPhi);
+                   dQY += wPhi*wPt*wEta*TMath::Sin(iOrder*dPhi); 
+                   
+                   // weighted multiplicity:
+                   iUsedTracks+=wPhi*wPt*wEta;
+                                   
+                 } // end of subevent 
+               } // end of if (pTrack->InRPSelection())
+           } // end of if (pTrack)
+         else {cerr << "no particle!!!"<<endl;}
+       } // loop over particles
+      Qarray[s].Set(dQX,dQY);
+      Qarray[s].SetMult(iUsedTracks);
+      //reset
+      iUsedTracks = 0;
+      dQX = 0.;
+      dQY = 0.;
+    }
+  
+  //return vQ;
   
 }
 
@@ -385,7 +343,7 @@ void AliFlowEventSimple::Print(Option_t *option) const
   //             ===============================================
   //   printf( "TH1.Print Name  = %s, Entries= %d, Total sum= %g\n",GetName(),Int_t(fEntries),GetSumOfWeights());
   printf( "Class.Print Name = %s, Total number of tracks= %d, Number of selected tracks= %d, MC EventPlaneAngle= %f",
-         GetName(),fNumberOfTracks, fEventNSelTracksIntFlow, fMCReactionPlaneAngle );
+         GetName(),fNumberOfTracks, fEventNSelTracksRP, fMCReactionPlaneAngle );
 
   if (fTrackCollection) {  
     fTrackCollection->Print(option);
@@ -403,9 +361,9 @@ void AliFlowEventSimple::Print(Option_t *option) const
     fNumberOfTracksWrap = new TParameter<int>("fNumberOfTracks", fNumberOfTracks);
     b->Add(fNumberOfTracksWrap);
   }
-  if (!fEventNSelTracksIntFlowWrap) {
-    fEventNSelTracksIntFlowWrap = new TParameter<int>("fEventNSelTracksIntFlow", fEventNSelTracksIntFlow);
-    b->Add(fEventNSelTracksIntFlowWrap);
+  if (!fEventNSelTracksRPWrap) {
+    fEventNSelTracksRPWrap = new TParameter<int>("fEventNSelTracksRP", fEventNSelTracksRP);
+    b->Add(fEventNSelTracksRPWrap);
   }
   if (!fMCReactionPlaneAngleWrap) {
     fMCReactionPlaneAngleWrap = new TParameter<double>(" fMCReactionPlaneAngle",  fMCReactionPlaneAngle);