]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG/FLOW/Tasks/AliFlowTrackCuts.cxx
unfolding bugfixes and updates
[u/mrichter/AliRoot.git] / PWG / FLOW / Tasks / AliFlowTrackCuts.cxx
index 9da0c2d1ed0919b328dd22bbaebe2a54dd221c01..8d976c56893a94dfce32482e1e1325496b7db93e 100644 (file)
@@ -368,10 +368,9 @@ AliFlowTrackCuts& AliFlowTrackCuts::operator=(const AliFlowTrackCuts& that)
   if (!that.fAliESDtrackCuts) delete fAliESDtrackCuts; fAliESDtrackCuts=NULL;
 
   if ( that.fMuonTrackCuts &&  fMuonTrackCuts) *fMuonTrackCuts = *(that.fMuonTrackCuts);                   // XZhang 20120604
-  if ( that.fMuonTrackCuts && !fMuonTrackCuts)  fMuonTrackCuts = new AliMuonTrackCuts(*(fMuonTrackCuts));  // XZhang 20120604
+  if ( that.fMuonTrackCuts && !fMuonTrackCuts)  fMuonTrackCuts = new AliMuonTrackCuts(*(that.fMuonTrackCuts));  // XZhang 20120604
   if (!that.fMuonTrackCuts) delete fMuonTrackCuts; fMuonTrackCuts = NULL;                                  // XZhang 20120604
   if (!that.fV0gainEqualization) delete fV0gainEqualization; fV0gainEqualization = NULL;
-
   //these guys we don't need to copy, just reinit
   if (that.fQA) {fQA->Delete(); delete fQA; fQA=NULL; DefineHistograms();} 
   fCutMC=that.fCutMC;
@@ -448,8 +447,12 @@ AliFlowTrackCuts& AliFlowTrackCuts::operator=(const AliFlowTrackCuts& that)
   
   fApplyRecentering = that.fApplyRecentering;
   fV0gainEqualizationPerRing = that.fV0gainEqualizationPerRing;
+#if ROOT_VERSION_CODE < ROOT_VERSION(5,99,0)           
   if (that.fV0gainEqualization) fV0gainEqualization = new TH1(*(that.fV0gainEqualization));
