]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Modify AliFidutialCut to try to fix memory leak
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 25 Oct 2009 18:22:15 +0000 (18:22 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 25 Oct 2009 18:22:15 +0000 (18:22 +0000)
PWG4/PartCorrBase/AliAnaPartCorrMaker.cxx
PWG4/PartCorrBase/AliCaloTrackMCReader.cxx
PWG4/PartCorrBase/AliFidutialCut.cxx
PWG4/PartCorrBase/AliFidutialCut.h

index b073ce5a15023454c787f2824a9a3392f1ae0f2a..3365836b4f593f3c900f07277ab08693e7ab140f 100755 (executable)
@@ -30,6 +30,7 @@
 #include "TList.h"
 #include "TH1.h"
 //#include "Riostream.h"
+#include <TObjectTable.h>
 
 //---- AliRoot system ---- 
 #include "AliAnaPartCorrBaseClass.h" 
@@ -242,7 +243,8 @@ void AliAnaPartCorrMaker::ProcessEvent(const Int_t iEntry, const char * currentF
          printf("*** Skip event *** %d \n",iEntry);
          return ;
   }
-  
+  printf(">>>>>>>>>> BEFORE >>>>>>>>>>>\n");
+  gObjectTable->Print();
   //Loop on analysis algorithms
   if(fAnaDebug > 0 ) printf("*** Begin analysis *** \n");
   Int_t nana = fAnalysisContainer->GetEntries() ;
@@ -258,6 +260,9 @@ void AliAnaPartCorrMaker::ProcessEvent(const Int_t iEntry, const char * currentF
   
   fReader->ResetLists();
   
+  printf(">>>>>>>>>> AFTER >>>>>>>>>>>\n");
+  gObjectTable->Print();
+       
   if(fAnaDebug > 0 ) printf("*** End analysis *** \n");
   
 }
index 6eb5c675c39f696d02e20ca5c5b57c8d941d183a..8419f7ff6a38739c12c96da617d6eb6b72b85cfe 100755 (executable)
@@ -193,7 +193,10 @@ void  AliCaloTrackMCReader::FillCalorimeters(Int_t & iParticle, TParticle* parti
                                             Int_t &ncalo) {
   //Fill AODCaloClusters or TParticles lists of PHOS or EMCAL
   //In PHOS
-  if(fFillPHOS && fFidutialCut->IsInFidutialCut(momentum,"PHOS") && momentum.Pt() > fPHOSPtMin){
+  if(fFillPHOS && momentum.Pt() > fPHOSPtMin){
+         
+       if(!fFidutialCut->IsInFidutialCut(momentum,"PHOS")) return;
+         
     Int_t index = iParticle ;
     Int_t pdg = TMath::Abs(particle->GetPdgCode());
     if(fCheckOverlap) 
@@ -214,7 +217,10 @@ void  AliCaloTrackMCReader::FillCalorimeters(Int_t & iParticle, TParticle* parti
   }
   
   //In EMCAL
-  if(fFillEMCAL && fFidutialCut->IsInFidutialCut(momentum,"EMCAL") && momentum.Pt() > fEMCALPtMin){
+  if(fFillEMCAL  && momentum.Pt() > fEMCALPtMin){
+         
+       if(!fFidutialCut->IsInFidutialCut(momentum,"EMCAL")) return;
+         
     Int_t index = iParticle ;
     Int_t pdg = TMath::Abs(particle->GetPdgCode());
     //Int_t pdgorg=pdg;
@@ -269,9 +275,12 @@ Bool_t AliCaloTrackMCReader::FillInputEvent(const Int_t iEntry, const char * cur
       charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
       particle->Momentum(momentum);
       //---------- Charged particles ----------------------
-      if((charge != 0) && (momentum.Pt() > fCTSPtMin) && (fFidutialCut->IsInFidutialCut(momentum,"CTS"))){
-       if(fFillCTS){
+      if(charge != 0){
+                if(fFillCTS && (momentum.Pt() > fCTSPtMin)){
          //Particles in CTS acceptance
+               
+         if(!fFidutialCut->IsInFidutialCut(momentum,"CTS")) continue;
+               
          if(fDebug > 3 && momentum.Pt() > 0.2)
            printf("AliCaloTrackMCReader::FillInputEvent() - CTS : Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n",
                   momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta());
index d99b9430d44cff301deb7d3535d966beb29d4705..eb6fba09347546884fd8c34eb352661134f59df0 100755 (executable)
 //_________________________________________________________________________
 // Class for track/cluster acceptance selection
 // Selection in Central barrel, EMCAL and PHOS
-//                
+//  
+// Several selection regions possible for the different
+// detectors
+//
 //*-- Author: Gustavo Conesa (LNF-INFN) 
 //////////////////////////////////////////////////////////////////////////////
 
@@ -27,7 +30,7 @@
 #include <TLorentzVector.h>
 #include <TString.h>
 //#include <TArrayF.h>
-  
+
 //---- ANALYSIS system ----
 #include "AliFidutialCut.h"
 
@@ -122,91 +125,65 @@ AliFidutialCut::~AliFidutialCut() {
 
 
 //_______________________________________________________________
-Bool_t AliFidutialCut::IsInFidutialCut(TLorentzVector momentum, TString det) const
+Bool_t AliFidutialCut::IsInFidutialCut(const TLorentzVector momentum, const TString det) const
 {
   //Selects EMCAL or PHOS cluster or CTS track if it is inside eta-phi defined regions
 
-  Double_t phi = momentum.Phi();
-  if(phi<0) phi+=TMath::TwoPi() ;
-  Double_t eta =  momentum.Eta();
-  //printf("IsInFidutialCut::Det: %s, phi = %f, eta = %f\n", det.Data(),phi*TMath::RadToDeg(), eta);
-
-  Float_t * maxeta = new Float_t;
-  Float_t * maxphi = new Float_t;
-  Float_t * mineta = new Float_t;
-  Float_t * minphi = new Float_t;
-  Int_t nphiregions = 0;
-  Int_t netaregions = 0;
-  Bool_t selection = kFALSE;
-
   if(det == "CTS"){
-    netaregions =  fCTSFidCutMaxEta->GetSize();
-    nphiregions =  fCTSFidCutMaxPhi->GetSize();
-    if(netaregions !=  fCTSFidCutMinEta->GetSize() || nphiregions !=  fCTSFidCutMinPhi->GetSize())
-      printf("AliFidutialCut::IsInFidutialCut() - Wrong number of CTS fidutial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d\n",
-                   netaregions, fCTSFidCutMinEta->GetSize(),  nphiregions, fCTSFidCutMinPhi->GetSize());
-    
-    maxeta = fCTSFidCutMaxEta->GetArray();
-    maxphi = fCTSFidCutMaxPhi->GetArray();
-    mineta = fCTSFidCutMinEta->GetArray();
-    minphi = fCTSFidCutMinPhi->GetArray();
-    selection =  fCTSFidutialCut ; 
+         if(!fCTSFidutialCut)  return kTRUE; //Fidutial cut not requested, accept all tracks  
+         else return CheckFidutialRegion(momentum, fCTSFidCutMinPhi  , fCTSFidCutMaxPhi , fCTSFidCutMinEta  , fCTSFidCutMaxEta  );
   }
-  else   if(det == "EMCAL"){
-    netaregions =  fEMCALFidCutMaxEta->GetSize();
-    nphiregions =  fEMCALFidCutMaxPhi->GetSize();
-    if(netaregions !=  fEMCALFidCutMinEta->GetSize() || nphiregions !=  fEMCALFidCutMinPhi->GetSize())
-      printf("AliFidutialCut::IsInFidutialCut() - Wrong number of EMCAL fidutial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d\n",
-                   netaregions, fEMCALFidCutMinEta->GetSize(),  nphiregions, fEMCALFidCutMinPhi->GetSize());
-    
-    maxeta = fEMCALFidCutMaxEta->GetArray();
-    maxphi = fEMCALFidCutMaxPhi->GetArray();
-    mineta = fEMCALFidCutMinEta->GetArray();
-    minphi = fEMCALFidCutMinPhi->GetArray();
-    selection =  fEMCALFidutialCut ; 
+  else   if(det == "EMCAL") {
+         if(!fEMCALFidutialCut) return kTRUE; //Fidutial cut not requested, accept all clusters  
+         else return CheckFidutialRegion(momentum, fEMCALFidCutMinPhi, fEMCALFidCutMaxPhi, fEMCALFidCutMinEta, fEMCALFidCutMaxEta);
   }
-  else   if(det == "PHOS"){
-    netaregions =  fPHOSFidCutMaxEta->GetSize();
-    nphiregions =  fPHOSFidCutMaxPhi->GetSize();
-    if(netaregions !=  fPHOSFidCutMinEta->GetSize() || nphiregions !=  fPHOSFidCutMinPhi->GetSize())
-      printf("AliFidutialCut::IsInFidutialCut() - Wrong number of PHOS fidutial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d\n",
-                   netaregions, fPHOSFidCutMinEta->GetSize(),  nphiregions, fPHOSFidCutMinPhi->GetSize());
-    
-    maxeta = fPHOSFidCutMaxEta->GetArray();
-    maxphi = fPHOSFidCutMaxPhi->GetArray();
-    mineta = fPHOSFidCutMinEta->GetArray();
-    minphi = fPHOSFidCutMinPhi->GetArray();
-    selection =  fPHOSFidutialCut ; 
+  else   if(det == "PHOS")  {
+         if(!fPHOSFidutialCut) return kTRUE; //Fidutial cut not requested, accept all clusters 
+         else return CheckFidutialRegion(momentum, fPHOSFidCutMinPhi , fPHOSFidCutMaxPhi , fPHOSFidCutMinEta , fPHOSFidCutMaxEta );
+  }
+  else{
+         printf("AliFidutialCut::IsInFidutialCut() - Wrong detector name = %s\n", det.Data());
+         return kFALSE;
   }
-  else
-    printf("AliFidutialCut::IsInFidutialCut() - Wrong detector name = %s\n", det.Data());
 
-  //printf("IsInFidutialCut::nphiregions = %d, netaregions = %d\n",nphiregions, netaregions);
+}
 
-  if(!selection) return kTRUE; //No cuts applied, all tracks/clusters used
+//_______________________________________________________________
+Bool_t AliFidutialCut::CheckFidutialRegion(const TLorentzVector momentum, const TArrayF* minphi, const TArrayF* maxphi, const TArrayF* mineta, const TArrayF* maxeta) const {
+  //Given the selection regions in Eta and Phi, check if particle is in this region.
 
-  //Eta fidutial cut
-  Bool_t bInEtaFidCut = kFALSE;
-  for(Int_t ieta = 0; ieta < netaregions; ieta++)
-    if(eta > mineta[ieta] && eta < maxeta[ieta]) bInEtaFidCut = kTRUE;
+    Double_t phi = momentum.Phi();
+       if(phi < 0) phi+=TMath::TwoPi() ;
+       Double_t eta =  momentum.Eta();
+       //printf("IsInFidutialCut::Det: %s, phi = %f, eta = %f\n", det.Data(),phi*TMath::RadToDeg(), eta);
 
-  if(bInEtaFidCut){
-    //printf("Eta cut passed\n");
-    //Phi fidutial cut
-    Bool_t bInPhiFidCut = kFALSE;
-    for(Int_t iphi = 0; iphi < nphiregions; iphi++)
-      if(phi > minphi[iphi] *TMath::DegToRad()&& phi < maxphi[iphi]*TMath::DegToRad()) bInPhiFidCut = kTRUE ;
-    
-    if(bInPhiFidCut) {
-      //printf("IsInFidutialCut:: %s cluster/track accepted\n",det.Data());
-      return kTRUE;
-    }
-    else return kFALSE;
+       Int_t netaregions =  fCTSFidCutMaxEta->GetSize();
+    Int_t nphiregions =  fCTSFidCutMaxPhi->GetSize();
+    if(netaregions !=  mineta->GetSize() || nphiregions !=  minphi->GetSize())
+               printf("AliFidutialCut::IsInFidutialCut() - Wrong number of fidutial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d\n",
+                          netaregions, mineta->GetSize(),  nphiregions, minphi->GetSize());
+       
+       //Eta fidutial cut
+       Bool_t bInEtaFidCut = kFALSE;
+       for(Int_t ieta = 0; ieta < netaregions; ieta++)
+               if(eta > mineta->GetAt(ieta) && eta < maxeta->GetAt(ieta)) bInEtaFidCut = kTRUE;
+
+       if(bInEtaFidCut){
+               //printf("Eta cut passed\n");
+               //Phi fidutial cut
+               Bool_t bInPhiFidCut = kFALSE;
+               for(Int_t iphi = 0; iphi < nphiregions; iphi++)
+                       if(phi > minphi->GetAt(iphi) *TMath::DegToRad()&& phi < maxphi->GetAt(iphi)*TMath::DegToRad()) bInPhiFidCut = kTRUE ;
+         
+               if(bInPhiFidCut) {
+                       //printf("IsInFidutialCut:: %s cluster/track accepted\n",det.Data());
+                       return kTRUE;
+               }
+               else return kFALSE;
     
-  }//In eta fid cut
-  else
+       }//In eta fid cut
+       else
     return kFALSE;
-  
 }
 
 
index da2719a502e611f08aa5d614363264040c9fb27c..b2ec4fe924daccae95597a9041156a936d35cf47 100755 (executable)
@@ -7,6 +7,9 @@
 //_________________________________________________________________________
 // Class for track/cluster acceptance selection
 // Selection in Central barrel, EMCAL and PHOS
+//  
+// Several selection regions possible for the different
+// detectors
 //
 //*-- Author: Gustavo Conesa (INFN-LNF)
 
@@ -32,8 +35,8 @@ public:
   void InitParameters();
   
   void Print(const Option_t * opt)const;
-  
-  Bool_t IsInFidutialCut(TLorentzVector l, TString det) const ;
+  Bool_t CheckFidutialRegion(const TLorentzVector lv, const TArrayF* minphi, const TArrayF* maxphi, const TArrayF* mineta, const TArrayF* maxeta) const ;
+  Bool_t IsInFidutialCut    (const TLorentzVector lv, const TString det) const ;
   
   void DoCTSFidutialCut(Bool_t b) {fCTSFidutialCut = b; }
   void DoEMCALFidutialCut(Bool_t b) {fEMCALFidutialCut = b; }