1 /*************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 // ---------------------------------------------------
17 // ESD event level cuts for azimuthal isotropic
18 // expansion in highly central collisions analysis
19 // author: Cristian Andrei
20 // acristian@niham.nipne.ro
21 // --------------------------------------------------
24 #include <TObjArray.h>
27 #include "AliESDEvent.h"
28 #include "AliESDtrack.h"
29 #include "AliESDtrackCuts.h"
30 #include "AliMultiplicity.h"
32 #include "AliAnalysisCentralCutESD.h"
33 #include "AliAnalysisCentralCutEvtESD.h"
38 //____________________________________________________________________
39 ClassImp(AliAnalysisCentralCutEvtESD)
41 //____________________________________________________________________
42 AliAnalysisCentralCutEvtESD::AliAnalysisCentralCutEvtESD(const Char_t* name, const Char_t* title)
43 :AliAnalysisCuts(name,title)
59 for(Int_t i=0; i<10; i++){
65 Printf("ERROR: fCutsList not available");
69 printf("AliAnalysisCentralCutEvtESD::Constructor\n");
72 AliAnalysisCentralCutEvtESD::~AliAnalysisCentralCutEvtESD() {
78 printf("AliAnalysisCentralCutEvtESD::Destructor\n");
83 Bool_t AliAnalysisCentralCutEvtESD::IsSelected(TObject *obj){
84 // check whether the event passes the cuts
85 AliESDEvent *esdEvent = dynamic_cast<AliESDEvent *>(obj);
87 printf("AliAnalysisCentralCutEvtESD:IsSelected ->Can't get ESD event!\n");
92 Int_t mult = CalcMult(esdEvent);
93 if((mult<fMultMin)||(mult>fMultMax)){
99 Double_t dir = CalcDir(esdEvent);
100 if((dir<fDirMin)||(dir>fDirMax)){
106 Double_t spdMult = CalcSPDMult(esdEvent);
107 if((spdMult<fSPDMultMin)||(spdMult>fSPDMultMax)){
113 Double_t spdDir = CalcSPDDir(esdEvent);
114 if((spdDir<fSPDDirMin)||(spdDir>fSPDDirMax)){
122 //_________________________________________________________________________
123 void AliAnalysisCentralCutEvtESD::InitCuts(){
124 //Initialize internal cuts
126 //////////////// FULL ALICE ///////////////////
127 //------------General ESD Cuts------------------
128 AliESDtrackCuts *esdCutsGen = new AliESDtrackCuts("AliESDtrackCuts", "CutEvtESDInternal");
129 esdCutsGen->SetMinNClustersTPC(50);
130 esdCutsGen->SetMaxChi2PerClusterTPC(2.2);
131 esdCutsGen->SetMaxCovDiagonalElements(0.5,0.5,0.5,0.5,0.5);
132 esdCutsGen->SetRequireTPCRefit(kTRUE);
133 esdCutsGen->SetAcceptKinkDaughters(kFALSE);
134 esdCutsGen->SetMaxNsigmaToVertex(2.0);
135 esdCutsGen->SetRequireSigmaToVertex(kTRUE);
137 AliAnalysisCentralCutESD *esdCutsGen1 = new AliAnalysisCentralCutESD("AliAnalysisCentralCutESD","NIHAM");
138 esdCutsGen1->SetReqIsCharged();
140 //-------------Specific ESD Cuts------------------
141 AliESDtrackCuts *esdCutsMult = new AliESDtrackCuts("AliESDCutsMult", "midrapidity");
142 esdCutsMult->SetEtaRange(-0.5,0.5);
143 AliESDtrackCuts *esdCutsDir = new AliESDtrackCuts("AliESDCutsDir", "SPD coverage");
144 esdCutsDir->SetEtaRange(0.0,1.9);
146 /////////////////// SPD ONLY ////////////////////
147 AliESDtrackCuts *esdCutsSPD = new AliESDtrackCuts("AliESDtrackCuts", "CutEvtESDInternal");
148 esdCutsSPD->SetAcceptKinkDaughters(kFALSE);
149 esdCutsSPD->SetMaxNsigmaToVertex(2.0);
150 esdCutsSPD->SetRequireSigmaToVertex(kTRUE);
153 //--------------set the cuts ----------------------
154 TObjArray* esdListMult = new TObjArray();
155 esdListMult->AddLast(esdCutsGen);
156 esdListMult->AddLast(esdCutsGen1);
157 esdListMult->AddLast(esdCutsMult);
159 TObjArray* esdListDir = new TObjArray();
160 esdListDir->AddLast(esdCutsGen);
161 esdListDir->AddLast(esdCutsGen1);
162 esdListDir->AddLast(esdCutsDir);
164 TObjArray* esdListSPD = new TObjArray();
165 esdListSPD->AddLast(esdCutsSPD);
167 fCutsList[0]=esdListDir;
168 fCutsList[1]=esdListMult;
169 fCutsList[2]=esdListSPD;
174 //__________________________________________________________________________
175 Bool_t AliAnalysisCentralCutEvtESD::CheckIntCuts(Int_t no, TObject *obj) const{
176 // Check if the particle passes the internal cuts
179 printf("\n AliAnalysisCentralCutEvtESD::CheckIntCuts -> Cut number is not ok! \n");
184 printf("AliAnalysisCentralCutEvtESD::CheckIntCuts -> cuts list problem! \n");
189 TObjArrayIter iter(fCutsList[no]);
190 AliAnalysisCuts *cut = 0;
193 while((cut = (AliAnalysisCuts*)iter.Next())){
195 if(!cut->IsSelected(obj)) return kFALSE;
202 //__________________________________________________________________________
203 Double_t AliAnalysisCentralCutEvtESD::CalcDir(AliESDEvent* const esdEv) {
205 //Compute the directivity - FULL ALICE
218 printf("NULL tree\n");
222 Int_t totTracks=esdEv->GetNumberOfTracks();
224 for(Int_t itrack = 0; itrack < totTracks; itrack++){//first loop->compute event directivity
226 AliESDtrack* track = esdEv->GetTrack(itrack);
229 Printf("ERROR: Could not receive track %d", itrack);
233 if(!CheckIntCuts(0, track)) continue;
239 sumaPx = sumaPx + px;
240 sumaPy = sumaPy + py;
242 sumaPt = sumaPt + pt;
247 if(sumaPt < 0.0000001){
251 dir = (sqrt(pow(sumaPx,2)+pow(sumaPy,2)))/sumaPt;
256 //__________________________________________________________________________
257 Int_t AliAnalysisCentralCutEvtESD::CalcMult(AliESDEvent* const esdEv) {
259 //Compute multiplicity - FULL ALICE
266 printf("NULL tree\n");
270 Int_t totTracks=esdEv->GetNumberOfTracks();
272 for(Int_t iTrack = 0; iTrack < totTracks; iTrack++){//second track loop -> compute event multiplicity
274 AliESDtrack* track = esdEv->GetTrack(iTrack);
277 Printf("ERROR: Could not receive track %d", iTrack);
281 if(!CheckIntCuts(1, track)) continue;
284 charged++; //multiplicity
286 }//end second track loop
293 //__________________________________________________________________________
294 Double_t AliAnalysisCentralCutEvtESD::CalcSPDDir(AliESDEvent* const esdEv) {
296 //Compute directivity - SPD ONLY
302 Double_t sumaPxU = 0;
303 Double_t sumaPyU = 0;
305 Double_t goodtrack = 0;
306 Double_t spdEta = 0.;
308 const AliMultiplicity *spdMult=esdEv->GetMultiplicity();
310 printf("Unable to get multiplicity! \n");
314 Int_t spdTracks = spdMult->GetNumberOfTracklets(); //SPD multiplicity
316 for(Int_t iTrack = 0; iTrack< spdTracks; iTrack++){ //SPD track loop -> Directivity
318 AliESDtrack* track = esdEv->GetTrack(iTrack);
321 Printf("ERROR: Could not receive track %d", iTrack);
325 if(!CheckIntCuts(2, track)) continue;
327 spdEta = spdMult->GetEta(iTrack);
329 if((spdEta<0.0)||(spdEta>1.9)) continue;
331 Double_t phi = spdMult->GetPhi(iTrack);
333 pxU = TMath::Cos(phi);
334 pyU = TMath::Sin(phi);
336 sumaPxU = sumaPxU + pxU;
337 sumaPyU = sumaPyU + pyU;
341 }//end SPD track loop
343 if(goodtrack < 1.) return -1;
345 dirU = (sqrt(pow(sumaPxU,2)+pow(sumaPyU,2)))/goodtrack;
350 //__________________________________________________________________________
352 Int_t AliAnalysisCentralCutEvtESD::CalcSPDMult(AliESDEvent* const esdEv) {
354 //Compute multiplicity - SPD ONLY
358 const AliMultiplicity *spdMult=esdEv->GetMultiplicity();
360 printf("Unable to get multiplicity! \n");
364 Int_t spdTracks = spdMult->GetNumberOfTracklets(); //SPD multiplicity
369 for(Int_t iTrack = 0; iTrack< spdTracks; iTrack++){ //second SPD track loop -> Multiplicity
371 AliESDtrack* track = esdEv->GetTrack(iTrack);
374 Printf("ERROR: Could not receive track %d", iTrack);
378 if(!CheckIntCuts(2, track)) continue;
380 spdEta = spdMult->GetEta(iTrack);
382 if((spdEta<-0.5)||(spdEta>0.5)) continue;
386 }//end second SPD track loop