//
// Jet embedding task.
//
-// Author: Salvatore Aiola, Constantin Loizides
+// Author: S.Aiola, C.Loizides
#include <TClonesArray.h>
#include <TLorentzVector.h>
//________________________________________________________________________
AliJetEmbeddingTask::AliJetEmbeddingTask() :
- AliAnalysisTaskSE("AliJetEmbeddingTask"),
- fGeomName(),
- fTracksName(),
- fOutTracksName(),
- fCaloName(),
- fOutCaloName(),
- fEtaMin(-1),
- fEtaMax(1),
- fPhiMin(0),
- fPhiMax(TMath::Pi() * 2),
- fPtMin(0),
- fPtMax(0),
- fCopyArray(kTRUE),
- fNEmbClusters(0),
- fNEmbTracks(0),
- fGeom(0),
- fClusters(0),
- fOutClusters(0),
- fTracks(0),
- fOutTracks(0)
+ AliJetModelBaseTask("AliJetEmbeddingTask")
{
// Default constructor.
+ SetSuffix("Embedded");
}
//________________________________________________________________________
AliJetEmbeddingTask::AliJetEmbeddingTask(const char *name) :
- AliAnalysisTaskSE(name),
- fGeomName(""),
- fTracksName("PicoTracks"),
- fOutTracksName("PicoTracksEmbedded"),
- fCaloName("CaloClustersCorr"),
- fOutCaloName("CaloClustersCorrEmbedded"),
- fEtaMin(-1),
- fEtaMax(1),
- fPhiMin(0),
- fPhiMax(TMath::Pi() * 2),
- fPtMin(50),
- fPtMax(60),
- fCopyArray(kTRUE),
- fNEmbClusters(0),
- fNEmbTracks(1),
- fGeom(0),
- fClusters(0),
- fOutClusters(0),
- fTracks(0),
- fOutTracks(0)
+ AliJetModelBaseTask(name)
{
// Standard constructor.
-
+ SetSuffix("Embedded");
}
//________________________________________________________________________
}
//________________________________________________________________________
-void AliJetEmbeddingTask::Init()
+void AliJetEmbeddingTask::UserExec(Option_t *)
{
- // Init task.
-
- if (fNEmbTracks > 0) {
- fTracks = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTracksName));
-
- if (strcmp(fTracks->GetClass()->GetName(), "AliPicoTrack")) {
- AliError("Can only embed PicoTracks!");
- return;
- }
-
- if (!fTracks) {
- AliError(Form("Couldn't retrieve tracks with name %s!", fTracksName.Data()));
- return;
- }
-
- if (!fOutTracks) {
- fOutTracksName = fTracksName;
- if (fCopyArray) {
- fOutTracksName += "Embedded";
- fOutTracks = new TClonesArray(*fTracks);
- fOutTracks->SetName(fOutTracksName);
- }
- else {
- fOutTracks = fTracks;
- }
- }
-
- if (fCopyArray) {
- if (!(InputEvent()->FindListObject(fOutTracksName)))
- InputEvent()->AddObject(fOutTracks);
- fOutTracks->Clear();
- }
- }
-
- if (fNEmbClusters > 0) {
- fClusters = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fCaloName));
-
- if (!fClusters) {
- AliError(Form("Couldn't retrieve clusters with name %s!", fCaloName.Data()));
- return;
- }
-
- if (!fOutClusters) {
- fOutCaloName = fCaloName;
- if (fCopyArray) {
- fOutCaloName += "Embedded";
- fOutClusters = new TClonesArray(*fClusters);
- fOutClusters->SetName(fOutCaloName);
- }
- else {
- fOutClusters = fClusters;
- }
- }
+ // Execute per event.
- if (fCopyArray) {
- if (!(InputEvent()->FindListObject(fOutCaloName)))
- InputEvent()->AddObject(fOutClusters);
- fOutClusters->Clear();
- }
+ if (!fIsInit) {
+ ExecOnce();
+ fIsInit = 1;
}
-
- if (!fGeom) {
- if (fGeomName.Length()>0) {
- fGeom = AliEMCALGeometry::GetInstance(fGeomName);
- if (!fGeom)
- AliError(Form("Could not get geometry with name %s!", fGeomName.Data()));
- } else {
- fGeom = AliEMCALGeometry::GetInstance();
- if (!fGeom)
- AliError("Could not get default geometry!");
- }
- }
+ Run();
}
//________________________________________________________________________
-void AliJetEmbeddingTask::Embed()
+void AliJetEmbeddingTask::Run()
{
// Embed particles.
-
- if (fNEmbClusters > 0 && fOutClusters) {
- const Int_t nClusters = fOutClusters->GetEntriesFast();
- TClonesArray digits("AliEMCALDigit", 1);
- for (Int_t i = 0; i < fNEmbClusters; ++i) {
- Double_t pt = gRandom->Rndm() * (fPtMax - fPtMin) + fPtMin;
- Double_t eta = gRandom->Rndm() * (fEtaMax - fEtaMin) + fEtaMin;
- Double_t phi = gRandom->Rndm() * (fPhiMax - fPhiMin) + fPhiMin;
-
- TLorentzVector nPart;
- nPart.SetPtEtaPhiM(pt, eta, phi, 0);
- Double_t e = nPart.E();
-
- Int_t absId = 0;
- fGeom->GetAbsCellIdFromEtaPhi(eta, phi, absId);
-
- AliEMCALDigit *digit = static_cast<AliEMCALDigit*>(digits.New(0));
- digit->SetId(absId);
- digit->SetIndexInList(0);
- digit->SetType(AliEMCALDigit::kHG);
- digit->SetAmplitude(e);
-
- AliEMCALRecPoint recPoint;
- recPoint.AddDigit(*digit, e, kFALSE);
- recPoint.EvalGlobalPosition(0, &digits);
-
- TVector3 gpos;
- recPoint.GetGlobalPosition(gpos);
- Float_t g[3];
- gpos.GetXYZ(g);
-
- AliVCluster *cluster = static_cast<AliVCluster*>(fOutClusters->New(nClusters + i));
- cluster->SetType(AliVCluster::kEMCALClusterv1);
- cluster->SetE(recPoint.GetEnergy());
- cluster->SetPosition(g);
- cluster->SetNCells(1);
- UShort_t shortAbsId = absId;
- cluster->SetCellsAbsId(&shortAbsId);
- cluster->SetCellsAmplitudeFraction(NULL);
- cluster->SetID(nClusters + i);
- cluster->SetEmcCpvDistance(-1);
- cluster->SetChi2(100); // MC flag!
+
+ if (fNClusters > 0 && fOutClusters) {
+ if (fCopyArray)
+ CopyClusters();
+ for (Int_t i = 0; i < fNClusters; ++i) {
+ AddCluster();
}
}
- if (fNEmbTracks > 0 && fOutTracks) {
- Int_t nTracks = fOutTracks->GetEntriesFast();
- for (Int_t i = 0; i < fNEmbTracks; ++i) {
- Double_t pt = gRandom->Rndm() * (fPtMax - fPtMin) + fPtMin;
- Double_t eta = gRandom->Rndm() * (fEtaMax - fEtaMin) + fEtaMin;
- Double_t phi = gRandom->Rndm() * (fPhiMax - fPhiMin) + fPhiMin;
-
- new ((*fOutTracks)[nTracks + i]) AliPicoTrack(pt,
- eta,
- phi,
- 1,
- 100, // MC flag!
- 0,
- 0,
- kFALSE);
+ if (fNTracks > 0 && fOutTracks) {
+ if (fCopyArray)
+ CopyTracks();
+ for (Int_t i = 0; i < fNTracks; ++i) {
+ AddTrack();
}
}
}
-
-//________________________________________________________________________
-void AliJetEmbeddingTask::UserExec(Option_t *)
-{
- // Execute per event.
-
- Init();
-
- Embed();
-}