Less bins in Mult monitors. New PID. Adapt to pPb analysis
authorakisiel <akisiel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Feb 2013 16:24:10 +0000 (16:24 +0000)
committerakisiel <akisiel@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 8 Feb 2013 16:24:10 +0000 (16:24 +0000)
18 files changed:
PWGCF/FEMTOSCOPY/AliFemto/AliAnalysisTaskFemto.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoBasicEventCut.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoBasicEventCut.h
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoCutMonitorEventMult.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoCutMonitorEventMult.h
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoCutMonitorParticleYPt.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderAOD.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderESDChain.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderESDChain.h
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderESDChainKine.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderKinematicsChain.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoEventReaderKinematicsChain.h
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoSimpleAnalysis.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoTrack.cxx
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoTrack.h
PWGCF/FEMTOSCOPY/AliFemto/AliFemtoVertexMultAnalysis.cxx
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.cxx
PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoESDTrackCut.h

index 124e551..3790557 100644 (file)
@@ -257,6 +257,7 @@ void AliAnalysisTaskFemto::ConnectInputData(Option_t *) {
       fAODpidUtil = aodH->GetAODpidUtil(); //correct way
       //fAODpidUtil = new AliAODpidUtil(); //not correct way
       //      printf("aodH->GetAODpidUtil(): %x",aodH->GetAODpidUtil());
+      cout<<"AliAnalysisTaskFemto::AodpidUtil:"<<fAODpidUtil<<endl;
       femtoReaderAOD->SetAODpidUtil(fAODpidUtil);
 
       fAODheader = fAOD->GetHeader();
@@ -430,7 +431,7 @@ void AliAnalysisTaskFemto::Exec(Option_t *) {
 
 
 
-    // AliInfo(Form("Tracks in AOD: %d \n",fAOD->GetNumberOfTracks()));
+     AliInfo(Form("Tracks in AOD: %d \n",fAOD->GetNumberOfTracks()));
     
     if (fAOD->GetNumberOfTracks() > 0) {
       if (!fReader) {
index 8f575bd..fcdcdbe 100644 (file)
@@ -19,7 +19,6 @@ AliFemtoBasicEventCut::AliFemtoBasicEventCut() :
   fAcceptBadVertex(false), 
   fNEventsPassed(0), 
   fNEventsFailed(0),
-  fAcceptOnlyPhysics(true),
   fSelectTrigger(0)
 {
   // Default constructor
@@ -43,7 +42,6 @@ bool AliFemtoBasicEventCut::Pass(const AliFemtoEvent* event){
   int mult = (int) event->UncorrectedNumberOfPrimaries();
   double vertexZPos = event->PrimVertPos().z();
 
-
   // Double_t qxEPVZERO = 0, qyEPVZERO = 0;
   // Double_t qVZERO = -999;
   double epvzero = event->ReactionPlaneAngle();
@@ -52,6 +50,7 @@ bool AliFemtoBasicEventCut::Pass(const AliFemtoEvent* event){
 //   cout << "AliFemtoBasicEventCut:: mult:       " << fEventMult[0] << " < " << mult << " < " << fEventMult[1] << endl;
 //   cout << "AliFemtoBasicEventCut:: VertexZPos: " << fVertZPos[0] << " < " << vertexZPos << " < " << fVertZPos[1] << endl;
 //   cout << "AliFemtoBasicEventCut:: VertexZErr: " << event->PrimVertCov()[4] << endl;
+
   // cout << "AliFemtoBasicEventCut:: MagneticField: " << event->MagneticField() << endl;
   // cout << "AliFemtoBasicEventCut:: IsCollisionCandidate: " << event->IsCollisionCandidate() << endl;
   // cout << "AliFemtoBasicEventCut:: TriggerCluster: " << event->TriggerCluster() << endl;
@@ -65,15 +64,15 @@ bool AliFemtoBasicEventCut::Pass(const AliFemtoEvent* event){
      (epvzero > fPsiEP[0]) &&
      (epvzero < fPsiEP[1]) &&
      ((!fAcceptBadVertex) || (event->ZDCParticipants() > 1.0)) &&
-     ((!fAcceptOnlyPhysics) || (event->IsCollisionCandidate())) &&
       ((!fSelectTrigger) || (event->TriggerCluster() == fSelectTrigger))
 );
 
   // cout << "AliFemtoBasicEventCut:: goodEvent" <<goodEvent << endl;
 
   goodEvent ? fNEventsPassed++ : fNEventsFailed++ ;
-//   cout << "AliFemtoBasicEventCut:: return : " << goodEvent << endl;
+  //  cout << "AliFemtoBasicEventCut:: return : " << goodEvent << endl;
 //     (fAcceptBadVertex || (event->PrimVertCov()[4] > -1000.0)) &&
+
   return (goodEvent);
 }
 //------------------------------
@@ -98,11 +97,4 @@ bool AliFemtoBasicEventCut::GetAcceptBadVertex()
 {
   return fAcceptBadVertex;
 }
-void AliFemtoBasicEventCut::SetAcceptOnlyPhysics(bool b)
-{
-  fAcceptOnlyPhysics = b;
-}
-bool AliFemtoBasicEventCut::GetAcceptOnlyPhysics()
-{
-  return fAcceptOnlyPhysics;
-}
+
index 1b2a6fe..11f572d 100644 (file)
@@ -27,7 +27,6 @@ public:
   void SetEventMult(const int& lo,const int& hi);
   void SetVertZPos(const float& lo, const float& hi);
   void SetAcceptBadVertex(bool b);
-  void SetAcceptOnlyPhysics(bool b);
   int NEventsPassed() const;
   int NEventsFailed() const;
   bool GetAcceptBadVertex();
index 3770bfe..2aa747e 100644 (file)
@@ -34,7 +34,7 @@ AliFemtoCutMonitorEventMult::AliFemtoCutMonitorEventMult():
   fMultSumPt = new TH2D("EvMultSumPt","Event Multiplicity vs Total pT",5001,-0.5,5000.5,1000,0.0,100.0);
 }
 
-AliFemtoCutMonitorEventMult::AliFemtoCutMonitorEventMult(const char *aName):
+AliFemtoCutMonitorEventMult::AliFemtoCutMonitorEventMult(const char *aName, int nBins):
   AliFemtoCutMonitor(),
   fEvMult(0),
   fNormEvMult(0),
@@ -57,16 +57,16 @@ AliFemtoCutMonitorEventMult::AliFemtoCutMonitorEventMult(const char *aName):
   // Normal constructor
   char name[200];
   snprintf(name, 200, "EvMult%s", aName);
-  fEvMult = new TH1D(name, "Event Multiplicity", 5001, -0.5, 5000.5);
+  fEvMult = new TH1D(name, "Event Multiplicity", nBins+1, -0.5, 5000.5); 
 
   snprintf(name, 200, "NormEvMult%s", aName);
-  fNormEvMult = new TH1D(name, "Normalized Event Multiplicity", 5001, -0.5, 5000.5);
+  fNormEvMult = new TH1D(name, "Normalized Event Multiplicity", nBins+1, -0.5, 5000.5); 
 
 
 
   if(!freadMC) {
     snprintf(name, 200, "SPDEvMult%s", aName);
-    fSPDMult = new TH1D(name, "SPD Tracklet Multiplicity", 5001, -0.5, 5000.5);
+    fSPDMult = new TH1D(name, "SPD Tracklet Multiplicity", nBins+1, -0.5,  5000.5); 
   }
 
   snprintf(name, 200, "EvMultTotPt%s", aName);
index f9b0426..79325fd 100644 (file)
@@ -23,7 +23,7 @@ class AliFemtoCutMonitorEventMult : public AliFemtoCutMonitor{
   
  public:
   AliFemtoCutMonitorEventMult();
-  AliFemtoCutMonitorEventMult(const char *aName);
+  AliFemtoCutMonitorEventMult(const char *aName, int nBins=5000);
   AliFemtoCutMonitorEventMult(const AliFemtoCutMonitorEventMult &aCut);
   virtual ~AliFemtoCutMonitorEventMult();
 
index 819188a..b021ecd 100644 (file)
@@ -153,7 +153,12 @@ void AliFemtoCutMonitorParticleYPt::Fill(const AliFemtoTrack* aTrack)
   if(tEnergy==abs(aTrack->P().z())) tEnergy+=0.001;
   float tRapidity = 0.5*::log((tEnergy+aTrack->P().z())/(tEnergy-aTrack->P().z()));
   float tPt = ::sqrt((aTrack->P().x())*(aTrack->P().x())+(aTrack->P().y())*(aTrack->P().y()));
-  float tEta = -TMath::Log(TMath::Tan(aTrack->P().Theta()/2.0));
+  
+  float tEta;
+  if(aTrack->P().Theta()==0)
+    tEta=0;
+  else
+    tEta = -TMath::Log(TMath::Tan(aTrack->P().Theta()/2.0));
   float tPhi = aTrack->P().Phi();
   // float chi2w;
   float dcar = aTrack->ImpactD();
index 9e6ed17..89ce527 100644 (file)
@@ -321,7 +321,7 @@ void AliFemtoEventReaderAOD::CopyAODtoFemtoEvent(AliFemtoEvent *tEvent)
   }
 
   AliCentrality *cent = fEvent->GetCentrality();
-
+  
   if (!fEstEventMult && cent && fUsePreCent) {
     if ((cent->GetCentralityPercentile("V0M")*10 < fCentRange[0]) ||
        (cent->GetCentralityPercentile("V0M")*10 > fCentRange[1]))
@@ -480,12 +480,14 @@ void AliFemtoEventReaderAOD::CopyAODtoFemtoEvent(AliFemtoEvent *tEvent)
        //      const AliAODTrack *aodtrack=fEvent->GetTrack(i); // getting the AODtrack directly
        AliAODTrack *aodtrack=fEvent->GetTrack(i); // getting the AODtrack directly
        
+
+
        if (aodtrack->IsPrimaryCandidate()) tracksPrim++;
        
        if (!aodtrack->TestFilterBit(fFilterBit)) {
          delete trackCopy;
          continue;
-       }
+       }       
        
        //counting particles to set multiplicity
        double impact[2];
@@ -498,7 +500,6 @@ void AliFemtoEventReaderAOD::CopyAODtoFemtoEvent(AliFemtoEvent *tEvent)
                  if (aodtrack->GetTPCNcls() > 70)
                    if (aodtrack->Eta() < 0.8)
                      tNormMult++;
-
        } 
 
        CopyAODtoFemtoTrack(aodtrack, trackCopy);
@@ -512,7 +513,7 @@ void AliFemtoEventReaderAOD::CopyAODtoFemtoEvent(AliFemtoEvent *tEvent)
          aodtrackpid = fEvent->GetTrack(labels[-1-fEvent->GetTrack(i)->GetID()]);
        else
          aodtrackpid = fEvent->GetTrack(i);
-       CopyPIDtoFemtoTrack(aodtrackpid, trackCopy);
+       //CopyPIDtoFemtoTrack(aodtrackpid, trackCopy);
        
        if (mcP) {
          // Fill the hidden information with the simulated data
@@ -630,7 +631,7 @@ void AliFemtoEventReaderAOD::CopyAODtoFemtoEvent(AliFemtoEvent *tEvent)
        }
        //    }
   
-  
+       
        tEvent->TrackCollection()->push_back(trackCopy);//adding track to analysis
        realnofTracks++;//real number of tracks         
     }
@@ -638,9 +639,9 @@ void AliFemtoEventReaderAOD::CopyAODtoFemtoEvent(AliFemtoEvent *tEvent)
   tEvent->SetNumberOfTracks(realnofTracks);//setting number of track which we read in event    
   tEvent->SetNormalizedMult(tracksPrim);
 
-
   if (fEstEventMult==kCentrality) {
     //  AliCentrality *cent = fEvent->GetCentrality();
+    //cout<<"AliFemtoEventReaderAOD:"<<lrint(10*cent->GetCentralityPercentile("V0M"))<<endl;
     if (cent) tEvent->SetNormalizedMult(lrint(10*cent->GetCentralityPercentile("V0M")));
     //  if (cent) tEvent->SetNormalizedMult((int) cent->GetCentralityPercentile("V0M"));
     
@@ -824,6 +825,13 @@ void AliFemtoEventReaderAOD::CopyAODtoFemtoTrack(AliAODTrack *tAodTrack,
     indexes[ik] = 0;
   }
   tFemtoTrack->SetKinkIndexes(indexes);
+
+
+  for (int ii=0; ii<6; ii++){
+    tFemtoTrack->SetITSHitOnLayer(ii,tAodTrack->HasPointOnITSLayer(ii));
+  }
+
+
 }
 
 void AliFemtoEventReaderAOD::CopyAODtoFemtoV0(AliAODv0 *tAODv0, AliFemtoV0 *tFemtoV0)
@@ -1116,14 +1124,15 @@ void AliFemtoEventReaderAOD::CopyPIDtoFemtoTrack(AliAODTrack *tAodTrack,
                
   double tTOF = 0.0;
 
-  if (tAodTrack->GetStatus() & AliESDtrack::kTOFpid) {  //AliESDtrack::kTOFpid=0x8000
-    tTOF = tAodTrack->GetTOFsignal();
-    tAodTrack->GetIntegratedTimes(aodpid);
+  //what is that code? for what do we need it? nsigma values are not enough?
+   if (tAodTrack->GetStatus() & AliESDtrack::kTOFpid) {  //AliESDtrack::kTOFpid=0x8000
+     tTOF = tAodTrack->GetTOFsignal();
+     tAodTrack->GetIntegratedTimes(aodpid);
 
-    tTOF -= fAODpidUtil->GetTOFResponse().GetStartTime(tAodTrack->P());
-  }
+     tTOF -= fAODpidUtil->GetTOFResponse().GetStartTime(tAodTrack->P());
+   }
 
-  tFemtoTrack->SetTofExpectedTimes(tTOF-aodpid[2], tTOF-aodpid[3], tTOF-aodpid[4]);
+   tFemtoTrack->SetTofExpectedTimes(tTOF-aodpid[2], tTOF-aodpid[3], tTOF-aodpid[4]);
  
   //////  TPC ////////////////////////////////////////////
 
index 2ba000f..78b76a1 100644 (file)
@@ -42,10 +42,8 @@ AliFemtoEventReaderESDChain::AliFemtoEventReaderESDChain():
   fCurEvent(0),
   fCurFile(0),
   fEvent(0x0),
-  fUsePhysicsSel(kFALSE),
-  fSelect(0x0),
   fTrackType(kGlobal),
-  fEstEventMult(kITSTPC), 
+  fEstEventMult(kReferenceITSTPC), 
   fEventTrig(AliVEvent::kMB), //trigger
   fESDpid(0),
   fIsPidOwner(0),
@@ -74,10 +72,8 @@ AliFemtoEventReaderESDChain::AliFemtoEventReaderESDChain(const AliFemtoEventRead
   fCurEvent(0),
   fCurFile(0),
   fEvent(0x0),
-  fUsePhysicsSel(kFALSE),
-  fSelect(0x0),
   fTrackType(kGlobal),
-  fEstEventMult(kITSTPC),
+  fEstEventMult(kReferenceITSTPC),
   fEventTrig(AliVEvent::kMB), //trigger
   fESDpid(0),
   fIsPidOwner(0),
@@ -93,9 +89,6 @@ AliFemtoEventReaderESDChain::AliFemtoEventReaderESDChain(const AliFemtoEventRead
   fCurFile = aReader.fCurFile;
   //  fEvent = new AliESD(*aReader.fEvent);
   fEvent = new AliESDEvent();
-  fUsePhysicsSel = aReader.fUsePhysicsSel;
-  if (aReader.fUsePhysicsSel)
-    fSelect = new AliPhysicsSelection();
   fTrackType = aReader.fTrackType;
   fEstEventMult = aReader.fEstEventMult;
   fEventTrig = aReader.fEventTrig; //trigger
@@ -136,7 +129,7 @@ AliFemtoEventReaderESDChain::~AliFemtoEventReaderESDChain()
   //     delete fSharedList[tPad];
   //   }
   //   delete [] fSharedList;
-  if (fSelect) delete fSelect;
+
 }
 
 //__________________
@@ -157,11 +150,8 @@ AliFemtoEventReaderESDChain& AliFemtoEventReaderESDChain::operator=(const AliFem
   fTrackType = aReader.fTrackType;
   fEstEventMult = aReader.fEstEventMult;
 
-  fUsePhysicsSel = aReader.fUsePhysicsSel;
   fReadV0 = aReader.fReadV0;
   fMagFieldSign = aReader.fMagFieldSign;
-  if (aReader.fUsePhysicsSel)
-    fSelect = new AliPhysicsSelection();
   //  fEventFriend = aReader.fEventFriend;
   
   //   if (fClusterPerPadrow) {
@@ -241,12 +231,6 @@ bool AliFemtoEventReaderESDChain::GetUseTPCOnly() const
   return fUseTPCOnly;
 }
 
-void AliFemtoEventReaderESDChain::SetUsePhysicsSelection(const bool usephysics)
-{
-  fUsePhysicsSel = usephysics;
-  if (!fSelect) fSelect = new AliPhysicsSelection();
-}
-
 void AliFemtoEventReaderESDChain::SetUseMultiplicity(EstEventMult aType)
 {
   fEstEventMult = aType;
@@ -267,15 +251,7 @@ AliFemtoEvent* AliFemtoEventReaderESDChain::ReturnHbtEvent()
   
   hbtEvent = new AliFemtoEvent;
 
-  if (fUsePhysicsSel) {
-    hbtEvent->SetIsCollisionCandidate(fSelect->IsCollisionCandidate(fEvent));
-    if (!(fSelect->IsCollisionCandidate(fEvent)))
-      printf("Event not a collision candidate\n");
-  }
-  else
-    hbtEvent->SetIsCollisionCandidate(kTRUE);
-
-  //setting basic things
+   //setting basic things
   //  hbtEvent->SetEventNumber(fEvent->GetEventNumber());
   hbtEvent->SetRunNumber(fEvent->GetRunNumber());
   //hbtEvent->SetNumberOfTracks(fEvent->GetNumberOfTracks());
@@ -375,7 +351,8 @@ AliFemtoEvent* AliFemtoEventReaderESDChain::ReturnHbtEvent()
 
   Int_t tTracklet=0, tITSTPC=0, tITSPure=0;
   
-  fEvent->EstimateMultiplicity(tTracklet, tITSTPC, tITSPure, 1.2);
+  //W-AliESDEvent::EstimateMultiplicity: This obsolete method will be eliminated soon. Use AliESDtrackCuts::GetReferenceMultiplicity
+  //fEvent->EstimateMultiplicity(tTracklet, tITSTPC, tITSPure, 1.2);
   
   hbtEvent->SetMultiplicityEstimateITSTPC(tITSTPC);
   hbtEvent->SetMultiplicityEstimateTracklets(tTracklet);
@@ -685,6 +662,11 @@ AliFemtoEvent* AliFemtoEventReaderESDChain::ReturnHbtEvent()
          indexes[ik] = esdtrack->GetKinkIndex(ik);
        }
        trackCopy->SetKinkIndexes(indexes);
+
+       for (int ii=0; ii<6; ii++){
+         trackCopy->SetITSHitOnLayer(ii,esdtrack->HasPointOnITSLayer(ii));
+       }
+
        //decision if we want this track
        //if we using diffrent labels we want that this label was use for first time 
        //if we use hidden info we want to have match between sim data and ESD
@@ -721,14 +703,15 @@ AliFemtoEvent* AliFemtoEventReaderESDChain::ReturnHbtEvent()
     hbtEvent->SetNormalizedMult(AliESDtrackCuts::GetReferenceMultiplicity(fEvent,AliESDtrackCuts::kTrackletsITSSA,1.0));
   else if(fEstEventMult == kReferenceTracklets)
     hbtEvent->SetNormalizedMult(AliESDtrackCuts::GetReferenceMultiplicity(fEvent,AliESDtrackCuts::kTracklets,1.0));
-  else if (fEstEventMult == kTracklet)
-    hbtEvent->SetNormalizedMult(tTracklet);
-  else if (fEstEventMult == kITSTPC)
-    hbtEvent->SetNormalizedMult(tITSTPC);
-  else if (fEstEventMult == kITSPure)
-    hbtEvent->SetNormalizedMult(tITSPure);
   else if (fEstEventMult == kSPDLayer1)
     hbtEvent->SetNormalizedMult(fEvent->GetMultiplicity()->GetNumberOfITSClusters(1));
+  else if (fEstEventMult == kVZERO)
+    {
+      Float_t multV0 = 0;
+      for (Int_t i=0; i<64; i++)
+       multV0 += fEvent->GetVZEROData()->GetMultiplicity(i);
+      hbtEvent->SetNormalizedMult(multV0);
+    }
   else if (fEstEventMult == kV0Centrality) {
     // centrality between 0 (central) and 1 (very peripheral)
 
index d7f20b7..5b61ce8 100644 (file)
@@ -34,7 +34,7 @@ class AliFemtoEventReaderESDChain : public AliFemtoEventReader
   enum TrackType {kGlobal=0, kTPCOnly=1, kITSOnly=2, kSPDTracklet=3};
   typedef enum TrackType ReadTrackType;
 
-  enum EventMult {kTracklet=0, kITSTPC=1, kITSPure=2, kGlobalCount=3, kSPDLayer1=4, kV0Centrality=5, kReferenceITSTPC=6, kReferenceITSSA=7, kReferenceTracklets=8 };
+  enum EventMult {kGlobalCount=3, kSPDLayer1=4, kV0Centrality=5, kReferenceITSTPC=6, kReferenceITSSA=7, kReferenceTracklets=8, kVZERO=9 };
   typedef enum EventMult EstEventMult;
 
   AliFemtoEventReaderESDChain();
@@ -54,7 +54,6 @@ class AliFemtoEventReaderESDChain : public AliFemtoEventReader
   void GetGlobalPositionAtGlobalRadiiThroughTPC(AliESDtrack *track, Float_t bfield, Float_t globalPositionsAtRadii[9][3]);
   void SetMagneticFieldSign(int s);
 
-  void SetUsePhysicsSelection(const bool usephysics);
   void SetUseMultiplicity(EstEventMult aType);
   void SetEventTrigger(UInt_t eventtrig); //trigger
 
@@ -81,8 +80,6 @@ class AliFemtoEventReaderESDChain : public AliFemtoEventReader
   unsigned int   fCurFile;       //number of current file
   AliESDEvent*   fEvent;         //ESD event
   //  AliESDfriend*  fEventFriend;
-  bool           fUsePhysicsSel; //if true the physics selection class will be used
-  AliPhysicsSelection *fSelect;  //Class to select only physics events
   ReadTrackType  fTrackType;     // Type of track read
   EstEventMult   fEstEventMult;  // Type of the event multiplicity estimator
   UInt_t         fEventTrig;     //event trigger
index 6e0f26a..e3d99fc 100644 (file)
@@ -653,6 +653,10 @@ AliFemtoEvent* AliFemtoEventReaderESDChainKine::ReturnHbtEvent()
       }
       trackCopy->SetKinkIndexes(indexes);
 
+       for (int ii=0; ii<6; ii++){
+         trackCopy->SetITSHitOnLayer(ii,esdtrack->HasPointOnITSLayer(ii));
+       }
+
 
       // Fill the hidden information with the simulated data
       if (TMath::Abs(esdtrack->GetLabel()) < fStack->GetNtrack()) {
index 9bc3bc6..e7a91d7 100644 (file)
@@ -47,6 +47,7 @@ AliFemtoEventReaderKinematicsChain::AliFemtoEventReaderKinematicsChain():
   fCurFile(0),
   fStack(0x0),
   fGenHeader(0x0),
+  fEstEventMult(kGlobalCount),
   fRotateToEventPlane(0)
 {
   //constructor with 0 parameters , look at default settings 
@@ -62,6 +63,7 @@ AliFemtoEventReaderKinematicsChain::AliFemtoEventReaderKinematicsChain(const Ali
   fCurFile(0),
   fStack(0x0),
   fGenHeader(0x0),
+  fEstEventMult(kGlobalCount),
   fRotateToEventPlane(0)
 {
   // Copy constructor
@@ -70,6 +72,7 @@ AliFemtoEventReaderKinematicsChain::AliFemtoEventReaderKinematicsChain(const Ali
   fCurEvent = aReader.fCurEvent;
   fCurFile = aReader.fCurFile;
   fStack = aReader.fStack;
+  fEstEventMult = aReader.fEstEventMult;
   fRotateToEventPlane = aReader.fRotateToEventPlane;
 }
 //__________________
@@ -92,6 +95,7 @@ AliFemtoEventReaderKinematicsChain& AliFemtoEventReaderKinematicsChain::operator
   fCurFile = aReader.fCurFile;
   fStack = aReader.fStack;
   fGenHeader = aReader.fGenHeader;
+  fEstEventMult = aReader.fEstEventMult;
   fRotateToEventPlane = aReader.fRotateToEventPlane;
   return *this;
 }
@@ -180,6 +184,7 @@ AliFemtoEvent* AliFemtoEventReaderKinematicsChain::ReturnHbtEvent()
 
 
   int tNormMult = 0;
+  int tV0direction = 0;
   for (int i=0;i<nofTracks;i++)
     {
       //take only primaries
@@ -200,7 +205,12 @@ AliFemtoEvent* AliFemtoEventReaderKinematicsChain::ReturnHbtEvent()
            if (kinetrack->Eta() < 0.8)
              tNormMult++;
          
-         
+       //counting particles that go into direction of VZERO detector
+       if(kinetrack->Eta() > 2.8 && kinetrack->Eta() < 5.1) //VZERO-A
+         tV0direction++;
+       if(kinetrack->Eta() > -3.7 && kinetrack->Eta() < -1.7)//VZERO-C
+         tV0direction++;       
          //charge
       trackCopy->SetCharge((short)(fStack->Particle(i)->GetPDG()->Charge()/3));
 
@@ -279,7 +289,10 @@ AliFemtoEvent* AliFemtoEventReaderKinematicsChain::ReturnHbtEvent()
     }
   
   hbtEvent->SetNumberOfTracks(realnofTracks);//setting number of track which we read in event
-  hbtEvent->SetNormalizedMult(tNormMult);
+  if (fEstEventMult == kGlobalCount) 
+    hbtEvent->SetNormalizedMult(tNormMult);
+  else if(fEstEventMult == kVZERO)
+    hbtEvent->SetNormalizedMult(tV0direction);
   fCurEvent++; 
 
 
@@ -342,6 +355,11 @@ void AliFemtoEventReaderKinematicsChain::SetRotateToEventPlane(short dorotate)
   fRotateToEventPlane=dorotate;
 }
 
+void AliFemtoEventReaderKinematicsChain::SetUseMultiplicity(EstEventMult aType)
+{
+  fEstEventMult = aType;
+}
+
 Float_t AliFemtoEventReaderKinematicsChain::GetSigmaToVertex(double *impact, double *covar)
 {
   // Calculates the number of sigma to the vertex.
index 86fd9aa..283bb19 100644 (file)
@@ -28,6 +28,9 @@ class AliFemtoEvent;
 class AliFemtoEventReaderKinematicsChain : public AliFemtoEventReader 
 {
  public:
+  enum EventMult {kGlobalCount=0, kVZERO=1};
+  typedef enum EventMult EstEventMult;
+
   AliFemtoEventReaderKinematicsChain();
   AliFemtoEventReaderKinematicsChain(const AliFemtoEventReaderKinematicsChain& aReader);
   ~AliFemtoEventReaderKinematicsChain();
@@ -43,6 +46,7 @@ class AliFemtoEventReaderKinematicsChain : public AliFemtoEventReader
   void SetStackSource(AliStack *aStack);
   void SetGenEventHeader(AliGenEventHeader *aGenHeader);
   void SetRotateToEventPlane(short dorotate);
+  void SetUseMultiplicity(EstEventMult aType);
   void CopyAODtoFemtoV0(TParticle *tv0, AliFemtoV0 *tFemtoV0 );
 
  protected:
@@ -55,7 +59,7 @@ class AliFemtoEventReaderKinematicsChain : public AliFemtoEventReader
   unsigned int   fCurFile;       // number of current file
   AliStack       *fStack;         // Kinematics stack pointer
   AliGenEventHeader *fGenHeader; // Link to the generator event header
-
+  EstEventMult   fEstEventMult;  // Type of the event multiplicity estimator
   short          fRotateToEventPlane; // Rotate the event so that event plane is at x=0
 
   Float_t GetSigmaToVertex(double *impact, double *covar);
index efbea93..a831837 100644 (file)
@@ -326,8 +326,8 @@ void AliFemtoSimpleAnalysis::ProcessEvent(const AliFemtoEvent* hbtEvent) {
   if (!tmpPassEvent) 
     fEventCut->FillCutMonitor(hbtEvent, tmpPassEvent);
   if (tmpPassEvent) {
-    //     cout << "AliFemtoSimpleAnalysis::ProcessEvent() - Event has passed cut - build picoEvent from " <<
-//       hbtEvent->TrackCollection()->size() << " tracks in TrackCollection" << endl;
+    //  cout << "AliFemtoSimpleAnalysis::ProcessEvent() - Event has passed cut - build picoEvent from " <<
+    //   hbtEvent->TrackCollection()->size() << " tracks in TrackCollection" << endl;
     //  cout << "Event has passed cut with " << hbtEvent->TrackCollection()->size() << " tracks" << endl;
     // OK, analysis likes the event-- build a pico event from it, using tracks the analysis likes...
     fPicoEvent = new AliFemtoPicoEvent; // this is what we will make pairs from and put in Mixing Buffer
@@ -339,9 +339,9 @@ void AliFemtoSimpleAnalysis::ProcessEvent(const AliFemtoEvent* hbtEvent) {
 //       fPicoEvent->FirstParticleCollection()->size() << " " <<
 //       fPicoEvent->SecondParticleCollection()->size() << endl;
     
-    // cout << "#particles in Collection 1, 2: " <<
-    //   fPicoEvent->FirstParticleCollection()->size() << " " <<
-    //   fPicoEvent->SecondParticleCollection()->size() << endl;
+    cout << "#particles in Collection 1, 2: " <<
+       fPicoEvent->FirstParticleCollection()->size() << " " <<
+       fPicoEvent->SecondParticleCollection()->size() << endl;
 
     fEventCut->FillCutMonitor(fPicoEvent->FirstParticleCollection(),fPicoEvent->SecondParticleCollection()); //MJ!
     
@@ -370,7 +370,7 @@ void AliFemtoSimpleAnalysis::ProcessEvent(const AliFemtoEvent* hbtEvent) {
         MakePairs("real", fPicoEvent->FirstParticleCollection(),
                           fPicoEvent->SecondParticleCollection() );
       }
-      // cout << "AliFemtoSimpleAnalysis::ProcessEvent() - reals done ";
+       cout << "AliFemtoSimpleAnalysis::ProcessEvent() - reals done ";
 
       //---- Make pairs for mixed events, looping over events in mixingBuffer ----//
 
@@ -390,7 +390,7 @@ void AliFemtoSimpleAnalysis::ProcessEvent(const AliFemtoEvent* hbtEvent) {
                             fPicoEvent->SecondParticleCollection() );
         }
       }
-      // cout << " - mixed done   " << endl;
+       cout << " - mixed done   " << endl;
 
       //--------- If mixing buffer is full, delete oldest event ---------//
 
index 77045c3..ea49bcd 100644 (file)
@@ -78,6 +78,10 @@ AliFemtoTrack::AliFemtoTrack():
   fKinkIndexes[1] = 0;
   fKinkIndexes[2] = 0;
 
+  for(int i=0;i<6;i++) {
+    fHasPointOnITS[i]=false;
+  }
+
   for(int i=0;i<9;i++)
     {
       fNominalTpcPoints[i].SetX(0);
@@ -253,6 +257,10 @@ AliFemtoTrack& AliFemtoTrack::operator=(const AliFemtoTrack& aTrack)
   fKinkIndexes[1] = aTrack.fKinkIndexes[1];
   fKinkIndexes[2] = aTrack.fKinkIndexes[2];
 
+  for(int i=0;i<6;i++) {
+    fHasPointOnITS[i]=false;
+  }
+
   fXatDCA=aTrack.fXatDCA;
   fYatDCA=aTrack.fYatDCA;
   fZatDCA=aTrack.fZatDCA;
@@ -402,6 +410,13 @@ void AliFemtoTrack::SetKinkIndexes(int points[3])
   fKinkIndexes[2] = points[2];
 }
 
+void AliFemtoTrack::SetITSHitOnLayer(int i, bool val)
+{
+  // Transfer ITS hit
+  fHasPointOnITS[i] = val;
+}
+
+
 int  AliFemtoTrack::KinkIndex(int aIndex) const
 {
   // Return Kink index
@@ -411,6 +426,15 @@ int  AliFemtoTrack::KinkIndex(int aIndex) const
     return 0;
 }
 
+bool AliFemtoTrack::HasPointOnITSLayer(int aIndex) const
+{
+  // Return if i-th ITS layer had a hit for this track
+  if ((aIndex <6) && (aIndex>=0))
+    return fHasPointOnITS[aIndex];
+  else
+    return false;
+}
+
 // void AliFemtoTrack::SetXTPC(const AliFemtoThreeVector& aXTPC)
 // {
 //   fXTPC = aXTPC;
index 34fa52d..78fdd77 100644 (file)
@@ -148,7 +148,9 @@ public:
   void SetTPCSharedMap(const TBits& aBits);
 
   void SetKinkIndexes(int points[3]);
-  int  KinkIndex(int aIndex) const;
+  int  KinkIndex(int aIndex) const;  
+  void SetITSHitOnLayer(int i, bool val);
+  bool HasPointOnITSLayer(int aIndex) const; // i: 0-5, for 6 layers
 
   /* Th stuff */
   void SetHiddenInfo(AliFemtoHiddenInfo* aHiddenInfo);
@@ -243,6 +245,7 @@ public:
   AliFemtoThreeVector fNominalTpcExitPoint;     // Nominal track exit point from TPC
 
   int   fKinkIndexes[3]; // Kink Index list
+  bool  fHasPointOnITS[6]; // if track has hit on the ITS layer (6 layers: 2 x 3 (SPD, SSD, SDD)) 
 
   double fXatDCA;
   double fYatDCA;
index c9d5ce3..ee9ccab 100644 (file)
@@ -289,6 +289,7 @@ void AliFemtoVertexMultAnalysis::ProcessEvent(const AliFemtoEvent* hbtEvent) {
     if ( mult > fMult[1] ) fOverFlowMult++;
     return;
   }
+  //cout<<" AliFemtoVertexMultAnalysis:: -> Simple"<<endl;
   // call ProcessEvent() from AliFemtoSimpleAnalysis-base
   AliFemtoSimpleAnalysis::ProcessEvent(hbtEvent);
 }
index dcab41e..ce2d9ba 100644 (file)
@@ -122,6 +122,8 @@ ClassImp(AliFemtoESDTrackCut)
   fPidProbKaon[0]=-1;fPidProbKaon[1]=2;
   fPidProbProton[0]=-1;fPidProbProton[1]=2;
   fPidProbMuon[0]=-1;fPidProbMuon[1]=2;
+  for (Int_t i = 0; i < 3; i++)
+    fCutClusterRequirementITS[i] = AliESDtrackCuts::kOff;
   fLabel=false;
   fStatus=0;
   fminTPCclsF=0;
@@ -135,7 +137,7 @@ AliFemtoESDTrackCut::~AliFemtoESDTrackCut(){
 //------------------------------
 bool AliFemtoESDTrackCut::Pass(const AliFemtoTrack* track)
 {
-
+  //cout<<"AliFemtoESDTrackCut::Pass"<<endl;
 
   // test the particle and return 
   // true if it meets all the criteria
@@ -197,6 +199,10 @@ bool AliFemtoESDTrackCut::Pass(const AliFemtoTrack* track)
     if ((track->TPCchi2()/track->TPCncls()) > fMaxTPCchiNdof) {
       return false;
     }
+  //ITS cluster requirenments
+  for (Int_t i = 0; i < 3; i++)
+    if(!CheckITSClusterRequirement(fCutClusterRequirementITS[i], track->HasPointOnITSLayer(i*2), track->HasPointOnITSLayer(i*2+1)))
+      return false;
 
   if (fLabel)
     {
@@ -221,6 +227,10 @@ bool AliFemtoESDTrackCut::Pass(const AliFemtoTrack* track)
          return false;
        }
     }
+
+
+  
+
   Bool_t tTPCPidIn = (track->Flags()&AliFemtoTrack::kTPCpid)>0;
   Bool_t tITSPidIn = (track->Flags()&AliFemtoTrack::kITSpid)>0;
   Bool_t tTOFPidIn = (track->Flags()&AliFemtoTrack::kTOFpid)>0;
@@ -280,6 +290,10 @@ bool AliFemtoESDTrackCut::Pass(const AliFemtoTrack* track)
       //cout<<fPt[0]<<" < Pt ="<<Pt<<" <"<<fPt[1]<<endl;
       return false;
     }
+
+
+
+
   //   cout << "Track has pids: " 
   //        << track->PidProbElectron() << " " 
   //        << track->PidProbMuon() << " " 
@@ -974,3 +988,28 @@ void AliFemtoESDTrackCut::SetPIDMethod(ReadPIDMethodType newMethod)
 {
   fPIDMethod = newMethod;
 }
+
+
+void AliFemtoESDTrackCut::SetClusterRequirementITS(AliESDtrackCuts::Detector det, AliESDtrackCuts::ITSClusterRequirement req) 
+{ 
+  fCutClusterRequirementITS[det] = req; 
+}
+
+Bool_t AliFemtoESDTrackCut::CheckITSClusterRequirement(AliESDtrackCuts::ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2)
+{
+  // checks if the cluster requirement is fullfilled (in this case: return kTRUE)
+  
+  switch (req)
+    {
+    case AliESDtrackCuts::kOff:        return kTRUE;
+    case AliESDtrackCuts::kNone:       return !clusterL1 && !clusterL2;
+    case AliESDtrackCuts::kAny:        return clusterL1 || clusterL2;
+    case AliESDtrackCuts::kFirst:      return clusterL1;
+    case AliESDtrackCuts::kOnlyFirst:  return clusterL1 && !clusterL2;
+    case AliESDtrackCuts::kSecond:     return clusterL2;
+    case AliESDtrackCuts::kOnlySecond: return clusterL2 && !clusterL1;
+    case AliESDtrackCuts::kBoth:       return clusterL1 && clusterL2;
+  }
+  
+  return kFALSE;
+}
index c87f622..6d71863 100644 (file)
@@ -7,6 +7,7 @@
 // Author: Marek Chojnacki (WUT), mchojnacki@knf.pw.edu.pl               //
 //                                                                       //
 ///////////////////////////////////////////////////////////////////////////
+#include "AliESDtrackCuts.h"
 
 #ifndef ALIFEMTOESDTRACKCUT_H
 #define ALIFEMTOESDTRACKCUT_H
 //#include "StMaker.h"
 //#endif
 
+#include "AliESDtrackCuts.h" //for enum with ITS layers
 #include "AliFemtoTrackCut.h"
 
+
 class AliFemtoESDTrackCut : public AliFemtoTrackCut 
 {
   public:
@@ -60,6 +63,7 @@ class AliFemtoESDTrackCut : public AliFemtoTrackCut
   void SetMostProbableProton();
   void SetNoMostProbable(); 
   void SetPIDMethod(ReadPIDMethodType newMethod);
+  void SetClusterRequirementITS(AliESDtrackCuts::Detector det, AliESDtrackCuts::ITSClusterRequirement req = AliESDtrackCuts::kOff);
 
   void SetMomRangeTOFpidIs(const float& minp, const float& maxp);
   void SetMomRangeTPCpidIs(const float& minp, const float& maxp);
@@ -76,6 +80,8 @@ class AliFemtoESDTrackCut : public AliFemtoTrackCut
   float             fPidProbKaon[2];     // bounds for kaon probability
   float             fPidProbProton[2];   // bounds for proton probability
   float             fPidProbMuon[2];     // bounds for muon probability 
+
+  AliESDtrackCuts::ITSClusterRequirement fCutClusterRequirementITS[3];  // detailed ITS cluster requirements for (SPD, SDD, SSD) - from AliESDtrackcuts!
   bool              fLabel;              // if true label<0 will not pass throught 
   long              fStatus;             // staus flag
   ReadPIDMethodType fPIDMethod;          // which PID mehod to use. 0 - nsgima, 1 - contour 
@@ -125,6 +131,9 @@ class AliFemtoESDTrackCut : public AliFemtoTrackCut
   bool IsPionNSigma(float mom, float nsigmaTPC, float nsigmaTOF);
   bool IsProtonNSigma(float mom, float nsigmaTPC, float nsigmaTOF);
 
+  Bool_t CheckITSClusterRequirement(AliESDtrackCuts::ITSClusterRequirement req, Bool_t clusterL1, Bool_t clusterL2); //the same as in AliESDtrackCuts
+
+
 #ifdef __ROOT__ 
   ClassDef(AliFemtoESDTrackCut, 1)
 #endif
@@ -156,5 +165,6 @@ inline void AliFemtoESDTrackCut::SetMaxImpactXY(const float& maximpxy) { fMaxImp
 inline void AliFemtoESDTrackCut::SetMaxImpactXYPtDep(const float& maxoff, const float& maxnrm, const float& maxpow) { fMaxImpactXYPtOff = maxoff; fMaxImpactXYPtNrm = maxnrm; fMaxImpactXYPtPow = maxpow; }
 inline void AliFemtoESDTrackCut::SetMaxImpactZ(const float& maximpz) { fMaxImpactZ = maximpz; }
 
+
 #endif