#include "AliAnaElectron.h" \r
#include "AliCaloTrackReader.h"\r
#include "AliMCAnalysisUtils.h"\r
-#include "AliAODCaloCluster.h"\r
+#include "AliVCluster.h"\r
#include "AliFiducialCut.h"\r
#include "AliAODTrack.h"\r
#include "AliAODPid.h"\r
fhPtNPE(0),fhPhiNPE(0),fhEtaNPE(0),\r
fhPtPE(0),fhPhiPE(0),fhEtaPE(0),\r
//for comparisons with tracking detectors\r
- fhPtTrack(0),fhPtHadron(0),fhPtNPEleTPC(0),fhPtNPEleTPCTRD(0),fhPtNPEleTTE(0),\r
+ fhPtHadron(0),fhPtNPEleTPC(0),fhPtNPEleTPCTRD(0),fhPtNPEleTTE(0),\r
fhPtNPEleEMCAL(0),\r
//DVM B-tagging\r
fhDVMBtagCut1(0),fhDVMBtagCut2(0),fhDVMBtagCut3(0),fhDVMBtagQA1(0),fhDVMBtagQA2(0),\r
//reco electrons from various sources\r
fhPhiConversion(0),fhEtaConversion(0),\r
//for comparisons with tracking detectors\r
+ fhPtTrack(0),\r
fhPtNPEBHadron(0),\r
//for computing efficiency of B-jet tags\r
fhBJetPt1x4(0),fhBJetPt2x3(0),fhBJetPt3x2(0),\r
InitParameters();\r
\r
}\r
-\r
+/*\r
//____________________________________________________________________________\r
AliAnaElectron::AliAnaElectron(const AliAnaElectron & g) \r
: AliAnaPartCorrBaseClass(g),fCalorimeter(g.fCalorimeter),\r
return *this;\r
\r
}\r
+*/\r
\r
//____________________________________________________________________________\r
AliAnaElectron::~AliAnaElectron() \r
\r
}\r
\r
+//________________________________________________________________________\r
+TObjString * AliAnaElectron::GetAnalysisCuts()\r
+{\r
+ //Save parameters used for analysis\r
+ TString parList ; //this will be list of parameters used for this analysis.\r
+ const Int_t buffersize = 255; \r
+ char onePar[buffersize] ;\r
+ \r
+ snprintf(onePar,buffersize,"--- AliAnaElectron ---\n") ;\r
+ parList+=onePar ; \r
+ snprintf(onePar,buffersize,"fCalorimeter: %s\n",fCalorimeter.Data()) ;\r
+ parList+=onePar ; \r
+ snprintf(onePar,buffersize,"fpOverEmin: %f\n",fpOverEmin) ;\r
+ parList+=onePar ; \r
+ snprintf(onePar,buffersize,"fpOverEmax: %f\n",fpOverEmax) ;\r
+ parList+=onePar ; \r
+ snprintf(onePar,buffersize,"fResidualCut: %f\n",fResidualCut) ;\r
+ parList+=onePar ; \r
+ snprintf(onePar,buffersize,"fMinClusEne: %f\n",fMinClusEne) ;\r
+ parList+=onePar ;\r
+ snprintf(onePar,buffersize,"---DVM Btagging\n");\r
+ parList+=onePar ;\r
+ snprintf(onePar,buffersize,"max IP-cut (e,h): %f\n",fImpactCut);\r
+ parList+=onePar ;\r
+ snprintf(onePar,buffersize,"min ITS-hits: %d\n",fITSCut);\r
+ parList+=onePar ;\r
+ snprintf(onePar,buffersize,"max dR (e,h): %f\n",fDrCut);\r
+ parList+=onePar ;\r
+ snprintf(onePar,buffersize,"max pairDCA: %f\n",fPairDcaCut);\r
+ parList+=onePar ;\r
+ snprintf(onePar,buffersize,"max decaylength: %f\n",fDecayLenCut);\r
+ parList+=onePar ;\r
+ snprintf(onePar,buffersize,"min Associated Pt: %f\n",fAssocPtCut);\r
+ parList+=onePar ;\r
+ snprintf(onePar,buffersize,"---IPSig Btagging\n");\r
+ parList+=onePar ;\r
+ snprintf(onePar,buffersize,"min tag track: %d\n",fNTagTrkCut);\r
+ parList+=onePar ;\r
+ snprintf(onePar,buffersize,"min IP significance: %f\n",fIPSigCut);\r
+ parList+=onePar ;\r
+ //\r
+ //Get parameters set in base class.\r
+ parList += GetBaseParametersList() ;\r
+ \r
+ //Get parameters set in FiducialCut class (not available yet)\r
+ //parlist += GetFidCut()->GetFidCutParametersList() \r
+ \r
+ return new TObjString(parList) ;\r
+ \r
+}\r
\r
//________________________________________________________________________\r
TList * AliAnaElectron::GetCreateOutputObjects()\r
\r
}//Histos with MC\r
\r
- //Save parameters used for analysis\r
- TString parList ; //this will be list of parameters used for this analysis.\r
- char onePar[500] ;\r
- \r
- sprintf(onePar,"--- AliAnaElectron ---\n") ;\r
- parList+=onePar ; \r
- sprintf(onePar,"fCalorimeter: %s\n",fCalorimeter.Data()) ;\r
- parList+=onePar ; \r
- sprintf(onePar,"fpOverEmin: %f\n",fpOverEmin) ;\r
- parList+=onePar ; \r
- sprintf(onePar,"fpOverEmax: %f\n",fpOverEmax) ;\r
- parList+=onePar ; \r
- sprintf(onePar,"fResidualCut: %f\n",fResidualCut) ;\r
- parList+=onePar ; \r
- sprintf(onePar,"fMinClusEne: %f\n",fMinClusEne) ;\r
- parList+=onePar ;\r
- sprintf(onePar,"---DVM Btagging\n");\r
- parList+=onePar ;\r
- sprintf(onePar,"max IP-cut (e,h): %f\n",fImpactCut);\r
- parList+=onePar ;\r
- sprintf(onePar,"min ITS-hits: %d\n",fITSCut);\r
- parList+=onePar ;\r
- sprintf(onePar,"max dR (e,h): %f\n",fDrCut);\r
- parList+=onePar ;\r
- sprintf(onePar,"max pairDCA: %f\n",fPairDcaCut);\r
- parList+=onePar ;\r
- sprintf(onePar,"max decaylength: %f\n",fDecayLenCut);\r
- parList+=onePar ;\r
- sprintf(onePar,"min Associated Pt: %f\n",fAssocPtCut);\r
- parList+=onePar ;\r
- sprintf(onePar,"---IPSig Btagging\n");\r
- parList+=onePar ;\r
- sprintf(onePar,"min tag track: %d\n",fNTagTrkCut);\r
- parList+=onePar ;\r
- sprintf(onePar,"min IP significance: %f\n",fIPSigCut);\r
- parList+=onePar ;\r
-\r
- //Get parameters set in base class.\r
- parList += GetBaseParametersList() ;\r
- \r
- //Get parameters set in FiducialCut class (not available yet)\r
- //parlist += GetFidCut()->GetFidCutParametersList() \r
- \r
- TObjString *oString= new TObjString(parList) ;\r
- outputContainer->Add(oString);\r
- \r
+\r
return outputContainer ;\r
\r
}\r
// Also fill some QA histograms\r
//\r
\r
- TObjArray *cl = new TObjArray();\r
-\r
Double_t bfield = 0.;\r
if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) bfield = GetReader()->GetBField();\r
\r
printf("This class not yet implemented for PHOS\n");\r
abort();\r
}\r
- cl = GetAODEMCAL();\r
+ \r
+ TObjArray *cl = GetAODEMCAL();\r
\r
////////////////////////////////////////////////\r
//Start from tracks and get associated clusters \r
if(IsDataMC()) {\r
//Input from second AOD?\r
Int_t input = 0;\r
- if(GetReader()->GetAODCTSNormalInputEntries() <= itrk) input = 1;\r
+ //if(GetReader()->GetAODCTSNormalInputEntries() <= itrk) input = 1;\r
tmctag = GetMCAnalysisUtils()->CheckOrigin(track->GetLabel(),GetReader(),input);\r
\r
if(trkChgHad) fhPtHadron->Fill(track->Pt(),GetMCSource(tmctag));\r
Double_t minPt = -1;\r
\r
for(Int_t iclus = 0; iclus < ntot; iclus++) {\r
- AliAODCaloCluster * clus = (AliAODCaloCluster*) (cl->At(iclus));\r
+ AliVCluster * clus = (AliVCluster*) (cl->At(iclus));\r
if(!clus) continue;\r
\r
//As of 11-Oct-2009\r
if (clus->GetM20() < 0.03 ) continue;\r
if (clus->GetM02() < 0.03 ) continue;\r
\r
- Double_t x[3];\r
+ Float_t x[3];\r
clus->GetPosition(x);\r
TVector3 cluspos(x[0],x[1],x[2]);\r
Double_t deta = teta - cluspos.Eta();\r
if(IsDataMC()) { \r
//Do you want the cluster or the track label?\r
Int_t input = 0;\r
- if(GetReader()->GetAODEMCALNormalInputEntries() <= iclus) input = 1;\r
- cmctag = GetMCAnalysisUtils()->CheckOrigin(clus->GetLabel(0),GetReader(),input);\r
+ //if(GetReader()->GetAODEMCALNormalInputEntries() <= iclus) input = 1;\r
+ cmctag = GetMCAnalysisUtils()->CheckOrigin(clus->GetLabel(),GetReader(),input);\r
}\r
\r
if(fWriteNtuple) {\r
tr.SetDetector("CTS"); //PID determined by CTS\r
}\r
\r
- if(GetReader()->GetAODCTSNormalInputEntries() <= itrk) tr.SetInputFileIndex(1);\r
+ //if(GetReader()->GetAODCTSNormalInputEntries() <= itrk) tr.SetInputFileIndex(1);\r
//Make this preserve sign of particle\r
if(track->Charge() < 0) tr.SetPdg(11); //electron is 11\r
else tr.SetPdg(-11); //positron is -11\r
\r
Double_t vertex[3] = {-999.,-999.,-999}; //vertex\r
if(GetReader()->GetDataType() != AliCaloTrackReader::kMC) {\r
- GetReader()->GetVertex(vertex); //If only one file, get the vertex from there\r
+ GetVertex(vertex); //If only one file, get the vertex from there\r
//FIXME: Add a check for whether file 2 is PYTHIA or HIJING\r
//If PYTHIA, then set the vertex from file 2, if not, use the\r
//vertex from file 1\r
- if(GetReader()->GetSecondInputAODTree()) GetReader()->GetSecondInputAODVertex(vertex);\r
+ //if(GetReader()->GetSecondInputAODTree()) GetReader()->GetSecondInputAODVertex(vertex);\r
}\r
\r
TVector3 primV(vertex[0],vertex[1],vertex[2]) ;\r
{\r
//Get the number of AliAODMCParticles, if any\r
Int_t num = 0;\r
-\r
+ Int_t npart0 = 0;\r
TClonesArray * mcparticles0 = 0x0;\r
- TClonesArray * mcparticles1 = 0x0;\r
+// TClonesArray * mcparticles1 = 0x0;\r
\r
if(GetReader()->ReadAODMCParticles()){\r
//Get the list of MC particles\r
// \r
mcparticles0 = GetReader()->GetAODMCParticles(0);\r
- if(!mcparticles0 && GetDebug() > 0) {\r
- printf("AliAnaElectron::MakeAnalysisFillHistograms() - Standard MCParticles not available!\n");\r
+ if(!mcparticles0) {\r
+ if(GetDebug() > 0) printf("AliAnaElectron::MakeAnalysisFillHistograms() - Standard MCParticles not available!\n");\r
}\r
- if(GetReader()->GetSecondInputAODTree()){\r
- mcparticles1 = GetReader()->GetAODMCParticles(1);\r
- if(!mcparticles1 && GetDebug() > 0) {\r
- printf("AliAnaElectron::MakeAnalysisFillHistograms() - Second input MCParticles not available!\n");\r
- }\r
+// if(GetReader()->GetSecondInputAODTree()){\r
+// mcparticles1 = GetReader()->GetAODMCParticles(1);\r
+// if(!mcparticles1 && GetDebug() > 0) {\r
+// printf("AliAnaElectron::MakeAnalysisFillHistograms() - Second input MCParticles not available!\n");\r
+// }\r
+// }\r
+ else{\r
+ npart0 = mcparticles0->GetEntriesFast();\r
}\r
-\r
- Int_t npart0 = mcparticles0->GetEntriesFast();\r
- Int_t npart1 = 0;\r
- if(mcparticles1) npart1 = mcparticles1->GetEntriesFast();\r
- Int_t npart = npart0+npart1;\r
- return npart;\r
+ //Int_t npart1 = 0;\r
+ //if(mcparticles1) npart1 = mcparticles1->GetEntriesFast();\r
+ //Int_t npart = npart0;//+npart1;\r
+ return npart0;\r
\r
}\r
\r
AliAODMCParticle* AliAnaElectron::GetMCParticle(Int_t ipart) \r
{\r
//Get the MC particle at position ipart\r
-\r
+ \r
AliAODMCParticle* aodprimary = 0x0;\r
TClonesArray * mcparticles0 = 0x0;\r
- TClonesArray * mcparticles1 = 0x0;\r
-\r
+ //TClonesArray * mcparticles1 = 0x0;\r
+ \r
if(GetReader()->ReadAODMCParticles()){\r
//Get the list of MC particles \r
mcparticles0 = GetReader()->GetAODMCParticles(0);\r
- if(!mcparticles0 && GetDebug() > 0) {\r
- printf("AliAnaElectron::MakeAnalysisFillHistograms() - Standard MCParticles not available!\n");\r
+ if(!mcparticles0) {\r
+ if (GetDebug() > 0) printf("AliAnaElectron::MakeAnalysisFillHistograms() - Standard MCParticles not available!\n");\r
}\r
- if(GetReader()->GetSecondInputAODTree()){\r
- mcparticles1 = GetReader()->GetAODMCParticles(1);\r
- if(!mcparticles1 && GetDebug() > 0) {\r
- printf("AliAnaElectron::MakeAnalysisFillHistograms() - Second input MCParticles not available!\n");\r
+ // if(GetReader()->GetSecondInputAODTree()){\r
+ // mcparticles1 = GetReader()->GetAODMCParticles(1);\r
+ // if(!mcparticles1 && GetDebug() > 0) {\r
+ // printf("AliAnaElectron::MakeAnalysisFillHistograms() - Second input MCParticles not available!\n");\r
+ // }\r
+ // }\r
+ else{\r
+ Int_t npart0 = mcparticles0->GetEntriesFast();\r
+ //Int_t npart1 = 0;\r
+ //if(mcparticles1) npart1 = mcparticles1->GetEntriesFast();\r
+ if(ipart < npart0) aodprimary = (AliAODMCParticle*)mcparticles0->At(ipart);\r
+ //else aodprimary = (AliAODMCParticle*)mcparticles1->At(ipart-npart0);\r
+ if(!aodprimary) {\r
+ printf("AliAnaElectron::GetMCParticle() *** no primary ***: label %d \n", ipart);\r
+ return 0x0;\r
}\r
}\r
-\r
- Int_t npart0 = mcparticles0->GetEntriesFast();\r
- Int_t npart1 = 0;\r
- if(mcparticles1) npart1 = mcparticles1->GetEntriesFast();\r
- if(ipart < npart0) aodprimary = (AliAODMCParticle*)mcparticles0->At(ipart);\r
- else aodprimary = (AliAODMCParticle*)mcparticles1->At(ipart-npart0);\r
- if(!aodprimary) {\r
- printf("AliAnaElectron::GetMCParticle() *** no primary ***: label %d \n", ipart);\r
- return 0x0;\r
- }\r
-\r
} else {\r
printf("AliAnaElectron::GetMCParticle() - Asked for AliAODMCParticle but we have a stack reader.\n");\r
}\r
return aodprimary;\r
-\r
+ \r
}\r
\r
//__________________________________________________________________\r