]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
PID information via InputHandlers and base class AliPIDResponse
authormorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Mar 2011 21:25:11 +0000 (21:25 +0000)
committermorsch <morsch@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 21 Mar 2011 21:25:11 +0000 (21:25 +0000)
Jens Wiechula

STEER/AliAODInputHandler.cxx
STEER/AliAODInputHandler.h
STEER/AliAODTrack.cxx
STEER/AliAODTrack.h
STEER/AliAODpidUtil.cxx
STEER/AliAODpidUtil.h
STEER/AliESDInputHandler.cxx
STEER/AliESDInputHandler.h
STEER/AliTRDPIDResponse.h

index 52af5cd4b8fd15990450eb69c26f0475f5241104..eddee692a5603b67b83098db29a500259075cc10 100644 (file)
@@ -31,6 +31,7 @@
 #include "AliAODEvent.h"
 #include "AliVCuts.h"
 #include "AliMCEvent.h"
+#include "AliAODpidUtil.h"
 
 ClassImp(AliAODInputHandler)
 
@@ -42,6 +43,7 @@ AliAODInputHandler::AliAODInputHandler() :
     fEvent(0),
     fMCEvent(new AliMCEvent()),
     fFriends(new TList()),
+    fAODpidUtil(0x0),
     fMergeEvents(kFALSE),
     fFriendsConnected(kFALSE),
     fFileToMerge(0),
@@ -59,6 +61,7 @@ AliAODInputHandler::AliAODInputHandler(const char* name, const char* title):
   fEvent(0),
   fMCEvent(new AliMCEvent()),
   fFriends(new TList()),
+  fAODpidUtil(0x0),
   fMergeEvents(kFALSE),
   fFriendsConnected(kFALSE),
   fFileToMerge(0),
@@ -83,6 +86,7 @@ AliAODInputHandler::~AliAODInputHandler()
     delete fHistStatistics[1];
     fHistStatistics[1] = 0;
   }
+  delete fAODpidUtil;
 }
 
 //______________________________________________________________________________
@@ -239,3 +243,14 @@ void AliAODInputHandler::ConnectFriends()
     fFriendsConnected = kTRUE;
 }
 
+//______________________________________________________________________________
+void AliAODInputHandler::CreatePIDResponse(Bool_t isMC/*=kFALSE*/)
+{
+  //
+  // create the pid response object if it does not exist yet
+  //
+  if (fAODpidUtil) return;
+  fAODpidUtil=new AliAODpidUtil(isMC);
+  
+}
+
index bb95f6b12c949a5d22c58eef740a53e0671f5388..2eaecc6d75f298303ad1d30e7bba1eb253b411ab 100644 (file)
@@ -17,6 +17,8 @@ class TList;
 class AliMCEvent;
 class TH2F;
 class AliMCEvent;
