26 #include "AliESDEvent.h"
27 #include "AliESDfriend.h"
28 #include "AliESDVertex.h"
29 #include "AliESDtrack.h"
30 #include "AliESDfriendTrack.h"
31 #include "AliExternalTrackParam.h"
32 #include "AliTrackPointArray.h"
33 #include "AliESDtrackCuts.h"
34 #include "AliTracker.h"
35 #include "AliESDCaloCluster.h"
36 #include "AliESDInputHandler.h"
37 #include "AliAnalysisManager.h"
38 #include "AliEMCALGeometry.h"
40 #include "AliESDCaloCells.h"
43 #include "TTimeStamp.h"
44 #include "AliHMPIDParam.h"
46 #include "AliGeomManager.h"
47 #include "AliGRPManager.h"
59 fESDCuts(AliESDtrackCuts::GetStandardITSTPCTrackCuts2010()),
74 for(
Int_t i=0; i<4; i++) fTransMatrix[i]=0;
82 fESDCuts(AliESDtrackCuts::GetStandardITSTPCTrackCuts2010()),
97 DefineInput(0, TChain::Class());
98 DefineOutput(0, TObjArray::Class());
108 printf(
"AliTrackComparisonESD::~AliTrackComparisonESD");
116 for(
Int_t i=0; i<4; i++)
127 TTree* tree=
dynamic_cast<TTree*
>(GetInputData(0));
132 AliESDInputHandler *esdH =
dynamic_cast<AliESDInputHandler*
> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
153 if(!ftmp)AliError(Form(
"File %s not found!",ftmp->GetName()));
178 Double_t rotationMatrix[4][9] = {{-0.014587, -0.999892, -0.002031, 0.999892, -0.014591, 0.001979, -0.002009, -0.002002, 0.999996},
179 {-0.014587, 0.999892, 0.002031, 0.999892, 0.014591, -0.001979, -0.002009, 0.002002, -0.999996},
180 {-0.345864, -0.938278, -0.003412, 0.938276, -0.345874, 0.003010, -0.004004, -0.002161, 0.999990},
181 {-0.345864, 0.938278, 0.003412, 0.938276, 0.345874, -0.003010, -0.004004, 0.002161, -0.999990}};
183 Double_t translationMatrix[4][3] = {{0.351659, 447.576446, 176.269742},
184 {1.062577, 446.893974, -173.728870},
185 {-154.213287, 419.306156, 176.753692},
186 {-153.018950, 418.623681, -173.243605}};
187 for(
Int_t imx=0; imx<4; imx++)
191 fTransMatrix[imx]->SetTranslation(translationMatrix[imx]);
234 fESDfriend=
static_cast<AliESDfriend*
>(
fESD->FindListObject(
"AliESDfriend"));
242 Printf(
"ERROR: fESDfriend Tracks not available");
248 const AliESDVertex *vertex =
fESD->GetPrimaryVertex();
249 if(!vertex) AliError(
"No primary vertex found!\n");
251 vertex->GetXYZ(vPos);
252 if(TMath::Abs(vPos[2])>7)
return;
256 TRefArray *clusters =
new TRefArray();
257 Int_t nclusters =
fESD->GetEMCALClusters(clusters);
258 AliESDCaloCells *cells =
fESD->GetEMCALCells();
271 Int_t ntracks =
fESD->GetNumberOfTracks();
272 for(
Int_t itr=0; itr<ntracks; itr++)
274 AliESDtrack *track =
fESD->GetTrack(itr);
275 if(!track || !
fESDCuts->AcceptTrack(track))
continue;
277 AliESDfriendTrack *friendTrack =
fESDfriend->GetTrack(itr);
278 if(!friendTrack)
continue;
281 if(nclusters>0)
ProcessEMCAL(track,friendTrack,clusters,cells,vPos);
296 if (track->GetTOFsignal()<=0)
return;
297 if (!friendTrack)
return;
298 if (!friendTrack->GetTPCOut())
return;
300 AliExternalTrackParam *pTPC =
const_cast<AliExternalTrackParam*
>(friendTrack->GetTPCOut());
303 const AliTrackPointArray *points=friendTrack->GetTrackPointArray();
305 Int_t npoints = points->GetNPoints();
306 if(npoints>1000)
return;
310 for (
Int_t ipoint=0;ipoint<npoints;ipoint++){
311 if(!points->GetPoint(point,ipoint))
continue;
315 fTOF->
AddTracks(pTPC,&point,track->GetMass(),track->P(),vPos);
324 if(clusters->GetEntriesFast()==0)
return;
331 AliExternalTrackParam *pTPC =
const_cast<AliExternalTrackParam*
>(friendTrack->GetTPCOut());
336 AliExternalTrackParam *pTest =
new AliExternalTrackParam(*pTPC);
337 if(!AliTracker::PropagateTrackToBxByBz(pTest, rEMCal , track->GetMass(), 1 , kFALSE,0.99,-1))
return;
338 if(!pTest->GetXYZ(trPos))
return;
340 Double_t trPhi = TMath::ATan2(trPos[1],trPos[0])*TMath::RadToDeg();
342 if(trPhi<80 || trPhi>120)
return;
343 if(TMath::Abs(pTest->Eta())>0.7)
return;
345 AliExternalTrackParam *p0=0;
346 AliTrackPoint *p1=
new AliTrackPoint();
347 Int_t nclusters = clusters->GetEntries();
348 for(
Int_t icl=0; icl<nclusters; icl++)
350 AliESDCaloCluster *cluster = (AliESDCaloCluster*) clusters->At(icl);
351 if(!cluster)
continue;
355 cluster->GetPosition(clPos);
357 clsV.SetXYZ(clPos[0],clPos[1],clPos[2]);
358 Double_t alpha = ((int)(clsV.Phi()*TMath::RadToDeg()/20)+0.5)*20*TMath::DegToRad();
359 clsV.RotateZ(-alpha);
361 if(!AliTrackerBase::PropagateTrackToBxByBz(p0,clsV.X(), track->GetMass(), 1,kFALSE,0.99,-1))
continue;
362 trkV.SetXYZ(p0->GetX(),p0->GetY(),p0->GetZ());
363 Double_t dist = TMath::Sqrt( TMath::Power(clsV.X()-trkV.X(),2)+TMath::Power(clsV.Y()-trkV.Y(),2)+TMath::Power(clsV.Z()-trkV.Z(),2) );
371 if(clsIndex==-1)
return;
372 AliESDCaloCluster *cluster = (AliESDCaloCluster*) clusters->At(clsIndex);
373 cluster->GetPosition(clPos);
375 p1->SetXYZ(clPos[0],clPos[1],clPos[2],0);
390 if (track->GetHMPIDsignal()<=0)
return;
392 AliExternalTrackParam *pTPC =
const_cast<AliExternalTrackParam*
>(friendTrack->GetTPCOut());
397 track->GetHMPIDmip(x,y,q,nph);
399 if (track->GetOuterHmpPxPyPz(pHmp))
400 pHmp3 = TMath::Sqrt(pHmp[0]*pHmp[0]+pHmp[1]*pHmp[1]+pHmp[2]*pHmp[2]);
402 ch = track->GetHMPIDcluIdx()/1000000;
404 AliHMPIDParam *pParam = AliHMPIDParam::Instance();
405 TVector3 vG = pParam->Lors2Mars(ch,x,y);
407 AliTrackPoint *p1 =
new AliTrackPoint();
408 p1->SetXYZ(vG.X(),vG.Y(),vG.Z());
424 Int_t nclusters = clusters->GetEntries();
425 for(
Int_t icl=0; icl<nclusters; icl++)
427 AliESDCaloCluster *cluster = (AliESDCaloCluster*) clusters->At(icl);
428 UShort_t *absId = cluster->GetCellsAbsId();
429 Int_t nCells = cluster->GetNCells();
430 for(
Int_t i=0;i<3;i++)cPos[i]=0;
432 for(
Int_t iCell=0; iCell<nCells; iCell++)
434 Double_t cellEnergy = cells->GetCellAmplitude(absId[iCell]);
435 Double_t dist = 1.31*(log(cluster->E())+4.82+0.5);
436 fGeom->RelPosCellInSModule(absId[iCell],dist,iLocal[0],iLocal[1],iLocal[2]);
438 Int_t sm =
fGeom->GetSuperModuleNumber(absId[iCell]);
443 Double_t w = TMath::Max( 0., 4.5 + TMath::Log( cellEnergy / cluster->E() ));
447 for(
Int_t i=0; i<3; i++ )
448 cPos[i] += (w*iGlobal[i]);
453 for(
int i=0; i<3; i++ )
456 cluster->SetPosition(cPos);
469 AliInfo(
"AliTrackComparisonESD::Terminate()\n");
508 cout<<
"Initialize bad channel map!"<<endl;
553 cout<<
"Done initialization!"<<endl;
void SwitchOnBadChannelsRemoval()
virtual void CreateOutputObjects()
AliTrackComparison * fTOF
Bool_t ClusterContainsBadChannel(Int_t calo, UShort_t *cellList, Int_t nCells)
TGeoHMatrix * fTransMatrix[4]
void SwitchOnNoFiducialBorderInEMCALEta0()
void SetEMCALChannelStatus(Int_t iSM, Int_t iCol, Int_t iRow, Double_t c=1)
Int_t fCurrentRun
current esd friend
virtual void Exec(Option_t *option)
AliESDtrackCuts * fESDCuts
current esd
virtual void FinishTaskOutput()
virtual void ConnectInputData(Option_t *option)
void SetNumberOfCellsFromEMCALBorder(Int_t n)
void SetRange1Pt(Double_t lowBin1Pt, Double_t upBin1Pt)
void ProcessHMPID(AliESDtrack *track, AliESDfriendTrack *friendTrack, Double_t *vPos)
void ProcessEMCAL(AliESDtrack *track, AliESDfriendTrack *friendTrack, TRefArray *clusters, AliESDCaloCells *cells, Double_t *vPos)
virtual void Print(const Option_t *opt) const
Print some relevant parameters set for the analysis.
Int_t AddTracks(AliExternalTrackParam *param0, AliExternalTrackParam *param1, Double_t mass)
void SetLayerID(Double_t layerID)
void ProcessTOF(AliESDtrack *track, AliESDfriendTrack *friendTrack, Double_t *vPos)
void SetRangeDY(Double_t lowBinDY, Double_t upBinDY)
void RecalClusterPos(TRefArray *clusters, AliESDCaloCells *cells)
void SetRangeDZ(Double_t lowBinDZ, Double_t upBinDZ)
AliESDfriend * fESDfriend
esd track cuts
AliCalorimeterUtils * fCaloUtil
AliTrackComparison * fEMCAL
AliTrackComparison * fHMPID
virtual ~AliTrackComparisonESD()
Class with utils specific to calorimeter clusters/cells.
virtual void Terminate(Option_t *option)
virtual Long64_t Merge(TCollection *li)
void RegisterDebugOutput()
void SetFillAll(Bool_t fillAll)
TList * OpenFile(const char *fname)
Bool_t CheckCellFiducialRegion(AliVCluster *cluster, AliVCaloCells *cells) const