-
+#else
+  //PH Lets try Clone, however the result might be wrong
+  if (that.fV0gainEqualization) fV0gainEqualization = (TH1*)that.fV0gainEqualization->Clone();
+#endif
   for(Int_t i(0); i < 4; i++) { // no use to copy these guys since they're only initialized on worked node
       fV0Apol[i] = that.fV0Apol[i];
       fV0Cpol[i] = that.fV0Cpol[i];
@@ -1185,21 +1188,58 @@ Int_t AliFlowTrackCuts::Count(AliVEvent* event)
 
 //-----------------------------------------------------------------------
 AliFlowTrackCuts* AliFlowTrackCuts::GetStandardVZEROOnlyTrackCuts()
+{
+  //returns the lhc10h vzero track cuts, this function
+  //is left here for backward compatibility
+  //if a run is recognized as 11h, the calibration method will
+  //switch to 11h calbiration, which means that the cut 
+  //object is updated but not replaced.
+  //calibratin is only available for PbPb runs
+  return GetStandardVZEROOnlyTrackCuts2010();
+}
+//-----------------------------------------------------------------------
+AliFlowTrackCuts* AliFlowTrackCuts::GetStandardVZEROOnlyTrackCuts2010()
 {
   //get standard V0 cuts
-  AliFlowTrackCuts* cuts = new AliFlowTrackCuts("standard vzero flow cuts");
+  AliFlowTrackCuts* cuts = new AliFlowTrackCuts("standard vzero flow cuts 2010");
   cuts->SetParamType(kV0);
   cuts->SetEtaRange( -10, +10 );
   cuts->SetPhiMin( 0 );
   cuts->SetPhiMax( TMath::TwoPi() );
   // options for the reweighting
   cuts->SetV0gainEqualizationPerRing(kFALSE);
-  cuts->SetApplyRecentering(kFALSE);
+  cuts->SetApplyRecentering(kTRUE);
   // to exclude a ring , do e.g.
-//   cuts->SetUseVZERORing(7, kFALSE);
+  // cuts->SetUseVZERORing(7, kFALSE);
+  return cuts;
+}
+//-----------------------------------------------------------------------
+AliFlowTrackCuts* AliFlowTrackCuts::GetStandardVZEROOnlyTrackCuts2011()
+{
+  //get standard V0 cuts for 2011 data
+  //in this case, the vzero segments will be weighted by
+  //VZEROEqMultiplicity, 
+  //if recentering is enableded, the sub-q vectors
+  //will be taken from the event header, so make sure to run 
+  //the VZERO event plane selection task before this task !
+  //recentering replaces the already evaluated q-vectors, so 
+  //when chosen, additional settings (e.g. excluding rings) 
+  //have no effect. recentering is true by default
+  //
+  //NOTE user is responsible for running the vzero event plane
+  //selection task in advance, e.g. add to your launcher macro
+  //
+  //  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskVZEROEPSelection.C");
+  //  AddTaskVZEROEPSelection();
+  //
+  AliFlowTrackCuts* cuts = new AliFlowTrackCuts("standard vzero flow cuts 2011");
+  cuts->SetParamType(kV0);
+  cuts->SetEtaRange( -10, +10 );
+  cuts->SetPhiMin( 0 );
+  cuts->SetPhiMax( TMath::TwoPi() );
+  cuts->SetApplyRecentering(kTRUE);
   return cuts;
 }
-
 //-----------------------------------------------------------------------
 AliFlowTrackCuts* AliFlowTrackCuts::GetStandardGlobalTrackCuts2010()
 {
@@ -4110,12 +4150,19 @@ Bool_t AliFlowTrackCuts::PassesV0cuts(Int_t id)
   // 10102013 weighting vzero tiles - rbertens@cern.ch
   if(!fV0gainEqualization) {
       // if for some reason the equalization is not initialized (e.g. 2011 data)
-     if(id<32) {    // v0c side
+      // the fV0xpol[] weights are used to enable or disable vzero rings
+    if(id<32) {   // v0c side
       fTrackEta = -3.45+0.5*(id/8);
-      fTrackWeight = fEvent->GetVZEROEqMultiplicity(id);
+      if(id < 8) fTrackWeight = fEvent->GetVZEROEqMultiplicity(id)*fV0Cpol[0];
+      else if (id < 16 ) fTrackWeight = fEvent->GetVZEROEqMultiplicity(id)*fV0Cpol[1];
+      else if (id < 24 ) fTrackWeight = fEvent->GetVZEROEqMultiplicity(id)*fV0Cpol[2];
+      else if (id < 32 ) fTrackWeight = fEvent->GetVZEROEqMultiplicity(id)*fV0Cpol[3];
     } else {       // v0a side
       fTrackEta = +4.8-0.6*((id/8)-4);
-      fTrackWeight = fEvent->GetVZEROEqMultiplicity(id);
+      if( id < 40) fTrackWeight = fEvent->GetVZEROEqMultiplicity(id)*fV0Apol[0];
+      else if ( id < 48 ) fTrackWeight = fEvent->GetVZEROEqMultiplicity(id)*fV0Apol[1];
+      else if ( id < 56 ) fTrackWeight = fEvent->GetVZEROEqMultiplicity(id)*fV0Apol[2];
+      else if ( id < 64 ) fTrackWeight = fEvent->GetVZEROEqMultiplicity(id)*fV0Apol[3];
     }
   } else { // the equalization is initialized
      // note that disabled rings have already been excluded on calibration level in 
@@ -4130,13 +4177,13 @@ Bool_t AliFlowTrackCuts::PassesV0cuts(Int_t id)
       fTrackEta = +4.8-0.6*((id/8)-4);
       if( id < 40) fTrackWeight = fEvent->GetVZEROData()->GetMultiplicity(id)*fV0Apol[0]/fV0gainEqualization->GetBinContent(1+id);
       else if ( id < 48 ) fTrackWeight = fEvent->GetVZEROData()->GetMultiplicity(id)*fV0Apol[1]/fV0gainEqualization->GetBinContent(1+id);
-      else if ( id < 56) fTrackWeight = fEvent->GetVZEROData()->GetMultiplicity(id)*fV0Apol[2]/fV0gainEqualization->GetBinContent(1+id);
+      else if ( id < 56 ) fTrackWeight = fEvent->GetVZEROData()->GetMultiplicity(id)*fV0Apol[2]/fV0gainEqualization->GetBinContent(1+id);
       else if ( id < 64 ) fTrackWeight = fEvent->GetVZEROData()->GetMultiplicity(id)*fV0Apol[3]/fV0gainEqualization->GetBinContent(1+id);
     }
     // printf ( " tile %i and weight %.2f \n", id, fTrackWeight);
   }
 
-  if (fLinearizeVZEROresponse)
+  if (fLinearizeVZEROresponse && id < 64)
   {
     //this is only needed in pass1 of LHC10h
     Float_t multV0[fgkNumberOfV0tracks];