+class AliAODpidUtil;
+class AliPIDResponse;
 
 
 class AliAODInputHandler : public AliInputEventHandler {
@@ -42,6 +44,12 @@ class AliAODInputHandler : public AliInputEventHandler {
     Bool_t               GetMergeEvents() const {return fMergeEvents;}
     AliAODEvent*         GetEventToMerge() {return fAODEventToMerge;}
     void                 SetMergeOffset(Int_t ioff) {fMergeOffset = ioff;}
+  
+    //PID response
+    virtual AliPIDResponse* GetPIDResponse() {return (AliPIDResponse*)fAODpidUtil;}
+    virtual void CreatePIDResponse(Bool_t isMC=kFALSE);
+    AliAODpidUtil *GetAODpidUtil() const { return fAODpidUtil; }
+  
  private:
     void ConnectFriends();
     AliAODInputHandler(const AliAODInputHandler& handler);             
@@ -49,7 +57,9 @@ class AliAODInputHandler : public AliInputEventHandler {
  private:
     AliAODEvent    *fEvent;   //! Pointer to the event
     AliMCEvent     *fMCEvent; //! Pointer to the MCEvent
-    TList          *fFriends; //  List of friend trees 
+    TList          *fFriends; //  List of friend trees
+    AliAODpidUtil  *fAODpidUtil; //! Pointer to PID information
+  
 // Support for merged events
     Bool_t          fMergeEvents;     // Flag for event merging
     Bool_t          fFriendsConnected;// Friends are connected
index 50ab8a463db9bcb9712221fb3cbbf9f156ca4821..f2a95e73da604ed2b182507bae069dff0dc7cb44 100644 (file)
@@ -565,3 +565,58 @@ Bool_t AliAODTrack::GetPxPyPz(Double_t p[3]) const
   p[0]=Px(); p[1]=Py(); p[2]=Pz();
   return kTRUE;
 }
+
+//______________________________________________________________________________
+Float_t AliAODTrack::GetTPCClusterInfo(Int_t nNeighbours/*=3*/, Int_t type/*=0*/, Int_t row0, Int_t row1) const
+{
+  //
+  // TPC cluster information
+  // type 0: get fraction of found/findable clusters with neighbourhood definition
+  //      1: findable clusters with neighbourhood definition
+  //      2: found clusters
+  //
+  // definition of findable clusters:
+  //            a cluster is defined as findable if there is another cluster
+  //           within +- nNeighbours pad rows. The idea is to overcome threshold
+  //           effects with a very simple algorithm.
+  //
+  
+  if (type==2) return fTPCClusterMap.CountBits();
+  
+  Int_t found=0;
+  Int_t findable=0;
+  Int_t last=-nNeighbours;
+  
+  for (Int_t i=row0; i<row1; ++i){
+    //look to current row
+    if (fTPCClusterMap[i]) {
+      last=i;
+      ++found;
+      ++findable;
+      continue;
+    }
+    //look to nNeighbours before
+    if ((i-last)<=nNeighbours) {
+      ++findable;
+      continue;
+    }
+    //look to nNeighbours after
+    for (Int_t j=i+1; j<i+1+nNeighbours; ++j){
+      if (fTPCClusterMap[j]){
+        ++findable;
+        break;
+      }
+    }
+  }
+  if (type==1) return findable;
+  
+  if (type==0){
+    Float_t fraction=0;
+    if (findable>0)
+      fraction=(Float_t)found/(Float_t)findable;
+    else
+      fraction=0;
+    return fraction;
+  }
+  return 0;  // undefined type - default value
+}
index 0363fa40a014b3aec2c4b4e0309d4753601c61c4..915af2cbc7ea4cba29b92201bedcfb2b58ae317c 100644 (file)
@@ -210,6 +210,8 @@ class AliAODTrack : public AliVTrack {
   UInt_t  GetFilterMap(){return fFilterMap;}
 
   const TBits& GetTPCClusterMap() const {return fTPCClusterMap;}
+  Float_t GetTPCClusterInfo(Int_t nNeighbours=3, Int_t type=0, Int_t row0=0, Int_t row1=159) const;
+  
   const TBits& GetTPCSharedMap() const {return fTPCSharedMap;}
   void    SetTPCClusterMap(const TBits amap) {fTPCClusterMap = amap;}
   void    SetTPCSharedMap(const TBits amap) {fTPCSharedMap = amap;}
@@ -217,6 +219,14 @@ class AliAODTrack : public AliVTrack {
 
   UShort_t GetTPCNclsF() const { return fTPCnclsF;}
 
+  //pid signal interface
+  Double_t  GetITSsignal()       const { return fDetPid?fDetPid->GetITSsignal():0.;    }
+  Double_t  GetTPCsignal()       const { return fDetPid?fDetPid->GetTPCsignal():0.;    }
+  UShort_t  GetTPCsignalN()      const { return fDetPid?fDetPid->GetTPCsignalN():0;    }
+  Double_t  GetTPCmomentum()     const { return fDetPid?fDetPid->GetTPCmomentum():0.;  }
+  Double_t  GetTOFsignal()       const { return fDetPid?fDetPid->GetTOFsignal():0.; }
+  
+  
   AliAODPid    *GetDetPid() const { return fDetPid; }
   AliAODVertex *GetProdVertex() const { return (AliAODVertex*)fProdVertex.GetObject(); }
   
index 56cade7b1a767b25486e9299e6a69197e00f061b..9f118705b9f02976d8a8f00c5dee46b8e40d6d52 100644 (file)
@@ -240,65 +240,3 @@ void AliAODpidUtil::MakeTRDPID(const AliAODTrack *track,Double_t *p) const
   fTRDResponse.GetResponse(pidObj->GetTRDnSlices(),dedx,mom,p,norm);
   return;
 }
-
-//_________________________________________________________________________
-Float_t AliAODpidUtil::NumberOfSigmasTPC(const AliAODTrack *track, AliPID::EParticleType type) const {
-  
-  Double_t mom = 0.0;
-  AliAODPid *pidObj = 0x0;
-  if (track) {
-    mom = track->P();
-    pidObj = track->GetDetPid();
-  }
-  UShort_t nTPCClus=0;
-  Double_t tpcSignal=0.0;
-  if (pidObj) {
-    nTPCClus=pidObj->GetTPCsignalN();
-    mom = pidObj->GetTPCmomentum();
-    tpcSignal = pidObj->GetTPCsignal();
-  }
-  return fTPCResponse.GetNumberOfSigmas(mom,tpcSignal,nTPCClus,type); 
-}
-
-//_________________________________________________________________________
-Float_t AliAODpidUtil::NumberOfSigmasTOF(const AliAODTrack *track, AliPID::EParticleType type) const {
-  Double_t times[AliPID::kSPECIES]={0.};
-  Double_t sigmaTOFPid[AliPID::kSPECIES]={0.};
-  AliAODPid *pidObj = 0x0;
-  Double_t mom = 0.0;
-  if (track) {
-    pidObj = track->GetDetPid();
-    mom = track->P();
-  }
-  Double_t tofSignal = 0.0;
-  if (pidObj) {
-    pidObj->GetIntegratedTimes(times);
-    pidObj->GetTOFpidResolution(sigmaTOFPid);
-    tofSignal = pidObj->GetTOFsignal();
-  }
-  if (sigmaTOFPid[type]>0) return (tofSignal - times[type])/sigmaTOFPid[type];
-  else return (tofSignal - times[type])/fTOFResponse.GetExpectedSigma(mom,times[type],AliPID::ParticleMass(type));
-}
-
-//_________________________________________________________________________
-Float_t AliAODpidUtil::NumberOfSigmasITS(const AliAODTrack *track, AliPID::EParticleType type) const {
-  AliAODPid *pidObj = 0x0;
-  UChar_t clumap=0;
-  Float_t mom=0.0;
-  UShort_t nTPCClus=0;
-  if (track) {
-    pidObj = track->GetDetPid();
-    clumap=track->GetITSClusterMap();
-    mom=track->P();
-    nTPCClus=track->GetTPCNcls();
-  }
-  Int_t nPointsForPid=0;
-  for(Int_t i=2; i<6; i++){
-    if(clumap&(1<<i)) ++nPointsForPid;
-  }
-  Float_t dEdx=0.0;
-  if (pidObj) dEdx=pidObj->GetITSsignal();
-  Bool_t isSA=kTRUE;  
-  if(nTPCClus>0) isSA=kFALSE;
-  return fITSResponse.GetNumberOfSigmas(mom,dEdx,type,nPointsForPid,isSA);
-}
index dc371ac927af8cd2d119f23420d916ce396b65bf..c998735dbfcf94dc3b83a57909587aceb7b5de30 100644 (file)
@@ -9,26 +9,25 @@
 //                    Combined PID class
 //                    for the AOD class
 //   Origin: Rosa Romita, GSI, r.romita@gsi.de 
+//   Modified: Jens Wiechula, Uni Tuebingen, jens.wiechula@cern.ch
 //-------------------------------------------------------
 #include <Rtypes.h>
 #include <TMatrixD.h>
 #include "AliAODTrack.h" // Needed for inline functions
 #include "AliAODPid.h" // Needed for inline functions
-#include "AliTPCPIDResponse.h"
-#include "AliITSPIDResponse.h"
-#include "AliTOFPIDResponse.h"
-#include "AliTRDPIDResponse.h"
 //#include "HMPID/AliHMPID.h"
 
+#include "AliPIDResponse.h"
+
 class AliAODEvent;
+class AliVParticle;
 
-class AliAODpidUtil {
+class AliAODpidUtil : public AliPIDResponse  {
 public:
-
-  AliAODpidUtil(Bool_t isMC = kFALSE): fRange(5.), fTPCResponse(), fITSResponse(isMC), fTOFResponse(), fTRDResponse() {;}
+  //TODO: isMC???
+  AliAODpidUtil(Bool_t isMC = kFALSE): AliPIDResponse(isMC), fRange(5.) {;}
   virtual ~AliAODpidUtil() {;}
 
-
   Int_t MakePID(AliAODTrack *track,Double_t *p) const;
   void MakeTPCPID(const AliAODTrack *track,Double_t *p) const;
   void MakeITSPID(const AliAODTrack *track,Double_t *p) const;
@@ -36,24 +35,26 @@ public:
   //  void MakeHMPIDPID(AliESDtrack *track);
   void MakeTRDPID(const AliAODTrack *track,Double_t *p) const;
 
-  Float_t NumberOfSigmasTPC(const AliAODTrack *track, AliPID::EParticleType type) const;
-  Float_t NumberOfSigmasTOF(const AliAODTrack *track, AliPID::EParticleType type) const;
-  Float_t NumberOfSigmasITS(const AliAODTrack *track, AliPID::EParticleType type) const;
-
-  AliITSPIDResponse &GetITSResponse() {return fITSResponse;}
-  AliTPCPIDResponse &GetTPCResponse() {return fTPCResponse;}
-  AliTOFPIDResponse &GetTOFResponse() {return fTOFResponse;}
-
+  virtual Float_t NumberOfSigmasTOF(const AliVParticle *vtrack, AliPID::EParticleType type) const;
+  
 private:
   Float_t           fRange;          // nSigma max in likelihood
-  AliTPCPIDResponse fTPCResponse;    // TPC Response
-  AliITSPIDResponse fITSResponse;    // ITS Response
-  AliTOFPIDResponse fTOFResponse;    // TOF Response
-  AliTRDPIDResponse fTRDResponse;    // TRD Response
   
-  ClassDef(AliAODpidUtil,1)  // PID calculation class
+  ClassDef(AliAODpidUtil,2)  // PID calculation class
 };
 
+inline Float_t AliAODpidUtil::NumberOfSigmasTOF(const AliVParticle *vtrack, AliPID::EParticleType type) const {
+  AliAODTrack *track=(AliAODTrack*)vtrack;
+  Double_t times[AliPID::kSPECIES];
+  Double_t sigmaTOFPid[AliPID::kSPECIES];
+  AliAODPid *pidObj = track->GetDetPid();
+  if (!pidObj) return -999.;
+  pidObj->GetIntegratedTimes(times);
+  pidObj->GetTOFpidResolution(sigmaTOFPid);
+  if (sigmaTOFPid[type]>0) return (pidObj->GetTOFsignal() - times[type])/sigmaTOFPid[type];
+  else return (pidObj->GetTOFsignal() - times[type])/fTOFResponse.GetExpectedSigma(track->P(),times[type],AliPID::ParticleMass(type));
+}
+
 #endif
 
 
index 60543daeaa05b0244c900efdee4012e6301df54b..1f4594d2d27de378938b1170746a7febae84e3fe 100644 (file)
@@ -39,6 +39,7 @@
 #include "AliRunTag.h"
 #include "AliEventTag.h"
 #include "AliLog.h"
+#include "AliESDpid.h"
 
 ClassImp(AliESDInputHandler)
 
@@ -72,6 +73,7 @@ AliESDInputHandler::~AliESDInputHandler()
 {
   //  destructor
   if (fRunTag) delete fRunTag;
+  delete fESDpid;
 }
 
 //______________________________________________________________________________
@@ -484,3 +486,15 @@ TObject *AliESDInputHandler::GetStatistics(Option_t *option) const
    if (opt=="BIN0") return fEventCuts->GetStatistics("BIN0");
    else return fEventCuts->GetStatistics("ALL");
 }   
+
+//______________________________________________________________________________
+void AliESDInputHandler::CreatePIDResponse(Bool_t isMC/*=kFALSE*/)
+{
+  //
+  // create the pid response object if it does not exist yet
+  //
+  if (fESDpid) return;
+  fESDpid=new AliESDpid(isMC);
+
+}
+
index ae1d3931d6ead1ab006bcb671e2b1ad8e01a96ef..f91d006f5bf47a4d793894c8bdbc40733b3ac5bb 100644 (file)
@@ -20,6 +20,7 @@ class TMap;
 class AliESDfriend;
 class AliESDpid;
 class AliESDEvent;
+class AliPIDResponse;
 
 
 class AliESDInputHandler : public AliInputEventHandler {
@@ -49,8 +50,6 @@ class AliESDInputHandler : public AliInputEventHandler {
     void                 SetReadHLT()            {fUseHLT = kTRUE;}
     // Friends&Co
     AliESDfriend        *GetESDfriend()    const {return fFriend;}
-    AliESDpid           *GetESDpid()       const {return fESDpid;}
-    void                 SetESDpid(AliESDpid* pid)     {fESDpid = pid;}
     void                 SetReadFriends(Bool_t flag)   {fReadFriends = flag;}
     void                 SetFriendFileName(const char *fname)  {fFriendFileName = fname;}
     // Tag analysis
@@ -59,6 +58,13 @@ class AliESDInputHandler : public AliInputEventHandler {
     const AliEventTag   *GetEventTag() const     {return fEventTag;}
     // Get the statistics object (currently TH2). Option can be BIN0.
     virtual TObject     *GetStatistics(Option_t *option="") const;
+
+    //PID response
+    virtual AliPIDResponse* GetPIDResponse() {return (AliPIDResponse*)fESDpid;}
+    virtual void CreatePIDResponse(Bool_t isMC=kFALSE);
+    AliESDpid           *GetESDpid()       const {return fESDpid;}
+    void                 SetESDpid(AliESDpid* pid)     {fESDpid = pid;}
+  
  private:
     AliESDInputHandler(const AliESDInputHandler& handler);             
     AliESDInputHandler& operator=(const AliESDInputHandler& handler);  
index f62fb7df6022d77bc43d2e4c5187293e26a15112..37ef8fd86913efca4c7ed1920b686a9a425d0f9f 100644 (file)
@@ -33,7 +33,7 @@ class AliVTrack;
 class AliTRDPIDResponse : public TObject {
   public:
     enum ETRDPIDResponseStatus {
-      kIsOwner = BIT(14),
+      kIsOwner = BIT(14)
     };
     enum ETRDPIDResponseDef {
       kNlayer = 6