11 #include <AliAnalysisTaskSE.h> 12 #include <TParameter.h> 17 #include "AliVVertex.h" 18 #include <AliVEvent.h> 19 #include <AliAODEvent.h> 20 #include <AliVVertex.h> 21 #include <AliVertex.h> 22 #include <AliVMultiplicity.h> 23 #include <AliMultiplicity.h> 24 #include <AliAnalysisManager.h> 25 #include <AliVEventHandler.h> 26 #include <AliESDInputHandlerRP.h> 27 #include <AliITSMultRecBg.h> 28 #include <AliCDBManager.h> 29 #include <AliCDBEntry.h> 30 #include <AliCDBPath.h> 32 #include <AliGeomManager.h> 33 #include <AliAODHandler.h> 34 #include <TGeoManager.h> 35 #include <TGeoGlobalMagField.h> 37 #include <TProfile2D.h> 46 class AliMultiplicity;
47 class AliVMultiplicity;
48 class AliAnalysisDataContainer;
49 class AliITSMultRecBg;
52 class AliMultSelection;
55 class TGeoGlobalMagField;
250 return "alien://Folder=/alice/data/2010/OCDB";
314 const AliVVertex*
FindIP(AliVEvent* event,
368 AliMultiplicity* mult,
439 DefineOutput(1,TList::Class());
464 AliError(
"No analysis manager to connect to.");
468 dynamic_cast<AliAODHandler*
>(mgr->GetOutputEventHandler());
470 AliError(
"No AOD output handler!");
477 AliAnalysisDataContainer* sumCon =
478 mgr->CreateContainer(Form(
"%sSums", GetName()), TList::Class(),
479 AliAnalysisManager::kOutputContainer,
480 AliAnalysisManager::GetCommonFileName());
483 mgr->ConnectInput(
this, 0, mgr->GetCommonInputContainer());
484 mgr->ConnectOutput(
this, 1, sumCon);
491 Printf(
"%s: %s", ClassName(), GetName());
492 Printf(
" %22s: %d",
"Scale by sin^2(theta)",
fScaleDTheta);
493 Printf(
" %22s: %f",
"Delta phi shift",
fDPhiShift);
494 Printf(
" %22s: %f",
"max Delta",
fMaxDelta);
496 Printf(
" %22s: %f",
"Delta phi window",
fDPhiWindow);
499 Printf(
" %22s: %s",
"Filter strange",
520 AliWarning(
"Failed to initialize task on worker, making zombie");
528 AliInfo(
"Now initialising CDB");
531 AliError(
"No manager defined!");
536 const char* cdbNames[] = {
"CDBconnect",
"cdb", 0 };
537 const char** ptr = cdbNames;
540 if (cdbConnect && cdbConnect->IsA()->InheritsFrom(
"AliTaskCDBconnect")) {
541 AliInfoF(
"CDB-connect task (%s: %s) present, do nothing",
542 cdbConnect->ClassName(), *ptr);
548 AliInfo(
"Get the CDB manager");
549 AliCDBManager* cdbMgr = AliCDBManager::Instance();
551 AliError(
"Failed to get instance of CDB manager");
556 AliWarningF(
"Using reference CDB storage \"%s\" and run \"%d\"",
557 refUrl.Data(), refRun);
562 cdbMgr->SetDefaultStorage(refUrl);
564 AliInfo(
"Get Geometry entry");
565 AliCDBEntry* cdbEnt = cdbMgr->Get(
"GRP/Geometry/Data", refRun);
567 AliErrorF(
"No geometry found from %d", refRun);
571 AliInfo(
"Set Geometry");
572 AliGeomManager::SetGeometry(static_cast<TGeoManager*>(cdbEnt->GetObject()));
574 AliInfo(
"Misalign geometry");
575 if (!AliGeomManager::ApplyAlignObjsToGeom(
"ITS",refRun,-1,-1)) {
576 AliErrorF(
"Failed to misalign geometry from %d", refRun);
589 dynamic_cast<AliAODHandler*
>(am->GetOutputEventHandler());
591 AliWarning(
"No AOD output handler set in analysis manager");
594 ah->AddBranch(
"TClonesArray", &obj);
615 fStatus->GetXaxis()->SetBinLabel(
kIP +1,
"w/IP");
623 new TProfile2D(
"clustersVsTracklets",
624 "Correlation of clusters and tracklets",
645 AliWarning(
"Tracklets container not initialized, init must have failed!");
660 if (!event)
return false;
664 const AliVVertex* ip =
FindIP(event);
666 if (fDebug > 0) AliInfoF(
"Cluster tree: %p, ip: %p", clusters, ip);
667 if (!ip)
return false;
670 if (fDebug > 1) AliInfoF(
"After geo check: %d", ret);
671 if (ret && !
HasField(event)) ret =
false;
672 if (fDebug > 1) AliInfoF(
"After field check: %d", ret);
675 if (fDebug > 1) AliInfoF(
"After reconstruction: %d", ret);
682 if (fDebug > 1) AliInfoF(
"Return value: %d", ret);
689 if (!AliGeomManager::GetGeometry()) {
690 AliError(
"No geometry loaded, needed for reconstruction");
691 AliError(
"Add the AliTaskCDBconnect to the train");
699 if (!TGeoGlobalMagField::Instance()->GetField() &&
700 !event->InitMagneticField()) {
701 AliWarning(
"Failed to initialize magnetic field");
710 AliVEvent*
event = InputEvent();
711 if (fDebug > 0 && !event) AliWarning(
"No event");
719 AliVEventHandler* inh = mgr->GetInputEventHandler();
720 if (!inh->IsA()->InheritsFrom(AliESDInputHandlerRP::Class())) {
722 AliWarningF(
"Clusters not available via input handler of class: %s",
726 AliESDInputHandlerRP* rph =
static_cast<AliESDInputHandlerRP*
>(inh);
727 TTree* tree = rph->GetTreeR(
"ITS");
729 AliWarning(
"Tree of clusters (rec.points) not found");
741 const AliVVertex* ip =
event->GetPrimaryVertex();
743 if (ip->GetNContributors() <= 0) {
745 AliWarning(
"Not enough contributors for IP");
749 if (ip->IsFromVertexerZ()) {
752 ip->GetCovarianceMatrix(covar);
753 Double_t sigmaZ = TMath::Sqrt(covar[5]);
754 if (sigmaZ >= maxZError) {
756 AliWarningF(
"IPz resolution = %f >= %f", sigmaZ, maxZError);
761 if (ip->IsA()->InheritsFrom(AliVertex::Class())) {
762 const AliVertex* ipv =
static_cast<const AliVertex*
>(ip);
764 if (ipv->GetDispersion() >= maxDispersion) {
766 AliWarningF(
"IP dispersion = %f >= %f",
767 ipv->GetDispersion(), maxDispersion);
776 if (ip->GetZ() < fIPzAxis.GetXmin() || ip->GetZ() > fIPzAxis.GetXmax()) {
777 AliWarningF(
"IPz = %fcm out of range [%f,%f]cm",
778 ip->GetZ(), fIPzAxis.GetXmin(), fIPzAxis.GetXmax());
793 dynamic_cast<AliAODHandler*
>(am->GetOutputEventHandler());
794 if (!ah)
return false;
795 ah->SetFillAOD(kTRUE);
796 if (fDebug > 0) AliInfo(
"Storing event");
810 AliInfoF(
"Reconstructing from cluster tree %p with (%4.2f,%4.2f,%7.4f",
811 clusters, ipv[0], ipv[1], ipv[2]);
815 AliITSMultRecBg reco;
816 reco.SetCreateClustersCopy (
true);
826 reco.SetHistOn (
false);
830 reco.Run(clusters, ipv);
833 reco.GetNClustersLayer2(),
834 reco.GetMultiplicity()->GetNumberOfTracklets());
840 AliWarning(
"Process tracklets (normal) failed");
846 reco.SetRecType(AliITSMultRecBg::kBgInj);
847 reco.Run(clusters, ipv);
852 AliWarning(
"Process tracklets (injection) failed");
855 if (fDebug > 1) AliInfo(
"Returning true");
861 AliVMultiplicity* vmult)
868 AliMultiplicity* mult =
static_cast<AliMultiplicity*
>(vmult);
869 Int_t nTracklets = mult->GetNumberOfTracklets();
870 for (
Int_t trackletNo = 0; trackletNo < nTracklets; trackletNo++) {
874 Int_t n0 = mult->GetNumberOfITSClusters(0);
875 Int_t n1 = mult->GetNumberOfITSClusters(1);
877 Printf(
"%d x %d clusters -> %d", n0, n1, nTracklets);
878 if (n0 > 0 || n1 >> 0)
895 AliMultiplicity* mult,
900 Double_t dTheta = mult->GetDeltaTheta(no);
901 Double_t dPhi = mult->GetDeltaPhi (no);
902 Double_t delta = mult->CalcDist (no);
919 #include <AliStack.h> 920 #include <AliMCEvent.h> 921 #include <AliGenEventHeader.h> 923 #include <TParticle.h> 924 #include <TParticlePDG.h> 925 #include <TDatabasePDG.h> 926 #include <AliITSgeomTGeo.h> 1018 Bool_t ProcessGenerated();
1042 virtual void FilterClustersRandom(
TTree* t,
TTree* copy,
1057 virtual void FilterClustersTrack(
TTree* t,
TTree* copy,
1072 Double_t LookupWeight(TParticle* particle,
1095 return "alien://Folder=/alice/simulation/2008/v4-15-Release/Residual";
1126 AliMultiplicity* mult,
1142 Int_t FindPrimaryParentID(
Int_t label)
const;
1151 TParticle* FindPrimaryParent(
Int_t label)
const;
1202 #define ADDP(P,M,L,Q) \ 1203 db->AddParticle("p" #P, "p" #P,M,false,L,Q,"Baryon",P); \ 1204 db->AddAntiParticle("p" #P "_bar", -P) 1212 TAxis layerAxis(2,0,2);
1213 layerAxis.SetBinLabel(1,
"Layer 0");
1214 layerAxis.SetBinLabel(2,
"Layer 1");
1217 "Seen track PDGs", kGreen+1,20, pdgAxis);
1219 "Used track PDGs", kBlue+1,24, pdgAxis);
1221 "Seen cluster PDGs", kGreen+1,21,pdgAxis,layerAxis);
1223 "Used cluster PDGs", kBlue+1,25,pdgAxis,layerAxis);
1227 TDatabasePDG* db = TDatabasePDG::Instance();
1228 db->GetParticle(2212);
1229 db->AddParticle(
"deut",
"deut",1.876560,
false,0.000000,3,
"Baryon",1000010020);
1230 db->AddAntiParticle(
"deut_bar",-1000010020);
1231 db->AddParticle(
"trit",
"trit",2.816700,
false,0.000000,3,
"Baryon",1000010030);
1232 db->AddAntiParticle(
"trit_bar",-1000010030);
1233 db->AddParticle(
"alph",
"alph",3.755000,
false,0.000000,6,
"Baryon",1000020040);
1234 db->AddAntiParticle(
"alph_bar",-1000020040);
1235 ADDP(32224, 1.524000,0.145000,6);
1236 ADDP(12224, 1.816000,0.350000,6);
1237 ADDP(12222, 2.108000,0.350000,6);
1238 ADDP(12212, 1.525720,0.145000,3);
1239 ADDP(2124, 1.819440,0.150000,3);
1240 ADDP(32214, 2.113160,0.150000,3);
1241 ADDP(32212, 2.406880,0.145000,3);
1242 ADDP(12214, 2.700600,0.300000,3);
1243 ADDP(22124, 2.994320,0.150000,3);
1244 ADDP(12122, 3.288040,0.300000,3);
1245 ADDP(13222, 1.575200,0.080000,3);
1246 ADDP(23222, 1.768100,0.100000,3);
1247 ADDP(13226, 1.961000,0.170000,3);
1248 ADDP(12112, 1.524430,0.350000,0);
1249 ADDP(1214, 1.816860,0.150000,0);
1250 ADDP(32114, 2.109290,0.150000,0);
1251 ADDP(32112, 2.401720,0.145000,0);
1252 ADDP(12114, 2.694150,0.300000,0);
1253 ADDP(21214, 2.986579,0.150000,0);
1254 ADDP(11212, 3.279010,0.300000,0);
1255 ADDP(13122, 1.761000,0.040000,0);
1256 ADDP(3124, 1.950500,0.016000,0);
1257 ADDP(23122, 2.140000,0.090000,0);
1258 ADDP(13212, 2.329500,0.080000,0);
1259 ADDP(23212, 2.519000,0.100000,0);
1260 ADDP(43122, 2.708500,0.145000,0);
1261 ADDP(13216, 2.898000,0.170000,0);
1262 ADDP(31114, 1.524000,0.145000,-3);
1263 ADDP(11114, 1.816000,0.350000,-3);
1264 ADDP(11112, 2.108000,0.350000,-3);
1265 ADDP(13112, 1.577600,0.080000,-3);
1266 ADDP(23112, 1.767700,0.100000,-3);
1267 ADDP(13116, 1.957800,0.170000,-3);
1268 ADDP(9900110,0.000000,0.000000,0);
1269 ADDP(9900210,0.000000,0.000000,0);
1270 ADDP(9900220,0.000000,0.000000,0);
1271 ADDP(9900330,0.000000,0.000000,0);
1272 ADDP(9900440,0.000000,0.000000,0);
1273 ADDP(9902210,0.000000,0.000000,0);
1274 ADDP(9902110,0.000000,0.000000,0);
1275 ADDP(88, 0.000000,0.000000,0);
1276 ADDP(90, 0.000000,0.000000,0);
1277 ADDP(990, 0.000000,0.000000,0);
1278 ADDP(99999, 0.000000,0.000000,0);
1288 if (fDebug > 0) AliInfo(
"Returning original cluster tree");
1292 TDirectory* savDir = gDirectory;
1295 copy->SetAutoFlush(0);
1299 if (MCEvent()->GenEventHeader()) {
1301 MCEvent()->GenEventHeader()->PrimaryVertex(v);
1305 if (
fFilterMode == 1) FilterClustersRandom(t, copy, cent, ipz);
1306 else FilterClustersTrack(t, copy, cent, ipz);
1310 AliInfoF(
"Returning reduced cluster tree %p (original %p)", copy, t);
1322 TClonesArray* in =
new TClonesArray(
"AliITSRecPoint");
1323 TClonesArray* out =
new TClonesArray(
"AliITSRecPoint");
1325 copy->Branch(
"ITSRecPoints", &out);
1326 t->SetBranchAddress(
"ITSRecPoints", &in);
1330 Int_t min1 = AliITSgeomTGeo::GetModuleIndex(1,1,1);
1331 Int_t max1 = AliITSgeomTGeo::GetModuleIndex(2,1,1);
1332 Int_t min2 = AliITSgeomTGeo::GetModuleIndex(2,1,1);
1333 Int_t max2 = AliITSgeomTGeo::GetModuleIndex(3,1,1);
1338 for (
Int_t i = 0; i < max2; i++) {
1347 Int_t inN = in->GetEntries();
1348 for (
Int_t j = 0; j < inN; j++) {
1349 AliITSRecPoint* inCl =
static_cast<AliITSRecPoint*
>(in->At(j));
1350 if (!inCl)
continue;
1354 for (
Int_t k = 0; k < 3; k++) {
1355 Int_t label = inCl->GetLabel(k);
1356 if (label <= 0)
continue;
1359 TParticle* parent = FindPrimaryParent(label);
1360 if (!parent)
continue;
1363 weight *= LookupWeight(parent,cent,ipz);
1365 Printf(
"Cluster from %+5d: %7.5f", parent->GetPdgCode(), weight);
1372 if (!KeepIt(weight))
continue;
1375 new ((*out)[outN++]) AliITSRecPoint(*inCl);
1382 Printf(
"Kept %d out of %d clusters from strange primaries (%4.1f%%)",
1383 nKept, nTotal, 100.*loss);
1396 TClonesArray* in =
new TClonesArray(
"AliITSRecPoint");
1397 TClonesArray* out =
new TClonesArray(
"AliITSRecPoint");
1399 copy->Branch(
"ITSRecPoints", &out);
1400 t->SetBranchAddress(
"ITSRecPoints", &in);
1405 AliStack*
stack = MCEvent()->Stack();
1406 Int_t nTracks = stack->GetNtrack();
1407 TBits kept(nTracks);
1408 TBits seen(nTracks);
1409 kept.ResetAllBits(
true);
1410 seen.ResetAllBits(
false);
1412 for (
Int_t trackNo = nTracks; trackNo--; ) {
1414 Int_t parent = FindPrimaryParentID(trackNo);
1415 if (parent < 0)
continue;
1417 if (seen.TestBitNumber(parent))
continue;
1418 seen.SetBitNumber(parent,
true);
1421 TParticle* par = stack->Particle(parent);
1423 Double_t weight = LookupWeight(par,cent,ipz);
1427 keep = KeepIt(weight);
1431 fSeenTrackPDGs->Fill(bin);
1432 if (keep) fUsedTrackPDGs->Fill(bin);
1434 Printf(
"Primary parent %6d from a %6d %6s (%f)",
1435 parent, par->GetPdgCode(), keep ?
"kept" :
"marked", weight);
1436 kept.SetBitNumber(parent, keep);
1437 par->SetWeight(keep ? 1 : weight);
1442 if (fDebug > 0 && nTotal > 0) {
1444 Printf(
"Kept %d out of %d strange primaries (%4.1f%% loss)",
1445 nKept, nTotal, 100.*loss);
1451 Int_t min1 = AliITSgeomTGeo::GetModuleIndex(1,1,1);
1452 Int_t max1 = AliITSgeomTGeo::GetModuleIndex(2,1,1);
1453 Int_t min2 = AliITSgeomTGeo::GetModuleIndex(2,1,1);
1454 Int_t max2 = AliITSgeomTGeo::GetModuleIndex(3,1,1);
1458 for (
Int_t i = 0; i < max2; i++) {
1467 Int_t inN = in->GetEntries();
1469 for (
Int_t j = 0; j < inN; j++) {
1470 AliITSRecPoint* inCl =
static_cast<AliITSRecPoint*
>(in->At(j));
1471 if (!inCl)
continue;
1476 for (
Int_t k = 0; k < 3; k++) {
1477 Int_t label = inCl->GetLabel(k);
1478 if (label <= 0)
continue;
1481 Int_t parent = FindPrimaryParentID(label);
1482 if (parent < 0)
continue;
1484 if (pdg == 0) pdg = stack->Particle(parent)->GetPdgCode();
1485 if (!kept.TestBitNumber(parent)) toRemove =
true;
1487 Printf(
"Cluster %6d from parent %6d (%7.5f) of type %6d %s",
1489 stack->Particle(parent)->GetPdgCode(),
1490 stack->Particle(parent)->GetWeight(),
1491 toRemove ?
"removed" :
"kept");
1498 Printf(
"Cluster %2d/%3d from %4d is %s",
1499 i, j, pdg, toRemove ?
"removed" :
"kept");
1500 fSeenClusterPDGs->Fill(
PdgBin(pdg), i < max1);
1501 if (toRemove)
continue;
1502 fUsedClusterPDGs->Fill(
PdgBin(pdg), i < max1);
1503 new ((*out)[outN++]) AliITSRecPoint(*inCl);
1510 Printf(
"Wrote out %6d out of %6d clusters (%4.1f%% loss)",
1511 outT, inT, (inT > 0 ? 100*
float(inT-outT)/inT : 100));
1522 if (!fFilterWeights)
return 1;
1523 return fFilterWeights->LookupWeight(particle,cent,ipz);
1525 const Double_t k0s = 1.52233299626516083e+00;
1526 const Double_t kpm = (1.43744204476109627e+00*
1527 9.82150320171071400e-01);
1528 const Double_t lam = 2.75002089647900005e+00;
1529 const Double_t sig = 2.75002089647899961e+00;
1530 const Double_t xi = 3.24109605656453548e+00;
1532 switch (TMath::Abs(particle->GetPdgCode())) {
1533 case 310:
return k0s;
1534 case 321:
return kpm;
1535 case 3122:
return lam;
1538 case 3222:
return sig;
1539 case 3312:
return xi;
1550 if (weight <= 1)
return true;
1552 return (
gRandom->Uniform() >= chance);
1570 if (!ProcessGenerated())
return false;
1578 if (fDebug > 0) AliInfo(
"Processing generated particles");
1579 AliStack*
stack = MCEvent()->Stack();
1580 Int_t nTracks = stack->GetNtrack();
1581 for (
Int_t trackNo = nTracks; trackNo--; ) {
1582 if (!stack->IsPhysicalPrimary(trackNo)) {
1588 TParticle* particle = stack->Particle(trackNo);
1590 AliWarningF(
"No particle found for track # %d", trackNo);
1593 TParticlePDG*
pdg = particle->GetPDG();
1595 AliWarningF(
"Unknown PDG code: %d", particle->GetPdgCode());
1604 Double_t theta = particle->Theta();
1606 if (theta < 1e-6 || TMath::Abs(theta-TMath::Pi()) < 1e-6) {
1608 AliWarningF(
"Track # %6d is beam-like (%f)", trackNo,
1609 TMath::RadToDeg()*theta);
1612 Double_t eta = -TMath::Log(TMath::ATan(theta/2));
1615 if (TMath::Abs(eta) > 3)
continue;
1629 if (pdg && pdg->Charge() == 0) mc->
SetNeutral();
1631 if (fDebug > 2) AliInfo(
"Returning true from generated");
1645 AliMultiplicity* mult,
1650 if (!normal)
return tracklet;
1653 Int_t label0 = mult->GetLabel(no, 0);
1654 Int_t label1 = mult->GetLabel(no, 1);
1655 TParticle* parent0 = FindPrimaryParent(label0);
1660 if (label0 != label1) {
1661 TParticle* parent1 = FindPrimaryParent(label1);
1675 Int_t clus0 =
Int_t(ftrack[AliITSMultReconstructor::kClID1]);
1676 Int_t clus1 =
Int_t(ftrack[AliITSMultReconstructor::kClID2]);
1679 AliITSMultReconstructor::kClMC0);
1681 AliITSMultReconstructor::kClMC0);
1684 for (
Int_t i = 0; i < 3; i++)
1685 offset = FindParents(
Int_t(fclus0[i]), parents, offset);
1688 for (
Int_t i = 0; i < 3; i++) {
1691 if (flbl > nextafter(INT_MAX, 0) || flbl < nextafter(INT_MIN, 0))
1693 if (CommonParent(
Int_t(flbl), parents)) {
1703 if (!MCEvent()->Stack()->IsPhysicalPrimary(label0))
1712 AliStack*
stack = MCEvent()->Stack();
1713 Int_t nTracks = stack->GetNtrack();
1714 TParticle* particle = stack->Particle(label);
1715 if (!particle)
return -1;
1716 Int_t ret = particle->GetFirstMother();
1717 if (ret > nTracks)
return -1;
1730 while (i < fill.GetSize()-1 && lbl >= 1) {
1733 lbl = FindParent(lbl);
1748 while (i < fill.GetSize()-1 && lbl >= 1) {
1751 for (
Int_t j = 0; j < fill.GetSize(); j++) {
1752 if (fill[j] == lbl)
return j;
1755 lbl = FindParent(lbl);
1768 Int_t parent = FindPrimaryParentID(label);
1769 if (parent < 0)
return 0;
1770 return MCEvent()->Stack()->Particle(parent);
1775 AliStack*
stack = MCEvent()->Stack();
1776 Int_t nTracks = stack->GetNtrack();
1777 Int_t trackNo = label;
1778 if (trackNo > nTracks || trackNo <= 0)
return 0;
1779 TParticle* particle = stack->Particle(label);
1780 while (!stack->IsPhysicalPrimary(trackNo)) {
1781 trackNo = particle->GetFirstMother();
1783 if (trackNo < 0)
return 0;
1785 particle = stack->Particle(trackNo);
1794 ::Error(
"Create",
"No analysis manager to connect to.");
1798 dynamic_cast<AliAODHandler*
>(mgr->GetOutputEventHandler());
1800 ::Error(
"Create",
"No AOD output handler!");
1804 Bool_t mc = mgr->GetMCtruthEventHandler() != 0;
1810 if (weights && weights[0] !=
'\0') {
1812 TFile* wfile = TFile::Open(wurl.GetFile());
1814 ::Warning(
"Create",
"Failed to open weights file: %s",
1818 TString wnam(wurl.GetAnchor());
1819 if (wnam.IsNull()) wnam =
"weights";
1821 TObject* wobj = wfile->Get(wnam);
1823 ::Warning(
"Create",
"Failed to get weights %s from file %s",
1824 wnam.Data(), wfile->GetName());
1827 if (!wobj->IsA()->InheritsFrom(AliTrackletBaseWeights::Class())) {
1828 ::Warning(
"Create",
"Object %s from file %s not an " 1829 "AliTrackletBaseWeights but a %s",
1830 wnam.Data(), wfile->GetName(), wobj->ClassName());
static const TAxis & PdgAxis()
void SetPhiOverlapCut(Double_t x=0.005)
static TH2 * Make2D(Container *c, const TString &name, const TString &title, Color_t color, Style_t style, const TAxis &xAxis, const TAxis &yAxis)
Bool_t ProcessGenerated()
void UserExec(Option_t *)
virtual const char * GetCDBReferenceURL() const
Int_t FindPrimaryParentID(Int_t label) const
virtual AliAODTracklet * MakeTracklet(Bool_t normal)
virtual Bool_t WorkerInit()
Int_t FindParent(Int_t label) const
static AliTrackletAODTask * Create(const char *weights="")
void SetParentPdg(Short_t pdg, Bool_t second=false)
AliTrackletAODTask & operator=(const AliTrackletAODTask &other)
Bool_t KeepIt(Double_t weight) const
AliTrackletAODMCTask(const char *name)
void SetDPhiWindow(Double_t x=0.06)
void SetDPhiShift(Double_t x=0.0045)
virtual void CleanClusters(TTree *&t)
virtual Bool_t ProcessEvent()
TString kData
Declare data MC or deltaAOD.
virtual void SetFilterWeights(AliTrackletBaseWeights *w)
Utilities for midrapidity analysis.
virtual TTree * FilterClusters(TTree *t)
TParticle * FindPrimaryParent(Int_t label) const
virtual void SetFilterWeights(AliTrackletBaseWeights *w)
virtual const char * TrackletClassName() const
Int_t CommonParent(Int_t label, const TArrayI &fill) const
virtual AliAODTracklet * ProcessTracklet(Bool_t normal, AliMultiplicity *mult, Int_t no)
void SetZEtaOverlapCut(Double_t x=0.05)
Encode simulation weights for 2nd pass.
Bool_t ProcessTracklets(Bool_t normal, AliVMultiplicity *mult)
virtual void FilterClustersTrack(TTree *t, TTree *copy, Double_t cent, Double_t ipz)
TParameter< double > * fStrangeLoss
virtual Bool_t ProcessEvent()
virtual Int_t GetCDBReferenceRun() const
void SetParentPt(Real_t pt, Bool_t second=false)
void UserCreateOutputObjects()
AliTrackletBaseWeights * fFilterWeights
virtual AliAODTracklet * MakeTracklet(Bool_t normal)
TProfile2D * fNClustersVsNTracklets
void SetScaleDTheta(Bool_t x=false)
void SetDThetaWindow(Double_t x=0.025)
const AliVVertex * FindIP(AliVEvent *event, Double_t maxDispersion=0.04, Double_t maxZError=0.25)
virtual void CleanClusters(TTree *&t)
Bool_t HasField(AliVEvent *event)
TClonesArray * fTracklets
void SetMaxDelta(Double_t x=25)
virtual AliAODTracklet * ProcessTracklet(Bool_t normal, AliMultiplicity *mult, Int_t no)
virtual TTree * FilterClusters(TTree *t)
static Int_t PdgBin(Int_t pdg)
void Print(Option_t *) const
virtual const char * GetCDBReferenceURL() const
AliTrackletAODMCTask(const AliTrackletAODMCTask &other)
virtual void SetFilterMode(Int_t mode)
Bool_t Reconstruct(TTree *clusters, const AliVVertex *ip)
AliTrackletAODMCTask & operator=(const AliTrackletAODMCTask &other)
Double_t LookupWeight(TParticle *particle, Double_t cent=0, Double_t ipz=0) const
static TH1 * Make1D(Container *c, const TString &name, const TString &title, Color_t color, Style_t style, const TAxis &xAxis)
static void FixAxis(TAxis &axis, const char *title=0)
Int_t FindParents(Int_t label, TArrayI &fill, Int_t offset) const
virtual void FilterClustersRandom(TTree *t, TTree *copy, Double_t cent, Double_t ipz)
virtual const char * TrackletClassName() const
void Terminate(Option_t *)