corrected warnings
[u/mrichter/AliRoot.git] / CORRFW / AliCFPairAcceptanceCuts.cxx
index 3bffb45..6637965 100755 (executable)
 
 #include "AliMCParticle.h"
 #include "AliCFPairAcceptanceCuts.h"
-#include "AliMCEventHandler.h"
 #include "AliMCEvent.h"
+#include "TBits.h"
+#include "AliLog.h"
 
 ClassImp(AliCFPairAcceptanceCuts)
 
 //______________________________
 AliCFPairAcceptanceCuts::AliCFPairAcceptanceCuts() : 
-  AliCFCutBase()
+  AliCFCutBase(),
+  fMCInfo(0x0),
+  fCutNeg(new AliCFAcceptanceCuts()),
+  fCutPos(new AliCFAcceptanceCuts()),
+  fBitmap(new TBits(0))
 {
   //
-  //ctor
+  //Default Constructor
   //
-  fCutNeg = new AliCFAcceptanceCuts();
-  fCutPos = new AliCFAcceptanceCuts();
 }
 
 //______________________________
 AliCFPairAcceptanceCuts::AliCFPairAcceptanceCuts(const Char_t* name, const Char_t* title) : 
-  AliCFCutBase(name,title)
+  AliCFCutBase(name,title),
+  fMCInfo(0x0),
+  fCutNeg(new AliCFAcceptanceCuts(name,title)),
+  fCutPos(new AliCFAcceptanceCuts(name,title)),
+  fBitmap(new TBits(0))
 {
   //
-  //ctor
+  //Named Constructor
   //
-  fCutNeg = new AliCFAcceptanceCuts(name,title);
-  fCutPos = new AliCFAcceptanceCuts(name,title);
 }
 
 //______________________________
 AliCFPairAcceptanceCuts::AliCFPairAcceptanceCuts(const AliCFPairAcceptanceCuts& c) : 
   AliCFCutBase(c),
+  fMCInfo(c.fMCInfo),
   fCutNeg(c.fCutNeg),
-  fCutPos(c.fCutPos)
+  fCutPos(c.fCutPos),
+  fBitmap(c.fBitmap)
 {
   //
-  //copy ctor
+  //Copy Constructor
   //
 }
 
@@ -69,56 +76,91 @@ AliCFPairAcceptanceCuts& AliCFPairAcceptanceCuts::operator=(const AliCFPairAccep
   //
   if (this != &c) {
     AliCFCutBase::operator=(c) ;
+    fMCInfo = c.fMCInfo ;
     fCutNeg = c.fCutNeg ;
     fCutPos = c.fCutPos ;
+    fBitmap = c.fBitmap ;
   }
   return *this ;
 }
 
-//______________________________
+//__________________________________________________________
 Bool_t AliCFPairAcceptanceCuts::IsSelected(TObject* obj) {
   //
   // checks the number of track references associated to 'obj'
   // 'obj' must be an AliMCParticle
   //
+  //
+  // check if selections on 'obj' are passed
+  // 'obj' must be an AliMCParticle
+  //
+  
+  SelectionBitMap(obj);
+
+  //   if (fIsQAOn) FillHistograms(obj,kFALSE);
+  Bool_t isSelected = kTRUE;
+
+  for (UInt_t icut=0; icut<fBitmap->GetNbits(); icut++) {
+    if (!fBitmap->TestBitNumber(icut)) {
+      isSelected = kFALSE;
+      break;
+    }
+  }  
+
+  if (!isSelected) return kFALSE ;
+  //   if (fIsQAOn) FillHistograms(obj,kTRUE);
+  return kTRUE;
+}
+
+//__________________________________________________________
+void AliCFPairAcceptanceCuts::SelectionBitMap(TObject* obj) 
+{
+  //
+  // test if the track passes the single cuts
+  // and store the information in a bitmap
+  //
+
+  for (UInt_t i=0; i<kNCuts; i++) fBitmap->SetBitNumber(i,kFALSE);
 
-  if (!obj) return kFALSE ;
+  if (!obj) return;
   TString className(obj->ClassName());
   if (className.CompareTo("AliMCParticle") != 0) {
-    Error("IsSelected","obj must point to a AliMCParticle !");
-    return kFALSE ;
+    AliError("obj must point to an AliMCParticle !");
+    return ;
   }
 
-  TParticle* part = ((AliMCParticle*)obj)->Particle() ;
-  if (!part || part->GetNDaughters()!=2) return kFALSE ;
+  TParticle* part = (dynamic_cast<AliMCParticle*>(obj))->Particle() ;
+  if (!part || part->GetNDaughters() !=2) return ;
+
   Int_t lab0 = part->GetDaughter(0);
   Int_t lab1 = part->GetDaughter(1);
-  
-  AliMCParticle* negDaughter = fMCInfo->MCEvent()->GetTrack(lab0) ;
-  AliMCParticle* posDaughter = fMCInfo->MCEvent()->GetTrack(lab1) ;
+  AliMCParticle* negDaughter =  (AliMCParticle*) fMCInfo->GetTrack(lab0) ;
+  AliMCParticle* posDaughter =  (AliMCParticle*) fMCInfo->GetTrack(lab1) ;
 
-  if (!fCutNeg->IsSelected(negDaughter)) return kFALSE;
-  if (!fCutPos->IsSelected(posDaughter)) return kFALSE; 
+  Int_t iCutBit = 0;
 
-  return kTRUE ;
+  if (fCutNeg->IsSelected(negDaughter)) fBitmap->SetBitNumber(iCutBit,kTRUE);
+  iCutBit++;
+  
+  if (fCutPos->IsSelected(posDaughter)) fBitmap->SetBitNumber(iCutBit,kTRUE);
 }
 
 //______________________________
-void AliCFPairAcceptanceCuts::SetEvtInfo(TObject* mcInfo) {
+void AliCFPairAcceptanceCuts::SetMCEventInfo(const TObject* mcInfo) {
   //
-  // Sets pointer to MC event information (AliMCEventHandler)
+  // Sets pointer to MC event information (AliMCEvent)
   //
 
   if (!mcInfo) {
-    Error("SetEvtInfo","Pointer to MC Event Handler is null !");
+    Error("SetMCEventInfo","Pointer to MC Event is null !");
     return;
   }
   
   TString className(mcInfo->ClassName());
-  if (className.CompareTo("AliMCEventHandler") != 0) {
-    Error("SetEvtInfo","argument must point to an AliMCEventHandler !");
+  if (className.CompareTo("AliMCEvent") != 0) {
+    Error("SetMCEventInfo","argument must point to an AliMCEvent !");
     return ;
   }
   
-  fMCInfo = (AliMCEventHandler*) mcInfo ;
+  fMCInfo = (AliMCEvent*) mcInfo ;
 }