11 #include <TClonesArray.h>
12 #include <TLorentzVector.h>
18 #include "AliAODMCParticle.h"
19 #include "AliMCEvent.h"
20 #include "AliVParticle.h"
21 #include "AliVTrack.h"
22 #include "AliVCluster.h"
44 DefineOutput(2,TTree::Class());
61 std::string clusterlist(
""), tracklist(
"");
63 tracklist =
"ESDFilterTracks";
65 clusterlist =
"CaloClustersCorr";
67 tracklist =
"AODFilterTracks";
69 clusterlist =
"CaloClustersCorr";
71 this->SetTracksName(tracklist.c_str());
72 this->SetClusName(clusterlist.c_str());
76 fOutputTree =
new TTree(
"EMCalTree",
"A tree with emcal information");
104 const AliVVertex *vertex = fInputEvent->GetPrimaryVertex();
105 if(!vertex)
return kFALSE;
108 vertex->GetXYZ(vpos);
110 AliVTrack *rectrack(NULL);
111 AliVParticle *particle(NULL);
112 AliAODMCParticle *aodmc(NULL);
113 AliVCluster *assoccluster(NULL);
114 for(
unsigned int ipart = 0; ipart < static_cast<unsigned int>(fMCEvent->GetNumberOfTracks()); ipart++){
115 particle = fMCEvent->GetTrack(static_cast<int>(ipart));
117 if(TMath::Abs(particle->Eta()) > 2)
continue;
121 if((aodmc = dynamic_cast<AliAODMCParticle *>(particle)))
129 std::vector<AliVTrack *> tracks;
132 for(std::vector<AliVTrack *>::iterator trackIter = tracks.begin(); trackIter != tracks.end(); trackIter++){
133 rectrack = *trackIter;
137 assoccluster =
dynamic_cast<AliVCluster *
>(
fCaloClusters->At(rectrack->GetEMCALcluster()));
148 std::vector<AliVCluster *> clusters;
151 for(std::vector<AliVCluster *>::iterator clustIter = clusters.begin(); clustIter != clusters.end(); clustIter++){
152 assoccluster = *clustIter;
169 TLorentzVector clustervector;
170 clust->GetMomentum(clustervector, vpos);
171 TVector3 vec = clustervector.Vect().Unit();
172 vec *= clustervector.E();
175 return clustervector.E();
185 while((track = dynamic_cast<AliVTrack *>(trackIter()))){
186 if(static_cast<unsigned int>(TMath::Abs(track->GetLabel())) == label){
188 tracks.push_back(track);
199 AliVCluster *cluster;
200 while((cluster = dynamic_cast<AliVCluster *>(clusterIter()))){
202 labels.Set(cluster->GetNLabels(), cluster->GetLabels());
203 for(
int *labIter = labels.GetArray(); labIter < labels.GetArray() + labels.GetSize(); labIter++){
204 if(static_cast<unsigned int>(TMath::Abs(*labIter)) == label){
206 clusters.push_back(cluster);
214 vector[0] = clust->GetM02();
215 vector[1] = clust->GetM20();
219 cells.ResizeTo(clust->GetNCells());
220 indices.ResizeTo(clust->GetNCells());
221 UShort_t *cellIndices = clust->GetCellsAbsId();
222 for(
int icell = 0; icell < clust->GetNCells(); icell++){
223 indices[icell] = cellIndices[icell];
224 cells[icell] = fInputEvent->GetEMCALCells()->GetCellAmplitude(cellIndices[icell]);
232 const int kAcceptPdg[7] = {kGamma, kPi0, kPiPlus, kKPlus, kProton, kElectron};
234 for(
const int *pdgiter = kAcceptPdg; pdgiter < kAcceptPdg + 7; pdgiter++){
235 if(TMath::Abs(particle->PdgCode()) == *pdgiter){
double GetClusterEnergy(AliVCluster *clust, Double_t *vpos, Double_t *evec) const
bool AcceptParticle(const AliVParticle *const particle) const
Base task in the EMCAL framework.
void FindTracks(unsigned int label, std::vector< AliVTrack * > &tracks)
TClonesArray * fCaloClusters
!clusters
TrackInfo fOutputInfo
Output tree with tracks.
void GetShowerShape(AliVCluster *clust, Double_t *vector) const
AliEmcalList * fOutput
!output list
TClonesArray * fTracks
!tracks
Bool_t fIsEsd
!whether it's an ESD analysis
virtual ~AliEmcalMCTreeWriter()
void UserCreateOutputObjects()
void GetCellEnergies(AliVCluster *clust, TVectorD &cells, TVectorF &indices) const
virtual void UserCreateOutputObjects()
void FindClusters(unsigned int label, std::vector< AliVCluster * > &clusters)